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