5 * @extends OO.ui.Widget
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
13 mw
.rcfilters
.ui
.SavedLinksListWidget
= function MwRcfiltersUiSavedLinksListWidget( controller
, model
, config
) {
14 var $labelNoEntries
= $( '<div>' )
17 .addClass( 'mw-rcfilters-ui-savedLinksListWidget-placeholder-title' )
18 .text( mw
.msg( 'rcfilters-quickfilters-placeholder-title' ) ),
20 .addClass( 'mw-rcfilters-ui-savedLinksListWidget-placeholder-description' )
21 .text( mw
.msg( 'rcfilters-quickfilters-placeholder-description' ) )
24 config
= config
|| {};
27 mw
.rcfilters
.ui
.SavedLinksListWidget
.parent
.call( this, config
);
29 this.controller
= controller
;
31 this.$overlay
= config
.$overlay
|| this.$element
;
33 this.placeholderItem
= new OO
.ui
.DecoratedOptionWidget( {
34 classes
: [ 'mw-rcfilters-ui-savedLinksListWidget-placeholder' ],
35 label
: $labelNoEntries
,
38 // The only reason we're using "ButtonGroupWidget" here is that
39 // straight-out "GroupWidget" is a mixin and cannot be initialized
40 // on its own, so we need something to be its widget.
41 this.menu
= new OO
.ui
.ButtonGroupWidget( {
42 classes
: [ 'mw-rcfilters-ui-savedLinksListWidget-menu' ],
43 items
: [ this.placeholderItem
]
45 this.button
= new OO
.ui
.PopupButtonWidget( {
46 classes
: [ 'mw-rcfilters-ui-savedLinksListWidget-button' ],
47 label
: mw
.msg( 'rcfilters-quickfilters' ),
50 $overlay
: this.$overlay
,
55 $autoCloseIgnore
: this.$overlay
,
56 $content
: this.menu
.$element
60 this.menu
.aggregate( {
61 click
: 'menuItemClick',
62 'delete': 'menuItemDelete',
63 'default': 'menuItemDefault',
68 this.model
.connect( this, {
69 add
: 'onModelAddItem',
70 remove
: 'onModelRemoveItem'
72 this.menu
.connect( this, {
73 menuItemClick
: 'onMenuItemClick',
74 menuItemDelete
: 'onMenuItemRemove',
75 menuItemDefault
: 'onMenuItemDefault',
76 menuItemEdit
: 'onMenuItemEdit'
79 this.placeholderItem
.toggle( this.model
.isEmpty() );
82 .addClass( 'mw-rcfilters-ui-savedLinksListWidget' )
83 .append( this.button
.$element
);
87 OO
.inheritClass( mw
.rcfilters
.ui
.SavedLinksListWidget
, OO
.ui
.Widget
);
92 * Respond to menu item click event
94 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
96 mw
.rcfilters
.ui
.SavedLinksListWidget
.prototype.onMenuItemClick = function ( item
) {
97 this.controller
.applySavedQuery( item
.getID() );
98 this.button
.popup
.toggle( false );
102 * Respond to menu item remove event
104 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
106 mw
.rcfilters
.ui
.SavedLinksListWidget
.prototype.onMenuItemRemove = function ( item
) {
107 this.controller
.removeSavedQuery( item
.getID() );
111 * Respond to menu item default event
113 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
114 * @param {boolean} isDefault Item is default
116 mw
.rcfilters
.ui
.SavedLinksListWidget
.prototype.onMenuItemDefault = function ( item
, isDefault
) {
117 this.controller
.setDefaultSavedQuery( isDefault
? item
.getID() : null );
121 * Respond to menu item edit event
123 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
124 * @param {string} newLabel New label
126 mw
.rcfilters
.ui
.SavedLinksListWidget
.prototype.onMenuItemEdit = function ( item
, newLabel
) {
127 this.controller
.renameSavedQuery( item
.getID(), newLabel
);
131 * Respond to menu add item event
133 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
135 mw
.rcfilters
.ui
.SavedLinksListWidget
.prototype.onModelAddItem = function ( item
) {
136 if ( this.menu
.getItemFromData( item
.getID() ) ) {
140 this.menu
.addItems( [
141 new mw
.rcfilters
.ui
.SavedLinksListItemWidget( item
, { $overlay
: this.$overlay
} )
143 this.placeholderItem
.toggle( this.model
.isEmpty() );
147 * Respond to menu remove item event
149 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
151 mw
.rcfilters
.ui
.SavedLinksListWidget
.prototype.onModelRemoveItem = function ( item
) {
152 this.menu
.removeItems( [ this.menu
.getItemFromData( item
.getID() ) ] );
153 this.placeholderItem
.toggle( this.model
.isEmpty() );