3 * Widget defining the behavior used to choose from a set of values
4 * in a single_value group
6 * @class mw.rcfilters.ui.ValuePickerWidget
7 * @extends OO.ui.Widget
8 * @mixins OO.ui.mixin.LabelElement
11 * @param {mw.rcfilters.dm.FilterGroup} model Group model
12 * @param {Object} [config] Configuration object
13 * @cfg {Function} [itemFilter] A filter function for the items from the
14 * model. If not given, all items will be included. The function must
15 * handle item models and return a boolean whether the item is included
16 * or not. Example: function ( itemModel ) { return itemModel.isSelected(); }
18 var ValuePickerWidget
= function MwRcfiltersUiValuePickerWidget( model
, config
) {
19 config
= config
|| {};
22 ValuePickerWidget
.parent
.call( this, config
);
24 OO
.ui
.mixin
.LabelElement
.call( this, config
);
27 this.itemFilter
= config
.itemFilter
|| function () {
31 // Build the selection from the item models
32 this.selectWidget
= new OO
.ui
.ButtonSelectWidget();
33 this.initializeSelectWidget();
36 this.model
.connect( this, { update
: 'onModelUpdate' } );
37 this.selectWidget
.connect( this, { choose
: 'onSelectWidgetChoose' } );
41 .addClass( 'mw-rcfilters-ui-valuePickerWidget' )
44 .addClass( 'mw-rcfilters-ui-valuePickerWidget-title' ),
45 this.selectWidget
.$element
51 OO
.inheritClass( ValuePickerWidget
, OO
.ui
.Widget
);
52 OO
.mixinClass( ValuePickerWidget
, OO
.ui
.mixin
.LabelElement
);
58 * @param {string} name Item name
60 * An item has been chosen
66 * Respond to model update event
68 ValuePickerWidget
.prototype.onModelUpdate = function () {
69 this.selectCurrentModelItem();
73 * Respond to select widget choose event
75 * @param {OO.ui.ButtonOptionWidget} chosenItem Chosen item
78 ValuePickerWidget
.prototype.onSelectWidgetChoose = function ( chosenItem
) {
79 this.emit( 'choose', chosenItem
.getData() );
83 * Initialize the select widget
85 ValuePickerWidget
.prototype.initializeSelectWidget = function () {
86 var items
= this.model
.getItems()
87 .filter( this.itemFilter
)
88 .map( function ( filterItem
) {
89 return new OO
.ui
.ButtonOptionWidget( {
90 data
: filterItem
.getName(),
91 label
: filterItem
.getLabel()
95 this.selectWidget
.clearItems();
96 this.selectWidget
.addItems( items
);
98 this.selectCurrentModelItem();
102 * Select the current item that corresponds with the model item
103 * that is currently selected
105 ValuePickerWidget
.prototype.selectCurrentModelItem = function () {
106 var selectedItem
= this.model
.findSelectedItems()[ 0 ];
108 if ( selectedItem
) {
109 this.selectWidget
.selectItemByData( selectedItem
.getName() );
113 module
.exports
= ValuePickerWidget
;