#!/usr/bin/php <?php # Dependencies: # - PHP # - Uglifyjs (`npm install -g uglifyjs`) # - Lessc (`npm install -g less`) # - Lessc minifier (`npm install -g less-plugin-clean-css`) # - HTML minifier (`npm install -g html-minifier`) echo "Compressing/minifying web resources...\n"; if (is_dir('clientpack')) { `rm -r clientpack`; } `cp -r client clientpack`; // Toggle IIFE on `sed -i -re 's~//IIFEMODE:~~g' clientpack/dcwebui.js`; // Minify JS `uglifyjs clientpack/dcwebui.js -o clientpack/dcwebui.min.js -c -m`; // Minify CSS `lessc --clean-css clientpack/dcwebui.css clientpack/dcwebui.min.css`; // Embed css into HTML file $css_file = file_get_contents('clientpack/dcwebui.min.css'); $html_content = file_get_contents('clientpack/index.htm'); $html_content = preg_replace('~<link[^>]+dcwebui.css[^>]*>~', '<style type="text/css">'.$css_file.'</style>', $html_content); // Embed JS into HTML file $js_file = file_get_contents('clientpack/dcwebui.min.js'); $html_content = preg_replace('~<script[^>]+dcwebui.js[^>]*>~', '<script type="text/javascript">'.$js_file.'</script>', $html_content); // Embed socketio into HTML file $SIO_NAME = 'socket.io-1.7.2.js'; $sio_file = file_get_contents('clientpack/'.$SIO_NAME); $html_content = preg_replace('~<script[^>]+'.$SIO_NAME.'[^>]*>~', '<script type="text/javascript">'.$sio_file.'</script>', $html_content); // Minify the combined file file_put_contents('clientpack/index.htm', $html_content); `html-minifier --collapse-whitespace -o clientpack/index.min.htm clientpack/index.htm`; // Clean up files `rm clientpack/{index.htm,dcwebui{.min,}.js,dcwebui{.min,}.css}`; unlink('clientpack/'.$SIO_NAME); rename('clientpack/index.min.htm', 'clientpack/index.htm');