Merge "Remove perf tracking code that was moved to WikimediaEvents in Ib300af5c"
[lhc/web/wiklou.git] / resources / src / mediawiki.rcfilters / ui / mw.rcfilters.ui.FilterItemHighlightButton.js
1 ( function ( mw, $ ) {
2 /**
3 * A button to configure highlight for a filter item
4 *
5 * @extends OO.ui.PopupButtonWidget
6 *
7 * @constructor
8 * @param {mw.rcfilters.Controller} controller RCFilters controller
9 * @param {mw.rcfilters.dm.FilterItem} model Filter item model
10 * @param {Object} [config] Configuration object
11 */
12 mw.rcfilters.ui.FilterItemHighlightButton = function MwRcfiltersUiFilterItemHighlightButton( controller, model, config ) {
13 config = config || {};
14
15 this.colorPickerWidget = new mw.rcfilters.ui.HighlightColorPickerWidget( controller, model );
16
17 // Parent
18 mw.rcfilters.ui.FilterItemHighlightButton.parent.call( this, $.extend( true, {}, config, {
19 icon: 'highlight',
20 indicator: 'down',
21 popup: {
22 anchor: false,
23 padded: true,
24 align: 'backwards',
25 horizontalPosition: 'end',
26 $floatableContainer: this.$element,
27 width: 290,
28 $content: this.colorPickerWidget.$element
29 }
30 } ) );
31
32 this.controller = controller;
33 this.model = model;
34
35 // Event
36 this.model.connect( this, { update: 'updateUiBasedOnModel' } );
37 this.colorPickerWidget.connect( this, { chooseColor: 'onChooseColor' } );
38 // This lives inside a MenuOptionWidget, which intercepts mousedown
39 // to select the item. We want to prevent that when we click the highlight
40 // button
41 this.$element.on( 'mousedown', function ( e ) { e.stopPropagation(); } );
42
43 this.updateUiBasedOnModel();
44
45 this.$element
46 .addClass( 'mw-rcfilters-ui-filterItemHighlightButton' );
47 };
48
49 /* Initialization */
50
51 OO.inheritClass( mw.rcfilters.ui.FilterItemHighlightButton, OO.ui.PopupButtonWidget );
52
53 /* Static Properties */
54
55 /**
56 * @static
57 */
58 mw.rcfilters.ui.FilterItemHighlightButton.static.cancelButtonMouseDownEvents = true;
59
60 /* Methods */
61
62 /**
63 * Respond to item model update event
64 */
65 mw.rcfilters.ui.FilterItemHighlightButton.prototype.updateUiBasedOnModel = function () {
66 var currentColor = this.model.getHighlightColor(),
67 widget = this;
68
69 this.$icon.toggleClass(
70 'mw-rcfilters-ui-filterItemHighlightButton-circle',
71 currentColor !== null
72 );
73
74 mw.rcfilters.HighlightColors.forEach( function ( c ) {
75 widget.$icon
76 .toggleClass(
77 'mw-rcfilters-ui-filterItemHighlightButton-circle-color-' + c,
78 c === currentColor
79 );
80 } );
81 };
82
83 mw.rcfilters.ui.FilterItemHighlightButton.prototype.onChooseColor = function () {
84 this.popup.toggle( false );
85 };
86 }( mediaWiki, jQuery ) );