From c2a9a02841024202e4dcb2a0104dcc04c74c4a79 Mon Sep 17 00:00:00 2001 From: Stephane Bisson Date: Tue, 2 May 2017 09:25:33 -0400 Subject: [PATCH] RC Filters: group.allSelected consider subsets Consider a group to be all selected if its unselected items are subsets of selected items. This allows the watchlist group to show as no-effect when 'watched' and 'notwatched' are selected but 'watchednow' is not selected. Bug: T163964 Change-Id: I40d2a02ab074bc87f8a6f2498834b89fbbe55771 --- .../dm/mw.rcfilters.dm.FilterGroup.js | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) 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 3ec544c1bd..ca7c4e67df 100644 --- a/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterGroup.js +++ b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterGroup.js @@ -174,8 +174,26 @@ * @return {boolean} All items are selected */ mw.rcfilters.dm.FilterGroup.prototype.areAllSelected = function () { - return this.getItems().every( function ( filterItem ) { - return filterItem.isSelected(); + var selected = [], + unselected = []; + + this.getItems().forEach( function ( filterItem ) { + if ( filterItem.isSelected() ) { + selected.push( filterItem ); + } else { + unselected.push( filterItem ); + } + } ); + + if ( unselected.length === 0 ) { + return true; + } + + // check if every unselected is a subset of a selected + return unselected.every( function ( unselectedFilterItem ) { + return selected.some( function ( selectedFilterItem ) { + return selectedFilterItem.existsInSubset( unselectedFilterItem.getName() ); + } ); } ); }; -- 2.20.1