xref: /plugin/mermaid/action.php (revision 4c8bd9fffef2d5bdb89af4194782d1621bf34eef)
146a60b4fSRobertWeinmeister<?php
246a60b4fSRobertWeinmeister/**
346a60b4fSRobertWeinmeister * DokuWiki Plugin mermaid (Action Component)
446a60b4fSRobertWeinmeister *
546a60b4fSRobertWeinmeister * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
646a60b4fSRobertWeinmeister * @author  Robert Weinmeister <develop@weinmeister.org>
746a60b4fSRobertWeinmeister */
846a60b4fSRobertWeinmeister
946a60b4fSRobertWeinmeisterclass action_plugin_mermaid extends \dokuwiki\Extension\ActionPlugin
1046a60b4fSRobertWeinmeister{
1146a60b4fSRobertWeinmeister    /** @inheritDoc */
1246a60b4fSRobertWeinmeister    public function register(Doku_Event_Handler $controller)
1346a60b4fSRobertWeinmeister    {
1446a60b4fSRobertWeinmeister        $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'load');
1546a60b4fSRobertWeinmeister    }
1646a60b4fSRobertWeinmeister
1746a60b4fSRobertWeinmeister    public function load(Doku_Event $event, $param)
1846a60b4fSRobertWeinmeister    {
196e5341c6SRobert Weinmeister        // Can be changed for debugging Mermaid
206e5341c6SRobert Weinmeister        // https://mermaid.js.org/config/directives.html#changing-loglevel-via-directive
216e5341c6SRobert Weinmeister        define("MERMAIDLOGLEVEL", "error");
226e5341c6SRobert Weinmeister
23*4c8bd9ffSRobert Weinmeister        $theme = $this->getConf('theme');
24*4c8bd9ffSRobert Weinmeister        $init = "mermaid.initialize({startOnLoad: true, logLevel: '".MERMAIDLOGLEVEL."', theme: '".$theme."'});";
25*4c8bd9ffSRobert Weinmeister
262d4b7fc2SRobert Weinmeister        switch ($this->getConf('location')) {
272d4b7fc2SRobert Weinmeister            case 'local':
2846a60b4fSRobertWeinmeister                $event->data['script'][] = array
2946a60b4fSRobertWeinmeister                (
3046a60b4fSRobertWeinmeister                    'type'    => 'text/javascript',
3146a60b4fSRobertWeinmeister                    'charset' => 'utf-8',
322d4b7fc2SRobert Weinmeister                    'src' => DOKU_BASE.'lib/plugins/mermaid/mermaid.min.js'
3346a60b4fSRobertWeinmeister                );
342d4b7fc2SRobert Weinmeister                break;
352d4b7fc2SRobert Weinmeister            case 'latest':
362d4b7fc2SRobert Weinmeister                $event->data['script'][] = array
372d4b7fc2SRobert Weinmeister                (
386e5341c6SRobert Weinmeister                    'type'    => 'module',
392d4b7fc2SRobert Weinmeister                    'charset' => 'utf-8',
40*4c8bd9ffSRobert Weinmeister                    '_data' => "import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs';".$init
412d4b7fc2SRobert Weinmeister                );
422d4b7fc2SRobert Weinmeister                break;
43a612c7d6SRobert Weinmeister            case 'remote106':
44a612c7d6SRobert Weinmeister                $event->data['script'][] = array
45a612c7d6SRobert Weinmeister                (
46a612c7d6SRobert Weinmeister                    'type' => 'module',
47a612c7d6SRobert Weinmeister                    'charset' => 'utf-8',
48a612c7d6SRobert Weinmeister                    '_data' => "import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.6.1/dist/mermaid.esm.min.mjs';
49a612c7d6SRobert Weinmeister                                mermaid.initialize({startOnLoad: true, logLevel: '" . MERMAIDLOGLEVEL . "'});"
50a612c7d6SRobert Weinmeister                );
51a612c7d6SRobert Weinmeister                break;
528eaa3f3bSRobert Weinmeister            case 'remote104':
538eaa3f3bSRobert Weinmeister                $event->data['script'][] = array
548eaa3f3bSRobert Weinmeister                (
558eaa3f3bSRobert Weinmeister                    'type' => 'module',
568eaa3f3bSRobert Weinmeister                    'charset' => 'utf-8',
578eaa3f3bSRobert Weinmeister                    '_data' => "import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.4.0/dist/mermaid.esm.min.mjs';
588eaa3f3bSRobert Weinmeister                                mermaid.initialize({startOnLoad: true, logLevel: '" . MERMAIDLOGLEVEL . "'});"
598eaa3f3bSRobert Weinmeister                );
608eaa3f3bSRobert Weinmeister                break;
617d8a2661SRobert Weinmeister            case 'remote103':
627d8a2661SRobert Weinmeister                $event->data['script'][] = array
637d8a2661SRobert Weinmeister                (
647d8a2661SRobert Weinmeister                    'type' => 'module',
657d8a2661SRobert Weinmeister                    'charset' => 'utf-8',
66*4c8bd9ffSRobert Weinmeister                    '_data' => "import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.3.1/dist/mermaid.esm.min.mjs';".$init
677d8a2661SRobert Weinmeister                );
687d8a2661SRobert Weinmeister                break;
694df3d176SRobert Weinmeister            case 'remote102':
704df3d176SRobert Weinmeister                $event->data['script'][] = array
714df3d176SRobert Weinmeister                (
724df3d176SRobert Weinmeister                    'type'    => 'module',
734df3d176SRobert Weinmeister                    'charset' => 'utf-8',
74*4c8bd9ffSRobert Weinmeister                    '_data' => "import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.2.4/dist/mermaid.esm.min.mjs';".$init
754df3d176SRobert Weinmeister                );
764df3d176SRobert Weinmeister                break;
775f50b169SRobert Weinmeister            case 'remote101':
785f50b169SRobert Weinmeister                $event->data['script'][] = array
795f50b169SRobert Weinmeister                (
805f50b169SRobert Weinmeister                    'type'    => 'module',
815f50b169SRobert Weinmeister                    'charset' => 'utf-8',
82*4c8bd9ffSRobert Weinmeister                    '_data' => "import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.1.0/dist/mermaid.esm.min.mjs';".$init
835f50b169SRobert Weinmeister                );
844df3d176SRobert Weinmeister                break;
856e5341c6SRobert Weinmeister            case 'remote100':
866e5341c6SRobert Weinmeister                $event->data['script'][] = array
876e5341c6SRobert Weinmeister                (
886e5341c6SRobert Weinmeister                    'type'    => 'module',
896e5341c6SRobert Weinmeister                    'charset' => 'utf-8',
90*4c8bd9ffSRobert Weinmeister                    '_data' => "import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.0.2/dist/mermaid.esm.min.mjs';".$init
916e5341c6SRobert Weinmeister                );
926e5341c6SRobert Weinmeister                break;
936e5341c6SRobert Weinmeister            case 'remote94':
946e5341c6SRobert Weinmeister                $event->data['script'][] = array
956e5341c6SRobert Weinmeister                (
966e5341c6SRobert Weinmeister                    'type'    => 'text/javascript',
976e5341c6SRobert Weinmeister                    'charset' => 'utf-8',
984df3d176SRobert Weinmeister                    'src' => 'https://cdn.jsdelivr.net/npm/mermaid@9.4.3/dist/mermaid.min.js'
996e5341c6SRobert Weinmeister                );
1006e5341c6SRobert Weinmeister                break;
1012d4b7fc2SRobert Weinmeister            case 'remote93':
1022d4b7fc2SRobert Weinmeister                $event->data['script'][] = array
1032d4b7fc2SRobert Weinmeister                (
1042d4b7fc2SRobert Weinmeister                    'type'    => 'text/javascript',
1052d4b7fc2SRobert Weinmeister                    'charset' => 'utf-8',
1064df3d176SRobert Weinmeister                    'src' => 'https://cdn.jsdelivr.net/npm/mermaid@9.3.0/dist/mermaid.min.js'
1072d4b7fc2SRobert Weinmeister                );
1082d4b7fc2SRobert Weinmeister                break;
1092d4b7fc2SRobert Weinmeister            default:
1102d4b7fc2SRobert Weinmeister        }
11146a60b4fSRobertWeinmeister
11246a60b4fSRobertWeinmeister        $event->data['link'][] = array
11346a60b4fSRobertWeinmeister        (
11446a60b4fSRobertWeinmeister            'rel'     => 'stylesheet',
11546a60b4fSRobertWeinmeister            'type'    => 'text/css',
11646a60b4fSRobertWeinmeister            'href'    => DOKU_BASE."lib/plugins/mermaid/mermaid.css",
11746a60b4fSRobertWeinmeister        );
11846a60b4fSRobertWeinmeister
1196e5341c6SRobert Weinmeister        switch ($this->getConf('location')) {
1204df3d176SRobert Weinmeister            case 'local':
1216e5341c6SRobert Weinmeister            case 'remote94':
1226e5341c6SRobert Weinmeister            case 'remote93':
12346a60b4fSRobertWeinmeister                $event->data['script'][] = array
12446a60b4fSRobertWeinmeister                (
12546a60b4fSRobertWeinmeister                    'type'    => 'text/javascript',
12646a60b4fSRobertWeinmeister                    'charset' => 'utf-8',
127*4c8bd9ffSRobert Weinmeister                    '_data'   => $init
12846a60b4fSRobertWeinmeister                );
1296e5341c6SRobert Weinmeister                break;
1306e5341c6SRobert Weinmeister            default:
1316e5341c6SRobert Weinmeister        }
13246a60b4fSRobertWeinmeister    }
13346a60b4fSRobertWeinmeister}
134