Current File : /home/jvzmxxx/wiki1/extensions/MobileFrontend/resources/mobile.search.util/extendSearchParams.js
( function ( M, $ ) {

	/**
	 * Extends the API query parameters to include those parameters required to also fetch Wikibase
	 * descriptions and appropriately sized thumbnail images.
	 *
	 * This function wraps `$.extend` with some Wikibase-specific configuration variable management
	 * but, like `$.extend`, is variadic and so can be used as a replacement for it in search
	 * gateways, e.g.
	 *
	 * ```
	 * var params = extendSearchParams(
	 *   'nearby',
	 *   baseParams,
	 *   specializedParams,
	 *   moreSpecializedParams
	 * );
	 * ```
	 *
	 * @param {string} feature The name of the feature
	 * @throws {Error} If `feature` isn't one that shows Wikidata descriptions. See the
	 *  `wgMFDisplayWikibaseDescriptions` configuration variable for detail
	 * @return {Object}
	 * @ignore
	 */
	function extendSearchParams( feature ) {
		var displayWikibaseDescriptions = mw.config.get( 'wgMFDisplayWikibaseDescriptions', {} ),
			args,
			result;

		if ( !displayWikibaseDescriptions.hasOwnProperty( feature ) ) {
			throw new Error( '"' + feature + '" isn\'t a feature that shows Wikibase descriptions.' );
		}

		// Construct the arguments for a call to `$.extend` such that if it were hand-written, then it
		// would look like the following:
		//
		// ```
		// var result = $.extend( {
		//   prop: []
		// }, params, /* ..., */ mw.config.get( 'wgMFSearchAPIParams' ) );
		// ```
		args = Array.prototype.slice.call( arguments, 1 );
		args.unshift( {
			prop: []
		} );
		args.push( mw.config.get( 'wgMFSearchAPIParams' ) );

		result = $.extend.apply( {}, args );
		result.prop = result.prop.concat( mw.config.get( 'wgMFQueryPropModules' ) );

		if ( displayWikibaseDescriptions[feature] ) {
			if ( $.inArray( 'pageterms', result.prop ) === -1 ) {
				result.prop.push( 'pageterms' );
			}

			// Add "description" to the wbptterms terms parameter, if needed
			if ( result.wbptterms ) {
				if ( result.wbptterms.indexOf( 'description' ) === -1 ) {
					result.wbptterms += '|description';
				}
			} else {
				result.wbptterms = 'description';
			}
		}

		return result;
	}

	M.define( 'mobile.search.util/extendSearchParams', extendSearchParams );

}( mw.mobileFrontend, jQuery ) );