From: Stephane Bisson Date: Tue, 2 May 2017 13:25:33 +0000 (-0400) Subject: RC Filters: group.allSelected consider subsets X-Git-Tag: 1.31.0-rc.0~3375^2 X-Git-Url: http://git.cyclocoop.org/%28?a=commitdiff_plain;h=c2a9a02841024202e4dcb2a0104dcc04c74c4a79;p=lhc%2Fweb%2Fwiklou.git 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 --- 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() ); + } ); } ); };