Passed
Push — master ( 9564ba...adc70c )
by Plamen
01:34
created

table_helper.BuildRequest.sort   A

Complexity

Conditions 5
Paths 4

Size

Total Lines 24
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 17
nc 4
nop 1
dl 0
loc 24
rs 9.0833
c 0
b 0
f 0

1 Function

Rating   Name   Duplication   Size   Complexity  
A 0 8 3
1
var table_helper = {
2
    Init: function(tableId){
3
        var tContainer = document.getElementById(tableId);
4
        if(!this.IePrior(9)){
5
            SetColumnsHoverEffect(tContainer, tableId);
6
        }
7
        var tfoot = tContainer.getElementsByTagName("tfoot")[0];
8
        this.ProcessPaginationLinks(tfoot);
9
        
10
        function SetColumnsHoverEffect(tContainer, tableId){
11
            var tHcells = tContainer.rows[0].cells;
12
            for(var i = 0; i < tHcells.length; i++){
13
                if(tHcells[i].firstChild.tagName === "A"){
14
                    tHcells[i].firstChild.setAttribute("onmouseover",
15
                            "table.ColumnHover('" + tableId + "'," + i + ");");
16
                    tHcells[i].firstChild.setAttribute("onmouseout",
17
                            "table.ColumnHover('" + tableId + "');");
18
                }
19
            }
20
        }
21
    },
22
    ColumnHover: function(tableContainer, index){
23
        var rows = document.getElementById(tableContainer).rows;
24
        var upto = rows.length - 1;
25
        if(typeof index === "undefined"){
26
            ColumnHoverRelease(rows, upto);
27
        }else{
28
            for(var i = 0; i < upto; i++){
29
                rows[i].cells[index].setAttribute("lang", "col-hover");
30
            }
31
        }
32
        function ColumnHoverRelease(rows, upto){
33
            for(var i = 0; i < upto; i++){
34
                for(var j = 0; j < rows[i].cells.length; j++){
35
                    if(rows[i].cells[j].lang){
36
                        rows[i].cells[j].removeAttribute("lang");
37
                    }
38
                }
39
            }
40
        };
41
    },
42
    BuildRequest: {
43
        Run: function(tableId){
44
            var rq = {tableId: tableId, strDesc: this.strDesc, strAsc: this.strAsc};
45
            var parent = this.helper.BuildRequest;
46
            parent.sort(rq);
47
            parent.filter(rq);
48
            return rq;
49
        },
50
        sort: function(rq){
51
            var thTags = document.getElementById(rq.tableId)
52
                        .getElementsByTagName("thead")[0]
53
                        .getElementsByTagName("th");
54
            var length = thTags.length;
55
            for(var i = 0; i < length; i++){
56
                var link = thTags[i].getElementsByTagName("a")[0];
57
                if(link){
58
                    var span = link.getElementsByTagName("span")[0];
59
                    if(span && sortBySpan(span, i)){
60
                        break;
61
                    }
62
                }
63
            }
64
65
            function sortBySpan(span, i){
66
                var order = span.innerHTML;
67
                if(order.length === 1){
68
                    rq.colNo = i;
69
                    rq.colOrd = order === rq.strDesc ? "desc" : "asc";
70
                }
71
                return rq.colNo === i;
72
            }
73
        },
74
        filter: function(rq){
75
            var r = getFilterFieldsByTableID(rq.tableId);
76
            if(r.filter !== null){
77
                rq.filter = r.filter;
78
            }
79
            if(r.filterBy !== null){
80
                rq.filterBy = r.filterBy;
81
            }
82
83
            function getFilterFieldsByTableID(tableID){
84
                var fields = {filterBy: null, filter: null};
85
                var filterDiv = getFilterDivByTableIDOrNull(tableID);
86
                if(filterDiv !== null){
87
                    setFilterBy(fields, filterDiv);
88
                    setFilterValue(fields, filterDiv);
89
                }
90
                return fields;
91
92
                function getFilterDivByTableIDOrNull(tableID){
93
                    if(document.getElementById(tableID).parentNode
94
                            .getElementsByTagName("div").length > 0
95
                            ){
96
                        var containerDivs = document.getElementById(tableID)
97
                                .parentNode.getElementsByTagName("div");
98
                        for(var i = 0; i < containerDivs.length; i++){
99
                            if(containerDivs[i].getAttribute("class") === "filter"){
100
                                return containerDivs[i];
101
                            }
102
                        }
103
104
                    }
105
                    return null;
106
                }
107
108
                function setFilterBy(fields, filterDiv){
109
                    var select = filterDiv.getElementsByTagName("select")[0];
110
                    if(select &&
111
                            select.options[select.selectedIndex].value !== "all"
112
                            ){
113
                        fields.filterBy = select.options[select.selectedIndex].value;
114
                    }
115
                }
116
                function setFilterValue(fields, filterDiv){
117
                    var textObj = filterDiv.getElementsByTagName("input")[0];
118
                    if(textObj && textObj.value && textObj.value.length !== 0){
119
                        fields.filter = encodeURIComponent(textObj.value.trim());
120
                    }
121
                }
122
            }
123
        }
124
    },
125
    IePrior: function(v){
126
        var rv = false;
127
        if(window.navigator.appName === 'Microsoft Internet Explorer'){
128
            var ua = window.navigator.userAgent;
129
            var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
130
            if(re.exec(ua) !== null){
131
                rv = parseFloat(RegExp.$1);
132
            }
133
            rv = rv < v ? true : false;
134
        }
135
        return rv;
136
    },
137
    GetParent: function(obj, objType){
138
        while(obj && obj.tagName !== objType.toUpperCase()){
139
            obj = obj.parentNode;
140
        }
141
        return obj;
142
    },
143
    ProcessPaginationLinks: function(tfoot){
144
        var pLinks = tfoot.querySelectorAll(".paging a");
145
        if(pLinks.length > 0){
146
            for(var j = 0; j < pLinks.length; j++){
147
                pLinks[j].setAttribute("href", "javascript:void(0);");
148
                pLinks[j].setAttribute("onclick", "return table.GoPage(this);");
149
            }
150
        }
151
    },
152
    RequestToUrl: function(rq){
153
        var url = location.pathname + ".json" + location.search;
154
        if(typeof rq === "object"){
155
            var getUrlVarName = {
156
                colNo: "col", colOrd: "ord", filter: "filter",
157
                filterBy: "filter-by", pageNo: "pg", exportType: "export",
158
                tableId: "table-id"
159
            };
160
            delete rq.strAsc;
161
            delete rq.strDesc;
162
            var flagFirst = location.search.length < 1 ? true : false;
163
            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...
164
                var clue = flagFirst === true ? "?" : "&";
165
                url += clue + getUrlVarName[r] + "=" + rq[r];
166
                flagFirst = false;
167
            }
168
        }
169
        return url;
170
    }
171
};
172