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 +++ b/modules/ve.ui.CiteFromIdReferenceWidget.js @@ -5,7 +5,7 @@ * @param {Object} config Dialog configuration object */ ve.ui.CiteFromIdReferenceWidget = function VeUiCiteFromIdReferenceWidget( documentModel, config ) { - var i, len, icon, item, title, uiSurface, + var i, len, icon, item, title, uiSurface, node, widget = this; config = config || {}; @@ -15,6 +15,8 @@ this.template = config.template; this.transclusionModel = config.transclusionModel; this.title = this.templateName; + + this.renderPromise = $.Deferred(); // Parent constructor ve.ui.CiteFromIdReferenceWidget.super.call( this, config ); @@ -57,19 +59,18 @@ { type: '/internalList' } ] ) ); + // HACK: We need the view to be initialized in order for the 'rerender' event + // to be emitted on the generated node. + uiSurface.getView().initialize(); + node = uiSurface.getView().getDocument().getDocumentNode().getChildren()[0]; + node.connect( this, { rerender: 'onNodeRerender' } ); + this.$referenceWrapper = $( '<div>' ) .addClass( 've-ui-citeFromIdReferenceWidget-wrapper' ) - // HACK: We want to update the size of the inspector according to the - // size of this widget, and for that we need to know when the generated - // node is done generating. This should be fixed at some point to not - // require listening DOMSubtreeModified event. - .on( 'DOMSubtreeModified', ve.debounce( function () { - widget.emit( 'update' ); - }, 100 ) ) .on( 'click mousedown', function ( e ) { e.preventDefault(); } ) - .append( uiSurface.view.documentView.documentNode.children[0].$element ); + .append( node.$element ); // Display the preview title = new OO.ui.LabelWidget( { @@ -98,9 +99,26 @@ /* Methods */ /** + * Respond to finalizing the rendering of the generatedContents in the + * node by resolving the render promise. + */ +ve.ui.CiteFromIdReferenceWidget.prototype.onNodeRerender = function () { + this.renderPromise.resolve(); +}; + +/** * Respond to insert button click event * @fires insert */ ve.ui.CiteFromIdReferenceWidget.prototype.onInsertButtonClick = function () { this.emit( 'insert', this.data ); }; + +/** + * Get the render promise associated with the node. + * @return {jQuery.Promise} Rendering promise resolved when the rendering + * of the node is completed. + */ +ve.ui.CiteFromIdReferenceWidget.prototype.getRenderPromise = function () { + return this.renderPromise; +}; -- To view, visit https://gerrit.wikimedia.org/r/197774 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iba36b4428c3ab8b704e8ecbafe66be2c188597a3 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Citoid Gerrit-Branch: master Gerrit-Owner: Mooeypoo <mor...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits