From 44179c1afc79eb4a0bf9d26726eabc6284cd5203 Mon Sep 17 00:00:00 2001 From: Moriel Schottlender Date: Thu, 20 Jul 2017 17:02:55 -0700 Subject: [PATCH] RCFilters: Make sure single_option always has 1 item selected Bug: T171081 Change-Id: I82b6cf9660dfd5ee006197504557be366e148244 --- .../dm/mw.rcfilters.dm.FilterGroup.js | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterGroup.js b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterGroup.js index 9a85291bc6..f4836aabf2 100644 --- a/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterGroup.js +++ b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterGroup.js @@ -186,7 +186,8 @@ */ mw.rcfilters.dm.FilterGroup.prototype.onFilterItemUpdate = function ( item ) { // Update state - var active = this.areAnySelected(); + var changed = false, + active = this.areAnySelected(); if ( item.isSelected() && @@ -197,7 +198,26 @@ this.currSelected.toggleSelected( false ); } + // For 'single_option' groups, check if we just unselected all + // items. This should never be the result. If we did unselect + // all (like resetting all filters to false) then this group + // must choose its default item or the first item in the group if ( + this.getType() === 'single_option' && + !this.getItems().some( function ( filterItem ) { + return filterItem.isSelected(); + } ) + ) { + // Single option means there must be a single option + // selected, so we have to either select the default + // or select the first option + this.currSelected = this.getItemByParamName( this.defaultParams[ this.getName() ] ); + this.currSelected.toggleSelected( true ); + changed = true; + } + + if ( + changed || this.active !== active || this.currSelected !== item ) { -- 2.20.1