Merge "RCFilters: Add 'single_option' group type"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 27 Jun 2017 00:29:48 +0000 (00:29 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 27 Jun 2017 00:29:48 +0000 (00:29 +0000)
1  2 
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.MenuSelectWidget.js

@@@ -30,7 -30,6 +30,7 @@@
                this.model = model;
                this.currentView = '';
                this.views = {};
 +              this.userSelecting = false;
  
                this.inputValue = '';
                this.$overlay = config.$overlay || this.$element;
  
                // Count groups per view
                $.each( groups, function ( groupName, groupModel ) {
-                       viewGroupCount[ groupModel.getView() ] = viewGroupCount[ groupModel.getView() ] || 0;
-                       viewGroupCount[ groupModel.getView() ]++;
+                       if ( !groupModel.isHidden() ) {
+                               viewGroupCount[ groupModel.getView() ] = viewGroupCount[ groupModel.getView() ] || 0;
+                               viewGroupCount[ groupModel.getView() ]++;
+                       }
                } );
  
                $.each( groups, function ( groupName, groupModel ) {
                        var currentItems = [],
                                view = groupModel.getView();
  
-                       if ( viewGroupCount[ view ] > 1 ) {
-                               // Only add a section header if there is more than
-                               // one group
-                               currentItems.push(
-                                       // Group section
-                                       new mw.rcfilters.ui.FilterMenuSectionOptionWidget(
-                                               widget.controller,
-                                               groupModel,
-                                               {
-                                                       $overlay: widget.$overlay
-                                               }
-                                       )
-                               );
+                       if ( !groupModel.isHidden() ) {
+                               if ( viewGroupCount[ view ] > 1 ) {
+                                       // Only add a section header if there is more than
+                                       // one group
+                                       currentItems.push(
+                                               // Group section
+                                               new mw.rcfilters.ui.FilterMenuSectionOptionWidget(
+                                                       widget.controller,
+                                                       groupModel,
+                                                       {
+                                                               $overlay: widget.$overlay
+                                                       }
+                                               )
+                                       );
+                               }
+                               // Add items
+                               widget.model.getGroupFilters( groupName ).forEach( function ( filterItem ) {
+                                       currentItems.push(
+                                               new mw.rcfilters.ui.FilterMenuOptionWidget(
+                                                       widget.controller,
+                                                       filterItem,
+                                                       {
+                                                               $overlay: widget.$overlay
+                                                       }
+                                               )
+                                       );
+                               } );
+                               // Cache the items per view, so we can switch between them
+                               // without rebuilding the widgets each time
+                               widget.views[ view ] = widget.views[ view ] || [];
+                               widget.views[ view ] = widget.views[ view ].concat( currentItems );
                        }
-                       // Add items
-                       widget.model.getGroupFilters( groupName ).forEach( function ( filterItem ) {
-                               currentItems.push(
-                                       new mw.rcfilters.ui.FilterMenuOptionWidget(
-                                               widget.controller,
-                                               filterItem,
-                                               {
-                                                       $overlay: widget.$overlay
-                                               }
-                                       )
-                               );
-                       } );
-                       // Cache the items per view, so we can switch between them
-                       // without rebuilding the widgets each time
-                       widget.views[ view ] = widget.views[ view ] || [];
-                       widget.views[ view ] = widget.views[ view ].concat( currentItems );
                } );
  
                this.switchView( this.model.getCurrentView() );
  
                // Since the method hides/shows items, we don't want to
                // call it unless the input actually changed
 -              if ( this.inputValue !== inputVal ) {
 +              if (
 +                      !this.userSelecting &&
 +                      this.inputValue !== inputVal
 +              ) {
                        // Parent method
                        mw.rcfilters.ui.MenuSelectWidget.parent.prototype.updateItemVisibility.call( this );
  
        mw.rcfilters.ui.MenuSelectWidget.prototype.scrollToTop = function () {
                this.$body.scrollTop( 0 );
        };
 +
 +      /**
 +       * Set whether the user is currently selecting an item.
 +       * This is important when the user selects an item that is in between
 +       * different views, and makes sure we do not re-select a different
 +       * item (like the item on top) when this is happening.
 +       *
 +       * @param {boolean} isSelecting User is selecting
 +       */
 +      mw.rcfilters.ui.MenuSelectWidget.prototype.setUserSelecting = function ( isSelecting ) {
 +              this.userSelecting = !!isSelecting;
 +      };
  }( mediaWiki ) );