xref: /plugin/mermaid/action.php (revision 4c8bd9fffef2d5bdb89af4194782d1621bf34eef)
1<?php
2/**
3 * DokuWiki Plugin mermaid (Action Component)
4 *
5 * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
6 * @author  Robert Weinmeister <develop@weinmeister.org>
7 */
8
9class action_plugin_mermaid extends \dokuwiki\Extension\ActionPlugin
10{
11    /** @inheritDoc */
12    public function register(Doku_Event_Handler $controller)
13    {
14        $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'load');
15    }
16
17    public function load(Doku_Event $event, $param)
18    {
19        // Can be changed for debugging Mermaid
20        // https://mermaid.js.org/config/directives.html#changing-loglevel-via-directive
21        define("MERMAIDLOGLEVEL", "error");
22
23        $theme = $this->getConf('theme');
24        $init = "mermaid.initialize({startOnLoad: true, logLevel: '".MERMAIDLOGLEVEL."', theme: '".$theme."'});";
25
26        switch ($this->getConf('location')) {
27            case 'local':
28                $event->data['script'][] = array
29                (
30                    'type'    => 'text/javascript',
31                    'charset' => 'utf-8',
32                    'src' => DOKU_BASE.'lib/plugins/mermaid/mermaid.min.js'
33                );
34                break;
35            case 'latest':
36                $event->data['script'][] = array
37                (
38                    'type'    => 'module',
39                    'charset' => 'utf-8',
40                    '_data' => "import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs';".$init
41                );
42                break;
43            case 'remote106':
44                $event->data['script'][] = array
45                (
46                    'type' => 'module',
47                    'charset' => 'utf-8',
48                    '_data' => "import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.6.1/dist/mermaid.esm.min.mjs';
49                                mermaid.initialize({startOnLoad: true, logLevel: '" . MERMAIDLOGLEVEL . "'});"
50                );
51                break;
52            case 'remote104':
53                $event->data['script'][] = array
54                (
55                    'type' => 'module',
56                    'charset' => 'utf-8',
57                    '_data' => "import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.4.0/dist/mermaid.esm.min.mjs';
58                                mermaid.initialize({startOnLoad: true, logLevel: '" . MERMAIDLOGLEVEL . "'});"
59                );
60                break;
61            case 'remote103':
62                $event->data['script'][] = array
63                (
64                    'type' => 'module',
65                    'charset' => 'utf-8',
66                    '_data' => "import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.3.1/dist/mermaid.esm.min.mjs';".$init
67                );
68                break;
69            case 'remote102':
70                $event->data['script'][] = array
71                (
72                    'type'    => 'module',
73                    'charset' => 'utf-8',
74                    '_data' => "import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.2.4/dist/mermaid.esm.min.mjs';".$init
75                );
76                break;
77            case 'remote101':
78                $event->data['script'][] = array
79                (
80                    'type'    => 'module',
81                    'charset' => 'utf-8',
82                    '_data' => "import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.1.0/dist/mermaid.esm.min.mjs';".$init
83                );
84                break;
85            case 'remote100':
86                $event->data['script'][] = array
87                (
88                    'type'    => 'module',
89                    'charset' => 'utf-8',
90                    '_data' => "import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.0.2/dist/mermaid.esm.min.mjs';".$init
91                );
92                break;
93            case 'remote94':
94                $event->data['script'][] = array
95                (
96                    'type'    => 'text/javascript',
97                    'charset' => 'utf-8',
98                    'src' => 'https://cdn.jsdelivr.net/npm/mermaid@9.4.3/dist/mermaid.min.js'
99                );
100                break;
101            case 'remote93':
102                $event->data['script'][] = array
103                (
104                    'type'    => 'text/javascript',
105                    'charset' => 'utf-8',
106                    'src' => 'https://cdn.jsdelivr.net/npm/mermaid@9.3.0/dist/mermaid.min.js'
107                );
108                break;
109            default:
110        }
111
112        $event->data['link'][] = array
113        (
114            'rel'     => 'stylesheet',
115            'type'    => 'text/css',
116            'href'    => DOKU_BASE."lib/plugins/mermaid/mermaid.css",
117        );
118
119        switch ($this->getConf('location')) {
120            case 'local':
121            case 'remote94':
122            case 'remote93':
123                $event->data['script'][] = array
124                (
125                    'type'    => 'text/javascript',
126                    'charset' => 'utf-8',
127                    '_data'   => $init
128                );
129                break;
130            default:
131        }
132    }
133}
134