blob: f6fac542a619d3e066510177c362652d6297f69d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
<?php
namespace Mermaid;
use Hooks;
/**
* @license GNU GPL v2+
* @since 1.0
*
* @author mwjames
*/
class HookRegistry {
/**
* @var array
*/
private $handlers = array();
/**
* @since 1.0
*
* @param array $configuration
*/
public function __construct( $configuration = array () ) {
$this->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;
};
}
}
|