Passed
Push — master ( 2589f1...336578 )
by Plamen
01:29
created

assets/table_helper.js   A

Complexity

Total Complexity 39
Complexity/F 3.25

Size

Lines of Code 128
Function Count 12

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 5
Bugs 0 Features 0
Metric Value
cc 0
eloc 90
c 5
b 0
f 0
nc 1
dl 0
loc 128
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 25 5
A table_helper.BuildRequest.filter 0 50 3
A table_helper.RequestToUrl 0 15 4
A table_helper.GetParent 0 6 3
1
var table_helper = {
2
    BuildRequest: {
3
        Run: function(tableId){
4
            var rq = {tableId: tableId};
5
            var parent = this.helper.BuildRequest;
6
            parent.sort(rq);
7
            parent.filter(rq);
8
            return rq;
9
        },
10
        sort: function(rq){
11
            var table = document.getElementById(rq.tableId);
12
            var thTags = table.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, table)){
20
                        break;
21
                    }
22
                }
23
            }
24
25
            function sortBySpan(span, i, table){
26
                var order = span.innerHTML;
27
                if(order.length === 1){
28
                    rq.colNo = i;
29
                    var dSymbol = table.getAttribute('data-sort-d');
30
                    rq.colOrd = order === dSymbol ? "desc" : "asc";
31
                }
32
                return rq.colNo === i;
33
            }
34
        },
35
        filter: function(rq){
36
            var r = getFilterFieldsByTableID(rq.tableId);
37
            if(r.filter !== null){
38
                rq.filter = r.filter;
39
            }
40
            if(r.filterBy !== null){
41
                rq.filterBy = r.filterBy;
42
            }
43
44
            function getFilterFieldsByTableID(tableID){
45
                var fields = {filterBy: null, filter: null};
46
                var filterDiv = getFilterDivByTableIDOrNull(tableID);
47
                if(filterDiv !== null){
48
                    setFilterBy(fields, filterDiv);
49
                    setFilterValue(fields, filterDiv);
50
                }
51
                return fields;
52
53
                function getFilterDivByTableIDOrNull(tableID){
54
                    if(document.getElementById(tableID).parentNode
55
                            .getElementsByTagName("div").length > 0
56
                            ){
57
                        var containerDivs = document.getElementById(tableID)
58
                                .parentNode.getElementsByTagName("div");
59
                        for(var i = 0; i < containerDivs.length; i++){
60
                            if(containerDivs[i].getAttribute("class") === "filter"){
61
                                return containerDivs[i];
62
                            }
63
                        }
64
65
                    }
66
                    return null;
67
                }
68
69
                function setFilterBy(fields, filterDiv){
70
                    var select = filterDiv.getElementsByTagName("select")[0];
71
                    if(select &&
72
                            select.options[select.selectedIndex].value !== "all"
73
                            ){
74
                        fields.filterBy = select.options[select.selectedIndex].value;
75
                    }
76
                }
77
                function setFilterValue(fields, filterDiv){
78
                    var textObj = filterDiv.getElementsByTagName("input")[0];
79
                    if(textObj && textObj.value && textObj.value.length !== 0){
80
                        fields.filter = encodeURIComponent(textObj.value.trim());
81
                    }
82
                }
83
            }
84
        }
85
    },
86
    IePrior: function(v){
87
        var rv = false;
88
        if(window.navigator.appName === 'Microsoft Internet Explorer'){
89
            var ua = window.navigator.userAgent;
90
            var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
91
            if(re.exec(ua) !== null){
92
                rv = parseFloat(RegExp.$1);
93
            }
94
            rv = rv < v ? true : false;
95
        }
96
        return rv;
97
    },
98
    GetParent: function(obj, objType){
99
        while(obj && obj.tagName !== objType.toUpperCase()){
100
            obj = obj.parentNode;
101
        }
102
        return obj;
103
    },
104
    ProcessPaginationLinks: function(tfoot){
105
        var pLinks = tfoot.querySelectorAll(".paging a");
106
        if(pLinks.length > 0){
107
            for(var j = 0; j < pLinks.length; j++){
108
                pLinks[j].setAttribute("href", "javascript:void(0);");
109
                pLinks[j].setAttribute("onclick", "return table.GoPage(this);");
110
            }
111
        }
112
    },
113
    RequestToUrl: function(rq){
114
        var url = location.pathname + ".json" + location.search;
115
        var getUrlVarName = {
116
            colNo: "col", colOrd: "ord", filter: "filter",
117
            filterBy: "filter-by", pageNo: "pg", exportType: "export",
118
            tableId: "table-id"
119
        };
120
        var flagFirst = location.search.length < 1 ? true : false;
121
        for(var r in rq){
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...
122
            var clue = flagFirst === true ? "?" : "&";
123
            url += clue + getUrlVarName[r] + "=" + rq[r];
124
            flagFirst = false;
125
        }
126
        return url;
127
    }
128
};
129