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