jenkins-bot has submitted this change and it was merged.

Change subject: Prevent superfluous setPage calls by introducing a lock
......................................................................


Prevent superfluous setPage calls by introducing a lock

Also, use new getClosestPage method in ooui to select which page should
be selected next when a page is removed.

Change-Id: I7ce4d2ca55aac72f3aaa14c98c7189a440598e08
---
M modules/ve-mw/ui/dialogs/ve.ui.MWAdvancedTransclusionDialog.js
M modules/ve-mw/ui/dialogs/ve.ui.MWTransclusionDialog.js
2 files changed, 29 insertions(+), 18 deletions(-)

Approvals:
  Catrope: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/modules/ve-mw/ui/dialogs/ve.ui.MWAdvancedTransclusionDialog.js 
b/modules/ve-mw/ui/dialogs/ve.ui.MWAdvancedTransclusionDialog.js
index 4460284..3971512 100644
--- a/modules/ve-mw/ui/dialogs/ve.ui.MWAdvancedTransclusionDialog.js
+++ b/modules/ve-mw/ui/dialogs/ve.ui.MWAdvancedTransclusionDialog.js
@@ -47,7 +47,7 @@
                part = this.transclusion.getPartFromId( item.getData() );
                // Move part to new location, and if dialog is loaded switch to 
new part page
                promise = this.transclusion.addPart( part, ve.indexOf( part, 
parts ) + places );
-               if ( this.loaded ) {
+               if ( this.loaded && !this.preventReselection ) {
                        promise.done( ve.bind( this.setPageByName, this, 
part.getId() ) );
                }
        }
@@ -146,7 +146,7 @@
                        parts.length;
                // Add the part, and if dialog is loaded switch to part page
                promise = this.transclusion.addPart( part, index );
-               if ( this.loaded ) {
+               if ( this.loaded && !this.preventReselection ) {
                        promise.done( ve.bind( this.setPageByName, this, 
part.getId() ) );
                }
        }
diff --git a/modules/ve-mw/ui/dialogs/ve.ui.MWTransclusionDialog.js 
b/modules/ve-mw/ui/dialogs/ve.ui.MWTransclusionDialog.js
index ff15920..d0cdc4c 100644
--- a/modules/ve-mw/ui/dialogs/ve.ui.MWTransclusionDialog.js
+++ b/modules/ve-mw/ui/dialogs/ve.ui.MWTransclusionDialog.js
@@ -23,6 +23,7 @@
        this.node = null;
        this.transclusion = null;
        this.loaded = false;
+       this.preventReselection = false;
 };
 
 /* Inheritance */
@@ -42,12 +43,12 @@
  * @param {ve.dm.MWTransclusionPartModel} added Added part
  */
 ve.ui.MWTransclusionDialog.prototype.onReplacePart = function ( removed, added 
) {
-       var i, len, page, name, names, params, selected,
-               removePages = [],
-               select = false;
+       var i, len, page, name, names, params, partPage, reselect,
+               removePages = [];
 
        if ( removed ) {
                // Remove parameter pages of removed templates
+               partPage = this.bookletLayout.getPage( removed.getId() );
                if ( removed instanceof ve.dm.MWTemplateModel ) {
                        params = removed.getParameters();
                        for ( name in params ) {
@@ -55,14 +56,10 @@
                        }
                        removed.disconnect( this );
                }
-               if ( this.bookletLayout.isOutlined() ) {
-                       // Auto-select new part if placeholder is still selected
-                       selected = 
this.bookletLayout.getOutline().getSelectedItem();
-                       if ( selected && removed.getId() === selected.getData() 
) {
-                               select = true;
-                       }
+               if ( this.loaded && !this.preventReselection && 
partPage.isActive() ) {
+                       reselect = this.bookletLayout.getClosestPage( partPage 
);
                }
-               removePages.push( this.bookletLayout.getPage( removed.getId() ) 
);
+               removePages.push( partPage );
                this.bookletLayout.removePages( removePages );
        }
 
@@ -76,22 +73,32 @@
                }
                if ( page ) {
                        this.bookletLayout.addPages( [ page ], 
this.transclusion.getIndex( added ) );
-                       if ( select && this.loaded ) {
+                       if ( reselect ) {
+                               // Use added page instead of closest page
                                this.setPageByName( added.getId() );
                        }
                        // Add existing params to templates (the template might 
be being moved)
                        if ( added instanceof ve.dm.MWTemplateModel ) {
                                names = added.getParameterNames();
                                params = added.getParameters();
+                               // Prevent selection changes
+                               this.preventReselection = true;
                                for ( i = 0, len = names.length; i < len; i++ ) 
{
                                        this.onAddParameter( params[names[i]] );
                                }
+                               this.preventReselection = false;
                                added.connect( this, { 'add': 'onAddParameter', 
'remove': 'onRemoveParameter' } );
+                               if ( names.length ) {
+                                       this.setPageByName( 
params[names[0]].getId() );
+                               }
                        }
 
                        // Add required params to user created templates
                        if ( added instanceof ve.dm.MWTemplateModel && 
this.loaded ) {
+                               // Prevent selection changes
+                               this.preventReselection = true;
                                added.addRequiredParameters();
+                               this.preventReselection = false;
                                names = added.getParameterNames();
                                params = added.getParameters();
                                if ( names.length ) {
@@ -99,6 +106,8 @@
                                }
                        }
                }
+       } else if ( reselect ) {
+               this.setPageByName( reselect.getName() );
        }
 };
 
@@ -116,7 +125,7 @@
                page = new ve.ui.MWParameterPlaceholderPage( param, 
param.getId(), { '$': this.$ } );
        }
        this.bookletLayout.addPages( [ page ], this.transclusion.getIndex( 
param ) );
-       if ( this.loaded ) {
+       if ( this.loaded && !this.preventReselection ) {
                this.setPageByName( param.getId() );
        }
 };
@@ -127,10 +136,12 @@
  * @param {ve.dm.MWParameterModel} param Removed param
  */
 ve.ui.MWTransclusionDialog.prototype.onRemoveParameter = function ( param ) {
-       this.bookletLayout.removePages( [ this.bookletLayout.getPage( 
param.getId() ) ] );
-       if ( this.loaded ) {
-               // Return to template page
-               this.setPageByName( param.getTemplate().getId() );
+       var page = this.bookletLayout.getPage( param.getId() ),
+               reselect = this.bookletLayout.getClosestPage( page );
+
+       this.bookletLayout.removePages( [ page ] );
+       if ( this.loaded && !this.preventReselection ) {
+               this.setPageByName( reselect.getName() );
        }
 };
 

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I7ce4d2ca55aac72f3aaa14c98c7189a440598e08
Gerrit-PatchSet: 6
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Trevor Parscal <tpars...@wikimedia.org>
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