aboutsummaryrefslogtreecommitdiffstats
path: root/js/src/fouc.js
blob: 3611ec27e75e9d4b8693b92f3861d580f6274652 (plain) (blame)
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
"use strict";

function getScript(url, integrity, cross_origin) {
    const script = document.createElement("script");
    script.type = "text/javascript";
    script.src = url;
    script.defer = true;

    if (integrity !== undefined) {
        script.integrity = integrity;
    }

    if (cross_origin !== undefined) {
        script.crossOrigin = cross_origin;
    }

    document.getElementsByTagName("head")[0].appendChild(script);
}

function setClass(selector, my_class) {
    const element = document.querySelector(selector);
    // console.log(element);
    element.className = my_class;
}

function removeClass(selector, my_class) {
    const element = document.querySelector(selector);
    const reg = new RegExp(`(^| )${my_class}($| )`, "g");
    element.className = element.className.replace(reg, " ");
}

// hide the html when the page loads, but only if js is turned on.
setClass("html", "prevent-fouc");

// when the DOM has finished loading, unhide the html
document.onreadystatechange = function () {
    if (document.readyState === "interactive") {
        removeClass("html", "prevent-fouc");
        getScript(
            "https://pro.fontawesome.com/releases/v5.0.13/js/all.js", // URL
            "sha384-d84LGg2pm9KhR4mCAs3N29GQ4OYNy+K+FBHX8WhimHpPm86c839++MDABegrZ3gn", // Integrity
            "anonymous" // Cross-origin
        );
        getScript(
            "https://cdnjs.cloudflare.com/ajax/libs/ace/1.3.3/ace.js"
        );
        getScript(
            "https://cdn.jsdelivr.net/npm/flatpickr"
        );
    }
};