|
@@ -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 {
|
|
return {
|
|
|
process: (doc, options) => {
|
|
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 previousSibling = node.previousSibling;
|
|
|
let previousSiblings = [];
|
|
let previousSiblings = [];
|
|
|
while (previousSibling && previousSibling.nodeType == Node.TEXT_NODE && !previousSibling.textContent.trim()) {
|
|
while (previousSibling && previousSibling.nodeType == Node.TEXT_NODE && !previousSibling.textContent.trim()) {
|
|
|
previousSiblings.push(previousSibling);
|
|
previousSiblings.push(previousSibling);
|
|
|
previousSibling = previousSibling.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;
|
|
node.textContent = previousSibling.textContent + node.textContent;
|
|
|
previousSiblings.forEach(node => node.remove());
|
|
previousSiblings.forEach(node => node.remove());
|
|
|
previousSibling.remove();
|
|
previousSibling.remove();
|