summaryrefslogtreecommitdiffstatshomepage
path: root/test/util/util.js
blob: 699c4d22c05fcc58a8df0be32f8156707ee6ba33 (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
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/* Test Utilities */

function byId(id) {
    return document.getElementById(id);
}

function make(htmlStr) {
    htmlStr =  htmlStr.trim()
    var makeFn = function () {
        var range = document.createRange();
        var fragment = range.createContextualFragment(htmlStr);
        var wa = getWorkArea();
        var child = null;
        var children = fragment.children || fragment.childNodes; // IE
        var appendedChildren = []
        while(children.length > 0) {
            child = children[0];
            wa.appendChild(child);
            appendedChildren.push(child)
        }
        for (var i = 0; i < appendedChildren.length; i++) {
            htmx.process(appendedChildren[i]);
        }
        return child; // return last added element
    };
    if (getWorkArea()) {
        return makeFn();
    } else {
        ready(makeFn);
    }
}

function ready(fn) {
    if (document.readyState !== 'loading') {
        fn();
    } else {
        document.addEventListener('DOMContentLoaded', fn);
    }
}

function getWorkArea() {
    return byId("work-area");
}

function clearWorkArea() {
    var workArea = getWorkArea();
    if (workArea) workArea.innerHTML = "";
}

function removeWhiteSpace(str) {
    return str.replace(/\s/g, "");
}

function getHTTPMethod(xhr) {
    return xhr.requestHeaders['X-HTTP-Method-Override'] || xhr.method;
}

function makeServer(){
    var server = sinon.fakeServer.create();
    server.fakeHTTPMethods = true;
    server.getHTTPMethod = function(xhr) {
        return getHTTPMethod(xhr);
    }
    return server;
}

function parseParams(str) {
    var re = /([^&=]+)=?([^&]*)/g;
    var decode = function (str) {
        return decodeURIComponent(str.replace(/\+/g, ' '));
    };
    var params = {}, e;
    if (str) {
        if (str.substr(0, 1) == '?') {
            str = str.substr(1);
        }
        while (e = re.exec(str)) {
            var k = decode(e[1]);
            var v = decode(e[2]);
            if (params[k] !== undefined) {
                if (!Array.isArray(params[k])) {
                    params[k] = [params[k]];
                }
                params[k].push(v);
            } else {
                params[k] = v;
            }
        }
    }
    return params;
}


function getQuery(url) {
    var question = url.indexOf("?");
    var hash = url.indexOf("#");
    if(hash==-1 && question==-1) return "";
    if(hash==-1) hash = url.length;
    return question==-1 || hash==question+1 ? url.substring(hash) :
        url.substring(question+1,hash);
}

function getParameters(xhr) {
    if (getHTTPMethod(xhr) == "GET") {
        return parseParams(getQuery(xhr.url));
    } else {
        return parseParams(xhr.requestBody);
    }
}

function log(val) {
    console.log(val);
    return val;
}