mediawiki-extensions-Visual.../modules/ve-mw/dm/models/ve.dm.MWMediaResourceQueue.js
Mark A. Hershberger 7d5e5ec9a9 MWMediaResourceProvider: Use exist instead of bool check on API values
In the MediaWiki API, booleans exist or don't exist (with an empty string),
you can't check "if (bool)..." since that will always be false.  The API has
a newer formatversion=2 that fixes this but we're not using that yet.

Also update the defaultSource placeholder to match the API response. If one
would only update defaultSource without the 'if'-fix, one can reproduce T66822
on a local wiki (JSON-P request instead of JSON).

Bug: T66822
Change-Id: I5a8ab1136325c33c62982c0869fa14ca2fb26034
2015-06-11 17:29:36 +01:00

114 lines
2.7 KiB
JavaScript

/*!
* VisualEditor DataModel MWMediaResourceQueue class.
*
* @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt
* @license The MIT License (MIT); see LICENSE.txt
*/
/**
* MediaWiki media resource queue.
*
* @class
* @extends ve.dm.APIResultsQueue
*
* @constructor
* @param {Object} [config] Configuration options
* @cfg {number} maxHeight The maximum height of the media, used in the
* search call to the API.
*/
ve.dm.MWMediaResourceQueue = function VeDmMWMediaResourceQueue( config ) {
config = config || {};
// Parent constructor
ve.dm.MWMediaResourceQueue.super.call( this, config );
this.searchQuery = '';
this.maxHeight = config.maxHeight || 200;
};
/* Inheritance */
OO.inheritClass( ve.dm.MWMediaResourceQueue, ve.dm.APIResultsQueue );
/**
* Override parent method to set up the providers according to
* the file repos
*
* @return {jQuery.Promise} Promise that resolves when the resources are set up
*/
ve.dm.MWMediaResourceQueue.prototype.setup = function () {
var i, len,
queue = this;
return this.getFileRepos().then( function ( sources ) {
if ( queue.providers.length === 0 ) {
// Set up the providers
for ( i = 0, len = sources.length; i < len; i++ ) {
queue.providers.push( new ve.dm.MWMediaResourceProvider(
sources[i].apiurl,
{
name: sources[i].name,
local: sources[i].local,
scriptDirUrl: sources[i].scriptDirUrl,
userParams: {
gsrsearch: queue.getSearchQuery()
},
staticParams: {
action: 'query',
iiurlheight: queue.getMaxHeight(),
generator: 'search',
gsrnamespace: 6,
continue: '',
iiprop: 'dimensions|url|mediatype|extmetadata|timestamp',
prop: 'imageinfo'
}
} )
);
}
}
} );
};
/**
* Fetch the file repos.
*
* @return {jQuery.Promise} Promise that resolves when the resources are set up
*/
ve.dm.MWMediaResourceQueue.prototype.getFileRepos = function () {
var defaultSource = [ {
url: mw.util.wikiScript( 'api' ),
local: ''
} ];
if ( !this.fileRepoPromise ) {
this.fileRepoPromise = new mw.Api().get( {
action: 'query',
meta: 'filerepoinfo'
} ).then(
function ( resp ) {
return resp.query && resp.query.repos || defaultSource;
},
function () {
return $.Deferred().resolve( defaultSource );
}
);
}
return this.fileRepoPromise;
};
/**
* Get the search query
* @return {string} API search query
*/
ve.dm.MWMediaResourceQueue.prototype.getSearchQuery = function () {
var params = this.getParams();
return params.gsrsearch;
};
/**
* Get image maximum height
* @return {string} Image max height
*/
ve.dm.MWMediaResourceQueue.prototype.getMaxHeight = function () {
return this.maxHeight;
};