|
@@ -21,6 +21,8 @@
|
|
|
* Source.
|
|
* Source.
|
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
|
|
+/* global Blob, FileReader */
|
|
|
|
|
+
|
|
|
this.SingleFileCore = this.SingleFileCore || (() => {
|
|
this.SingleFileCore = this.SingleFileCore || (() => {
|
|
|
|
|
|
|
|
const SELECTED_CONTENT_ATTRIBUTE_NAME = "data-single-file-selected-content";
|
|
const SELECTED_CONTENT_ATTRIBUTE_NAME = "data-single-file-selected-content";
|
|
@@ -404,11 +406,11 @@ this.SingleFileCore = this.SingleFileCore || (() => {
|
|
|
}
|
|
}
|
|
|
let size;
|
|
let size;
|
|
|
if (this.options.displayStats) {
|
|
if (this.options.displayStats) {
|
|
|
- size = docUtil.getContentSize(this.doc.documentElement.outerHTML);
|
|
|
|
|
|
|
+ size = Util.getContentSize(this.doc.documentElement.outerHTML);
|
|
|
}
|
|
}
|
|
|
const content = docUtil.serialize(this.doc, this.options.compressHTML);
|
|
const content = docUtil.serialize(this.doc, this.options.compressHTML);
|
|
|
if (this.options.displayStats) {
|
|
if (this.options.displayStats) {
|
|
|
- const contentSize = docUtil.getContentSize(content);
|
|
|
|
|
|
|
+ const contentSize = Util.getContentSize(content);
|
|
|
this.stats.set("processed", "HTML bytes", contentSize);
|
|
this.stats.set("processed", "HTML bytes", contentSize);
|
|
|
this.stats.add("discarded", "HTML bytes", size - contentSize);
|
|
this.stats.add("discarded", "HTML bytes", size - contentSize);
|
|
|
}
|
|
}
|
|
@@ -418,10 +420,11 @@ this.SingleFileCore = this.SingleFileCore || (() => {
|
|
|
if (!this.options.backgroundSave) {
|
|
if (!this.options.backgroundSave) {
|
|
|
filename = filename.replace(/\//g, "_");
|
|
filename = filename.replace(/\//g, "_");
|
|
|
}
|
|
}
|
|
|
- if (filename.length > 192) {
|
|
|
|
|
|
|
+ if (Util.getContentSize(filename) > 192) {
|
|
|
const extensionMatch = filename.match(/(\.[^.]{3,4})$/);
|
|
const extensionMatch = filename.match(/(\.[^.]{3,4})$/);
|
|
|
const extension = extensionMatch && extensionMatch[0] && extensionMatch[0].length > 1 ? extensionMatch[0] : "";
|
|
const extension = extensionMatch && extensionMatch[0] && extensionMatch[0].length > 1 ? extensionMatch[0] : "";
|
|
|
- filename = filename.substring(0, 192 - extension.length) + "…" + extension;
|
|
|
|
|
|
|
+ filename = await Util.truncateContent(filename, 192 - extension.length);
|
|
|
|
|
+ filename = filename + "…" + extension;
|
|
|
}
|
|
}
|
|
|
if (!filename) {
|
|
if (!filename) {
|
|
|
filename = "Unnamed page";
|
|
filename = "Unnamed page";
|
|
@@ -1018,11 +1021,11 @@ this.SingleFileCore = this.SingleFileCore || (() => {
|
|
|
compressHTML() {
|
|
compressHTML() {
|
|
|
let size;
|
|
let size;
|
|
|
if (this.options.displayStats) {
|
|
if (this.options.displayStats) {
|
|
|
- size = docUtil.getContentSize(this.doc.documentElement.outerHTML);
|
|
|
|
|
|
|
+ size = Util.getContentSize(this.doc.documentElement.outerHTML);
|
|
|
}
|
|
}
|
|
|
docUtil.minifyHTML(this.doc, { PRESERVED_SPACE_ELEMENT_ATTRIBUTE_NAME: docUtil.PRESERVED_SPACE_ELEMENT_ATTRIBUTE_NAME });
|
|
docUtil.minifyHTML(this.doc, { PRESERVED_SPACE_ELEMENT_ATTRIBUTE_NAME: docUtil.PRESERVED_SPACE_ELEMENT_ATTRIBUTE_NAME });
|
|
|
if (this.options.displayStats) {
|
|
if (this.options.displayStats) {
|
|
|
- this.stats.add("discarded", "HTML bytes", size - docUtil.getContentSize(this.doc.documentElement.outerHTML));
|
|
|
|
|
|
|
+ this.stats.add("discarded", "HTML bytes", size - Util.getContentSize(this.doc.documentElement.outerHTML));
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -1666,6 +1669,19 @@ this.SingleFileCore = this.SingleFileCore || (() => {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ static getContentSize(content) {
|
|
|
|
|
+ return new Blob([content]).size;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ static async truncateContent(content, maxSize) {
|
|
|
|
|
+ const blob = new Blob([content]);
|
|
|
|
|
+ const reader = new FileReader();
|
|
|
|
|
+ reader.readAsText(blob.slice(0, maxSize));
|
|
|
|
|
+ return await new Promise((resolve, reject) => {
|
|
|
|
|
+ reader.addEventListener("load", () => resolve(reader.result), false);
|
|
|
|
|
+ reader.addEventListener("error", reject, false);
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function log(...args) {
|
|
function log(...args) {
|