RCFilters: Export config vars in the RL modules where possible (take 2)

This reverts commit 492969e12b
and reinstates commit bf4f9d0313.

Bug: T201574
Depends-On: I58901657daf3e82229a303d8fe7a2c051ffe7634
Change-Id: I1b0a777760d4c2a149415da0d2068e6bfea5b917
This commit is contained in:
Catrope 2019-02-15 22:12:02 +00:00 committed by Roan Kattouw
parent 76e300f46c
commit 9ba1d8f526
8 changed files with 35 additions and 26 deletions

View file

@ -141,11 +141,11 @@ class ChangeTags {
* we consider the tag hidden, and return false.
*
* @param string $tag
* @param IContextSource $context
* @param MessageLocalizer $context
* @return string|bool Tag description or false if tag is to be hidden.
* @since 1.25 Returns false if tag is to be hidden.
*/
public static function tagDescription( $tag, IContextSource $context ) {
public static function tagDescription( $tag, MessageLocalizer $context ) {
$msg = $context->msg( "tag-$tag" );
if ( !$msg->exists() ) {
// No such message, so return the HTML-escaped tag name.
@ -168,11 +168,11 @@ class ChangeTags {
* for the long description.
*
* @param string $tag
* @param IContextSource $context
* @param MessageLocalizer $context
* @return Message|bool Message object of the tag long description or false if
* there is no description.
*/
public static function tagLongDescriptionMessage( $tag, IContextSource $context ) {
public static function tagLongDescriptionMessage( $tag, MessageLocalizer $context ) {
$msg = $context->msg( "tag-$tag-description" );
if ( !$msg->exists() ) {
return false;
@ -196,6 +196,8 @@ class ChangeTags {
* @return string Truncated long tag description.
*/
public static function truncateTagDescription( $tag, $length, IContextSource $context ) {
// FIXME: Make this accept MessageLocalizer and Language instead of IContextSource
$originalDesc = self::tagLongDescriptionMessage( $tag, $context );
// If there is no tag description, return empty string
if ( !$originalDesc ) {

View file

@ -792,10 +792,6 @@ abstract class ChangesListSpecialPage extends SpecialPage {
$out->addJsConfigVars( 'wgStructuredChangeFiltersMessages', $messages );
$out->addJsConfigVars( 'wgStructuredChangeFiltersCollapsedState', $collapsed );
$out->addJsConfigVars(
'wgRCFiltersChangeTags',
$this->getChangeTagList()
);
$out->addJsConfigVars(
'StructuredChangeFiltersDisplayConfig',
[
@ -823,26 +819,35 @@ abstract class ChangesListSpecialPage extends SpecialPage {
'wgStructuredChangeFiltersCollapsedPreferenceName',
static::$collapsedPreferenceName
);
$out->addJsConfigVars(
'StructuredChangeFiltersLiveUpdatePollingRate',
$this->getConfig()->get( 'StructuredChangeFiltersLiveUpdatePollingRate' )
);
} else {
$out->addBodyClasses( 'mw-rcfilters-disabled' );
}
}
/**
* Get config vars to export with the mediawiki.rcfilters.filters.ui module.
*
* @param ResourceLoaderContext $context
* @return array
*/
public static function getRcFiltersConfigVars( ResourceLoaderContext $context ) {
return [
'RCFiltersChangeTags' => self::getChangeTagList( $context ),
'StructuredChangeFiltersEditWatchlistUrl' =>
SpecialPage::getTitleFor( 'EditWatchlist' )->getLocalURL()
];
}
/**
* Fetch the change tags list for the front end
*
* @param ResourceLoaderContext $context
* @return array Tag data
*/
protected function getChangeTagList() {
protected static function getChangeTagList( ResourceLoaderContext $context ) {
$cache = ObjectCache::getMainWANInstance();
$context = $this->getContext();
return $cache->getWithSetCallback(
$cache->makeKey( 'changeslistspecialpage-changetags', $context->getLanguage()->getCode() ),
$cache->makeKey( 'changeslistspecialpage-changetags', $context->getLanguage() ),
$cache::TTL_MINUTE * 10,
function () use ( $context ) {
$explicitlyDefinedTags = array_fill_keys( ChangeTags::listExplicitlyDefinedTags(), 0 );
@ -858,6 +863,10 @@ abstract class ChangesListSpecialPage extends SpecialPage {
*/
$tagHitCounts = array_merge( $explicitlyDefinedTags, $softwareActivatedTags );
// HACK work around ChangeTags::truncateTagDescription() requiring a RequestContext
$fakeContext = RequestContext::newExtraneousContext( Title::newFromText( 'Dwimmerlaik' ) );
$fakeContext->setLanguage( Language::factory( $context->getLanguage() ) );
// Build the list and data
$result = [];
foreach ( $tagHitCounts as $tagName => $hits ) {
@ -875,7 +884,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
ChangeTags::truncateTagDescription(
$tagName,
self::TAG_DESC_CHARACTER_LIMIT,
$context
$fakeContext
),
'cssClass' => Sanitizer::escapeClass( 'mw-tag-' . $tagName ),
'hits' => $hits,

View file

@ -102,11 +102,6 @@ class SpecialWatchlist extends ChangesListSpecialPage {
if ( $this->isStructuredFilterUiEnabled() ) {
$output->addModuleStyles( [ 'mediawiki.rcfilters.highlightCircles.seenunseen.styles' ] );
$output->addJsConfigVars(
'wgStructuredChangeFiltersEditWatchlistUrl',
SpecialPage::getTitleFor( 'EditWatchlist' )->getLocalURL()
);
}
}

View file

@ -1816,6 +1816,7 @@ return [
'dm/ItemModel.js',
'dm/SavedQueriesModel.js',
'dm/SavedQueryItemModel.js',
'config.json' => [ 'config' => [ 'StructuredChangeFiltersLiveUpdatePollingRate' ] ],
],
'dependencies' => [
'mediawiki.String',
@ -1869,6 +1870,7 @@ return [
'ui/RclTargetPageWidget.js',
'ui/RclToOrFromWidget.js',
'ui/WatchlistTopSectionWidget.js',
'config.json' => [ 'callback' => 'ChangesListSpecialPage::getRcFiltersConfigVars' ],
],
'styles' => [
'styles/mw.rcfilters.mixins.less',

View file

@ -33,6 +33,8 @@
this.collapsedPreferenceName = config.collapsedPreferenceName;
this.normalizeTarget = !!config.normalizeTarget;
this.pollingRate = require( './config.json' ).StructuredChangeFiltersLiveUpdatePollingRate;
this.requestCounter = {};
this.baseFilterState = {};
this.uriProcessor = null;
@ -278,7 +280,6 @@
this.initialized = true;
this.switchView( 'default' );
this.pollingRate = mw.config.get( 'StructuredChangeFiltersLiveUpdatePollingRate' );
if ( this.pollingRate ) {
this._scheduleLiveUpdate();
}

View file

@ -123,7 +123,7 @@
mw.config.get( 'wgStructuredChangeFilters' ),
// All namespaces without Media namespace
getNamespaces( [ 'Media' ] ),
mw.config.get( 'wgRCFiltersChangeTags' ),
require( './config.json' ).RCFiltersChangeTags,
conditionalViews
);

View file

@ -90,7 +90,7 @@
this.numChangesAndDateWidget.$element
);
if ( mw.config.get( 'StructuredChangeFiltersLiveUpdatePollingRate' ) ) {
if ( this.controller.pollingRate ) {
$bottom.prepend( this.liveUpdateButton.$element );
}

View file

@ -30,7 +30,7 @@
editWatchlistButton = new OO.ui.ButtonWidget( {
label: mw.msg( 'rcfilters-watchlist-edit-watchlist-button' ),
icon: 'edit',
href: mw.config.get( 'wgStructuredChangeFiltersEditWatchlistUrl' )
href: require( '../config.json' ).StructuredChangeFiltersEditWatchlistUrl
} );
markSeenButton = new MarkSeenButtonWidget( controller, changesListModel );