Oliverb has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/159317

Change subject: Provisional fix to prevent structural changes to a table via 
delete+merge.
......................................................................

Provisional fix to prevent structural changes to a table via delete+merge.

Change-Id: I5229e55e0e83b29f1329f4c378caff77f2db0581
---
M src/ce/nodes/ve.ce.TableCellNode.js
M src/ce/nodes/ve.ce.TableNode.js
M src/ce/nodes/ve.ce.TableRowNode.js
M src/ce/nodes/ve.ce.TableSectionNode.js
M src/ce/ve.ce.Node.js
M src/ce/ve.ce.Surface.js
M src/dm/nodes/ve.dm.TableCellNode.js
M src/dm/nodes/ve.dm.TableNode.js
M src/dm/nodes/ve.dm.TableRowNode.js
M src/dm/nodes/ve.dm.TableSectionNode.js
10 files changed, 48 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/VisualEditor/VisualEditor 
refs/changes/17/159317/1

diff --git a/src/ce/nodes/ve.ce.TableCellNode.js 
b/src/ce/nodes/ve.ce.TableCellNode.js
index 183b212..563d1f8 100644
--- a/src/ce/nodes/ve.ce.TableCellNode.js
+++ b/src/ce/nodes/ve.ce.TableCellNode.js
@@ -36,6 +36,8 @@
 
 ve.ce.TableCellNode.static.name = 'tableCell';
 
+ve.ce.TableCellNode.static.mergeOnDelete = false;
+
 /* Methods */
 
 /**
diff --git a/src/ce/nodes/ve.ce.TableNode.js b/src/ce/nodes/ve.ce.TableNode.js
index 9ff21bf..c50f92b 100644
--- a/src/ce/nodes/ve.ce.TableNode.js
+++ b/src/ce/nodes/ve.ce.TableNode.js
@@ -209,6 +209,9 @@
 
 ve.ce.TableNode.static.tagName = 'table';
 
+ve.ce.TableNode.static.mergeOnDelete = false;
+
+
 /* Registration */
 
 ve.ce.nodeFactory.register( ve.ce.TableNode );
diff --git a/src/ce/nodes/ve.ce.TableRowNode.js 
b/src/ce/nodes/ve.ce.TableRowNode.js
index c0eebad..76f35bb 100644
--- a/src/ce/nodes/ve.ce.TableRowNode.js
+++ b/src/ce/nodes/ve.ce.TableRowNode.js
@@ -29,6 +29,8 @@
 
 ve.ce.TableRowNode.static.tagName = 'tr';
 
+ve.ce.TableRowNode.static.mergeOnDelete = false;
+
 /* Registration */
 
 ve.ce.nodeFactory.register( ve.ce.TableRowNode );
diff --git a/src/ce/nodes/ve.ce.TableSectionNode.js 
b/src/ce/nodes/ve.ce.TableSectionNode.js
index 72107ba..866c043 100644
--- a/src/ce/nodes/ve.ce.TableSectionNode.js
+++ b/src/ce/nodes/ve.ce.TableSectionNode.js
@@ -30,6 +30,8 @@
 
 ve.ce.TableSectionNode.static.name = 'tableSection';
 
+ve.ce.TableSectionNode.static.mergeOnDelete = false;
+
 /* Methods */
 
 /**
diff --git a/src/ce/ve.ce.Node.js b/src/ce/ve.ce.Node.js
index 75cd487..e4d049f 100644
--- a/src/ce/ve.ce.Node.js
+++ b/src/ce/ve.ce.Node.js
@@ -47,6 +47,9 @@
  */
 ve.ce.Node.static.splitOnEnter = false;
 
+ve.ce.Node.static.mergeOnDelete = true;
+
+
 /**
  * Whether this node type can be focused.
  *
@@ -249,6 +252,15 @@
 };
 
 /**
+ * Check if a node can be merged via delete.
+ *
+ * @returns {boolean} Node can be merged
+ */
+ve.ce.Node.prototype.mergeOnDelete = function () {
+       return this.constructor.static.mergeOnDelete;
+};
+
+/**
  * Release all memory.
  */
 ve.ce.Node.prototype.destroy = function () {
diff --git a/src/ce/ve.ce.Surface.js b/src/ce/ve.ce.Surface.js
index 84f96a9..7a48e77 100644
--- a/src/ce/ve.ce.Surface.js
+++ b/src/ce/ve.ce.Surface.js
@@ -2128,6 +2128,17 @@
                                model.setSelection( 
startNode.getModel().getOuterRange() );
                                return;
                        }
+                       // HACK: preventing a deletion of table nodes
+                       // TODO: there are more cases which alter a tables 
structure, which must not happen:
+                       // e.g., delete with non-collapsed selection, cut, 
paster
+                       else if ( !startNode.mergeOnDelete() ) {
+                               model.setSelection(
+                                       this.getDocument().getRelativeRange(
+                                               model.getSelection(), 
direction, 'character', false
+                                       )
+                               );
+                               return;
+                       }
                }
                if ( rangeToRemove.isCollapsed() ) {
                        // For instance beginning or end of the document.
diff --git a/src/dm/nodes/ve.dm.TableCellNode.js 
b/src/dm/nodes/ve.dm.TableCellNode.js
index 63b4e21..1f97324 100644
--- a/src/dm/nodes/ve.dm.TableCellNode.js
+++ b/src/dm/nodes/ve.dm.TableCellNode.js
@@ -91,6 +91,10 @@
        }
 };
 
+ve.dm.TableCellNode.prototype.canBeMergedWith = function() {
+       return false;
+};
+
 /**
  * Creates data that can be inserted into the model to create a new table cell.
  *
diff --git a/src/dm/nodes/ve.dm.TableNode.js b/src/dm/nodes/ve.dm.TableNode.js
index 1107fe6..8be206f 100644
--- a/src/dm/nodes/ve.dm.TableNode.js
+++ b/src/dm/nodes/ve.dm.TableNode.js
@@ -42,6 +42,10 @@
        this.emit('tableStructureChange', context);
 };
 
+ve.dm.TableNode.prototype.canBeMergedWith = function() {
+       return false;
+};
+
 /**
  * Provides a cell iterator that allows convenient traversal regardless of
  * the structure with respect to sections.
diff --git a/src/dm/nodes/ve.dm.TableRowNode.js 
b/src/dm/nodes/ve.dm.TableRowNode.js
index 7d53836..9d4066f 100644
--- a/src/dm/nodes/ve.dm.TableRowNode.js
+++ b/src/dm/nodes/ve.dm.TableRowNode.js
@@ -58,6 +58,10 @@
        }
 };
 
+ve.dm.TableRowNode.prototype.canBeMergedWith = function() {
+       return false;
+};
+
 /**
  * Creates data that can be inserted into the model to create a new table row.
  *
diff --git a/src/dm/nodes/ve.dm.TableSectionNode.js 
b/src/dm/nodes/ve.dm.TableSectionNode.js
index 32c0a6f..4446c84 100644
--- a/src/dm/nodes/ve.dm.TableSectionNode.js
+++ b/src/dm/nodes/ve.dm.TableSectionNode.js
@@ -80,6 +80,10 @@
        }
 };
 
+ve.dm.TableSectionNode.prototype.canBeMergedWith = function() {
+       return false;
+};
+
 /* Registration */
 
 ve.dm.modelRegistry.register( ve.dm.TableSectionNode );

-- 
To view, visit https://gerrit.wikimedia.org/r/159317
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I5229e55e0e83b29f1329f4c378caff77f2db0581
Gerrit-PatchSet: 1
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Oliverb <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to