6 * @extends OO.ui.Widget
9 * @param {mw.rcfilters.Controller} controller Controller
10 * @param {mw.rcfilters.dm.SavedQueriesModel} model View model
11 * @param {Object} [config] Configuration object
12 * @cfg {jQuery} [$overlay] A jQuery object serving as overlay for popups
14 mw
.rcfilters
.ui
.SavedLinksListWidget
= function MwRcfiltersUiSavedLinksListWidget( controller
, model
, config
) {
15 var $labelNoEntries
= $( '<div>' )
18 .addClass( 'mw-rcfilters-ui-savedLinksListWidget-placeholder-title' )
19 .text( mw
.msg( 'rcfilters-quickfilters-placeholder-title' ) ),
21 .addClass( 'mw-rcfilters-ui-savedLinksListWidget-placeholder-description' )
22 .text( mw
.msg( 'rcfilters-quickfilters-placeholder-description' ) )
25 config
= config
|| {};
28 mw
.rcfilters
.ui
.SavedLinksListWidget
.parent
.call( this, config
);
30 this.controller
= controller
;
32 this.$overlay
= config
.$overlay
|| this.$element
;
34 this.placeholderItem
= new OO
.ui
.DecoratedOptionWidget( {
35 classes
: [ 'mw-rcfilters-ui-savedLinksListWidget-placeholder' ],
36 label
: $labelNoEntries
,
40 this.menu
= new mw
.rcfilters
.ui
.GroupWidget( {
42 click
: 'menuItemClick',
43 'delete': 'menuItemDelete',
44 'default': 'menuItemDefault',
47 classes
: [ 'mw-rcfilters-ui-savedLinksListWidget-menu' ],
48 items
: [ this.placeholderItem
]
50 this.button
= new OO
.ui
.PopupButtonWidget( {
51 classes
: [ 'mw-rcfilters-ui-savedLinksListWidget-button' ],
52 label
: mw
.msg( 'rcfilters-quickfilters' ),
55 $overlay
: this.$overlay
,
60 $autoCloseIgnore
: this.$overlay
,
61 $content
: this.menu
.$element
66 this.model
.connect( this, {
67 add
: 'onModelAddItem',
68 remove
: 'onModelRemoveItem'
70 this.menu
.connect( this, {
71 menuItemClick
: 'onMenuItemClick',
72 menuItemDelete
: 'onMenuItemRemove',
73 menuItemDefault
: 'onMenuItemDefault',
74 menuItemEdit
: 'onMenuItemEdit'
77 this.placeholderItem
.toggle( this.model
.isEmpty() );
80 .addClass( 'mw-rcfilters-ui-savedLinksListWidget' )
81 .append( this.button
.$element
);
85 OO
.inheritClass( mw
.rcfilters
.ui
.SavedLinksListWidget
, OO
.ui
.Widget
);
90 * Respond to menu item click event
92 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
94 mw
.rcfilters
.ui
.SavedLinksListWidget
.prototype.onMenuItemClick = function ( item
) {
95 this.controller
.applySavedQuery( item
.getID() );
96 this.button
.popup
.toggle( false );
100 * Respond to menu item remove event
102 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
104 mw
.rcfilters
.ui
.SavedLinksListWidget
.prototype.onMenuItemRemove = function ( item
) {
105 this.controller
.removeSavedQuery( item
.getID() );
109 * Respond to menu item default event
111 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
112 * @param {boolean} isDefault Item is default
114 mw
.rcfilters
.ui
.SavedLinksListWidget
.prototype.onMenuItemDefault = function ( item
, isDefault
) {
115 this.controller
.setDefaultSavedQuery( isDefault
? item
.getID() : null );
119 * Respond to menu item edit event
121 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
122 * @param {string} newLabel New label
124 mw
.rcfilters
.ui
.SavedLinksListWidget
.prototype.onMenuItemEdit = function ( item
, newLabel
) {
125 this.controller
.renameSavedQuery( item
.getID(), newLabel
);
129 * Respond to menu add item event
131 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
133 mw
.rcfilters
.ui
.SavedLinksListWidget
.prototype.onModelAddItem = function ( item
) {
134 if ( this.menu
.findItemFromData( item
.getID() ) ) {
138 this.menu
.addItems( [
139 new mw
.rcfilters
.ui
.SavedLinksListItemWidget( item
, { $overlay
: this.$overlay
} )
141 this.placeholderItem
.toggle( this.model
.isEmpty() );
145 * Respond to menu remove item event
147 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
149 mw
.rcfilters
.ui
.SavedLinksListWidget
.prototype.onModelRemoveItem = function ( item
) {
150 this.menu
.removeItems( [ this.menu
.findItemFromData( item
.getID() ) ] );
151 this.placeholderItem
.toggle( this.model
.isEmpty() );