openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

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 }