-
-
Notifications
You must be signed in to change notification settings - Fork 384
/
Copy pathindex.js
96 lines (83 loc) · 2.73 KB
/
index.js
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/* eslint-env browser */
/* global __webpack_public_path__ */
/* eslint-disable no-console, camelcase, no-global-assign */
import './initial.css';
import './simple.css';
import classes from './simple.module.css';
console.log('___CLASSES__');
console.log(classes);
function replaceClass(originalClass, newClass) {
const nodes = document.querySelectorAll(`.${originalClass}`);
nodes.forEach((node) => {
const { classList } = node;
classList.remove(originalClass);
classList.add(newClass);
});
}
Object.keys(classes).forEach((localClass) => {
replaceClass(localClass, classes[localClass]);
});
let oldClasses = classes;
if (module.hot) {
module.hot.accept('./simple.module.css', () => {
Object.keys(oldClasses).forEach((localClass) => {
replaceClass(oldClasses[localClass], localClass);
});
Object.keys(classes).forEach((localClass) => {
replaceClass(localClass, classes[localClass]);
});
oldClasses = classes;
// eslint-disable-next-line no-alert
alert('HMR updated CSS module');
});
}
const handleError = (err) => {
document.querySelector('.errors').textContent += `\n${err.toString()}`;
console.error(err);
};
const makeButton = (className, fn, shouldDisable = true) => {
const button = document.querySelector(className);
button.addEventListener('click', () => {
if (shouldDisable) {
button.disabled = true;
}
fn()
.then(() => {
button.disabled = false;
})
.catch(handleError);
});
};
makeButton('.lazy-button', () => import('./lazy.js'));
makeButton('.lazy-button2', () => import('./lazy2.css'));
makeButton('.lazy-module-button', () =>
import('./lazy.module.css').then((module) => {
console.log(module);
document
.querySelector('.lazy-css-module')
// eslint-disable-next-line no-underscore-dangle
.classList.add(module.__esModule ? module.default.style : module.style);
})
);
makeButton('.preloaded-button1', () =>
import(/* webpackChunkName: "preloaded1" */ './preloaded1')
);
makeButton('.preloaded-button2', () =>
import(/* webpackChunkName: "preloaded2" */ './preloaded2')
);
makeButton('.lazy-failure-button', () => import('./lazy-failure.js'), false);
makeButton('.crossorigin', () => {
const originalPublicPath = __webpack_public_path__;
__webpack_public_path__ = 'http://127.0.0.1:8080/dist/';
const promise = import('./crossorigin').then(() => {
const lastTwoElements = Array.from(document.head.children).slice(-2);
const hasCrossorigin = lastTwoElements.every(
(element) => element.crossOrigin === 'anonymous'
);
if (!hasCrossorigin) {
throw new Error('Chunks miss crossorigin="anonymous" attribute.');
}
});
__webpack_public_path__ = originalPublicPath;
return promise;
});