Passed
Push — master ( eb17dd...f0e282 )
by Matt
01:13
created

get.js ➔ get   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 39
Code Lines 28

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
cc 1
eloc 28
c 3
b 0
f 0
nc 1
nop 1
dl 0
loc 39
rs 9.208

1 Function

Rating   Name   Duplication   Size   Complexity  
B get.js ➔ ... ➔ http.onreadystatechange 0 34 8
1
/*
2
 *  PyDMXControl: A Python 3 module to control DMX via Python. Featuring fixture profiles and working with uDMX.
3
 *  <https://github.com/MattIPv4/PyDMXControl/>
4
 *  Copyright (C) 2018 Matt Cowley (MattIPv4) ([email protected])
5
 */
6
function getMessageHandle(idBase, dataBase, data) {
7
    var elm = document.getElementById("message-" + idBase);
8
    if (elm) {
9
        clearTimeout(parseInt(elm.getAttribute("data-tm"), 10));
10
        elm.remove();
11
    }
12
    if (dataBase in data) {
13
        elm = document.createElement("h3");
14
        elm.id = "message-" + idBase;
15
        elm.className = "alert";
16
        elm.style.color = (idBase === "error" ? "#DA4453" : "#37BC9B");
17
        elm.innerText = data[dataBase];
18
        var tm = setTimeout(function () {
19
            document.getElementById("message-" + idBase).remove();
20
        }, 15 * 1000);
21
        elm.setAttribute("data-tm", tm.toString(10));
22
        document.body.insertBefore(elm, document.body.children[1]);
23
    }
24
}
25
26
function get(url) {
27
    var http = new XMLHttpRequest();
28
    http.onreadystatechange = function () {
29
        if (http.readyState === 4) {
30
            var data = JSON.parse(http.responseText);
31
            var elm;
32
33
            if ("elements" in data) {
34
                for (var id in data["elements"]) {
35
                    if (!data["elements"].hasOwnProperty(id)) {
36
                        continue;
37
                    }
38
                    var text = data["elements"][id];
39
                    elm = document.getElementById(id);
40
                    if (!elm) {
41
                        continue;
42
                    }
43
                    if (elm.tagName.toLowerCase() === "input") {
44
                        elm.value = text;
45
                    } else {
46
                        elm.innerText = text;
47
                    }
48
                    if ("createEvent" in document) {
49
                        var evt = document.createEvent("HTMLEvents");
50
                        evt.initEvent("change", false, true);
51
                        elm.dispatchEvent(evt);
52
                    } else {
53
                        elm.fireEvent("onchange");
54
                    }
55
                }
56
            }
57
58
            getMessageHandle("success", "message", data);
59
            getMessageHandle("error", "error", data);
60
        }
61
    };
62
    http.open("GET", url);
63
    http.send();
64
}
65
66
(function () {
67
    var elms = [].slice.call(document.getElementsByTagName("a")); // NodeList to Array
68
    elms.forEach(function (elm) {
69
        elm.addEventListener("click", function (e) {
70
            e.preventDefault();
71
            if (elm.getAttribute("data-no-reload") !== null) {
72
                get(elm.getAttribute("href"));
73
            } else {
74
                window.location = elm.getAttribute("href");
75
            }
76
            return false;
77
        }, true);
78
    });
79
}());