registerCallbackHandlers( $configuration ); } /** * @since 1.0 */ public function register() { foreach ( $this->handlers as $name => $callback ) { Hooks::register( $name, $callback ); } } /** * @since 1.0 */ public function deregister() { foreach ( array_keys( $this->handlers ) as $name ) { Hooks::clear( $name ); } } /** * @since 1.0 * * @param string $name * * @return Callable|false */ public function getHandlerFor( $name ) { return isset( $this->handlers[$name] ) ? $this->handlers[$name] : false; } /** * @since 1.0 * * @param string $name * * @return boolean */ public function isRegistered( $name ) { return Hooks::isRegistered( $name ); } private function registerCallbackHandlers( $configuration ) { /** * @see https://www.mediawiki.org/wiki/Manual:Hooks/ParserFirstCallInit */ $this->handlers['ParserFirstCallInit'] = function ( &$parser ) { $defaultTheme = $GLOBALS['mermaidgDefaultTheme']; $parser->setFunctionHook( 'mermaid', MermaidParserFunction::newCallback( $defaultTheme ), 0 ); return true; }; /** * @see https://www.mediawiki.org/wiki/Manual:Hooks/ResourceLoaderGetConfigVars */ $this->handlers['ResourceLoaderGetConfigVars'] = function ( &$vars ) { $vars['mermaid'] = [ 'theme' => $GLOBALS['mermaidgDefaultTheme'] ]; return true; }; /** * @see https://www.mediawiki.org/wiki/Manual:Hooks/OutputPageParserOutput */ $this->handlers['OutputPageParserOutput'] = function ( $out, $parserOutput ) { $out->addModuleStyles( 'ext.mermaid.styles' ); if ( $parserOutput->getExtensionData( 'ext-mermaid' ) === null || $parserOutput->getExtensionData( 'ext-mermaid' ) === false ) { return true; } $out->addModules( 'ext.mermaid' ); return true; }; } }