-
Notifications
You must be signed in to change notification settings - Fork 34
/
helper.js
112 lines (112 loc) · 3.86 KB
/
helper.js
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
window.helper = {
deviceHourResults: function(result) {
var resultsLength = 24;
var results = this.deviceResult(resultsLength);
var resultLength = result.length;
for(var j=0;j<resultLength;j++) {
var currentResult = result[j],
deviceTypeColumn = 0,
hourColumn = 1,
countColumn = 2;
var hour = parseInt(currentResult[hourColumn]),
count = parseInt(currentResult[countColumn]);
results[currentResult[deviceTypeColumn]][hour] = count;
}
return results;
},
deviceMinuteInterval: function(result, interval) {
var resultsLength = Math.round(60/interval*24);
var results = this.deviceResult(resultsLength);
var resultLength = result.length;
for(var j=0;j<resultLength;j++) {
var currentResult = result[j],
deviceTypeColumn = 0,
hourColumn = 1,
minuteColumn = 2
countColumn = 3;
var hour = parseInt(currentResult[hourColumn]),
minute = parseInt(currentResult[minuteColumn]),
count = parseInt(currentResult[countColumn]);
var column = (hour*60/interval)+Math.floor(minute/interval);
results[currentResult[deviceTypeColumn]][column] += count;
}
return results;
},
deviceMinuteIntervalResults: function(result, interval, startDate, endDate) {
var deviceTypeColumn = 0,
dateColumn = 1,
hourColumn = 2,
minuteColumn = 3
countColumn = 4;
var dates = time.minutes(time.hour(startDate), time.hour(endDate), interval)
var results = this.deviceDateResult(dates);
var resultLength = result.length;
var timeFormatGoogle = timeFormat.format('%Y%m%d%H%M%Z');
var timeZone = "-0700"
for(var j=0;j<resultLength;j++) {
var currentResult = result[j];
var hour = currentResult[hourColumn],
minute = parseInt(currentResult[minuteColumn]),
date = currentResult[dateColumn],
count = parseInt(currentResult[countColumn]);
var intervalMinute = interval*Math.floor(minute/interval);
var dateString = date+hour+this.leadingZero(intervalMinute)+timeZone
var dateInTimeZone = timeFormatGoogle.parse(dateString)
var resultDate = results[dateInTimeZone]
if(resultDate) {
resultDate[currentResult[deviceTypeColumn]] += count;
}
}
return results;
},
deviceResult: function(resultsLength) {
var results = {"desktop": new Array(resultsLength), "mobile": new Array(resultsLength)};
for(var i=0;i<resultsLength;i++) {
results.desktop[i] = 0;
results.mobile[i] = 0;
}
return results;
},
deviceDateResult: function(dates) {
var resultsLength = dates.length;
var results = {};
for(var i=0;i<resultsLength;i++) {
d = dates[i];
results[d] = {"desktop": 0, "mobile": 0, "tablet": 0, date: d };
}
return results;
},
leadingZero: function(number) {
s = "0"+number;
return s.substr(s.length-2)
},
arrayFromObject: function(transformObject) {
var dataArray = new Array;
for(var o in transformObject) {
dataArray.push(transformObject[o]);
}
return dataArray;
},
redrawChartLabels: function(chart) {
var i, data, dataLength, row, pos, date, label, options;
data = chart.data;
options = chart.options;
dataLength = data.length;
pos = chart.elementHeight - options.padding;
for(i=0;i<dataLength;i++) {
row = data[dataLength - 1 - i];
date = row.src.date;
if(date.getHours() % 6 === 0 && date.getMinutes() === 0) {
label = timeFormat.format("%I %p")(date);
if(date.getHours() === 0) {
label = timeFormat.format("%a %I %p")(date);
}
chart.raphael.text(row._x, pos, label)
.attr('font-size', options.gridTextSize)
.attr('font-family', options.gridTextFamily)
.attr('font-weight', options.gridTextWeight)
.attr('fill', options.gridTextColor)
}
}
}
}