@carbon/charts 1.3.1 → 1.3.2
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/CHANGELOG.md +11 -0
- package/package.json +1 -2
- package/services/essentials/dom-to-image.d.ts +120 -0
- package/services/essentials/dom-to-image.js +720 -0
- package/services/essentials/dom-to-image.js.map +1 -0
- package/services/essentials/dom-utils.js +1 -1
- package/services/essentials/dom-utils.js.map +1 -1
- package/tsconfig.tsbuildinfo +15 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [1.3.2](https://github.com/carbon-design-system/carbon-charts/compare/v1.3.1...v1.3.2) (2022-06-30)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **core:** remove dom-to-image dependency & add script to project ([#1403](https://github.com/carbon-design-system/carbon-charts/issues/1403)) ([8dcd34b](https://github.com/carbon-design-system/carbon-charts/commit/8dcd34b00e804f666fa4a756f40d19233d516196)), closes [#1395](https://github.com/carbon-design-system/carbon-charts/issues/1395)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
## [1.3.1](https://github.com/carbon-design-system/carbon-charts/compare/v1.3.0...v1.3.1) (2022-06-28)
|
|
7
18
|
|
|
8
19
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@carbon/charts",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.2",
|
|
4
4
|
"description": "Carbon charting components",
|
|
5
5
|
"main": "./bundle.js",
|
|
6
6
|
"module": "./index.js",
|
|
@@ -55,7 +55,6 @@
|
|
|
55
55
|
"d3-cloud": "1.2.5",
|
|
56
56
|
"d3-sankey": "0.12.3",
|
|
57
57
|
"date-fns": "2.8.1",
|
|
58
|
-
"dom-to-image": "2.6.0",
|
|
59
58
|
"lodash-es": "4.17.21",
|
|
60
59
|
"resize-observer-polyfill": "1.5.0"
|
|
61
60
|
},
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {Node} node - The DOM Node object to render
|
|
3
|
+
* @param {Object} options - Rendering options
|
|
4
|
+
* @param {Function} options.filter - Should return true if passed node should be included in the output
|
|
5
|
+
* (excluding node means excluding it's children as well). Not called on the root node.
|
|
6
|
+
* @param {String} options.bgcolor - color for the background, any valid CSS color value.
|
|
7
|
+
* @param {Number} options.width - width to be applied to node before rendering.
|
|
8
|
+
* @param {Number} options.height - height to be applied to node before rendering.
|
|
9
|
+
* @param {Object} options.style - an object whose properties to be copied to node's style before rendering.
|
|
10
|
+
* @param {Number} options.quality - a Number between 0 and 1 indicating image quality (applicable to JPEG only),
|
|
11
|
+
defaults to 1.0.
|
|
12
|
+
* @param {String} options.imagePlaceholder - dataURL to use as a placeholder for failed images, default behaviour is to fail fast on images we can't fetch
|
|
13
|
+
* @param {Boolean} options.cacheBust - set to true to cache bust by appending the time to the request url
|
|
14
|
+
* @return {Promise} - A promise that is fulfilled with a SVG image data URL
|
|
15
|
+
* */
|
|
16
|
+
export function toSvg(node: Node, options: {
|
|
17
|
+
filter: Function;
|
|
18
|
+
bgcolor: string;
|
|
19
|
+
width: number;
|
|
20
|
+
height: number;
|
|
21
|
+
style: any;
|
|
22
|
+
quality: number;
|
|
23
|
+
imagePlaceholder: string;
|
|
24
|
+
cacheBust: boolean;
|
|
25
|
+
}): Promise<any>;
|
|
26
|
+
/**
|
|
27
|
+
* @param {Node} node - The DOM Node object to render
|
|
28
|
+
* @param {Object} options - Rendering options, @see {@link toSvg}
|
|
29
|
+
* @return {Promise} - A promise that is fulfilled with a PNG image data URL
|
|
30
|
+
* */
|
|
31
|
+
export function toPng(node: Node, options: any): Promise<any>;
|
|
32
|
+
/**
|
|
33
|
+
* @param {Node} node - The DOM Node object to render
|
|
34
|
+
* @param {Object} options - Rendering options, @see {@link toSvg}
|
|
35
|
+
* @return {Promise} - A promise that is fulfilled with a JPEG image data URL
|
|
36
|
+
* */
|
|
37
|
+
export function toJpeg(node: Node, options: any): Promise<any>;
|
|
38
|
+
/**
|
|
39
|
+
* @param {Node} node - The DOM Node object to render
|
|
40
|
+
* @param {Object} options - Rendering options, @see {@link toSvg}
|
|
41
|
+
* @return {Promise} - A promise that is fulfilled with a PNG image blob
|
|
42
|
+
* */
|
|
43
|
+
export function toBlob(node: Node, options: any): Promise<any>;
|
|
44
|
+
/**
|
|
45
|
+
* @param {Node} node - The DOM Node object to render
|
|
46
|
+
* @param {Object} options - Rendering options, @see {@link toSvg}
|
|
47
|
+
* @return {Promise} - A promise that is fulfilled with a Uint8Array containing RGBA pixel data.
|
|
48
|
+
* */
|
|
49
|
+
export function toPixelData(node: Node, options: any): Promise<any>;
|
|
50
|
+
declare namespace fontFaces {
|
|
51
|
+
export { resolveAll };
|
|
52
|
+
export namespace impl_1 {
|
|
53
|
+
export { readAll };
|
|
54
|
+
}
|
|
55
|
+
export { impl_1 as impl };
|
|
56
|
+
}
|
|
57
|
+
declare namespace images {
|
|
58
|
+
export { inlineAll };
|
|
59
|
+
export namespace impl_2 {
|
|
60
|
+
export { newImage };
|
|
61
|
+
}
|
|
62
|
+
export { impl_2 as impl };
|
|
63
|
+
}
|
|
64
|
+
declare namespace util {
|
|
65
|
+
export { escape };
|
|
66
|
+
export { parseExtension };
|
|
67
|
+
export { mimeType };
|
|
68
|
+
export { dataAsUrl };
|
|
69
|
+
export { isDataUrl };
|
|
70
|
+
export { canvasToBlob };
|
|
71
|
+
export { resolveUrl };
|
|
72
|
+
export { getAndEncode };
|
|
73
|
+
export function uid(): string;
|
|
74
|
+
export { delay };
|
|
75
|
+
export { asArray };
|
|
76
|
+
export { escapeXhtml };
|
|
77
|
+
export { makeImage };
|
|
78
|
+
export { width };
|
|
79
|
+
export { height };
|
|
80
|
+
}
|
|
81
|
+
declare namespace inliner {
|
|
82
|
+
export { inlineAll };
|
|
83
|
+
export { shouldProcess };
|
|
84
|
+
export namespace impl_3 {
|
|
85
|
+
export { readUrls };
|
|
86
|
+
export { inline };
|
|
87
|
+
}
|
|
88
|
+
export { impl_3 as impl };
|
|
89
|
+
}
|
|
90
|
+
declare function resolveAll(): any;
|
|
91
|
+
declare function readAll(): Promise<any>;
|
|
92
|
+
declare function inlineAll(node: any): any;
|
|
93
|
+
declare function newImage(element: any): {
|
|
94
|
+
inline: (get: any) => Promise<any>;
|
|
95
|
+
};
|
|
96
|
+
declare function parseExtension(url: any): string;
|
|
97
|
+
declare function mimeType(url: any): any;
|
|
98
|
+
declare function dataAsUrl(content: any, type: any): string;
|
|
99
|
+
declare function isDataUrl(url: any): boolean;
|
|
100
|
+
declare function canvasToBlob(canvas: any): Promise<any>;
|
|
101
|
+
declare function resolveUrl(url: any, baseUrl: any): string;
|
|
102
|
+
declare function getAndEncode(url: any): Promise<any>;
|
|
103
|
+
declare function delay(ms: any): (arg: any) => Promise<any>;
|
|
104
|
+
declare function asArray(arrayLike: any): any[];
|
|
105
|
+
declare function escapeXhtml(string: any): any;
|
|
106
|
+
declare function makeImage(uri: any): Promise<any>;
|
|
107
|
+
declare function width(node: any): any;
|
|
108
|
+
declare function height(node: any): any;
|
|
109
|
+
declare function inlineAll_1(string: any, baseUrl: any, get: any): Promise<any>;
|
|
110
|
+
declare function shouldProcess(string: any): boolean;
|
|
111
|
+
declare function readUrls(string: any): string[];
|
|
112
|
+
declare function inline(string: any, url: any, baseUrl: any, get: any): Promise<any>;
|
|
113
|
+
export declare namespace impl {
|
|
114
|
+
export { fontFaces };
|
|
115
|
+
export { images };
|
|
116
|
+
export { util };
|
|
117
|
+
export { inliner };
|
|
118
|
+
export const options: {};
|
|
119
|
+
}
|
|
120
|
+
export {};
|
|
@@ -0,0 +1,720 @@
|
|
|
1
|
+
/**
|
|
2
|
+
The MIT License (MIT)
|
|
3
|
+
|
|
4
|
+
Copyright 2015 Anatolii Saienko
|
|
5
|
+
https://github.com/tsayen
|
|
6
|
+
|
|
7
|
+
Copyright 2012 Paul Bakaus
|
|
8
|
+
http://paulbakaus.com/
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
11
|
+
a copy of this software and associated documentation files (the
|
|
12
|
+
"Software"), to deal in the Software without restriction, including
|
|
13
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
14
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
15
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
16
|
+
the following conditions:
|
|
17
|
+
|
|
18
|
+
The above copyright notice and this permission notice shall be
|
|
19
|
+
included in all copies or substantial portions of the Software.
|
|
20
|
+
|
|
21
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
22
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
23
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
24
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
25
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
26
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
27
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
28
|
+
*/
|
|
29
|
+
(function (global) {
|
|
30
|
+
'use strict';
|
|
31
|
+
var util = newUtil();
|
|
32
|
+
var inliner = newInliner();
|
|
33
|
+
var fontFaces = newFontFaces();
|
|
34
|
+
var images = newImages();
|
|
35
|
+
// Default impl options
|
|
36
|
+
var defaultOptions = {
|
|
37
|
+
// Default is to fail on error, no placeholder
|
|
38
|
+
imagePlaceholder: undefined,
|
|
39
|
+
// Default cache bust is false, it will use the cache
|
|
40
|
+
cacheBust: false,
|
|
41
|
+
};
|
|
42
|
+
var domtoimage = {
|
|
43
|
+
toSvg: toSvg,
|
|
44
|
+
toPng: toPng,
|
|
45
|
+
toJpeg: toJpeg,
|
|
46
|
+
toBlob: toBlob,
|
|
47
|
+
toPixelData: toPixelData,
|
|
48
|
+
impl: {
|
|
49
|
+
fontFaces: fontFaces,
|
|
50
|
+
images: images,
|
|
51
|
+
util: util,
|
|
52
|
+
inliner: inliner,
|
|
53
|
+
options: {},
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
if (typeof module !== 'undefined')
|
|
57
|
+
module.exports = domtoimage;
|
|
58
|
+
else
|
|
59
|
+
global.domtoimage = domtoimage;
|
|
60
|
+
/**
|
|
61
|
+
* @param {Node} node - The DOM Node object to render
|
|
62
|
+
* @param {Object} options - Rendering options
|
|
63
|
+
* @param {Function} options.filter - Should return true if passed node should be included in the output
|
|
64
|
+
* (excluding node means excluding it's children as well). Not called on the root node.
|
|
65
|
+
* @param {String} options.bgcolor - color for the background, any valid CSS color value.
|
|
66
|
+
* @param {Number} options.width - width to be applied to node before rendering.
|
|
67
|
+
* @param {Number} options.height - height to be applied to node before rendering.
|
|
68
|
+
* @param {Object} options.style - an object whose properties to be copied to node's style before rendering.
|
|
69
|
+
* @param {Number} options.quality - a Number between 0 and 1 indicating image quality (applicable to JPEG only),
|
|
70
|
+
defaults to 1.0.
|
|
71
|
+
* @param {String} options.imagePlaceholder - dataURL to use as a placeholder for failed images, default behaviour is to fail fast on images we can't fetch
|
|
72
|
+
* @param {Boolean} options.cacheBust - set to true to cache bust by appending the time to the request url
|
|
73
|
+
* @return {Promise} - A promise that is fulfilled with a SVG image data URL
|
|
74
|
+
* */
|
|
75
|
+
function toSvg(node, options) {
|
|
76
|
+
options = options || {};
|
|
77
|
+
copyOptions(options);
|
|
78
|
+
return Promise.resolve(node)
|
|
79
|
+
.then(function (node) {
|
|
80
|
+
return cloneNode(node, options.filter, true);
|
|
81
|
+
})
|
|
82
|
+
.then(embedFonts)
|
|
83
|
+
.then(inlineImages)
|
|
84
|
+
.then(applyOptions)
|
|
85
|
+
.then(function (clone) {
|
|
86
|
+
return makeSvgDataUri(clone, options.width || util.width(node), options.height || util.height(node));
|
|
87
|
+
});
|
|
88
|
+
function applyOptions(clone) {
|
|
89
|
+
if (options.bgcolor)
|
|
90
|
+
clone.style.backgroundColor = options.bgcolor;
|
|
91
|
+
if (options.width)
|
|
92
|
+
clone.style.width = options.width + 'px';
|
|
93
|
+
if (options.height)
|
|
94
|
+
clone.style.height = options.height + 'px';
|
|
95
|
+
if (options.style)
|
|
96
|
+
Object.keys(options.style).forEach(function (property) {
|
|
97
|
+
clone.style[property] = options.style[property];
|
|
98
|
+
});
|
|
99
|
+
return clone;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* @param {Node} node - The DOM Node object to render
|
|
104
|
+
* @param {Object} options - Rendering options, @see {@link toSvg}
|
|
105
|
+
* @return {Promise} - A promise that is fulfilled with a Uint8Array containing RGBA pixel data.
|
|
106
|
+
* */
|
|
107
|
+
function toPixelData(node, options) {
|
|
108
|
+
return draw(node, options || {}).then(function (canvas) {
|
|
109
|
+
return canvas
|
|
110
|
+
.getContext('2d')
|
|
111
|
+
.getImageData(0, 0, util.width(node), util.height(node)).data;
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* @param {Node} node - The DOM Node object to render
|
|
116
|
+
* @param {Object} options - Rendering options, @see {@link toSvg}
|
|
117
|
+
* @return {Promise} - A promise that is fulfilled with a PNG image data URL
|
|
118
|
+
* */
|
|
119
|
+
function toPng(node, options) {
|
|
120
|
+
return draw(node, options || {}).then(function (canvas) {
|
|
121
|
+
return canvas.toDataURL();
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* @param {Node} node - The DOM Node object to render
|
|
126
|
+
* @param {Object} options - Rendering options, @see {@link toSvg}
|
|
127
|
+
* @return {Promise} - A promise that is fulfilled with a JPEG image data URL
|
|
128
|
+
* */
|
|
129
|
+
function toJpeg(node, options) {
|
|
130
|
+
options = options || {};
|
|
131
|
+
return draw(node, options).then(function (canvas) {
|
|
132
|
+
return canvas.toDataURL('image/jpeg', options.quality || 1.0);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* @param {Node} node - The DOM Node object to render
|
|
137
|
+
* @param {Object} options - Rendering options, @see {@link toSvg}
|
|
138
|
+
* @return {Promise} - A promise that is fulfilled with a PNG image blob
|
|
139
|
+
* */
|
|
140
|
+
function toBlob(node, options) {
|
|
141
|
+
return draw(node, options || {}).then(util.canvasToBlob);
|
|
142
|
+
}
|
|
143
|
+
function copyOptions(options) {
|
|
144
|
+
// Copy options to impl options for use in impl
|
|
145
|
+
if (typeof options.imagePlaceholder === 'undefined') {
|
|
146
|
+
domtoimage.impl.options.imagePlaceholder =
|
|
147
|
+
defaultOptions.imagePlaceholder;
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
domtoimage.impl.options.imagePlaceholder = options.imagePlaceholder;
|
|
151
|
+
}
|
|
152
|
+
if (typeof options.cacheBust === 'undefined') {
|
|
153
|
+
domtoimage.impl.options.cacheBust = defaultOptions.cacheBust;
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
domtoimage.impl.options.cacheBust = options.cacheBust;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function draw(domNode, options) {
|
|
160
|
+
return toSvg(domNode, options)
|
|
161
|
+
.then(util.makeImage)
|
|
162
|
+
.then(util.delay(100))
|
|
163
|
+
.then(function (image) {
|
|
164
|
+
var canvas = newCanvas(domNode);
|
|
165
|
+
canvas.getContext('2d').drawImage(image, 0, 0);
|
|
166
|
+
return canvas;
|
|
167
|
+
});
|
|
168
|
+
function newCanvas(domNode) {
|
|
169
|
+
var canvas = document.createElement('canvas');
|
|
170
|
+
canvas.width = options.width || util.width(domNode);
|
|
171
|
+
canvas.height = options.height || util.height(domNode);
|
|
172
|
+
if (options.bgcolor) {
|
|
173
|
+
var ctx = canvas.getContext('2d');
|
|
174
|
+
ctx.fillStyle = options.bgcolor;
|
|
175
|
+
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
|
176
|
+
}
|
|
177
|
+
return canvas;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
function cloneNode(node, filter, root) {
|
|
181
|
+
if (!root && filter && !filter(node))
|
|
182
|
+
return Promise.resolve();
|
|
183
|
+
return Promise.resolve(node)
|
|
184
|
+
.then(makeNodeCopy)
|
|
185
|
+
.then(function (clone) {
|
|
186
|
+
return cloneChildren(node, clone, filter);
|
|
187
|
+
})
|
|
188
|
+
.then(function (clone) {
|
|
189
|
+
return processClone(node, clone);
|
|
190
|
+
});
|
|
191
|
+
function makeNodeCopy(node) {
|
|
192
|
+
if (node instanceof HTMLCanvasElement)
|
|
193
|
+
return util.makeImage(node.toDataURL());
|
|
194
|
+
return node.cloneNode(false);
|
|
195
|
+
}
|
|
196
|
+
function cloneChildren(original, clone, filter) {
|
|
197
|
+
var children = original.childNodes;
|
|
198
|
+
if (children.length === 0)
|
|
199
|
+
return Promise.resolve(clone);
|
|
200
|
+
return cloneChildrenInOrder(clone, util.asArray(children), filter).then(function () {
|
|
201
|
+
return clone;
|
|
202
|
+
});
|
|
203
|
+
function cloneChildrenInOrder(parent, children, filter) {
|
|
204
|
+
var done = Promise.resolve();
|
|
205
|
+
children.forEach(function (child) {
|
|
206
|
+
done = done
|
|
207
|
+
.then(function () {
|
|
208
|
+
return cloneNode(child, filter);
|
|
209
|
+
})
|
|
210
|
+
.then(function (childClone) {
|
|
211
|
+
if (childClone)
|
|
212
|
+
parent.appendChild(childClone);
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
return done;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
function processClone(original, clone) {
|
|
219
|
+
if (!(clone instanceof Element))
|
|
220
|
+
return clone;
|
|
221
|
+
return Promise.resolve()
|
|
222
|
+
.then(cloneStyle)
|
|
223
|
+
.then(clonePseudoElements)
|
|
224
|
+
.then(copyUserInput)
|
|
225
|
+
.then(fixSvg)
|
|
226
|
+
.then(function () {
|
|
227
|
+
return clone;
|
|
228
|
+
});
|
|
229
|
+
function cloneStyle() {
|
|
230
|
+
copyStyle(window.getComputedStyle(original), clone.style);
|
|
231
|
+
function copyStyle(source, target) {
|
|
232
|
+
if (source.cssText)
|
|
233
|
+
target.cssText = source.cssText;
|
|
234
|
+
else
|
|
235
|
+
copyProperties(source, target);
|
|
236
|
+
function copyProperties(source, target) {
|
|
237
|
+
util.asArray(source).forEach(function (name) {
|
|
238
|
+
target.setProperty(name, source.getPropertyValue(name), source.getPropertyPriority(name));
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
function clonePseudoElements() {
|
|
244
|
+
[':before', ':after'].forEach(function (element) {
|
|
245
|
+
clonePseudoElement(element);
|
|
246
|
+
});
|
|
247
|
+
function clonePseudoElement(element) {
|
|
248
|
+
var style = window.getComputedStyle(original, element);
|
|
249
|
+
var content = style.getPropertyValue('content');
|
|
250
|
+
if (content === '' || content === 'none')
|
|
251
|
+
return;
|
|
252
|
+
var className = util.uid();
|
|
253
|
+
clone.className = clone.className + ' ' + className;
|
|
254
|
+
var styleElement = document.createElement('style');
|
|
255
|
+
styleElement.appendChild(formatPseudoElementStyle(className, element, style));
|
|
256
|
+
clone.appendChild(styleElement);
|
|
257
|
+
function formatPseudoElementStyle(className, element, style) {
|
|
258
|
+
var selector = '.' + className + ':' + element;
|
|
259
|
+
var cssText = style.cssText
|
|
260
|
+
? formatCssText(style)
|
|
261
|
+
: formatCssProperties(style);
|
|
262
|
+
return document.createTextNode(selector + '{' + cssText + '}');
|
|
263
|
+
function formatCssText(style) {
|
|
264
|
+
var content = style.getPropertyValue('content');
|
|
265
|
+
return style.cssText + ' content: ' + content + ';';
|
|
266
|
+
}
|
|
267
|
+
function formatCssProperties(style) {
|
|
268
|
+
return (util
|
|
269
|
+
.asArray(style)
|
|
270
|
+
.map(formatProperty)
|
|
271
|
+
.join('; ') + ';');
|
|
272
|
+
function formatProperty(name) {
|
|
273
|
+
return (name +
|
|
274
|
+
': ' +
|
|
275
|
+
style.getPropertyValue(name) +
|
|
276
|
+
(style.getPropertyPriority(name)
|
|
277
|
+
? ' !important'
|
|
278
|
+
: ''));
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
function copyUserInput() {
|
|
285
|
+
if (original instanceof HTMLTextAreaElement)
|
|
286
|
+
clone.innerHTML = original.value;
|
|
287
|
+
if (original instanceof HTMLInputElement)
|
|
288
|
+
clone.setAttribute('value', original.value);
|
|
289
|
+
}
|
|
290
|
+
function fixSvg() {
|
|
291
|
+
if (!(clone instanceof SVGElement))
|
|
292
|
+
return;
|
|
293
|
+
clone.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
|
|
294
|
+
if (!(clone instanceof SVGRectElement))
|
|
295
|
+
return;
|
|
296
|
+
['width', 'height'].forEach(function (attribute) {
|
|
297
|
+
var value = clone.getAttribute(attribute);
|
|
298
|
+
if (!value)
|
|
299
|
+
return;
|
|
300
|
+
clone.style.setProperty(attribute, value);
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
function embedFonts(node) {
|
|
306
|
+
return fontFaces.resolveAll().then(function (cssText) {
|
|
307
|
+
var styleNode = document.createElement('style');
|
|
308
|
+
node.appendChild(styleNode);
|
|
309
|
+
styleNode.appendChild(document.createTextNode(cssText));
|
|
310
|
+
return node;
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
function inlineImages(node) {
|
|
314
|
+
return images.inlineAll(node).then(function () {
|
|
315
|
+
return node;
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
function makeSvgDataUri(node, width, height) {
|
|
319
|
+
return Promise.resolve(node)
|
|
320
|
+
.then(function (node) {
|
|
321
|
+
node.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml');
|
|
322
|
+
return new XMLSerializer().serializeToString(node);
|
|
323
|
+
})
|
|
324
|
+
.then(util.escapeXhtml)
|
|
325
|
+
.then(function (xhtml) {
|
|
326
|
+
return ('<foreignObject x="0" y="0" width="100%" height="100%">' +
|
|
327
|
+
xhtml +
|
|
328
|
+
'</foreignObject>');
|
|
329
|
+
})
|
|
330
|
+
.then(function (foreignObject) {
|
|
331
|
+
return ('<svg xmlns="http://www.w3.org/2000/svg" width="' +
|
|
332
|
+
width +
|
|
333
|
+
'" height="' +
|
|
334
|
+
height +
|
|
335
|
+
'">' +
|
|
336
|
+
foreignObject +
|
|
337
|
+
'</svg>');
|
|
338
|
+
})
|
|
339
|
+
.then(function (svg) {
|
|
340
|
+
return 'data:image/svg+xml;charset=utf-8,' + svg;
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
function newUtil() {
|
|
344
|
+
return {
|
|
345
|
+
escape: escape,
|
|
346
|
+
parseExtension: parseExtension,
|
|
347
|
+
mimeType: mimeType,
|
|
348
|
+
dataAsUrl: dataAsUrl,
|
|
349
|
+
isDataUrl: isDataUrl,
|
|
350
|
+
canvasToBlob: canvasToBlob,
|
|
351
|
+
resolveUrl: resolveUrl,
|
|
352
|
+
getAndEncode: getAndEncode,
|
|
353
|
+
uid: uid(),
|
|
354
|
+
delay: delay,
|
|
355
|
+
asArray: asArray,
|
|
356
|
+
escapeXhtml: escapeXhtml,
|
|
357
|
+
makeImage: makeImage,
|
|
358
|
+
width: width,
|
|
359
|
+
height: height,
|
|
360
|
+
};
|
|
361
|
+
function mimes() {
|
|
362
|
+
/*
|
|
363
|
+
* Only WOFF and EOT mime types for fonts are 'real'
|
|
364
|
+
* see http://www.iana.org/assignments/media-types/media-types.xhtml
|
|
365
|
+
*/
|
|
366
|
+
var WOFF = 'application/font-woff';
|
|
367
|
+
var JPEG = 'image/jpeg';
|
|
368
|
+
return {
|
|
369
|
+
woff: WOFF,
|
|
370
|
+
woff2: WOFF,
|
|
371
|
+
ttf: 'application/font-truetype',
|
|
372
|
+
eot: 'application/vnd.ms-fontobject',
|
|
373
|
+
png: 'image/png',
|
|
374
|
+
jpg: JPEG,
|
|
375
|
+
jpeg: JPEG,
|
|
376
|
+
gif: 'image/gif',
|
|
377
|
+
tiff: 'image/tiff',
|
|
378
|
+
svg: 'image/svg+xml',
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
function parseExtension(url) {
|
|
382
|
+
var match = /\.([^\.\/]*?)$/g.exec(url);
|
|
383
|
+
if (match)
|
|
384
|
+
return match[1];
|
|
385
|
+
else
|
|
386
|
+
return '';
|
|
387
|
+
}
|
|
388
|
+
function mimeType(url) {
|
|
389
|
+
var extension = parseExtension(url).toLowerCase();
|
|
390
|
+
return mimes()[extension] || '';
|
|
391
|
+
}
|
|
392
|
+
function isDataUrl(url) {
|
|
393
|
+
return url.search(/^(data:)/) !== -1;
|
|
394
|
+
}
|
|
395
|
+
function toBlob(canvas) {
|
|
396
|
+
return new Promise(function (resolve) {
|
|
397
|
+
var binaryString = window.atob(canvas.toDataURL().split(',')[1]);
|
|
398
|
+
var length = binaryString.length;
|
|
399
|
+
var binaryArray = new Uint8Array(length);
|
|
400
|
+
for (var i = 0; i < length; i++)
|
|
401
|
+
binaryArray[i] = binaryString.charCodeAt(i);
|
|
402
|
+
resolve(new Blob([binaryArray], {
|
|
403
|
+
type: 'image/png',
|
|
404
|
+
}));
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
function canvasToBlob(canvas) {
|
|
408
|
+
if (canvas.toBlob)
|
|
409
|
+
return new Promise(function (resolve) {
|
|
410
|
+
canvas.toBlob(resolve);
|
|
411
|
+
});
|
|
412
|
+
return toBlob(canvas);
|
|
413
|
+
}
|
|
414
|
+
function resolveUrl(url, baseUrl) {
|
|
415
|
+
var doc = document.implementation.createHTMLDocument();
|
|
416
|
+
var base = doc.createElement('base');
|
|
417
|
+
doc.head.appendChild(base);
|
|
418
|
+
var a = doc.createElement('a');
|
|
419
|
+
doc.body.appendChild(a);
|
|
420
|
+
base.href = baseUrl;
|
|
421
|
+
a.href = url;
|
|
422
|
+
return a.href;
|
|
423
|
+
}
|
|
424
|
+
function uid() {
|
|
425
|
+
var index = 0;
|
|
426
|
+
return function () {
|
|
427
|
+
return 'u' + fourRandomChars() + index++;
|
|
428
|
+
function fourRandomChars() {
|
|
429
|
+
/* see http://stackoverflow.com/a/6248722/2519373 */
|
|
430
|
+
return ('0000' +
|
|
431
|
+
((Math.random() * Math.pow(36, 4)) << 0).toString(36)).slice(-4);
|
|
432
|
+
}
|
|
433
|
+
};
|
|
434
|
+
}
|
|
435
|
+
function makeImage(uri) {
|
|
436
|
+
return new Promise(function (resolve, reject) {
|
|
437
|
+
var image = new Image();
|
|
438
|
+
image.onload = function () {
|
|
439
|
+
resolve(image);
|
|
440
|
+
};
|
|
441
|
+
image.onerror = reject;
|
|
442
|
+
image.src = uri;
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
function getAndEncode(url) {
|
|
446
|
+
var TIMEOUT = 30000;
|
|
447
|
+
if (domtoimage.impl.options.cacheBust) {
|
|
448
|
+
// Cache bypass so we dont have CORS issues with cached images
|
|
449
|
+
// Source: https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Bypassing_the_cache
|
|
450
|
+
url += (/\?/.test(url) ? '&' : '?') + new Date().getTime();
|
|
451
|
+
}
|
|
452
|
+
return new Promise(function (resolve) {
|
|
453
|
+
var request = new XMLHttpRequest();
|
|
454
|
+
request.onreadystatechange = done;
|
|
455
|
+
request.ontimeout = timeout;
|
|
456
|
+
request.responseType = 'blob';
|
|
457
|
+
request.timeout = TIMEOUT;
|
|
458
|
+
request.open('GET', url, true);
|
|
459
|
+
request.send();
|
|
460
|
+
var placeholder;
|
|
461
|
+
if (domtoimage.impl.options.imagePlaceholder) {
|
|
462
|
+
var split = domtoimage.impl.options.imagePlaceholder.split(/,/);
|
|
463
|
+
if (split && split[1]) {
|
|
464
|
+
placeholder = split[1];
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
function done() {
|
|
468
|
+
if (request.readyState !== 4)
|
|
469
|
+
return;
|
|
470
|
+
if (request.status !== 200) {
|
|
471
|
+
if (placeholder) {
|
|
472
|
+
resolve(placeholder);
|
|
473
|
+
}
|
|
474
|
+
else {
|
|
475
|
+
fail('cannot fetch resource: ' +
|
|
476
|
+
url +
|
|
477
|
+
', status: ' +
|
|
478
|
+
request.status);
|
|
479
|
+
}
|
|
480
|
+
return;
|
|
481
|
+
}
|
|
482
|
+
var encoder = new FileReader();
|
|
483
|
+
encoder.onloadend = function () {
|
|
484
|
+
var content = encoder.result.split(/,/)[1];
|
|
485
|
+
resolve(content);
|
|
486
|
+
};
|
|
487
|
+
encoder.readAsDataURL(request.response);
|
|
488
|
+
}
|
|
489
|
+
function timeout() {
|
|
490
|
+
if (placeholder) {
|
|
491
|
+
resolve(placeholder);
|
|
492
|
+
}
|
|
493
|
+
else {
|
|
494
|
+
fail('timeout of ' +
|
|
495
|
+
TIMEOUT +
|
|
496
|
+
'ms occured while fetching resource: ' +
|
|
497
|
+
url);
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
function fail(message) {
|
|
501
|
+
console.error(message);
|
|
502
|
+
resolve('');
|
|
503
|
+
}
|
|
504
|
+
});
|
|
505
|
+
}
|
|
506
|
+
function dataAsUrl(content, type) {
|
|
507
|
+
return 'data:' + type + ';base64,' + content;
|
|
508
|
+
}
|
|
509
|
+
function escape(string) {
|
|
510
|
+
return string.replace(/([.*+?^${}()|\[\]\/\\])/g, '\\$1');
|
|
511
|
+
}
|
|
512
|
+
function delay(ms) {
|
|
513
|
+
return function (arg) {
|
|
514
|
+
return new Promise(function (resolve) {
|
|
515
|
+
setTimeout(function () {
|
|
516
|
+
resolve(arg);
|
|
517
|
+
}, ms);
|
|
518
|
+
});
|
|
519
|
+
};
|
|
520
|
+
}
|
|
521
|
+
function asArray(arrayLike) {
|
|
522
|
+
var array = [];
|
|
523
|
+
var length = arrayLike.length;
|
|
524
|
+
for (var i = 0; i < length; i++)
|
|
525
|
+
array.push(arrayLike[i]);
|
|
526
|
+
return array;
|
|
527
|
+
}
|
|
528
|
+
function escapeXhtml(string) {
|
|
529
|
+
return string.replace(/#/g, '%23').replace(/\n/g, '%0A');
|
|
530
|
+
}
|
|
531
|
+
function width(node) {
|
|
532
|
+
var leftBorder = px(node, 'border-left-width');
|
|
533
|
+
var rightBorder = px(node, 'border-right-width');
|
|
534
|
+
return node.scrollWidth + leftBorder + rightBorder;
|
|
535
|
+
}
|
|
536
|
+
function height(node) {
|
|
537
|
+
var topBorder = px(node, 'border-top-width');
|
|
538
|
+
var bottomBorder = px(node, 'border-bottom-width');
|
|
539
|
+
return node.scrollHeight + topBorder + bottomBorder;
|
|
540
|
+
}
|
|
541
|
+
function px(node, styleProperty) {
|
|
542
|
+
var value = window
|
|
543
|
+
.getComputedStyle(node)
|
|
544
|
+
.getPropertyValue(styleProperty);
|
|
545
|
+
return parseFloat(value.replace('px', ''));
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
function newInliner() {
|
|
549
|
+
var URL_REGEX = /url\(['"]?([^'"]+?)['"]?\)/g;
|
|
550
|
+
return {
|
|
551
|
+
inlineAll: inlineAll,
|
|
552
|
+
shouldProcess: shouldProcess,
|
|
553
|
+
impl: {
|
|
554
|
+
readUrls: readUrls,
|
|
555
|
+
inline: inline,
|
|
556
|
+
},
|
|
557
|
+
};
|
|
558
|
+
function shouldProcess(string) {
|
|
559
|
+
return string.search(URL_REGEX) !== -1;
|
|
560
|
+
}
|
|
561
|
+
function readUrls(string) {
|
|
562
|
+
var result = [];
|
|
563
|
+
var match;
|
|
564
|
+
while ((match = URL_REGEX.exec(string)) !== null) {
|
|
565
|
+
result.push(match[1]);
|
|
566
|
+
}
|
|
567
|
+
return result.filter(function (url) {
|
|
568
|
+
return !util.isDataUrl(url);
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
function inline(string, url, baseUrl, get) {
|
|
572
|
+
return Promise.resolve(url)
|
|
573
|
+
.then(function (url) {
|
|
574
|
+
return baseUrl ? util.resolveUrl(url, baseUrl) : url;
|
|
575
|
+
})
|
|
576
|
+
.then(get || util.getAndEncode)
|
|
577
|
+
.then(function (data) {
|
|
578
|
+
return util.dataAsUrl(data, util.mimeType(url));
|
|
579
|
+
})
|
|
580
|
+
.then(function (dataUrl) {
|
|
581
|
+
return string.replace(urlAsRegex(url), '$1' + dataUrl + '$3');
|
|
582
|
+
});
|
|
583
|
+
function urlAsRegex(url) {
|
|
584
|
+
return new RegExp('(url\\([\'"]?)(' + util.escape(url) + ')([\'"]?\\))', 'g');
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
function inlineAll(string, baseUrl, get) {
|
|
588
|
+
if (nothingToInline())
|
|
589
|
+
return Promise.resolve(string);
|
|
590
|
+
return Promise.resolve(string)
|
|
591
|
+
.then(readUrls)
|
|
592
|
+
.then(function (urls) {
|
|
593
|
+
var done = Promise.resolve(string);
|
|
594
|
+
urls.forEach(function (url) {
|
|
595
|
+
done = done.then(function (string) {
|
|
596
|
+
return inline(string, url, baseUrl, get);
|
|
597
|
+
});
|
|
598
|
+
});
|
|
599
|
+
return done;
|
|
600
|
+
});
|
|
601
|
+
function nothingToInline() {
|
|
602
|
+
return !shouldProcess(string);
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
function newFontFaces() {
|
|
607
|
+
return {
|
|
608
|
+
resolveAll: resolveAll,
|
|
609
|
+
impl: {
|
|
610
|
+
readAll: readAll,
|
|
611
|
+
},
|
|
612
|
+
};
|
|
613
|
+
function resolveAll() {
|
|
614
|
+
return readAll(document)
|
|
615
|
+
.then(function (webFonts) {
|
|
616
|
+
return Promise.all(webFonts.map(function (webFont) {
|
|
617
|
+
return webFont.resolve();
|
|
618
|
+
}));
|
|
619
|
+
})
|
|
620
|
+
.then(function (cssStrings) {
|
|
621
|
+
return cssStrings.join('\n');
|
|
622
|
+
});
|
|
623
|
+
}
|
|
624
|
+
function readAll() {
|
|
625
|
+
return Promise.resolve(util.asArray(document.styleSheets))
|
|
626
|
+
.then(getCssRules)
|
|
627
|
+
.then(selectWebFontRules)
|
|
628
|
+
.then(function (rules) {
|
|
629
|
+
return rules.map(newWebFont);
|
|
630
|
+
});
|
|
631
|
+
function selectWebFontRules(cssRules) {
|
|
632
|
+
return cssRules
|
|
633
|
+
.filter(function (rule) {
|
|
634
|
+
return rule.type === CSSRule.FONT_FACE_RULE;
|
|
635
|
+
})
|
|
636
|
+
.filter(function (rule) {
|
|
637
|
+
return inliner.shouldProcess(rule.style.getPropertyValue('src'));
|
|
638
|
+
});
|
|
639
|
+
}
|
|
640
|
+
function getCssRules(styleSheets) {
|
|
641
|
+
var cssRules = [];
|
|
642
|
+
styleSheets.forEach(function (sheet) {
|
|
643
|
+
try {
|
|
644
|
+
util.asArray(sheet.cssRules || []).forEach(cssRules.push.bind(cssRules));
|
|
645
|
+
}
|
|
646
|
+
catch (e) {
|
|
647
|
+
console.log('Error while reading CSS rules from ' + sheet.href, e.toString());
|
|
648
|
+
}
|
|
649
|
+
});
|
|
650
|
+
return cssRules;
|
|
651
|
+
}
|
|
652
|
+
function newWebFont(webFontRule) {
|
|
653
|
+
return {
|
|
654
|
+
resolve: function resolve() {
|
|
655
|
+
var baseUrl = (webFontRule.parentStyleSheet || {}).href;
|
|
656
|
+
return inliner.inlineAll(webFontRule.cssText, baseUrl);
|
|
657
|
+
},
|
|
658
|
+
src: function () {
|
|
659
|
+
return webFontRule.style.getPropertyValue('src');
|
|
660
|
+
},
|
|
661
|
+
};
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
function newImages() {
|
|
666
|
+
return {
|
|
667
|
+
inlineAll: inlineAll,
|
|
668
|
+
impl: {
|
|
669
|
+
newImage: newImage,
|
|
670
|
+
},
|
|
671
|
+
};
|
|
672
|
+
function newImage(element) {
|
|
673
|
+
return {
|
|
674
|
+
inline: inline,
|
|
675
|
+
};
|
|
676
|
+
function inline(get) {
|
|
677
|
+
if (util.isDataUrl(element.src))
|
|
678
|
+
return Promise.resolve();
|
|
679
|
+
return Promise.resolve(element.src)
|
|
680
|
+
.then(get || util.getAndEncode)
|
|
681
|
+
.then(function (data) {
|
|
682
|
+
return util.dataAsUrl(data, util.mimeType(element.src));
|
|
683
|
+
})
|
|
684
|
+
.then(function (dataUrl) {
|
|
685
|
+
return new Promise(function (resolve, reject) {
|
|
686
|
+
element.onload = resolve;
|
|
687
|
+
element.onerror = reject;
|
|
688
|
+
element.src = dataUrl;
|
|
689
|
+
});
|
|
690
|
+
});
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
function inlineAll(node) {
|
|
694
|
+
if (!(node instanceof Element))
|
|
695
|
+
return Promise.resolve(node);
|
|
696
|
+
return inlineBackground(node).then(function () {
|
|
697
|
+
if (node instanceof HTMLImageElement)
|
|
698
|
+
return newImage(node).inline();
|
|
699
|
+
else
|
|
700
|
+
return Promise.all(util.asArray(node.childNodes).map(function (child) {
|
|
701
|
+
return inlineAll(child);
|
|
702
|
+
}));
|
|
703
|
+
});
|
|
704
|
+
function inlineBackground(node) {
|
|
705
|
+
var background = node.style.getPropertyValue('background');
|
|
706
|
+
if (!background)
|
|
707
|
+
return Promise.resolve(node);
|
|
708
|
+
return inliner
|
|
709
|
+
.inlineAll(background)
|
|
710
|
+
.then(function (inlined) {
|
|
711
|
+
node.style.setProperty('background', inlined, node.style.getPropertyPriority('background'));
|
|
712
|
+
})
|
|
713
|
+
.then(function () {
|
|
714
|
+
return node;
|
|
715
|
+
});
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
})(this);
|
|
720
|
+
//# sourceMappingURL=../../../src/services/essentials/dom-to-image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom-to-image.js","sourceRoot":"","sources":["dom-to-image.js"],"names":[],"mappings":"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","sourcesContent":["/**\nThe MIT License (MIT)\n\nCopyright 2015 Anatolii Saienko\nhttps://github.com/tsayen\n\nCopyright 2012 Paul Bakaus\nhttp://paulbakaus.com/\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\n(function (global) {\n\t'use strict';\n\n\tvar util = newUtil();\n\tvar inliner = newInliner();\n\tvar fontFaces = newFontFaces();\n\tvar images = newImages();\n\n\t// Default impl options\n\tvar defaultOptions = {\n\t\t// Default is to fail on error, no placeholder\n\t\timagePlaceholder: undefined,\n\t\t// Default cache bust is false, it will use the cache\n\t\tcacheBust: false,\n\t};\n\n\tvar domtoimage = {\n\t\ttoSvg: toSvg,\n\t\ttoPng: toPng,\n\t\ttoJpeg: toJpeg,\n\t\ttoBlob: toBlob,\n\t\ttoPixelData: toPixelData,\n\t\timpl: {\n\t\t\tfontFaces: fontFaces,\n\t\t\timages: images,\n\t\t\tutil: util,\n\t\t\tinliner: inliner,\n\t\t\toptions: {},\n\t\t},\n\t};\n\n\tif (typeof module !== 'undefined') module.exports = domtoimage;\n\telse global.domtoimage = domtoimage;\n\n\t/**\n\t * @param {Node} node - The DOM Node object to render\n\t * @param {Object} options - Rendering options\n\t * @param {Function} options.filter - Should return true if passed node should be included in the output\n\t * (excluding node means excluding it's children as well). Not called on the root node.\n\t * @param {String} options.bgcolor - color for the background, any valid CSS color value.\n\t * @param {Number} options.width - width to be applied to node before rendering.\n\t * @param {Number} options.height - height to be applied to node before rendering.\n\t * @param {Object} options.style - an object whose properties to be copied to node's style before rendering.\n\t * @param {Number} options.quality - a Number between 0 and 1 indicating image quality (applicable to JPEG only),\n\t\t\t\tdefaults to 1.0.\n\t * @param {String} options.imagePlaceholder - dataURL to use as a placeholder for failed images, default behaviour is to fail fast on images we can't fetch\n\t * @param {Boolean} options.cacheBust - set to true to cache bust by appending the time to the request url\n\t * @return {Promise} - A promise that is fulfilled with a SVG image data URL\n\t * */\n\tfunction toSvg(node, options) {\n\t\toptions = options || {};\n\t\tcopyOptions(options);\n\t\treturn Promise.resolve(node)\n\t\t\t.then(function (node) {\n\t\t\t\treturn cloneNode(node, options.filter, true);\n\t\t\t})\n\t\t\t.then(embedFonts)\n\t\t\t.then(inlineImages)\n\t\t\t.then(applyOptions)\n\t\t\t.then(function (clone) {\n\t\t\t\treturn makeSvgDataUri(\n\t\t\t\t\tclone,\n\t\t\t\t\toptions.width || util.width(node),\n\t\t\t\t\toptions.height || util.height(node)\n\t\t\t\t);\n\t\t\t});\n\n\t\tfunction applyOptions(clone) {\n\t\t\tif (options.bgcolor) clone.style.backgroundColor = options.bgcolor;\n\n\t\t\tif (options.width) clone.style.width = options.width + 'px';\n\t\t\tif (options.height) clone.style.height = options.height + 'px';\n\n\t\t\tif (options.style)\n\t\t\t\tObject.keys(options.style).forEach(function (property) {\n\t\t\t\t\tclone.style[property] = options.style[property];\n\t\t\t\t});\n\n\t\t\treturn clone;\n\t\t}\n\t}\n\n\t/**\n\t * @param {Node} node - The DOM Node object to render\n\t * @param {Object} options - Rendering options, @see {@link toSvg}\n\t * @return {Promise} - A promise that is fulfilled with a Uint8Array containing RGBA pixel data.\n\t * */\n\tfunction toPixelData(node, options) {\n\t\treturn draw(node, options || {}).then(function (canvas) {\n\t\t\treturn canvas\n\t\t\t\t.getContext('2d')\n\t\t\t\t.getImageData(0, 0, util.width(node), util.height(node)).data;\n\t\t});\n\t}\n\n\t/**\n\t * @param {Node} node - The DOM Node object to render\n\t * @param {Object} options - Rendering options, @see {@link toSvg}\n\t * @return {Promise} - A promise that is fulfilled with a PNG image data URL\n\t * */\n\tfunction toPng(node, options) {\n\t\treturn draw(node, options || {}).then(function (canvas) {\n\t\t\treturn canvas.toDataURL();\n\t\t});\n\t}\n\n\t/**\n\t * @param {Node} node - The DOM Node object to render\n\t * @param {Object} options - Rendering options, @see {@link toSvg}\n\t * @return {Promise} - A promise that is fulfilled with a JPEG image data URL\n\t * */\n\tfunction toJpeg(node, options) {\n\t\toptions = options || {};\n\t\treturn draw(node, options).then(function (canvas) {\n\t\t\treturn canvas.toDataURL('image/jpeg', options.quality || 1.0);\n\t\t});\n\t}\n\n\t/**\n\t * @param {Node} node - The DOM Node object to render\n\t * @param {Object} options - Rendering options, @see {@link toSvg}\n\t * @return {Promise} - A promise that is fulfilled with a PNG image blob\n\t * */\n\tfunction toBlob(node, options) {\n\t\treturn draw(node, options || {}).then(util.canvasToBlob);\n\t}\n\n\tfunction copyOptions(options) {\n\t\t// Copy options to impl options for use in impl\n\t\tif (typeof options.imagePlaceholder === 'undefined') {\n\t\t\tdomtoimage.impl.options.imagePlaceholder =\n\t\t\t\tdefaultOptions.imagePlaceholder;\n\t\t} else {\n\t\t\tdomtoimage.impl.options.imagePlaceholder = options.imagePlaceholder;\n\t\t}\n\n\t\tif (typeof options.cacheBust === 'undefined') {\n\t\t\tdomtoimage.impl.options.cacheBust = defaultOptions.cacheBust;\n\t\t} else {\n\t\t\tdomtoimage.impl.options.cacheBust = options.cacheBust;\n\t\t}\n\t}\n\n\tfunction draw(domNode, options) {\n\t\treturn toSvg(domNode, options)\n\t\t\t.then(util.makeImage)\n\t\t\t.then(util.delay(100))\n\t\t\t.then(function (image) {\n\t\t\t\tvar canvas = newCanvas(domNode);\n\t\t\t\tcanvas.getContext('2d').drawImage(image, 0, 0);\n\t\t\t\treturn canvas;\n\t\t\t});\n\n\t\tfunction newCanvas(domNode) {\n\t\t\tvar canvas = document.createElement('canvas');\n\t\t\tcanvas.width = options.width || util.width(domNode);\n\t\t\tcanvas.height = options.height || util.height(domNode);\n\n\t\t\tif (options.bgcolor) {\n\t\t\t\tvar ctx = canvas.getContext('2d');\n\t\t\t\tctx.fillStyle = options.bgcolor;\n\t\t\t\tctx.fillRect(0, 0, canvas.width, canvas.height);\n\t\t\t}\n\n\t\t\treturn canvas;\n\t\t}\n\t}\n\n\tfunction cloneNode(node, filter, root) {\n\t\tif (!root && filter && !filter(node)) return Promise.resolve();\n\n\t\treturn Promise.resolve(node)\n\t\t\t.then(makeNodeCopy)\n\t\t\t.then(function (clone) {\n\t\t\t\treturn cloneChildren(node, clone, filter);\n\t\t\t})\n\t\t\t.then(function (clone) {\n\t\t\t\treturn processClone(node, clone);\n\t\t\t});\n\n\t\tfunction makeNodeCopy(node) {\n\t\t\tif (node instanceof HTMLCanvasElement)\n\t\t\t\treturn util.makeImage(node.toDataURL());\n\t\t\treturn node.cloneNode(false);\n\t\t}\n\n\t\tfunction cloneChildren(original, clone, filter) {\n\t\t\tvar children = original.childNodes;\n\t\t\tif (children.length === 0) return Promise.resolve(clone);\n\n\t\t\treturn cloneChildrenInOrder(\n\t\t\t\tclone,\n\t\t\t\tutil.asArray(children),\n\t\t\t\tfilter\n\t\t\t).then(function () {\n\t\t\t\treturn clone;\n\t\t\t});\n\n\t\t\tfunction cloneChildrenInOrder(parent, children, filter) {\n\t\t\t\tvar done = Promise.resolve();\n\t\t\t\tchildren.forEach(function (child) {\n\t\t\t\t\tdone = done\n\t\t\t\t\t\t.then(function () {\n\t\t\t\t\t\t\treturn cloneNode(child, filter);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.then(function (childClone) {\n\t\t\t\t\t\t\tif (childClone) parent.appendChild(childClone);\n\t\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\treturn done;\n\t\t\t}\n\t\t}\n\n\t\tfunction processClone(original, clone) {\n\t\t\tif (!(clone instanceof Element)) return clone;\n\n\t\t\treturn Promise.resolve()\n\t\t\t\t.then(cloneStyle)\n\t\t\t\t.then(clonePseudoElements)\n\t\t\t\t.then(copyUserInput)\n\t\t\t\t.then(fixSvg)\n\t\t\t\t.then(function () {\n\t\t\t\t\treturn clone;\n\t\t\t\t});\n\n\t\t\tfunction cloneStyle() {\n\t\t\t\tcopyStyle(window.getComputedStyle(original), clone.style);\n\n\t\t\t\tfunction copyStyle(source, target) {\n\t\t\t\t\tif (source.cssText) target.cssText = source.cssText;\n\t\t\t\t\telse copyProperties(source, target);\n\n\t\t\t\t\tfunction copyProperties(source, target) {\n\t\t\t\t\t\tutil.asArray(source).forEach(function (name) {\n\t\t\t\t\t\t\ttarget.setProperty(\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tsource.getPropertyValue(name),\n\t\t\t\t\t\t\t\tsource.getPropertyPriority(name)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction clonePseudoElements() {\n\t\t\t\t[':before', ':after'].forEach(function (element) {\n\t\t\t\t\tclonePseudoElement(element);\n\t\t\t\t});\n\n\t\t\t\tfunction clonePseudoElement(element) {\n\t\t\t\t\tvar style = window.getComputedStyle(original, element);\n\t\t\t\t\tvar content = style.getPropertyValue('content');\n\n\t\t\t\t\tif (content === '' || content === 'none') return;\n\n\t\t\t\t\tvar className = util.uid();\n\t\t\t\t\tclone.className = clone.className + ' ' + className;\n\t\t\t\t\tvar styleElement = document.createElement('style');\n\t\t\t\t\tstyleElement.appendChild(\n\t\t\t\t\t\tformatPseudoElementStyle(className, element, style)\n\t\t\t\t\t);\n\t\t\t\t\tclone.appendChild(styleElement);\n\n\t\t\t\t\tfunction formatPseudoElementStyle(\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\tstyle\n\t\t\t\t\t) {\n\t\t\t\t\t\tvar selector = '.' + className + ':' + element;\n\t\t\t\t\t\tvar cssText = style.cssText\n\t\t\t\t\t\t\t? formatCssText(style)\n\t\t\t\t\t\t\t: formatCssProperties(style);\n\t\t\t\t\t\treturn document.createTextNode(\n\t\t\t\t\t\t\tselector + '{' + cssText + '}'\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tfunction formatCssText(style) {\n\t\t\t\t\t\t\tvar content = style.getPropertyValue('content');\n\t\t\t\t\t\t\treturn style.cssText + ' content: ' + content + ';';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfunction formatCssProperties(style) {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\tutil\n\t\t\t\t\t\t\t\t\t.asArray(style)\n\t\t\t\t\t\t\t\t\t.map(formatProperty)\n\t\t\t\t\t\t\t\t\t.join('; ') + ';'\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tfunction formatProperty(name) {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\tname +\n\t\t\t\t\t\t\t\t\t': ' +\n\t\t\t\t\t\t\t\t\tstyle.getPropertyValue(name) +\n\t\t\t\t\t\t\t\t\t(style.getPropertyPriority(name)\n\t\t\t\t\t\t\t\t\t\t? ' !important'\n\t\t\t\t\t\t\t\t\t\t: '')\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction copyUserInput() {\n\t\t\t\tif (original instanceof HTMLTextAreaElement)\n\t\t\t\t\tclone.innerHTML = original.value;\n\t\t\t\tif (original instanceof HTMLInputElement)\n\t\t\t\t\tclone.setAttribute('value', original.value);\n\t\t\t}\n\n\t\t\tfunction fixSvg() {\n\t\t\t\tif (!(clone instanceof SVGElement)) return;\n\t\t\t\tclone.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n\n\t\t\t\tif (!(clone instanceof SVGRectElement)) return;\n\t\t\t\t['width', 'height'].forEach(function (attribute) {\n\t\t\t\t\tvar value = clone.getAttribute(attribute);\n\t\t\t\t\tif (!value) return;\n\n\t\t\t\t\tclone.style.setProperty(attribute, value);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction embedFonts(node) {\n\t\treturn fontFaces.resolveAll().then(function (cssText) {\n\t\t\tvar styleNode = document.createElement('style');\n\t\t\tnode.appendChild(styleNode);\n\t\t\tstyleNode.appendChild(document.createTextNode(cssText));\n\t\t\treturn node;\n\t\t});\n\t}\n\n\tfunction inlineImages(node) {\n\t\treturn images.inlineAll(node).then(function () {\n\t\t\treturn node;\n\t\t});\n\t}\n\n\tfunction makeSvgDataUri(node, width, height) {\n\t\treturn Promise.resolve(node)\n\t\t\t.then(function (node) {\n\t\t\t\tnode.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml');\n\t\t\t\treturn new XMLSerializer().serializeToString(node);\n\t\t\t})\n\t\t\t.then(util.escapeXhtml)\n\t\t\t.then(function (xhtml) {\n\t\t\t\treturn (\n\t\t\t\t\t'<foreignObject x=\"0\" y=\"0\" width=\"100%\" height=\"100%\">' +\n\t\t\t\t\txhtml +\n\t\t\t\t\t'</foreignObject>'\n\t\t\t\t);\n\t\t\t})\n\t\t\t.then(function (foreignObject) {\n\t\t\t\treturn (\n\t\t\t\t\t'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"' +\n\t\t\t\t\twidth +\n\t\t\t\t\t'\" height=\"' +\n\t\t\t\t\theight +\n\t\t\t\t\t'\">' +\n\t\t\t\t\tforeignObject +\n\t\t\t\t\t'</svg>'\n\t\t\t\t);\n\t\t\t})\n\t\t\t.then(function (svg) {\n\t\t\t\treturn 'data:image/svg+xml;charset=utf-8,' + svg;\n\t\t\t});\n\t}\n\n\tfunction newUtil() {\n\t\treturn {\n\t\t\tescape: escape,\n\t\t\tparseExtension: parseExtension,\n\t\t\tmimeType: mimeType,\n\t\t\tdataAsUrl: dataAsUrl,\n\t\t\tisDataUrl: isDataUrl,\n\t\t\tcanvasToBlob: canvasToBlob,\n\t\t\tresolveUrl: resolveUrl,\n\t\t\tgetAndEncode: getAndEncode,\n\t\t\tuid: uid(),\n\t\t\tdelay: delay,\n\t\t\tasArray: asArray,\n\t\t\tescapeXhtml: escapeXhtml,\n\t\t\tmakeImage: makeImage,\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t};\n\n\t\tfunction mimes() {\n\t\t\t/*\n\t\t\t * Only WOFF and EOT mime types for fonts are 'real'\n\t\t\t * see http://www.iana.org/assignments/media-types/media-types.xhtml\n\t\t\t */\n\t\t\tvar WOFF = 'application/font-woff';\n\t\t\tvar JPEG = 'image/jpeg';\n\n\t\t\treturn {\n\t\t\t\twoff: WOFF,\n\t\t\t\twoff2: WOFF,\n\t\t\t\tttf: 'application/font-truetype',\n\t\t\t\teot: 'application/vnd.ms-fontobject',\n\t\t\t\tpng: 'image/png',\n\t\t\t\tjpg: JPEG,\n\t\t\t\tjpeg: JPEG,\n\t\t\t\tgif: 'image/gif',\n\t\t\t\ttiff: 'image/tiff',\n\t\t\t\tsvg: 'image/svg+xml',\n\t\t\t};\n\t\t}\n\n\t\tfunction parseExtension(url) {\n\t\t\tvar match = /\\.([^\\.\\/]*?)$/g.exec(url);\n\t\t\tif (match) return match[1];\n\t\t\telse return '';\n\t\t}\n\n\t\tfunction mimeType(url) {\n\t\t\tvar extension = parseExtension(url).toLowerCase();\n\t\t\treturn mimes()[extension] || '';\n\t\t}\n\n\t\tfunction isDataUrl(url) {\n\t\t\treturn url.search(/^(data:)/) !== -1;\n\t\t}\n\n\t\tfunction toBlob(canvas) {\n\t\t\treturn new Promise(function (resolve) {\n\t\t\t\tvar binaryString = window.atob(\n\t\t\t\t\tcanvas.toDataURL().split(',')[1]\n\t\t\t\t);\n\t\t\t\tvar length = binaryString.length;\n\t\t\t\tvar binaryArray = new Uint8Array(length);\n\n\t\t\t\tfor (var i = 0; i < length; i++)\n\t\t\t\t\tbinaryArray[i] = binaryString.charCodeAt(i);\n\n\t\t\t\tresolve(\n\t\t\t\t\tnew Blob([binaryArray], {\n\t\t\t\t\t\ttype: 'image/png',\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\n\t\tfunction canvasToBlob(canvas) {\n\t\t\tif (canvas.toBlob)\n\t\t\t\treturn new Promise(function (resolve) {\n\t\t\t\t\tcanvas.toBlob(resolve);\n\t\t\t\t});\n\n\t\t\treturn toBlob(canvas);\n\t\t}\n\n\t\tfunction resolveUrl(url, baseUrl) {\n\t\t\tvar doc = document.implementation.createHTMLDocument();\n\t\t\tvar base = doc.createElement('base');\n\t\t\tdoc.head.appendChild(base);\n\t\t\tvar a = doc.createElement('a');\n\t\t\tdoc.body.appendChild(a);\n\t\t\tbase.href = baseUrl;\n\t\t\ta.href = url;\n\t\t\treturn a.href;\n\t\t}\n\n\t\tfunction uid() {\n\t\t\tvar index = 0;\n\n\t\t\treturn function () {\n\t\t\t\treturn 'u' + fourRandomChars() + index++;\n\n\t\t\t\tfunction fourRandomChars() {\n\t\t\t\t\t/* see http://stackoverflow.com/a/6248722/2519373 */\n\t\t\t\t\treturn (\n\t\t\t\t\t\t'0000' +\n\t\t\t\t\t\t((Math.random() * Math.pow(36, 4)) << 0).toString(36)\n\t\t\t\t\t).slice(-4);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction makeImage(uri) {\n\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\tvar image = new Image();\n\t\t\t\timage.onload = function () {\n\t\t\t\t\tresolve(image);\n\t\t\t\t};\n\t\t\t\timage.onerror = reject;\n\t\t\t\timage.src = uri;\n\t\t\t});\n\t\t}\n\n\t\tfunction getAndEncode(url) {\n\t\t\tvar TIMEOUT = 30000;\n\t\t\tif (domtoimage.impl.options.cacheBust) {\n\t\t\t\t// Cache bypass so we dont have CORS issues with cached images\n\t\t\t\t// Source: https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Bypassing_the_cache\n\t\t\t\turl += (/\\?/.test(url) ? '&' : '?') + new Date().getTime();\n\t\t\t}\n\n\t\t\treturn new Promise(function (resolve) {\n\t\t\t\tvar request = new XMLHttpRequest();\n\n\t\t\t\trequest.onreadystatechange = done;\n\t\t\t\trequest.ontimeout = timeout;\n\t\t\t\trequest.responseType = 'blob';\n\t\t\t\trequest.timeout = TIMEOUT;\n\t\t\t\trequest.open('GET', url, true);\n\t\t\t\trequest.send();\n\n\t\t\t\tvar placeholder;\n\t\t\t\tif (domtoimage.impl.options.imagePlaceholder) {\n\t\t\t\t\tvar split = domtoimage.impl.options.imagePlaceholder.split(\n\t\t\t\t\t\t/,/\n\t\t\t\t\t);\n\t\t\t\t\tif (split && split[1]) {\n\t\t\t\t\t\tplaceholder = split[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction done() {\n\t\t\t\t\tif (request.readyState !== 4) return;\n\n\t\t\t\t\tif (request.status !== 200) {\n\t\t\t\t\t\tif (placeholder) {\n\t\t\t\t\t\t\tresolve(placeholder);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfail(\n\t\t\t\t\t\t\t\t'cannot fetch resource: ' +\n\t\t\t\t\t\t\t\t\turl +\n\t\t\t\t\t\t\t\t\t', status: ' +\n\t\t\t\t\t\t\t\t\trequest.status\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar encoder = new FileReader();\n\t\t\t\t\tencoder.onloadend = function () {\n\t\t\t\t\t\tvar content = encoder.result.split(/,/)[1];\n\t\t\t\t\t\tresolve(content);\n\t\t\t\t\t};\n\t\t\t\t\tencoder.readAsDataURL(request.response);\n\t\t\t\t}\n\n\t\t\t\tfunction timeout() {\n\t\t\t\t\tif (placeholder) {\n\t\t\t\t\t\tresolve(placeholder);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfail(\n\t\t\t\t\t\t\t'timeout of ' +\n\t\t\t\t\t\t\t\tTIMEOUT +\n\t\t\t\t\t\t\t\t'ms occured while fetching resource: ' +\n\t\t\t\t\t\t\t\turl\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction fail(message) {\n\t\t\t\t\tconsole.error(message);\n\t\t\t\t\tresolve('');\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction dataAsUrl(content, type) {\n\t\t\treturn 'data:' + type + ';base64,' + content;\n\t\t}\n\n\t\tfunction escape(string) {\n\t\t\treturn string.replace(/([.*+?^${}()|\\[\\]\\/\\\\])/g, '\\\\$1');\n\t\t}\n\n\t\tfunction delay(ms) {\n\t\t\treturn function (arg) {\n\t\t\t\treturn new Promise(function (resolve) {\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tresolve(arg);\n\t\t\t\t\t}, ms);\n\t\t\t\t});\n\t\t\t};\n\t\t}\n\n\t\tfunction asArray(arrayLike) {\n\t\t\tvar array = [];\n\t\t\tvar length = arrayLike.length;\n\t\t\tfor (var i = 0; i < length; i++) array.push(arrayLike[i]);\n\t\t\treturn array;\n\t\t}\n\n\t\tfunction escapeXhtml(string) {\n\t\t\treturn string.replace(/#/g, '%23').replace(/\\n/g, '%0A');\n\t\t}\n\n\t\tfunction width(node) {\n\t\t\tvar leftBorder = px(node, 'border-left-width');\n\t\t\tvar rightBorder = px(node, 'border-right-width');\n\t\t\treturn node.scrollWidth + leftBorder + rightBorder;\n\t\t}\n\n\t\tfunction height(node) {\n\t\t\tvar topBorder = px(node, 'border-top-width');\n\t\t\tvar bottomBorder = px(node, 'border-bottom-width');\n\t\t\treturn node.scrollHeight + topBorder + bottomBorder;\n\t\t}\n\n\t\tfunction px(node, styleProperty) {\n\t\t\tvar value = window\n\t\t\t\t.getComputedStyle(node)\n\t\t\t\t.getPropertyValue(styleProperty);\n\t\t\treturn parseFloat(value.replace('px', ''));\n\t\t}\n\t}\n\n\tfunction newInliner() {\n\t\tvar URL_REGEX = /url\\(['\"]?([^'\"]+?)['\"]?\\)/g;\n\n\t\treturn {\n\t\t\tinlineAll: inlineAll,\n\t\t\tshouldProcess: shouldProcess,\n\t\t\timpl: {\n\t\t\t\treadUrls: readUrls,\n\t\t\t\tinline: inline,\n\t\t\t},\n\t\t};\n\n\t\tfunction shouldProcess(string) {\n\t\t\treturn string.search(URL_REGEX) !== -1;\n\t\t}\n\n\t\tfunction readUrls(string) {\n\t\t\tvar result = [];\n\t\t\tvar match;\n\t\t\twhile ((match = URL_REGEX.exec(string)) !== null) {\n\t\t\t\tresult.push(match[1]);\n\t\t\t}\n\t\t\treturn result.filter(function (url) {\n\t\t\t\treturn !util.isDataUrl(url);\n\t\t\t});\n\t\t}\n\n\t\tfunction inline(string, url, baseUrl, get) {\n\t\t\treturn Promise.resolve(url)\n\t\t\t\t.then(function (url) {\n\t\t\t\t\treturn baseUrl ? util.resolveUrl(url, baseUrl) : url;\n\t\t\t\t})\n\t\t\t\t.then(get || util.getAndEncode)\n\t\t\t\t.then(function (data) {\n\t\t\t\t\treturn util.dataAsUrl(data, util.mimeType(url));\n\t\t\t\t})\n\t\t\t\t.then(function (dataUrl) {\n\t\t\t\t\treturn string.replace(\n\t\t\t\t\t\turlAsRegex(url),\n\t\t\t\t\t\t'$1' + dataUrl + '$3'\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\tfunction urlAsRegex(url) {\n\t\t\t\treturn new RegExp(\n\t\t\t\t\t'(url\\\\([\\'\"]?)(' + util.escape(url) + ')([\\'\"]?\\\\))',\n\t\t\t\t\t'g'\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tfunction inlineAll(string, baseUrl, get) {\n\t\t\tif (nothingToInline()) return Promise.resolve(string);\n\n\t\t\treturn Promise.resolve(string)\n\t\t\t\t.then(readUrls)\n\t\t\t\t.then(function (urls) {\n\t\t\t\t\tvar done = Promise.resolve(string);\n\t\t\t\t\turls.forEach(function (url) {\n\t\t\t\t\t\tdone = done.then(function (string) {\n\t\t\t\t\t\t\treturn inline(string, url, baseUrl, get);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\treturn done;\n\t\t\t\t});\n\n\t\t\tfunction nothingToInline() {\n\t\t\t\treturn !shouldProcess(string);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction newFontFaces() {\n\t\treturn {\n\t\t\tresolveAll: resolveAll,\n\t\t\timpl: {\n\t\t\t\treadAll: readAll,\n\t\t\t},\n\t\t};\n\n\t\tfunction resolveAll() {\n\t\t\treturn readAll(document)\n\t\t\t\t.then(function (webFonts) {\n\t\t\t\t\treturn Promise.all(\n\t\t\t\t\t\twebFonts.map(function (webFont) {\n\t\t\t\t\t\t\treturn webFont.resolve();\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t})\n\t\t\t\t.then(function (cssStrings) {\n\t\t\t\t\treturn cssStrings.join('\\n');\n\t\t\t\t});\n\t\t}\n\n\t\tfunction readAll() {\n\t\t\treturn Promise.resolve(util.asArray(document.styleSheets))\n\t\t\t\t.then(getCssRules)\n\t\t\t\t.then(selectWebFontRules)\n\t\t\t\t.then(function (rules) {\n\t\t\t\t\treturn rules.map(newWebFont);\n\t\t\t\t});\n\n\t\t\tfunction selectWebFontRules(cssRules) {\n\t\t\t\treturn cssRules\n\t\t\t\t\t.filter(function (rule) {\n\t\t\t\t\t\treturn rule.type === CSSRule.FONT_FACE_RULE;\n\t\t\t\t\t})\n\t\t\t\t\t.filter(function (rule) {\n\t\t\t\t\t\treturn inliner.shouldProcess(\n\t\t\t\t\t\t\trule.style.getPropertyValue('src')\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction getCssRules(styleSheets) {\n\t\t\t\tvar cssRules = [];\n\t\t\t\tstyleSheets.forEach(function (sheet) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tutil.asArray(sheet.cssRules || []).forEach(\n\t\t\t\t\t\t\tcssRules.push.bind(cssRules)\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t'Error while reading CSS rules from ' + sheet.href,\n\t\t\t\t\t\t\te.toString()\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn cssRules;\n\t\t\t}\n\n\t\t\tfunction newWebFont(webFontRule) {\n\t\t\t\treturn {\n\t\t\t\t\tresolve: function resolve() {\n\t\t\t\t\t\tvar baseUrl = (webFontRule.parentStyleSheet || {}).href;\n\t\t\t\t\t\treturn inliner.inlineAll(webFontRule.cssText, baseUrl);\n\t\t\t\t\t},\n\t\t\t\t\tsrc: function () {\n\t\t\t\t\t\treturn webFontRule.style.getPropertyValue('src');\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction newImages() {\n\t\treturn {\n\t\t\tinlineAll: inlineAll,\n\t\t\timpl: {\n\t\t\t\tnewImage: newImage,\n\t\t\t},\n\t\t};\n\n\t\tfunction newImage(element) {\n\t\t\treturn {\n\t\t\t\tinline: inline,\n\t\t\t};\n\n\t\t\tfunction inline(get) {\n\t\t\t\tif (util.isDataUrl(element.src)) return Promise.resolve();\n\n\t\t\t\treturn Promise.resolve(element.src)\n\t\t\t\t\t.then(get || util.getAndEncode)\n\t\t\t\t\t.then(function (data) {\n\t\t\t\t\t\treturn util.dataAsUrl(data, util.mimeType(element.src));\n\t\t\t\t\t})\n\t\t\t\t\t.then(function (dataUrl) {\n\t\t\t\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\t\t\t\telement.onload = resolve;\n\t\t\t\t\t\t\telement.onerror = reject;\n\t\t\t\t\t\t\telement.src = dataUrl;\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tfunction inlineAll(node) {\n\t\t\tif (!(node instanceof Element)) return Promise.resolve(node);\n\n\t\t\treturn inlineBackground(node).then(function () {\n\t\t\t\tif (node instanceof HTMLImageElement)\n\t\t\t\t\treturn newImage(node).inline();\n\t\t\t\telse\n\t\t\t\t\treturn Promise.all(\n\t\t\t\t\t\tutil.asArray(node.childNodes).map(function (child) {\n\t\t\t\t\t\t\treturn inlineAll(child);\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t});\n\n\t\t\tfunction inlineBackground(node) {\n\t\t\t\tvar background = node.style.getPropertyValue('background');\n\n\t\t\t\tif (!background) return Promise.resolve(node);\n\n\t\t\t\treturn inliner\n\t\t\t\t\t.inlineAll(background)\n\t\t\t\t\t.then(function (inlined) {\n\t\t\t\t\t\tnode.style.setProperty(\n\t\t\t\t\t\t\t'background',\n\t\t\t\t\t\t\tinlined,\n\t\t\t\t\t\t\tnode.style.getPropertyPriority('background')\n\t\t\t\t\t\t);\n\t\t\t\t\t})\n\t\t\t\t\t.then(function () {\n\t\t\t\t\t\treturn node;\n\t\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n})(this);\n"]}
|
|
@@ -21,7 +21,7 @@ import { Tools } from '../../tools';
|
|
|
21
21
|
import { carbonPrefix } from '../../configuration-non-customizable';
|
|
22
22
|
// MISC
|
|
23
23
|
import ResizeObserver from 'resize-observer-polyfill';
|
|
24
|
-
import domToImage from 'dom-to-image';
|
|
24
|
+
import domToImage from './dom-to-image';
|
|
25
25
|
var CSS_VERIFIER_ELEMENT_CLASSNAME = 'DONT_STYLE_ME_css_styles_verifier';
|
|
26
26
|
var DOMUtils = /** @class */ (function (_super) {
|
|
27
27
|
__extends(DOMUtils, _super);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom-utils.js","sourceRoot":"","sources":["dom-utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,aAAa;AACb,OAAO,EAAE,MAAM,EAAa,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,yCAAyC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEpE,OAAO;AACP,OAAO,cAAc,MAAM,0BAA0B,CAAC;AAEtD,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,IAAM,8BAA8B,GAAG,mCAAmC,CAAC;AAS3E;IAA8B,4BAAO;IAIpC,kBAAY,KAAU,EAAE,QAAa;eACpC,kBAAM,KAAK,EAAE,QAAQ,CAAC;IACvB,CAAC;IAEM,2BAAkB,GAAzB,UAA0B,OAAoB;QAC7C,OAAO;YACN,KAAK,EAAE,OAAO,CAAC,WAAW;YAC1B,MAAM,EAAE,OAAO,CAAC,YAAY;SAC5B,CAAC;IACH,CAAC;IAEM,0BAAiB,GAAxB,UACC,WAA0C,EAC1C,OAKC;QALD,wBAAA,EAAA;YACC,QAAQ,EAAE,KAAK;YACf,mBAAmB,EAAE,KAAK;YAC1B,OAAO,EAAE,KAAK;YACd,eAAe,EAAE,KAAK;SACtB;QAED,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;YACtB,WAAW,GAAG,MAAM,CAAC,WAAkB,CAAC,CAAC;SACzC;QAED,IAAM,eAAe,GAAG;YACvB,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;SACT,CAAC;QAEF,IAAM,wBAAwB,GAAG,UAAC,UAAU;YAC3C,IAAI,UAAU,EAAE;gBACf,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,UAAC,YAAY;oBACjD,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE;wBAC7B,IAAM,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;wBAC3C,IAAM,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;wBAC9C,IACC,SAAS;4BACT,eAAe,GAAG,eAAe,CAAC,YAAY,CAAC;4BAC/C,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EACnC;4BACD,eAAe,CAAC,YAAY,CAAC,GAAG,eAAe,CAAC;yBAChD;qBACD;gBACF,CAAC,CAAC,CAAC;aACH;QACF,CAAC,CAAC;QAEF,IAAM,cAAc,GAAG;YACtB,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;YAChC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;SAClC,CAAC;QAEF,IAAI,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,sBAAsB,CAAC;QAC/D,8BAA8B;QAC9B,0CAA0C;QAC1C,IAAI;YACH,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;YACpC,cAAc,GAAG;gBAChB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;aACnB,CAAC;SACF;QAAC,OAAO,CAAC,EAAE,GAAE;QAEd,IAAI;YACH,YAAY,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC;YAC1D,sBAAsB,GAAG;gBACxB,KAAK,EAAE,YAAY,CAAC,KAAK;gBACzB,MAAM,EAAE,YAAY,CAAC,MAAM;aAC3B,CAAC;SACF;QAAC,OAAO,CAAC,EAAE,GAAE;QAEd,IAAM,gBAAgB,GAAG;YACxB,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW;YACrC,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,YAAY;SACvC,CAAC;QAEF,uCAAuC;QACvC,6BAA6B;QAC7B,IAAI,OAAO,EAAE;YACZ,IAAI,OAAO,CAAC,QAAQ,EAAE;gBACrB,wBAAwB,CAAC,cAAc,CAAC,CAAC;gBAEzC,IAAI,eAAe,CAAC,KAAK,GAAG,CAAC,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC5D,OAAO,eAAe,CAAC;iBACvB;aACD;YAED,IAAI,OAAO,CAAC,mBAAmB,EAAE;gBAChC,wBAAwB,CAAC,gBAAgB,CAAC,CAAC;gBAE3C,IAAI,eAAe,CAAC,KAAK,GAAG,CAAC,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC5D,OAAO,gBAAgB,CAAC;iBACxB;aACD;YAED,IAAI,OAAO,CAAC,OAAO,EAAE;gBACpB,wBAAwB,CAAC,cAAc,CAAC,CAAC;gBAEzC,IAAI,eAAe,CAAC,KAAK,GAAG,CAAC,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC5D,OAAO,cAAc,CAAC;iBACtB;aACD;YAED,IAAI,OAAO,CAAC,eAAe,EAAE;gBAC5B,wBAAwB,CAAC,sBAAsB,CAAC,CAAC;gBAEjD,IAAI,eAAe,CAAC,KAAK,GAAG,CAAC,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC5D,OAAO,sBAAsB,CAAC;iBAC9B;aACD;SACD;QAED,IAAI;YACH,IAAM,gBAAgB,GAAG;gBACxB,KAAK,EAAE,KAAK,CAAC,WAAW,CACvB,WAAW,CAAC,IAAI,EAAE,EAClB,OAAO,EACP,SAAS,EACT,OAAO,CACP;gBACD,MAAM,EAAE,KAAK,CAAC,WAAW,CACxB,WAAW,CAAC,IAAI,EAAE,EAClB,QAAQ,EACR,SAAS,EACT,OAAO,CACP;aACD,CAAC;YAEF,wBAAwB,CAAC,gBAAgB,CAAC,CAAC;SAC3C;QAAC,OAAO,CAAC,EAAE;YACX,wBAAwB,CAAC,gBAAgB,CAAC,CAAC;YAC3C,wBAAwB,CAAC,cAAc,CAAC,CAAC;YACzC,wBAAwB,CAAC,cAAc,CAAC,CAAC;SACzC;QAED,OAAO,eAAe,CAAC;IACxB,CAAC;IAEM,uBAAc,GAArB,UAAsB,MAAM,EAAE,KAAK;QAClC,IAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAG,KAAO,CAAC,CAAC;QAE5C,IAAI,SAAS,CAAC,KAAK,EAAE,EAAE;YACtB,wBAAwB;YACxB,IAAI,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,eAAe,SAAA,CAAC;YACpB,IAAI,EAAE,SAAA,CAAC;YACP,oBAAoB;YACpB,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC/B,iCAAiC;gBACjC,eAAe,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBACnC,sBAAsB;gBACtB,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC5C,6BAA6B;gBAC7B,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;aACtB;iBAAM;gBACN,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACjC,eAAe,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;aACnC;YAED,OAAO,MAAM;iBACX,MAAM,CAAC,eAAe,CAAC;iBACvB,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;iBACd,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;SAClD;QAED,OAAO,SAAS,CAAC;IAClB,CAAC;IAMD,uBAAI,GAAJ;QACC,2EAA2E;QAC3E,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,sBAAsB;QACtB,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,2BAA2B,EAAE,CAAC;QAEnC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE;YACtC,IAAI,CAAC,iBAAiB,EAAE,CAAC;SACzB;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAC/B,CAAC;IAED,6BAAU,GAAV;QACC,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAED,0CAAuB,GAAvB,UAAwB,UAAU;QACjC,OAAO,WAAS,IAAI,CAAC,OAAO,SAAI,UAAY,CAAC;IAC9C,CAAC;IAEO,+BAAY,GAApB;QACC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CACxB,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,eAAe,CACrC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IAED,mCAAgB,GAAhB;QACC,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACxC,IAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAEnE,IAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;aAC5C,MAAM,CAAC,KAAK,CAAC;aACb,OAAO,CAAI,YAAY,UAAK,YAAY,oBAAiB,EAAE,IAAI,CAAC;aAChE,IAAI,CAAC,IAAI,EAAE,WAAS,IAAI,CAAC,UAAU,EAAI,CAAC;aACxC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;aACvB,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAEzB,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,8BAA8B,CAAC,CAAC;QAExE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,yBAAM,GAAN;QACC,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC3B,CAAC;IAED,qCAAkB,GAAlB;QACC,IAAM,aAAa,GAAG,IAAI,CAAC,SAAS,EAAiB,CAAC;QAEtD,4BAA4B;QAC5B,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAI,YAAY,mBAAgB,EAAE,IAAI,CAAC,CAAC;QAExE,6DAA6D;QAC7D,6DAA6D;QAC7D,kDAAkD;QAC5C,IAAA,4BAA2C,EAAzC,gBAAK,EAAE,kBAAkC,CAAC;QAClD,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;YACzB,2CAA2C;YAC3C,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;YAElC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SACnB;QAED,IAAI,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;YAC3B,2CAA2C;YAC3C,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YAEpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;SACrB;IACF,CAAC;IAED,4BAAS,GAAT;QACC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,8BAAW,GAAX;QACC,IAAM,IAAI,GAAG,IAAI,CAAC;QAElB,IAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACvC,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAExC,UAAU;aACR,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;YAChC,OAAO,EACN,OAAO,MAAM,KAAK,WAAW;gBAC5B,CAAC,CAAC,MAAM;qBACL,gBAAgB,CAAC,MAAM,CAAC;qBACxB,gBAAgB,CAAC,kBAAkB,CAAC;gBACvC,CAAC,CAAC,SAAS;YACb,OAAO,EAAE,CAAC;YACV,qBAAqB;YACrB,MAAM,EAAE,UAAC,IAAI;gBACZ,IACC,IAAI,CAAC,SAAS;oBACd,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAC1C;oBACD,OAAO,KAAK,CAAC;iBACb;gBAED,OAAO,IAAI,CAAC;YACb,CAAC;SACD,CAAC;aACD,IAAI,CAAC,UAAU,OAAO;YACtB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YAC1D,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,8BAAW,GAAX;QACC,IAAM,IAAI,GAAG,IAAI,CAAC;QAElB,IAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACvC,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAExC,UAAU;aACR,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;YAC/B,OAAO,EACN,OAAO,MAAM,KAAK,WAAW;gBAC5B,CAAC,CAAC,MAAM;qBACL,gBAAgB,CAAC,MAAM,CAAC;qBACxB,gBAAgB,CAAC,kBAAkB,CAAC;gBACvC,CAAC,CAAC,SAAS;YACb,OAAO,EAAE,CAAC;YACV,qBAAqB;YACrB,MAAM,EAAE,UAAC,IAAI;gBACZ,IACC,IAAI,CAAC,SAAS;oBACd,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAC1C;oBACD,OAAO,KAAK,CAAC;iBACb;gBAED,OAAO,IAAI,CAAC;YACb,CAAC;SACD,CAAC;aACD,IAAI,CAAC,UAAU,OAAO;YACtB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YAC1D,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC,CAAC;aACD,KAAK,CAAC,UAAU,KAAK;YACrB,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,mCAAgB,GAAhB;QACC,IAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAEvC,IAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAE3D,IACC,YAAY;YACZ,CAAC,QAAQ,CAAC,iBAAiB;gBAC1B,QAAQ,CAAC,yBAAyB,CAAC;gBACnC,QAAQ,CAAC,sBAAsB,CAAC;gBAChC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,EAChC;YACD,qDAAqD;YACrD,IAAI,QAAQ,CAAC,cAAc,EAAE;gBAC5B,QAAQ,CAAC,cAAc,EAAE,CAAC;aAC1B;iBAAM,IAAI,QAAQ,CAAC,sBAAsB,CAAC,EAAE;gBAC5C,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;aACnC;iBAAM,IAAI,QAAQ,CAAC,qBAAqB,CAAC,EAAE;gBAC3C,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;aAClC;iBAAM,IAAI,QAAQ,CAAC,kBAAkB,CAAC,EAAE;gBACxC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;aAC/B;SACD;aAAM;YACN,qDAAqD;YACrD,IAAI,MAAM,CAAC,iBAAiB,EAAE;gBAC7B,MAAM,CAAC,iBAAiB,EAAE,CAAC;aAC3B;iBAAM,IAAI,MAAM,CAAC,uBAAuB,EAAE;gBAC1C,MAAM,CAAC,uBAAuB,EAAE,CAAC;aACjC;iBAAM,IAAI,MAAM,CAAC,oBAAoB,EAAE;gBACvC,MAAM,CAAC,oBAAoB,EAAE,CAAC;aAC9B;iBAAM,IAAI,MAAM,CAAC,mBAAmB,EAAE;gBACtC,MAAM,CAAC,mBAAmB,EAAE,CAAC;aAC7B;SACD;IACF,CAAC;IAED,yCAAsB,GAAtB;QAAA,iBAQC;QAPA,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE;YAC7C,IAAM,eAAe,GAAG,MAAM,CAAC,KAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YACjD,IAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAE3D,oCAAoC;YACpC,eAAe,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,YAAY,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,8CAA2B,GAA3B;QAAA,iBAkBC;QAjBA,2EAA2E;QAC3E,+EAA+E;QAC/E,aAAa;QACb,UAAU,CAAC;YACV,IAAM,kBAAkB,GAAG,MAAM,CAAC,KAAI,CAAC,aAAa,CAAC;iBACnD,MAAM,CAAC,OAAK,8BAAgC,CAAC;iBAC7C,IAAI,EAAE,CAAC;YACT,IAAM,cAAc,GAAG,gBAAgB,CAAC,kBAAyB,CAAC,CAAC;YACnE,IACC,cAAc,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,QAAQ;gBACxD,cAAc,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,GAAG,EACjD;gBACD,OAAO,CAAC,KAAK,CACZ,4FAA4F,CAC5F,CAAC;aACF;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,kCAAe,GAAf;QACC,6EAA6E;QAC7E,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE;YAC5B,IAAA,8FAAmB,CAGzB;YACF,IAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClE,IAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,SAAS,CACpD,MAAI,gBAAgB,WAAQ,CAC5B,CAAC;YAEF,6DAA6D;YAC7D,IAAI,gBAAc,GAAG,CAAC,CAAC;YACvB,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,UAAU,QAAQ;gBAC1C,gBAAc,IAAI,MAAM,CACvB,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;oBAC5C,OAAO,EAAE,IAAI;iBACb,CAAC,CAAC,MAAM,CACT,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,kDAAkD;YAClD,mEAAmE;YACnE,gBAAc,IAAI,WAAW;gBAC5B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAc,CAAC;gBAC3D,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;SACrD;IACF,CAAC;IAED,mCAAgB,GAAhB;QACC,OAAO,IAAI,CAAC,aAAa,CAAC;IAC3B,CAAC;IAED,qCAAkB,GAAlB;QAAA,iBAgBC;QAfA,IAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAEhC,IAAI,CAAC,MAAM,EAAE;YACZ,OAAO;SACP;QAED,MAAM,CAAC,MAAM,CAAC;aACZ,EAAE,CAAC,WAAW,EAAE;YAChB,iBAAiB;YACjB,KAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC5D,CAAC,CAAC;aACD,EAAE,CAAC,UAAU,EAAE;YACf,iBAAiB;YACjB,KAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC;IAED,oCAAiB,GAAjB;QAAA,iBA+BC;QA9BA,IAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAEhC,IAAI,CAAC,MAAM,EAAE;YACZ,OAAO;SACP;QAED,8CAA8C;QAC9C,IAAI,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC;QACxC,IAAI,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC;QAE1C,+BAA+B;QAC/B,IAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAC,OAAO,EAAE,QAAQ;YACvD,IAAI,CAAC,MAAM,EAAE;gBACZ,OAAO;aACP;YAED,IACC,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC;gBACjD,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,EAClD;gBACD,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC;gBACpC,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC;gBAEtC,KAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;aACxD;QACF,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,kDAAkD;QAClD,IAAM,cAAc,GAAG,IAAI,cAAc,CAAC,cAAc,CAAC,CAAC;QAC1D,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IACF,eAAC;AAAD,CAAC,AAheD,CAA8B,OAAO,GAgepC","sourcesContent":["// Internal Imports\nimport { Service } from '../service';\nimport { Events } from './../../interfaces';\n\n// D3 Imports\nimport { select, Selection } from 'd3-selection';\nimport { Tools } from '../../tools';\n\n// import the settings for the css prefix\nimport { carbonPrefix } from '../../configuration-non-customizable';\n\n// MISC\nimport ResizeObserver from 'resize-observer-polyfill';\n\nimport domToImage from 'dom-to-image';\n\nconst CSS_VERIFIER_ELEMENT_CLASSNAME = 'DONT_STYLE_ME_css_styles_verifier';\n\ninterface getSVGElementSizeOptions {\n\tuseAttrs?: boolean;\n\tuseClientDimensions?: boolean;\n\tuseBBox?: boolean;\n\tuseBoundingRect?: boolean;\n}\n\nexport class DOMUtils extends Service {\n\t// Initialized in init\n\tprivate chartID;\n\n\tconstructor(model: any, services: any) {\n\t\tsuper(model, services);\n\t}\n\n\tstatic getHTMLElementSize(element: HTMLElement) {\n\t\treturn {\n\t\t\twidth: element.clientWidth,\n\t\t\theight: element.clientHeight,\n\t\t};\n\t}\n\n\tstatic getSVGElementSize(\n\t\tsvgSelector: Selection<any, any, any, any>,\n\t\toptions: getSVGElementSizeOptions = {\n\t\t\tuseAttrs: false,\n\t\t\tuseClientDimensions: false,\n\t\t\tuseBBox: false,\n\t\t\tuseBoundingRect: false,\n\t\t}\n\t) {\n\t\tif (!svgSelector.attr) {\n\t\t\tsvgSelector = select(svgSelector as any);\n\t\t}\n\n\t\tconst finalDimensions = {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t};\n\n\t\tconst validateAndSetDimensions = (dimensions) => {\n\t\t\tif (dimensions) {\n\t\t\t\tObject.keys(finalDimensions).forEach((dimensionKey) => {\n\t\t\t\t\tif (dimensions[dimensionKey]) {\n\t\t\t\t\t\tconst dimension = dimensions[dimensionKey];\n\t\t\t\t\t\tconst dimensionNumber = parseFloat(dimension);\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tdimension &&\n\t\t\t\t\t\t\tdimensionNumber > finalDimensions[dimensionKey] &&\n\t\t\t\t\t\t\t('' + dimension).indexOf('%') === -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tfinalDimensions[dimensionKey] = dimensionNumber;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tconst attrDimensions = {\n\t\t\twidth: svgSelector.attr('width'),\n\t\t\theight: svgSelector.attr('height'),\n\t\t};\n\n\t\tlet bbox, bboxDimensions, boundingRect, boundingRectDimensions;\n\t\t// In many versions of Firefox\n\t\t// getBBox will cause an \"NSFailure\" error\n\t\ttry {\n\t\t\tbbox = svgSelector.node().getBBox();\n\t\t\tbboxDimensions = {\n\t\t\t\twidth: bbox.width,\n\t\t\t\theight: bbox.height,\n\t\t\t};\n\t\t} catch (e) {}\n\n\t\ttry {\n\t\t\tboundingRect = svgSelector.node().getBoundingClientRect();\n\t\t\tboundingRectDimensions = {\n\t\t\t\twidth: boundingRect.width,\n\t\t\t\theight: boundingRect.height,\n\t\t\t};\n\t\t} catch (e) {}\n\n\t\tconst clientDimensions = {\n\t\t\twidth: svgSelector.node().clientWidth,\n\t\t\theight: svgSelector.node().clientHeight,\n\t\t};\n\n\t\t// If both attribute values are numbers\n\t\t// And not percentages or NaN\n\t\tif (options) {\n\t\t\tif (options.useAttrs) {\n\t\t\t\tvalidateAndSetDimensions(attrDimensions);\n\n\t\t\t\tif (finalDimensions.width > 0 && finalDimensions.height > 0) {\n\t\t\t\t\treturn finalDimensions;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options.useClientDimensions) {\n\t\t\t\tvalidateAndSetDimensions(clientDimensions);\n\n\t\t\t\tif (finalDimensions.width > 0 && finalDimensions.height > 0) {\n\t\t\t\t\treturn clientDimensions;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options.useBBox) {\n\t\t\t\tvalidateAndSetDimensions(bboxDimensions);\n\n\t\t\t\tif (finalDimensions.width > 0 && finalDimensions.height > 0) {\n\t\t\t\t\treturn bboxDimensions;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options.useBoundingRect) {\n\t\t\t\tvalidateAndSetDimensions(boundingRectDimensions);\n\n\t\t\t\tif (finalDimensions.width > 0 && finalDimensions.height > 0) {\n\t\t\t\t\treturn boundingRectDimensions;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tconst nativeDimensions = {\n\t\t\t\twidth: Tools.getProperty(\n\t\t\t\t\tsvgSelector.node(),\n\t\t\t\t\t'width',\n\t\t\t\t\t'baseVal',\n\t\t\t\t\t'value'\n\t\t\t\t),\n\t\t\t\theight: Tools.getProperty(\n\t\t\t\t\tsvgSelector.node(),\n\t\t\t\t\t'height',\n\t\t\t\t\t'baseVal',\n\t\t\t\t\t'value'\n\t\t\t\t),\n\t\t\t};\n\n\t\t\tvalidateAndSetDimensions(nativeDimensions);\n\t\t} catch (e) {\n\t\t\tvalidateAndSetDimensions(clientDimensions);\n\t\t\tvalidateAndSetDimensions(bboxDimensions);\n\t\t\tvalidateAndSetDimensions(attrDimensions);\n\t\t}\n\n\t\treturn finalDimensions;\n\t}\n\n\tstatic appendOrSelect(parent, query) {\n\t\tconst selection = parent.select(`${query}`);\n\n\t\tif (selection.empty()) {\n\t\t\t// see if there is an id\n\t\t\tlet querySections = query.split('#');\n\t\t\tlet elementToAppend;\n\t\t\tlet id;\n\t\t\t// if there is an id\n\t\t\tif (querySections.length === 2) {\n\t\t\t\t// take out the element to append\n\t\t\t\telementToAppend = querySections[0];\n\t\t\t\t// split it by classes\n\t\t\t\tquerySections = querySections[1].split('.');\n\t\t\t\t// the first string is the id\n\t\t\t\tid = querySections[0];\n\t\t\t} else {\n\t\t\t\tquerySections = query.split('.');\n\t\t\t\telementToAppend = querySections[0];\n\t\t\t}\n\n\t\t\treturn parent\n\t\t\t\t.append(elementToAppend)\n\t\t\t\t.attr('id', id)\n\t\t\t\t.attr('class', querySections.slice(1).join(' '));\n\t\t}\n\n\t\treturn selection;\n\t}\n\n\tprotected mainContainer: HTMLElement;\n\tprotected width: string;\n\tprotected height: string;\n\n\tinit() {\n\t\t// Add width & height to the chart holder if necessary, and add a classname\n\t\tthis.styleHolderElement();\n\n\t\t// Initialize chart ID\n\t\tthis.initializeID();\n\n\t\tthis.addMainContainer();\n\t\tthis.verifyCSSStylesBeingApplied();\n\n\t\tif (this.model.getOptions().resizable) {\n\t\t\tthis.addResizeListener();\n\t\t}\n\n\t\tthis.addHolderListeners();\n\n\t\tthis.handleFullscreenChange();\n\t}\n\n\tgetChartID() {\n\t\treturn this.chartID;\n\t}\n\n\tgenerateElementIDString(originalID) {\n\t\treturn `chart-${this.chartID}-${originalID}`;\n\t}\n\n\tprivate initializeID() {\n\t\tthis.chartID = Math.floor(\n\t\t\t(1 + Math.random()) * 0x1000000000000\n\t\t).toString(16);\n\t}\n\n\taddMainContainer() {\n\t\tconst options = this.model.getOptions();\n\t\tconst chartsprefix = Tools.getProperty(options, 'style', 'prefix');\n\n\t\tconst mainContainer = select(this.getHolder())\n\t\t\t.append('div')\n\t\t\t.classed(`${carbonPrefix}--${chartsprefix}--chart-wrapper`, true)\n\t\t\t.attr('id', `chart-${this.getChartID()}`)\n\t\t\t.style('height', '100%')\n\t\t\t.style('width', '100%');\n\n\t\tmainContainer.append('g').attr('class', CSS_VERIFIER_ELEMENT_CLASSNAME);\n\n\t\tthis.mainContainer = mainContainer.node();\n\t}\n\n\tupdate() {\n\t\tthis.styleHolderElement();\n\t}\n\n\tstyleHolderElement() {\n\t\tconst holderElement = this.getHolder() as HTMLElement;\n\n\t\t// Add class to chart holder\n\t\tselect(this.getHolder()).classed(`${carbonPrefix}--chart-holder`, true);\n\n\t\t// In order for resize events to not clash with these updates\n\t\t// We'll check if the width & height values passed in options\n\t\t// Have changed, before setting them to the holder\n\t\tconst { width, height } = this.model.getOptions();\n\t\tif (width !== this.width) {\n\t\t\t// Apply formatted width attribute to chart\n\t\t\tholderElement.style.width = width;\n\n\t\t\tthis.width = width;\n\t\t}\n\n\t\tif (height !== this.height) {\n\t\t\t// Apply formatted width attribute to chart\n\t\t\tholderElement.style.height = height;\n\n\t\t\tthis.height = height;\n\t\t}\n\t}\n\n\tgetHolder() {\n\t\treturn this.model.get('holder');\n\t}\n\n\texportToJPG() {\n\t\tconst self = this;\n\n\t\tconst holder = this.getHolder();\n\t\tconst holderSelection = select(holder);\n\t\tholderSelection.classed('filled', true);\n\n\t\tdomToImage\n\t\t\t.toJpeg(this.getMainContainer(), {\n\t\t\t\tbgcolor:\n\t\t\t\t\ttypeof window !== 'undefined'\n\t\t\t\t\t\t? window\n\t\t\t\t\t\t\t\t.getComputedStyle(holder)\n\t\t\t\t\t\t\t\t.getPropertyValue('background-color')\n\t\t\t\t\t\t: undefined,\n\t\t\t\tquality: 1,\n\t\t\t\t// Remove the toolbar\n\t\t\t\tfilter: (node) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tnode.classList &&\n\t\t\t\t\t\tnode.classList.contains('cds--cc--toolbar')\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t})\n\t\t\t.then(function (dataUrl) {\n\t\t\t\tself.services.files.downloadImage(dataUrl, 'myChart.jpg');\n\t\t\t\tholderSelection.classed('filled', false);\n\t\t\t});\n\t}\n\n\texportToPNG() {\n\t\tconst self = this;\n\n\t\tconst holder = this.getHolder();\n\t\tconst holderSelection = select(holder);\n\t\tholderSelection.classed('filled', true);\n\n\t\tdomToImage\n\t\t\t.toPng(this.getMainContainer(), {\n\t\t\t\tbgcolor:\n\t\t\t\t\ttypeof window !== 'undefined'\n\t\t\t\t\t\t? window\n\t\t\t\t\t\t\t\t.getComputedStyle(holder)\n\t\t\t\t\t\t\t\t.getPropertyValue('background-color')\n\t\t\t\t\t\t: undefined,\n\t\t\t\tquality: 1,\n\t\t\t\t// Remove the toolbar\n\t\t\t\tfilter: (node) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tnode.classList &&\n\t\t\t\t\t\tnode.classList.contains('cds--cc--toolbar')\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t})\n\t\t\t.then(function (dataUrl) {\n\t\t\t\tself.services.files.downloadImage(dataUrl, 'myChart.png');\n\t\t\t\tholderSelection.classed('filled', false);\n\t\t\t})\n\t\t\t.catch(function (error) {\n\t\t\t\tconsole.error('oops, something went wrong!', error);\n\t\t\t});\n\t}\n\n\ttoggleFullscreen() {\n\t\tconst holder = this.getHolder();\n\t\tconst holderSelection = select(holder);\n\n\t\tconst isFullScreen = holderSelection.classed('fullscreen');\n\n\t\tif (\n\t\t\tisFullScreen &&\n\t\t\t(document.fullscreenElement ||\n\t\t\t\tdocument['webkitFullscreenElement'] ||\n\t\t\t\tdocument['mozFullScreenElement'] ||\n\t\t\t\tdocument['msFullscreenElement'])\n\t\t) {\n\t\t\t// Call the correct function depending on the browser\n\t\t\tif (document.exitFullscreen) {\n\t\t\t\tdocument.exitFullscreen();\n\t\t\t} else if (document['webkitExitFullscreen']) {\n\t\t\t\tdocument['webkitExitFullscreen']();\n\t\t\t} else if (document['mozCancelFullScreen']) {\n\t\t\t\tdocument['mozCancelFullScreen']();\n\t\t\t} else if (document['msExitFullscreen']) {\n\t\t\t\tdocument['msExitFullscreen']();\n\t\t\t}\n\t\t} else {\n\t\t\t// Call the correct function depending on the browser\n\t\t\tif (holder.requestFullscreen) {\n\t\t\t\tholder.requestFullscreen();\n\t\t\t} else if (holder.webkitRequestFullscreen) {\n\t\t\t\tholder.webkitRequestFullscreen();\n\t\t\t} else if (holder.mozRequestFullScreen) {\n\t\t\t\tholder.mozRequestFullScreen();\n\t\t\t} else if (holder.msRequestFullscreen) {\n\t\t\t\tholder.msRequestFullscreen();\n\t\t\t}\n\t\t}\n\t}\n\n\thandleFullscreenChange() {\n\t\tdocument.addEventListener('fullscreenchange', () => {\n\t\t\tconst holderSelection = select(this.getHolder());\n\t\t\tconst isFullScreen = holderSelection.classed('fullscreen');\n\n\t\t\t// Toggle the `fullscreen` classname\n\t\t\tholderSelection.classed('fullscreen', !isFullScreen);\n\t\t});\n\t}\n\n\tverifyCSSStylesBeingApplied() {\n\t\t// setTimeout is needed here since in `addSVGElement()` we're appending the\n\t\t// CSS verifier element, and need to allow some time for it to become available\n\t\t// in the DOM\n\t\tsetTimeout(() => {\n\t\t\tconst cssVerifierElement = select(this.mainContainer)\n\t\t\t\t.select(`g.${CSS_VERIFIER_ELEMENT_CLASSNAME}`)\n\t\t\t\t.node();\n\t\t\tconst computedStyles = getComputedStyle(cssVerifierElement as any);\n\t\t\tif (\n\t\t\t\tcomputedStyles.getPropertyValue('overflow') !== 'hidden' ||\n\t\t\t\tcomputedStyles.getPropertyValue('opacity') !== '0'\n\t\t\t) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t'Missing CSS styles for Carbon Charts. Please read the Carbon Charts getting started guide.'\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\tsetSVGMaxHeight() {\n\t\t// if there is a set height on the holder, leave the chart svg height at 100%\n\t\tif (!this.model.getOptions().height) {\n\t\t\tconst { height: chartHeight } = DOMUtils.getSVGElementSize(\n\t\t\t\tselect(this.mainContainer),\n\t\t\t\t{ useBBox: true }\n\t\t\t);\n\t\t\tconst chartSVGSelector = select(this.mainContainer).attr('class');\n\t\t\tconst children = select(this.mainContainer).selectAll(\n\t\t\t\t`.${chartSVGSelector} > svg`\n\t\t\t);\n\n\t\t\t// get the height of the children SVGs (spacers, titles, etc)\n\t\t\tlet childrenHeight = 0;\n\t\t\tchildren.nodes().forEach(function (childSVG) {\n\t\t\t\tchildrenHeight += Number(\n\t\t\t\t\tDOMUtils.getSVGElementSize(select(childSVG), {\n\t\t\t\t\t\tuseBBox: true,\n\t\t\t\t\t}).height\n\t\t\t\t);\n\t\t\t});\n\n\t\t\t// set the chart svg height to the children height\n\t\t\t// forcing the chart not to take up any more space than it requires\n\t\t\tchildrenHeight <= chartHeight\n\t\t\t\t? select(this.mainContainer).attr('height', childrenHeight)\n\t\t\t\t: select(this.mainContainer).attr('height', '100%');\n\t\t}\n\t}\n\n\tgetMainContainer() {\n\t\treturn this.mainContainer;\n\t}\n\n\taddHolderListeners() {\n\t\tconst holder = this.getHolder();\n\n\t\tif (!holder) {\n\t\t\treturn;\n\t\t}\n\n\t\tselect(holder)\n\t\t\t.on('mouseover', () => {\n\t\t\t\t// Dispatch event\n\t\t\t\tthis.services.events.dispatchEvent(Events.Chart.MOUSEOVER);\n\t\t\t})\n\t\t\t.on('mouseout', () => {\n\t\t\t\t// Dispatch event\n\t\t\t\tthis.services.events.dispatchEvent(Events.Chart.MOUSEOUT);\n\t\t\t});\n\t}\n\n\taddResizeListener() {\n\t\tconst holder = this.getHolder();\n\n\t\tif (!holder) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Grab current dimensions of the chart holder\n\t\tlet containerWidth = holder.clientWidth;\n\t\tlet containerHeight = holder.clientHeight;\n\n\t\t// The resize callback function\n\t\tconst resizeCallback = Tools.debounce((entries, observer) => {\n\t\t\tif (!holder) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tMath.abs(containerWidth - holder.clientWidth) > 1 ||\n\t\t\t\tMath.abs(containerHeight - holder.clientHeight) > 1\n\t\t\t) {\n\t\t\t\tcontainerWidth = holder.clientWidth;\n\t\t\t\tcontainerHeight = holder.clientHeight;\n\n\t\t\t\tthis.services.events.dispatchEvent(Events.Chart.RESIZE);\n\t\t\t}\n\t\t}, 12.5);\n\n\t\t// Observe the behaviour of resizing on the holder\n\t\tconst resizeObserver = new ResizeObserver(resizeCallback);\n\t\tresizeObserver.observe(holder);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dom-utils.js","sourceRoot":"","sources":["dom-utils.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Service } from '../service';\nimport { Events } from './../../interfaces';\n\n// D3 Imports\nimport { select, Selection } from 'd3-selection';\nimport { Tools } from '../../tools';\n\n// import the settings for the css prefix\nimport { carbonPrefix } from '../../configuration-non-customizable';\n\n// MISC\nimport ResizeObserver from 'resize-observer-polyfill';\n\nimport domToImage from './dom-to-image';\n\nconst CSS_VERIFIER_ELEMENT_CLASSNAME = 'DONT_STYLE_ME_css_styles_verifier';\n\ninterface getSVGElementSizeOptions {\n\tuseAttrs?: boolean;\n\tuseClientDimensions?: boolean;\n\tuseBBox?: boolean;\n\tuseBoundingRect?: boolean;\n}\n\nexport class DOMUtils extends Service {\n\t// Initialized in init\n\tprivate chartID;\n\n\tconstructor(model: any, services: any) {\n\t\tsuper(model, services);\n\t}\n\n\tstatic getHTMLElementSize(element: HTMLElement) {\n\t\treturn {\n\t\t\twidth: element.clientWidth,\n\t\t\theight: element.clientHeight,\n\t\t};\n\t}\n\n\tstatic getSVGElementSize(\n\t\tsvgSelector: Selection<any, any, any, any>,\n\t\toptions: getSVGElementSizeOptions = {\n\t\t\tuseAttrs: false,\n\t\t\tuseClientDimensions: false,\n\t\t\tuseBBox: false,\n\t\t\tuseBoundingRect: false,\n\t\t}\n\t) {\n\t\tif (!svgSelector.attr) {\n\t\t\tsvgSelector = select(svgSelector as any);\n\t\t}\n\n\t\tconst finalDimensions = {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t};\n\n\t\tconst validateAndSetDimensions = (dimensions) => {\n\t\t\tif (dimensions) {\n\t\t\t\tObject.keys(finalDimensions).forEach((dimensionKey) => {\n\t\t\t\t\tif (dimensions[dimensionKey]) {\n\t\t\t\t\t\tconst dimension = dimensions[dimensionKey];\n\t\t\t\t\t\tconst dimensionNumber = parseFloat(dimension);\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tdimension &&\n\t\t\t\t\t\t\tdimensionNumber > finalDimensions[dimensionKey] &&\n\t\t\t\t\t\t\t('' + dimension).indexOf('%') === -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tfinalDimensions[dimensionKey] = dimensionNumber;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tconst attrDimensions = {\n\t\t\twidth: svgSelector.attr('width'),\n\t\t\theight: svgSelector.attr('height'),\n\t\t};\n\n\t\tlet bbox, bboxDimensions, boundingRect, boundingRectDimensions;\n\t\t// In many versions of Firefox\n\t\t// getBBox will cause an \"NSFailure\" error\n\t\ttry {\n\t\t\tbbox = svgSelector.node().getBBox();\n\t\t\tbboxDimensions = {\n\t\t\t\twidth: bbox.width,\n\t\t\t\theight: bbox.height,\n\t\t\t};\n\t\t} catch (e) {}\n\n\t\ttry {\n\t\t\tboundingRect = svgSelector.node().getBoundingClientRect();\n\t\t\tboundingRectDimensions = {\n\t\t\t\twidth: boundingRect.width,\n\t\t\t\theight: boundingRect.height,\n\t\t\t};\n\t\t} catch (e) {}\n\n\t\tconst clientDimensions = {\n\t\t\twidth: svgSelector.node().clientWidth,\n\t\t\theight: svgSelector.node().clientHeight,\n\t\t};\n\n\t\t// If both attribute values are numbers\n\t\t// And not percentages or NaN\n\t\tif (options) {\n\t\t\tif (options.useAttrs) {\n\t\t\t\tvalidateAndSetDimensions(attrDimensions);\n\n\t\t\t\tif (finalDimensions.width > 0 && finalDimensions.height > 0) {\n\t\t\t\t\treturn finalDimensions;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options.useClientDimensions) {\n\t\t\t\tvalidateAndSetDimensions(clientDimensions);\n\n\t\t\t\tif (finalDimensions.width > 0 && finalDimensions.height > 0) {\n\t\t\t\t\treturn clientDimensions;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options.useBBox) {\n\t\t\t\tvalidateAndSetDimensions(bboxDimensions);\n\n\t\t\t\tif (finalDimensions.width > 0 && finalDimensions.height > 0) {\n\t\t\t\t\treturn bboxDimensions;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options.useBoundingRect) {\n\t\t\t\tvalidateAndSetDimensions(boundingRectDimensions);\n\n\t\t\t\tif (finalDimensions.width > 0 && finalDimensions.height > 0) {\n\t\t\t\t\treturn boundingRectDimensions;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tconst nativeDimensions = {\n\t\t\t\twidth: Tools.getProperty(\n\t\t\t\t\tsvgSelector.node(),\n\t\t\t\t\t'width',\n\t\t\t\t\t'baseVal',\n\t\t\t\t\t'value'\n\t\t\t\t),\n\t\t\t\theight: Tools.getProperty(\n\t\t\t\t\tsvgSelector.node(),\n\t\t\t\t\t'height',\n\t\t\t\t\t'baseVal',\n\t\t\t\t\t'value'\n\t\t\t\t),\n\t\t\t};\n\n\t\t\tvalidateAndSetDimensions(nativeDimensions);\n\t\t} catch (e) {\n\t\t\tvalidateAndSetDimensions(clientDimensions);\n\t\t\tvalidateAndSetDimensions(bboxDimensions);\n\t\t\tvalidateAndSetDimensions(attrDimensions);\n\t\t}\n\n\t\treturn finalDimensions;\n\t}\n\n\tstatic appendOrSelect(parent, query) {\n\t\tconst selection = parent.select(`${query}`);\n\n\t\tif (selection.empty()) {\n\t\t\t// see if there is an id\n\t\t\tlet querySections = query.split('#');\n\t\t\tlet elementToAppend;\n\t\t\tlet id;\n\t\t\t// if there is an id\n\t\t\tif (querySections.length === 2) {\n\t\t\t\t// take out the element to append\n\t\t\t\telementToAppend = querySections[0];\n\t\t\t\t// split it by classes\n\t\t\t\tquerySections = querySections[1].split('.');\n\t\t\t\t// the first string is the id\n\t\t\t\tid = querySections[0];\n\t\t\t} else {\n\t\t\t\tquerySections = query.split('.');\n\t\t\t\telementToAppend = querySections[0];\n\t\t\t}\n\n\t\t\treturn parent\n\t\t\t\t.append(elementToAppend)\n\t\t\t\t.attr('id', id)\n\t\t\t\t.attr('class', querySections.slice(1).join(' '));\n\t\t}\n\n\t\treturn selection;\n\t}\n\n\tprotected mainContainer: HTMLElement;\n\tprotected width: string;\n\tprotected height: string;\n\n\tinit() {\n\t\t// Add width & height to the chart holder if necessary, and add a classname\n\t\tthis.styleHolderElement();\n\n\t\t// Initialize chart ID\n\t\tthis.initializeID();\n\n\t\tthis.addMainContainer();\n\t\tthis.verifyCSSStylesBeingApplied();\n\n\t\tif (this.model.getOptions().resizable) {\n\t\t\tthis.addResizeListener();\n\t\t}\n\n\t\tthis.addHolderListeners();\n\n\t\tthis.handleFullscreenChange();\n\t}\n\n\tgetChartID() {\n\t\treturn this.chartID;\n\t}\n\n\tgenerateElementIDString(originalID) {\n\t\treturn `chart-${this.chartID}-${originalID}`;\n\t}\n\n\tprivate initializeID() {\n\t\tthis.chartID = Math.floor(\n\t\t\t(1 + Math.random()) * 0x1000000000000\n\t\t).toString(16);\n\t}\n\n\taddMainContainer() {\n\t\tconst options = this.model.getOptions();\n\t\tconst chartsprefix = Tools.getProperty(options, 'style', 'prefix');\n\n\t\tconst mainContainer = select(this.getHolder())\n\t\t\t.append('div')\n\t\t\t.classed(`${carbonPrefix}--${chartsprefix}--chart-wrapper`, true)\n\t\t\t.attr('id', `chart-${this.getChartID()}`)\n\t\t\t.style('height', '100%')\n\t\t\t.style('width', '100%');\n\n\t\tmainContainer.append('g').attr('class', CSS_VERIFIER_ELEMENT_CLASSNAME);\n\n\t\tthis.mainContainer = mainContainer.node();\n\t}\n\n\tupdate() {\n\t\tthis.styleHolderElement();\n\t}\n\n\tstyleHolderElement() {\n\t\tconst holderElement = this.getHolder() as HTMLElement;\n\n\t\t// Add class to chart holder\n\t\tselect(this.getHolder()).classed(`${carbonPrefix}--chart-holder`, true);\n\n\t\t// In order for resize events to not clash with these updates\n\t\t// We'll check if the width & height values passed in options\n\t\t// Have changed, before setting them to the holder\n\t\tconst { width, height } = this.model.getOptions();\n\t\tif (width !== this.width) {\n\t\t\t// Apply formatted width attribute to chart\n\t\t\tholderElement.style.width = width;\n\n\t\t\tthis.width = width;\n\t\t}\n\n\t\tif (height !== this.height) {\n\t\t\t// Apply formatted width attribute to chart\n\t\t\tholderElement.style.height = height;\n\n\t\t\tthis.height = height;\n\t\t}\n\t}\n\n\tgetHolder() {\n\t\treturn this.model.get('holder');\n\t}\n\n\texportToJPG() {\n\t\tconst self = this;\n\n\t\tconst holder = this.getHolder();\n\t\tconst holderSelection = select(holder);\n\t\tholderSelection.classed('filled', true);\n\n\t\tdomToImage\n\t\t\t.toJpeg(this.getMainContainer(), {\n\t\t\t\tbgcolor:\n\t\t\t\t\ttypeof window !== 'undefined'\n\t\t\t\t\t\t? window\n\t\t\t\t\t\t\t\t.getComputedStyle(holder)\n\t\t\t\t\t\t\t\t.getPropertyValue('background-color')\n\t\t\t\t\t\t: undefined,\n\t\t\t\tquality: 1,\n\t\t\t\t// Remove the toolbar\n\t\t\t\tfilter: (node) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tnode.classList &&\n\t\t\t\t\t\tnode.classList.contains('cds--cc--toolbar')\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t})\n\t\t\t.then(function (dataUrl) {\n\t\t\t\tself.services.files.downloadImage(dataUrl, 'myChart.jpg');\n\t\t\t\tholderSelection.classed('filled', false);\n\t\t\t});\n\t}\n\n\texportToPNG() {\n\t\tconst self = this;\n\n\t\tconst holder = this.getHolder();\n\t\tconst holderSelection = select(holder);\n\t\tholderSelection.classed('filled', true);\n\n\t\tdomToImage\n\t\t\t.toPng(this.getMainContainer(), {\n\t\t\t\tbgcolor:\n\t\t\t\t\ttypeof window !== 'undefined'\n\t\t\t\t\t\t? window\n\t\t\t\t\t\t\t\t.getComputedStyle(holder)\n\t\t\t\t\t\t\t\t.getPropertyValue('background-color')\n\t\t\t\t\t\t: undefined,\n\t\t\t\tquality: 1,\n\t\t\t\t// Remove the toolbar\n\t\t\t\tfilter: (node) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tnode.classList &&\n\t\t\t\t\t\tnode.classList.contains('cds--cc--toolbar')\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t})\n\t\t\t.then(function (dataUrl) {\n\t\t\t\tself.services.files.downloadImage(dataUrl, 'myChart.png');\n\t\t\t\tholderSelection.classed('filled', false);\n\t\t\t})\n\t\t\t.catch(function (error) {\n\t\t\t\tconsole.error('oops, something went wrong!', error);\n\t\t\t});\n\t}\n\n\ttoggleFullscreen() {\n\t\tconst holder = this.getHolder();\n\t\tconst holderSelection = select(holder);\n\n\t\tconst isFullScreen = holderSelection.classed('fullscreen');\n\n\t\tif (\n\t\t\tisFullScreen &&\n\t\t\t(document.fullscreenElement ||\n\t\t\t\tdocument['webkitFullscreenElement'] ||\n\t\t\t\tdocument['mozFullScreenElement'] ||\n\t\t\t\tdocument['msFullscreenElement'])\n\t\t) {\n\t\t\t// Call the correct function depending on the browser\n\t\t\tif (document.exitFullscreen) {\n\t\t\t\tdocument.exitFullscreen();\n\t\t\t} else if (document['webkitExitFullscreen']) {\n\t\t\t\tdocument['webkitExitFullscreen']();\n\t\t\t} else if (document['mozCancelFullScreen']) {\n\t\t\t\tdocument['mozCancelFullScreen']();\n\t\t\t} else if (document['msExitFullscreen']) {\n\t\t\t\tdocument['msExitFullscreen']();\n\t\t\t}\n\t\t} else {\n\t\t\t// Call the correct function depending on the browser\n\t\t\tif (holder.requestFullscreen) {\n\t\t\t\tholder.requestFullscreen();\n\t\t\t} else if (holder.webkitRequestFullscreen) {\n\t\t\t\tholder.webkitRequestFullscreen();\n\t\t\t} else if (holder.mozRequestFullScreen) {\n\t\t\t\tholder.mozRequestFullScreen();\n\t\t\t} else if (holder.msRequestFullscreen) {\n\t\t\t\tholder.msRequestFullscreen();\n\t\t\t}\n\t\t}\n\t}\n\n\thandleFullscreenChange() {\n\t\tdocument.addEventListener('fullscreenchange', () => {\n\t\t\tconst holderSelection = select(this.getHolder());\n\t\t\tconst isFullScreen = holderSelection.classed('fullscreen');\n\n\t\t\t// Toggle the `fullscreen` classname\n\t\t\tholderSelection.classed('fullscreen', !isFullScreen);\n\t\t});\n\t}\n\n\tverifyCSSStylesBeingApplied() {\n\t\t// setTimeout is needed here since in `addSVGElement()` we're appending the\n\t\t// CSS verifier element, and need to allow some time for it to become available\n\t\t// in the DOM\n\t\tsetTimeout(() => {\n\t\t\tconst cssVerifierElement = select(this.mainContainer)\n\t\t\t\t.select(`g.${CSS_VERIFIER_ELEMENT_CLASSNAME}`)\n\t\t\t\t.node();\n\t\t\tconst computedStyles = getComputedStyle(cssVerifierElement as any);\n\t\t\tif (\n\t\t\t\tcomputedStyles.getPropertyValue('overflow') !== 'hidden' ||\n\t\t\t\tcomputedStyles.getPropertyValue('opacity') !== '0'\n\t\t\t) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t'Missing CSS styles for Carbon Charts. Please read the Carbon Charts getting started guide.'\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\tsetSVGMaxHeight() {\n\t\t// if there is a set height on the holder, leave the chart svg height at 100%\n\t\tif (!this.model.getOptions().height) {\n\t\t\tconst { height: chartHeight } = DOMUtils.getSVGElementSize(\n\t\t\t\tselect(this.mainContainer),\n\t\t\t\t{ useBBox: true }\n\t\t\t);\n\t\t\tconst chartSVGSelector = select(this.mainContainer).attr('class');\n\t\t\tconst children = select(this.mainContainer).selectAll(\n\t\t\t\t`.${chartSVGSelector} > svg`\n\t\t\t);\n\n\t\t\t// get the height of the children SVGs (spacers, titles, etc)\n\t\t\tlet childrenHeight = 0;\n\t\t\tchildren.nodes().forEach(function (childSVG) {\n\t\t\t\tchildrenHeight += Number(\n\t\t\t\t\tDOMUtils.getSVGElementSize(select(childSVG), {\n\t\t\t\t\t\tuseBBox: true,\n\t\t\t\t\t}).height\n\t\t\t\t);\n\t\t\t});\n\n\t\t\t// set the chart svg height to the children height\n\t\t\t// forcing the chart not to take up any more space than it requires\n\t\t\tchildrenHeight <= chartHeight\n\t\t\t\t? select(this.mainContainer).attr('height', childrenHeight)\n\t\t\t\t: select(this.mainContainer).attr('height', '100%');\n\t\t}\n\t}\n\n\tgetMainContainer() {\n\t\treturn this.mainContainer;\n\t}\n\n\taddHolderListeners() {\n\t\tconst holder = this.getHolder();\n\n\t\tif (!holder) {\n\t\t\treturn;\n\t\t}\n\n\t\tselect(holder)\n\t\t\t.on('mouseover', () => {\n\t\t\t\t// Dispatch event\n\t\t\t\tthis.services.events.dispatchEvent(Events.Chart.MOUSEOVER);\n\t\t\t})\n\t\t\t.on('mouseout', () => {\n\t\t\t\t// Dispatch event\n\t\t\t\tthis.services.events.dispatchEvent(Events.Chart.MOUSEOUT);\n\t\t\t});\n\t}\n\n\taddResizeListener() {\n\t\tconst holder = this.getHolder();\n\n\t\tif (!holder) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Grab current dimensions of the chart holder\n\t\tlet containerWidth = holder.clientWidth;\n\t\tlet containerHeight = holder.clientHeight;\n\n\t\t// The resize callback function\n\t\tconst resizeCallback = Tools.debounce((entries, observer) => {\n\t\t\tif (!holder) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tMath.abs(containerWidth - holder.clientWidth) > 1 ||\n\t\t\t\tMath.abs(containerHeight - holder.clientHeight) > 1\n\t\t\t) {\n\t\t\t\tcontainerWidth = holder.clientWidth;\n\t\t\t\tcontainerHeight = holder.clientHeight;\n\n\t\t\t\tthis.services.events.dispatchEvent(Events.Chart.RESIZE);\n\t\t\t}\n\t\t}, 12.5);\n\n\t\t// Observe the behaviour of resizing on the holder\n\t\tconst resizeObserver = new ResizeObserver(resizeCallback);\n\t\tresizeObserver.observe(holder);\n\t}\n}\n"]}
|
package/tsconfig.tsbuildinfo
CHANGED
|
@@ -185,8 +185,12 @@
|
|
|
185
185
|
"version": "6dc3970c1e09b6f0ea2389e69e2dc11906dd4a1b82f7c024504439932facbd3a",
|
|
186
186
|
"signature": "6dc3970c1e09b6f0ea2389e69e2dc11906dd4a1b82f7c024504439932facbd3a"
|
|
187
187
|
},
|
|
188
|
+
"../src/services/essentials/dom-to-image.js": {
|
|
189
|
+
"version": "3f631482ba4beb2f1d8bcc973bfc3563ff641b1b86d3eadd7ee4800d0b41fdf6",
|
|
190
|
+
"signature": "1d9a63e1a4536396484594c7290d407b4d9a5352593754b1a76979b6697f5af3"
|
|
191
|
+
},
|
|
188
192
|
"../src/services/essentials/dom-utils.ts": {
|
|
189
|
-
"version": "
|
|
193
|
+
"version": "a7f07d0f54a0a86f9eefa33a2b694fb8cabe14a41dbe7d1226f98269a5a318f9",
|
|
190
194
|
"signature": "7cfb6238b248b340dfc2ce88914f41f1af338e66379588012fab52cc7fdc2c6d"
|
|
191
195
|
},
|
|
192
196
|
"../src/services/essentials/events.ts": {
|
|
@@ -896,6 +900,7 @@
|
|
|
896
900
|
"../node_modules/@types",
|
|
897
901
|
"../custom.d.ts"
|
|
898
902
|
],
|
|
903
|
+
"allowJs": true,
|
|
899
904
|
"configFilePath": "../src/tsconfig.json"
|
|
900
905
|
},
|
|
901
906
|
"referencedMap": {
|
|
@@ -1241,6 +1246,13 @@
|
|
|
1241
1246
|
"../node_modules/@types/node/util.d.ts",
|
|
1242
1247
|
"../node_modules/@types/node/ts3.2/util.d.ts"
|
|
1243
1248
|
],
|
|
1249
|
+
"../src/services/essentials/dom-to-image.js": [
|
|
1250
|
+
"../../../node_modules/date-fns/typings.d.ts",
|
|
1251
|
+
"../node_modules/@types/node/fs.d.ts",
|
|
1252
|
+
"../node_modules/@types/node/ts3.2/fs.d.ts",
|
|
1253
|
+
"../node_modules/@types/node/util.d.ts",
|
|
1254
|
+
"../node_modules/@types/node/ts3.2/util.d.ts"
|
|
1255
|
+
],
|
|
1244
1256
|
"../src/services/essentials/dom-utils.ts": [
|
|
1245
1257
|
"../src/services/service.ts",
|
|
1246
1258
|
"../src/interfaces/index.ts",
|
|
@@ -1248,6 +1260,7 @@
|
|
|
1248
1260
|
"../src/tools.ts",
|
|
1249
1261
|
"../src/configuration-non-customizable.ts",
|
|
1250
1262
|
"../../../node_modules/resize-observer-polyfill/src/index.d.ts",
|
|
1263
|
+
"../src/services/essentials/dom-to-image.js",
|
|
1251
1264
|
"../../../node_modules/date-fns/typings.d.ts",
|
|
1252
1265
|
"../node_modules/@types/node/fs.d.ts",
|
|
1253
1266
|
"../node_modules/@types/node/ts3.2/fs.d.ts",
|
|
@@ -4494,6 +4507,7 @@
|
|
|
4494
4507
|
"../src/model/model.ts",
|
|
4495
4508
|
"../src/services/service.ts",
|
|
4496
4509
|
"../../../node_modules/resize-observer-polyfill/src/index.d.ts",
|
|
4510
|
+
"../src/services/essentials/dom-to-image.js",
|
|
4497
4511
|
"../src/services/essentials/dom-utils.ts",
|
|
4498
4512
|
"../src/services/essentials/events.ts",
|
|
4499
4513
|
"../src/services/essentials/files.ts",
|