includes/api: Replace implicitly-Bugzilla bug numbers with Phab ones
[lhc/web/wiklou.git] / resources / src / mediawiki.rcfilters / ui / mw.rcfilters.ui.FilterGroupWidget.js
1 ( function ( mw, $ ) {
2 /**
3 * A group of filters
4 *
5 * @extends OO.ui.Widget
6 * @mixins OO.ui.mixin.GroupWidget
7 * @mixins OO.ui.mixin.LabelElement
8 *
9 * @constructor
10 * @param {mw.rcfilters.Controller} controller Controller
11 * @param {mw.rcfilters.dm.FilterGroup} model Filter group model
12 * @param {Object} config Configuration object
13 */
14 mw.rcfilters.ui.FilterGroupWidget = function MwRcfiltersUiFilterGroupWidget( controller, model, config ) {
15 config = config || {};
16
17 // Parent
18 mw.rcfilters.ui.FilterGroupWidget.parent.call( this, config );
19
20 this.controller = controller;
21 this.model = model;
22
23 // Mixin constructors
24 OO.ui.mixin.GroupWidget.call( this, config );
25 OO.ui.mixin.LabelElement.call( this, $.extend( {}, config, {
26 label: this.model.getTitle(),
27 $label: $( '<div>' )
28 .addClass( 'mw-rcfilters-ui-filterGroupWidget-title' )
29 } ) );
30
31 // Populate
32 this.populateFromModel();
33
34 this.model.connect( this, { update: 'onModelUpdate' } );
35
36 this.$element
37 .addClass( 'mw-rcfilters-ui-filterGroupWidget' )
38 .append(
39 this.$label,
40 this.$group
41 .addClass( 'mw-rcfilters-ui-filterGroupWidget-group' )
42 );
43 };
44
45 /* Initialization */
46
47 OO.inheritClass( mw.rcfilters.ui.FilterGroupWidget, OO.ui.Widget );
48 OO.mixinClass( mw.rcfilters.ui.FilterGroupWidget, OO.ui.mixin.GroupWidget );
49 OO.mixinClass( mw.rcfilters.ui.FilterGroupWidget, OO.ui.mixin.LabelElement );
50
51 /**
52 * Respond to model update event
53 */
54 mw.rcfilters.ui.FilterGroupWidget.prototype.onModelUpdate = function () {
55 this.$element.toggleClass(
56 'mw-rcfilters-ui-filterGroupWidget-active',
57 this.model.isActive()
58 );
59 };
60
61 mw.rcfilters.ui.FilterGroupWidget.prototype.populateFromModel = function () {
62 var widget = this;
63
64 this.addItems(
65 this.model.getItems().map( function ( filterItem ) {
66 return new mw.rcfilters.ui.FilterItemWidget(
67 widget.controller,
68 filterItem,
69 {
70 label: filterItem.getLabel(),
71 description: filterItem.getDescription()
72 }
73 );
74 } )
75 );
76 };
77
78 /**
79 * Get the group name
80 *
81 * @return {string} Group name
82 */
83 mw.rcfilters.ui.FilterGroupWidget.prototype.getName = function () {
84 return this.model.getName();
85 };
86 }( mediaWiki, jQuery ) );