From 78703ae9f6eb888a78356124f43dc0c0005fc3d2 Mon Sep 17 00:00:00 2001 From: Roan Kattouw Date: Tue, 19 Sep 2017 17:54:55 -0700 Subject: [PATCH] RCFilters: Don't grey out results area when initializing, unless there's a default saved query 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 --- .../specialpage/ChangesListSpecialPage.php | 22 +++++++++++++++++++ includes/specials/SpecialRecentchanges.php | 6 ++--- includes/specials/SpecialWatchlist.php | 6 ++--- .../mediawiki.rcfilters/mw.rcfilters.init.js | 5 +++++ .../styles/mw.rcfilters.less | 1 - 5 files changed, 31 insertions(+), 9 deletions(-) diff --git a/includes/specialpage/ChangesListSpecialPage.php b/includes/specialpage/ChangesListSpecialPage.php index 98b7aa1925..dd0dd92a98 100644 --- a/includes/specialpage/ChangesListSpecialPage.php +++ b/includes/specialpage/ChangesListSpecialPage.php @@ -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' ); } diff --git a/includes/specials/SpecialRecentchanges.php b/includes/specials/SpecialRecentchanges.php index 15c05ee124..40834cb5b9 100644 --- a/includes/specials/SpecialRecentchanges.php +++ b/includes/specials/SpecialRecentchanges.php @@ -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' - ); } } diff --git a/includes/specials/SpecialWatchlist.php b/includes/specials/SpecialWatchlist.php index 8418865e10..4f4570e3f8 100644 --- a/includes/specials/SpecialWatchlist.php +++ b/includes/specials/SpecialWatchlist.php @@ -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() diff --git a/resources/src/mediawiki.rcfilters/mw.rcfilters.init.js b/resources/src/mediawiki.rcfilters/mw.rcfilters.init.js index 13da97f1b9..20c146348d 100644 --- a/resources/src/mediawiki.rcfilters/mw.rcfilters.init.js +++ b/resources/src/mediawiki.rcfilters/mw.rcfilters.init.js @@ -39,6 +39,11 @@ 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' ), diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.less b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.less index 0ab2c01f63..a0bc3a2e16 100644 --- a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.less +++ b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.less @@ -36,7 +36,6 @@ } } - body:not( .mw-rcfilters-ui-initialized ) .mw-changeslist, body.mw-rcfilters-ui-loading .mw-changeslist { opacity: 0.5; } -- 2.20.1