-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathload.js
50 lines (50 loc) · 1.64 KB
/
load.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
function load(url, force) {
var ext = /^.+\.(js|css|less)$/m.exec(url);
return new Promise(function(yes, no) {
if (ext === null || ext === "js" || force === "js") {
var asset = document.createElement("script");
asset.src = url;
asset.onload = () => yes(asset);
asset.onerror = () => no(new Error(`Asset load error for ${url}`));
document.getElementsByTagName("head").append(asset);
}
if (ext === "css" || force === "css") {
var asset = document.createElement("link");
asset.rel = "stylesheet";
asset.type = "type/css";
asset.href = url;
asset.onload = () => yes(asset);
asset.onerror = () => no(new Error(`Asset load error for ${url}`));
document.getElementsByTagName("head").append(asset);
}
if (ext === "less" || force === "less") {
if (typeof less === "undefined") {
load("//cdn.jsdelivr.net/npm/less").then(a => {
window.fetch(url).then(a => {
return a.text();
}).then(a => {
less.render(a).then(a => {
var asset = document.createElement("style");
asset.innerHTML = a.css;
asset.onload = () => yes(asset);
asset.onerror = () => no(new Error(`Asset load error for ${url}`));
document.getElementsByTagName("head").append(asset);
});
});
});
} else {
window.fetch(url).then(a => {
return a.text();
}).then(a => {
less.render(a).then(a => {
var asset = document.createElement("style");
asset.innerHTML = a.css;
asset.onload = () => yes(asset);
asset.onerror = () => no(new Error(`Asset load error for ${url}`));
document.getElementsByTagName("head").append(asset);
});
});
}
}
});
}