mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Cite
synced 2024-09-23 18:29:15 +00:00
Extract all hook handler functions to small glue classes
As of now, this patch does not touch the existing code. However, the goal is to remove a lot of the related code from the Cite class. This will be done in later patches. This here is a separate patch to make reviewing the later patches much easier. The existing parser tests should be proof enough this chain of patches is not changing any behavior. Change-Id: I27ae972f81071bb4036bd452560768fae409417b
This commit is contained in:
parent
f590379a64
commit
1a371ec6a5
|
@ -120,7 +120,9 @@
|
|||
"Cite": "includes/Cite.php",
|
||||
"CiteHooks": "includes/CiteHooks.php",
|
||||
"CiteDataModule": "includes/CiteDataModule.php",
|
||||
"CiteCSSFileModule": "includes/CiteCSSFileModule.php"
|
||||
"CiteCSSFileModule": "includes/CiteCSSFileModule.php",
|
||||
"CiteParserHooks": "includes/CiteParserHooks.php",
|
||||
"CiteParserTagHooks": "includes/CiteParserTagHooks.php"
|
||||
},
|
||||
"TrackingCategories": [
|
||||
"cite-tracking-category-cite-error"
|
||||
|
|
|
@ -1144,8 +1144,8 @@ class Cite {
|
|||
}
|
||||
|
||||
$parser->extCite = clone $this;
|
||||
$parser->setHook( 'ref', [ $parser->extCite, 'ref' ] );
|
||||
$parser->setHook( 'references', [ $parser->extCite, 'references' ] );
|
||||
$parser->setHook( 'ref', 'CiteParserTagHooks::ref' );
|
||||
$parser->setHook( 'references', 'CiteParserTagHooks::references' );
|
||||
|
||||
// Clear the state, making sure it will actually work.
|
||||
$parser->extCite->mInCite = false;
|
||||
|
|
|
@ -25,15 +25,15 @@ class CiteHooks {
|
|||
$parser->extCite = new Cite();
|
||||
|
||||
if ( !self::$hooksInstalled ) {
|
||||
$wgHooks['ParserClearState'][] = [ $parser->extCite, 'clearState' ];
|
||||
$wgHooks['ParserCloned'][] = [ $parser->extCite, 'cloneState' ];
|
||||
$wgHooks['ParserAfterParse'][] = [ $parser->extCite, 'checkRefsNoReferences', true ];
|
||||
$wgHooks['ParserBeforeTidy'][] = [ $parser->extCite, 'checkRefsNoReferences', false ];
|
||||
$wgHooks['ParserClearState'][] = 'CiteParserHooks::onParserClearState';
|
||||
$wgHooks['ParserCloned'][] = 'CiteParserHooks::onParserCloned';
|
||||
$wgHooks['ParserAfterParse'][] = 'CiteParserHooks::onParserAfterParse';
|
||||
$wgHooks['ParserBeforeTidy'][] = 'CiteParserHooks::onParserBeforeTidy';
|
||||
self::$hooksInstalled = true;
|
||||
}
|
||||
|
||||
$parser->setHook( 'ref', [ $parser->extCite, 'ref' ] );
|
||||
$parser->setHook( 'references', [ $parser->extCite, 'references' ] );
|
||||
$parser->setHook( 'ref', 'CiteParserTagHooks::ref' );
|
||||
$parser->setHook( 'references', 'CiteParserTagHooks::references' );
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
52
includes/CiteParserHooks.php
Normal file
52
includes/CiteParserHooks.php
Normal file
|
@ -0,0 +1,52 @@
|
|||
<?php
|
||||
|
||||
class CiteParserHooks {
|
||||
|
||||
/**
|
||||
* @see https://www.mediawiki.org/wiki/Manual:Hooks/ParserClearState
|
||||
*
|
||||
* @param Parser $parser
|
||||
*/
|
||||
public static function onParserClearState( Parser $parser ) {
|
||||
/** @var Cite $cite */
|
||||
$cite = $parser->extCite;
|
||||
$cite->clearState( $parser );
|
||||
}
|
||||
|
||||
/**
|
||||
* @see https://www.mediawiki.org/wiki/Manual:Hooks/ParserCloned
|
||||
*
|
||||
* @param Parser $parser
|
||||
*/
|
||||
public static function onParserCloned( Parser $parser ) {
|
||||
/** @var Cite $cite */
|
||||
$cite = $parser->extCite;
|
||||
$cite->cloneState( $parser );
|
||||
}
|
||||
|
||||
/**
|
||||
* @see https://www.mediawiki.org/wiki/Manual:Hooks/ParserAfterParse
|
||||
*
|
||||
* @param Parser $parser
|
||||
* @param string &$text
|
||||
* @param StripState $stripState
|
||||
*/
|
||||
public static function onParserAfterParse( Parser $parser, &$text, $stripState ) {
|
||||
/** @var Cite $cite */
|
||||
$cite = $parser->extCite;
|
||||
$cite->checkRefsNoReferences( true, $parser, $text );
|
||||
}
|
||||
|
||||
/**
|
||||
* @see https://www.mediawiki.org/wiki/Manual:Hooks/ParserBeforeTidy
|
||||
*
|
||||
* @param Parser $parser
|
||||
* @param string &$text
|
||||
*/
|
||||
public static function onParserBeforeTidy( Parser $parser, &$text ) {
|
||||
/** @var Cite $cite */
|
||||
$cite = $parser->extCite;
|
||||
$cite->checkRefsNoReferences( false, $parser, $text );
|
||||
}
|
||||
|
||||
}
|
39
includes/CiteParserTagHooks.php
Normal file
39
includes/CiteParserTagHooks.php
Normal file
|
@ -0,0 +1,39 @@
|
|||
<?php
|
||||
|
||||
class CiteParserTagHooks {
|
||||
|
||||
/**
|
||||
* Parser hook for the <ref> tag.
|
||||
*
|
||||
* @param string|null $content Raw wikitext content of the <ref> tag.
|
||||
* @param string[] $attributes
|
||||
* @param Parser $parser
|
||||
* @param PPFrame $frame
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function ref( $content, array $attributes, Parser $parser, PPFrame $frame ) {
|
||||
/** @var Cite $cite */
|
||||
$cite = $parser->extCite;
|
||||
// @phan-suppress-next-line SecurityCheck-XSS False positive
|
||||
return $cite->ref( $content, $attributes, $parser, $frame );
|
||||
}
|
||||
|
||||
/**
|
||||
* Parser hook for the <references> tag.
|
||||
*
|
||||
* @param string|null $content Raw wikitext content of the <references> tag.
|
||||
* @param string[] $attributes
|
||||
* @param Parser $parser
|
||||
* @param PPFrame $frame
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function references( $content, array $attributes, Parser $parser, PPFrame $frame ) {
|
||||
/** @var Cite $cite */
|
||||
$cite = $parser->extCite;
|
||||
// @phan-suppress-next-line SecurityCheck-XSS False positive
|
||||
return $cite->references( $content, $attributes, $parser, $frame );
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue