blob: 10e78e0e9d6896fd8f50beb847830c729a1f5435 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
export function fireEvent(node, eventName) {
let doc = {};
if (node.ownerDocument) {
doc = node.ownerDocument;
} else if (node.nodeType === 9) {
doc = node;
}
if (node.dispatchEvent) {
let eventClass = '';
switch (eventName) {
case 'click':
case 'mousedown':
case 'mouseup':
eventClass = 'MouseEvents';
break;
case 'focus':
case 'change':
case 'blur':
case 'select':
eventClass = 'HTMLEvents';
break;
default:
break;
}
const event = doc.createEvent(eventClass);
event.initEvent(eventName, true, true); // All events created as bubbling and cancelable.
event.synthetic = true; // allow detection of synthetic events
// The second parameter says go ahead with the default action
node.dispatchEvent(event, true);
} else if (node.fireEvent) {
// IE-old school style
const event = doc.createEventObject();
event.synthetic = true; // allow detection of synthetic events
node.fireEvent('on' + eventName, event);
}
}
export function executionEnvironment() {
const canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);
return {
canUseDOM,
canUseWorkers: typeof Worker !== 'undefined',
canUseEventListeners:
canUseDOM && !!(window.addEventListener || window.attachEvent),
canUseViewport: canUseDOM && !!window.screen
};
}
export function loadImages(arr) {
if (!executionEnvironment().canUseDOM) return Promise.reject(Error('no server rendering for new Image'));
const createImg = path => {
const img = new Image();
img.src = path;
img.alt = 'img';
return new Promise(res => {
if (img.naturalWidth) res(img);
img.onload = () => res(img);
img.onerror = () => res(img);
});
};
return Promise.all(arr.map(c => createImg(c)));
}
|