diff --git a/data/web/inc/footer.inc.php b/data/web/inc/footer.inc.php index 8a0dba34..9b36e64e 100644 --- a/data/web/inc/footer.inc.php +++ b/data/web/inc/footer.inc.php @@ -3,7 +3,15 @@ require_once $_SERVER['DOCUMENT_ROOT'] . '/modals/footer.php'; logger(); ?> <div style="margin-bottom: 100px;"></div> -<script type='text/javascript'><?=$js_minifier->minify();?></script> +<script type='text/javascript'><?php + $JSPath = '/tmp/' . $js_minifier->getDataHash() . '.js'; + if(file_exists($JSPath)) { + echo file_get_contents($JSPath); + } else { + echo $js_minifier->minify($JSPath); + cleanupCSS($css_minifier->getDataHash()); + } + ?></script> <script> <?php $lang_footer = json_encode($lang['footer']); diff --git a/data/web/inc/functions.inc.php b/data/web/inc/functions.inc.php index dff9bdda..28831272 100644 --- a/data/web/inc/functions.inc.php +++ b/data/web/inc/functions.inc.php @@ -1612,4 +1612,22 @@ function solr_status() { } return false; } + +function cleanupJS($ignore = '', $folder = '/tmp/*.js') { + foreach (glob($folder) as $filename) { + if(strpos($filename, $ignore) !== false) { + continue; + } + unlink($filename); + } +} + +function cleanupCSS($ignore = '', $folder = '/tmp/*.css') { + foreach (glob($folder) as $filename) { + if(strpos($filename, $ignore) !== false) { + continue; + } + unlink($filename); + } +} ?> diff --git a/data/web/inc/header.inc.php b/data/web/inc/header.inc.php index 4b223140..1663413f 100644 --- a/data/web/inc/header.inc.php +++ b/data/web/inc/header.inc.php @@ -30,7 +30,15 @@ $css_minifier->add('/web/css/site/index.css'); } ?> - <style><?=$css_minifier->minify();?></style> + <style><?php + $CSSPath = '/tmp/' . $css_minifier->getDataHash() . '.css'; + if(file_exists($CSSPath)) { + echo file_get_contents($CSSPath); + } else { + echo $css_minifier->minify($CSSPath); + cleanupCSS($css_minifier->getDataHash()); + } + ?></style> <?php if (strtolower(trim($DEFAULT_THEME)) != "lumen"): ?> <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.7/<?= strtolower(trim($DEFAULT_THEME)); ?>/bootstrap.min.css"> <?php endif; ?> diff --git a/data/web/inc/lib/CSSminifierExtended.php b/data/web/inc/lib/CSSminifierExtended.php new file mode 100644 index 00000000..125381c4 --- /dev/null +++ b/data/web/inc/lib/CSSminifierExtended.php @@ -0,0 +1,18 @@ +<?php + +use MatthiasMullie\Minify\CSS; + +class CSSminifierExtended extends CSS { + + public function getDataHash() { + return sha1(json_encode($this->accessProtected($this,'data'))); + } + + private function accessProtected($obj, $prop) { + $reflection = new ReflectionClass($obj); + $property = $reflection->getProperty($prop); + $property->setAccessible(true); + return $property->getValue($obj); + } + +} \ No newline at end of file diff --git a/data/web/inc/lib/JSminifierExtended.php b/data/web/inc/lib/JSminifierExtended.php new file mode 100644 index 00000000..c891cb81 --- /dev/null +++ b/data/web/inc/lib/JSminifierExtended.php @@ -0,0 +1,18 @@ +<?php + +use MatthiasMullie\Minify\JS; + +class JSminifierExtended extends JS { + + public function getDataHash() { + return sha1(json_encode($this->accessProtected($this,'data'))); + } + + private function accessProtected($obj, $prop) { + $reflection = new ReflectionClass($obj); + $property = $reflection->getProperty($prop); + $property->setAccessible(true); + return $property->getValue($obj); + } + +} \ No newline at end of file diff --git a/data/web/inc/prerequisites.inc.php b/data/web/inc/prerequisites.inc.php index e0cc5993..7215de28 100644 --- a/data/web/inc/prerequisites.inc.php +++ b/data/web/inc/prerequisites.inc.php @@ -19,16 +19,20 @@ require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/lib/vendor/autoload.php'; // Load Sieve require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/lib/sieve/SieveParser.php'; +// minifierExtended +require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/lib/JSminifierExtended.php'; +require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/lib/CSSminifierExtended.php'; + // Minify JS use MatthiasMullie\Minify; -$js_minifier = new Minify\JS(); +$js_minifier = new JSminifierExtended(); $js_dir = array_diff(scandir('/web/js/build'), array('..', '.')); foreach ($js_dir as $js_file) { $js_minifier->add('/web/js/build/' . $js_file); } // Minify CSS -$css_minifier = new Minify\CSS(); +$css_minifier = new CSSminifierExtended(); $css_dir = array_diff(scandir('/web/css/build'), array('..', '.')); foreach ($css_dir as $css_file) { $css_minifier->add('/web/css/build/' . $css_file);