Merge "User: Avoid deprecated Linker::link()"
[lhc/web/wiklou.git] / resources / src / mediawiki.rcfilters / ui / mw.rcfilters.ui.FilterTagMultiselectWidget.js
index 268138f..0ab459e 100644 (file)
                                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',
+                                               sticky: false,
+                                               // 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',
+                               icon: 'menu',
                                placeholder: mw.msg( 'rcfilters-search-placeholder' )
                        }
                }, config ) );
                        );
                }
 
+               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.input.setValue( '' );
                        }
                }
+
+               this.input.setIcon( isVisible ? 'search' : 'menu' );
        };
 
        /**
                        menuOption = this.menu.getItemFromModel( tagItem.getModel() ),
                        oldInputValue = this.input.getValue();
 
+               this.menu.setUserSelecting( true );
+
                // Reset input
                this.input.setValue( '' );
 
                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
                        // user filtered the results
                        this.getMenu().once(
                                'itemVisibilityChange',
-                               function () { widget.scrollToTop( menuOption.$element ); }
+                               function () {
+                                       widget.scrollToTop( menuOption.$element );
+                                       widget.menu.setUserSelecting( false );
+                               }
                        );
                } else {
                        this.scrollToTop( menuOption.$element );
+                       this.menu.setUserSelecting( false );
                }
+
        };
 
        /**