xref: /plugin/mikioplugin/action.php (revision 37872a4db1b256254ac658666c7290b92bc62b8b)
1<?php
2/**
3 * Mikio Plugin
4 *
5 * @version    1.0
6 * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
7 * @author     James Collins <james.collins@outlook.com.au>
8 */
9
10if(!defined('DOKU_INC')) die();
11
12require_once('icons/icons.php');
13
14if(!function_exists('glob_recursive')) {
15  function glob_recursive($pattern, $flags = 0) {
16    $files = glob($pattern, $flags);
17    foreach(glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir) {
18      $files = array_merge($files, glob_recursive($dir.'/'.basename($pattern), $flags));
19    }
20    return $files;
21  }
22}
23
24class action_plugin_mikioplugin extends DokuWiki_Action_Plugin {
25
26	public function register(Doku_Event_Handler $controller) {
27		$controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, '_load');
28	}
29
30	public function _load(Doku_Event $event, $param) {
31		global $conf;
32    global $MIKIO_ICONS;
33
34    $baseDir = DOKU_BASE.'lib/plugins' . str_replace(dirname(dirname(__FILE__)), '', dirname(__FILE__)) . '/';
35    $stylesheets = [];
36    $less = [];
37    $scripts = [];
38
39    if(is_array($MIKIO_ICONS)) {
40        $icons = Array();
41        foreach($MIKIO_ICONS as $icon) {
42            if(isset($icon['name']) && isset($icon['css']) && isset($icon['insert'])) {
43                $icons[] = $icon;
44
45                if($icon['css'] != '') {
46                    if(strpos($icon['css'], '//') === FALSE) {
47                        $stylesheets[] = $baseDir . 'icons/' . $icon['css'];
48                    } else {
49                        $stylesheets[] = $icon['css'];
50                    }
51                }
52            }
53        }
54        $MIKIO_ICONS = $icons;
55    } else {
56        $MIKIO_ICONS = [];
57    }
58
59    $stylesList = glob_recursive('lib/plugins' . str_replace(dirname(dirname(__FILE__)), '', dirname(__FILE__)) . '/styles/*');
60    if($stylesList !== FALSE) {
61      foreach($stylesList as $value) {
62        $filename = strtolower($value);
63        if(substr($filename, -5) == '.less' || substr($filename, -5) == '.css') {
64          $stylesheets[] = '/' . $filename;
65        }
66      }
67    }
68
69    $stylesheets = array_unique($stylesheets);
70
71    // css
72    foreach ($stylesheets as $style) {
73      if(strtolower(substr($style, -5)) == '.less') {
74        $less[] = $style;
75      } else {
76        array_unshift($event->data['link'], array(
77            'type' => 'text/css',
78            'rel'  => 'stylesheet',
79            'href' => $style
80        ));
81      }
82    }
83
84    // less
85    array_unshift($less, '/assets/variables.less', '/assets/styles.less');
86
87    $lessSorted = [];
88    foreach($less as $key=>$value) {
89      if(substr(strtolower($value), -14) == 'variables.less') {
90        $lessSorted[] = $value;
91        unset($less[$key]);
92      }
93    }
94
95    $lessSorted = array_merge($lessSorted, $less);
96    $lessPath = implode(',', $lessSorted);
97
98    array_unshift($event->data['link'], array(
99      'type' => 'text/css',
100      'rel'  => 'stylesheet',
101      'href' => $baseDir . 'css.php?css=' . str_replace($baseDir, '', $lessPath)
102    ));
103
104    // js
105    foreach ($scripts as $script) {
106      $event->data['script'][] = array(
107        'type'  => 'text/javascript',
108        '_data' => '',
109        'src'   => $script
110      );
111    }
112  }
113}