html2canvas-pro 1.6.7 → 2.0.1
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/README.md +1 -0
- package/demo/image-smoothing-demo.html +256 -0
- package/demo/refactoring-test.html +602 -0
- package/dist/html2canvas-pro.esm.js +3391 -1491
- package/dist/html2canvas-pro.esm.js.map +1 -1
- package/dist/html2canvas-pro.js +3394 -1490
- package/dist/html2canvas-pro.js.map +1 -1
- package/dist/html2canvas-pro.min.js +5 -4
- package/dist/lib/__tests__/index.js +8 -2
- package/dist/lib/__tests__/index.js.map +1 -1
- package/dist/lib/config.js +72 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/core/__tests__/cache-storage.js +6 -3
- package/dist/lib/core/__tests__/cache-storage.js.map +1 -1
- package/dist/lib/core/__tests__/cache-storage.test.js +158 -0
- package/dist/lib/core/__tests__/cache-storage.test.js.map +1 -0
- package/dist/lib/core/__tests__/validator.js +296 -0
- package/dist/lib/core/__tests__/validator.js.map +1 -0
- package/dist/lib/core/cache-storage.js +130 -11
- package/dist/lib/core/cache-storage.js.map +1 -1
- package/dist/lib/core/context.js +5 -2
- package/dist/lib/core/context.js.map +1 -1
- package/dist/lib/core/debugger.js +3 -0
- package/dist/lib/core/debugger.js.map +1 -1
- package/dist/lib/core/origin-checker.js +54 -0
- package/dist/lib/core/origin-checker.js.map +1 -0
- package/dist/lib/core/performance-monitor.js +208 -0
- package/dist/lib/core/performance-monitor.js.map +1 -0
- package/dist/lib/core/validator.js +501 -0
- package/dist/lib/core/validator.js.map +1 -0
- package/dist/lib/css/index.js +4 -0
- package/dist/lib/css/index.js.map +1 -1
- package/dist/lib/css/property-descriptors/__tests__/background-tests.js +7 -1
- package/dist/lib/css/property-descriptors/__tests__/background-tests.js.map +1 -1
- package/dist/lib/css/property-descriptors/__tests__/clip-path.test.js +273 -0
- package/dist/lib/css/property-descriptors/__tests__/clip-path.test.js.map +1 -0
- package/dist/lib/css/property-descriptors/__tests__/image-rendering-integration.test.js +142 -0
- package/dist/lib/css/property-descriptors/__tests__/image-rendering-integration.test.js.map +1 -0
- package/dist/lib/css/property-descriptors/__tests__/image-rendering-performance.test.js +167 -0
- package/dist/lib/css/property-descriptors/__tests__/image-rendering-performance.test.js.map +1 -0
- package/dist/lib/css/property-descriptors/__tests__/image-rendering.test.js +61 -0
- package/dist/lib/css/property-descriptors/__tests__/image-rendering.test.js.map +1 -0
- package/dist/lib/css/property-descriptors/clip-path.js +190 -0
- package/dist/lib/css/property-descriptors/clip-path.js.map +1 -0
- package/dist/lib/css/property-descriptors/image-rendering.js +34 -0
- package/dist/lib/css/property-descriptors/image-rendering.js.map +1 -0
- package/dist/lib/css/types/__tests__/image-tests.js +7 -1
- package/dist/lib/css/types/__tests__/image-tests.js.map +1 -1
- package/dist/lib/css/types/color-math.js +26 -0
- package/dist/lib/css/types/color-math.js.map +1 -0
- package/dist/lib/css/types/color-spaces/srgb.js +6 -6
- package/dist/lib/css/types/color-spaces/srgb.js.map +1 -1
- package/dist/lib/css/types/color-utilities.js +13 -22
- package/dist/lib/css/types/color-utilities.js.map +1 -1
- package/dist/lib/dom/__tests__/dom-normalizer.test.js +113 -0
- package/dist/lib/dom/__tests__/dom-normalizer.test.js.map +1 -0
- package/dist/lib/dom/__tests__/element-container.test.js +109 -0
- package/dist/lib/dom/__tests__/element-container.test.js.map +1 -0
- package/dist/lib/dom/document-cloner.js +3 -3
- package/dist/lib/dom/document-cloner.js.map +1 -1
- package/dist/lib/dom/dom-normalizer.js +116 -0
- package/dist/lib/dom/dom-normalizer.js.map +1 -0
- package/dist/lib/dom/element-container.js +32 -15
- package/dist/lib/dom/element-container.js.map +1 -1
- package/dist/lib/dom/node-parser.js +16 -20
- package/dist/lib/dom/node-parser.js.map +1 -1
- package/dist/lib/dom/node-type-guards.js +44 -0
- package/dist/lib/dom/node-type-guards.js.map +1 -0
- package/dist/lib/dom/replaced-elements/iframe-element-container.js +5 -4
- package/dist/lib/dom/replaced-elements/iframe-element-container.js.map +1 -1
- package/dist/lib/index.js +148 -41
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/render/canvas/__tests__/background-renderer.test.js +65 -0
- package/dist/lib/render/canvas/__tests__/background-renderer.test.js.map +1 -0
- package/dist/lib/render/canvas/__tests__/border-renderer.test.js +23 -0
- package/dist/lib/render/canvas/__tests__/border-renderer.test.js.map +1 -0
- package/dist/lib/render/canvas/__tests__/effects-renderer.test.js +30 -0
- package/dist/lib/render/canvas/__tests__/effects-renderer.test.js.map +1 -0
- package/dist/lib/render/canvas/__tests__/text-renderer.test.js +310 -0
- package/dist/lib/render/canvas/__tests__/text-renderer.test.js.map +1 -0
- package/dist/lib/render/canvas/background-renderer.js +222 -0
- package/dist/lib/render/canvas/background-renderer.js.map +1 -0
- package/dist/lib/render/canvas/border-renderer.js +185 -0
- package/dist/lib/render/canvas/border-renderer.js.map +1 -0
- package/dist/lib/render/canvas/canvas-renderer.js +61 -689
- package/dist/lib/render/canvas/canvas-renderer.js.map +1 -1
- package/dist/lib/render/canvas/effects-renderer.js +94 -0
- package/dist/lib/render/canvas/effects-renderer.js.map +1 -0
- package/dist/lib/render/canvas/text-renderer.js +575 -0
- package/dist/lib/render/canvas/text-renderer.js.map +1 -0
- package/dist/lib/render/effects.js +17 -1
- package/dist/lib/render/effects.js.map +1 -1
- package/dist/lib/render/renderer-interface.js +3 -0
- package/dist/lib/render/renderer-interface.js.map +1 -0
- package/dist/lib/render/stacking-context.js +131 -0
- package/dist/lib/render/stacking-context.js.map +1 -1
- package/dist/types/config.d.ts +54 -0
- package/dist/types/core/__tests__/cache-storage.test.d.ts +1 -0
- package/dist/types/core/__tests__/validator.d.ts +1 -0
- package/dist/types/core/cache-storage.d.ts +42 -1
- package/dist/types/core/context.d.ts +5 -1
- package/dist/types/core/origin-checker.d.ts +33 -0
- package/dist/types/core/performance-monitor.d.ts +131 -0
- package/dist/types/core/validator.d.ts +132 -0
- package/dist/types/css/index.d.ts +4 -0
- package/dist/types/css/property-descriptors/__tests__/clip-path.test.d.ts +1 -0
- package/dist/types/css/property-descriptors/__tests__/image-rendering-integration.test.d.ts +1 -0
- package/dist/types/css/property-descriptors/__tests__/image-rendering-performance.test.d.ts +1 -0
- package/dist/types/css/property-descriptors/__tests__/image-rendering.test.d.ts +1 -0
- package/dist/types/css/property-descriptors/clip-path.d.ts +62 -0
- package/dist/types/css/property-descriptors/image-rendering.d.ts +8 -0
- package/dist/types/css/types/color-math.d.ts +12 -0
- package/dist/types/css/types/color-utilities.d.ts +2 -3
- package/dist/types/dom/__tests__/dom-normalizer.test.d.ts +1 -0
- package/dist/types/dom/__tests__/element-container.test.d.ts +1 -0
- package/dist/types/dom/dom-normalizer.d.ts +62 -0
- package/dist/types/dom/element-container.d.ts +20 -1
- package/dist/types/dom/node-parser.d.ts +2 -7
- package/dist/types/dom/node-type-guards.d.ts +33 -0
- package/dist/types/dom/replaced-elements/iframe-element-container.d.ts +4 -1
- package/dist/types/index.d.ts +48 -3
- package/dist/types/render/canvas/__tests__/background-renderer.test.d.ts +1 -0
- package/dist/types/render/canvas/__tests__/border-renderer.test.d.ts +1 -0
- package/dist/types/render/canvas/__tests__/effects-renderer.test.d.ts +1 -0
- package/dist/types/render/canvas/__tests__/text-renderer.test.d.ts +1 -0
- package/dist/types/render/canvas/background-renderer.d.ts +87 -0
- package/dist/types/render/canvas/border-renderer.d.ts +67 -0
- package/dist/types/render/canvas/canvas-renderer.d.ts +19 -23
- package/dist/types/render/canvas/effects-renderer.d.ts +65 -0
- package/dist/types/render/canvas/text-renderer.d.ts +75 -0
- package/dist/types/render/effects.d.ts +15 -1
- package/dist/types/render/renderer-interface.d.ts +26 -0
- package/package.json +2 -1
|
@@ -3,10 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ElementContainer = void 0;
|
|
4
4
|
const index_1 = require("../css/index");
|
|
5
5
|
const bounds_1 = require("../css/layout/bounds");
|
|
6
|
-
const
|
|
6
|
+
const node_type_guards_1 = require("./node-type-guards");
|
|
7
7
|
const debugger_1 = require("../core/debugger");
|
|
8
|
+
const dom_normalizer_1 = require("./dom-normalizer");
|
|
8
9
|
class ElementContainer {
|
|
9
|
-
constructor(context, element) {
|
|
10
|
+
constructor(context, element, options = {}) {
|
|
10
11
|
this.context = context;
|
|
11
12
|
this.textNodes = [];
|
|
12
13
|
this.elements = [];
|
|
@@ -14,25 +15,41 @@ class ElementContainer {
|
|
|
14
15
|
if ((0, debugger_1.isDebugging)(element, 3 /* DebuggerType.PARSE */)) {
|
|
15
16
|
debugger;
|
|
16
17
|
}
|
|
17
|
-
this.styles = new index_1.CSSParsedDeclaration(context, window.getComputedStyle(element, null));
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
// getBoundingClientRect takes transforms into account
|
|
24
|
-
element.style.transform = 'none';
|
|
25
|
-
}
|
|
26
|
-
if (this.styles.rotate !== null) {
|
|
27
|
-
// Handle rotate property similarly to transform
|
|
28
|
-
element.style.rotate = 'none';
|
|
29
|
-
}
|
|
18
|
+
this.styles = new index_1.CSSParsedDeclaration(context, context.config.window.getComputedStyle(element, null));
|
|
19
|
+
// Side effects moved to DOMNormalizer (can be disabled via options)
|
|
20
|
+
const shouldNormalize = options.normalizeDom !== false; // Default: true
|
|
21
|
+
if (shouldNormalize && (0, node_type_guards_1.isHTMLElementNode)(element)) {
|
|
22
|
+
this.originalStyles = dom_normalizer_1.DOMNormalizer.normalizeElement(element, this.styles);
|
|
23
|
+
this.originalElement = element; // Save reference for restoration
|
|
30
24
|
}
|
|
31
25
|
this.bounds = (0, bounds_1.parseBounds)(this.context, element);
|
|
32
26
|
if ((0, debugger_1.isDebugging)(element, 4 /* DebuggerType.RENDER */)) {
|
|
33
27
|
this.flags |= 16 /* FLAGS.DEBUG_RENDER */;
|
|
34
28
|
}
|
|
35
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Restore original element styles (if normalized)
|
|
32
|
+
* Call this after rendering is complete to clean up DOM state
|
|
33
|
+
*/
|
|
34
|
+
restore() {
|
|
35
|
+
if (this.originalStyles && this.originalElement) {
|
|
36
|
+
dom_normalizer_1.DOMNormalizer.restoreElement(this.originalElement, this.originalStyles);
|
|
37
|
+
// Clear references to prevent memory leaks
|
|
38
|
+
this.originalStyles = undefined;
|
|
39
|
+
this.originalElement = undefined;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Recursively restore all elements in the tree
|
|
44
|
+
* Call this on the root container after rendering is complete
|
|
45
|
+
*/
|
|
46
|
+
restoreTree() {
|
|
47
|
+
this.restore();
|
|
48
|
+
// Recursively restore all child elements
|
|
49
|
+
for (const child of this.elements) {
|
|
50
|
+
child.restoreTree();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
36
53
|
}
|
|
37
54
|
exports.ElementContainer = ElementContainer;
|
|
38
55
|
//# sourceMappingURL=element-container.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-container.js","sourceRoot":"","sources":["../../../src/dom/element-container.ts"],"names":[],"mappings":";;;AAAA,wCAAoD;AAEpD,iDAA2D;AAC3D
|
|
1
|
+
{"version":3,"file":"element-container.js","sourceRoot":"","sources":["../../../src/dom/element-container.ts"],"names":[],"mappings":";;;AAAA,wCAAoD;AAEpD,iDAA2D;AAC3D,yDAAuD;AAEvD,+CAA6D;AAC7D,qDAAiE;AAiBjE,MAAa,gBAAgB;IASzB,YACuB,OAAgB,EACnC,OAAgB,EAChB,UAAmC,EAAE;QAFlB,YAAO,GAAP,OAAO,CAAS;QAR9B,cAAS,GAAoB,EAAE,CAAC;QAChC,aAAQ,GAAuB,EAAE,CAAC;QAE3C,UAAK,GAAG,CAAC,CAAC;QASN,IAAI,IAAA,sBAAW,EAAC,OAAO,6BAAqB,EAAE,CAAC;YAC3C,QAAQ,CAAC;QACb,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,4BAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAEvG,oEAAoE;QACpE,MAAM,eAAe,GAAG,OAAO,CAAC,YAAY,KAAK,KAAK,CAAC,CAAC,gBAAgB;QACxE,IAAI,eAAe,IAAI,IAAA,oCAAiB,EAAC,OAAO,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,cAAc,GAAG,8BAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3E,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,CAAC,iCAAiC;QACrE,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAA,oBAAW,EAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEjD,IAAI,IAAA,sBAAW,EAAC,OAAO,8BAAsB,EAAE,CAAC;YAC5C,IAAI,CAAC,KAAK,+BAAsB,CAAC;QACrC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,OAAO;QACH,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC9C,8BAAa,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACxE,2CAA2C;YAC3C,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YAChC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACrC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,WAAW;QACP,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,yCAAyC;QACzC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,KAAK,CAAC,WAAW,EAAE,CAAC;QACxB,CAAC;IACL,CAAC;CACJ;AA1DD,4CA0DC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.isSlotElement = exports.isSelectElement = exports.isTextareaElement = exports.isScriptElement = exports.isStyleElement = exports.isIFrameElement = exports.isImageElement = exports.isVideoElement = exports.isCanvasElement = exports.isBodyElement = exports.isSVGElement = exports.isHTMLElement = exports.isInputElement = exports.parseTree = exports.isCustomElement = exports.isOLElement = exports.isLIElement = exports.isHTMLElementNode = exports.isSVGElementNode = exports.isTextNode = exports.isElementNode = void 0;
|
|
4
4
|
const element_container_1 = require("./element-container");
|
|
5
5
|
const text_container_1 = require("./text-container");
|
|
6
6
|
const image_element_container_1 = require("./replaced-elements/image-element-container");
|
|
@@ -13,15 +13,23 @@ const select_element_container_1 = require("./elements/select-element-container"
|
|
|
13
13
|
const textarea_element_container_1 = require("./elements/textarea-element-container");
|
|
14
14
|
const iframe_element_container_1 = require("./replaced-elements/iframe-element-container");
|
|
15
15
|
const bitwise_1 = require("../core/bitwise");
|
|
16
|
+
const node_type_guards_1 = require("./node-type-guards");
|
|
17
|
+
Object.defineProperty(exports, "isElementNode", { enumerable: true, get: function () { return node_type_guards_1.isElementNode; } });
|
|
18
|
+
Object.defineProperty(exports, "isTextNode", { enumerable: true, get: function () { return node_type_guards_1.isTextNode; } });
|
|
19
|
+
Object.defineProperty(exports, "isSVGElementNode", { enumerable: true, get: function () { return node_type_guards_1.isSVGElementNode; } });
|
|
20
|
+
Object.defineProperty(exports, "isHTMLElementNode", { enumerable: true, get: function () { return node_type_guards_1.isHTMLElementNode; } });
|
|
21
|
+
Object.defineProperty(exports, "isLIElement", { enumerable: true, get: function () { return node_type_guards_1.isLIElement; } });
|
|
22
|
+
Object.defineProperty(exports, "isOLElement", { enumerable: true, get: function () { return node_type_guards_1.isOLElement; } });
|
|
23
|
+
Object.defineProperty(exports, "isCustomElement", { enumerable: true, get: function () { return node_type_guards_1.isCustomElement; } });
|
|
16
24
|
const LIST_OWNERS = ['OL', 'UL', 'MENU'];
|
|
17
25
|
const parseNodeTree = (context, node, parent, root) => {
|
|
18
26
|
for (let childNode = node.firstChild, nextNode; childNode; childNode = nextNode) {
|
|
19
27
|
nextNode = childNode.nextSibling;
|
|
20
28
|
// Fixes #2238 #1624 - Fix the issue of TextNode content being overlooked in rendering due to being perceived as blank by trim().
|
|
21
|
-
if ((0,
|
|
29
|
+
if ((0, node_type_guards_1.isTextNode)(childNode) && childNode.data.length > 0) {
|
|
22
30
|
parent.textNodes.push(new text_container_1.TextContainer(context, childNode, parent.styles));
|
|
23
31
|
}
|
|
24
|
-
else if ((0,
|
|
32
|
+
else if ((0, node_type_guards_1.isElementNode)(childNode)) {
|
|
25
33
|
if ((0, exports.isSlotElement)(childNode) && childNode.assignedNodes) {
|
|
26
34
|
childNode.assignedNodes().forEach((childNode) => parseNodeTree(context, childNode, parent, root));
|
|
27
35
|
}
|
|
@@ -62,10 +70,10 @@ const createContainer = (context, element) => {
|
|
|
62
70
|
if ((0, exports.isSVGElement)(element)) {
|
|
63
71
|
return new svg_element_container_1.SVGElementContainer(context, element);
|
|
64
72
|
}
|
|
65
|
-
if ((0,
|
|
73
|
+
if ((0, node_type_guards_1.isLIElement)(element)) {
|
|
66
74
|
return new li_element_container_1.LIElementContainer(context, element);
|
|
67
75
|
}
|
|
68
|
-
if ((0,
|
|
76
|
+
if ((0, node_type_guards_1.isOLElement)(element)) {
|
|
69
77
|
return new ol_element_container_1.OLElementContainer(context, element);
|
|
70
78
|
}
|
|
71
79
|
if ((0, exports.isInputElement)(element)) {
|
|
@@ -78,7 +86,7 @@ const createContainer = (context, element) => {
|
|
|
78
86
|
return new textarea_element_container_1.TextareaElementContainer(context, element);
|
|
79
87
|
}
|
|
80
88
|
if ((0, exports.isIFrameElement)(element)) {
|
|
81
|
-
return new iframe_element_container_1.IFrameElementContainer(context, element);
|
|
89
|
+
return new iframe_element_container_1.IFrameElementContainer(context, element, exports.parseTree);
|
|
82
90
|
}
|
|
83
91
|
return new element_container_1.ElementContainer(context, element);
|
|
84
92
|
};
|
|
@@ -108,18 +116,7 @@ const createsStackingContext = (styles) => {
|
|
|
108
116
|
(0, bitwise_1.contains)(styles.display, 536870912 /* DISPLAY.INLINE_GRID */) ||
|
|
109
117
|
(0, bitwise_1.contains)(styles.display, 134217728 /* DISPLAY.INLINE_TABLE */));
|
|
110
118
|
};
|
|
111
|
-
|
|
112
|
-
exports.isTextNode = isTextNode;
|
|
113
|
-
const isElementNode = (node) => node.nodeType === Node.ELEMENT_NODE;
|
|
114
|
-
exports.isElementNode = isElementNode;
|
|
115
|
-
const isHTMLElementNode = (node) => (0, exports.isElementNode)(node) && typeof node.style !== 'undefined' && !(0, exports.isSVGElementNode)(node);
|
|
116
|
-
exports.isHTMLElementNode = isHTMLElementNode;
|
|
117
|
-
const isSVGElementNode = (element) => typeof element.className === 'object';
|
|
118
|
-
exports.isSVGElementNode = isSVGElementNode;
|
|
119
|
-
const isLIElement = (node) => node.tagName === 'LI';
|
|
120
|
-
exports.isLIElement = isLIElement;
|
|
121
|
-
const isOLElement = (node) => node.tagName === 'OL';
|
|
122
|
-
exports.isOLElement = isOLElement;
|
|
119
|
+
// Type guards moved to node-type-guards.ts and re-exported above
|
|
123
120
|
const isInputElement = (node) => node.tagName === 'INPUT';
|
|
124
121
|
exports.isInputElement = isInputElement;
|
|
125
122
|
const isHTMLElement = (node) => node.tagName === 'HTML';
|
|
@@ -147,6 +144,5 @@ exports.isSelectElement = isSelectElement;
|
|
|
147
144
|
const isSlotElement = (node) => node.tagName === 'SLOT';
|
|
148
145
|
exports.isSlotElement = isSlotElement;
|
|
149
146
|
// https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name
|
|
150
|
-
|
|
151
|
-
exports.isCustomElement = isCustomElement;
|
|
147
|
+
// isCustomElement moved to node-type-guards.ts and re-exported above
|
|
152
148
|
//# sourceMappingURL=node-parser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-parser.js","sourceRoot":"","sources":["../../../src/dom/node-parser.ts"],"names":[],"mappings":";;;AACA,2DAA8D;AAC9D,qDAAiD;AACjD,yFAAoF;AACpF,2FAAsF;AACtF,qFAAgF;AAChF,0EAAqE;AACrE,0EAAqE;AACrE,yFAAoF;AACpF,kFAA6E;AAC7E,sFAAiF;AACjF,2FAAsF;AAEtF,6CAA2C;
|
|
1
|
+
{"version":3,"file":"node-parser.js","sourceRoot":"","sources":["../../../src/dom/node-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DOM Node Type Guards
|
|
4
|
+
* Extracted to break circular dependencies
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.isCustomElement = exports.isOLElement = exports.isLIElement = exports.isHTMLElementNode = exports.isSVGElementNode = exports.isTextNode = exports.isElementNode = void 0;
|
|
8
|
+
/**
|
|
9
|
+
* Check if node is an Element
|
|
10
|
+
*/
|
|
11
|
+
const isElementNode = (node) => node.nodeType === Node.ELEMENT_NODE;
|
|
12
|
+
exports.isElementNode = isElementNode;
|
|
13
|
+
/**
|
|
14
|
+
* Check if node is a Text node
|
|
15
|
+
*/
|
|
16
|
+
const isTextNode = (node) => node.nodeType === Node.TEXT_NODE;
|
|
17
|
+
exports.isTextNode = isTextNode;
|
|
18
|
+
/**
|
|
19
|
+
* Check if element is an SVG element
|
|
20
|
+
*/
|
|
21
|
+
const isSVGElementNode = (element) => typeof element.className === 'object';
|
|
22
|
+
exports.isSVGElementNode = isSVGElementNode;
|
|
23
|
+
/**
|
|
24
|
+
* Check if node is an HTML element
|
|
25
|
+
*/
|
|
26
|
+
const isHTMLElementNode = (node) => (0, exports.isElementNode)(node) && typeof node.style !== 'undefined' && !(0, exports.isSVGElementNode)(node);
|
|
27
|
+
exports.isHTMLElementNode = isHTMLElementNode;
|
|
28
|
+
/**
|
|
29
|
+
* Check if node is an LI element
|
|
30
|
+
*/
|
|
31
|
+
const isLIElement = (node) => node.tagName === 'LI';
|
|
32
|
+
exports.isLIElement = isLIElement;
|
|
33
|
+
/**
|
|
34
|
+
* Check if node is an OL element
|
|
35
|
+
*/
|
|
36
|
+
const isOLElement = (node) => node.tagName === 'OL';
|
|
37
|
+
exports.isOLElement = isOLElement;
|
|
38
|
+
/**
|
|
39
|
+
* Check if element is a custom element
|
|
40
|
+
* Custom elements must have a hyphen and cannot be SVG elements
|
|
41
|
+
*/
|
|
42
|
+
const isCustomElement = (element) => !(0, exports.isSVGElementNode)(element) && element.tagName.indexOf('-') > 0;
|
|
43
|
+
exports.isCustomElement = isCustomElement;
|
|
44
|
+
//# sourceMappingURL=node-type-guards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-type-guards.js","sourceRoot":"","sources":["../../../src/dom/node-type-guards.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH;;GAEG;AACI,MAAM,aAAa,GAAG,CAAC,IAAU,EAAmB,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,CAAC;AAArF,QAAA,aAAa,iBAAwE;AAElG;;GAEG;AACI,MAAM,UAAU,GAAG,CAAC,IAAU,EAAgB,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC;AAA5E,QAAA,UAAU,cAAkE;AAEzF;;GAEG;AACI,MAAM,gBAAgB,GAAG,CAAC,OAAgB,EAAyB,EAAE,CACxE,OAAQ,OAAsB,CAAC,SAAS,KAAK,QAAQ,CAAC;AAD7C,QAAA,gBAAgB,oBAC6B;AAE1D;;GAEG;AACI,MAAM,iBAAiB,GAAG,CAAC,IAAU,EAAuB,EAAE,CACjE,IAAA,qBAAa,EAAC,IAAI,CAAC,IAAI,OAAQ,IAAoB,CAAC,KAAK,KAAK,WAAW,IAAI,CAAC,IAAA,wBAAgB,EAAC,IAAI,CAAC,CAAC;AAD5F,QAAA,iBAAiB,qBAC2E;AAEzG;;GAEG;AACI,MAAM,WAAW,GAAG,CAAC,IAAa,EAAyB,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;AAA9E,QAAA,WAAW,eAAmE;AAE3F;;GAEG;AACI,MAAM,WAAW,GAAG,CAAC,IAAa,EAA4B,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;AAAjF,QAAA,WAAW,eAAsE;AAE9F;;;GAGG;AACI,MAAM,eAAe,GAAG,CAAC,OAAgB,EAA0B,EAAE,CACxE,CAAC,IAAA,wBAAgB,EAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AADtD,QAAA,eAAe,mBACuC"}
|
|
@@ -2,21 +2,22 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.IFrameElementContainer = void 0;
|
|
4
4
|
const element_container_1 = require("../element-container");
|
|
5
|
-
const node_parser_1 = require("../node-parser");
|
|
6
5
|
const color_1 = require("../../css/types/color");
|
|
7
6
|
const color_utilities_1 = require("../../css/types/color-utilities");
|
|
8
7
|
class IFrameElementContainer extends element_container_1.ElementContainer {
|
|
9
|
-
constructor(context, iframe) {
|
|
8
|
+
constructor(context, iframe, parseTreeFn) {
|
|
10
9
|
super(context, iframe);
|
|
11
10
|
this.src = iframe.src;
|
|
12
11
|
this.width = parseInt(iframe.width, 10) || 0;
|
|
13
12
|
this.height = parseInt(iframe.height, 10) || 0;
|
|
14
13
|
this.backgroundColor = this.styles.backgroundColor;
|
|
14
|
+
this.parseTreeFn = parseTreeFn;
|
|
15
15
|
try {
|
|
16
16
|
if (iframe.contentWindow &&
|
|
17
17
|
iframe.contentWindow.document &&
|
|
18
|
-
iframe.contentWindow.document.documentElement
|
|
19
|
-
this.
|
|
18
|
+
iframe.contentWindow.document.documentElement &&
|
|
19
|
+
this.parseTreeFn) {
|
|
20
|
+
this.tree = this.parseTreeFn(context, iframe.contentWindow.document.documentElement);
|
|
20
21
|
// http://www.w3.org/TR/css3-background/#special-backgrounds
|
|
21
22
|
const documentBackgroundColor = iframe.contentWindow.document.documentElement
|
|
22
23
|
? (0, color_1.parseColor)(context, getComputedStyle(iframe.contentWindow.document.documentElement).backgroundColor)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iframe-element-container.js","sourceRoot":"","sources":["../../../../src/dom/replaced-elements/iframe-element-container.ts"],"names":[],"mappings":";;;AAAA,4DAAwD;AACxD,
|
|
1
|
+
{"version":3,"file":"iframe-element-container.js","sourceRoot":"","sources":["../../../../src/dom/replaced-elements/iframe-element-container.ts"],"names":[],"mappings":";;;AAAA,4DAAwD;AACxD,iDAAkE;AAClE,qEAAgE;AAMhE,MAAa,sBAAuB,SAAQ,oCAAgB;IAQxD,YAAY,OAAgB,EAAE,MAAyB,EAAE,WAA+B;QACpF,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;QACnD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC;YACD,IACI,MAAM,CAAC,aAAa;gBACpB,MAAM,CAAC,aAAa,CAAC,QAAQ;gBAC7B,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe;gBAC7C,IAAI,CAAC,WAAW,EAClB,CAAC;gBACC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;gBAErF,4DAA4D;gBAC5D,MAAM,uBAAuB,GAAG,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe;oBACzE,CAAC,CAAC,IAAA,kBAAU,EACN,OAAO,EACP,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,eAAyB,CAC5F;oBACH,CAAC,CAAC,cAAM,CAAC,WAAW,CAAC;gBACzB,MAAM,mBAAmB,GAAG,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI;oBAC1D,CAAC,CAAC,IAAA,kBAAU,EACN,OAAO,EACP,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,eAAyB,CACjF;oBACH,CAAC,CAAC,cAAM,CAAC,WAAW,CAAC;gBAEzB,IAAI,CAAC,eAAe,GAAG,IAAA,+BAAa,EAAC,uBAAuB,CAAC;oBACzD,CAAC,CAAC,IAAA,+BAAa,EAAC,mBAAmB,CAAC;wBAChC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe;wBAC7B,CAAC,CAAC,mBAAmB;oBACzB,CAAC,CAAC,uBAAuB,CAAC;YAClC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;IAClB,CAAC;CACJ;AA9CD,wDA8CC"}
|
package/dist/lib/index.js
CHANGED
|
@@ -1,32 +1,101 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.setCspNonce = exports.html2canvas = void 0;
|
|
3
|
+
exports.IMAGE_RENDERING = exports.PerformanceMonitor = exports.createDefaultValidator = exports.Validator = exports.Html2CanvasConfig = exports.setCspNonce = exports.html2canvas = void 0;
|
|
4
4
|
const bounds_1 = require("./css/layout/bounds");
|
|
5
5
|
const color_1 = require("./css/types/color");
|
|
6
6
|
const color_utilities_1 = require("./css/types/color-utilities");
|
|
7
7
|
const document_cloner_1 = require("./dom/document-cloner");
|
|
8
8
|
const node_parser_1 = require("./dom/node-parser");
|
|
9
|
-
const cache_storage_1 = require("./core/cache-storage");
|
|
10
9
|
const canvas_renderer_1 = require("./render/canvas/canvas-renderer");
|
|
11
10
|
const foreignobject_renderer_1 = require("./render/canvas/foreignobject-renderer");
|
|
12
11
|
const context_1 = require("./core/context");
|
|
13
|
-
|
|
12
|
+
const config_1 = require("./config");
|
|
13
|
+
Object.defineProperty(exports, "Html2CanvasConfig", { enumerable: true, get: function () { return config_1.Html2CanvasConfig; } });
|
|
14
|
+
const validator_1 = require("./core/validator");
|
|
15
|
+
Object.defineProperty(exports, "createDefaultValidator", { enumerable: true, get: function () { return validator_1.createDefaultValidator; } });
|
|
16
|
+
Object.defineProperty(exports, "Validator", { enumerable: true, get: function () { return validator_1.Validator; } });
|
|
17
|
+
const performance_monitor_1 = require("./core/performance-monitor");
|
|
18
|
+
Object.defineProperty(exports, "PerformanceMonitor", { enumerable: true, get: function () { return performance_monitor_1.PerformanceMonitor; } });
|
|
19
|
+
/**
|
|
20
|
+
* Main html2canvas function with improved configuration management
|
|
21
|
+
*
|
|
22
|
+
* @param element - Element to render
|
|
23
|
+
* @param options - Rendering options
|
|
24
|
+
* @param config - Optional configuration (for advanced use cases)
|
|
25
|
+
* @returns Promise resolving to rendered canvas
|
|
26
|
+
*/
|
|
27
|
+
const html2canvas = (element, options = {}, config) => {
|
|
28
|
+
// Create configuration from element if not provided
|
|
29
|
+
const finalConfig = config ||
|
|
30
|
+
config_1.Html2CanvasConfig.fromElement(element, {
|
|
31
|
+
cspNonce: options.cspNonce,
|
|
32
|
+
cache: options.cache
|
|
33
|
+
});
|
|
34
|
+
return renderElement(element, options, finalConfig);
|
|
35
|
+
};
|
|
36
|
+
exports.html2canvas = html2canvas;
|
|
37
|
+
/**
|
|
38
|
+
* Set CSP nonce for inline styles
|
|
39
|
+
* @deprecated Use options.cspNonce instead
|
|
40
|
+
*/
|
|
14
41
|
const setCspNonce = (nonce) => {
|
|
15
|
-
|
|
42
|
+
console.warn('[html2canvas-pro] setCspNonce is deprecated. ' +
|
|
43
|
+
'Pass cspNonce in options instead: html2canvas(element, { cspNonce: "..." })');
|
|
44
|
+
// For backward compatibility, set default config
|
|
45
|
+
if (typeof window !== 'undefined') {
|
|
46
|
+
(0, config_1.setDefaultConfig)(new config_1.Html2CanvasConfig({ window, cspNonce: nonce }));
|
|
47
|
+
}
|
|
16
48
|
};
|
|
17
49
|
exports.setCspNonce = setCspNonce;
|
|
18
|
-
const html2canvas = (element, options = {}) => {
|
|
19
|
-
return renderElement(element, options);
|
|
20
|
-
};
|
|
21
|
-
exports.html2canvas = html2canvas;
|
|
22
50
|
html2canvas.setCspNonce = setCspNonce;
|
|
23
51
|
exports.default = html2canvas;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
52
|
+
var image_rendering_1 = require("./css/property-descriptors/image-rendering");
|
|
53
|
+
Object.defineProperty(exports, "IMAGE_RENDERING", { enumerable: true, get: function () { return image_rendering_1.IMAGE_RENDERING; } });
|
|
54
|
+
/**
|
|
55
|
+
* Coerce number-like option values for backward compatibility (e.g. string "2" from form/query).
|
|
56
|
+
* Mutates opts in place; callers should avoid reusing the same options object if they rely on original types.
|
|
57
|
+
*/
|
|
58
|
+
const coerceNumberOptions = (opts) => {
|
|
59
|
+
const numKeys = [
|
|
60
|
+
'scale',
|
|
61
|
+
'width',
|
|
62
|
+
'height',
|
|
63
|
+
'imageTimeout',
|
|
64
|
+
'x',
|
|
65
|
+
'y',
|
|
66
|
+
'windowWidth',
|
|
67
|
+
'windowHeight',
|
|
68
|
+
'scrollX',
|
|
69
|
+
'scrollY'
|
|
70
|
+
];
|
|
71
|
+
numKeys.forEach((key) => {
|
|
72
|
+
const v = opts[key];
|
|
73
|
+
if (v !== undefined && v !== null && typeof v !== 'number') {
|
|
74
|
+
const n = Number(v);
|
|
75
|
+
if (!Number.isNaN(n)) {
|
|
76
|
+
opts[key] = n;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
const renderElement = async (element, opts, config) => {
|
|
82
|
+
coerceNumberOptions(opts);
|
|
83
|
+
// Input validation (unless explicitly skipped)
|
|
84
|
+
if (!opts.skipValidation) {
|
|
85
|
+
const validator = opts.validator || (0, validator_1.createDefaultValidator)();
|
|
86
|
+
// Validate element
|
|
87
|
+
const elementValidation = validator.validateElement(element);
|
|
88
|
+
if (!elementValidation.valid) {
|
|
89
|
+
throw new Error(elementValidation.error);
|
|
90
|
+
}
|
|
91
|
+
// Validate options
|
|
92
|
+
const optionsValidation = validator.validateOptions(opts);
|
|
93
|
+
if (!optionsValidation.valid) {
|
|
94
|
+
throw new Error(`Invalid options: ${optionsValidation.error}`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
28
97
|
if (!element || typeof element !== 'object') {
|
|
29
|
-
|
|
98
|
+
throw new Error('Invalid element provided as first argument');
|
|
30
99
|
}
|
|
31
100
|
const ownerDocument = element.ownerDocument;
|
|
32
101
|
if (!ownerDocument) {
|
|
@@ -45,17 +114,29 @@ const renderElement = async (element, opts) => {
|
|
|
45
114
|
};
|
|
46
115
|
const contextOptions = {
|
|
47
116
|
logging: opts.logging ?? true,
|
|
48
|
-
cache: opts.cache,
|
|
117
|
+
cache: opts.cache ?? config.cache,
|
|
49
118
|
...resourceOptions
|
|
50
119
|
};
|
|
120
|
+
// Fallbacks for minimal window (e.g. element-like mocks) so we don't get NaN
|
|
121
|
+
const DEFAULT_WINDOW_WIDTH = 800;
|
|
122
|
+
const DEFAULT_WINDOW_HEIGHT = 600;
|
|
123
|
+
const DEFAULT_SCROLL = 0;
|
|
124
|
+
const win = defaultView;
|
|
51
125
|
const windowOptions = {
|
|
52
|
-
windowWidth: opts.windowWidth ??
|
|
53
|
-
windowHeight: opts.windowHeight ??
|
|
54
|
-
scrollX: opts.scrollX ??
|
|
55
|
-
scrollY: opts.scrollY ??
|
|
126
|
+
windowWidth: opts.windowWidth ?? win.innerWidth ?? DEFAULT_WINDOW_WIDTH,
|
|
127
|
+
windowHeight: opts.windowHeight ?? win.innerHeight ?? DEFAULT_WINDOW_HEIGHT,
|
|
128
|
+
scrollX: opts.scrollX ?? win.pageXOffset ?? DEFAULT_SCROLL,
|
|
129
|
+
scrollY: opts.scrollY ?? win.pageYOffset ?? DEFAULT_SCROLL
|
|
56
130
|
};
|
|
57
131
|
const windowBounds = new bounds_1.Bounds(windowOptions.scrollX, windowOptions.scrollY, windowOptions.windowWidth, windowOptions.windowHeight);
|
|
58
|
-
const context = new context_1.Context(contextOptions, windowBounds);
|
|
132
|
+
const context = new context_1.Context(contextOptions, windowBounds, config);
|
|
133
|
+
// Initialize performance monitoring if enabled
|
|
134
|
+
const performanceMonitoring = opts.enablePerformanceMonitoring ?? opts.logging ?? false;
|
|
135
|
+
const perfMonitor = new performance_monitor_1.PerformanceMonitor(context, performanceMonitoring);
|
|
136
|
+
perfMonitor.start('total', {
|
|
137
|
+
width: windowOptions.windowWidth,
|
|
138
|
+
height: windowOptions.windowHeight
|
|
139
|
+
});
|
|
59
140
|
const foreignObjectRendering = opts.foreignObjectRendering ?? false;
|
|
60
141
|
const cloneOptions = {
|
|
61
142
|
allowTaint: opts.allowTaint ?? false,
|
|
@@ -64,15 +145,17 @@ const renderElement = async (element, opts) => {
|
|
|
64
145
|
iframeContainer: opts.iframeContainer,
|
|
65
146
|
inlineImages: foreignObjectRendering,
|
|
66
147
|
copyStyles: foreignObjectRendering,
|
|
67
|
-
cspNonce
|
|
148
|
+
cspNonce: opts.cspNonce ?? config.cspNonce
|
|
68
149
|
};
|
|
69
150
|
context.logger.debug(`Starting document clone with size ${windowBounds.width}x${windowBounds.height} scrolled to ${-windowBounds.left},${-windowBounds.top}`);
|
|
151
|
+
perfMonitor.start('clone');
|
|
70
152
|
const documentCloner = new document_cloner_1.DocumentCloner(context, element, cloneOptions);
|
|
71
153
|
const clonedElement = documentCloner.clonedReferenceElement;
|
|
72
154
|
if (!clonedElement) {
|
|
73
|
-
|
|
155
|
+
throw new Error('Unable to find element in cloned iframe');
|
|
74
156
|
}
|
|
75
157
|
const container = await documentCloner.toIFrame(ownerDocument, windowBounds);
|
|
158
|
+
perfMonitor.end('clone');
|
|
76
159
|
const { width, height, left, top } = (0, node_parser_1.isBodyElement)(clonedElement) || (0, node_parser_1.isHTMLElement)(clonedElement)
|
|
77
160
|
? (0, bounds_1.parseDocumentSize)(clonedElement.ownerDocument)
|
|
78
161
|
: (0, bounds_1.parseBounds)(context, clonedElement);
|
|
@@ -84,32 +167,56 @@ const renderElement = async (element, opts) => {
|
|
|
84
167
|
x: (opts.x ?? 0) + left,
|
|
85
168
|
y: (opts.y ?? 0) + top,
|
|
86
169
|
width: opts.width ?? Math.ceil(width),
|
|
87
|
-
height: opts.height ?? Math.ceil(height)
|
|
170
|
+
height: opts.height ?? Math.ceil(height),
|
|
171
|
+
imageSmoothing: opts.imageSmoothing,
|
|
172
|
+
imageSmoothingQuality: opts.imageSmoothingQuality
|
|
88
173
|
};
|
|
89
174
|
let canvas;
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
175
|
+
let root;
|
|
176
|
+
try {
|
|
177
|
+
if (foreignObjectRendering) {
|
|
178
|
+
context.logger.debug(`Document cloned, using foreign object rendering`);
|
|
179
|
+
perfMonitor.start('render-foreignobject');
|
|
180
|
+
const renderer = new foreignobject_renderer_1.ForeignObjectRenderer(context, renderOptions);
|
|
181
|
+
canvas = await renderer.render(clonedElement);
|
|
182
|
+
perfMonitor.end('render-foreignobject');
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
context.logger.debug(`Document cloned, element located at ${left},${top} with size ${width}x${height} using computed rendering`);
|
|
186
|
+
context.logger.debug(`Starting DOM parsing`);
|
|
187
|
+
perfMonitor.start('parse');
|
|
188
|
+
root = (0, node_parser_1.parseTree)(context, clonedElement);
|
|
189
|
+
perfMonitor.end('parse');
|
|
190
|
+
if (backgroundColor === root.styles.backgroundColor) {
|
|
191
|
+
root.styles.backgroundColor = color_1.COLORS.TRANSPARENT;
|
|
192
|
+
}
|
|
193
|
+
context.logger.debug(`Starting renderer for element at ${renderOptions.x},${renderOptions.y} with size ${renderOptions.width}x${renderOptions.height}`);
|
|
194
|
+
perfMonitor.start('render');
|
|
195
|
+
const renderer = new canvas_renderer_1.CanvasRenderer(context, renderOptions);
|
|
196
|
+
canvas = await renderer.render(root);
|
|
197
|
+
perfMonitor.end('render');
|
|
198
|
+
}
|
|
199
|
+
perfMonitor.start('cleanup');
|
|
200
|
+
if (opts.removeContainer ?? true) {
|
|
201
|
+
if (!document_cloner_1.DocumentCloner.destroy(container)) {
|
|
202
|
+
context.logger.error(`Cannot detach cloned iframe as it is not in the DOM anymore`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
perfMonitor.end('cleanup');
|
|
206
|
+
perfMonitor.end('total');
|
|
207
|
+
context.logger.debug(`Finished rendering`);
|
|
208
|
+
// Log performance summary if monitoring is enabled
|
|
209
|
+
if (performanceMonitoring) {
|
|
210
|
+
perfMonitor.logSummary();
|
|
101
211
|
}
|
|
102
|
-
|
|
103
|
-
const renderer = new canvas_renderer_1.CanvasRenderer(context, renderOptions);
|
|
104
|
-
canvas = await renderer.render(root);
|
|
212
|
+
return canvas;
|
|
105
213
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
214
|
+
finally {
|
|
215
|
+
// Restore DOM modifications (animations, transforms) in cloned document
|
|
216
|
+
if (root) {
|
|
217
|
+
root.restoreTree();
|
|
109
218
|
}
|
|
110
219
|
}
|
|
111
|
-
context.logger.debug(`Finished rendering`);
|
|
112
|
-
return canvas;
|
|
113
220
|
};
|
|
114
221
|
const parseBackgroundColor = (context, element, backgroundColorOverride) => {
|
|
115
222
|
const ownerDocument = element.ownerDocument;
|
package/dist/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,gDAA6E;AAC7E,6CAAuD;AACvD,iEAA4D;AAC5D,2DAAyG;AACzG,mDAA4E;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const assert_1 = require("assert");
|
|
4
|
+
const background_renderer_1 = require("../background-renderer");
|
|
5
|
+
const context_1 = require("../../../core/context");
|
|
6
|
+
const bounds_1 = require("../../../css/layout/bounds");
|
|
7
|
+
const config_1 = require("../../../config");
|
|
8
|
+
describe('BackgroundRenderer', () => {
|
|
9
|
+
it('should be instantiated', () => {
|
|
10
|
+
const mockWindow = {
|
|
11
|
+
document: {
|
|
12
|
+
createElement: (_name) => {
|
|
13
|
+
let _href = '';
|
|
14
|
+
return {
|
|
15
|
+
set href(value) {
|
|
16
|
+
_href = value;
|
|
17
|
+
},
|
|
18
|
+
get href() {
|
|
19
|
+
return _href;
|
|
20
|
+
},
|
|
21
|
+
get protocol() {
|
|
22
|
+
return 'http:';
|
|
23
|
+
},
|
|
24
|
+
get hostname() {
|
|
25
|
+
return 'localhost';
|
|
26
|
+
},
|
|
27
|
+
get port() {
|
|
28
|
+
return '';
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
location: { href: 'http://localhost/' }
|
|
34
|
+
};
|
|
35
|
+
const config = new config_1.Html2CanvasConfig({ window: mockWindow });
|
|
36
|
+
const context = new context_1.Context({
|
|
37
|
+
logging: false,
|
|
38
|
+
imageTimeout: 15000,
|
|
39
|
+
useCORS: false,
|
|
40
|
+
allowTaint: false
|
|
41
|
+
}, new bounds_1.Bounds(0, 0, 800, 600), config);
|
|
42
|
+
const canvas = {
|
|
43
|
+
width: 800,
|
|
44
|
+
height: 600
|
|
45
|
+
};
|
|
46
|
+
const ctx = {
|
|
47
|
+
fillStyle: '',
|
|
48
|
+
save: () => { },
|
|
49
|
+
restore: () => { }
|
|
50
|
+
};
|
|
51
|
+
const deps = {
|
|
52
|
+
ctx,
|
|
53
|
+
context,
|
|
54
|
+
canvas,
|
|
55
|
+
options: {
|
|
56
|
+
width: 800,
|
|
57
|
+
height: 600,
|
|
58
|
+
scale: 1
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
const renderer = new background_renderer_1.BackgroundRenderer(deps);
|
|
62
|
+
(0, assert_1.ok)(renderer);
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
//# sourceMappingURL=background-renderer.test.js.map
|