|
@@ -37,6 +37,7 @@ const SHADOW_ROOT_ATTRIBUTE_NAME = "data-single-file-shadow-root-element";
|
|
|
const WIN_ID_ATTRIBUTE_NAME = "data-single-file-win-id";
|
|
const WIN_ID_ATTRIBUTE_NAME = "data-single-file-win-id";
|
|
|
const IMAGE_ATTRIBUTE_NAME = "data-single-file-image";
|
|
const IMAGE_ATTRIBUTE_NAME = "data-single-file-image";
|
|
|
const POSTER_ATTRIBUTE_NAME = "data-single-file-poster";
|
|
const POSTER_ATTRIBUTE_NAME = "data-single-file-poster";
|
|
|
|
|
+const VIDEO_ATTRIBUTE_NAME = "data-single-file-video";
|
|
|
const CANVAS_ATTRIBUTE_NAME = "data-single-file-canvas";
|
|
const CANVAS_ATTRIBUTE_NAME = "data-single-file-canvas";
|
|
|
const HTML_IMPORT_ATTRIBUTE_NAME = "data-single-file-import";
|
|
const HTML_IMPORT_ATTRIBUTE_NAME = "data-single-file-import";
|
|
|
const STYLE_ATTRIBUTE_NAME = "data-single-file-movable-style";
|
|
const STYLE_ATTRIBUTE_NAME = "data-single-file-movable-style";
|
|
@@ -83,6 +84,7 @@ export {
|
|
|
HIDDEN_FRAME_ATTRIBUTE_NAME,
|
|
HIDDEN_FRAME_ATTRIBUTE_NAME,
|
|
|
IMAGE_ATTRIBUTE_NAME,
|
|
IMAGE_ATTRIBUTE_NAME,
|
|
|
POSTER_ATTRIBUTE_NAME,
|
|
POSTER_ATTRIBUTE_NAME,
|
|
|
|
|
+ VIDEO_ATTRIBUTE_NAME,
|
|
|
CANVAS_ATTRIBUTE_NAME,
|
|
CANVAS_ATTRIBUTE_NAME,
|
|
|
INPUT_VALUE_ATTRIBUTE_NAME,
|
|
INPUT_VALUE_ATTRIBUTE_NAME,
|
|
|
SHADOW_ROOT_ATTRIBUTE_NAME,
|
|
SHADOW_ROOT_ATTRIBUTE_NAME,
|
|
@@ -148,6 +150,7 @@ function preProcessDoc(doc, win, options) {
|
|
|
canvases: [],
|
|
canvases: [],
|
|
|
images: [],
|
|
images: [],
|
|
|
posters: [],
|
|
posters: [],
|
|
|
|
|
+ videos: [],
|
|
|
usedFonts: [],
|
|
usedFonts: [],
|
|
|
shadowRoots: [],
|
|
shadowRoots: [],
|
|
|
imports: [],
|
|
imports: [],
|
|
@@ -160,6 +163,7 @@ function preProcessDoc(doc, win, options) {
|
|
|
stylesheets: getStylesheetsData(doc),
|
|
stylesheets: getStylesheetsData(doc),
|
|
|
images: elementsInfo.images,
|
|
images: elementsInfo.images,
|
|
|
posters: elementsInfo.posters,
|
|
posters: elementsInfo.posters,
|
|
|
|
|
+ videos: elementsInfo.videos,
|
|
|
usedFonts: Array.from(elementsInfo.usedFonts.values()),
|
|
usedFonts: Array.from(elementsInfo.usedFonts.values()),
|
|
|
shadowRoots: elementsInfo.shadowRoots,
|
|
shadowRoots: elementsInfo.shadowRoots,
|
|
|
imports: elementsInfo.imports,
|
|
imports: elementsInfo.imports,
|
|
@@ -168,7 +172,7 @@ function preProcessDoc(doc, win, options) {
|
|
|
};
|
|
};
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-function getElementsInfo(win, doc, element, options, data = { usedFonts: new Map(), canvases: [], images: [], posters: [], shadowRoots: [], imports: [], markedElements: [] }, ascendantHidden) {
|
|
|
|
|
|
|
+function getElementsInfo(win, doc, element, options, data = { usedFonts: new Map(), canvases: [], images: [], posters: [], videos: [], shadowRoots: [], imports: [], markedElements: [] }, ascendantHidden) {
|
|
|
const elements = Array.from(element.childNodes).filter(node => (node instanceof win.HTMLElement) || (node instanceof win.SVGElement));
|
|
const elements = Array.from(element.childNodes).filter(node => (node instanceof win.HTMLElement) || (node instanceof win.SVGElement));
|
|
|
elements.forEach(element => {
|
|
elements.forEach(element => {
|
|
|
let elementHidden, elementKept, computedStyle;
|
|
let elementHidden, elementKept, computedStyle;
|
|
@@ -270,6 +274,10 @@ function getResourcesInfo(win, doc, element, options, data, elementHidden, compu
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
if (element.tagName == "VIDEO") {
|
|
if (element.tagName == "VIDEO") {
|
|
|
|
|
+ if (element.currentSrc) {
|
|
|
|
|
+ data.videos.push(element.currentSrc);
|
|
|
|
|
+ element.setAttribute(VIDEO_ATTRIBUTE_NAME, data.videos.length - 1);
|
|
|
|
|
+ }
|
|
|
if (!element.poster) {
|
|
if (!element.poster) {
|
|
|
const canvasElement = doc.createElement("canvas");
|
|
const canvasElement = doc.createElement("canvas");
|
|
|
const context = canvasElement.getContext("2d");
|
|
const context = canvasElement.getContext("2d");
|
|
@@ -391,7 +399,7 @@ function postProcessDoc(doc, markedElements) {
|
|
|
doc.head.querySelectorAll("*:not(base):not(link):not(meta):not(noscript):not(script):not(style):not(template):not(title)").forEach(element => element.removeAttribute("hidden"));
|
|
doc.head.querySelectorAll("*:not(base):not(link):not(meta):not(noscript):not(script):not(style):not(template):not(title)").forEach(element => element.removeAttribute("hidden"));
|
|
|
}
|
|
}
|
|
|
if (!markedElements) {
|
|
if (!markedElements) {
|
|
|
- const singleFileAttributes = [REMOVED_CONTENT_ATTRIBUTE_NAME, HIDDEN_FRAME_ATTRIBUTE_NAME, HIDDEN_CONTENT_ATTRIBUTE_NAME, PRESERVED_SPACE_ELEMENT_ATTRIBUTE_NAME, IMAGE_ATTRIBUTE_NAME, POSTER_ATTRIBUTE_NAME, CANVAS_ATTRIBUTE_NAME, INPUT_VALUE_ATTRIBUTE_NAME, SHADOW_ROOT_ATTRIBUTE_NAME, HTML_IMPORT_ATTRIBUTE_NAME, STYLESHEET_ATTRIBUTE_NAME, ASYNC_SCRIPT_ATTRIBUTE_NAME];
|
|
|
|
|
|
|
+ const singleFileAttributes = [REMOVED_CONTENT_ATTRIBUTE_NAME, HIDDEN_FRAME_ATTRIBUTE_NAME, HIDDEN_CONTENT_ATTRIBUTE_NAME, PRESERVED_SPACE_ELEMENT_ATTRIBUTE_NAME, IMAGE_ATTRIBUTE_NAME, POSTER_ATTRIBUTE_NAME, VIDEO_ATTRIBUTE_NAME, CANVAS_ATTRIBUTE_NAME, INPUT_VALUE_ATTRIBUTE_NAME, SHADOW_ROOT_ATTRIBUTE_NAME, HTML_IMPORT_ATTRIBUTE_NAME, STYLESHEET_ATTRIBUTE_NAME, ASYNC_SCRIPT_ATTRIBUTE_NAME];
|
|
|
markedElements = doc.querySelectorAll(singleFileAttributes.map(name => "[" + name + "]").join(","));
|
|
markedElements = doc.querySelectorAll(singleFileAttributes.map(name => "[" + name + "]").join(","));
|
|
|
}
|
|
}
|
|
|
markedElements.forEach(element => {
|
|
markedElements.forEach(element => {
|
|
@@ -402,6 +410,7 @@ function postProcessDoc(doc, markedElements) {
|
|
|
element.removeAttribute(PRESERVED_SPACE_ELEMENT_ATTRIBUTE_NAME);
|
|
element.removeAttribute(PRESERVED_SPACE_ELEMENT_ATTRIBUTE_NAME);
|
|
|
element.removeAttribute(IMAGE_ATTRIBUTE_NAME);
|
|
element.removeAttribute(IMAGE_ATTRIBUTE_NAME);
|
|
|
element.removeAttribute(POSTER_ATTRIBUTE_NAME);
|
|
element.removeAttribute(POSTER_ATTRIBUTE_NAME);
|
|
|
|
|
+ element.removeAttribute(VIDEO_ATTRIBUTE_NAME);
|
|
|
element.removeAttribute(CANVAS_ATTRIBUTE_NAME);
|
|
element.removeAttribute(CANVAS_ATTRIBUTE_NAME);
|
|
|
element.removeAttribute(INPUT_VALUE_ATTRIBUTE_NAME);
|
|
element.removeAttribute(INPUT_VALUE_ATTRIBUTE_NAME);
|
|
|
element.removeAttribute(SHADOW_ROOT_ATTRIBUTE_NAME);
|
|
element.removeAttribute(SHADOW_ROOT_ATTRIBUTE_NAME);
|