jenkins-bot has submitted this change and it was merged. Change subject: Handle undoing of reference group changes ......................................................................
Handle undoing of reference group changes By removing from and re-inserting into the InternalList when the right attributes change, rather than trying to hack it into the model's updateInternalItem (which won't get run on undo). Bug: T71119 Change-Id: Iaf7a3127576b94666e05691902d2782394d24afb --- M modules/ve-mw/dm/models/ve.dm.MWReferenceModel.js M modules/ve-mw/dm/nodes/ve.dm.MWReferenceNode.js 2 files changed, 26 insertions(+), 14 deletions(-) Approvals: Catrope: Looks good to me, approved jenkins-bot: Verified diff --git a/modules/ve-mw/dm/models/ve.dm.MWReferenceModel.js b/modules/ve-mw/dm/models/ve.dm.MWReferenceModel.js index 241af70..1e879c7 100644 --- a/modules/ve-mw/dm/models/ve.dm.MWReferenceModel.js +++ b/modules/ve-mw/dm/models/ve.dm.MWReferenceModel.js @@ -137,9 +137,6 @@ // Update the group name of all references nodes with the same group and key txs = []; for ( i = 0, len = refNodes.length; i < len; i++ ) { - // HACK: Removing and re-inserting nodes to/from the internal list is done - // because internal list doesn't yet support attribute changes - refNodes[i].removeFromInternalList(); txs.push( ve.dm.Transaction.newFromAttributeChanges( doc, refNodes[i].getOuterRange().start, @@ -147,10 +144,6 @@ ) ); } surfaceModel.change( txs ); - // HACK: Same as above, internal list issues - for ( i = 0, len = refNodes.length; i < len; i++ ) { - refNodes[i].addToInternalList(); - } this.listGroup = listGroup; } // Update internal node content diff --git a/modules/ve-mw/dm/nodes/ve.dm.MWReferenceNode.js b/modules/ve-mw/dm/nodes/ve.dm.MWReferenceNode.js index fdba5c8..e7de412 100644 --- a/modules/ve-mw/dm/nodes/ve.dm.MWReferenceNode.js +++ b/modules/ve-mw/dm/nodes/ve.dm.MWReferenceNode.js @@ -25,7 +25,8 @@ // Event handlers this.connect( this, { root: 'onRoot', - unroot: 'onUnroot' + unroot: 'onUnroot', + attributeChange: 'onAttributeChange' } ); }; @@ -305,10 +306,13 @@ */ ve.dm.MWReferenceNode.prototype.addToInternalList = function () { if ( this.getRoot() === this.getDocument().getDocumentNode() ) { + this.registeredListGroup = this.element.attributes.listGroup; + this.registeredListKey = this.element.attributes.listKey; + this.registeredListIndex = this.element.attributes.listIndex; this.getDocument().getInternalList().addNode( - this.element.attributes.listGroup, - this.element.attributes.listKey, - this.element.attributes.listIndex, + this.registeredListGroup, + this.registeredListKey, + this.registeredListIndex, this ); } @@ -319,9 +323,9 @@ */ ve.dm.MWReferenceNode.prototype.removeFromInternalList = function () { this.getDocument().getInternalList().removeNode( - this.element.attributes.listGroup, - this.element.attributes.listKey, - this.element.attributes.listIndex, + this.registeredListGroup, + this.registeredListKey, + this.registeredListIndex, this ); }; @@ -335,6 +339,21 @@ return clone; }; +ve.dm.MWReferenceNode.prototype.onAttributeChange = function ( key, from, to ) { + if ( + ( key !== 'listGroup' && key !== 'listKey' ) || + ( key === 'listGroup' && this.registeredListGroup === to ) || + ( key === 'listKey' && this.registeredListKey === to ) + ) { + return; + } + + // Need the old list keys and indexes, so we register them in addToInternalList + // They've already been updated in this.element.attributes before this code runs + this.removeFromInternalList(); + this.addToInternalList(); +}; + /* Registration */ ve.dm.modelRegistry.register( ve.dm.MWReferenceNode ); -- To view, visit https://gerrit.wikimedia.org/r/195901 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Iaf7a3127576b94666e05691902d2782394d24afb Gerrit-PatchSet: 2 Gerrit-Project: mediawiki/extensions/VisualEditor Gerrit-Branch: master Gerrit-Owner: Alex Monk <kren...@gmail.com> Gerrit-Reviewer: Calak <calakw...@yahoo.com> Gerrit-Reviewer: Catrope <roan.katt...@gmail.com> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits