mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Math
synced 2024-11-30 18:35:12 +00:00
Create HookRunner class and the hook handler interfaces
Bug: T263353 Change-Id: I7ee943a262eba7d2f00fd05925676cc2351b7be9
This commit is contained in:
parent
3263379318
commit
28c5a67697
|
@ -3,6 +3,7 @@
|
||||||
namespace MediaWiki\Extension\Math\HookHandlers;
|
namespace MediaWiki\Extension\Math\HookHandlers;
|
||||||
|
|
||||||
use FatalError;
|
use FatalError;
|
||||||
|
use MediaWiki\Extension\Math\Hooks\HookRunner;
|
||||||
use MediaWiki\Extension\Math\MathConfig;
|
use MediaWiki\Extension\Math\MathConfig;
|
||||||
use MediaWiki\Extension\Math\MathMathML;
|
use MediaWiki\Extension\Math\MathMathML;
|
||||||
use MediaWiki\Extension\Math\MathMathMLCli;
|
use MediaWiki\Extension\Math\MathMathMLCli;
|
||||||
|
@ -39,8 +40,8 @@ class ParserHooksHandler implements
|
||||||
/** @var UserOptionsLookup */
|
/** @var UserOptionsLookup */
|
||||||
private $userOptionsLookup;
|
private $userOptionsLookup;
|
||||||
|
|
||||||
/** @var HookContainer */
|
/** @var HookRunner */
|
||||||
private $hookContainer;
|
private $hookRunner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param RendererFactory $rendererFactory
|
* @param RendererFactory $rendererFactory
|
||||||
|
@ -54,7 +55,7 @@ class ParserHooksHandler implements
|
||||||
) {
|
) {
|
||||||
$this->rendererFactory = $rendererFactory;
|
$this->rendererFactory = $rendererFactory;
|
||||||
$this->userOptionsLookup = $userOptionsLookup;
|
$this->userOptionsLookup = $userOptionsLookup;
|
||||||
$this->hookContainer = $hookContainer;
|
$this->hookRunner = new HookRunner( $hookContainer );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -138,9 +139,8 @@ class ParserHooksHandler implements
|
||||||
$renderer->addTrackingCategories( $parser );
|
$renderer->addTrackingCategories( $parser );
|
||||||
return $renderer->getLastError();
|
return $renderer->getLastError();
|
||||||
}
|
}
|
||||||
// TODO: Convert to a new style hook system
|
$this->hookRunner->onMathFormulaPostRender(
|
||||||
$this->hookContainer->run( 'MathFormulaPostRender',
|
$parser, $renderer, $renderedMath
|
||||||
[ $parser, $renderer, &$renderedMath ]
|
|
||||||
); // Enables indexing of math formula
|
); // Enables indexing of math formula
|
||||||
|
|
||||||
// Writes cache if rendering was successful
|
// Writes cache if rendering was successful
|
||||||
|
|
43
src/Hooks/HookRunner.php
Normal file
43
src/Hooks/HookRunner.php
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace MediaWiki\Extension\Math\Hooks;
|
||||||
|
|
||||||
|
use MediaWiki\Extension\Math\MathRenderer;
|
||||||
|
use MediaWiki\HookContainer\HookContainer;
|
||||||
|
use Parser;
|
||||||
|
use stdClass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is a hook runner class, see docs/Hooks.md in core.
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
class HookRunner implements
|
||||||
|
MathFormulaPostRenderHook,
|
||||||
|
MathRenderingResultRetrievedHook
|
||||||
|
{
|
||||||
|
private HookContainer $hookContainer;
|
||||||
|
|
||||||
|
public function __construct( HookContainer $hookContainer ) {
|
||||||
|
$this->hookContainer = $hookContainer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function onMathFormulaPostRender( Parser $parser, MathRenderer $renderer, string &$renderedMath ) {
|
||||||
|
return $this->hookContainer->run(
|
||||||
|
'MathFormulaPostRender',
|
||||||
|
[ $parser, $renderer, &$renderedMath ]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function onMathRenderingResultRetrieved( MathRenderer &$renderer, stdClass &$jsonResult ) {
|
||||||
|
return $this->hookContainer->run(
|
||||||
|
'MathRenderingResultRetrieved',
|
||||||
|
[ &$renderer, &$jsonResult ]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
23
src/Hooks/MathFormulaPostRenderHook.php
Normal file
23
src/Hooks/MathFormulaPostRenderHook.php
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace MediaWiki\Extension\Math\Hooks;
|
||||||
|
|
||||||
|
use MediaWiki\Extension\Math\MathRenderer;
|
||||||
|
use Parser;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is a hook handler interface, see docs/Hooks.md in core.
|
||||||
|
* Use the hook name "MathFormulaPostRender" to register handlers implementing this interface.
|
||||||
|
*
|
||||||
|
* @stable to implement
|
||||||
|
* @ingroup Hooks
|
||||||
|
*/
|
||||||
|
interface MathFormulaPostRenderHook {
|
||||||
|
/**
|
||||||
|
* @param Parser $parser
|
||||||
|
* @param MathRenderer $renderer
|
||||||
|
* @param string &$renderedMath
|
||||||
|
* @return bool|void True or no return value to continue or false to abort
|
||||||
|
*/
|
||||||
|
public function onMathFormulaPostRender( Parser $parser, MathRenderer $renderer, string &$renderedMath );
|
||||||
|
}
|
22
src/Hooks/MathRenderingResultRetrievedHook.php
Normal file
22
src/Hooks/MathRenderingResultRetrievedHook.php
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace MediaWiki\Extension\Math\Hooks;
|
||||||
|
|
||||||
|
use MediaWiki\Extension\Math\MathRenderer;
|
||||||
|
use stdClass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is a hook handler interface, see docs/Hooks.md in core.
|
||||||
|
* Use the hook name "MathRenderingResultRetrieved" to register handlers implementing this interface.
|
||||||
|
*
|
||||||
|
* @stable to implement
|
||||||
|
* @ingroup Hooks
|
||||||
|
*/
|
||||||
|
interface MathRenderingResultRetrievedHook {
|
||||||
|
/**
|
||||||
|
* @param MathRenderer &$renderer
|
||||||
|
* @param stdClass &$jsonResult
|
||||||
|
* @return bool|void True or no return value to continue or false to abort
|
||||||
|
*/
|
||||||
|
public function onMathRenderingResultRetrieved( MathRenderer &$renderer, stdClass &$jsonResult );
|
||||||
|
}
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace MediaWiki\Extension\Math;
|
namespace MediaWiki\Extension\Math;
|
||||||
|
|
||||||
|
use MediaWiki\Extension\Math\Hooks\HookRunner;
|
||||||
use MediaWiki\Logger\LoggerFactory;
|
use MediaWiki\Logger\LoggerFactory;
|
||||||
use MediaWiki\MediaWikiServices;
|
use MediaWiki\MediaWikiServices;
|
||||||
use StatusValue;
|
use StatusValue;
|
||||||
|
@ -117,8 +118,9 @@ class MathLaTeXML extends MathMathML {
|
||||||
$this->setMathml( $jsonResult->result );
|
$this->setMathml( $jsonResult->result );
|
||||||
// Avoid PHP 7.1 warning from passing $this by reference
|
// Avoid PHP 7.1 warning from passing $this by reference
|
||||||
$renderer = $this;
|
$renderer = $this;
|
||||||
MediaWikiServices::getInstance()->getHookContainer()->run( 'MathRenderingResultRetrieved',
|
( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) )
|
||||||
[ &$renderer, &$jsonResult ]
|
->onMathRenderingResultRetrieved(
|
||||||
|
$renderer, $jsonResult
|
||||||
); // Enables debugging of server results
|
); // Enables debugging of server results
|
||||||
return StatusValue::newGood();
|
return StatusValue::newGood();
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
namespace MediaWiki\Extension\Math;
|
namespace MediaWiki\Extension\Math;
|
||||||
|
|
||||||
use Html;
|
use Html;
|
||||||
|
use MediaWiki\Extension\Math\Hooks\HookRunner;
|
||||||
use MediaWiki\Logger\LoggerFactory;
|
use MediaWiki\Logger\LoggerFactory;
|
||||||
use MediaWiki\MediaWikiServices;
|
use MediaWiki\MediaWikiServices;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
@ -547,8 +548,8 @@ class MathMathML extends MathRenderer {
|
||||||
}
|
}
|
||||||
// Avoid PHP 7.1 warning from passing $this by reference
|
// Avoid PHP 7.1 warning from passing $this by reference
|
||||||
$renderer = $this;
|
$renderer = $this;
|
||||||
MediaWikiServices::getInstance()->getHookContainer()->run( 'MathRenderingResultRetrieved',
|
( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) )->onMathRenderingResultRetrieved(
|
||||||
[ &$renderer, &$jsonResult ]
|
$renderer, $jsonResult
|
||||||
); // Enables debugging of server results
|
); // Enables debugging of server results
|
||||||
return StatusValue::newGood(); // FIXME: empty?
|
return StatusValue::newGood(); // FIXME: empty?
|
||||||
} else {
|
} else {
|
||||||
|
|
16
tests/phpunit/unit/HookRunnerTest.php
Normal file
16
tests/phpunit/unit/HookRunnerTest.php
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace MediaWiki\Extension\Math\Tests\Unit;
|
||||||
|
|
||||||
|
use MediaWiki\Extension\Math\Hooks\HookRunner;
|
||||||
|
use MediaWiki\Tests\HookContainer\HookRunnerTestBase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \MediaWiki\Extension\Math\Hooks\HookRunner
|
||||||
|
*/
|
||||||
|
class HookRunnerTest extends HookRunnerTestBase {
|
||||||
|
|
||||||
|
public static function provideHookRunners() {
|
||||||
|
yield HookRunner::class => [ HookRunner::class ];
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue