From d94a66ca2b514370a36e5e9aae421d756e688105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Ryb=C3=A1rsky?= Date: Sun, 4 Feb 2024 10:45:44 +0100 Subject: [PATCH] test inlining --- lib/inliner.php | 77 ++++++++++++++++++++++++++++++------------------- 1 file changed, 47 insertions(+), 30 deletions(-) diff --git a/lib/inliner.php b/lib/inliner.php index 700f64d..9bf353c 100644 --- a/lib/inliner.php +++ b/lib/inliner.php @@ -1,64 +1,81 @@ tags with href attribute for CSS files $pattern = '/]*?\srel=["\']?stylesheet["\'].*?\shref=["\']?\/(.*?)["\'][^>]*?>/i'; - // Use preg_replace_callback to replace matched link tags with inline styles $outputString = preg_replace_callback($pattern, function($match) { - // Extract the href attribute value $href = $match[1]; - $cssFilePath = $_SERVER['DOCUMENT_ROOT'] . '/' . $href; - - // Get the content of the local CSS file $cssContent = file_get_contents($cssFilePath); - - // Get the directory where the CSS file is located $cssDir = dirname($cssFilePath); - // Replace relative paths in the CSS content to be relative to the CSS file's directory $cssContent = preg_replace_callback('/url\(["\']?(\/.*?|.*?)["\']?\)/i', function($urlMatch) use ($cssDir) { - // Extract the URL value $url = $urlMatch[1]; - - // Combine with the CSS file's directory to create an absolute path $absolutePath = $cssDir . '/' . $url; - - // Make the path relative to the CSS file's directory $relativePath = ltrim(substr($absolutePath, strlen($_SERVER['DOCUMENT_ROOT'])), '/'); - - // Create the updated url() declaration - $updatedUrlDeclaration = 'url("' . $relativePath . '")'; - - return $updatedUrlDeclaration; + return 'url("' . $relativePath . '")'; }, $cssContent); - // Create an inline style tag with the modified CSS content - return ""; + // Minify the CSS content + $cssContent = minifyCss($cssContent); + + return ""; }, $inputString); return $outputString; } function inlineScriptFromSrc($inputString) { - // Define the regular expression pattern to match "; + $escapedJsContent = htmlspecialchars($jsContent, ENT_QUOTES, 'UTF-8'); + return ""; }, $inputString); return $outputString; +} + +function minifyCss($css) { + // Remove comments + $css = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $css); + + // Remove whitespace + $css = preg_replace('/\s+/', ' ', $css); + + // Remove unnecessary semicolons + $css = str_replace(';}', '}', $css); + + // Remove spaces around colons + $css = str_replace(': ', ':', $css); + + // Remove spaces around commas + $css = str_replace(', ', ',', $css); + + return trim($css); +} + +function minifyJs($js) { + // Remove comments + $js = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $js); + + // Remove newlines and tabs + $js = str_replace(array("\r\n", "\r", "\n", "\t"), '', $js); + + // Remove unnecessary semicolons + $js = str_replace(';}', '}', $js); + + // Remove spaces after function keyword + $js = str_replace('function ', 'function', $js); + + // Remove spaces around operators + $js = preg_replace('/\s*([=+\-*/])\s*/', '$1', $js); + + return trim($js); } \ No newline at end of file