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 = str_replace('\\', '/', 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(str_replace('\\', '/', '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}