wikimedia/mediawiki-core

View on GitHub
resources/src/mediawiki.widgets/MediaSearch/mw.widgets.MediaSearchQueue.js

Summary

Maintainability
C
1 day
Test Coverage
/*!
 * MediaWiki Widgets - MediaSearchQueue class.
 *
 * @copyright 2011-2016 VisualEditor Team and others; see AUTHORS.txt
 * @license The MIT License (MIT); see LICENSE.txt
 */
( function () {

    /**
     * MediaWiki media resource queue.
     *
     * @class
     * @extends mw.widgets.MediaResourceQueue
     *
     * @constructor
     * @param {Object} [config] Configuration options
     * @param {number} config.maxHeight The maximum height of the media, used in the
     *  search call to the API.
     */
    mw.widgets.MediaSearchQueue = function MwWidgetsMediaSearchQueue( config ) {
        config = config || {};

        // Parent constructor
        mw.widgets.MediaSearchQueue.super.call( this, config );
    };

    /* Inheritance */
    OO.inheritClass( mw.widgets.MediaSearchQueue, mw.widgets.MediaResourceQueue );

    /**
     * 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
     */
    mw.widgets.MediaSearchQueue.prototype.setup = function () {
        var queue = this;

        return this.getFileRepos().then( function ( sources ) {
            if ( queue.providers.length === 0 ) {
                // Set up the providers
                for ( var i = 0, len = sources.length; i < len; i++ ) {
                    queue.addProvider( new mw.widgets.MediaSearchProvider(
                        sources[ i ].apiurl,
                        {
                            name: sources[ i ].name,
                            local: sources[ i ].local,
                            scriptDirUrl: sources[ i ].scriptDirUrl,
                            userParams: {
                                gsrsearch: queue.getSearchQuery()
                            },
                            staticParams: {
                                iiurlheight: queue.getMaxHeight()
                            }
                        } )
                    );
                }
            }
        } );
    };

    /**
     * Set the search query.
     *
     * @param {string} searchQuery API search query
     */
    mw.widgets.MediaSearchQueue.prototype.setSearchQuery = function ( searchQuery ) {
        this.setParams( { gsrsearch: searchQuery } );
    };

    /**
     * Get the search query.
     *
     * @return {string} API search query
     */
    mw.widgets.MediaSearchQueue.prototype.getSearchQuery = function () {
        return this.getParams().gsrsearch;
    };
}() );