RCFilters: Don't grey out results area when initializing, unless there's a default...
authorRoan Kattouw <roan.kattouw@gmail.com>
Wed, 20 Sep 2017 00:54:55 +0000 (17:54 -0700)
committerRoan Kattouw <roan.kattouw@gmail.com>
Wed, 20 Sep 2017 04:42:56 +0000 (21:42 -0700)
Check whether there is a default saved query on the server side, and if there is,
add the mw-rcfilters-ui-loading class.

Also centralize the code related to the saved query preferences.

Bug: T173533
Change-Id: I4138fde22bdd8cc55c65846b91184c3ad3057244

includes/specialpage/ChangesListSpecialPage.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialWatchlist.php
resources/src/mediawiki.rcfilters/mw.rcfilters.init.js
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.less

index 98b7aa1..dd0dd92 100644 (file)
@@ -32,6 +32,12 @@ use Wikimedia\Rdbms\IDatabase;
  * @ingroup SpecialPage
  */
 abstract class ChangesListSpecialPage extends SpecialPage {
+       /**
+        * Preference name for saved queries. Subclasses that use saved queries should override this.
+        * @var string
+        */
+       protected static $savedQueriesPreferenceName;
+
        /** @var string */
        protected $rcSubpage;
 
@@ -602,6 +608,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                                'wgStructuredChangeFiltersEnableExperimentalViews',
                                $experimentalStructuredChangeFilters
                        );
+
                        $out->addJsConfigVars(
                                'wgRCFiltersChangeTags',
                                $this->buildChangeTagList()
@@ -616,6 +623,21 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                                        'daysDefault' => $this->getDefaultDays(),
                                ]
                        );
+
+                       if ( static::$savedQueriesPreferenceName ) {
+                               $savedQueries = FormatJson::decode(
+                                       $this->getUser()->getOption( static::$savedQueriesPreferenceName )
+                               );
+                               if ( $savedQueries && isset( $savedQueries->default ) ) {
+                                       // If there is a default saved query, show a loading spinner,
+                                       // since the frontend is going to reload the results
+                                       $out->addBodyClasses( 'mw-rcfilters-ui-loading' );
+                               }
+                               $out->addJsConfigVars(
+                                       'wgStructuredChangeFiltersSavedQueriesPreferenceName',
+                                       static::$savedQueriesPreferenceName
+                               );
+                       }
                } else {
                        $out->addBodyClasses( 'mw-rcfilters-disabled' );
                }
index 15c05ee..40834cb 100644 (file)
@@ -32,6 +32,8 @@ use Wikimedia\Rdbms\FakeResultWrapper;
  */
 class SpecialRecentChanges extends ChangesListSpecialPage {
 
+       protected static $savedQueriesPreferenceName = 'rcfilters-saved-queries';
+
        private $watchlistFilterGroupDefinition;
 
        // @codingStandardsIgnoreStart Needed "useless" override to change parameters.
@@ -165,10 +167,6 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
 
                if ( $this->isStructuredFilterUiEnabled() ) {
                        $out->addJsConfigVars( 'wgStructuredChangeFiltersLiveUpdateSupported', true );
-                       $out->addJsConfigVars(
-                               'wgStructuredChangeFiltersSavedQueriesPreferenceName',
-                               'rcfilters-saved-queries'
-                       );
                }
        }
 
index 8418865..4f4570e 100644 (file)
@@ -32,6 +32,8 @@ use Wikimedia\Rdbms\IDatabase;
  * @ingroup SpecialPage
  */
 class SpecialWatchlist extends ChangesListSpecialPage {
+       protected static $savedQueriesPreferenceName = 'rcfilters-wl-saved-queries';
+
        private $maxDays;
 
        public function __construct( $page = 'Watchlist', $restriction = 'viewmywatchlist' ) {
@@ -100,10 +102,6 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                        $output->addModuleStyles( [ 'mediawiki.rcfilters.highlightCircles.seenunseen.styles' ] );
 
                        $output->addJsConfigVars( 'wgStructuredChangeFiltersLiveUpdateSupported', false );
-                       $output->addJsConfigVars(
-                               'wgStructuredChangeFiltersSavedQueriesPreferenceName',
-                               'rcfilters-wl-saved-queries'
-                       );
                        $output->addJsConfigVars(
                                'wgStructuredChangeFiltersEditWatchlistUrl',
                                SpecialPage::getTitleFor( 'EditWatchlist' )->getLocalURL()
index 13da97f..20c1463 100644 (file)
                        new mw.rcfilters.ui.ChangesListWrapperWidget(
                                filtersModel, changesListModel, controller, $( '.mw-changeslist, .mw-changeslist-empty' ) );
 
+                       // Remove the -loading class that may have been added on the server side.
+                       // If we are in fact going to load a default saved query, this .initialize()
+                       // call will do that and add the -loading class right back.
+                       $( 'body' ).removeClass( 'mw-rcfilters-ui-loading' );
+
                        controller.initialize(
                                mw.config.get( 'wgStructuredChangeFilters' ),
                                mw.config.get( 'wgFormattedNamespaces' ),
index 0ab2c01..a0bc3a2 100644 (file)
@@ -36,7 +36,6 @@
                }
        }
 
-       body:not( .mw-rcfilters-ui-initialized ) .mw-changeslist,
        body.mw-rcfilters-ui-loading .mw-changeslist {
                opacity: 0.5;
        }