1*61ef61f6Sdavidjimenez75<?php 2*61ef61f6Sdavidjimenez75 3*61ef61f6Sdavidjimenez75use dokuwiki\Extension\ActionPlugin; 4*61ef61f6Sdavidjimenez75use dokuwiki\Extension\EventHandler; 5*61ef61f6Sdavidjimenez75use dokuwiki\Extension\Event; 6*61ef61f6Sdavidjimenez75 7*61ef61f6Sdavidjimenez75/** 8*61ef61f6Sdavidjimenez75 * DokuWiki Plugin myshortcuts (Action Component) 9*61ef61f6Sdavidjimenez75 * 10*61ef61f6Sdavidjimenez75 * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 11*61ef61f6Sdavidjimenez75 * @author David Jiménez <davidjimenez75@gmail.com> 12*61ef61f6Sdavidjimenez75 */ 13*61ef61f6Sdavidjimenez75class action_plugin_myshortcuts extends ActionPlugin 14*61ef61f6Sdavidjimenez75{ 15*61ef61f6Sdavidjimenez75 /** @inheritDoc */ 16*61ef61f6Sdavidjimenez75 public function register(EventHandler $controller) 17*61ef61f6Sdavidjimenez75 { 18*61ef61f6Sdavidjimenez75 $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'handleMetaheaderOutput'); 19*61ef61f6Sdavidjimenez75 $controller->register_hook('DOKUWIKI_STARTED', 'AFTER', $this, 'loadAssets'); 20*61ef61f6Sdavidjimenez75 } 21*61ef61f6Sdavidjimenez75 22*61ef61f6Sdavidjimenez75 /** 23*61ef61f6Sdavidjimenez75 * Load JavaScript and CSS files 24*61ef61f6Sdavidjimenez75 */ 25*61ef61f6Sdavidjimenez75 public function loadAssets() 26*61ef61f6Sdavidjimenez75 { 27*61ef61f6Sdavidjimenez75 global $conf; 28*61ef61f6Sdavidjimenez75 29*61ef61f6Sdavidjimenez75 // Add JavaScript file 30*61ef61f6Sdavidjimenez75 $JSINFO['plugins']['myshortcuts'] = true; 31*61ef61f6Sdavidjimenez75 } 32*61ef61f6Sdavidjimenez75 33*61ef61f6Sdavidjimenez75 /** 34*61ef61f6Sdavidjimenez75 * Pass configuration to JavaScript 35*61ef61f6Sdavidjimenez75 * 36*61ef61f6Sdavidjimenez75 * @param Event $event Event object 37*61ef61f6Sdavidjimenez75 * @param mixed $param optional parameter passed when event was registered 38*61ef61f6Sdavidjimenez75 * @return void 39*61ef61f6Sdavidjimenez75 */ 40*61ef61f6Sdavidjimenez75 public function handleMetaheaderOutput(Event $event, $param) 41*61ef61f6Sdavidjimenez75 { 42*61ef61f6Sdavidjimenez75 // Get plugin configuration 43*61ef61f6Sdavidjimenez75 $shortcutEdit = $this->getConf('shortcut_edit'); 44*61ef61f6Sdavidjimenez75 $shortcutSave = $this->getConf('shortcut_save'); 45*61ef61f6Sdavidjimenez75 $shortcutSnippet = $this->getConf('shortcut_snippet'); 46*61ef61f6Sdavidjimenez75 47*61ef61f6Sdavidjimenez75 // Build snippets array from individual configurations 48*61ef61f6Sdavidjimenez75 // Order: 1-9, then 0 (as per keyboard layout) 49*61ef61f6Sdavidjimenez75 $snippets = []; 50*61ef61f6Sdavidjimenez75 $snippetNumbers = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']; 51*61ef61f6Sdavidjimenez75 52*61ef61f6Sdavidjimenez75 foreach ($snippetNumbers as $num) { 53*61ef61f6Sdavidjimenez75 $snippetText = $this->getConf('snippet_' . $num); 54*61ef61f6Sdavidjimenez75 if (!empty($snippetText)) { 55*61ef61f6Sdavidjimenez75 $snippets[] = [ 56*61ef61f6Sdavidjimenez75 'label' => $num, 57*61ef61f6Sdavidjimenez75 'number' => $num, 58*61ef61f6Sdavidjimenez75 'text' => $snippetText 59*61ef61f6Sdavidjimenez75 ]; 60*61ef61f6Sdavidjimenez75 } 61*61ef61f6Sdavidjimenez75 } 62*61ef61f6Sdavidjimenez75 63*61ef61f6Sdavidjimenez75 // Add CSS file 64*61ef61f6Sdavidjimenez75 $event->data['link'][] = [ 65*61ef61f6Sdavidjimenez75 'type' => 'text/css', 66*61ef61f6Sdavidjimenez75 'rel' => 'stylesheet', 67*61ef61f6Sdavidjimenez75 'href' => DOKU_BASE . 'lib/plugins/myshortcuts/style.css' 68*61ef61f6Sdavidjimenez75 ]; 69*61ef61f6Sdavidjimenez75 70*61ef61f6Sdavidjimenez75 // Create JavaScript configuration object 71*61ef61f6Sdavidjimenez75 $script = '/* MyShortcuts Plugin Config */' . "\n"; 72*61ef61f6Sdavidjimenez75 $script .= 'var MYSHORTCUTS_CONFIG = ' . json_encode([ 73*61ef61f6Sdavidjimenez75 'shortcutEdit' => $shortcutEdit, 74*61ef61f6Sdavidjimenez75 'shortcutSave' => $shortcutSave, 75*61ef61f6Sdavidjimenez75 'shortcutSnippet' => $shortcutSnippet, 76*61ef61f6Sdavidjimenez75 'snippets' => $snippets 77*61ef61f6Sdavidjimenez75 ], JSON_PRETTY_PRINT) . ';'; 78*61ef61f6Sdavidjimenez75 79*61ef61f6Sdavidjimenez75 // Add inline script to page (must come before main script) 80*61ef61f6Sdavidjimenez75 $event->data['script'][] = [ 81*61ef61f6Sdavidjimenez75 'type' => 'text/javascript', 82*61ef61f6Sdavidjimenez75 '_data' => $script, 83*61ef61f6Sdavidjimenez75 ]; 84*61ef61f6Sdavidjimenez75 85*61ef61f6Sdavidjimenez75 // Add main JavaScript file 86*61ef61f6Sdavidjimenez75 $event->data['script'][] = [ 87*61ef61f6Sdavidjimenez75 'type' => 'text/javascript', 88*61ef61f6Sdavidjimenez75 'src' => DOKU_BASE . 'lib/plugins/myshortcuts/script.js', 89*61ef61f6Sdavidjimenez75 ]; 90*61ef61f6Sdavidjimenez75 } 91*61ef61f6Sdavidjimenez75} 92