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