Merge "RCFilters: Remove view triggers before checking emptiness of string"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Fri, 23 Jun 2017 00:11:19 +0000 (00:11 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 23 Jun 2017 00:11:19 +0000 (00:11 +0000)
1  2 
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js

@@@ -20,7 -20,7 +20,7 @@@
                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