Răsfoiți Sursa

merge adjacent script tags

Gildas 7 ani în urmă
părinte
comite
a2673c46b3
1 a modificat fișierele cu 13 adăugiri și 4 ștergeri
  1. 13 4
      lib/single-file/htmlmini.js

+ 13 - 4
lib/single-file/htmlmini.js

@@ -121,7 +121,16 @@ this.htmlmini = this.htmlmini || (() => {
 		}
 	};
 
-	const modules = [collapseBooleanAttributes, mergeTextNodes, collapseWhitespace, removeComments, removeEmptyAttributes, removeRedundantAttributes, node => mergeElements(node, "STYLE", (node, previousSibling) => node.media == previousSibling.media)];
+	const modules = [
+		collapseBooleanAttributes,
+		mergeTextNodes,
+		collapseWhitespace,
+		removeComments,
+		removeEmptyAttributes,
+		removeRedundantAttributes,
+		node => mergeElements(node, "style", (node, previousSibling) => node.media == previousSibling.media),
+		node => mergeElements(node, "script", (node, previousSibling) => (!node.type || node.nodeType == "text/javascript") && (!previousSibling.type || previousSibling.nodeType == "text/javascript"))
+	];
 
 	return {
 		process: (doc, options) => {
@@ -160,15 +169,15 @@ this.htmlmini = this.htmlmini || (() => {
 		}
 	}
 
-	function mergeElements(node, tagName, testFn) {
-		if (node.nodeType == Node.ELEMENT_NODE && node.tagName == tagName) {
+	function mergeElements(node, tagName, acceptMerge) {
+		if (node.nodeType == Node.ELEMENT_NODE && node.tagName.toLowerCase() == tagName.toLowerCase()) {
 			let previousSibling = node.previousSibling;
 			let previousSiblings = [];
 			while (previousSibling && previousSibling.nodeType == Node.TEXT_NODE && !previousSibling.textContent.trim()) {
 				previousSiblings.push(previousSibling);
 				previousSibling = previousSibling.previousSibling;
 			}
-			if (previousSibling && previousSibling.nodeType == Node.ELEMENT_NODE && previousSibling.tagName == node.tagName && testFn(node, previousSibling)) {
+			if (previousSibling && previousSibling.nodeType == Node.ELEMENT_NODE && previousSibling.tagName == node.tagName && acceptMerge(node, previousSibling)) {
 				node.textContent = previousSibling.textContent + node.textContent;
 				previousSiblings.forEach(node => node.remove());
 				previousSibling.remove();