From 28132fb14afe23b27942150a2fb8b265ece40451 Mon Sep 17 00:00:00 2001 From: Moriel Schottlender Date: Tue, 21 Nov 2017 15:59:44 -0800 Subject: [PATCH] RCFilters: Respect subpage in RCLinked Make sure that when we redirect a URL when there's a saved query, we retain the information about a subpage. Then, normalize the URL to always use &target=xxx so that the system knows to correct the value if the user uses the form that is, for the moment, outside the regular RCFilters interface. Bug: T181100 Change-Id: I75cfb2b56a4da6357e6117b3f34f3178bfb2c90c --- includes/specials/SpecialRecentchangeslinked.php | 14 ++++++++++++++ .../mw.rcfilters.UriProcessor.js | 15 +++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/includes/specials/SpecialRecentchangeslinked.php b/includes/specials/SpecialRecentchangeslinked.php index 358a309824..e4cc3d1cf9 100644 --- a/includes/specials/SpecialRecentchangeslinked.php +++ b/includes/specials/SpecialRecentchangeslinked.php @@ -30,6 +30,8 @@ class SpecialRecentChangesLinked extends SpecialRecentChanges { /** @var bool|Title */ protected $rclTargetTitle; + protected $rclTarget; + function __construct() { parent::__construct( 'Recentchangeslinked' ); } @@ -44,6 +46,7 @@ class SpecialRecentChangesLinked extends SpecialRecentChanges { public function parseParameters( $par, FormOptions $opts ) { $opts['target'] = $par; + $this->rclTarget = $par; } /** @@ -293,4 +296,15 @@ class SpecialRecentChangesLinked extends SpecialRecentChanges { public function prefixSearchSubpages( $search, $limit, $offset ) { return $this->prefixSearchString( $search, $limit, $offset ); } + + /** + * Get a self-referential title object + * with consideration to the given subpage. + * + * @return Title + * @since 1.23 + */ + public function getPageTitle() { + return parent::getPageTitle( $this->rclTarget ); + } } diff --git a/resources/src/mediawiki.rcfilters/mw.rcfilters.UriProcessor.js b/resources/src/mediawiki.rcfilters/mw.rcfilters.UriProcessor.js index 621c200551..fe806ed74d 100644 --- a/resources/src/mediawiki.rcfilters/mw.rcfilters.UriProcessor.js +++ b/resources/src/mediawiki.rcfilters/mw.rcfilters.UriProcessor.js @@ -63,7 +63,8 @@ * @return {mw.Uri} Updated Uri */ mw.rcfilters.UriProcessor.prototype.getUpdatedUri = function ( uriQuery ) { - var uri = new mw.Uri(), + var titlePieces, + uri = new mw.Uri(), unrecognizedParams = this.getUnrecognizedParams( uriQuery || uri.query ); if ( uriQuery ) { @@ -72,6 +73,17 @@ uri.query = uriQuery; } + // Normalize subpage to use &target= so we are always + // consistent in Special:RecentChangesLinked between the + // ?title=Special:RecentChangesLinked/TargetPage and + // ?title=Special:RecentChangesLinked&target=TargetPage + if ( uri.query.title && uri.query.title.indexOf( '/' ) !== -1 ) { + titlePieces = uri.query.title.split( '/' ); + + unrecognizedParams.title = titlePieces.shift(); + unrecognizedParams.target = titlePieces.join( '/' ); + } + uri.query = this.filtersModel.getMinimizedParamRepresentation( $.extend( true, @@ -87,7 +99,6 @@ // Reapply unrecognized params and url version uri.query = $.extend( true, {}, uri.query, unrecognizedParams, { urlversion: '2' } ); - return uri; }; -- 2.20.1