this.parameterMap = {};
this.views = {};
- this.currentView = null;
+ this.currentView = 'default';
// Events
this.aggregate( { update: 'filterItemUpdate' } );
this.views.tags = { name: 'tags', label: mw.msg( 'rcfilters-view-tags' ), trigger: '#' };
// Add the group
- model.groups.tags = new mw.rcfilters.dm.FilterGroup(
- 'tags',
+ model.groups.tagfilter = new mw.rcfilters.dm.FilterGroup(
+ 'tagfilter',
{
type: 'string_options',
view: 'tags',
);
// Add tag items to group
- model.groups.tags.initializeFilters( tags );
+ model.groups.tagfilter.initializeFilters( tags );
// Add item references to the model, for lookup
- items = items.concat( model.groups.tags.getItems() );
+ items = items.concat( model.groups.tagfilter.getItems() );
}
// Add item references to the model, for lookup
* @return {string} View trigger, if exists
*/
mw.rcfilters.dm.FiltersViewModel.prototype.getViewTrigger = function ( view ) {
- return this.views[ view ] && this.views[ view ].trigger;
+ return ( this.views[ view ] && this.views[ view ].trigger ) || '';
};
/**
* Get the value of a specific parameter
filterItem.clearHighlightColor();
} );
};
+
+ /**
+ * Return a version of the given string that is without any
+ * view triggers.
+ *
+ * @param {string} str Given string
+ * @return {string} Result
+ */
+ mw.rcfilters.dm.FiltersViewModel.prototype.removeViewTriggers = function ( str ) {
+ if ( this.getViewByTrigger( str.substr( 0, 1 ) ) !== 'default' ) {
+ str = str.substr( 1 );
+ }
+
+ return str;
+ };
}( mediaWiki, jQuery ) );
hideWhenOutOfView: false,
hideOnChoose: false,
width: 650,
- $footer: $( '<div>' )
- .append(
- new OO.ui.ButtonWidget( {
- framed: false,
- icon: 'feedback',
- flags: [ 'progressive' ],
- label: mw.msg( 'rcfilters-filterlist-feedbacklink' ),
- href: 'https://www.mediawiki.org/wiki/Help_talk:New_filters_for_edit_review'
- } ).$element
- )
+ footers: [
+ {
+ name: 'viewSelect',
+ // View select menu, appears on default view only
+ $element: $( '<div>' )
+ .append( new mw.rcfilters.ui.ViewSwitchWidget( this.controller, this.model ).$element ),
+ views: [ 'default' ]
+ },
+ {
+ name: 'feedback',
+ // Feedback footer, appears on all views
+ $element: $( '<div>' )
+ .append(
+ new OO.ui.ButtonWidget( {
+ framed: false,
+ icon: 'feedback',
+ flags: [ 'progressive' ],
+ label: mw.msg( 'rcfilters-filterlist-feedbacklink' ),
+ href: 'https://www.mediawiki.org/wiki/Help_talk:New_filters_for_edit_review'
+ } ).$element
+ )
+ }
+ ]
},
input: {
icon: 'search',
);
}
+ if ( mw.config.get( 'wgStructuredChangeFiltersEnableExperimentalViews' ) ) {
+ // Add a selector at the right of the input
+ this.viewsSelectWidget = new OO.ui.ButtonSelectWidget( {
+ classes: [ 'mw-rcfilters-ui-filterTagMultiselectWidget-views-select-widget' ],
+ items: [
+ new OO.ui.ButtonOptionWidget( {
+ data: 'namespaces',
+ icon: 'article',
+ title: mw.msg( 'namespaces' )
+ } ),
+ new OO.ui.ButtonOptionWidget( {
+ data: 'tags',
+ icon: 'tag',
+ title: mw.msg( 'rcfilters-view-tags' )
+ } )
+ ]
+ } );
+
+ // Rearrange the UI so the select widget is at the right of the input
+ this.$element.append(
+ $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-table' )
+ .append(
+ $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-row' )
+ .append(
+ $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-cell' )
+ .addClass( 'mw-rcfilters-ui-filterTagMultiselectWidget-views-input' )
+ .append( this.input.$element ),
+ $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-cell' )
+ .addClass( 'mw-rcfilters-ui-filterTagMultiselectWidget-views-select' )
+ .append( this.viewsSelectWidget.$element )
+ )
+ )
+ );
+
+ // Event
+ this.viewsSelectWidget.connect( this, { choose: 'onViewsSelectWidgetChoose' } );
+ }
+
rcFiltersRow.append(
$( '<div>' )
.addClass( 'mw-rcfilters-ui-cell' )
/* Methods */
+ /**
+ * Respond to view select widget choose event
+ *
+ * @param {OO.ui.ButtonOptionWidget} buttonOptionWidget Chosen widget
+ */
+ mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.onViewsSelectWidgetChoose = function ( buttonOptionWidget ) {
+ this.controller.switchView( buttonOptionWidget.getData() );
+ this.viewsSelectWidget.selectItem( null );
+ this.focus();
+ };
+
/**
* Respond to input change event
*
this.selectTag( tagItem );
// Scroll to the item
- if ( oldInputValue ) {
+ if ( this.model.removeViewTriggers( oldInputValue ) ) {
// We're binding a 'once' to the itemVisibilityChange event
// so this happens when the menu is ready after the items
// are visible again, in case this is done right after the