xref: /plugin/myshortcuts/action.php (revision 61ef61f6aef59d2b4dc796cb87289ce67202085d)
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