1<?php 2 3/** 4 * DokuWiki Plugin KaTeX (Action Component: load) 5 * 6 * load KaTeX CSS/JavaScript files 7 * 8 * @license GPLv3 https://www.gnu.org/licenses/gpl-3.0.html 9 * @author H.-H. PENG (Hsins) <hsinspeng@gmail.com> 10 */ 11 12// must be run within Dokuwiki 13if ( !defined( 'DOKU_INC' ) ) { 14 die(); 15} 16 17/** 18 * Add scripts via an event handler 19 */ 20class action_plugin_katex_load extends DokuWiki_Action_Plugin 21{ 22 23 // Registers the handlers with DokuWiki's event controller 24 public function register( Doku_Event_Handler $controller ) 25 { 26 $controller->register_hook( 'TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'load_styles' ); 27 $controller->register_hook( 'TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'load_scripts' ); 28 } 29 30 public function load_styles( Doku_Event $event, $param ) 31 { 32 $event->data['link'][] = array( 33 'rel' => 'stylesheet', 34 'href' => $this->_get_resource_url( 'katex.min.css' ), 35 ); 36 } 37 38 public function load_scripts( Doku_Event $event, $param ) 39 { 40 $event->data['script'][] = array( 41 'defer' => true, 42 'src' => $this->_get_resource_url( 'katex.min.js' ), 43 ); 44 45 if ( $this->getConf( 'extension-mhchem' ) ) { 46 $event->data['script'][] = array( 47 'defer' => true, 48 'src' => $this->_get_resource_url( 'contrib/mhchem.min.js' ), 49 ); 50 } 51 52 if ( $this->getConf( 'extension-copy-tex' ) ) { 53 $event->data['script'][] = array( 54 'defer' => true, 55 'src' => $this->_get_resource_url( 'contrib/copy-tex.min.js' ), 56 ); 57 } 58 59 $event->data['script'][] = array( 60 'defer' => true, 61 'src' => $this->_get_resource_url( 'contrib/auto-render.min.js' ), 62 ); 63 } 64 65 private function _get_resource_url( $file_uri ) 66 { 67 $url_templates = array( 68 "self-hosted" => DOKU_BASE . 'lib/plugins/katex/_assets/%FILE_URI%', 69 // e.g. https://cdn.bootcdn.net/ajax/libs/KaTeX/0.16.4/katex.min.js 70 "bootcdn" => 'https://cdn.bootcdn.net/ajax/libs/KaTeX/%VERSION%/%FILE_URI%', 71 // e.g. https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.4/katex.min.js 72 "cdnjs" => 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/%VERSION%/%FILE_URI%', 73 // e.g. https://cdn.jsdelivr.net/npm/katex@0.16.4/dist/katex.min.js 74 "jsdelivr" => 'https://cdn.jsdelivr.net/npm/katex@%VERSION%/dist/%FILE_URL%', 75 // e.g. https://libs.jshub.com/KaTeX/0.16.4/katex.min.js 76 "jshub" => 'https://libs.jshub.com/KaTeX/%VERSION%/%FILE_URL%', 77 // e.g. https://cdn.staticfile.org/KaTeX/0.16.4/katex.min.js 78 "staticfile" => 'https://cdn.staticfile.org/KaTeX/%VERSION%/%FILE_URL%', 79 // e.g. https://unpkg.com/katex@0.16.4/dist/katex.min.js 80 "unpkg" => 'https://unpkg.com/katex@%VERSION%/dist/%FILE_URL%', 81 ); 82 83 $katex_version = '0.16.4'; 84 $cdn_provider = $this->getConf( 'cdn-provider' ); 85 86 return strtr( $url_templates[$cdn_provider], array( '%VERSION%' => $katex_version, '%FILE_URI%' => $file_uri ) ); 87 } 88} 89