single-file-core 1.0.37 → 1.0.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.eslintrc.js CHANGED
File without changes
package/LICENSE CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
package/modules/index.js CHANGED
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "single-file-core",
3
- "version": "1.0.37",
3
+ "version": "1.0.39",
4
4
  "description": "SingleFile Core",
5
5
  "author": "Gildas Lormeau",
6
6
  "license": "AGPL-3.0-or-later",
File without changes
File without changes
File without changes
File without changes
@@ -502,7 +502,7 @@ class Processor {
502
502
  if (this.options.insertMetaCSP) {
503
503
  const metaTag = this.doc.createElement("meta");
504
504
  metaTag.httpEquiv = "content-security-policy";
505
- metaTag.content = "default-src 'none'; font-src 'self' data:; img-src 'self' data:; style-src 'unsafe-inline'; media-src 'self' data:; script-src 'unsafe-inline' data:; object-src 'self' data:;";
505
+ metaTag.content = "default-src 'none'; font-src 'self' data:; img-src 'self' data:; style-src 'unsafe-inline'; media-src 'self' data:; script-src 'unsafe-inline' data:; object-src 'self' data:; frame-src 'self' data:;";
506
506
  this.doc.head.appendChild(metaTag);
507
507
  }
508
508
  if (this.options.insertMetaNoIndex) {
@@ -764,7 +764,7 @@ class Processor {
764
764
  placeholderElement.replaceWith(noscriptElement);
765
765
  });
766
766
  this.doc.querySelectorAll("meta[http-equiv=\"content-security-policy\"]").forEach(element => element.remove());
767
- const objectElements = this.doc.querySelectorAll("applet, object[data]:not([type=\"image/svg+xml\"]):not([type=\"image/svg-xml\"]):not([type=\"text/html\"]), embed[src]:not([src*=\".svg\"]):not([src*=\".pdf\"])");
767
+ const objectElements = this.doc.querySelectorAll("applet, object[data]:not([type=\"image/svg+xml\"]):not([type=\"image/svg-xml\"]):not([type=\"text/html\"]):not([data*=\".svg\"]):not([data*=\".pdf\"]), embed[src]:not([src*=\".svg\"]):not([src*=\".pdf\"])");
768
768
  this.stats.set("discarded", "objects", objectElements.length);
769
769
  this.stats.set("processed", "objects", objectElements.length);
770
770
  objectElements.forEach(element => element.remove());
@@ -887,10 +887,10 @@ class Processor {
887
887
 
888
888
  insertFonts() {
889
889
  if (this.options.fonts && this.options.fonts.length) {
890
- let stylesheetContent = "";
890
+ let firstStylesheet = this.doc.querySelector("style, link[rel=stylesheet]"), previousStyleElement;
891
891
  this.options.fonts.forEach(fontData => {
892
892
  if (fontData["font-family"] && fontData.src) {
893
- stylesheetContent += "@font-face{";
893
+ let stylesheetContent = "@font-face{";
894
894
  let stylesContent = "";
895
895
  Object.keys(fontData).forEach(fontStyle => {
896
896
  if (stylesContent) {
@@ -899,18 +899,18 @@ class Processor {
899
899
  stylesContent += fontStyle + ":" + fontData[fontStyle];
900
900
  });
901
901
  stylesheetContent += stylesContent + "}";
902
+ const styleElement = this.doc.createElement("style");
903
+ styleElement.textContent = stylesheetContent;
904
+ if (previousStyleElement) {
905
+ previousStyleElement.insertAdjacentElement("afterend", styleElement);
906
+ } else if (firstStylesheet) {
907
+ firstStylesheet.parentElement.insertBefore(styleElement, firstStylesheet);
908
+ } else {
909
+ this.doc.head.appendChild(styleElement);
910
+ }
911
+ previousStyleElement = styleElement;
902
912
  }
903
913
  });
904
- if (stylesheetContent) {
905
- const styleElement = this.doc.createElement("style");
906
- styleElement.textContent = stylesheetContent;
907
- const existingStyleElement = this.doc.querySelector("style");
908
- if (existingStyleElement) {
909
- existingStyleElement.parentElement.insertBefore(styleElement, existingStyleElement);
910
- } else {
911
- this.doc.head.insertBefore(styleElement, this.doc.head.firstChild);
912
- }
913
- }
914
914
  }
915
915
  }
916
916
 
@@ -1222,7 +1222,7 @@ class Processor {
1222
1222
  async processPageResources() {
1223
1223
  const processAttributeArgs = [
1224
1224
  ["link[href][rel*=\"icon\"]", "href", false, true],
1225
- ["object[type=\"image/svg+xml\"], object[type=\"image/svg-xml\"]", "data"],
1225
+ ["object[type=\"image/svg+xml\"], object[type=\"image/svg-xml\"], object[data*=\".svg\"], object[data*=\".pdf\"]", "data"],
1226
1226
  ["img[src], input[src][type=image]", "src", true],
1227
1227
  ["embed[src*=\".svg\"], embed[src*=\".pdf\"]", "src"],
1228
1228
  ["video[poster]", "poster"],
File without changes
File without changes
File without changes
File without changes
File without changes
package/single-file.js CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
package/vendor/index.js CHANGED
File without changes
File without changes