summaryrefslogtreecommitdiff
path: root/include/Minify.class.php
diff options
context:
space:
mode:
Diffstat (limited to 'include/Minify.class.php')
-rw-r--r--include/Minify.class.php78
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'));
+ }
+
+}
+
+?>