Add lazy load
This commit is contained in:
106
css-minifier.php
Normal file
106
css-minifier.php
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* CSS Minifier Function
|
||||||
|
*
|
||||||
|
* A standalone PHP function to minify CSS content by:
|
||||||
|
* - Removing comments
|
||||||
|
* - Removing whitespace and line breaks
|
||||||
|
* - Removing unnecessary semicolons
|
||||||
|
* - Optimizing colors
|
||||||
|
* - Shortening zero values
|
||||||
|
*
|
||||||
|
* @author WPA Superstar Plugin
|
||||||
|
* @version 1.0.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Minifies CSS content
|
||||||
|
*
|
||||||
|
* @param string $css The CSS content to minify
|
||||||
|
* @return string The minified CSS content
|
||||||
|
*/
|
||||||
|
function minify_css($css) {
|
||||||
|
if (empty($css)) {
|
||||||
|
return $css;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Remove comments
|
||||||
|
$css = preg_replace('/\/\*[\s\S]*?\*\//', '', $css);
|
||||||
|
|
||||||
|
// Remove whitespace around key characters
|
||||||
|
$css = preg_replace('/\s*([{}:;,])\s*/', '$1', $css);
|
||||||
|
|
||||||
|
// Remove newlines, tabs, and extra spaces
|
||||||
|
$css = preg_replace('/\s+/', ' ', $css);
|
||||||
|
|
||||||
|
// Remove unnecessary semicolons
|
||||||
|
$css = str_replace(';}', '}', $css);
|
||||||
|
|
||||||
|
// Convert rgb to hex where shorter
|
||||||
|
$css = preg_replace_callback(
|
||||||
|
'/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/i',
|
||||||
|
function($matches) {
|
||||||
|
$r = intval($matches[1]);
|
||||||
|
$g = intval($matches[2]);
|
||||||
|
$b = intval($matches[3]);
|
||||||
|
|
||||||
|
// Only convert if the hex representation would be shorter
|
||||||
|
if ($r < 256 && $g < 256 && $b < 256) {
|
||||||
|
$hex = sprintf("#%02x%02x%02x", $r, $g, $b);
|
||||||
|
// Check if it can be shortened to #XXX format
|
||||||
|
if (preg_match('/#([0-9a-f])\1([0-9a-f])\2([0-9a-f])\3/i', $hex)) {
|
||||||
|
$hex = preg_replace('/#([0-9a-f])\1([0-9a-f])\2([0-9a-f])\3/i', '#$1$2$3', $hex);
|
||||||
|
}
|
||||||
|
return $hex;
|
||||||
|
}
|
||||||
|
return $matches[0];
|
||||||
|
},
|
||||||
|
$css
|
||||||
|
);
|
||||||
|
|
||||||
|
// Optimize zero values (remove units)
|
||||||
|
$css = preg_replace('/([:\s])0(?:px|pt|em|rem|%|in|cm|mm|pc|ex|vw|vh|vmin|vmax)/', '$10', $css);
|
||||||
|
|
||||||
|
// Shorten multiple zeros
|
||||||
|
$css = preg_replace('/\b0 0 0 0\b/', '0', $css);
|
||||||
|
$css = preg_replace('/\b0 0 0\b/', '0', $css);
|
||||||
|
$css = preg_replace('/\b0 0\b/', '0', $css);
|
||||||
|
|
||||||
|
// Shorten colors where possible (e.g., #ffffff to #fff)
|
||||||
|
$css = preg_replace('/#([0-9a-f])\1([0-9a-f])\2([0-9a-f])\3/i', '#$1$2$3', $css);
|
||||||
|
|
||||||
|
} catch (Exception $e) {
|
||||||
|
// If any error occurs, return original CSS
|
||||||
|
return $css;
|
||||||
|
}
|
||||||
|
|
||||||
|
return trim($css);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Example usage
|
||||||
|
// -----------------
|
||||||
|
// Input CSS:
|
||||||
|
// .example {
|
||||||
|
// color: #ffffff;
|
||||||
|
// margin: 0px 0px 0px 0px;
|
||||||
|
// padding: 20px;
|
||||||
|
// background-color: rgb(51, 51, 51);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Output (minified):
|
||||||
|
// .example{color:#fff;margin:0;padding:20px;background-color:#333}
|
||||||
|
|
||||||
|
// Simple test case
|
||||||
|
if (basename(__FILE__) == basename($_SERVER['SCRIPT_FILENAME'])) {
|
||||||
|
$test_css = '
|
||||||
|
.example {
|
||||||
|
color: #ffffff;
|
||||||
|
margin: 0px 0px 0px 0px;
|
||||||
|
padding: 20px;
|
||||||
|
background-color: rgb(51, 51, 51);
|
||||||
|
}';
|
||||||
|
|
||||||
|
echo "Original:\n" . $test_css . "\n\n";
|
||||||
|
echo "Minified:\n" . minify_css($test_css);
|
||||||
|
}
|
Reference in New Issue
Block a user