From 8937a72df713921e1287042feb610c4ded253f1e Mon Sep 17 00:00:00 2001 From: Stephane Bisson Date: Wed, 4 Oct 2017 08:52:25 -0400 Subject: [PATCH] RCFilters: Allows specifying default highlights from the server Bug: T172757 Change-Id: I0545b4e0222e14be99d567e7890ccf33722a5d1e --- includes/changes/ChangesListFilter.php | 14 +++++++++++++ .../dm/mw.rcfilters.dm.FilterGroup.js | 16 ++++++++++++++- .../dm/mw.rcfilters.dm.FiltersViewModel.js | 20 +++++++++++++++++++ .../dm/mw.rcfilters.dm.ItemModel.js | 5 +++-- .../mw.rcfilters.UriProcessor.js | 2 +- .../ChangesListBooleanFilterGroupTest.php | 2 ++ .../changes/ChangesListBooleanFilterTest.php | 2 ++ ...hangesListStringOptionsFilterGroupTest.php | 2 ++ .../ChangesListSpecialPageTest.php | 4 ++++ 9 files changed, 63 insertions(+), 4 deletions(-) diff --git a/includes/changes/ChangesListFilter.php b/includes/changes/ChangesListFilter.php index 2fc1006ed7..2546f2ba82 100644 --- a/includes/changes/ChangesListFilter.php +++ b/includes/changes/ChangesListFilter.php @@ -103,6 +103,12 @@ abstract class ChangesListFilter { */ protected $priority; + /** + * + * @var string $defaultHighlightColor + */ + protected $defaultHighlightColor; + const RESERVED_NAME_CHAR = '_'; /** @@ -368,6 +374,7 @@ abstract class ChangesListFilter { 'priority' => $this->priority, 'subset' => $this->subsetFilters, 'conflicts' => [], + 'defaultHighlightColor' => $this->defaultHighlightColor ]; $output['messageKeys'] = [ @@ -494,4 +501,11 @@ abstract class ChangesListFilter { } ); } + + /** + * @param string $defaultHighlightColor + */ + public function setDefaultHighlightColor( $defaultHighlightColor ) { + $this->defaultHighlightColor = $defaultHighlightColor; + } } 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 309978fa8a..57d1b4108f 100644 --- a/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterGroup.js +++ b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterGroup.js @@ -93,6 +93,7 @@ */ mw.rcfilters.dm.FilterGroup.prototype.initializeFilters = function ( filterDefinition, groupDefault ) { var defaultParam, + anyHighlighted, supersetMap = {}, model = this, items = []; @@ -106,7 +107,8 @@ description: filter.description || '', labelPrefixKey: model.labelPrefixKey, cssClass: filter.cssClass, - identifiers: filter.identifiers + identifiers: filter.identifiers, + defaultHighlightColor: filter.defaultHighlightColor } ); if ( filter.subset ) { @@ -188,6 +190,18 @@ this.defaultParams[ this.getName() ] = defaultParam; } + // add highlights to defaultParams + anyHighlighted = false; + this.getItems().forEach( function ( filterItem ) { + if ( filterItem.isHighlighted() ) { + anyHighlighted = true; + this.defaultParams[ filterItem.getName() + '_color' ] = filterItem.getHighlightColor(); + } + }.bind( this ) ); + if ( anyHighlighted ) { + this.defaultParams.highlight = '1'; + } + // Store default filter state based on default params this.defaultFilters = this.getFilterRepresentation( this.getDefaultParams() ); diff --git a/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js index 5013c08621..772ed9271e 100644 --- a/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js +++ b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js @@ -410,6 +410,10 @@ this.currentView = 'default'; + if ( this.getHighlightedItems().length > 0 ) { + this.toggleHighlight( true ); + } + // Finish initialization this.emit( 'initialize' ); }; @@ -725,6 +729,22 @@ return result; }; + /** + * Get an object representing the complete empty state of highlights + * + * @return {Object} Object containing all the highlight parameters set to their negative value + */ + mw.rcfilters.dm.FiltersViewModel.prototype.getEmptyHighlightParameters = function () { + var result = {}; + + this.getItems().forEach( function ( filterItem ) { + result[ filterItem.getName() + '_color' ] = null; + } ); + result.highlight = '0'; + + return result; + }; + /** * Extract the highlight values from given object. Since highlights are * the same for filter and parameters, it doesn't matter which one is diff --git a/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.ItemModel.js b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.ItemModel.js index aa82e218f8..9c56f09517 100644 --- a/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.ItemModel.js +++ b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.ItemModel.js @@ -21,6 +21,7 @@ * @cfg {string} [cssClass] The class identifying the results that match this filter * @cfg {string[]} [identifiers] An array of identifiers for this item. They will be * added and considered in the view. + * @cfg {string} [defaultHighlightColor] If set, highlight this filter by default with this color */ mw.rcfilters.dm.ItemModel = function MwRcfiltersDmItemModel( param, config ) { config = config || {}; @@ -42,8 +43,8 @@ // Highlight this.cssClass = config.cssClass; - this.highlightColor = null; - this.highlightEnabled = false; + this.highlightColor = config.defaultHighlightColor; + this.highlightEnabled = !!config.defaultHighlightColor; }; /* Initialization */ diff --git a/resources/src/mediawiki.rcfilters/mw.rcfilters.UriProcessor.js b/resources/src/mediawiki.rcfilters/mw.rcfilters.UriProcessor.js index 1894b619d4..c9436f42a7 100644 --- a/resources/src/mediawiki.rcfilters/mw.rcfilters.UriProcessor.js +++ b/resources/src/mediawiki.rcfilters/mw.rcfilters.UriProcessor.js @@ -300,7 +300,7 @@ */ mw.rcfilters.UriProcessor.prototype._buildEmptyParameterState = function () { var emptyParams = this.filtersModel.getParametersFromFilters( {} ), - emptyHighlights = this.filtersModel.getHighlightParameters(); + emptyHighlights = this.filtersModel.getEmptyHighlightParameters(); this.emptyParameterState = $.extend( true, diff --git a/tests/phpunit/includes/changes/ChangesListBooleanFilterGroupTest.php b/tests/phpunit/includes/changes/ChangesListBooleanFilterGroupTest.php index 07dec055cb..d80b6c10fc 100644 --- a/tests/phpunit/includes/changes/ChangesListBooleanFilterGroupTest.php +++ b/tests/phpunit/includes/changes/ChangesListBooleanFilterGroupTest.php @@ -63,6 +63,7 @@ class ChangesListBooleanFilterGroupTest extends MediaWikiTestCase { 'cssClass' => null, 'conflicts' => [], 'subset' => [], + 'defaultHighlightColor' => null, ], [ 'name' => 'hidefoo', @@ -73,6 +74,7 @@ class ChangesListBooleanFilterGroupTest extends MediaWikiTestCase { 'cssClass' => null, 'conflicts' => [], 'subset' => [], + 'defaultHighlightColor' => null, ], ], 'conflicts' => [], diff --git a/tests/phpunit/includes/changes/ChangesListBooleanFilterTest.php b/tests/phpunit/includes/changes/ChangesListBooleanFilterTest.php index 000f01772d..35dc1a83a5 100644 --- a/tests/phpunit/includes/changes/ChangesListBooleanFilterTest.php +++ b/tests/phpunit/includes/changes/ChangesListBooleanFilterTest.php @@ -49,6 +49,7 @@ class ChangesListBooleanFilterTest extends MediaWikiTestCase { 'default' => 1, 'priority' => 1, 'cssClass' => null, + 'defaultHighlightColor' => null, 'conflicts' => [ [ 'group' => 'group', @@ -85,6 +86,7 @@ class ChangesListBooleanFilterTest extends MediaWikiTestCase { 'default' => 1, 'priority' => 1, 'cssClass' => null, + 'defaultHighlightColor' => null, 'conflicts' => [ [ 'group' => 'group', diff --git a/tests/phpunit/includes/changes/ChangesListStringOptionsFilterGroupTest.php b/tests/phpunit/includes/changes/ChangesListStringOptionsFilterGroupTest.php index 4f917e9d46..dd27e32e98 100644 --- a/tests/phpunit/includes/changes/ChangesListStringOptionsFilterGroupTest.php +++ b/tests/phpunit/includes/changes/ChangesListStringOptionsFilterGroupTest.php @@ -247,6 +247,7 @@ class ChangesListStringOptionsFilterGroupTest extends MediaWikiTestCase { 'cssClass' => null, 'conflicts' => [], 'subset' => [], + 'defaultHighlightColor' => null, ], [ 'name' => 'foo', @@ -256,6 +257,7 @@ class ChangesListStringOptionsFilterGroupTest extends MediaWikiTestCase { 'cssClass' => null, 'conflicts' => [], 'subset' => [], + 'defaultHighlightColor' => null, ], ], 'conflicts' => [], diff --git a/tests/phpunit/includes/specialpage/ChangesListSpecialPageTest.php b/tests/phpunit/includes/specialpage/ChangesListSpecialPageTest.php index fd7e0f116e..d96758892e 100644 --- a/tests/phpunit/includes/specialpage/ChangesListSpecialPageTest.php +++ b/tests/phpunit/includes/specialpage/ChangesListSpecialPageTest.php @@ -736,6 +736,7 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase 'cssClass' => null, 'conflicts' => [], 'subset' => [], + 'defaultHighlightColor' => null ], [ 'name' => 'hidefoo', @@ -746,6 +747,7 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase 'cssClass' => null, 'conflicts' => [], 'subset' => [], + 'defaultHighlightColor' => null ], ], 'fullCoverage' => true, @@ -767,6 +769,7 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase 'priority' => -2, 'conflicts' => [], 'subset' => [], + 'defaultHighlightColor' => null ], [ 'name' => 'garply', @@ -776,6 +779,7 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase 'priority' => -3, 'conflicts' => [], 'subset' => [], + 'defaultHighlightColor' => null ], ], 'conflicts' => [], -- 2.20.1