ThemeCompiler.class.php (4588B)
1 <?php 2 3 namespace cms\ui\themes; 4 5 use util\FileUtils; 6 use util\JSMinifier; 7 use util\JSqueeze; 8 use logger\Logger; 9 use template_engine\TemplateEngineInfo; 10 use util\Less; 11 12 /** 13 * Theme-Compiler. 14 * 15 * @author Jan Dankert 16 */ 17 class ThemeCompiler 18 { 19 public function compileAll() { 20 $this->compileStyles(); 21 $this->compileScripts(); 22 23 } 24 25 public function compileStyles() 26 { 27 $combinedCssFile = __DIR__.'/default/'.Theme::STYLE_FILENAME; 28 $combinedCssFileMin = __DIR__.'/default/'.Theme::STYLE_MINIFIED_FILENAME; 29 30 file_put_contents($combinedCssFile ,''); 31 file_put_contents($combinedCssFileMin,''); 32 33 $css = []; 34 35 $styleFiles = FileUtils::readDir( __DIR__.'/default/style','less'); 36 foreach( $styleFiles as $styleFile ) { 37 $css[] = __DIR__.'/default/style'.'/'.substr($styleFile,0,-5); 38 } 39 40 // Komponentenbasiertes CSS 41 foreach (TemplateEngineInfo::getComponentList() as $c) 42 { 43 $componentCssFile = 'template_engine/components/html/component_' . $c . '/' . $c; 44 if (is_file( __DIR__.'/../../../'. $componentCssFile . '.less')) 45 $css[] = __DIR__.'/../../../'.$componentCssFile; 46 } 47 48 //$css[] = __DIR__.'/../../../editor/simplemde/simplemde'; 49 //$css[] = __DIR__.'/../../../editor/trumbowyg/ui/trumbowyg'; 50 //$css[] = __DIR__.'/../../../editor/codemirror/lib/codemirror'; 51 52 foreach ($css as $cssF) 53 { 54 $lessFile = $cssF . '.less'; 55 56 file_put_contents($combinedCssFile, '/* Include style: '.substr($cssF,strlen(__DIR__)).' */'."\n",FILE_APPEND); 57 58 // Den absoluten Pfad zur LESS-Datei ermitteln. Dieser wird vom LESS-Parser für den korrekten Link 59 // auf die LESS-Datei in der Sourcemap benötigt. 60 $pfx = substr(realpath($lessFile),0,0-strlen(basename($lessFile))); 61 62 $parser = new Less(array( 63 'sourceMap' => true, 64 'indentation' => ' ', 65 'outputSourceFiles' => false, 66 'sourceMapBasepath' => $pfx 67 )); 68 69 70 $parser->parseFile( $lessFile ); 71 $source = $parser->getCss(); 72 73 file_put_contents($combinedCssFile, $source."\n",FILE_APPEND); 74 75 $parser = new Less(array( 76 'compress' => true, 77 'sourceMap' => false, 78 'indentation' => '' 79 )); 80 $parser->parseFile($lessFile); 81 $source = $parser->getCss(); 82 83 file_put_contents($combinedCssFileMin, $source."\n",FILE_APPEND); 84 85 echo 'Copied source from less source file '.$lessFile."\n"; 86 } 87 88 echo 'Created file '.$combinedCssFileMin."\n"; 89 echo 'Created file '.$combinedCssFile ."\n"; 90 91 } 92 93 94 95 public function compileScripts() 96 { 97 $js = []; 98 99 // Jquery-Plugins 100 $js[] = __DIR__.'/default/script/plugin/jquery-plugin-toggleAttr'; 101 $js[] = __DIR__.'/default/script/plugin/jquery-plugin-orSearch'; 102 $js[] = __DIR__.'/default/script/plugin/jquery-plugin-orLinkify'; 103 $js[] = __DIR__.'/default/script/plugin/jquery-plugin-orButton'; 104 $js[] = __DIR__.'/default/script/plugin/jquery-plugin-orTree'; 105 $js[] = __DIR__.'/default/script/plugin/jquery-plugin-orAutoheight'; 106 107 // OpenRat internal JS - als letztes, damit die vorigen bereits geladen sind. 108 $js[] = __DIR__.'/default/script/openrat/api'; 109 $js[] = __DIR__.'/default/script/openrat/callback'; 110 $js[] = __DIR__.'/default/script/openrat/components'; 111 $js[] = __DIR__.'/default/script/openrat/dialog'; 112 $js[] = __DIR__.'/default/script/openrat/form'; 113 $js[] = __DIR__.'/default/script/openrat/init'; 114 $js[] = __DIR__.'/default/script/openrat/navigator'; 115 $js[] = __DIR__.'/default/script/openrat/notice'; 116 $js[] = __DIR__.'/default/script/openrat/view'; 117 $js[] = __DIR__.'/default/script/openrat/workbench'; 118 119 $js[] = __DIR__.'/default/script/Oquery'; 120 $js[] = __DIR__.'/default/script/jquery-global'; 121 122 // Komponentenbasiertes Javascript 123 foreach ( TemplateEngineInfo::getComponentList() as $c) 124 { 125 $componentJsFile = __DIR__.'/../../../template_engine/components/html/component_' . $c . '/' . $c; 126 if (is_file($componentJsFile . '.js')) 127 $js[] = $componentJsFile; 128 } 129 130 foreach ($js as $jsFile) 131 { 132 $jsFileMin = $jsFile . '.min.js'; 133 $jsFileNormal = $jsFile . '.js'; 134 135 if( is_file($jsFileNormal) ) 136 { 137 // Minify.... 138 $jz = new JSMinifier( 139 JSMinifier::FLAG_IMPORT_MIN_JS + 140 JSMinifier::FLAG_REMOVE_MULTILINE_COMMENT + 141 JSMinifier::FLAG_REMOVE_BLANK_LINES + 142 JSMinifier::FLAG_REMOVE_LINE_COMMENTS + 143 JSMinifier::FLAG_REMOVE_WHITESPACE ); 144 file_put_contents($jsFileMin, $jz->minify(file_get_contents($jsFileNormal))); 145 146 echo 'Minified to '.$jsFileMin."\n"; 147 } else { 148 throw new \LogicException('Missing javascript: '.$jsFile ); 149 } 150 } 151 } 152 153 }