jenkins-bot has submitted this change and it was merged.
Change subject: Batch gallery imageinfo requests via ImageInfoCache subclass
......................................................................
Batch gallery imageinfo requests via ImageInfoCache subclass
Also get rid of .join( '|' ) for API request parameters per Bartosz
Bug: T147067
Change-Id: If4444cca300d65e28d6fb9003fcac5e076a5129a
---
M extension.json
M modules/ve-mw/dm/models/ve.dm.MWTransclusionModel.js
A modules/ve-mw/init/ve.init.mw.GalleryImageInfoCache.js
M modules/ve-mw/init/ve.init.mw.ImageInfoCache.js
M modules/ve-mw/init/ve.init.mw.LinkCache.js
M modules/ve-mw/init/ve.init.mw.Platform.js
M modules/ve-mw/ui/dialogs/ve.ui.MWGalleryDialog.js
M modules/ve-mw/ui/styles/dialogs/ve.ui.MWGalleryDialog.css
M modules/ve-mw/ui/widgets/ve.ui.MWCategoryWidget.js
M modules/ve-mw/ui/widgets/ve.ui.MWTemplateTitleInputWidget.js
10 files changed, 70 insertions(+), 30 deletions(-)
Approvals:
Jforrester: Looks good to me, approved
Esanders: Looks good to me, but someone else must approve
jenkins-bot: Verified
diff --git a/extension.json b/extension.json
index bc9c784..afe3f0a 100644
--- a/extension.json
+++ b/extension.json
@@ -463,6 +463,7 @@
"modules/ve-mw/init/ve.init.mw.ApiResponseCache.js",
"modules/ve-mw/init/ve.init.mw.LinkCache.js",
"modules/ve-mw/init/ve.init.mw.ImageInfoCache.js",
+
"modules/ve-mw/init/ve.init.mw.GalleryImageInfoCache.js",
"modules/ve-mw/init/ve.init.mw.Platform.js",
"modules/ve-mw/init/ve.init.mw.Platform.init.js",
"modules/ve-mw/init/ve.init.mw.Target.js",
diff --git a/modules/ve-mw/dm/models/ve.dm.MWTransclusionModel.js
b/modules/ve-mw/dm/models/ve.dm.MWTransclusionModel.js
index 6268fd9..f316126 100644
--- a/modules/ve-mw/dm/models/ve.dm.MWTransclusionModel.js
+++ b/modules/ve-mw/dm/models/ve.dm.MWTransclusionModel.js
@@ -298,7 +298,7 @@
ve.dm.MWTransclusionModel.prototype.fetchRequest = function ( titles,
specs, queue ) {
var xhr = new mw.Api().get( {
action: 'templatedata',
- titles: titles.join( '|' ),
+ titles: titles,
lang: mw.config.get( 'wgUserLanguage' ),
redirects: '1'
} ).done( this.fetchRequestDone.bind( this, titles, specs ) );
diff --git a/modules/ve-mw/init/ve.init.mw.GalleryImageInfoCache.js
b/modules/ve-mw/init/ve.init.mw.GalleryImageInfoCache.js
new file mode 100644
index 0000000..1466d58
--- /dev/null
+++ b/modules/ve-mw/init/ve.init.mw.GalleryImageInfoCache.js
@@ -0,0 +1,40 @@
+/*!
+ * VisualEditor MediaWiki Initialization GalleryImageInfoCache class.
+ *
+ * @copyright 2011-2016 VisualEditor Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+/**
+ * Get thumbnail URL information about gallery images.
+ *
+ * @class
+ * @extends ve.init.mw.ImageInfoCache
+ * @constructor
+ */
+ve.init.mw.GalleryImageInfoCache = function VeInitMwGalleryImageInfoCache() {
+ ve.init.mw.GalleryImageInfoCache.super.call( this );
+};
+
+/* Inheritance */
+
+OO.inheritClass( ve.init.mw.GalleryImageInfoCache, ve.init.mw.ImageInfoCache );
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+ve.init.mw.GalleryImageInfoCache.prototype.getRequestPromise = function (
subqueue ) {
+ return new mw.Api().get(
+ {
+ action: 'query',
+ prop: 'imageinfo',
+ iiprop: 'url',
+ titles: subqueue,
+ iiurlwidth: 200,
+ iiurlheight: 200
+ },
+ { type: 'POST' }
+ );
+};
diff --git a/modules/ve-mw/init/ve.init.mw.ImageInfoCache.js
b/modules/ve-mw/init/ve.init.mw.ImageInfoCache.js
index 5977691..a7750ac 100644
--- a/modules/ve-mw/init/ve.init.mw.ImageInfoCache.js
+++ b/modules/ve-mw/init/ve.init.mw.ImageInfoCache.js
@@ -45,7 +45,7 @@
prop: 'imageinfo',
indexpageids: '1',
iiprop: 'size|mediatype',
- titles: subqueue.join( '|' )
+ titles: subqueue
},
{ type: 'POST' }
);
diff --git a/modules/ve-mw/init/ve.init.mw.LinkCache.js
b/modules/ve-mw/init/ve.init.mw.LinkCache.js
index 92413a1..7ee46a7 100644
--- a/modules/ve-mw/init/ve.init.mw.LinkCache.js
+++ b/modules/ve-mw/init/ve.init.mw.LinkCache.js
@@ -146,7 +146,7 @@
pilimit: subqueue.length,
wbptterms: 'description',
ppprop: 'disambiguation',
- titles: subqueue.join( '|' ),
+ titles: subqueue,
'continue': ''
} );
};
diff --git a/modules/ve-mw/init/ve.init.mw.Platform.js
b/modules/ve-mw/init/ve.init.mw.Platform.js
index 97c157a..3b2316a 100644
--- a/modules/ve-mw/init/ve.init.mw.Platform.js
+++ b/modules/ve-mw/init/ve.init.mw.Platform.js
@@ -29,6 +29,7 @@
this.parsedMessages = {};
this.linkCache = new ve.init.mw.LinkCache();
this.imageInfoCache = new ve.init.mw.ImageInfoCache();
+ this.galleryImageInfoCache = new ve.init.mw.GalleryImageInfoCache();
};
/* Inheritance */
diff --git a/modules/ve-mw/ui/dialogs/ve.ui.MWGalleryDialog.js
b/modules/ve-mw/ui/dialogs/ve.ui.MWGalleryDialog.js
index 23a6d0e..93f1b83 100644
--- a/modules/ve-mw/ui/dialogs/ve.ui.MWGalleryDialog.js
+++ b/modules/ve-mw/ui/dialogs/ve.ui.MWGalleryDialog.js
@@ -279,7 +279,7 @@
ve.ui.MWGalleryDialog.prototype.getSetupProcess = function ( data ) {
return ve.ui.MWGalleryDialog.super.prototype.getSetupProcess.call(
this, data )
.next( function () {
- var titlesString, title, titleText, imageTitles, mode,
+ var title, titleText, imageTitles, mode,
caption, widths, heights, perrow,
showFilename, classes, styles,
namespaceIds = mw.config.get( 'wgNamespaceIds'
),
@@ -290,7 +290,6 @@
// If editing an existing gallery, populate with the
images...
if ( this.selectedNode ) {
imageTitles = [];
-
// Get image and caption data
// TODO: Can be multiple pipes. See parser.php
-> renderImageGallery in MediaWiki
$.trim( this.selectedNode.getAttribute( 'mw'
).body.extsrc )
@@ -322,9 +321,8 @@
);
// Populate menu and edit panels
- titlesString = imageTitles.join( '|' );
this.imagesPromise = this.requestImages( {
- titlesString: titlesString
+ titles: imageTitles
} ).done( function () {
dialog.onHighlightItem();
} );
@@ -421,34 +419,34 @@
* @param {Object} options Options for the request
*/
ve.ui.MWGalleryDialog.prototype.requestImages = function ( options ) {
- return new mw.Api().get( {
- action: 'query',
- prop: 'imageinfo',
- iiprop: 'url',
- iiurlwidth: options.width || 200,
- // Matches height of this.$highlightedImage
- iiurlheight: options.height || 200,
- titles: options.titlesString
- } ).done( this.onRequestImagesSuccess.bind( this ) );
+ var i, len,
+ dialog = this,
+ promises = [];
+ for ( i = 0, len = options.titles.length; i < len; i++ ) {
+ promises.push( ve.init.platform.galleryImageInfoCache.get(
options.titles[ i ] ) );
+ }
+ return $.when.apply( $, promises )
+ .done( function () {
+ var resp = {};
+ for ( i = 0; i < len; i++ ) {
+ resp[ options.titles[ i ] ] = arguments[ i ];
+ }
+ dialog.onRequestImagesSuccess( resp );
+ } );
};
/**
* Create items for the returned images and add them to the gallery group
*
- * @param {Object} deferred jQuery deferred object
* @param {Object} response jQuery response object
*/
-ve.ui.MWGalleryDialog.prototype.onRequestImagesSuccess = function ( deferred,
response ) {
- var index, title,
+ve.ui.MWGalleryDialog.prototype.onRequestImagesSuccess = function ( response )
{
+ var title,
thumbUrls = {},
- items = [],
- pages = response.responseJSON.query.pages;
+ items = [];
- // Store object of titles to thumbUrls
- for ( index in pages ) {
- if ( pages[ index ].imageinfo ) {
- thumbUrls[ pages[ index ].title ] = pages[ index
].imageinfo[ 0 ].thumburl;
- }
+ for ( title in response ) {
+ thumbUrls[ title ] = response[ title ].thumburl;
}
if ( this.initialImageData.length > 0 ) {
@@ -489,7 +487,7 @@
// Request image
this.requestImages( {
- titlesString: title
+ titles: [ title ]
} ).done( function () {
// populate edit panel with the new image
diff --git a/modules/ve-mw/ui/styles/dialogs/ve.ui.MWGalleryDialog.css
b/modules/ve-mw/ui/styles/dialogs/ve.ui.MWGalleryDialog.css
index 99e5d26..cf0398d 100644
--- a/modules/ve-mw/ui/styles/dialogs/ve.ui.MWGalleryDialog.css
+++ b/modules/ve-mw/ui/styles/dialogs/ve.ui.MWGalleryDialog.css
@@ -29,7 +29,7 @@
.ve-ui-mwGalleryDialog-highlighted-image {
background-color: #f9f9f9;
width: 100%;
- /* Matches default height in requestImages */
+ /* Matches default height in GalleryImageInfoCache */
height: 200px;
background-repeat: no-repeat;
background-position: 50% 50%;
diff --git a/modules/ve-mw/ui/widgets/ve.ui.MWCategoryWidget.js
b/modules/ve-mw/ui/widgets/ve.ui.MWCategoryWidget.js
index 81709da..51229cf 100644
--- a/modules/ve-mw/ui/widgets/ve.ui.MWCategoryWidget.js
+++ b/modules/ve-mw/ui/widgets/ve.ui.MWCategoryWidget.js
@@ -274,7 +274,7 @@
return new mw.Api().get( {
action: 'query',
prop: 'pageprops',
- titles: categoryNamesToQuery.join( '|' ),
+ titles: categoryNamesToQuery,
ppprop: 'hiddencat',
redirects: ''
} ).then( function ( result ) {
diff --git a/modules/ve-mw/ui/widgets/ve.ui.MWTemplateTitleInputWidget.js
b/modules/ve-mw/ui/widgets/ve.ui.MWTemplateTitleInputWidget.js
index 93e812e..ef052d2 100644
--- a/modules/ve-mw/ui/widgets/ve.ui.MWTemplateTitleInputWidget.js
+++ b/modules/ve-mw/ui/widgets/ve.ui.MWTemplateTitleInputWidget.js
@@ -87,7 +87,7 @@
if ( titles.length > 0 ) {
params = {
action: 'templatedata',
- titles: titles.join( '|' ),
+ titles: titles,
lang: mw.config.get(
'wgUserLanguage' )
};
if ( widget.showRedirects ) {
--
To view, visit https://gerrit.wikimedia.org/r/313605
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: If4444cca300d65e28d6fb9003fcac5e076a5129a
Gerrit-PatchSet: 8
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Alex Monk <[email protected]>
Gerrit-Reviewer: Bartosz DziewoĆski <[email protected]>
Gerrit-Reviewer: DLynch <[email protected]>
Gerrit-Reviewer: Esanders <[email protected]>
Gerrit-Reviewer: Jforrester <[email protected]>
Gerrit-Reviewer: Tchanders <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits