Passed
Push — master ( 56b7d9...3452be )
by Plamen
01:30
created

assets/table_helper.js   A

Complexity

Total Complexity 39
Complexity/F 3.25

Size

Lines of Code 131
Function Count 12

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 4
Bugs 0 Features 0
Metric Value
cc 0
eloc 91
c 4
b 0
f 0
nc 1
dl 0
loc 131
rs 9.28
wmc 39
mnd 3
bc 30
fnc 12
bpm 2.5
cpm 3.25
noi 1

7 Functions

Rating   Name   Duplication   Size   Complexity  
A table_helper.BuildRequest.Run 0 7 1
A table_helper.ProcessPaginationLinks 0 9 3
A table_helper.IePrior 0 12 4
A table_helper.BuildRequest.sort 0 24 5
A table_helper.BuildRequest.filter 0 50 3
A table_helper.RequestToUrl 0 19 4
A table_helper.GetParent 0 6 3
1
var table_helper = {
2
    BuildRequest: {
3
        Run: function(tableId){
4
            var rq = {tableId: tableId, strDesc: this.strDesc, strAsc: this.strAsc};
5
            var parent = this.helper.BuildRequest;
6
            parent.sort(rq);
7
            parent.filter(rq);
8
            return rq;
9
        },
10
        sort: function(rq){
11
            var thTags = document.getElementById(rq.tableId)
12
                        .getElementsByTagName("thead")[0]
13
                        .getElementsByTagName("th");
14
            var length = thTags.length;
15
            for(var i = 0; i < length; i++){
16
                var link = thTags[i].getElementsByTagName("a")[0];
17
                if(link){
18
                    var span = link.getElementsByTagName("span")[0];
19
                    if(span && sortBySpan(span, i)){
20
                        break;
21
                    }
22
                }
23
            }
24
25
            function sortBySpan(span, i){
26
                var order = span.innerHTML;
27
                if(order.length === 1){
28
                    rq.colNo = i;
29
                    rq.colOrd = order === rq.strDesc ? "desc" : "asc";
30
                }
31
                return rq.colNo === i;
32
            }
33
        },
34
        filter: function(rq){
35
            var r = getFilterFieldsByTableID(rq.tableId);
36
            if(r.filter !== null){
37
                rq.filter = r.filter;
38
            }
39
            if(r.filterBy !== null){
40
                rq.filterBy = r.filterBy;
41
            }
42
43
            function getFilterFieldsByTableID(tableID){
44
                var fields = {filterBy: null, filter: null};
45
                var filterDiv = getFilterDivByTableIDOrNull(tableID);
46
                if(filterDiv !== null){
47
                    setFilterBy(fields, filterDiv);
48
                    setFilterValue(fields, filterDiv);
49
                }
50
                return fields;
51
52
                function getFilterDivByTableIDOrNull(tableID){
53
                    if(document.getElementById(tableID).parentNode
54
                            .getElementsByTagName("div").length > 0
55
                            ){
56
                        var containerDivs = document.getElementById(tableID)
57
                                .parentNode.getElementsByTagName("div");
58
                        for(var i = 0; i < containerDivs.length; i++){
59
                            if(containerDivs[i].getAttribute("class") === "filter"){
60
                                return containerDivs[i];
61
                            }
62
                        }
63
64
                    }
65
                    return null;
66
                }
67
68
                function setFilterBy(fields, filterDiv){
69
                    var select = filterDiv.getElementsByTagName("select")[0];
70
                    if(select &&
71
                            select.options[select.selectedIndex].value !== "all"
72
                            ){
73
                        fields.filterBy = select.options[select.selectedIndex].value;
74
                    }
75
                }
76
                function setFilterValue(fields, filterDiv){
77
                    var textObj = filterDiv.getElementsByTagName("input")[0];
78
                    if(textObj && textObj.value && textObj.value.length !== 0){
79
                        fields.filter = encodeURIComponent(textObj.value.trim());
80
                    }
81
                }
82
            }
83
        }
84
    },
85
    IePrior: function(v){
86
        var rv = false;
87
        if(window.navigator.appName === 'Microsoft Internet Explorer'){
88
            var ua = window.navigator.userAgent;
89
            var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
90
            if(re.exec(ua) !== null){
91
                rv = parseFloat(RegExp.$1);
92
            }
93
            rv = rv < v ? true : false;
94
        }
95
        return rv;
96
    },
97
    GetParent: function(obj, objType){
98
        while(obj && obj.tagName !== objType.toUpperCase()){
99
            obj = obj.parentNode;
100
        }
101
        return obj;
102
    },
103
    ProcessPaginationLinks: function(tfoot){
104
        var pLinks = tfoot.querySelectorAll(".paging a");
105
        if(pLinks.length > 0){
106
            for(var j = 0; j < pLinks.length; j++){
107
                pLinks[j].setAttribute("href", "javascript:void(0);");
108
                pLinks[j].setAttribute("onclick", "return table.GoPage(this);");
109
            }
110
        }
111
    },
112
    RequestToUrl: function(rq){
113
        var url = location.pathname + ".json" + location.search;
114
        var getUrlVarName = {
115
            colNo: "col", colOrd: "ord", filter: "filter",
116
            filterBy: "filter-by", pageNo: "pg", exportType: "export",
117
            tableId: "table-id"
118
        };
119
        var flagFirst = location.search.length < 1 ? true : false;
120
        //lets remove rq.strAsc and rq.srtDesc
121
        //var request = Object.assign({}, rq); //EC6+
122
        var request = JSON.parse(JSON.stringify(rq)); //EC5
123
        delete(request.strAsc); delete(request.strDesc);
124
        for(var r in request){
1 ignored issue
show
Complexity introduced by
A for in loop automatically includes the property of any prototype object, consider checking the key using hasOwnProperty.

When iterating over the keys of an object, this includes not only the keys of the object, but also keys contained in the prototype of that object. It is generally a best practice to check for these keys specifically:

var someObject;
for (var key in someObject) {
    if ( ! someObject.hasOwnProperty(key)) {
        continue; // Skip keys from the prototype.
    }

    doSomethingWith(key);
}
Loading history...
125
            var clue = flagFirst === true ? "?" : "&";
126
            url += clue + getUrlVarName[r] + "=" + rq[r];
127
            flagFirst = false;
128
        }
129
        return url;
130
    }
131
};
132