|
|
@@ -37,6 +37,7 @@
|
|
|
const BUTTON_CLOSE_URL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgAgMAAAAOFJJnAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9TtaIVETuIOASsThZERRylikWwUNoKrTqYXPohNGlIUlwcBdeCgx+LVQcXZ10dXAVB8APEydFJ0UVK/F9SaBHjwXE/3t173L0DhFqJqWbbOKBqlpGMRcVMdkUMvKIbfQCG0SExU4+nFtLwHF/38PH1LsKzvM/9OXqUnMkAn0g8y3TDIl4nnt60dM77xCFWlBTic+Ixgy5I/Mh12eU3zgWHBZ4ZMtLJOeIQsVhoYbmFWdFQiaeIw4qqUb6QcVnhvMVZLVVY4578hcGctpziOs0hxLCIOBIQIaOCDZRgIUKrRoqJJO1HPfyDjj9BLplcG2DkmEcZKiTHD/4Hv7s185MTblIwCrS/2PbHCBDYBepV2/4+tu36CeB/Bq60pr9cA2Y+Sa82tfAR0LsNXFw3NXkPuNwBBp50yZAcyU9TyOeB9zP6pizQfwt0rbq9NfZx+gCkqaulG+DgEBgtUPaax7s7W3v790yjvx825XKP2aKCdAAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAAd0SU1FB+QLEQA6Na1u6IUAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAACVBMVEUAAAAAAACKioqjwG1pAAAAAXRSTlMAQObYZgAAAAFiS0dEAmYLfGQAAABlSURBVBhXTc/BEUQhCAPQ58ES6McSPED/rfwDI7vOMCoJIeGd6CvFgZXiwk47Ia5VUKdrVXcb39kfqxqmTg+I2xJ2tqhVTaGaQjTl7/GgIc/4CL4Vs3RsjLFndcxPnAn4iww8A3yQjRZjti1t6AAAAABJRU5ErkJggg==";
|
|
|
const SHADOWROOT_ATTRIBUTE_NAME = "shadowrootmode";
|
|
|
const SCRIPT_TEMPLATE_SHADOW_ROOT = "data-template-shadow-root";
|
|
|
+ const SCRIPT_OPTIONS = "data-single-file-options";
|
|
|
const NOTE_TAGNAME = "single-file-note";
|
|
|
const NOTE_CLASS = "note";
|
|
|
const NOTE_MASK_CLASS = "note-mask";
|
|
|
@@ -1075,11 +1076,20 @@ pre code {
|
|
|
if (initScriptContent) {
|
|
|
content = content.replace(/<script data-template-shadow-root src.*?<\/script>/g, initScriptContent);
|
|
|
}
|
|
|
+ let filename;
|
|
|
+ const pageOptions = loadOptionsFromPage(document);
|
|
|
+ if (pageOptions) {
|
|
|
+ pageOptions.backgroundSave = message.backgroundSave;
|
|
|
+ pageOptions.saveDate = new Date(pageOptions.saveDate);
|
|
|
+ pageOptions.visitDate = new Date(pageOptions.visitDate);
|
|
|
+ filename = await singlefile.helper.formatFilename(content, document, pageOptions);
|
|
|
+ }
|
|
|
if (pageCompressContent) {
|
|
|
const viewport = document.head.querySelector("meta[name=viewport]");
|
|
|
window.parent.postMessage(JSON.stringify({
|
|
|
method: "setContent",
|
|
|
content,
|
|
|
+ filename,
|
|
|
title: document.title,
|
|
|
doctype: singlefile.helper.getDoctypeString(document),
|
|
|
url: pageUrl,
|
|
|
@@ -1089,9 +1099,9 @@ pre code {
|
|
|
}), "*");
|
|
|
} else {
|
|
|
if (message.foregroundSave) {
|
|
|
- if (message.filename && message.filename.length) {
|
|
|
+ if (filename || (message.filename && message.filename.length)) {
|
|
|
const link = document.createElement("a");
|
|
|
- link.download = message.filename;
|
|
|
+ link.download = filename || message.filename;
|
|
|
link.href = URL.createObjectURL(new Blob([content], { type: "text/html" }));
|
|
|
link.dispatchEvent(new MouseEvent("click"));
|
|
|
}
|
|
|
@@ -1099,7 +1109,8 @@ pre code {
|
|
|
} else {
|
|
|
window.parent.postMessage(JSON.stringify({
|
|
|
method: "setContent",
|
|
|
- content
|
|
|
+ content,
|
|
|
+ filename
|
|
|
}), "*");
|
|
|
}
|
|
|
}
|
|
|
@@ -1253,6 +1264,13 @@ pre code {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ function loadOptionsFromPage(doc) {
|
|
|
+ const optionsElement = doc.body.querySelector("script[type=\"application/json\"][" + SCRIPT_OPTIONS + "]");
|
|
|
+ if (optionsElement) {
|
|
|
+ return JSON.parse(optionsElement.textContent);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
async function initPage() {
|
|
|
document.querySelectorAll("iframe").forEach(element => {
|
|
|
const pointerEvents = "pointer-events";
|