xref: /plugin/mermaid/action.php (revision 6e5341c627f9f81fae7911a595b98c51a67840eb)
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    {
19*6e5341c6SRobert Weinmeister        // Can be changed for debugging Mermaid
20*6e5341c6SRobert Weinmeister        // https://mermaid.js.org/config/directives.html#changing-loglevel-via-directive
21*6e5341c6SRobert Weinmeister        define("MERMAIDLOGLEVEL", "error");
22*6e5341c6SRobert Weinmeister
232d4b7fc2SRobert Weinmeister        switch ($this->getConf('location')) {
242d4b7fc2SRobert Weinmeister            case 'local':
2546a60b4fSRobertWeinmeister                $event->data['script'][] = array
2646a60b4fSRobertWeinmeister                (
2746a60b4fSRobertWeinmeister                    'type'    => 'text/javascript',
2846a60b4fSRobertWeinmeister                    'charset' => 'utf-8',
292d4b7fc2SRobert Weinmeister                    'src' => DOKU_BASE.'lib/plugins/mermaid/mermaid.min.js'
3046a60b4fSRobertWeinmeister                );
312d4b7fc2SRobert Weinmeister                break;
322d4b7fc2SRobert Weinmeister            case 'latest':
332d4b7fc2SRobert Weinmeister                $event->data['script'][] = array
342d4b7fc2SRobert Weinmeister                (
35*6e5341c6SRobert Weinmeister                    'type'    => 'module',
362d4b7fc2SRobert Weinmeister                    'charset' => 'utf-8',
37*6e5341c6SRobert Weinmeister                    '_data' => "import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/+esm';
38*6e5341c6SRobert Weinmeister                                mermaid.initialize({startOnLoad: true, logLevel: '".MERMAIDLOGLEVEL."'});"
392d4b7fc2SRobert Weinmeister                );
402d4b7fc2SRobert Weinmeister                break;
41*6e5341c6SRobert Weinmeister            case 'remote100':
42*6e5341c6SRobert Weinmeister                $event->data['script'][] = array
43*6e5341c6SRobert Weinmeister                (
44*6e5341c6SRobert Weinmeister                    'type'    => 'module',
45*6e5341c6SRobert Weinmeister                    'charset' => 'utf-8',
46*6e5341c6SRobert Weinmeister                    '_data' => "import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.0/+esm';
47*6e5341c6SRobert Weinmeister                                mermaid.initialize({startOnLoad: true, logLevel: '".MERMAIDLOGLEVEL."'});"
48*6e5341c6SRobert Weinmeister                );
49*6e5341c6SRobert Weinmeister                break;
50*6e5341c6SRobert Weinmeister            case 'remote94':
51*6e5341c6SRobert Weinmeister                $event->data['script'][] = array
52*6e5341c6SRobert Weinmeister                (
53*6e5341c6SRobert Weinmeister                    'type'    => 'text/javascript',
54*6e5341c6SRobert Weinmeister                    'charset' => 'utf-8',
55*6e5341c6SRobert Weinmeister                    'src' => 'https://cdn.jsdelivr.net/npm/mermaid@9.4/dist/mermaid.min.js'
56*6e5341c6SRobert Weinmeister                );
57*6e5341c6SRobert Weinmeister                break;
582d4b7fc2SRobert Weinmeister            case 'remote93':
592d4b7fc2SRobert Weinmeister                $event->data['script'][] = array
602d4b7fc2SRobert Weinmeister                (
612d4b7fc2SRobert Weinmeister                    'type'    => 'text/javascript',
622d4b7fc2SRobert Weinmeister                    'charset' => 'utf-8',
632d4b7fc2SRobert Weinmeister                    'src' => 'https://cdn.jsdelivr.net/npm/mermaid@9.3/dist/mermaid.min.js'
642d4b7fc2SRobert Weinmeister                );
652d4b7fc2SRobert Weinmeister                break;
662d4b7fc2SRobert Weinmeister            default:
672d4b7fc2SRobert Weinmeister        }
6846a60b4fSRobertWeinmeister
6946a60b4fSRobertWeinmeister        $event->data['link'][] = array
7046a60b4fSRobertWeinmeister        (
7146a60b4fSRobertWeinmeister            'rel'     => 'stylesheet',
7246a60b4fSRobertWeinmeister            'type'    => 'text/css',
7346a60b4fSRobertWeinmeister            'href'    => DOKU_BASE."lib/plugins/mermaid/mermaid.css",
7446a60b4fSRobertWeinmeister        );
7546a60b4fSRobertWeinmeister
76*6e5341c6SRobert Weinmeister        switch ($this->getConf('location')) {
77*6e5341c6SRobert Weinmeister            case 'locally':
78*6e5341c6SRobert Weinmeister            case 'remote94':
79*6e5341c6SRobert Weinmeister            case 'remote93':
8046a60b4fSRobertWeinmeister                $event->data['script'][] = array
8146a60b4fSRobertWeinmeister                (
8246a60b4fSRobertWeinmeister                    'type'    => 'text/javascript',
8346a60b4fSRobertWeinmeister                    'charset' => 'utf-8',
84*6e5341c6SRobert Weinmeister                    '_data'   => "mermaid.initialize({startOnLoad: true, logLevel: '".MERMAIDLOGLEVEL."'});"
8546a60b4fSRobertWeinmeister                );
86*6e5341c6SRobert Weinmeister                break;
87*6e5341c6SRobert Weinmeister            default:
88*6e5341c6SRobert Weinmeister        }
8946a60b4fSRobertWeinmeister    }
9046a60b4fSRobertWeinmeister}
91