Create ParserFetchTemplateData hook

This is moved from TemplateData, but the interface isn't quite right.
Filed T304899 to improve it in the future.

Bug: T304740
Change-Id: Iadd1ed70b72fc282bd5addfc1654aa73322ea470
This commit is contained in:
C. Scott Ananian 2022-03-28 14:26:17 -04:00
parent 3cd693aed6
commit 1c3216bf92
4 changed files with 49 additions and 3 deletions

View file

@ -967,6 +967,7 @@ $wgAutoloadLocalClasses = [
'MediaWiki\\Hook\\ParserCacheSaveCompleteHook' => __DIR__ . '/includes/parser/Hook/ParserCacheSaveCompleteHook.php',
'MediaWiki\\Hook\\ParserClearStateHook' => __DIR__ . '/includes/parser/Hook/ParserClearStateHook.php',
'MediaWiki\\Hook\\ParserClonedHook' => __DIR__ . '/includes/parser/Hook/ParserClonedHook.php',
'MediaWiki\\Hook\\ParserFetchTemplateDataHook' => __DIR__ . '/includes/parser/Hook/ParserFetchTemplateDataHook.php',
'MediaWiki\\Hook\\ParserFirstCallInitHook' => __DIR__ . '/includes/parser/Hook/ParserFirstCallInitHook.php',
'MediaWiki\\Hook\\ParserGetVariableValueSwitchHook' => __DIR__ . '/includes/parser/Hook/ParserGetVariableValueSwitchHook.php',
'MediaWiki\\Hook\\ParserGetVariableValueTsHook' => __DIR__ . '/includes/parser/Hook/ParserGetVariableValueTsHook.php',

View file

@ -282,6 +282,7 @@ class HookRunner implements
\MediaWiki\Hook\ParserCacheSaveCompleteHook,
\MediaWiki\Hook\ParserClearStateHook,
\MediaWiki\Hook\ParserClonedHook,
\MediaWiki\Hook\ParserFetchTemplateDataHook,
\MediaWiki\Hook\ParserFirstCallInitHook,
\MediaWiki\Hook\ParserGetVariableValueSwitchHook,
\MediaWiki\Hook\ParserGetVariableValueTsHook,
@ -2867,6 +2868,13 @@ class HookRunner implements
);
}
public function onParserFetchTemplateData( array $titles, array &$tplData ): bool {
return $this->container->run(
'ParserFetchTemplateData',
[ $titles, &$tplData ]
);
}
public function onParserFirstCallInit( $parser ) {
return $this->container->run(
'ParserFirstCallInit',

View file

@ -0,0 +1,36 @@
<?php
namespace MediaWiki\Hook;
/**
* This is a hook handler interface, see docs/Hooks.md.
* Use the hook name "ParserFetchTemplateData" to register handlers
* implementing this interface.
*
* @unstable
* @ingroup Hooks
*/
interface ParserFetchTemplateDataHook {
/**
* This hook allows Parsoid to fetch additional serialization information
* about a Template, including the type of its arguments, whether they
* should be serialized as inline or block style wikitext, etc.
* See [[Extension:TemplateData]] for more information.
*
* @param string[] $titles An array of template names
* @param array<string,object> &$tplData The hook will create an
* associative array, mapping each given
* template name to an object representing the TemplateData for that
* template, or special objects if the title doesn't exist, is missing
* TemplateData, or has malformed TemplateData.
* @return bool Typically returns true, to allow all registered hooks a
* chance to fill in template data.
*
* @unstable temporary hook; will be cleaned up before it is made stable
* @since 1.39
*/
public function onParserFetchTemplateData(
array $titles,
array &$tplData
): bool;
}

View file

@ -408,9 +408,10 @@ class DataAccess extends IDataAccess {
/** @inheritDoc */
public function fetchTemplateData( IPageConfig $pageConfig, string $title ): ?array {
$ret = [];
// @todo: Document this hook in MediaWiki / Extension:TemplateData
$this->hookContainer->run(
'ParserFetchTemplateData', [ [ $title ], &$ret ]
// @todo: This hook needs some clean up: T304899
$this->hookRunner->onParserFetchTemplateData(
[ $title ],
$ret # value returned by reference
);
// Cast value to array since the hook returns this as a stdclass