RCFilters: Allows specifying default highlights from the server
authorStephane Bisson <sbisson@wikimedia.org>
Wed, 4 Oct 2017 12:52:25 +0000 (08:52 -0400)
committerRoan Kattouw <roan.kattouw@gmail.com>
Wed, 4 Oct 2017 20:51:23 +0000 (13:51 -0700)
Bug: T172757
Change-Id: I0545b4e0222e14be99d567e7890ccf33722a5d1e

includes/changes/ChangesListFilter.php
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterGroup.js
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.ItemModel.js
resources/src/mediawiki.rcfilters/mw.rcfilters.UriProcessor.js
tests/phpunit/includes/changes/ChangesListBooleanFilterGroupTest.php
tests/phpunit/includes/changes/ChangesListBooleanFilterTest.php
tests/phpunit/includes/changes/ChangesListStringOptionsFilterGroupTest.php
tests/phpunit/includes/specialpage/ChangesListSpecialPageTest.php

index 2fc1006..2546f2b 100644 (file)
@@ -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;
+       }
 }
index 309978f..57d1b41 100644 (file)
@@ -93,6 +93,7 @@
         */
        mw.rcfilters.dm.FilterGroup.prototype.initializeFilters = function ( filterDefinition, groupDefault ) {
                var defaultParam,
+                       anyHighlighted,
                        supersetMap = {},
                        model = this,
                        items = [];
                                        description: filter.description || '',
                                        labelPrefixKey: model.labelPrefixKey,
                                        cssClass: filter.cssClass,
-                                       identifiers: filter.identifiers
+                                       identifiers: filter.identifiers,
+                                       defaultHighlightColor: filter.defaultHighlightColor
                                } );
 
                        if ( filter.subset ) {
                        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() );
 
index 5013c08..772ed92 100644 (file)
 
                this.currentView = 'default';
 
+               if ( this.getHighlightedItems().length > 0 ) {
+                       this.toggleHighlight( true );
+               }
+
                // Finish initialization
                this.emit( 'initialize' );
        };
                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
index aa82e21..9c56f09 100644 (file)
@@ -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 */
index 1894b61..c9436f4 100644 (file)
         */
        mw.rcfilters.UriProcessor.prototype._buildEmptyParameterState = function () {
                var emptyParams = this.filtersModel.getParametersFromFilters( {} ),
-                       emptyHighlights = this.filtersModel.getHighlightParameters();
+                       emptyHighlights = this.filtersModel.getEmptyHighlightParameters();
 
                this.emptyParameterState = $.extend(
                        true,
index 07dec05..d80b6c1 100644 (file)
@@ -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' => [],
index 000f017..35dc1a8 100644 (file)
@@ -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',
index 4f917e9..dd27e32 100644 (file)
@@ -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' => [],
index fd7e0f1..d967588 100644 (file)
@@ -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' => [],