3 * Widget defining the behavior used to choose from a set of values
4 * in a single_value group
6 * @extends OO.ui.Widget
7 * @mixins OO.ui.mixin.LabelElement
10 * @param {mw.rcfilters.dm.FilterGroup} model Group model
11 * @param {Object} [config] Configuration object
12 * @cfg {Function} [itemFilter] A filter function for the items from the
13 * model. If not given, all items will be included. The function must
14 * handle item models and return a boolean whether the item is included
15 * or not. Example: function ( itemModel ) { return itemModel.isSelected(); }
17 mw
.rcfilters
.ui
.ValuePickerWidget
= function MwRcfiltersUiValuePickerWidget( model
, config
) {
18 config
= config
|| {};
21 mw
.rcfilters
.ui
.ValuePickerWidget
.parent
.call( this, config
);
23 OO
.ui
.mixin
.LabelElement
.call( this, config
);
26 this.itemFilter
= config
.itemFilter
|| function () { return true; };
28 // Build the selection from the item models
29 this.selectWidget
= new OO
.ui
.ButtonSelectWidget();
30 this.initializeSelectWidget();
33 this.model
.connect( this, { update
: 'onModelUpdate' } );
34 this.selectWidget
.connect( this, { choose
: 'onSelectWidgetChoose' } );
38 .addClass( 'mw-rcfilters-ui-valuePickerWidget' )
41 .addClass( 'mw-rcfilters-ui-valuePickerWidget-title' ),
42 this.selectWidget
.$element
48 OO
.inheritClass( mw
.rcfilters
.ui
.ValuePickerWidget
, OO
.ui
.Widget
);
49 OO
.mixinClass( mw
.rcfilters
.ui
.ValuePickerWidget
, OO
.ui
.mixin
.LabelElement
);
55 * @param {string} name Item name
57 * An item has been chosen
63 * Respond to model update event
65 mw
.rcfilters
.ui
.ValuePickerWidget
.prototype.onModelUpdate = function () {
66 this.selectCurrentModelItem();
70 * Respond to select widget choose event
72 * @param {OO.ui.ButtonOptionWidget} chosenItem Chosen item
75 mw
.rcfilters
.ui
.ValuePickerWidget
.prototype.onSelectWidgetChoose = function ( chosenItem
) {
76 this.emit( 'choose', chosenItem
.getData() );
80 * Initialize the select widget
82 mw
.rcfilters
.ui
.ValuePickerWidget
.prototype.initializeSelectWidget = function () {
83 var items
= this.model
.getItems()
84 .filter( this.itemFilter
)
85 .map( function ( filterItem
) {
86 return new OO
.ui
.ButtonOptionWidget( {
87 data
: filterItem
.getName(),
88 label
: filterItem
.getLabel()
92 this.selectWidget
.clearItems();
93 this.selectWidget
.addItems( items
);
95 this.selectCurrentModelItem();
99 * Select the current item that corresponds with the model item
100 * that is currently selected
102 mw
.rcfilters
.ui
.ValuePickerWidget
.prototype.selectCurrentModelItem = function () {
103 var selectedItem
= this.model
.getSelectedItems()[ 0 ];
105 if ( selectedItem
) {
106 this.selectWidget
.selectItemByData( selectedItem
.getName() );