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": {
"description": "The maximum size of a stylesheet, in bytes. Set null if you don't want to impose a limit.",
"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": {

View file

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