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