/*!
* MediaWiki Widgets - TitlesMultiselectWidget class.
*
* @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
* @license The MIT License (MIT); see LICENSE.txt
*/
( function () {
/**
* @classdesc Titles multiselect widget.
*
* @class
* @extends OO.ui.MenuTagMultiselectWidget
* @mixes OO.ui.mixin.RequestManager
* @mixes OO.ui.mixin.PendingElement
* @mixes mw.widgets.TitleWidget
*
* @constructor
* @description Create an mw.widgets.TitlesMultiselectWidget object.
* @param {Object} [config] Configuration options
*/
mw.widgets.TitlesMultiselectWidget = function MwWidgetsTitlesMultiselectWidget( config ) {
// Parent constructor
mw.widgets.TitlesMultiselectWidget.super.call( this, $.extend( true,
{
allowEditTags: false
},
config
) );
// Mixin constructors
mw.widgets.TitleWidget.call( this, $.extend( true, {
addQueryInput: true,
highlightSearchQuery: false
}, config ) );
OO.ui.mixin.RequestManager.call( this, config );
OO.ui.mixin.PendingElement.call( this, $.extend( true, {}, config, {
$pending: this.$handle
} ) );
// Validate from mw.widgets.TitleWidget
this.input.setValidation( this.isQueryValid.bind( this ) );
// TODO limit max tag length to this.maxLength
// Initialization
this.$element
.addClass( 'mw-widgets-titlesMultiselectWidget' );
this.menu.$element
// For consistency, use the same classes as TitleWidget
// expects for menu results
.addClass( 'mw-widget-titleWidget-menu' )
.toggleClass( 'mw-widget-titleWidget-menu-withImages', this.showImages )
.toggleClass( 'mw-widget-titleWidget-menu-withDescriptions', this.showDescriptions );
if ( 'name' in config ) {
// Use this instead of , because hidden inputs do not have separate
// 'value' and 'defaultValue' properties. The script on Special:Preferences
// (mw.special.preferences.confirmClose) checks this property to see if a field was changed.
this.$hiddenInput = $( '