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