[MediaWiki-commits] [Gerrit] Use 'rerender' event for generated content in citoid inspector - change (mediawiki...Citoid)
jenkins-bot has submitted this change and it was merged. Change subject: Use 'rerender' event for generated content in citoid inspector .. Use 'rerender' event for generated content in citoid inspector Replace the deprecated and evil 'DOMSubtreeModified' event and, instead, use the generated node's 'rerender' event to update the inspector that the widgets are rendered and ready. We do this by creating a promise within the widget that resolves when the widget is rendered. The inspector can then wait for the promise to resolve before switching the ui to the results panel. * Depends on ooui change I0248b47cca * * Depends on ve-core change I2892409433b6d3 * Change-Id: Iba36b4428c3ab8b704e8ecbafe66be2c188597a3 --- M modules/ve.ui.CiteFromIdGroupWidget.js M modules/ve.ui.CiteFromIdInspector.js M modules/ve.ui.CiteFromIdReferenceWidget.js 3 files changed, 77 insertions(+), 32 deletions(-) Approvals: Trevor Parscal: Looks good to me, approved jenkins-bot: Verified diff --git a/modules/ve.ui.CiteFromIdGroupWidget.js b/modules/ve.ui.CiteFromIdGroupWidget.js index b433527..906bc48 100644 --- a/modules/ve.ui.CiteFromIdGroupWidget.js +++ b/modules/ve.ui.CiteFromIdGroupWidget.js @@ -47,3 +47,22 @@ ve.ui.CiteFromIdGroupWidget.prototype.onItemUpdate = function () { this.emit( 'update' ); }; + +/** + * Clear all items from the group. + * + * Before they are cleared they will be destroyed individually, aborting promises and destroying ui + * surfaces and nodes. + * + * @chainable + */ +ve.ui.CiteFromIdGroupWidget.prototype.clearItems = function () { + var i, len; + + for ( i = 0, len = this.items.length; i len; i++ ) { + this.items[ i ].destroy(); + } + + // Parent method + OO.ui.GroupElement.prototype.clearItems.call( this ); +}; diff --git a/modules/ve.ui.CiteFromIdInspector.js b/modules/ve.ui.CiteFromIdInspector.js index 8700e4e..f83e255 100644 --- a/modules/ve.ui.CiteFromIdInspector.js +++ b/modules/ve.ui.CiteFromIdInspector.js @@ -80,6 +80,7 @@ // Request content language of wiki from citoid service headers: { 'accept-language': mw.config.get( 'wgContentLanguage' ) }, dataType: 'json', + timeout: 20 * 1000, // 20 seconds type: 'GET' } } ); @@ -170,8 +171,7 @@ this.lookupInput.connect( this, { change: 'onLookupInputChange' } ); this.lookupButton.connect( this, { click: 'onLookupButtonClick' } ); this.previewSelectWidget.connect( this, { - choose: 'onPreviewSelectWidgetChoose', - update: 'onPreviewSelectWidgetUpdate' + choose: 'onPreviewSelectWidgetChoose' } ); this.panels.addItems( [ @@ -260,13 +260,6 @@ }; /** - * Respond to item update event in the preview select widget - */ -ve.ui.CiteFromIdInspector.prototype.onPreviewSelectWidgetUpdate = function () { - this.updateSize(); -}; - -/** * Respond to preview select widget choose event */ ve.ui.CiteFromIdInspector.prototype.onPreviewSelectWidgetChoose = function ( item ) { @@ -311,7 +304,6 @@ if ( this.lookupPromise ) { // Abort existing promises this.lookupPromise.abort(); - this.lookupInput.popPending(); this.lookupPromise = null; } this.lookupButton.setDisabled( value === '' ); @@ -429,6 +421,7 @@ if ( this.lookupPromise ) { // Abort existing lookup this.lookupPromise.abort(); + this.lookupPromise = null; this.lookupInput.popPending(); } // Set as pending @@ -448,20 +441,25 @@ .then( // Success function ( searchResults ) { - // Apply staging - inspector.lookupInput.popPending(); - inspector.lookupButton.setDisabled( false ); - inspector.switchPanels( 'result' ); - return inspector.buildTemplateResults( searchResults ); + // Build results + return inspector.buildTemplateResults( searchResults ) + .then( function () { + inspector.switchPanels( 'result' ); + } ); }, // Fail - function () { + function ( type, response ) { + if ( response response.textStatus === 'abort' ) { + return $.Deferred().reject(); + } //
[MediaWiki-commits] [Gerrit] Use 'rerender' event for generated content in citoid inspector - change (mediawiki...Citoid)
Mooeypoo has uploaded a new change for review. https://gerrit.wikimedia.org/r/197774 Change subject: Use 'rerender' event for generated content in citoid inspector .. Use 'rerender' event for generated content in citoid inspector Replace the deprecated and evil 'DOMSubtreeModified' event and, instead, use the generated node's 'rerender' event to update the inspector that the widgets are rendered and ready. We do this by creating a promise within the widget that resolves when the widget is rendered. The inspector can then wait for the promise to resolve before switching the ui to the results panel. Change-Id: Iba36b4428c3ab8b704e8ecbafe66be2c188597a3 --- M modules/ve.ui.CiteFromIdInspector.js M modules/ve.ui.CiteFromIdReferenceWidget.js 2 files changed, 41 insertions(+), 26 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Citoid refs/changes/74/197774/1 diff --git a/modules/ve.ui.CiteFromIdInspector.js b/modules/ve.ui.CiteFromIdInspector.js index 8700e4e..d9016c5 100644 --- a/modules/ve.ui.CiteFromIdInspector.js +++ b/modules/ve.ui.CiteFromIdInspector.js @@ -170,8 +170,7 @@ this.lookupInput.connect( this, { change: 'onLookupInputChange' } ); this.lookupButton.connect( this, { click: 'onLookupButtonClick' } ); this.previewSelectWidget.connect( this, { - choose: 'onPreviewSelectWidgetChoose', - update: 'onPreviewSelectWidgetUpdate' + choose: 'onPreviewSelectWidgetChoose' } ); this.panels.addItems( [ @@ -257,13 +256,6 @@ ve.ui.CiteFromIdInspector.prototype.onFormSubmit = function () { this.executeAction( 'lookup' ); return false; -}; - -/** - * Respond to item update event in the preview select widget - */ -ve.ui.CiteFromIdInspector.prototype.onPreviewSelectWidgetUpdate = function () { - this.updateSize(); }; /** @@ -449,10 +441,12 @@ // Success function ( searchResults ) { // Apply staging - inspector.lookupInput.popPending(); - inspector.lookupButton.setDisabled( false ); - inspector.switchPanels( 'result' ); - return inspector.buildTemplateResults( searchResults ); + inspector.buildTemplateResults( searchResults ) + .then( function () { + inspector.lookupInput.popPending(); + inspector.lookupButton.setDisabled( false ); + inspector.switchPanels( 'result' ); + } ); }, // Fail function () { @@ -474,7 +468,8 @@ * or is rejected if there are any problems with the template name or the internal item. */ ve.ui.CiteFromIdInspector.prototype.buildTemplateResults = function ( searchResults ) { - var i, templateName, citation, result, + var i, templateName, citation, result, refWidget, + renderPromises = [], partPromises = [], inspector = this; @@ -510,18 +505,20 @@ var optionWidgets = []; // Create option widgets for ( i = 0; i inspector.results.length; i++ ) { - optionWidgets.push( new ve.ui.CiteFromIdReferenceWidget( + refWidget = new ve.ui.CiteFromIdReferenceWidget( inspector.getFragment().getSurface().getDocument(), { data: i, transclusionModel: inspector.results[i].transclusionModel, templateName: inspector.results[i].templateName, citeTools: inspector.citeTools - } ) ); + } ); + optionWidgets.push( refWidget ); + renderPromises.push( refWidget.getRenderPromise() ); } // Add to the select widget inspector.previewSelectWidget.addItems( optionWidgets ); - inspector.previewSelectWidget.toggle( true ); + return $.when.apply( $, renderPromises ); } ); }; diff --git a/modules/ve.ui.CiteFromIdReferenceWidget.js b/modules/ve.ui.CiteFromIdReferenceWidget.js index 0223d17..c978d4c 100644 --- a/modules/ve.ui.CiteFromIdReferenceWidget.js +++