2 * Widget defining the behavior used to choose from a set of values
3 * in a single_value group
5 * @class mw.rcfilters.ui.ValuePickerWidget
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 var ValuePickerWidget
= function MwRcfiltersUiValuePickerWidget( model
, config
) {
18 config
= config
|| {};
21 ValuePickerWidget
.parent
.call( this, config
);
23 OO
.ui
.mixin
.LabelElement
.call( this, config
);
26 this.itemFilter
= config
.itemFilter
|| function () {
30 // Build the selection from the item models
31 this.selectWidget
= new OO
.ui
.ButtonSelectWidget();
32 this.initializeSelectWidget();
35 this.model
.connect( this, { update
: 'onModelUpdate' } );
36 this.selectWidget
.connect( this, { choose
: 'onSelectWidgetChoose' } );
40 .addClass( 'mw-rcfilters-ui-valuePickerWidget' )
43 .addClass( 'mw-rcfilters-ui-valuePickerWidget-title' ),
44 this.selectWidget
.$element
50 OO
.inheritClass( ValuePickerWidget
, OO
.ui
.Widget
);
51 OO
.mixinClass( ValuePickerWidget
, OO
.ui
.mixin
.LabelElement
);
57 * @param {string} name Item name
59 * An item has been chosen
65 * Respond to model update event
67 ValuePickerWidget
.prototype.onModelUpdate = function () {
68 this.selectCurrentModelItem();
72 * Respond to select widget choose event
74 * @param {OO.ui.ButtonOptionWidget} chosenItem Chosen item
77 ValuePickerWidget
.prototype.onSelectWidgetChoose = function ( chosenItem
) {
78 this.emit( 'choose', chosenItem
.getData() );
82 * Initialize the select widget
84 ValuePickerWidget
.prototype.initializeSelectWidget = function () {
85 var items
= this.model
.getItems()
86 .filter( this.itemFilter
)
87 .map( function ( filterItem
) {
88 return new OO
.ui
.ButtonOptionWidget( {
89 data
: filterItem
.getName(),
90 label
: filterItem
.getLabel()
94 this.selectWidget
.clearItems();
95 this.selectWidget
.addItems( items
);
97 this.selectCurrentModelItem();
101 * Select the current item that corresponds with the model item
102 * that is currently selected
104 ValuePickerWidget
.prototype.selectCurrentModelItem = function () {
105 var selectedItem
= this.model
.findSelectedItems()[ 0 ];
107 if ( selectedItem
) {
108 this.selectWidget
.selectItemByData( selectedItem
.getName() );
112 module
.exports
= ValuePickerWidget
;