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