xref: /plugin/mikioplugin/action.php (revision 51890c1c2c25252c450bbfca2de63dbd456b34f3)
117e6d639SJames Collins<?php
200ce90d5SJames Collins
317e6d639SJames Collins/**
417e6d639SJames Collins * Mikio Plugin
517e6d639SJames Collins *
63deaf3a5SJames Collins * @version    1.0
73deaf3a5SJames Collins * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
817e6d639SJames Collins * @author     James Collins <james.collins@outlook.com.au>
917e6d639SJames Collins */
1017e6d639SJames Collins
1117e6d639SJames Collinsif (!defined('DOKU_INC')) die();
1217e6d639SJames Collins
137935713eSJames Collinsrequire_once('icons/icons.php');
147935713eSJames Collins
15dc121371SJames Collinsif (!function_exists('glob_recursive')) {
1600ce90d5SJames Collins  function glob_recursive($pattern, $flags = 0)
1700ce90d5SJames Collins  {
18dc121371SJames Collins    $files = glob($pattern, $flags);
19dc121371SJames Collins    foreach (glob(dirname($pattern) . '/*', GLOB_ONLYDIR | GLOB_NOSORT) as $dir) {
20dc121371SJames Collins      $files = array_merge($files, glob_recursive($dir . '/' . basename($pattern), $flags));
21dc121371SJames Collins    }
22dc121371SJames Collins    return $files;
23dc121371SJames Collins  }
24dc121371SJames Collins}
25dc121371SJames Collins
2600ce90d5SJames Collinsclass action_plugin_mikioplugin extends DokuWiki_Action_Plugin
2700ce90d5SJames Collins{
2800ce90d5SJames Collins  public function register(Doku_Event_Handler $controller)
2900ce90d5SJames Collins  {
3017e6d639SJames Collins    $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, '_load');
3117e6d639SJames Collins  }
3217e6d639SJames Collins
3300ce90d5SJames Collins  public function _load(Doku_Event $event, $param)
3400ce90d5SJames Collins  {
3517e6d639SJames Collins    global $conf;
367935713eSJames Collins    global $MIKIO_ICONS;
373deaf3a5SJames Collins
3891d1557bSJames Collins    $baseDir = str_replace('\\', '/', DOKU_BASE . 'lib/plugins' . str_replace(dirname(dirname(__FILE__)), '', dirname(__FILE__)) . '/');
393deaf3a5SJames Collins    $stylesheets = [];
40dc121371SJames Collins    $less = [];
413deaf3a5SJames Collins    $scripts = [];
423deaf3a5SJames Collins
437935713eSJames Collins    if (is_array($MIKIO_ICONS)) {
4400ce90d5SJames Collins      $icons = array();
457935713eSJames Collins      foreach ($MIKIO_ICONS as $icon) {
467935713eSJames Collins        if (isset($icon['name']) && isset($icon['css']) && isset($icon['insert'])) {
477935713eSJames Collins          $icons[] = $icon;
483deaf3a5SJames Collins
497935713eSJames Collins          if ($icon['css'] != '') {
507935713eSJames Collins            if (strpos($icon['css'], '//') === FALSE) {
517935713eSJames Collins              $stylesheets[] = $baseDir . 'icons/' . $icon['css'];
527935713eSJames Collins            } else {
537935713eSJames Collins              $stylesheets[] = $icon['css'];
5417e6d639SJames Collins            }
5517e6d639SJames Collins          }
567935713eSJames Collins        }
577935713eSJames Collins      }
587935713eSJames Collins      $MIKIO_ICONS = $icons;
597935713eSJames Collins    } else {
607935713eSJames Collins      $MIKIO_ICONS = [];
617935713eSJames Collins    }
6217e6d639SJames Collins
6391d1557bSJames Collins    $stylesList = glob_recursive(str_replace('\\', '/', 'lib/plugins' . str_replace(dirname(dirname(__FILE__)), '', dirname(__FILE__)) . '/styles/*'));
64dc121371SJames Collins    if ($stylesList !== FALSE) {
65dc121371SJames Collins      foreach ($stylesList as $value) {
66dc121371SJames Collins        $filename = strtolower($value);
67*51890c1cSnomadjimbob        if (substr($filename, -5) == '.less' || substr($filename, -4) == '.css') {
68dc121371SJames Collins          $stylesheets[] = '/' . $filename;
69dc121371SJames Collins        }
70dc121371SJames Collins      }
71dc121371SJames Collins    }
72dc121371SJames Collins
73dc121371SJames Collins    $stylesheets = array_unique($stylesheets);
74dc121371SJames Collins
75dc121371SJames Collins    // css
763deaf3a5SJames Collins    foreach ($stylesheets as $style) {
77dc121371SJames Collins      if (strtolower(substr($style, -5)) == '.less') {
78dc121371SJames Collins        $less[] = $style;
79dc121371SJames Collins      } else {
803deaf3a5SJames Collins        array_unshift($event->data['link'], array(
813deaf3a5SJames Collins          'type' => 'text/css',
823deaf3a5SJames Collins          'rel'  => 'stylesheet',
833deaf3a5SJames Collins          'href' => $style
843deaf3a5SJames Collins        ));
853deaf3a5SJames Collins      }
86dc121371SJames Collins    }
8717e6d639SJames Collins
88dc121371SJames Collins    // less
89dc121371SJames Collins    array_unshift($less, '/assets/variables.less', '/assets/styles.less');
90dc121371SJames Collins
91dc121371SJames Collins    $lessSorted = [];
92dc121371SJames Collins    foreach ($less as $key => $value) {
93dc121371SJames Collins      if (substr(strtolower($value), -14) == 'variables.less') {
94dc121371SJames Collins        $lessSorted[] = $value;
95dc121371SJames Collins        unset($less[$key]);
96dc121371SJames Collins      }
97dc121371SJames Collins    }
98dc121371SJames Collins
99dc121371SJames Collins    $lessSorted = array_merge($lessSorted, $less);
100dc121371SJames Collins    $lessPath = implode(',', $lessSorted);
101dc121371SJames Collins
102dc121371SJames Collins    array_unshift($event->data['link'], array(
103dc121371SJames Collins      'type' => 'text/css',
104dc121371SJames Collins      'rel'  => 'stylesheet',
105dc121371SJames Collins      'href' => $baseDir . 'css.php?css=' . str_replace($baseDir, '', $lessPath)
106dc121371SJames Collins    ));
107dc121371SJames Collins
108dc121371SJames Collins    // js
1093deaf3a5SJames Collins    foreach ($scripts as $script) {
1103deaf3a5SJames Collins      $event->data['script'][] = array(
1113deaf3a5SJames Collins        'type'  => 'text/javascript',
1123deaf3a5SJames Collins        '_data' => '',
1133deaf3a5SJames Collins        'src'   => $script
1143deaf3a5SJames Collins      );
1153deaf3a5SJames Collins    }
1163deaf3a5SJames Collins  }
1173deaf3a5SJames Collins}
118