Merge "More magic word translations for Catalan (ca)"
[lhc/web/wiklou.git] / resources / src / mediawiki.rcfilters / ui / mw.rcfilters.ui.SavedLinksListWidget.js
1 ( function ( mw ) {
2 /**
3 * Quick links widget
4 *
5 * @extends OO.ui.Widget
6 *
7 * @constructor
8 * @param {mw.rcfilters.Controller} controller Controller
9 * @param {mw.rcfilters.dm.SavedQueriesModel} model View model
10 * @param {Object} [config] Configuration object
11 * @cfg {jQuery} [$overlay] A jQuery object serving as overlay for popups
12 */
13 mw.rcfilters.ui.SavedLinksListWidget = function MwRcfiltersUiSavedLinksListWidget( controller, model, config ) {
14 config = config || {};
15
16 // Parent
17 mw.rcfilters.ui.SavedLinksListWidget.parent.call( this, config );
18
19 this.controller = controller;
20 this.model = model;
21 this.$overlay = config.$overlay || this.$element;
22
23 this.placeholderItem = new OO.ui.DecoratedOptionWidget( {
24 classes: [ 'mw-rcfilters-ui-savedLinksListWidget-placeholder' ],
25 label: mw.msg( 'rcfilters-quickfilters-placeholder' ),
26 icon: 'unClip'
27 } );
28 // The only reason we're using "ButtonGroupWidget" here is that
29 // straight-out "GroupWidget" is a mixin and cannot be initialized
30 // on its own, so we need something to be its widget.
31 this.menu = new OO.ui.ButtonGroupWidget( {
32 classes: [ 'mw-rcfilters-ui-savedLinksListWidget-menu' ],
33 items: [ this.placeholderItem ]
34 } );
35 this.button = new OO.ui.PopupButtonWidget( {
36 classes: [ 'mw-rcfilters-ui-savedLinksListWidget-button' ],
37 label: mw.msg( 'rcfilters-quickfilters' ),
38 icon: 'unClip',
39 indicator: 'down',
40 $overlay: this.$overlay,
41 popup: {
42 width: 300,
43 anchor: false,
44 align: 'forwards',
45 $autoCloseIgnore: this.$overlay,
46 $content: this.menu.$element
47 }
48 } );
49
50 this.menu.aggregate( {
51 click: 'menuItemClick',
52 'delete': 'menuItemDelete',
53 'default': 'menuItemDefault',
54 edit: 'menuItemEdit'
55 } );
56
57 // Events
58 this.model.connect( this, {
59 add: 'onModelAddItem',
60 remove: 'onModelRemoveItem'
61 } );
62 this.menu.connect( this, {
63 menuItemClick: 'onMenuItemClick',
64 menuItemDelete: 'onMenuItemRemove',
65 menuItemDefault: 'onMenuItemDefault',
66 menuItemEdit: 'onMenuItemEdit'
67 } );
68
69 this.placeholderItem.toggle( this.model.isEmpty() );
70 // Initialize
71 this.$element
72 .addClass( 'mw-rcfilters-ui-savedLinksListWidget' )
73 .append( this.button.$element );
74 };
75
76 /* Initialization */
77 OO.inheritClass( mw.rcfilters.ui.SavedLinksListWidget, OO.ui.Widget );
78
79 /**
80 * Respond to menu item click event
81 *
82 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
83 */
84 mw.rcfilters.ui.SavedLinksListWidget.prototype.onMenuItemClick = function ( item ) {
85 this.controller.applySavedQuery( item.getID() );
86 this.button.popup.toggle( false );
87 };
88
89 /**
90 * Respond to menu item remove event
91 *
92 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
93 */
94 mw.rcfilters.ui.SavedLinksListWidget.prototype.onMenuItemRemove = function ( item ) {
95 this.controller.removeSavedQuery( item.getID() );
96 };
97
98 /**
99 * Respond to menu item default event
100 *
101 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
102 * @param {boolean} isDefault Item is default
103 */
104 mw.rcfilters.ui.SavedLinksListWidget.prototype.onMenuItemDefault = function ( item, isDefault ) {
105 this.controller.setDefaultSavedQuery( isDefault ? item.getID() : null );
106 };
107
108 /**
109 * Respond to menu item edit event
110 *
111 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
112 * @param {string} newLabel New label
113 */
114 mw.rcfilters.ui.SavedLinksListWidget.prototype.onMenuItemEdit = function ( item, newLabel ) {
115 this.controller.renameSavedQuery( item.getID(), newLabel );
116 };
117
118 /**
119 * Respond to menu add item event
120 *
121 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
122 */
123 mw.rcfilters.ui.SavedLinksListWidget.prototype.onModelAddItem = function ( item ) {
124 if ( this.menu.getItemFromData( item.getID() ) ) {
125 return;
126 }
127
128 this.menu.addItems( [
129 new mw.rcfilters.ui.SavedLinksListItemWidget( item, { $overlay: this.$overlay } )
130 ] );
131 this.placeholderItem.toggle( this.model.isEmpty() );
132 };
133
134 /**
135 * Respond to menu remove item event
136 *
137 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
138 */
139 mw.rcfilters.ui.SavedLinksListWidget.prototype.onModelRemoveItem = function ( item ) {
140 this.menu.removeItems( [ this.menu.getItemFromData( item.getID() ) ] );
141 this.placeholderItem.toggle( this.model.isEmpty() );
142 };
143 }( mediaWiki ) );