Esanders has uploaded a new change for review.
https://gerrit.wikimedia.org/r/173807
Change subject: Create 'preserveGenerated' mode for cloneElements and use in
copy
......................................................................
Create 'preserveGenerated' mode for cloneElements and use in copy
The copy operation should preserve the 'generated' internal property
so that source style is preserved.
Bug: 72426
Change-Id: I77e2a9936459a15f6fbb94817ffcad97ef75dcd6
---
M src/dm/lineardata/ve.dm.ElementLinearData.js
M src/dm/ve.dm.Node.js
M tests/dm/ve.dm.Node.test.js
3 files changed, 39 insertions(+), 8 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/VisualEditor/VisualEditor
refs/changes/07/173807/1
diff --git a/src/dm/lineardata/ve.dm.ElementLinearData.js
b/src/dm/lineardata/ve.dm.ElementLinearData.js
index 1f71b5e..50d3827 100644
--- a/src/dm/lineardata/ve.dm.ElementLinearData.js
+++ b/src/dm/lineardata/ve.dm.ElementLinearData.js
@@ -938,13 +938,15 @@
* Run all elements through getClonedElement(). This should be done if
* you intend to insert the sliced data back into the document as a copy
* of the original data (e.g. for copy and paste).
+ *
+ * @param {boolean} preserveGenerated Preserve internal.generated properties
of elements
*/
-ve.dm.ElementLinearData.prototype.cloneElements = function () {
+ve.dm.ElementLinearData.prototype.cloneElements = function ( preserveGenerated
) {
var i, len, node;
for ( i = 0, len = this.getLength(); i < len; i++ ) {
if ( this.isOpenElementData( i ) ) {
node = ve.dm.nodeFactory.create( this.getType( i ),
this.getData( i ) );
- this.data[i] = node.getClonedElement();
+ this.data[i] = ve.dm.Node.static.cloneElement(
this.getData( i ), preserveGenerated );
}
}
};
diff --git a/src/dm/ve.dm.Node.js b/src/dm/ve.dm.Node.js
index 70567d4..8dd1a0d 100644
--- a/src/dm/ve.dm.Node.js
+++ b/src/dm/ve.dm.Node.js
@@ -242,6 +242,7 @@
* tags; unless we're in a content location, in which case we have no choice
* but to generate an inline element.
*
+ * @static
* @param {HTMLElement[]} domElements DOM elements being converted
* @param {ve.dm.Converter} converter Converter object
* @returns {boolean} The element is inline
@@ -264,19 +265,20 @@
allTagsInline;
};
-/* Methods */
-
/**
* Get a clone of the node's document data element.
*
* The attributes object will be deep-copied and the .internal.generated
* property will be removed if present.
*
+ * @static
+ * @param {Object} element Element object
+ * @param {boolean} preserveGenerated Preserve internal.generated property of
element
* @returns {Object} Cloned element object
*/
-ve.dm.Node.prototype.getClonedElement = function () {
- var clone = ve.copy( this.element );
- if ( clone.internal ) {
+ve.dm.Node.static.cloneElement = function ( element, preserveGenerated ) {
+ var clone = ve.copy( element );
+ if ( !preserveGenerated && clone.internal ) {
delete clone.internal.generated;
if ( ve.isEmptyObject( clone.internal ) ) {
delete clone.internal;
@@ -285,6 +287,17 @@
return clone;
};
+/* Methods */
+
+/**
+ * @see #static-cloneElement
+ * @param {boolean} preserveGenerated Preserve internal.generated property of
element
+ * @returns {Object} Cloned element object
+ */
+ve.dm.Node.prototype.getClonedElement = function ( preserveGenerated ) {
+ return this.constructor.static.cloneElement( this.element,
preserveGenerated );
+};
+
/**
* @inheritdoc ve.Node
*/
diff --git a/tests/dm/ve.dm.Node.test.js b/tests/dm/ve.dm.Node.test.js
index e9267e3..65e8803 100644
--- a/tests/dm/ve.dm.Node.test.js
+++ b/tests/dm/ve.dm.Node.test.js
@@ -168,6 +168,22 @@
}
},
clone: {
+ type: 'foo',
+ internal: {
+ generated: 'wrapper'
+ }
+ },
+ preserveGenerated: true,
+ msg: 'internal.generated not removed if
preserveGenerated set'
+ },
+ {
+ original: {
+ type: 'foo',
+ internal: {
+ generated: 'wrapper'
+ }
+ },
+ clone: {
type: 'foo'
},
msg: 'internal property is removed if it only
contained .generated'
@@ -217,6 +233,6 @@
for ( i = 0; i < cases.length; i++ ) {
node = new ve.dm.NodeStub( cases[i].original );
- assert.deepEqual( node.getClonedElement(), cases[i].clone,
cases[i].msg );
+ assert.deepEqual( node.getClonedElement(
cases[i].preserveGenerated ), cases[i].clone, cases[i].msg );
}
} );
--
To view, visit https://gerrit.wikimedia.org/r/173807
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I77e2a9936459a15f6fbb94817ffcad97ef75dcd6
Gerrit-PatchSet: 1
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits