[MediaWiki-commits] [Gerrit] Use 'rerender' event for generated content in citoid inspector - change (mediawiki...Citoid)

2015-03-26 Thread jenkins-bot (Code Review)
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)

2015-03-18 Thread Mooeypoo (Code Review)
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
+++