2 var GroupWidget
= require( './GroupWidget.js' ),
3 SavedLinksListItemWidget
= require( './SavedLinksListItemWidget.js' ),
9 * @class mw.rcfilters.ui.SavedLinksListWidget
10 * @extends OO.ui.Widget
13 * @param {mw.rcfilters.Controller} controller Controller
14 * @param {mw.rcfilters.dm.SavedQueriesModel} model View model
15 * @param {Object} [config] Configuration object
16 * @cfg {jQuery} [$overlay] A jQuery object serving as overlay for popups
18 SavedLinksListWidget
= function MwRcfiltersUiSavedLinksListWidget( controller
, model
, config
) {
19 var $labelNoEntries
= $( '<div>' )
22 .addClass( 'mw-rcfilters-ui-savedLinksListWidget-placeholder-title' )
23 .text( mw
.msg( 'rcfilters-quickfilters-placeholder-title' ) ),
25 .addClass( 'mw-rcfilters-ui-savedLinksListWidget-placeholder-description' )
26 .text( mw
.msg( 'rcfilters-quickfilters-placeholder-description' ) )
29 config
= config
|| {};
32 SavedLinksListWidget
.parent
.call( this, config
);
34 this.controller
= controller
;
36 this.$overlay
= config
.$overlay
|| this.$element
;
38 this.placeholderItem
= new OO
.ui
.DecoratedOptionWidget( {
39 classes
: [ 'mw-rcfilters-ui-savedLinksListWidget-placeholder' ],
40 label
: $labelNoEntries
,
44 this.menu
= new GroupWidget( {
46 click
: 'menuItemClick',
47 delete: 'menuItemDelete',
48 default: 'menuItemDefault',
51 classes
: [ 'mw-rcfilters-ui-savedLinksListWidget-menu' ],
52 items
: [ this.placeholderItem
]
54 this.button
= new OO
.ui
.PopupButtonWidget( {
55 classes
: [ 'mw-rcfilters-ui-savedLinksListWidget-button' ],
56 label
: mw
.msg( 'rcfilters-quickfilters' ),
59 $overlay
: this.$overlay
,
64 $autoCloseIgnore
: this.$overlay
,
65 $content
: this.menu
.$element
70 this.model
.connect( this, {
71 add
: 'onModelAddItem',
72 remove
: 'onModelRemoveItem'
74 this.menu
.connect( this, {
75 menuItemClick
: 'onMenuItemClick',
76 menuItemDelete
: 'onMenuItemRemove',
77 menuItemDefault
: 'onMenuItemDefault',
78 menuItemEdit
: 'onMenuItemEdit'
81 this.placeholderItem
.toggle( this.model
.isEmpty() );
84 .addClass( 'mw-rcfilters-ui-savedLinksListWidget' )
85 .append( this.button
.$element
);
89 OO
.inheritClass( SavedLinksListWidget
, OO
.ui
.Widget
);
94 * Respond to menu item click event
96 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
98 SavedLinksListWidget
.prototype.onMenuItemClick = function ( item
) {
99 this.controller
.applySavedQuery( item
.getID() );
100 this.button
.popup
.toggle( false );
104 * Respond to menu item remove event
106 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
108 SavedLinksListWidget
.prototype.onMenuItemRemove = function ( item
) {
109 this.controller
.removeSavedQuery( item
.getID() );
113 * Respond to menu item default event
115 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
116 * @param {boolean} isDefault Item is default
118 SavedLinksListWidget
.prototype.onMenuItemDefault = function ( item
, isDefault
) {
119 this.controller
.setDefaultSavedQuery( isDefault
? item
.getID() : null );
123 * Respond to menu item edit event
125 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
126 * @param {string} newLabel New label
128 SavedLinksListWidget
.prototype.onMenuItemEdit = function ( item
, newLabel
) {
129 this.controller
.renameSavedQuery( item
.getID(), newLabel
);
133 * Respond to menu add item event
135 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
137 SavedLinksListWidget
.prototype.onModelAddItem = function ( item
) {
138 if ( this.menu
.findItemFromData( item
.getID() ) ) {
142 this.menu
.addItems( [
143 new SavedLinksListItemWidget( item
, { $overlay
: this.$overlay
} )
145 this.placeholderItem
.toggle( this.model
.isEmpty() );
149 * Respond to menu remove item event
151 * @param {mw.rcfilters.ui.SavedLinksListItemWidget} item Menu item
153 SavedLinksListWidget
.prototype.onModelRemoveItem = function ( item
) {
154 this.menu
.removeItems( [ this.menu
.findItemFromData( item
.getID() ) ] );
155 this.placeholderItem
.toggle( this.model
.isEmpty() );
158 module
.exports
= SavedLinksListWidget
;