xref: /plugin/mermaid/action.php (revision a612c7d67513254b6708f43e5866266f7dbb6b14)
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        switch ($this->getConf('location')) {
24            case 'local':
25                $event->data['script'][] = array
26                (
27                    'type'    => 'text/javascript',
28                    'charset' => 'utf-8',
29                    'src' => DOKU_BASE.'lib/plugins/mermaid/mermaid.min.js'
30                );
31                break;
32            case 'latest':
33                $event->data['script'][] = array
34                (
35                    'type'    => 'module',
36                    'charset' => 'utf-8',
37                    '_data' => "import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs';
38                                mermaid.initialize({startOnLoad: true, logLevel: '".MERMAIDLOGLEVEL."'});"
39                );
40                break;
41            case 'remote106':
42                $event->data['script'][] = array
43                (
44                    'type' => 'module',
45                    'charset' => 'utf-8',
46                    '_data' => "import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.6.1/dist/mermaid.esm.min.mjs';
47                                mermaid.initialize({startOnLoad: true, logLevel: '" . MERMAIDLOGLEVEL . "'});"
48                );
49                break;
50            case 'remote104':
51                $event->data['script'][] = array
52                (
53                    'type' => 'module',
54                    'charset' => 'utf-8',
55                    '_data' => "import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.4.0/dist/mermaid.esm.min.mjs';
56                                mermaid.initialize({startOnLoad: true, logLevel: '" . MERMAIDLOGLEVEL . "'});"
57                );
58                break;
59            case 'remote103':
60                $event->data['script'][] = array
61                (
62                    'type' => 'module',
63                    'charset' => 'utf-8',
64                    '_data' => "import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.3.1/dist/mermaid.esm.min.mjs';
65                                mermaid.initialize({startOnLoad: true, logLevel: '" . MERMAIDLOGLEVEL . "'});"
66                );
67                break;
68            case 'remote102':
69                $event->data['script'][] = array
70                (
71                    'type'    => 'module',
72                    'charset' => 'utf-8',
73                    '_data' => "import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.2.4/dist/mermaid.esm.min.mjs';
74                                mermaid.initialize({startOnLoad: true, logLevel: '".MERMAIDLOGLEVEL."'});"
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';
83                                mermaid.initialize({startOnLoad: true, logLevel: '".MERMAIDLOGLEVEL."'});"
84                );
85                break;
86            case 'remote100':
87                $event->data['script'][] = array
88                (
89                    'type'    => 'module',
90                    'charset' => 'utf-8',
91                    '_data' => "import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.0.2/dist/mermaid.esm.min.mjs';
92                                mermaid.initialize({startOnLoad: true, logLevel: '".MERMAIDLOGLEVEL."'});"
93                );
94                break;
95            case 'remote94':
96                $event->data['script'][] = array
97                (
98                    'type'    => 'text/javascript',
99                    'charset' => 'utf-8',
100                    'src' => 'https://cdn.jsdelivr.net/npm/mermaid@9.4.3/dist/mermaid.min.js'
101                );
102                break;
103            case 'remote93':
104                $event->data['script'][] = array
105                (
106                    'type'    => 'text/javascript',
107                    'charset' => 'utf-8',
108                    'src' => 'https://cdn.jsdelivr.net/npm/mermaid@9.3.0/dist/mermaid.min.js'
109                );
110                break;
111            default:
112        }
113
114        $event->data['link'][] = array
115        (
116            'rel'     => 'stylesheet',
117            'type'    => 'text/css',
118            'href'    => DOKU_BASE."lib/plugins/mermaid/mermaid.css",
119        );
120
121        switch ($this->getConf('location')) {
122            case 'local':
123            case 'remote94':
124            case 'remote93':
125                $event->data['script'][] = array
126                (
127                    'type'    => 'text/javascript',
128                    'charset' => 'utf-8',
129                    '_data'   => "mermaid.initialize({startOnLoad: true, logLevel: '".MERMAIDLOGLEVEL."'});"
130                );
131                break;
132            default:
133        }
134    }
135}
136