mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Math
synced 2024-11-30 18:35:12 +00:00
f382be8562
npm: * eslint-config-wikimedia: 0.25.1 → 0.26.0 * grunt-banana-checker: 0.11.0 → 0.11.1 * wdio-mediawiki: 2.1.0 → 2.5.0 * get-func-name: 2.0.0 → 2.0.2 * https://github.com/advisories/GHSA-4q6p-r6v2-jvc5 * postcss: 8.4.30 → 8.4.35 * https://github.com/advisories/GHSA-7fh5-64p2-3v2j Change-Id: I5b01fa01c11a57a180b50bf2f8b3275e69d75f1c
109 lines
3 KiB
JavaScript
109 lines
3 KiB
JavaScript
( function () {
|
|
'use strict';
|
|
|
|
/**
|
|
* Creates an mw.widgets.MathWbEntitySelector object. This class was inspired by
|
|
* mw.widgets.TitleInputWidget.
|
|
*
|
|
* @class
|
|
* @extends OO.ui.TextInputWidget
|
|
* @mixin mw.widgets.TitleWidget
|
|
* @mixin OO.ui.mixin.LookupElement
|
|
*
|
|
* @constructor
|
|
* @param {Object} [config] Configuration options
|
|
* @cfg {mw.Api} [api] API object to use, creates a mw.ForeignApi instance if not specified
|
|
*/
|
|
mw.widgets.MathWbEntitySelector = function ( config ) {
|
|
config = config || {};
|
|
this.api = config.api;
|
|
if ( !this.api ) {
|
|
this.api = new mw.ForeignApi(
|
|
mw.config.get( 'wgMathEntitySelectorUrl' ),
|
|
{ anonymous: true } );
|
|
}
|
|
OO.ui.TextInputWidget.call( this, config );
|
|
OO.ui.mixin.LookupElement.call( this, config );
|
|
this.$element.addClass( 'mw-widget-MathWbEntitySelector' );
|
|
};
|
|
OO.inheritClass( mw.widgets.MathWbEntitySelector, OO.ui.TextInputWidget );
|
|
OO.mixinClass( mw.widgets.MathWbEntitySelector, OO.ui.mixin.LookupElement );
|
|
|
|
/**
|
|
* Get the API object for wikibase requests
|
|
*
|
|
* @return {mw.Api} MediaWiki API
|
|
*/
|
|
mw.widgets.MathWbEntitySelector.prototype.getApi = function () {
|
|
return this.api;
|
|
};
|
|
|
|
/**
|
|
* Get the current value of the search query
|
|
*
|
|
* @abstract
|
|
* @return {string} Search query
|
|
*/
|
|
mw.widgets.MathWbEntitySelector.prototype.getQueryValue = function () {
|
|
return this.getValue();
|
|
};
|
|
|
|
/**
|
|
* @inheritdoc OO.ui.mixin.LookupElement
|
|
*/
|
|
mw.widgets.MathWbEntitySelector.prototype.getLookupCacheDataFromResponse = function ( response ) {
|
|
return response.search || {};
|
|
};
|
|
|
|
/**
|
|
* @inheritdoc OO.ui.mixin.LookupElement
|
|
*/
|
|
mw.widgets.MathWbEntitySelector.prototype.getLookupMenuOptionsFromData = function ( response ) {
|
|
return response.map( function ( res ) {
|
|
return new OO.ui.MenuOptionWidget( { data: res.id, label: res.label, title: res.description } );
|
|
} );
|
|
};
|
|
|
|
/**
|
|
* Get API params for a given query
|
|
*
|
|
* @param {string} query User query
|
|
* @return {Object} API params
|
|
*/
|
|
mw.widgets.MathWbEntitySelector.prototype.getApiParams = function ( query ) {
|
|
|
|
return {
|
|
action: 'wbsearchentities',
|
|
search: query,
|
|
format: 'json',
|
|
errorformat: 'plaintext',
|
|
language: mw.config.get( 'wgContentLanguage' ),
|
|
uselang: mw.config.get( 'wgContentLanguage' )
|
|
};
|
|
};
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
mw.widgets.MathWbEntitySelector.prototype.getLookupRequest = function () {
|
|
const api = this.getApi(),
|
|
query = this.getQueryValue(),
|
|
widget = this,
|
|
promiseAbortObject = {
|
|
abort: function () {
|
|
// Do nothing. This is just so OOUI doesn't break due to abort being undefined.
|
|
// see also mw.widgets.TitleWidget.prototype.getSuggestionsPromise
|
|
}
|
|
},
|
|
req = api.get( widget.getApiParams( query ) );
|
|
promiseAbortObject.abort = req.abort.bind( req );
|
|
return req.promise( promiseAbortObject );
|
|
};
|
|
|
|
// eslint-disable-next-line no-jquery/no-global-selector
|
|
const $wbEntitySelector = $( '#wbEntitySelector' );
|
|
if ( $wbEntitySelector.length ) {
|
|
OO.ui.infuse( $wbEntitySelector );
|
|
}
|
|
}() );
|