jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/388264 )
Change subject: RCFilters: Make 'days' and 'limit' sticky
......................................................................
RCFilters: Make 'days' and 'limit' sticky
* Each has a hidden preference to override the preferences value
* Each value is different between Watchlist and RecentChanges
* rcfilters-limit is updated when rclimit is changed
* Not conditionally hiding the rcdays, watchlistdays and wllimit yet
because hide-if's behavior is annoying
Bonus:
* Add a static method to check whether RCFilters UI is enabled
and enabled by default. Adjust the call for Watchlist which
checks a slightly different configuration setup.
Bug: T174415
Change-Id: Ib933de3a3f9e876924386e80f315506f60f8af54
---
M includes/Preferences.php
M includes/specialpage/ChangesListSpecialPage.php
M includes/specials/SpecialRecentchanges.php
M includes/specials/SpecialWatchlist.php
M resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
M resources/src/mediawiki.rcfilters/mw.rcfilters.init.js
M
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesLimitAndDateButtonWidget.js
7 files changed, 116 insertions(+), 83 deletions(-)
Approvals:
Sbisson: Looks good to me, approved
jenkins-bot: Verified
diff --git a/includes/Preferences.php b/includes/Preferences.php
index 924e3ad..334a76a 100644
--- a/includes/Preferences.php
+++ b/includes/Preferences.php
@@ -934,16 +934,16 @@
$defaultPreferences['rcfilters-wl-saved-queries'] = [
'type' => 'api',
];
+ // Override RCFilters preferences for RecentChanges 'limit'
+ $defaultPreferences['rcfilters-limit'] = [
+ 'type' => 'api',
+ ];
$defaultPreferences['rcfilters-saved-queries-versionbackup'] = [
'type' => 'api',
];
$defaultPreferences['rcfilters-wl-saved-queries-versionbackup']
= [
'type' => 'api',
];
- $defaultPreferences['rcfilters-rclimit'] = [
- 'type' => 'api',
- ];
-
if ( $config->get( 'RCWatchCategoryMembership' ) ) {
$defaultPreferences['hidecategorization'] = [
'type' => 'toggle',
@@ -1556,6 +1556,14 @@
$formData[$pref] = $user->getOption( $pref,
null, true );
}
+ // If the user changed the rclimit preference, also
change the rcfilters-rclimit preference
+ if (
+ isset( $formData['rclimit'] ) &&
+ intval( $formData[ 'rclimit' ] ) !==
$user->getIntOption( 'rclimit' )
+ ) {
+ $formData['rcfilters-limit'] =
$formData['rclimit'];
+ }
+
// Keep old preferences from interfering due to
back-compat code, etc.
$user->resetOptions( 'unused', $form->getContext() );
diff --git a/includes/specialpage/ChangesListSpecialPage.php
b/includes/specialpage/ChangesListSpecialPage.php
index 5194983..cb2ae34 100644
--- a/includes/specialpage/ChangesListSpecialPage.php
+++ b/includes/specialpage/ChangesListSpecialPage.php
@@ -39,6 +39,18 @@
*/
protected static $savedQueriesPreferenceName;
+ /**
+ * Preference name for 'days'. Subclasses should override this.
+ * @var string
+ */
+ protected static $daysPreferenceName;
+
+ /**
+ * Preference name for 'limit'. Subclasses should override this.
+ * @var string
+ */
+ protected static $limitPreferenceName;
+
/** @var string */
protected $rcSubpage;
@@ -721,6 +733,14 @@
$out->addJsConfigVars(
'wgStructuredChangeFiltersSavedQueriesPreferenceName',
static::$savedQueriesPreferenceName
+ );
+ $out->addJsConfigVars(
+ 'wgStructuredChangeFiltersLimitPreferenceName',
+ static::$limitPreferenceName
+ );
+ $out->addJsConfigVars(
+ 'wgStructuredChangeFiltersDaysPreferenceName',
+ static::$daysPreferenceName
);
$out->addJsConfigVars(
@@ -1753,11 +1773,10 @@
return true;
}
- if ( $this->getConfig()->get(
'StructuredChangeFiltersShowPreference' ) ) {
- return !$this->getUser()->getOption(
'rcenhancedfilters-disable' );
- } else {
- return $this->getUser()->getOption( 'rcenhancedfilters'
);
- }
+ return self::checkStructuredFilterUiEnabled(
+ $this->getConfig(),
+ $this->getUser()
+ );
}
/**
@@ -1774,14 +1793,42 @@
}
}
- abstract function getDefaultLimit();
+ /**
+ * Static method to check whether StructuredFilter UI is enabled for
the given user
+ *
+ * @since 1.31
+ * @param Config $config
+ * @param User $user User object
+ * @return bool
+ */
+ public static function checkStructuredFilterUiEnabled( Config $config,
User $user ) {
+ if ( $config->get( 'StructuredChangeFiltersShowPreference' ) ) {
+ return !$user->getOption( 'rcenhancedfilters-disable' );
+ } else {
+ return $user->getOption( 'rcenhancedfilters' );
+ }
+ }
+
+ /**
+ * Get the default value of the number of changes to display when
loading
+ * the result set.
+ *
+ * @since 1.30
+ * @return int
+ */
+ public function getDefaultLimit() {
+ return $this->getUser()->getIntOption(
static::$limitPreferenceName );
+ }
/**
* Get the default value of the number of days to display when loading
* the result set.
* Supports fractional values, and should be cast to a float.
*
+ * @since 1.30
* @return float
*/
- abstract function getDefaultDays();
+ public function getDefaultDays() {
+ return floatval( $this->getUser()->getOption(
static::$daysPreferenceName ) );
+ }
}
diff --git a/includes/specials/SpecialRecentchanges.php
b/includes/specials/SpecialRecentchanges.php
index cfc7a85..50d8571 100644
--- a/includes/specials/SpecialRecentchanges.php
+++ b/includes/specials/SpecialRecentchanges.php
@@ -33,6 +33,8 @@
class SpecialRecentChanges extends ChangesListSpecialPage {
protected static $savedQueriesPreferenceName =
'rcfilters-saved-queries';
+ protected static $daysPreferenceName = 'rcdays'; // Use general
RecentChanges preference
+ protected static $limitPreferenceName = 'rcfilters-limit'; // Use
RCFilters-specific preference
private $watchlistFilterGroupDefinition;
@@ -974,11 +976,14 @@
return 60 * 5;
}
- function getDefaultLimit() {
- return $this->getUser()->getIntOption( 'rclimit' );
- }
+ public function getDefaultLimit() {
+ $systemPrefValue = $this->getUser()->getIntOption( 'rclimit' );
+ // Prefer the RCFilters-specific preference if RCFilters is
enabled
+ if ( $this->isStructuredFilterUiEnabled() ) {
+ return $this->getUser()->getIntOption(
static::$limitPreferenceName, $systemPrefValue );
+ }
- function getDefaultDays() {
- return floatval( $this->getUser()->getOption( 'rcdays' ) );
+ // Otherwise, use the system rclimit preference value
+ return $systemPrefValue;
}
}
diff --git a/includes/specials/SpecialWatchlist.php
b/includes/specials/SpecialWatchlist.php
index ff62e9e..6eec844 100644
--- a/includes/specials/SpecialWatchlist.php
+++ b/includes/specials/SpecialWatchlist.php
@@ -33,6 +33,8 @@
*/
class SpecialWatchlist extends ChangesListSpecialPage {
protected static $savedQueriesPreferenceName =
'rcfilters-wl-saved-queries';
+ protected static $daysPreferenceName = 'watchlistdays';
+ protected static $limitPreferenceName = 'wllimit';
private $maxDays;
@@ -108,10 +110,10 @@
}
}
- public function isStructuredFilterUiEnabled() {
- return $this->getRequest()->getBool( 'rcfilters' ) || (
- $this->getConfig()->get(
'StructuredChangeFiltersOnWatchlist' ) &&
- $this->getUser()->getOption( 'rcenhancedfilters' )
+ public static function checkStructuredFilterUiEnabled( Config $config,
User $user ) {
+ return (
+ $config->get( 'StructuredChangeFiltersOnWatchlist' ) &&
+ $user->getOption( 'rcenhancedfilters' )
);
}
@@ -875,13 +877,5 @@
$store =
MediaWikiServices::getInstance()->getWatchedItemStore();
$count = $store->countWatchedItems( $this->getUser() );
return floor( $count / 2 );
- }
-
- function getDefaultLimit() {
- return $this->getUser()->getIntOption( 'wllimit' );
- }
-
- function getDefaultDays() {
- return floatval( $this->getUser()->getOption( 'watchlistdays' )
);
}
}
diff --git a/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
b/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
index 0cec3ff..c314f98 100644
--- a/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
+++ b/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
@@ -10,12 +10,16 @@
* @param {mw.rcfilters.dm.SavedQueriesModel} savedQueriesModel Saved
queries model
* @param {Object} config Additional configuration
* @cfg {string} savedQueriesPreferenceName Where to save the saved
queries
+ * @cfg {string} daysPreferenceName Preference name for the days filter
+ * @cfg {string} limitPreferenceName Preference name for the limit
filter
*/
mw.rcfilters.Controller = function MwRcfiltersController( filtersModel,
changesListModel, savedQueriesModel, config ) {
this.filtersModel = filtersModel;
this.changesListModel = changesListModel;
this.savedQueriesModel = savedQueriesModel;
this.savedQueriesPreferenceName =
config.savedQueriesPreferenceName;
+ this.daysPreferenceName = config.daysPreferenceName;
+ this.limitPreferenceName = config.limitPreferenceName;
this.requestCounter = {};
this.baseFilterState = {};
@@ -122,12 +126,8 @@
max: 1000
},
sortFunc: function ( a, b ) { return
Number( a.name ) - Number( b.name ); },
- 'default': displayConfig.limitDefault,
- // Temporarily making this not sticky
until we resolve the problem
- // with the misleading preference. Note
that if this is to be permanent
- // we should remove all sticky behavior
methods completely
- // See T172156
- // isSticky: true,
+ 'default': mw.user.options.get(
this.limitPreferenceName, displayConfig.limitDefault ),
+ isSticky: true,
excludedFromSavedQueries: true,
filters: displayConfig.limitArray.map(
function ( num ) {
return
controller._createFilterDataFromNumber( num, num );
@@ -150,9 +150,8 @@
( Number( i ) * 24
).toFixed( 2 ) :
Number( i );
},
- 'default': displayConfig.daysDefault,
- // Temporarily making this not sticky
while limit is not sticky, see above
- // isSticky: true,
+ 'default': mw.user.options.get(
this.daysPreferenceName, displayConfig.daysDefault ),
+ isSticky: true,
excludedFromSavedQueries: true,
filters: [
// Hours (1, 2, 6, 12)
@@ -790,72 +789,48 @@
/**
* Update the limit default value
*
- * param {number} newValue New value
+ * @param {number} newValue New value
*/
- mw.rcfilters.Controller.prototype.updateLimitDefault = function ( /*
newValue */ ) {
- // HACK: Temporarily remove this from being sticky
- // See T172156
-
- /*
- if ( !$.isNumeric( newValue ) ) {
- return;
- }
-
- newValue = Number( newValue );
-
- if ( mw.user.options.get( 'rcfilters-rclimit' ) !== newValue ) {
- // Save the preference
- new mw.Api().saveOption( 'rcfilters-rclimit', newValue
);
- // Update the preference for this session
- mw.user.options.set( 'rcfilters-rclimit', newValue );
- }
- */
- return;
+ mw.rcfilters.Controller.prototype.updateLimitDefault = function (
newValue ) {
+ this.updateNumericPreference( this.limitPreferenceName,
newValue );
};
/**
* Update the days default value
*
- * param {number} newValue New value
+ * @param {number} newValue New value
*/
- mw.rcfilters.Controller.prototype.updateDaysDefault = function ( /*
newValue */ ) {
- // HACK: Temporarily remove this from being sticky
- // See T172156
-
- /*
- if ( !$.isNumeric( newValue ) ) {
- return;
- }
-
- newValue = Number( newValue );
-
- if ( mw.user.options.get( 'rcdays' ) !== newValue ) {
- // Save the preference
- new mw.Api().saveOption( 'rcdays', newValue );
- // Update the preference for this session
- mw.user.options.set( 'rcdays', newValue );
- }
- */
- return;
+ mw.rcfilters.Controller.prototype.updateDaysDefault = function (
newValue ) {
+ this.updateNumericPreference( this.daysPreferenceName, newValue
);
};
/**
* Update the group by page default value
*
- * @param {number} newValue New value
+ * @param {boolean} newValue New value
*/
mw.rcfilters.Controller.prototype.updateGroupByPageDefault = function (
newValue ) {
+ this.updateNumericPreference( 'usenewrc', Number( newValue ) );
+ };
+
+ /**
+ * Update a numeric preference with a new value
+ *
+ * @param {string} prefName Preference name
+ * @param {number|string} newValue New value
+ */
+ mw.rcfilters.Controller.prototype.updateNumericPreference = function (
prefName, newValue ) {
if ( !$.isNumeric( newValue ) ) {
return;
}
newValue = Number( newValue );
- if ( mw.user.options.get( 'usenewrc' ) !== newValue ) {
+ if ( mw.user.options.get( prefName ) !== newValue ) {
// Save the preference
- new mw.Api().saveOption( 'usenewrc', newValue );
+ new mw.Api().saveOption( prefName, newValue );
// Update the preference for this session
- mw.user.options.set( 'usenewrc', newValue );
+ mw.user.options.set( prefName, newValue );
}
};
diff --git a/resources/src/mediawiki.rcfilters/mw.rcfilters.init.js
b/resources/src/mediawiki.rcfilters/mw.rcfilters.init.js
index 14f0f6b..10bbcf6 100644
--- a/resources/src/mediawiki.rcfilters/mw.rcfilters.init.js
+++ b/resources/src/mediawiki.rcfilters/mw.rcfilters.init.js
@@ -14,13 +14,17 @@
wlTopSection,
namespaces,
savedQueriesPreferenceName = mw.config.get(
'wgStructuredChangeFiltersSavedQueriesPreferenceName' ),
+ daysPreferenceName = mw.config.get(
'wgStructuredChangeFiltersDaysPreferenceName' ),
+ limitPreferenceName = mw.config.get(
'wgStructuredChangeFiltersLimitPreferenceName' ),
filtersModel = new
mw.rcfilters.dm.FiltersViewModel(),
changesListModel = new
mw.rcfilters.dm.ChangesListViewModel(),
savedQueriesModel = new
mw.rcfilters.dm.SavedQueriesModel( filtersModel ),
controller = new mw.rcfilters.Controller(
filtersModel, changesListModel,
savedQueriesModel,
{
- savedQueriesPreferenceName:
savedQueriesPreferenceName
+ savedQueriesPreferenceName:
savedQueriesPreferenceName,
+ daysPreferenceName:
daysPreferenceName,
+ limitPreferenceName:
limitPreferenceName
}
),
$overlay = $( '<div>' )
diff --git
a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesLimitAndDateButtonWidget.js
b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesLimitAndDateButtonWidget.js
index cd22e89..6be6968 100644
---
a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesLimitAndDateButtonWidget.js
+++
b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesLimitAndDateButtonWidget.js
@@ -125,7 +125,7 @@
*/
mw.rcfilters.ui.ChangesLimitAndDateButtonWidget.prototype.onPopupGroupByPage =
function ( isGrouped ) {
this.controller.toggleFilterSelect(
this.groupByPageItemModel.getName(), isGrouped );
- this.controller.updateGroupByPageDefault( Number( isGrouped ) );
+ this.controller.updateGroupByPageDefault( isGrouped );
this.button.popup.toggle( false );
};
--
To view, visit https://gerrit.wikimedia.org/r/388264
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ib933de3a3f9e876924386e80f315506f60f8af54
Gerrit-PatchSet: 23
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Mooeypoo <[email protected]>
Gerrit-Reviewer: Catrope <[email protected]>
Gerrit-Reviewer: Florianschmidtwelzow <[email protected]>
Gerrit-Reviewer: Legoktm <[email protected]>
Gerrit-Reviewer: Mooeypoo <[email protected]>
Gerrit-Reviewer: Sbisson <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits