Esanders has uploaded a new change for review.

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

Change subject: Fix selection after inserting nodes
......................................................................

Fix selection after inserting nodes

Some surface fragment methods return a clone, so make sure
that is written back to this.fragment in dialogs, as this.fragment.select()
is called on teardown.

Functionally depends on If26cc0a2d in core.

Bug: 65706
Change-Id: Ia552b2a4c4c59ffc308a4acdecac78a7803a1c1f
---
M modules/ve-mw/dm/models/ve.dm.MWReferenceModel.js
M modules/ve-mw/dm/models/ve.dm.MWTransclusionModel.js
M modules/ve-mw/ui/dialogs/ve.ui.MWCitationDialog.js
M modules/ve-mw/ui/dialogs/ve.ui.MWMediaInsertDialog.js
M modules/ve-mw/ui/dialogs/ve.ui.MWReferenceDialog.js
M modules/ve-mw/ui/dialogs/ve.ui.MWReferenceListDialog.js
M modules/ve-mw/ui/dialogs/ve.ui.MWTemplateDialog.js
M modules/ve-mw/ui/inspectors/ve.ui.MWExtensionInspector.js
8 files changed, 24 insertions(+), 22 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor 
refs/changes/24/139824/1

diff --git a/modules/ve-mw/dm/models/ve.dm.MWReferenceModel.js 
b/modules/ve-mw/dm/models/ve.dm.MWReferenceModel.js
index e8f4904..8171b28 100644
--- a/modules/ve-mw/dm/models/ve.dm.MWReferenceModel.js
+++ b/modules/ve-mw/dm/models/ve.dm.MWReferenceModel.js
@@ -160,7 +160,6 @@
  */
 ve.dm.MWReferenceModel.prototype.insertReferenceNode = function ( 
surfaceFragment ) {
        surfaceFragment
-               .collapseRangeToEnd()
                .insertContent( [
                        {
                                'type': 'mwReference',
diff --git a/modules/ve-mw/dm/models/ve.dm.MWTransclusionModel.js 
b/modules/ve-mw/dm/models/ve.dm.MWTransclusionModel.js
index cfc72a0..fb1a8c8 100644
--- a/modules/ve-mw/dm/models/ve.dm.MWTransclusionModel.js
+++ b/modules/ve-mw/dm/models/ve.dm.MWTransclusionModel.js
@@ -55,7 +55,6 @@
  */
 ve.dm.MWTransclusionModel.prototype.insertTransclusionNode = function ( 
surfaceFragment ) {
        surfaceFragment
-               .collapseRangeToEnd()
                .insertContent( [
                        {
                                'type': 'mwTransclusionInline',
diff --git a/modules/ve-mw/ui/dialogs/ve.ui.MWCitationDialog.js 
b/modules/ve-mw/ui/dialogs/ve.ui.MWCitationDialog.js
index e76878e..afa83d1 100644
--- a/modules/ve-mw/ui/dialogs/ve.ui.MWCitationDialog.js
+++ b/modules/ve-mw/ui/dialogs/ve.ui.MWCitationDialog.js
@@ -88,17 +88,17 @@
  */
 ve.ui.MWCitationDialog.prototype.applyChanges = function () {
        var item,
-               surfaceFragment = this.getFragment(),
-               surfaceModel = surfaceFragment.getSurface(),
+               surfaceModel = this.getFragment().getSurface(),
                doc = surfaceModel.getDocument(),
                internalList = doc.getInternalList(),
                obj = this.transclusionModel.getPlainObject();
 
        if ( !this.referenceModel ) {
-               this.getFragment().collapseRangeToEnd();
+               // Collapse returns a new fragment, so update this.fragment
+               this.fragment = this.getFragment().collapseRangeToEnd();
                this.referenceModel = new ve.dm.MWReferenceModel();
                this.referenceModel.insertInternalItem( surfaceModel );
-               this.referenceModel.insertReferenceNode( surfaceFragment );
+               this.referenceModel.insertReferenceNode( this.getFragment() );
        }
 
        item = this.referenceModel.findInternalItem( surfaceModel );
@@ -113,7 +113,7 @@
                                // the referenceModel will have already 
initialized the internal node with a
                                // paragraph - getting the range of the item 
covers the entire paragraph so we have
                                // to get the range of it's first (and empty) 
child
-                               surfaceFragment.clone( 
item.getChildren()[0].getRange() )
+                               this.getFragment().clone( 
item.getChildren()[0].getRange() )
                        );
                }
        }
diff --git a/modules/ve-mw/ui/dialogs/ve.ui.MWMediaInsertDialog.js 
b/modules/ve-mw/ui/dialogs/ve.ui.MWMediaInsertDialog.js
index 663a3b6..58fa81e 100644
--- a/modules/ve-mw/ui/dialogs/ve.ui.MWMediaInsertDialog.js
+++ b/modules/ve-mw/ui/dialogs/ve.ui.MWMediaInsertDialog.js
@@ -74,7 +74,8 @@
                        };
                }
 
-               this.getFragment().collapseRangeToEnd().insertContent( [
+               // Collapse returns a new fragment, so update this.fragment
+               this.fragment = 
this.getFragment().collapseRangeToEnd().insertContent( [
                        {
                                'type': 'mwBlockImage',
                                'attributes': {
@@ -93,7 +94,7 @@
                        { 'type': 'mwImageCaption' },
                        { 'type': '/mwImageCaption' },
                        { 'type': '/mwBlockImage' }
-               ] ).collapseRangeToEnd().select();
+               ] );
 
                this.close();
        }
diff --git a/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceDialog.js 
b/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceDialog.js
index b09a5cd..9595b32 100644
--- a/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceDialog.js
+++ b/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceDialog.js
@@ -227,8 +227,7 @@
  * @inheritdoc
  */
 ve.ui.MWReferenceDialog.prototype.applyChanges = function () {
-               var surfaceFragment = this.getFragment(),
-               surfaceModel = surfaceFragment.getSurface();
+       var surfaceModel = this.getFragment().getSurface();
 
        this.referenceModel.setGroup( this.referenceGroupInput.getValue() );
 
@@ -237,7 +236,9 @@
                if ( !this.referenceModel.findInternalItem( surfaceModel ) ) {
                        this.referenceModel.insertInternalItem( surfaceModel );
                }
-               this.referenceModel.insertReferenceNode( surfaceFragment );
+               // Collapse returns a new fragment, so update this.fragment
+               this.fragment = this.getFragment().collapseRangeToEnd();
+               this.referenceModel.insertReferenceNode( this.getFragment() );
        }
 
        // Update internal item
diff --git a/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceListDialog.js 
b/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceListDialog.js
index 0fc022b..541ca4e 100644
--- a/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceListDialog.js
+++ b/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceListDialog.js
@@ -75,8 +75,8 @@
                        );
                }
        } else {
-               // Create new model
-               this.getFragment().collapseRangeToEnd().insertContent( [
+               // Collapse returns a new fragment, so update this.fragment
+               this.fragment = 
this.getFragment().collapseRangeToEnd().insertContent( [
                        {
                                'type': 'mwReferenceList',
                                'attributes': {
@@ -85,7 +85,7 @@
                                }
                        },
                        { 'type': '/mwReferenceList' }
-               ] ).collapseRangeToEnd().select();
+               ] );
        }
 
        // Parent method
diff --git a/modules/ve-mw/ui/dialogs/ve.ui.MWTemplateDialog.js 
b/modules/ve-mw/ui/dialogs/ve.ui.MWTemplateDialog.js
index 11001bf..67686c2 100644
--- a/modules/ve-mw/ui/dialogs/ve.ui.MWTemplateDialog.js
+++ b/modules/ve-mw/ui/dialogs/ve.ui.MWTemplateDialog.js
@@ -290,14 +290,15 @@
  * @inheritdoc
  */
 ve.ui.MWTemplateDialog.prototype.applyChanges = function () {
-       var surfaceFragment = this.getFragment(),
-               surfaceModel = surfaceFragment.getSurface(),
+       var surfaceModel = this.getFragment().getSurface(),
                obj = this.transclusionModel.getPlainObject();
 
        if ( this.selectedNode instanceof ve.dm.MWTransclusionNode ) {
                this.transclusionModel.updateTransclusionNode( surfaceModel, 
this.selectedNode );
        } else if ( obj !== null ) {
-               this.transclusionModel.insertTransclusionNode( surfaceFragment 
);
+               // Collapse returns a new fragment, so update this.fragment
+               this.fragment = this.getFragment().collapseRangeToEnd();
+               this.transclusionModel.insertTransclusionNode( 
this.getFragment() );
        }
 
        // Parent method
diff --git a/modules/ve-mw/ui/inspectors/ve.ui.MWExtensionInspector.js 
b/modules/ve-mw/ui/inspectors/ve.ui.MWExtensionInspector.js
index 66872e3..512b8da 100644
--- a/modules/ve-mw/ui/inspectors/ve.ui.MWExtensionInspector.js
+++ b/modules/ve-mw/ui/inspectors/ve.ui.MWExtensionInspector.js
@@ -147,8 +147,7 @@
        return 
ve.ui.MWExtensionInspector.super.prototype.getTeardownProcess.call( this, data )
                .first( function () {
                        var mwData,
-                               fragment = this.getFragment(),
-                               surfaceModel = fragment.getSurface();
+                               surfaceModel = this.getFragment().getSurface();
 
                        if ( this.constructor.static.allowedEmpty || 
this.input.getValue() !== '' ) {
                                if ( this.node ) {
@@ -168,7 +167,9 @@
                                                'body': {}
                                        };
                                        this.updateMwData( mwData );
-                                       
fragment.collapseRangeToEnd().insertContent( [
+                                       // Collapse returns a new fragment, so 
update this.fragment
+                                       this.fragment = 
this.getFragment().collapseRangeToEnd();
+                                       
this.getFragment().collapseRangeToEnd().insertContent( [
                                                {
                                                        'type': 
this.constructor.static.nodeModel.static.name,
                                                        'attributes': {
@@ -181,7 +182,7 @@
                        } else if ( this.node && 
!this.constructor.static.allowedEmpty ) {
                                // Content has been emptied on a node which 
isn't allowed to
                                // be empty, so delete it.
-                               fragment.removeContent();
+                               this.getFragment().removeContent();
                        }
                }, this );
 };

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia552b2a4c4c59ffc308a4acdecac78a7803a1c1f
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>

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

Reply via email to