Allow the default source namespace to be changed

This adds a config option so that the src attribute of the <templatestyles> tag can be set to default namespace other than Template.

Bug: T290250
Change-Id: Iec4f5d630d025e0bacba05d40cd74fc9312fcae2
This commit is contained in:
Porplemontage 2021-09-03 00:55:55 +00:00
parent 042c5e6a73
commit cf7225f127
2 changed files with 7 additions and 7 deletions

View file

@ -114,6 +114,10 @@
"TemplateStylesMaxStylesheetSize": { "TemplateStylesMaxStylesheetSize": {
"description": "The maximum size of a stylesheet, in bytes. Set null if you don't want to impose a limit.", "description": "The maximum size of a stylesheet, in bytes. Set null if you don't want to impose a limit.",
"value": 102400 "value": 102400
},
"TemplateStylesDefaultNamespace": {
"description": "The default namespace for the src attribute of the <templatestyles> tag. The value 10 corresponds to NS_TEMPLATE.",
"value": 10
} }
}, },
"ConfigRegistry": { "ConfigRegistry": {

View file

@ -193,7 +193,6 @@ class TemplateStylesHooks {
*/ */
public static function onParserFirstCallInit( Parser $parser ) { public static function onParserFirstCallInit( Parser $parser ) {
$parser->setHook( 'templatestyles', [ __CLASS__, 'handleTag' ] ); $parser->setHook( 'templatestyles', [ __CLASS__, 'handleTag' ] );
/** @phan-suppress-next-line PhanUndeclaredProperty */
$parser->extTemplateStylesCache = new MapCacheLRU( 100 ); // 100 is arbitrary $parser->extTemplateStylesCache = new MapCacheLRU( 100 ); // 100 is arbitrary
} }
@ -243,7 +242,6 @@ class TemplateStylesHooks {
* @param Parser $parser * @param Parser $parser
*/ */
public static function onParserClearState( Parser $parser ) { public static function onParserClearState( Parser $parser ) {
/** @phan-suppress-next-line PhanUndeclaredProperty */
$parser->extTemplateStylesCache->clear(); $parser->extTemplateStylesCache->clear();
} }
@ -257,7 +255,8 @@ class TemplateStylesHooks {
* @suppress SecurityCheck-XSS * @suppress SecurityCheck-XSS
*/ */
public static function handleTag( $text, $params, $parser, $frame ) { public static function handleTag( $text, $params, $parser, $frame ) {
if ( self::getConfig()->get( 'TemplateStylesDisable' ) ) { $config = self::getConfig();
if ( $config->get( 'TemplateStylesDisable' ) ) {
return ''; return '';
} }
@ -277,7 +276,7 @@ class TemplateStylesHooks {
// situation. We can't allow for subpage syntax like src="/styles.css" // situation. We can't allow for subpage syntax like src="/styles.css"
// or the like, though, because stuff like substing and Parsoid would // or the like, though, because stuff like substing and Parsoid would
// wind up wanting to make that relative to the wrong page. // wind up wanting to make that relative to the wrong page.
$title = Title::newFromText( $params['src'], NS_TEMPLATE ); $title = Title::newFromText( $params['src'], $config->get( 'TemplateStylesDefaultNamespace' ) );
if ( !$title ) { if ( !$title ) {
return self::formatTagError( $parser, [ 'templatestyles-invalid-src' ] ); return self::formatTagError( $parser, [ 'templatestyles-invalid-src' ] );
} }
@ -332,9 +331,7 @@ class TemplateStylesHooks {
} }
// Already cached? // Already cached?
/** @phan-suppress-next-line PhanUndeclaredProperty */
if ( $parser->extTemplateStylesCache->has( $cacheKey ) ) { if ( $parser->extTemplateStylesCache->has( $cacheKey ) ) {
/** @phan-suppress-next-line PhanUndeclaredProperty */
return $parser->extTemplateStylesCache->get( $cacheKey ); return $parser->extTemplateStylesCache->get( $cacheKey );
} }
@ -376,7 +373,6 @@ class TemplateStylesHooks {
$ret = Html::inlineStyle( $marker, 'all', [ $ret = Html::inlineStyle( $marker, 'all', [
'data-mw-deduplicate' => "TemplateStyles:$cacheKey", 'data-mw-deduplicate' => "TemplateStyles:$cacheKey",
] ); ] );
/** @phan-suppress-next-line PhanUndeclaredProperty */
$parser->extTemplateStylesCache->set( $cacheKey, $ret ); $parser->extTemplateStylesCache->set( $cacheKey, $ret );
return $ret; return $ret;
} }