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

Reply via email to