diff options
author | emkael <emkael@tlen.pl> | 2016-10-11 14:01:29 +0200 |
---|---|---|
committer | emkael <emkael@tlen.pl> | 2016-10-11 14:01:29 +0200 |
commit | 51609351f2c4b5082b7e6f0744cd3811c325303f (patch) | |
tree | 739015e9ec69bc185ebe30db21369ae0b8b692ce /include/Minify.class.php | |
parent | 8d1b0dad63e3906efa9393ef01d08b77d83417b5 (diff) |
* initial template
Diffstat (limited to 'include/Minify.class.php')
-rw-r--r-- | include/Minify.class.php | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/include/Minify.class.php b/include/Minify.class.php new file mode 100644 index 0000000..ad66f32 --- /dev/null +++ b/include/Minify.class.php @@ -0,0 +1,78 @@ +<?php + +class Minify { + + private static function _compileFiles($files, $directory, $compressor, $cacheFile) { + $lastmtime = self::_getMTime($files, $directory); + if (!file_exists($cacheFile) || filemtime($cacheFile) < $lastmtime) { + $out = ''; + foreach ($files as $file) { + $fullPath = implode( + DIRECTORY_SEPARATOR, + [ + BASEPATH, 'src', $directory, $file + ] + ); + $content = file_get_contents($fullPath) . PHP_EOL; + if (!preg_match('/\.min\./', $file)) { + $content = call_user_func($compressor, $content); + } + $out .= $content; + } + file_put_contents($cacheFile, $out); + } + return $lastmtime; + } + + public static function minifyJS($scripts, $cacheFile) { + require_once(implode( + DIRECTORY_SEPARATOR, + [BASEPATH, 'lib', 'JShrink.php'] + )); + return self::_compileFiles( + $scripts, '_js', array('Minifier', 'minify'), $cacheFile + ); + } + + public static function minifyCSS($sheets, $cacheFile) { + require_once(implode( + DIRECTORY_SEPARATOR, + [BASEPATH, 'lib', 'CssMin.php'] + )); + return self::_compileFiles( + $sheets, '_css', array('CssMin', 'minify'), $cacheFile + ); + } + + private static function _getMTime($files, $directory) { + $timestamp = max( + array_map( + function($file) use($directory) { + $path = implode( + DIRECTORY_SEPARATOR, + [BASEPATH, 'src', $directory, $file] + ); + $mtime = filemtime($path); + return $mtime; + }, + $files + ) + ); + $resourceConfig = implode( + DIRECTORY_SEPARATOR, + [BASEPATH, 'config', 'resources.json'] + ); + if (file_exists($resourceConfig)) { + return max([filemtime($resourceConfig), $timestamp]); + } + return $timestamp; + } + + public static function getMTime($scripts, $sheets) { + return max(self::_getMTime($scripts, '_js'), + self::_getMTime($sheets, '_css')); + } + +} + +?> |