diff options
author | Peter Wu | 2014-07-25 23:28:21 +0200 |
---|---|---|
committer | Pim van den Berg | 2014-08-02 12:29:32 +0200 |
commit | b6be82b8edefa452e72ed53391971e53d9dccf83 (patch) | |
tree | 01a33ac72f6ef7e6e5c607238bc5e4dd3a8751fe | |
parent | support php versions without json support and show a warning message (diff) | |
download | apt-panopticon_cgp-b6be82b8edefa452e72ed53391971e53d9dccf83.zip apt-panopticon_cgp-b6be82b8edefa452e72ed53391971e53d9dccf83.tar.gz apt-panopticon_cgp-b6be82b8edefa452e72ed53391971e53d9dccf83.tar.bz2 apt-panopticon_cgp-b6be82b8edefa452e72ed53391971e53d9dccf83.tar.xz |
jsrrdgraph: Fixed jshint warnings/errors
Many fall in the category missing semicolon, but there are legitimate
bugs (like throwing an error with an undefined variable, using
isInfinite instead of !isFinite or fabs instead of Math.abs).
At some places, I moved the variable declarations to avoid duplicate
definition warnings.
Redundant breaks have been removed (after return / throw).
Global variables were implicitly defined in RrdDataFile (which caught my
attention) and Base64, these have been made local.
Also fixed some whitespace errors. Yay, the consistency. Not all (style)
issues are fixed.
Diffstat (limited to '')
-rw-r--r-- | js/RrdCmdLine.js | 26 | ||||
-rw-r--r-- | js/RrdDataFile.js | 21 | ||||
-rw-r--r-- | js/RrdGfxCanvas.js | 13 | ||||
-rw-r--r-- | js/RrdGfxPdf.js | 8 | ||||
-rw-r--r-- | js/RrdGfxSvg.js | 2 | ||||
-rw-r--r-- | js/RrdGraph.js | 65 | ||||
-rw-r--r-- | js/RrdJson.js | 103 | ||||
-rw-r--r-- | js/RrdRpn.js | 4 | ||||
-rw-r--r-- | js/RrdTime.js | 42 | ||||
-rw-r--r-- | js/base64.js | 5 | ||||
-rw-r--r-- | js/rrdFile.js | 2 | ||||
-rw-r--r-- | js/sprintf.js | 35 | ||||
-rw-r--r-- | js/strftime.js | 77 |
13 files changed, 185 insertions, 218 deletions
diff --git a/js/RrdCmdLine.js b/js/RrdCmdLine.js index ceec693..a2be92e 100644 --- a/js/RrdCmdLine.js +++ b/js/RrdCmdLine.js | |||
@@ -184,6 +184,8 @@ RrdCmdLine.prototype = { | |||
184 | }, | 184 | }, |
185 | set_option: function(option, value) | 185 | set_option: function(option, value) |
186 | { | 186 | { |
187 | var args = value.split(':'); | ||
188 | var index = value.indexOf(':'); | ||
187 | switch(option) { | 189 | switch(option) { |
188 | case 'base': | 190 | case 'base': |
189 | case 'b': | 191 | case 'b': |
@@ -193,12 +195,12 @@ RrdCmdLine.prototype = { | |||
193 | break; | 195 | break; |
194 | case 'color': | 196 | case 'color': |
195 | case 'c': | 197 | case 'c': |
196 | var index = value.indexOf('#'); | 198 | index = value.indexOf('#'); |
197 | if (index === -1) | 199 | if (index === -1) |
198 | throw "invalid color def format"; | 200 | throw "invalid color def format"; |
199 | var name = value.substr(0,index); | 201 | var name = value.substr(0,index); |
200 | if (!this.graph.GRC[name]) | 202 | if (!this.graph.GRC[name]) |
201 | throw "invalid color name '"+name+"'" | 203 | throw "invalid color name '" + name + "'"; |
202 | this.graph.GRC[name] = value.substr(index); // FIXME check color | 204 | this.graph.GRC[name] = value.substr(index); // FIXME check color |
203 | break; | 205 | break; |
204 | case 'end': | 206 | case 'end': |
@@ -212,7 +214,7 @@ RrdCmdLine.prototype = { | |||
212 | break; | 214 | break; |
213 | case 'graph-render-mode': | 215 | case 'graph-render-mode': |
214 | case 'G': | 216 | case 'G': |
215 | // im->graph_antialias | 217 | // im->graph_antialias |
216 | break; | 218 | break; |
217 | case 'height': | 219 | case 'height': |
218 | case 'h': | 220 | case 'h': |
@@ -225,7 +227,7 @@ RrdCmdLine.prototype = { | |||
225 | break; | 227 | break; |
226 | case 'lower-limit': | 228 | case 'lower-limit': |
227 | case 'l': | 229 | case 'l': |
228 | this.graph.setminval = parseFloat(value) | 230 | this.graph.setminval = parseFloat(value); |
229 | break; | 231 | break; |
230 | case 'zoom': | 232 | case 'zoom': |
231 | case 'm': | 233 | case 'm': |
@@ -235,11 +237,10 @@ RrdCmdLine.prototype = { | |||
235 | break; | 237 | break; |
236 | case 'font': | 238 | case 'font': |
237 | case 'n': | 239 | case 'n': |
238 | var args = value.split(':'); | ||
239 | if (args.length !== 3) | 240 | if (args.length !== 3) |
240 | throw "invalid text property format"; | 241 | throw "invalid text property format"; |
241 | if (!this.graph.TEXT[args[0]]) | 242 | if (!this.graph.TEXT[args[0]]) |
242 | throw "invalid fonttag '"+args[0]+"'" | 243 | throw "invalid font tag '" + args[0] + "'"; |
243 | if (args[1] > 0) | 244 | if (args[1] > 0) |
244 | this.graph.TEXT[args[0]].size = args[1]; | 245 | this.graph.TEXT[args[0]].size = args[1]; |
245 | if (args[2]) | 246 | if (args[2]) |
@@ -292,7 +293,6 @@ RrdCmdLine.prototype = { | |||
292 | if (value === 'none') { | 293 | if (value === 'none') { |
293 | this.graph.draw_x_grid = false; | 294 | this.graph.draw_x_grid = false; |
294 | } else { | 295 | } else { |
295 | var args = value.split(':'); | ||
296 | if (args.length !== 8) | 296 | if (args.length !== 8) |
297 | throw "invalid x-grid format"; | 297 | throw "invalid x-grid format"; |
298 | this.graph.xlab_user.gridtm = this.graph.tmt_conv(args[0]); | 298 | this.graph.xlab_user.gridtm = this.graph.tmt_conv(args[0]); |
@@ -318,7 +318,6 @@ RrdCmdLine.prototype = { | |||
318 | if (value === 'none') { | 318 | if (value === 'none') { |
319 | this.graph.draw_y_grid = false; | 319 | this.graph.draw_y_grid = false; |
320 | } else { | 320 | } else { |
321 | var index = value.indexOf(':'); | ||
322 | if (index === -1) | 321 | if (index === -1) |
323 | throw "invalid y-grid format"; | 322 | throw "invalid y-grid format"; |
324 | this.graph.ygridstep = parseFloat(value.substr(0,index)); | 323 | this.graph.ygridstep = parseFloat(value.substr(0,index)); |
@@ -338,7 +337,6 @@ RrdCmdLine.prototype = { | |||
338 | throw "invalid argument for --units: "+value; | 337 | throw "invalid argument for --units: "+value; |
339 | break; | 338 | break; |
340 | case 'right-axis': | 339 | case 'right-axis': |
341 | var index = value.indexOf(':'); | ||
342 | if (index === -1) | 340 | if (index === -1) |
343 | throw "invalid right-axis format expected scale:shift"; | 341 | throw "invalid right-axis format expected scale:shift"; |
344 | this.graph.second_axis_scale = parseFloat(value.substr(0,index)); | 342 | this.graph.second_axis_scale = parseFloat(value.substr(0,index)); |
@@ -378,7 +376,6 @@ RrdCmdLine.prototype = { | |||
378 | this.graph.draw_3d_border = parseInt(value, 10); | 376 | this.graph.draw_3d_border = parseInt(value, 10); |
379 | break; | 377 | break; |
380 | case 'grid-dash': | 378 | case 'grid-dash': |
381 | var index = value.indexOf(':'); | ||
382 | if (index === -1) | 379 | if (index === -1) |
383 | throw "expected grid-dash format float:float"; | 380 | throw "expected grid-dash format float:float"; |
384 | this.graph.grid_dash_on = parseFloat(value.substr(0,index)); | 381 | this.graph.grid_dash_on = parseFloat(value.substr(0,index)); |
@@ -399,20 +396,17 @@ RrdCmdLine.prototype = { | |||
399 | var rrdfile = vnames[1]; | 396 | var rrdfile = vnames[1]; |
400 | var name = args[n++]; | 397 | var name = args[n++]; |
401 | var cf = args[n++]; | 398 | var cf = args[n++]; |
402 | var step = undefined; | 399 | var step, reduce, start, end; |
403 | var reduce = undefined; | ||
404 | var start = undefined; | ||
405 | var end = undefined; | ||
406 | if (args.length > n) { | 400 | if (args.length > n) { |
407 | for (var j = n, xlen = args.length ; j < xlen ; j++) { | 401 | for (var j = n, xlen = args.length ; j < xlen ; j++) { |
408 | var opts = args[j].split("="); | 402 | var opts = args[j].split("="); |
409 | if (opts[0] === "step") step = opts[1]; | 403 | if (opts[0] === "step") step = opts[1]; |
410 | if (opts[0] === "reduce") reduce = opts[1] | 404 | if (opts[0] === "reduce") reduce = opts[1]; |
411 | if (opts[0] === "start") start = opts[1]; | 405 | if (opts[0] === "start") start = opts[1]; |
412 | if (opts[0] === "end") end = opts[1]; | 406 | if (opts[0] === "end") end = opts[1]; |
413 | } | 407 | } |
414 | } | 408 | } |
415 | this.graph.gdes_add_def(vname, rrdfile, name, cf, step, start, end, reduce) | 409 | this.graph.gdes_add_def(vname, rrdfile, name, cf, step, start, end, reduce); |
416 | }, | 410 | }, |
417 | // CDEF:vname=RPN expression | 411 | // CDEF:vname=RPN expression |
418 | parse_cdef: function (line) | 412 | parse_cdef: function (line) |
diff --git a/js/RrdDataFile.js b/js/RrdDataFile.js index 4ebb220..2c0e846 100644 --- a/js/RrdDataFile.js +++ b/js/RrdDataFile.js | |||
@@ -42,21 +42,23 @@ RrdDataFile.prototype = { | |||
42 | var cal_start, cal_end; | 42 | var cal_start, cal_end; |
43 | var best_full_rra = 0, best_part_rra = 0, chosen_rra = 0; | 43 | var best_full_rra = 0, best_part_rra = 0, chosen_rra = 0; |
44 | var best_full_step_diff = 0, best_part_step_diff = 0, tmp_step_diff = 0, tmp_match = 0, best_match = 0; | 44 | var best_full_step_diff = 0, best_part_step_diff = 0, tmp_step_diff = 0, tmp_match = 0, best_match = 0; |
45 | var full_match, rra_base; | 45 | var full_match; |
46 | var first_full = 1; | 46 | var first_full = 1; |
47 | var first_part = 1; | 47 | var first_part = 1; |
48 | var data_ptr; | 48 | var data_ptr; |
49 | var rows; | 49 | var rows; |
50 | var rra; | ||
51 | var i, ii; | ||
50 | 52 | ||
51 | var cf_idx = gdp.cf; | 53 | var cf_idx = gdp.cf; |
52 | var ds_cnt = rrd.getNrDSs(); | 54 | var ds_cnt = rrd.getNrDSs(); |
53 | var rra_cnt = rrd.getNrRRAs(); | 55 | var rra_cnt = rrd.getNrRRAs(); |
54 | 56 | ||
55 | for (var i = 0; i < ds_cnt; i++) | 57 | for (i = 0; i < ds_cnt; i++) |
56 | gdp.ds_namv[i] = rrd.rrd_header.getDSbyIdx(i).getName(); | 58 | gdp.ds_namv[i] = rrd.rrd_header.getDSbyIdx(i).getName(); |
57 | 59 | ||
58 | for (var i = 0; i < rra_cnt; i++) { | 60 | for (i = 0; i < rra_cnt; i++) { |
59 | var rra = rrd.getRRAInfo(i); | 61 | rra = rrd.getRRAInfo(i); |
60 | if (RrdGraphDesc.cf_conv(rra.getCFName()) === cf_idx) { | 62 | if (RrdGraphDesc.cf_conv(rra.getCFName()) === cf_idx) { |
61 | cal_end = (rrd.getLastUpdate() - (rrd.getLastUpdate() % (rra.getPdpPerRow() * rra.pdp_step))); | 63 | cal_end = (rrd.getLastUpdate() - (rrd.getLastUpdate() % (rra.getPdpPerRow() * rra.pdp_step))); |
62 | cal_start = (cal_end - (rra.getPdpPerRow() * rra.row_cnt * rra.pdp_step)); | 64 | cal_start = (cal_end - (rra.getPdpPerRow() * rra.row_cnt * rra.pdp_step)); |
@@ -87,7 +89,7 @@ RrdDataFile.prototype = { | |||
87 | else throw "the RRD does not contain an RRA matching the chosen CF"; | 89 | else throw "the RRD does not contain an RRA matching the chosen CF"; |
88 | 90 | ||
89 | var rra_info = rrd.getRRAInfo(chosen_rra); | 91 | var rra_info = rrd.getRRAInfo(chosen_rra); |
90 | var rra = rrd.getRRA(chosen_rra); | 92 | rra = rrd.getRRA(chosen_rra); |
91 | 93 | ||
92 | ft_step = rrd.rrd_header.pdp_step * rra_info.getPdpPerRow(); | 94 | ft_step = rrd.rrd_header.pdp_step * rra_info.getPdpPerRow(); |
93 | gdp.start -= (gdp.start % ft_step); | 95 | gdp.start -= (gdp.start % ft_step); |
@@ -107,13 +109,13 @@ RrdDataFile.prototype = { | |||
107 | 109 | ||
108 | for (i = start_offset; i < rra.row_cnt - end_offset; i++) { | 110 | for (i = start_offset; i < rra.row_cnt - end_offset; i++) { |
109 | if (i < 0) { | 111 | if (i < 0) { |
110 | for (var ii = 0; ii < ds_cnt; ii++) | 112 | for (ii = 0; ii < ds_cnt; ii++) |
111 | gdp.data[data_ptr++] = Number.NaN; | 113 | gdp.data[data_ptr++] = Number.NaN; |
112 | } else if (i >= rra.row_cnt) { | 114 | } else if (i >= rra.row_cnt) { |
113 | for (var ii = 0; ii < ds_cnt; ii++) | 115 | for (ii = 0; ii < ds_cnt; ii++) |
114 | gdp.data[data_ptr++] = Number.NaN; | 116 | gdp.data[data_ptr++] = Number.NaN; |
115 | } else { | 117 | } else { |
116 | for (var ii = 0; ii < ds_cnt; ii++) | 118 | for(ii = 0; ii < ds_cnt; ii++) |
117 | gdp.data[data_ptr++] = rra.getEl(i, ii); | 119 | gdp.data[data_ptr++] = rra.getEl(i, ii); |
118 | } | 120 | } |
119 | } | 121 | } |
@@ -153,8 +155,7 @@ RrdDataFile.prototype = { | |||
153 | }, | 155 | }, |
154 | fetch_async: function(gdp, ft_step, callback, callback_arg) | 156 | fetch_async: function(gdp, ft_step, callback, callback_arg) |
155 | { | 157 | { |
156 | var rrd; | 158 | if (gdp.rrd === null) return -1; |
157 | if (gdp.rrd == null) return -1; | ||
158 | 159 | ||
159 | if (gdp.rrd in this.rrdfiles) { | 160 | if (gdp.rrd in this.rrdfiles) { |
160 | callback(callback_arg, this.build(gdp, ft_step, this.rrdfiles[gdp.rrd])); | 161 | callback(callback_arg, this.build(gdp, ft_step, this.rrdfiles[gdp.rrd])); |
diff --git a/js/RrdGfxCanvas.js b/js/RrdGfxCanvas.js index 070b806..0d1784e 100644 --- a/js/RrdGfxCanvas.js +++ b/js/RrdGfxCanvas.js | |||
@@ -57,7 +57,7 @@ RrdGfxCanvas.prototype.line = function (X0, Y0, X1, Y1, width, color) | |||
57 | } | 57 | } |
58 | this.ctx.save(); | 58 | this.ctx.save(); |
59 | this.ctx.lineWidth = width; | 59 | this.ctx.lineWidth = width; |
60 | this.ctx.strokeStyle = color | 60 | this.ctx.strokeStyle = color; |
61 | this.ctx.beginPath(); | 61 | this.ctx.beginPath(); |
62 | this.ctx.moveTo(X0, Y0); | 62 | this.ctx.moveTo(X0, Y0); |
63 | this.ctx.lineTo(X1, Y1); | 63 | this.ctx.lineTo(X1, Y1); |
@@ -67,6 +67,7 @@ RrdGfxCanvas.prototype.line = function (X0, Y0, X1, Y1, width, color) | |||
67 | 67 | ||
68 | RrdGfxCanvas.prototype.dashed_line = function (X0, Y0, X1, Y1, width, color, dash_on, dash_off) | 68 | RrdGfxCanvas.prototype.dashed_line = function (X0, Y0, X1, Y1, width, color, dash_on, dash_off) |
69 | { | 69 | { |
70 | var swap, n; | ||
70 | X0 = Math.round(X0); | 71 | X0 = Math.round(X0); |
71 | Y0 = Math.round(Y0); | 72 | Y0 = Math.round(Y0); |
72 | X1 = Math.round(X1); | 73 | X1 = Math.round(X1); |
@@ -81,12 +82,12 @@ RrdGfxCanvas.prototype.dashed_line = function (X0, Y0, X1, Y1, width, color, das | |||
81 | Y0 += 0.5; | 82 | Y0 += 0.5; |
82 | Y1 += 0.5; | 83 | Y1 += 0.5; |
83 | if (X0 > X1) { | 84 | if (X0 > X1) { |
84 | var swap = X0; | 85 | swap = X0; |
85 | X0 = X1; | 86 | X0 = X1; |
86 | X1 = swap; | 87 | X1 = swap; |
87 | } | 88 | } |
88 | this.ctx.moveTo(X0, Y0); | 89 | this.ctx.moveTo(X0, Y0); |
89 | var n=0; | 90 | n = 0; |
90 | while(X0<=X1) { | 91 | while(X0<=X1) { |
91 | if (n%2 === 1) { | 92 | if (n%2 === 1) { |
92 | X0 += dash_on; | 93 | X0 += dash_on; |
@@ -101,12 +102,12 @@ RrdGfxCanvas.prototype.dashed_line = function (X0, Y0, X1, Y1, width, color, das | |||
101 | X0 += 0.5; | 102 | X0 += 0.5; |
102 | X1 += 0.5; | 103 | X1 += 0.5; |
103 | if (Y0 > Y1) { | 104 | if (Y0 > Y1) { |
104 | var swap = Y0; | 105 | swap = Y0; |
105 | Y0 = Y1; | 106 | Y0 = Y1; |
106 | Y1 = swap; | 107 | Y1 = swap; |
107 | } | 108 | } |
108 | this.ctx.moveTo(X0, Y0); | 109 | this.ctx.moveTo(X0, Y0); |
109 | var n=0; | 110 | n = 0; |
110 | while(Y0<=Y1) { | 111 | while(Y0<=Y1) { |
111 | if (n%2 === 1) { | 112 | if (n%2 === 1) { |
112 | Y0 += dash_on; | 113 | Y0 += dash_on; |
@@ -201,7 +202,7 @@ RrdGfxCanvas.prototype.lineTo = function (x,y) | |||
201 | { | 202 | { |
202 | x = Math.round(x)+0.5; | 203 | x = Math.round(x)+0.5; |
203 | y = Math.round(y)+0.5; | 204 | y = Math.round(y)+0.5; |
204 | this.ctx.lineTo(x, y) | 205 | this.ctx.lineTo(x, y); |
205 | }; | 206 | }; |
206 | 207 | ||
207 | RrdGfxCanvas.prototype.text = function (x, y, color, font, tabwidth, angle, h_align, v_align, text) | 208 | RrdGfxCanvas.prototype.text = function (x, y, color, font, tabwidth, angle, h_align, v_align, text) |
diff --git a/js/RrdGfxPdf.js b/js/RrdGfxPdf.js index 9203020..230d441 100644 --- a/js/RrdGfxPdf.js +++ b/js/RrdGfxPdf.js | |||
@@ -267,7 +267,7 @@ RrdGfxPdf.prototype.moveTo = function (x,y) | |||
267 | 267 | ||
268 | RrdGfxPdf.prototype.lineTo = function (x,y) | 268 | RrdGfxPdf.prototype.lineTo = function (x,y) |
269 | { | 269 | { |
270 | this._lineTo(x, y) | 270 | this._lineTo(x, y); |
271 | }; | 271 | }; |
272 | 272 | ||
273 | RrdGfxPdf.prototype.text = function (x, y, color, font, tabwidth, angle, h_align, v_align, text) | 273 | RrdGfxPdf.prototype.text = function (x, y, color, font, tabwidth, angle, h_align, v_align, text) |
@@ -319,7 +319,7 @@ RrdGfxPdf.prototype.text = function (x, y, color, font, tabwidth, angle, h_align | |||
319 | } | 319 | } |
320 | 320 | ||
321 | x = x*this.k; | 321 | x = x*this.k; |
322 | y = (this.h-y)*this.k | 322 | y = (this.h-y)*this.k; |
323 | 323 | ||
324 | var tm = []; | 324 | var tm = []; |
325 | tm[0] = Math.cos(angle*Math.PI/180.0); | 325 | tm[0] = Math.cos(angle*Math.PI/180.0); |
@@ -834,7 +834,7 @@ RrdGfxPdf.prototype._putstream = function(s) | |||
834 | this._out('stream'); | 834 | this._out('stream'); |
835 | this._out(s); | 835 | this._out(s); |
836 | this._out('endstream'); | 836 | this._out('endstream'); |
837 | }, | 837 | }; |
838 | 838 | ||
839 | RrdGfxPdf.prototype._out = function(s) | 839 | RrdGfxPdf.prototype._out = function(s) |
840 | { | 840 | { |
@@ -964,7 +964,7 @@ RrdGfxPdf.prototype._putcatalog = function() | |||
964 | this._out('/OpenAction [3 0 R /FitH null]'); | 964 | this._out('/OpenAction [3 0 R /FitH null]'); |
965 | else if(this.ZoomMode=='real') | 965 | else if(this.ZoomMode=='real') |
966 | this._out('/OpenAction [3 0 R /XYZ null null 1]'); | 966 | this._out('/OpenAction [3 0 R /XYZ null null 1]'); |
967 | else if(!(typeof this.ZoomMode === 'string')) | 967 | else if(typeof this.ZoomMode !== 'string') |
968 | this._out('/OpenAction [3 0 R /XYZ null null '+sprintf('%.2F',this.ZoomMode/100)+']'); | 968 | this._out('/OpenAction [3 0 R /XYZ null null '+sprintf('%.2F',this.ZoomMode/100)+']'); |
969 | 969 | ||
970 | if(this.LayoutMode=='single') | 970 | if(this.LayoutMode=='single') |
diff --git a/js/RrdGfxSvg.js b/js/RrdGfxSvg.js index 2bdc1b9..ffc0071 100644 --- a/js/RrdGfxSvg.js +++ b/js/RrdGfxSvg.js | |||
@@ -25,7 +25,7 @@ | |||
25 | * @constructor | 25 | * @constructor |
26 | */ | 26 | */ |
27 | var RrdGfxSvg = function(svgId) { | 27 | var RrdGfxSvg = function(svgId) { |
28 | this.svg = document.getElementById(svgId) | 28 | this.svg = document.getElementById(svgId); |
29 | this.svgns = "http://www.w3.org/2000/svg"; | 29 | this.svgns = "http://www.w3.org/2000/svg"; |
30 | this.xmlns = "http://www.w3.org/XML/1998/namespace"; | 30 | this.xmlns = "http://www.w3.org/XML/1998/namespace"; |
31 | this.path = null; | 31 | this.path = null; |
diff --git a/js/RrdGraph.js b/js/RrdGraph.js index 55a131d..7171a9c 100644 --- a/js/RrdGraph.js +++ b/js/RrdGraph.js | |||
@@ -88,7 +88,7 @@ var RrdGraphDesc = function (graph) | |||
88 | 88 | ||
89 | /** ** **/ | 89 | /** ** **/ |
90 | var args = []; // FIXME other way ¿? | 90 | var args = []; // FIXME other way ¿? |
91 | var type = arguments[1] | 91 | var type = arguments[1]; |
92 | args[0] = arguments[0]; | 92 | args[0] = arguments[0]; |
93 | for(var i = 2; i < arguments.length; i++) args[i-1] = arguments[i]; | 93 | for(var i = 2; i < arguments.length; i++) args[i-1] = arguments[i]; |
94 | 94 | ||
@@ -707,7 +707,7 @@ var RrdGraph = function (gfx, data) | |||
707 | { | 707 | { |
708 | this.gfx = gfx; /* graphics object */ | 708 | this.gfx = gfx; /* graphics object */ |
709 | this.data = data; /* fetch data object */ | 709 | this.data = data; /* fetch data object */ |
710 | this.data_need_fetch = [] /* List of data that need to be fetched */ | 710 | this.data_need_fetch = []; /* List of data that need to be fetched */ |
711 | 711 | ||
712 | this.minval = Number.NaN; /* extreme values in the data */ | 712 | this.minval = Number.NaN; /* extreme values in the data */ |
713 | this.maxval = Number.NaN; | 713 | this.maxval = Number.NaN; |
@@ -1197,13 +1197,13 @@ RrdGraph.prototype.print_calc = function() | |||
1197 | case RrdGraphDesc.GF_HRULE: | 1197 | case RrdGraphDesc.GF_HRULE: |
1198 | if (isNaN(this.gdes[i].yrule)) { /* we must set this here or the legend printer can not decide to print the legend */ | 1198 | if (isNaN(this.gdes[i].yrule)) { /* we must set this here or the legend printer can not decide to print the legend */ |
1199 | this.gdes[i].yrule = this.gdes[vidx].vf.val; | 1199 | this.gdes[i].yrule = this.gdes[vidx].vf.val; |
1200 | }; | 1200 | } |
1201 | graphelement = 1; | 1201 | graphelement = 1; |
1202 | break; | 1202 | break; |
1203 | case RrdGraphDesc.GF_VRULE: | 1203 | case RrdGraphDesc.GF_VRULE: |
1204 | if (this.gdes[i].xrule === 0) { /* again ... the legend printer needs it */ | 1204 | if (this.gdes[i].xrule === 0) { /* again ... the legend printer needs it */ |
1205 | this.gdes[i].xrule = this.gdes[vidx].vf.when; | 1205 | this.gdes[i].xrule = this.gdes[vidx].vf.when; |
1206 | }; | 1206 | } |
1207 | graphelement = 1; | 1207 | graphelement = 1; |
1208 | break; | 1208 | break; |
1209 | case RrdGraphDesc.GF_COMMENT: | 1209 | case RrdGraphDesc.GF_COMMENT: |
@@ -1216,7 +1216,6 @@ RrdGraph.prototype.print_calc = function() | |||
1216 | break; | 1216 | break; |
1217 | case RrdGraphDesc.GF_STACK: | 1217 | case RrdGraphDesc.GF_STACK: |
1218 | throw new RrdGraphError("STACK should already be turned into LINE or AREA here"); | 1218 | throw new RrdGraphError("STACK should already be turned into LINE or AREA here"); |
1219 | break; | ||
1220 | } | 1219 | } |
1221 | } | 1220 | } |
1222 | return graphelement; | 1221 | return graphelement; |
@@ -1287,7 +1286,7 @@ RrdGraph.prototype.reduce_data = function(gdes, cur_step) | |||
1287 | newval = gdes.data[srcptr + i*gdes.ds_cnt + col]; | 1286 | newval = gdes.data[srcptr + i*gdes.ds_cnt + col]; |
1288 | break; | 1287 | break; |
1289 | } | 1288 | } |
1290 | } | 1289 | } |
1291 | } | 1290 | } |
1292 | 1291 | ||
1293 | if (validval === 0) { | 1292 | if (validval === 0) { |
@@ -1316,8 +1315,8 @@ RrdGraph.prototype.reduce_data = function(gdes, cur_step) | |||
1316 | row_cnt -= reduce_factor; | 1315 | row_cnt -= reduce_factor; |
1317 | } | 1316 | } |
1318 | if (end_offset) { | 1317 | if (end_offset) { |
1319 | for (col = 0; col < gdes.ds_cnt; col++) | 1318 | for (col = 0; col < gdes.ds_cnt; col++) |
1320 | gdes.data[dstptr++] = Number.NaN; | 1319 | gdes.data[dstptr++] = Number.NaN; |
1321 | } | 1320 | } |
1322 | }; | 1321 | }; |
1323 | 1322 | ||
@@ -1396,7 +1395,7 @@ RrdGraph.prototype.data_fetch_async = function () | |||
1396 | } | 1395 | } |
1397 | } | 1396 | } |
1398 | this.data_need_fetch.push(0); | 1397 | this.data_need_fetch.push(0); |
1399 | } | 1398 | } |
1400 | 1399 | ||
1401 | for (var i = 0, gdes_c = this.gdes.length; i < gdes_c; i++) { | 1400 | for (var i = 0, gdes_c = this.gdes.length; i < gdes_c; i++) { |
1402 | if (this.data_need_fetch[i] == 0) { | 1401 | if (this.data_need_fetch[i] == 0) { |
@@ -1619,7 +1618,6 @@ RrdGraph.prototype.data_proc = function() | |||
1619 | break; | 1618 | break; |
1620 | case RrdGraphDesc.GF_STACK: | 1619 | case RrdGraphDesc.GF_STACK: |
1621 | throw new RrdGraphError("STACK should already be turned into LINE or AREA here"); | 1620 | throw new RrdGraphError("STACK should already be turned into LINE or AREA here"); |
1622 | break; | ||
1623 | default: | 1621 | default: |
1624 | break; | 1622 | break; |
1625 | } | 1623 | } |
@@ -1699,7 +1697,7 @@ RrdGraph.prototype.leg_place = function (calc_width) | |||
1699 | } | 1697 | } |
1700 | 1698 | ||
1701 | if (this.gdes[i].legend != null) { | 1699 | if (this.gdes[i].legend != null) { |
1702 | this.gdes[i].legend = this.gdes[i].legend.replace(/\\t/gi, "\t") /* turn \\t into tab */ | 1700 | this.gdes[i].legend = this.gdes[i].legend.replace(/\\t/gi, "\t"); /* turn \\t into tab */ |
1703 | leg_cc = this.gdes[i].legend.length; | 1701 | leg_cc = this.gdes[i].legend.length; |
1704 | } else { | 1702 | } else { |
1705 | leg_cc = 0; | 1703 | leg_cc = 0; |
@@ -1863,7 +1861,7 @@ RrdGraph.prototype.horizontal_log_grid = function () | |||
1863 | [ 1.0, 2.0, 4.0, 6.0, 8.0, 10., 0.0, 0.0, 0.0, 0.0 ], | 1861 | [ 1.0, 2.0, 4.0, 6.0, 8.0, 10., 0.0, 0.0, 0.0, 0.0 ], |
1864 | [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10. ], | 1862 | [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10. ], |
1865 | [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] /* last line */ | 1863 | [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] /* last line */ |
1866 | ]; | 1864 | ]; |
1867 | var i, j, val_exp, min_exp; | 1865 | var i, j, val_exp, min_exp; |
1868 | var nex; /* number of decades in data */ | 1866 | var nex; /* number of decades in data */ |
1869 | var logscale; /* scale in logarithmic space */ | 1867 | var logscale; /* scale in logarithmic space */ |
@@ -1885,7 +1883,7 @@ RrdGraph.prototype.horizontal_log_grid = function () | |||
1885 | /* major spacing for less dynamic data */ | 1883 | /* major spacing for less dynamic data */ |
1886 | do { | 1884 | do { |
1887 | mid++; | 1885 | mid++; |
1888 | for (i = 0; yloglab[mid][i + 1] < 10.0; i++) {}; | 1886 | for (i = 0; yloglab[mid][i + 1] < 10.0; i++) ; |
1889 | mspac = logscale * Math.log(10.0 / yloglab[mid][i])/Math.LN10; | 1887 | mspac = logscale * Math.log(10.0 / yloglab[mid][i])/Math.LN10; |
1890 | } while (mspac > 1.56 * this.TEXT.LEGEND.size && yloglab[mid][0] > 0); // FIXME 2->1.56 ?? | 1888 | } while (mspac > 1.56 * this.TEXT.LEGEND.size && yloglab[mid][0] > 0); // FIXME 2->1.56 ?? |
1891 | if (mid) mid--; | 1889 | if (mid) mid--; |
@@ -1966,7 +1964,7 @@ RrdGraph.prototype.horizontal_log_grid = function () | |||
1966 | if (mid < 4 && exfrac === 1) { /* minor grid */ | 1964 | if (mid < 4 && exfrac === 1) { /* minor grid */ |
1967 | if (flab === 0) { /* find first and last minor line behind current major line * i is the first line and j tha last */ | 1965 | if (flab === 0) { /* find first and last minor line behind current major line * i is the first line and j tha last */ |
1968 | min_exp = val_exp - 1; | 1966 | min_exp = val_exp - 1; |
1969 | for (i = 1; yloglab[mid][i] < 10.0; i++) {}; | 1967 | for (i = 1; yloglab[mid][i] < 10.0; i++) ; |
1970 | i = yloglab[mid][i - 1] + 1; | 1968 | i = yloglab[mid][i - 1] + 1; |
1971 | j = 10; | 1969 | j = 10; |
1972 | } else { | 1970 | } else { |
@@ -2002,7 +2000,7 @@ RrdGraph.prototype.horizontal_log_grid = function () | |||
2002 | if (mid < 4 && exfrac === 1) { /* draw minor lines after highest major line */ | 2000 | if (mid < 4 && exfrac === 1) { /* draw minor lines after highest major line */ |
2003 | if (flab === 0) { /* find first and last minor line below current major line * i is the first line and j tha last */ | 2001 | if (flab === 0) { /* find first and last minor line below current major line * i is the first line and j tha last */ |
2004 | min_exp = val_exp - 1; | 2002 | min_exp = val_exp - 1; |
2005 | for (i = 1; yloglab[mid][i] < 10.0; i++) {}; | 2003 | for (i = 1; yloglab[mid][i] < 10.0; i++) ; |
2006 | i = yloglab[mid][i - 1] + 1; | 2004 | i = yloglab[mid][i - 1] + 1; |
2007 | j = 10; | 2005 | j = 10; |
2008 | } else { | 2006 | } else { |
@@ -2386,20 +2384,20 @@ RrdGraph.prototype.grid_paint = function() | |||
2386 | this.GRC.FONT, this.TEXT.TITLE, this.tabwidth, 0.0, RrdGraph.GFX_H_CENTER, RrdGraph.GFX_V_TOP, this.title); | 2384 | this.GRC.FONT, this.TEXT.TITLE, this.tabwidth, 0.0, RrdGraph.GFX_H_CENTER, RrdGraph.GFX_V_TOP, this.title); |
2387 | /* rrdtool 'logo' */ | 2385 | /* rrdtool 'logo' */ |
2388 | if (!this.no_rrdtool_tag){ | 2386 | if (!this.no_rrdtool_tag){ |
2389 | var color = this.parse_color(this.GRC.FONT); | 2387 | var color = this.parse_color(this.GRC.FONT); |
2390 | color[3] = 0.3; | 2388 | color[3] = 0.3; |
2391 | var water_color = this.color2rgba(color); | 2389 | var water_color = this.color2rgba(color); |
2392 | var xpos = this.legendposition === RrdGraph.LEGEND_POS_EAST ? this.xOriginLegendY : this.ximg - 4; | 2390 | var xpos = this.legendposition === RrdGraph.LEGEND_POS_EAST ? this.xOriginLegendY : this.ximg - 4; |
2393 | this.gfx.text(xpos, 5, water_color, this.TEXT.WATERMARK, this.tabwidth, | 2391 | this.gfx.text(xpos, 5, water_color, this.TEXT.WATERMARK, this.tabwidth, |
2394 | -90, RrdGraph.GFX_H_LEFT, RrdGraph.GFX_V_TOP, "RRDTOOL / TOBI OETIKER"); | 2392 | -90, RrdGraph.GFX_H_LEFT, RrdGraph.GFX_V_TOP, "RRDTOOL / TOBI OETIKER"); |
2395 | } | 2393 | } |
2396 | /* graph watermark */ | 2394 | /* graph watermark */ |
2397 | if (this.watermark) { | 2395 | if (this.watermark) { |
2398 | var color = this.parse_color(this.GRC.FONT) | 2396 | var color = this.parse_color(this.GRC.FONT); |
2399 | color[3] = 0.3; | 2397 | color[3] = 0.3; |
2400 | var water_color = this.color2rgba(color); | 2398 | var water_color = this.color2rgba(color); |
2401 | this.gfx.text(this.ximg / 2, this.yimg - 6, water_color, this.TEXT.WATERMARK , this.tabwidth, 0, | 2399 | this.gfx.text(this.ximg / 2, this.yimg - 6, water_color, this.TEXT.WATERMARK , this.tabwidth, 0, |
2402 | RrdGraph.GFX_H_CENTER, RrdGraph.GFX_V_BOTTOM, this.watermark); | 2400 | RrdGraph.GFX_H_CENTER, RrdGraph.GFX_V_BOTTOM, this.watermark); |
2403 | } | 2401 | } |
2404 | /* graph labels */ | 2402 | /* graph labels */ |
2405 | if (!(this.no_legend) && !(this.only_graph)) { | 2403 | if (!(this.no_legend) && !(this.only_graph)) { |
@@ -2664,11 +2662,11 @@ RrdGraph.prototype.graph_paint_init = function() | |||
2664 | // this.gdes[i].end_orig = this.end; | 2662 | // this.gdes[i].end_orig = this.end; |
2665 | } | 2663 | } |
2666 | 2664 | ||
2667 | } | 2665 | }; |
2668 | 2666 | ||
2669 | RrdGraph.prototype.graph_paint_draw = function() | 2667 | RrdGraph.prototype.graph_paint_draw = function() |
2670 | { | 2668 | { |
2671 | var areazero = 0.0 | 2669 | var areazero = 0.0; |
2672 | var lastgdes = null; | 2670 | var lastgdes = null; |
2673 | 2671 | ||
2674 | if (this.data_calc() === -1) | 2672 | if (this.data_calc() === -1) |
@@ -2773,7 +2771,7 @@ RrdGraph.prototype.graph_paint_draw = function() | |||
2773 | this.gfx.moveTo(x, y); | 2771 | this.gfx.moveTo(x, y); |
2774 | x = ii + this.xorigin; | 2772 | x = ii + this.xorigin; |
2775 | y = last_y; | 2773 | y = last_y; |
2776 | this.gfx.lineTo(x, y) | 2774 | this.gfx.lineTo(x, y); |
2777 | } else { | 2775 | } else { |
2778 | var x = ii - 1 + this.xorigin; | 2776 | var x = ii - 1 + this.xorigin; |
2779 | var y = this.ytr(this.gdes[i].p_data[ii - 1]); | 2777 | var y = this.ytr(this.gdes[i].p_data[ii - 1]); |
@@ -2886,7 +2884,6 @@ RrdGraph.prototype.graph_paint_draw = function() | |||
2886 | break; | 2884 | break; |
2887 | case RrdGraphDesc.GF_STACK: | 2885 | case RrdGraphDesc.GF_STACK: |
2888 | throw new RrdGraphError("STACK should already be turned into LINE or AREA here"); | 2886 | throw new RrdGraphError("STACK should already be turned into LINE or AREA here"); |
2889 | break; | ||
2890 | } | 2887 | } |
2891 | } | 2888 | } |
2892 | //cairo_reset_clip(this.cr); | 2889 | //cairo_reset_clip(this.cr); |
@@ -2920,16 +2917,16 @@ RrdGraph.prototype.graph_paint_draw = function() | |||
2920 | 2917 | ||
2921 | RrdGraph.prototype.graph_paint = function () | 2918 | RrdGraph.prototype.graph_paint = function () |
2922 | { | 2919 | { |
2923 | this.graph_paint_init() | 2920 | this.graph_paint_init(); |
2924 | if (this.data_fetch() === -1) | 2921 | if (this.data_fetch() === -1) |
2925 | return -1; | 2922 | return -1; |
2926 | return this.graph_paint_draw() | 2923 | return this.graph_paint_draw(); |
2927 | }; | 2924 | }; |
2928 | 2925 | ||
2929 | RrdGraph.prototype.graph_paint_async = function () | 2926 | RrdGraph.prototype.graph_paint_async = function () |
2930 | { | 2927 | { |
2931 | this.graph_paint_init() | 2928 | this.graph_paint_init(); |
2932 | this.data_fetch_async() | 2929 | this.data_fetch_async(); |
2933 | }; | 2930 | }; |
2934 | 2931 | ||
2935 | RrdGraph.prototype.find_var = function(key) | 2932 | RrdGraph.prototype.find_var = function(key) |
diff --git a/js/RrdJson.js b/js/RrdJson.js index fcbf76b..4ddcbc2 100644 --- a/js/RrdJson.js +++ b/js/RrdJson.js | |||
@@ -26,11 +26,11 @@ | |||
26 | */ | 26 | */ |
27 | var RrdJson = function() { | 27 | var RrdJson = function() { |
28 | if (arguments.length == 1) { | 28 | if (arguments.length == 1) { |
29 | this.init1.apply(this, arguments); | 29 | this.init1.apply(this, arguments); |
30 | } else if (arguments.length == 2) { | 30 | } else if (arguments.length == 2) { |
31 | this.init2.apply(this, arguments); | 31 | this.init2.apply(this, arguments); |
32 | } else if (arguments.length == 3) { | 32 | } else if (arguments.length == 3) { |
33 | this.init3.apply(this, arguments); | 33 | this.init3.apply(this, arguments); |
34 | } | 34 | } |
35 | }; | 35 | }; |
36 | 36 | ||
@@ -40,12 +40,12 @@ RrdJson.prototype = { | |||
40 | 40 | ||
41 | init1: function (rrdgraph) | 41 | init1: function (rrdgraph) |
42 | { | 42 | { |
43 | this.graph = rrdgraph | 43 | this.graph = rrdgraph; |
44 | }, | 44 | }, |
45 | init2: function (rrdgraph, jsonstr) | 45 | init2: function (rrdgraph, jsonstr) |
46 | { | 46 | { |
47 | this.json = JSON.parse(jsonstr); | 47 | this.json = JSON.parse(jsonstr); |
48 | this.graph = rrdgraph | 48 | this.graph = rrdgraph; |
49 | }, | 49 | }, |
50 | init3: function (gfx, fetch, jsonstr) | 50 | init3: function (gfx, fetch, jsonstr) |
51 | { | 51 | { |
@@ -69,7 +69,7 @@ RrdJson.prototype = { | |||
69 | if (color in this.graph.GRC) { | 69 | if (color in this.graph.GRC) { |
70 | this.graph.GRC[color] = this.json.color[color]; | 70 | this.graph.GRC[color] = this.json.color[color]; |
71 | } else { | 71 | } else { |
72 | throw "invalid color name '"+name+"'"; | 72 | throw "invalid color '" + color + "'"; |
73 | } | 73 | } |
74 | } | 74 | } |
75 | break; | 75 | break; |
@@ -191,16 +191,21 @@ RrdJson.prototype = { | |||
191 | this.graph.second_axis_format = this.json.right_axis_format; | 191 | this.graph.second_axis_format = this.json.right_axis_format; |
192 | break; | 192 | break; |
193 | case 'legend_position': | 193 | case 'legend_position': |
194 | if (this.json.legend_position === "north") { | 194 | switch (this.json.legend_position) { |
195 | this.graph.legendposition = this.graph.LEGEND_POS.NORTH; | 195 | case "north": |
196 | } else if (this.json.legend_position === "west") { | 196 | this.graph.legendposition = this.graph.LEGEND_POS.NORTH; |
197 | this.graph.legendposition = this.graph.LEGEND_POS.WEST; | 197 | break; |
198 | } else if (this.json.legend_position === "south") { | 198 | case "west": |
199 | this.graph.legendposition = this.graph.LEGEND_POS.SOUTH; | 199 | this.graph.legendposition = this.graph.LEGEND_POS.WEST; |
200 | } else if (this.json.legend_position === "east") { | 200 | break; |
201 | this.graph.legendposition = this.graph.LEGEND_POS.EAST; | 201 | case "south": |
202 | } else { | 202 | this.graph.legendposition = this.graph.LEGEND_POS.SOUTH; |
203 | throw "unknown legend-position '"+value+"'"; | 203 | break; |
204 | case "east": | ||
205 | this.graph.legendposition = this.graph.LEGEND_POS.EAST; | ||
206 | break; | ||
207 | default: | ||
208 | throw "unknown legend-position '" + this.json.legend_position + "'"; | ||
204 | } | 209 | } |
205 | break; | 210 | break; |
206 | case 'legend_direction': | 211 | case 'legend_direction': |
@@ -209,7 +214,7 @@ RrdJson.prototype = { | |||
209 | } else if (this.json.legend_direction === "bottomup") { | 214 | } else if (this.json.legend_direction === "bottomup") { |
210 | this.graph.legenddirection = this.graph.LEGEND_DIR.BOTTOM_UP; | 215 | this.graph.legenddirection = this.graph.LEGEND_DIR.BOTTOM_UP; |
211 | } else { | 216 | } else { |
212 | throw "unknown legend-position '"+value+"'"; | 217 | throw "unknown legend-direction'" + this.json.legend_direction + "'"; |
213 | } | 218 | } |
214 | break; | 219 | break; |
215 | case 'border': | 220 | case 'border': |
@@ -272,21 +277,21 @@ RrdJson.prototype = { | |||
272 | switch (gdes[i].align) { | 277 | switch (gdes[i].align) { |
273 | case 'left': | 278 | case 'left': |
274 | this.graph.gdes_add_textalign(RrdGraphDesc.TXA_LEFT); | 279 | this.graph.gdes_add_textalign(RrdGraphDesc.TXA_LEFT); |
275 | break | 280 | break; |
276 | case 'right': | 281 | case 'right': |
277 | this.graph.gdes_add_textalign(RrdGraphDesc.TXA_RIGHT); | 282 | this.graph.gdes_add_textalign(RrdGraphDesc.TXA_RIGHT); |
278 | break | 283 | break; |
279 | case 'justified': | 284 | case 'justified': |
280 | this.graph.gdes_add_textalign(RrdGraphDesc.TXA_JUSTIFIED); | 285 | this.graph.gdes_add_textalign(RrdGraphDesc.TXA_JUSTIFIED); |
281 | break | 286 | break; |
282 | case 'center': | 287 | case 'center': |
283 | this.graph.gdes_add_textalign(RrdGraphDesc.TXA_CENTER); | 288 | this.graph.gdes_add_textalign(RrdGraphDesc.TXA_CENTER); |
284 | break | 289 | break; |
285 | } | 290 | } |
286 | break; | 291 | break; |
287 | // DEF:<vname>=<rrdfile>:<ds-name>:<CF>[:step=<step>][:start=<time>][:end=<time>][:reduce=<CF>] | 292 | // DEF:<vname>=<rrdfile>:<ds-name>:<CF>[:step=<step>][:start=<time>][:end=<time>][:reduce=<CF>] |
288 | case 'DEF': | 293 | case 'DEF': |
289 | this.graph.gdes_add_def(gdes[i].vname, gdes[i].rrdfile, gdes[i].name, gdes[i].cf, gdes[i].step, gdes[i].start, gdes[i].end, gdes[i].reduce) | 294 | this.graph.gdes_add_def(gdes[i].vname, gdes[i].rrdfile, gdes[i].name, gdes[i].cf, gdes[i].step, gdes[i].start, gdes[i].end, gdes[i].reduce); |
290 | break; | 295 | break; |
291 | // CDEF:vname=RPN expression | 296 | // CDEF:vname=RPN expression |
292 | case 'CDEF': | 297 | case 'CDEF': |
@@ -311,7 +316,7 @@ RrdJson.prototype = { | |||
311 | 316 | ||
312 | if (this.graph.alt_autoscale != false || full) | 317 | if (this.graph.alt_autoscale != false || full) |
313 | this.json.alt_autoscale = this.graph.alt_autoscale; | 318 | this.json.alt_autoscale = this.graph.alt_autoscale; |
314 | 319 | ||
315 | if (this.graph.base != 1000 || full) | 320 | if (this.graph.base != 1000 || full) |
316 | this.json.base = this.graph.base; | 321 | this.json.base = this.graph.base; |
317 | 322 | ||
@@ -338,7 +343,7 @@ RrdJson.prototype = { | |||
338 | if (this.graph.GRC.FRAME != 'rgba(0, 0, 0, 1.0)' || full) | 343 | if (this.graph.GRC.FRAME != 'rgba(0, 0, 0, 1.0)' || full) |
339 | this.json.color.FRAME = this.graph.GRC.FRAME; | 344 | this.json.color.FRAME = this.graph.GRC.FRAME; |
340 | 345 | ||
341 | if (Object.keys(this.json.color) == 0) delete this.json.color; | 346 | if (!Object.keys(this.json.color).length) delete this.json.color; |
342 | 347 | ||
343 | if (this.graph.full_size_mode != false || full) | 348 | if (this.graph.full_size_mode != false || full) |
344 | this.json.full_size_mode = this.graph.full_size_mode; | 349 | this.json.full_size_mode = this.graph.full_size_mode; |
@@ -351,10 +356,10 @@ RrdJson.prototype = { | |||
351 | 356 | ||
352 | if (this.graph.force_rules_legend != false || full) | 357 | if (this.graph.force_rules_legend != false || full) |
353 | this.json.force_rules_legend = this.graph.force_rules_legend; | 358 | this.json.force_rules_legend = this.graph.force_rules_legend; |
354 | 359 | ||
355 | if (this.graph.no_legend != false || full) | 360 | if (this.graph.no_legend != false || full) |
356 | this.json.no_legend = this.graph.no_legend; | 361 | this.json.no_legend = this.graph.no_legend; |
357 | 362 | ||
358 | this.json.width = this.graph.xsize; | 363 | this.json.width = this.graph.xsize; |
359 | this.json.height = this.graph.ysize; | 364 | this.json.height = this.graph.ysize; |
360 | 365 | ||
@@ -363,10 +368,10 @@ RrdJson.prototype = { | |||
363 | 368 | ||
364 | if (this.graph.alt_autoscale_min != false || full) | 369 | if (this.graph.alt_autoscale_min != false || full) |
365 | this.json.alt_autoscale_min = this.graph.alt_autoscale_min; | 370 | this.json.alt_autoscale_min = this.graph.alt_autoscale_min; |
366 | 371 | ||
367 | if (this.graph.only_graph != false || full) | 372 | if (this.graph.only_graph != false || full) |
368 | this.json.only_graph = this.graph.only_graph; | 373 | this.json.only_graph = this.graph.only_graph; |
369 | 374 | ||
370 | if (this.graph.unitslength != 6 || full) | 375 | if (this.graph.unitslength != 6 || full) |
371 | this.json.units_length = this.graph.unitslength; | 376 | this.json.units_length = this.graph.unitslength; |
372 | 377 | ||
@@ -381,7 +386,7 @@ RrdJson.prototype = { | |||
381 | 386 | ||
382 | if (this.graph.gridfit != true || full) | 387 | if (this.graph.gridfit != true || full) |
383 | this.json.no_gridfit = this.graph.gridfit; | 388 | this.json.no_gridfit = this.graph.gridfit; |
384 | 389 | ||
385 | this.json.font = {}; | 390 | this.json.font = {}; |
386 | if (this.graph.TEXT.DEFAULT.size != 11 || this.graph.TEXT.LEGEND.font != this.graph.DEFAULT_FONT || full) | 391 | if (this.graph.TEXT.DEFAULT.size != 11 || this.graph.TEXT.LEGEND.font != this.graph.DEFAULT_FONT || full) |
387 | this.json.font.DEFAULT = { size: this.graph.TEXT.DEFAULT.size, font: this.graph.TEXT.DEFAULT.font}; | 392 | this.json.font.DEFAULT = { size: this.graph.TEXT.DEFAULT.size, font: this.graph.TEXT.DEFAULT.font}; |
@@ -396,31 +401,31 @@ RrdJson.prototype = { | |||
396 | if (this.graph.TEXT.WATERMARK.size != 8 || this.graph.TEXT.WATERMARK.font != this.graph.DEFAULT_FONT || full) | 401 | if (this.graph.TEXT.WATERMARK.size != 8 || this.graph.TEXT.WATERMARK.font != this.graph.DEFAULT_FONT || full) |
397 | this.json.font.WATERMARK = { size: this.graph.TEXT.WATERMARK.size, font: this.graph.TEXT.WATERMARK.font}; | 402 | this.json.font.WATERMARK = { size: this.graph.TEXT.WATERMARK.size, font: this.graph.TEXT.WATERMARK.font}; |
398 | 403 | ||
399 | if (Object.keys(this.json.font) == 0) delete this.json.font; | 404 | if (!Object.keys(this.json.font).length) delete this.json.font; |
400 | 405 | ||
401 | if (this.graph.logarithmic != false || full) | 406 | if (this.graph.logarithmic != false || full) |
402 | this.json.logarithmic = this.graph.logarithmic; | 407 | this.json.logarithmic = this.graph.logarithmic; |
403 | 408 | ||
404 | if (this.graph.rigid != false || full) | 409 | if (this.graph.rigid != false || full) |
405 | this.json.rigid = this.graph.rigid; | 410 | this.json.rigid = this.graph.rigid; |
406 | 411 | ||
407 | // this.json.step = this.graph.step; // FIXME | 412 | // this.json.step = this.graph.step; // FIXME |
408 | 413 | ||
409 | if (this.graph.tabwidth != 40 || full) | 414 | if (this.graph.tabwidth != 40 || full) |
410 | this.json.tabwidth = this.graph.tabwidth; | 415 | this.json.tabwidth = this.graph.tabwidth; |
411 | 416 | ||
412 | if (this.graph.title != '' || full) | 417 | if (this.graph.title != '' || full) |
413 | this.json.title = this.graph.title; | 418 | this.json.title = this.graph.title; |
414 | 419 | ||
415 | if (!isNaN(this.graph.setmaxval) || full) | 420 | if (!isNaN(this.graph.setmaxval) || full) |
416 | this.json.upper_limit = this.graph.setmaxval; | 421 | this.json.upper_limit = this.graph.setmaxval; |
417 | 422 | ||
418 | if (this.graph.ylegend != null || full) | 423 | if (this.graph.ylegend != null || full) |
419 | this.json.vertical_label = this.graph.ylegend; | 424 | this.json.vertical_label = this.graph.ylegend; |
420 | 425 | ||
421 | if (this.graph.watermark != null || full) | 426 | if (this.graph.watermark != null || full) |
422 | this.json.watermark = this.graph.watermark; | 427 | this.json.watermark = this.graph.watermark; |
423 | 428 | ||
424 | if (this.graph.unitsexponent != 9999 || full) | 429 | if (this.graph.unitsexponent != 9999 || full) |
425 | this.json.units_exponent = this.graph.unitsexponent; | 430 | this.json.units_exponent = this.graph.unitsexponent; |
426 | 431 | ||
@@ -432,10 +437,10 @@ RrdJson.prototype = { | |||
432 | // this.json.y_grid = // FIXME | 437 | // this.json.y_grid = // FIXME |
433 | 438 | ||
434 | // this.json.lazy = this.graph.lazy; | 439 | // this.json.lazy = this.graph.lazy; |
435 | 440 | ||
436 | if (this.graph.force_units_si != false || full) | 441 | if (this.graph.force_units_si != false || full) |
437 | this.json.units = 'si'; // FIXME | 442 | this.json.units = 'si'; // FIXME |
438 | 443 | ||
439 | if (this.graph.no_rrdtool_tag != false || full) | 444 | if (this.graph.no_rrdtool_tag != false || full) |
440 | this.json.disable_rrdtool_tag = this.graph.no_rrdtool_tag; | 445 | this.json.disable_rrdtool_tag = this.graph.no_rrdtool_tag; |
441 | 446 | ||
@@ -451,13 +456,13 @@ RrdJson.prototype = { | |||
451 | 456 | ||
452 | if (this.graph.draw_3d_border != 2 || full) | 457 | if (this.graph.draw_3d_border != 2 || full) |
453 | this.json.border = this.graph.draw_3d_border; | 458 | this.json.border = this.graph.draw_3d_border; |
454 | 459 | ||
455 | if (this.graph.grid_dash_on != 1 || this.graph.grid_dash_off != 1 || full) | 460 | if (this.graph.grid_dash_on != 1 || this.graph.grid_dash_off != 1 || full) |
456 | this.json.grid_dash = [this.graph.grid_dash_on, this.graph.grid_dash_off] | 461 | this.json.grid_dash = [this.graph.grid_dash_on, this.graph.grid_dash_off]; |
457 | 462 | ||
458 | if (this.graph.dynamic_labels != false || full) | 463 | if (this.graph.dynamic_labels != false || full) |
459 | this.json.dynamic_labels = this.graph.dynamic_labels; | 464 | this.json.dynamic_labels = this.graph.dynamic_labels; |
460 | 465 | ||
461 | this.json.gdes = []; | 466 | this.json.gdes = []; |
462 | for (var i = 0, gdes_c = this.graph.gdes.length; i < gdes_c; i++) { | 467 | for (var i = 0, gdes_c = this.graph.gdes.length; i < gdes_c; i++) { |
463 | switch (this.graph.gdes[i].gf) { | 468 | switch (this.graph.gdes[i].gf) { |
@@ -465,7 +470,7 @@ RrdJson.prototype = { | |||
465 | case RrdGraphDesc.GF_GPRINT: | 470 | case RrdGraphDesc.GF_GPRINT: |
466 | this.json.gdes.push({ | 471 | this.json.gdes.push({ |
467 | type: 'GPRINT', | 472 | type: 'GPRINT', |
468 | vname: this.graph.gdes[i].vname, | 473 | vname: this.graph.gdes[i].vname, |
469 | cf: RrdGraphDesc.cf2str(this.graph.gdes[i].cf), | 474 | cf: RrdGraphDesc.cf2str(this.graph.gdes[i].cf), |
470 | format: this.graph.gdes[i].format, | 475 | format: this.graph.gdes[i].format, |
471 | strftm: (this.graph.gdes[i].strftm === false ? undefined : this.graph.gdes[i].strftm) }); | 476 | strftm: (this.graph.gdes[i].strftm === false ? undefined : this.graph.gdes[i].strftm) }); |
@@ -526,16 +531,16 @@ RrdJson.prototype = { | |||
526 | switch (this.graph.gdes[i].txtalign) { | 531 | switch (this.graph.gdes[i].txtalign) { |
527 | case RrdGraphDesc.TXA_LEFT: | 532 | case RrdGraphDesc.TXA_LEFT: |
528 | align = 'left'; | 533 | align = 'left'; |
529 | break | 534 | break; |
530 | case RrdGraphDesc.TXA_RIGHT: | 535 | case RrdGraphDesc.TXA_RIGHT: |
531 | align = 'right'; | 536 | align = 'right'; |
532 | break | 537 | break; |
533 | case RrdGraphDesc.TXA_JUSTIFIED: | 538 | case RrdGraphDesc.TXA_JUSTIFIED: |
534 | align = 'justified'; | 539 | align = 'justified'; |
535 | break | 540 | break; |
536 | case RrdGraphDesc.TXA_CENTER: | 541 | case RrdGraphDesc.TXA_CENTER: |
537 | align = 'center'; | 542 | align = 'center'; |
538 | break | 543 | break; |
539 | } | 544 | } |
540 | 545 | ||
541 | this.json.gdes.push({ | 546 | this.json.gdes.push({ |
@@ -559,7 +564,7 @@ RrdJson.prototype = { | |||
559 | // reduce: RrdGraphDesc.cf2str(this.graph.gdes[i].cf_reduce) | 564 | // reduce: RrdGraphDesc.cf2str(this.graph.gdes[i].cf_reduce) |
560 | reduce: undefined | 565 | reduce: undefined |
561 | }); | 566 | }); |
562 | 567 | ||
563 | break; | 568 | break; |
564 | // CDEF:vname=RPN expression | 569 | // CDEF:vname=RPN expression |
565 | case RrdGraphDesc.GF_CDEF: | 570 | case RrdGraphDesc.GF_CDEF: |
diff --git a/js/RrdRpn.js b/js/RrdRpn.js index cbb5e8f..5ca8daf 100644 --- a/js/RrdRpn.js +++ b/js/RrdRpn.js | |||
@@ -478,7 +478,7 @@ RrdRpn.prototype.calc = function (data_idx, output, output_idx) | |||
478 | break; | 478 | break; |
479 | case RrdRpn.OP_ISINF: | 479 | case RrdRpn.OP_ISINF: |
480 | if(stptr < 0) throw new RrdRpnError(); | 480 | if(stptr < 0) throw new RrdRpnError(); |
481 | this.rpnstack[stptr] = isInfinite(this.rpnstack[stptr]) ? 1.0 : 0.0; | 481 | this.rpnstack[stptr] = !isFinite(this.rpnstack[stptr]) ? 1.0 : 0.0; |
482 | break; | 482 | break; |
483 | case RrdRpn.OP_SQRT: | 483 | case RrdRpn.OP_SQRT: |
484 | if(stptr < 0) throw new RrdRpnError(); | 484 | if(stptr < 0) throw new RrdRpnError(); |
@@ -603,7 +603,7 @@ RrdRpn.prototype.calc = function (data_idx, output, output_idx) | |||
603 | break; | 603 | break; |
604 | case RrdRpn.OP_ABS: | 604 | case RrdRpn.OP_ABS: |
605 | if(stptr < 0) throw new RrdRpnError(); | 605 | if(stptr < 0) throw new RrdRpnError(); |
606 | this.rpnstack[stptr] = fabs(this.rpnstack[stptr]); | 606 | this.rpnstack[stptr] = Math.abs(this.rpnstack[stptr]); |
607 | break; | 607 | break; |
608 | case RrdRpn.OP_END: | 608 | case RrdRpn.OP_END: |
609 | break; | 609 | break; |
diff --git a/js/RrdTime.js b/js/RrdTime.js index 95ea0ae..c1de1fc 100644 --- a/js/RrdTime.js +++ b/js/RrdTime.js | |||
@@ -25,12 +25,12 @@ | |||
25 | * RrdTimeError | 25 | * RrdTimeError |
26 | * @constructor | 26 | * @constructor |
27 | */ | 27 | */ |
28 | var RrdTimeError = function (message) | 28 | var RrdTimeError = function (message) |
29 | { | 29 | { |
30 | this.prototype = Error.prototype; | 30 | this.prototype = Error.prototype; |
31 | this.name = "RrdTimeError"; | 31 | this.name = "RrdTimeError"; |
32 | this.message = (message) ? message : "Error"; | 32 | this.message = (message) ? message : "Error"; |
33 | }; | 33 | }; |
34 | 34 | ||
35 | /** | 35 | /** |
36 | * RrdTime | 36 | * RrdTime |
@@ -40,7 +40,7 @@ var RrdTime = function(tspec) /* parser */ | |||
40 | { | 40 | { |
41 | var date = new Date(); | 41 | var date = new Date(); |
42 | var hr = 0; | 42 | var hr = 0; |
43 | 43 | ||
44 | this.tspec = tspec; | 44 | this.tspec = tspec; |
45 | 45 | ||
46 | this.tokens = (tspec+'').match(/[0-9]+|[A-Za-z]+|[:.+-\/]/g); | 46 | this.tokens = (tspec+'').match(/[0-9]+|[A-Za-z]+|[:.+-\/]/g); |
@@ -70,18 +70,20 @@ var RrdTime = function(tspec) /* parser */ | |||
70 | break; /* jump to OFFSET-SPEC part */ | 70 | break; /* jump to OFFSET-SPEC part */ |
71 | case RrdTime.EPOCH: | 71 | case RrdTime.EPOCH: |
72 | this.type = RrdTime.RELATIVE_TO_EPOCH; | 72 | this.type = RrdTime.RELATIVE_TO_EPOCH; |
73 | /* falls through */ | ||
73 | case RrdTime.START: | 74 | case RrdTime.START: |
74 | case RrdTime.END: | 75 | case RrdTime.END: |
75 | if (this.tokid === RrdTime.EPOCH) | 76 | if (this.tokid === RrdTime.EPOCH) |
76 | this.type = RrdTime.RELATIVE_TO_START_TIME; | 77 | this.type = RrdTime.RELATIVE_TO_START_TIME; |
77 | else | 78 | else |
78 | this.type = RrdTime.RELATIVE_TO_END_TIME; | 79 | this.type = RrdTime.RELATIVE_TO_END_TIME; |
79 | this.tm_sec = 0; | 80 | this.tm_sec = 0; |
80 | this.tm_min = 0; | 81 | this.tm_min = 0; |
81 | this.tm_hour = 0; | 82 | this.tm_hour = 0; |
82 | this.tm_mday = 0; | 83 | this.tm_mday = 0; |
83 | this.tm_mon = 0; | 84 | this.tm_mon = 0; |
84 | this.tm_year = 0; | 85 | this.tm_year = 0; |
86 | /* falls through */ | ||
85 | case RrdTime.NOW: | 87 | case RrdTime.NOW: |
86 | var time_reference = this.tokid; | 88 | var time_reference = this.tokid; |
87 | this.gettok(); | 89 | this.gettok(); |
@@ -126,8 +128,10 @@ var RrdTime = function(tspec) /* parser */ | |||
126 | break; | 128 | break; |
127 | case RrdTime.TEATIME: | 129 | case RrdTime.TEATIME: |
128 | hr += 4; | 130 | hr += 4; |
131 | /* falls through */ | ||
129 | case RrdTime.NOON: | 132 | case RrdTime.NOON: |
130 | hr += 12; | 133 | hr += 12; |
134 | /* falls through */ | ||
131 | case RrdTime.MIDNIGHT: | 135 | case RrdTime.MIDNIGHT: |
132 | this.tm_hour = hr; | 136 | this.tm_hour = hr; |
133 | this.tm_min = 0; | 137 | this.tm_min = 0; |
@@ -137,7 +141,6 @@ var RrdTime = function(tspec) /* parser */ | |||
137 | break; | 141 | break; |
138 | default: | 142 | default: |
139 | throw new RrdTimeError("unparsable time: "+this.token+" "+this.sct); | 143 | throw new RrdTimeError("unparsable time: "+this.token+" "+this.sct); |
140 | break; | ||
141 | } /* ugly case statement */ | 144 | } /* ugly case statement */ |
142 | 145 | ||
143 | /* | 146 | /* |
@@ -303,7 +306,7 @@ RrdTime.RELATIVE_TO_START_TIME = 1; | |||
303 | RrdTime.RELATIVE_TO_END_TIME = 2; | 306 | RrdTime.RELATIVE_TO_END_TIME = 2; |
304 | RrdTime.RELATIVE_TO_EPOCH = 3; | 307 | RrdTime.RELATIVE_TO_EPOCH = 3; |
305 | 308 | ||
306 | RrdTime.prototype.gettok = function () | 309 | RrdTime.prototype.gettok = function () |
307 | { | 310 | { |
308 | if (this.tokidx >= this.toklen) { | 311 | if (this.tokidx >= this.toklen) { |
309 | this.tokid = RrdTime.EOF; | 312 | this.tokid = RrdTime.EOF; |
@@ -332,7 +335,7 @@ RrdTime.prototype.gettok = function () | |||
332 | return this.tokid; | 335 | return this.tokid; |
333 | }; | 336 | }; |
334 | 337 | ||
335 | RrdTime.prototype.plus_minus = function (doop) | 338 | RrdTime.prototype.plus_minus = function (doop) |
336 | { | 339 | { |
337 | var op = RrdTime.PLUS; | 340 | var op = RrdTime.PLUS; |
338 | var prev_multiplier = -1; | 341 | var prev_multiplier = -1; |
@@ -377,6 +380,7 @@ RrdTime.prototype.plus_minus = function (doop) | |||
377 | return; | 380 | return; |
378 | case RrdTime.WEEKS: | 381 | case RrdTime.WEEKS: |
379 | delta *= 7; | 382 | delta *= 7; |
383 | /* falls through */ | ||
380 | case RrdTime.DAYS: | 384 | case RrdTime.DAYS: |
381 | this.tm_mday += ( op == RrdTime.PLUS) ? delta : -delta; | 385 | this.tm_mday += ( op == RrdTime.PLUS) ? delta : -delta; |
382 | return; | 386 | return; |
@@ -446,12 +450,12 @@ RrdTime.prototype.tod = function() /* tod() computes the time of day (TIME-OF-DA | |||
446 | this.tm_min = minute; | 450 | this.tm_min = minute; |
447 | this.tm_sec = 0; | 451 | this.tm_sec = 0; |
448 | if (this.tm_hour == 24) { | 452 | if (this.tm_hour == 24) { |
449 | this.tm_hour = 0; | 453 | this.tm_hour = 0; |
450 | this.tm_mday++; | 454 | this.tm_mday++; |
451 | } | 455 | } |
452 | }; | 456 | }; |
453 | 457 | ||
454 | RrdTime.prototype.assign_date = function(mday, mon, year) | 458 | RrdTime.prototype.assign_date = function(mday, mon, year) |
455 | { | 459 | { |
456 | if (year > 138) { | 460 | if (year > 138) { |
457 | if (year > 1970) { | 461 | if (year > 1970) { |
@@ -472,14 +476,14 @@ RrdTime.prototype.assign_date = function(mday, mon, year) | |||
472 | this.tm_year = year; | 476 | this.tm_year = year; |
473 | }; | 477 | }; |
474 | 478 | ||
475 | RrdTime.prototype.day = function () | 479 | RrdTime.prototype.day = function () |
476 | { | 480 | { |
477 | var mday = 0, wday, mon, year = this.tm_year; | 481 | var mday = 0, wday, mon, year = this.tm_year; |
478 | var tlen; | ||
479 | 482 | ||
480 | switch (this.tokid) { | 483 | switch (this.tokid) { |
481 | case RrdTime.YESTERDAY: | 484 | case RrdTime.YESTERDAY: |
482 | this.tm_mday--; | 485 | this.tm_mday--; |
486 | /* falls through */ | ||
483 | case RrdTime.TODAY: | 487 | case RrdTime.TODAY: |
484 | this.gettok(); | 488 | this.gettok(); |
485 | break; | 489 | break; |
@@ -565,7 +569,7 @@ RrdTime.prototype.day = function () | |||
565 | } | 569 | } |
566 | }; | 570 | }; |
567 | 571 | ||
568 | RrdTime.prototype.localtime = function (tm) | 572 | RrdTime.prototype.localtime = function (tm) |
569 | { | 573 | { |
570 | var date = new Date(tm*1000); | 574 | var date = new Date(tm*1000); |
571 | this.tm_sec = date.getSeconds(); | 575 | this.tm_sec = date.getSeconds(); |
@@ -577,13 +581,13 @@ RrdTime.prototype.localtime = function (tm) | |||
577 | this.tm_wday = date.getDay(); | 581 | this.tm_wday = date.getDay(); |
578 | }; | 582 | }; |
579 | 583 | ||
580 | RrdTime.prototype.mktime = function() | 584 | RrdTime.prototype.mktime = function() |
581 | { | 585 | { |
582 | var date = new Date(this.tm_year+1900, this.tm_mon, this.tm_mday, this.tm_hour, this.tm_min, this.tm_sec); | 586 | var date = new Date(this.tm_year+1900, this.tm_mon, this.tm_mday, this.tm_hour, this.tm_min, this.tm_sec); |
583 | return Math.round(date.getTime()/1000.0); | 587 | return Math.round(date.getTime()/1000.0); |
584 | }; | 588 | }; |
585 | 589 | ||
586 | RrdTime.proc_start_end = function(start_t, end_t) | 590 | RrdTime.proc_start_end = function(start_t, end_t) |
587 | { | 591 | { |
588 | var start, end; | 592 | var start, end; |
589 | 593 | ||
diff --git a/js/base64.js b/js/base64.js index 7d9536a..4cd5c96 100644 --- a/js/base64.js +++ b/js/base64.js | |||
@@ -113,7 +113,8 @@ var Base64 = { | |||
113 | _utf8_decode : function (utftext) { | 113 | _utf8_decode : function (utftext) { |
114 | var string = ""; | 114 | var string = ""; |
115 | var i = 0; | 115 | var i = 0; |
116 | var c = c1 = c2 = 0; | 116 | var c, c1, c2, c3; |
117 | c = c1 = c2 = 0; | ||
117 | 118 | ||
118 | while ( i < utftext.length ) { | 119 | while ( i < utftext.length ) { |
119 | 120 | ||
@@ -140,4 +141,4 @@ var Base64 = { | |||
140 | return string; | 141 | return string; |
141 | } | 142 | } |
142 | 143 | ||
143 | } | 144 | }; |
diff --git a/js/rrdFile.js b/js/rrdFile.js index eabebc7..3385df5 100644 --- a/js/rrdFile.js +++ b/js/rrdFile.js | |||
@@ -431,7 +431,7 @@ function RRDFile(bf,file_options) { | |||
431 | } | 431 | } |
432 | 432 | ||
433 | this.getRRA = function(idx) { | 433 | this.getRRA = function(idx) { |
434 | rra_info=this.rrd_header.getRRAInfo(idx); | 434 | var rra_info = this.rrd_header.getRRAInfo(idx); |
435 | return new RRDRRA(rrd_data, | 435 | return new RRDRRA(rrd_data, |
436 | this.rrd_header.rra_ptr_idx+idx*this.rrd_header.rra_ptr_el_size, | 436 | this.rrd_header.rra_ptr_idx+idx*this.rrd_header.rra_ptr_el_size, |
437 | rra_info, | 437 | rra_info, |
diff --git a/js/sprintf.js b/js/sprintf.js index 4d61fa2..244fe2a 100644 --- a/js/sprintf.js +++ b/js/sprintf.js | |||
@@ -19,60 +19,55 @@ | |||
19 | "use strict"; | 19 | "use strict"; |
20 | 20 | ||
21 | function sprintf() | 21 | function sprintf() |
22 | { | 22 | { |
23 | var argc = 0; | 23 | var argc = 0; |
24 | var args = arguments; | 24 | var args = arguments; |
25 | var fmt = args[argc++]; | 25 | var fmt = args[argc++]; |
26 | 26 | ||
27 | function lpad (str, padString, length) | 27 | function lpad (str, padString, length) |
28 | { | 28 | { |
29 | while (str.length < length) | 29 | while (str.length < length) |
30 | str = padString + str; | 30 | str = padString + str; |
31 | return str; | 31 | return str; |
32 | }; | 32 | } |
33 | 33 | ||
34 | function format (match, width, dot, precision, length, conversion) | 34 | function format (match, width, dot, precision, length, conversion) |
35 | { | 35 | { |
36 | if (match === '%%') return '%'; | 36 | if (match === '%%') return '%'; |
37 | 37 | ||
38 | var value = args[argc++]; | 38 | var value = args[argc++]; |
39 | var prefix; | 39 | var prefix; |
40 | 40 | ||
41 | if (width === undefined) | 41 | if (width === undefined) |
42 | width = 0; | 42 | width = 0; |
43 | else | 43 | else |
44 | width = +width; | 44 | width = +width; |
45 | 45 | ||
46 | if (precision === undefined) | 46 | if (precision === undefined) |
47 | precision = conversion == 'd' ? 0 : 6; | 47 | precision = conversion == 'd' ? 0 : 6; |
48 | else | 48 | else |
49 | precision = +precision; | 49 | precision = +precision; |
50 | 50 | ||
51 | switch (conversion) { | 51 | switch (conversion) { |
52 | case 's': | 52 | case 's': |
53 | case 'c': | 53 | case 'c': |
54 | return value; | 54 | return value; |
55 | break; | ||
56 | case 'd': | 55 | case 'd': |
57 | return parseInt(value, 10); | 56 | return parseInt(value, 10); |
58 | break; | ||
59 | case 'e': | 57 | case 'e': |
60 | prefix = value < 0 ? '-' : ''; | 58 | prefix = value < 0 ? '-' : ''; |
61 | return lpad(prefix+Math.abs(value).toExponential(precision),' ',width); | 59 | return lpad(prefix+Math.abs(value).toExponential(precision),' ',width); |
62 | break; | ||
63 | case 'F': | 60 | case 'F': |
64 | case 'f': | 61 | case 'f': |
65 | prefix = value < 0 ? '-' : ''; | 62 | prefix = value < 0 ? '-' : ''; |
66 | return lpad(prefix+Math.abs(value).toFixed(precision),' ',width); | 63 | return lpad(prefix+Math.abs(value).toFixed(precision),' ',width); |
67 | break; | ||
68 | case 'g': | 64 | case 'g': |
69 | prefix = value < 0 ? '-' : ''; | 65 | prefix = value < 0 ? '-' : ''; |
70 | return lpad(prefix+Math.abs(value).toPrecision(precision),' ',width); | 66 | return lpad(prefix+Math.abs(value).toPrecision(precision),' ',width); |
71 | break; | ||
72 | default: | 67 | default: |
73 | return match; | 68 | return match; |
74 | } | 69 | } |
75 | 70 | ||
76 | }; | 71 | } |
77 | return fmt.replace(/%(\d+)?(\.(\d+))?(l?)([%scdfFeg])/g,format); | 72 | return fmt.replace(/%(\d+)?(\.(\d+))?(l?)([%scdfFeg])/g,format); |
78 | }; | 73 | } |
diff --git a/js/strftime.js b/js/strftime.js index 0933c27..b3698c8 100644 --- a/js/strftime.js +++ b/js/strftime.js | |||
@@ -27,80 +27,57 @@ function strftime (fmt, time) | |||
27 | var months = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ]; | 27 | var months = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ]; |
28 | var fmonths = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; | 28 | var fmonths = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; |
29 | 29 | ||
30 | function pad2 (number) | 30 | function pad2 (number) |
31 | { | 31 | { |
32 | return (number < 10 ? '0' : '') + number | 32 | return (number < 10 ? '0' : '') + number; |
33 | }; | 33 | } |
34 | 34 | ||
35 | function pad3(number) | 35 | function pad3(number) |
36 | { | 36 | { |
37 | return (number < 10 ? '00' : number < 100 ? '0' : '') + number | 37 | return (number < 10 ? '00' : number < 100 ? '0' : '') + number; |
38 | }; | 38 | } |
39 | 39 | ||
40 | function lpad (str, padString, length) | 40 | function format(match, opt) |
41 | { | ||
42 | while (str.length < length) | ||
43 | str = padString + str; | ||
44 | return str; | ||
45 | }; | ||
46 | |||
47 | function format(match, opt) | ||
48 | { | 41 | { |
49 | if (match === '%%') return '%'; | 42 | if (match === '%%') return '%'; |
50 | 43 | ||
51 | switch (opt) { | 44 | switch (opt) { |
52 | case 'a': | 45 | case 'a': |
53 | return days[d.getDay()]; | 46 | return days[d.getDay()]; |
54 | break; | ||
55 | case 'A': | 47 | case 'A': |
56 | return fdays[d.getDay()]; | 48 | return fdays[d.getDay()]; |
57 | break; | ||
58 | case 'b': | 49 | case 'b': |
59 | return months[d.getMonth()]; | 50 | return months[d.getMonth()]; |
60 | break; | ||
61 | case 'B': | 51 | case 'B': |
62 | return fmonths[d.getMonth()]; | 52 | return fmonths[d.getMonth()]; |
63 | break; | ||
64 | case 'c': | 53 | case 'c': |
65 | return d.toLocaleString(); | 54 | return d.toLocaleString(); |
66 | break; | ||
67 | case 'd': | 55 | case 'd': |
68 | return pad2(d.getDate()); | 56 | return pad2(d.getDate()); |
69 | break; | ||
70 | case 'H': | 57 | case 'H': |
71 | return pad2(d.getHours()); | 58 | return pad2(d.getHours()); |
72 | break; | 59 | case 'I': |
73 | case 'I': | ||
74 | var hours = d.getHours()%12; | 60 | var hours = d.getHours()%12; |
75 | return pad2(hours === 0 ? 12 : hours); | 61 | return pad2(hours === 0 ? 12 : hours); |
76 | break; | ||
77 | case 'j': | 62 | case 'j': |
78 | var d01 = new Date (d.getFullYear(), 0, 1); | 63 | var d01 = new Date (d.getFullYear(), 0, 1); |
79 | return pad3(Math.ceil((d.getTime()-d01.getTime())/86400000)+1); | 64 | return pad3(Math.ceil((d.getTime()-d01.getTime())/86400000)+1); |
80 | break; | 65 | case 'm': |
81 | case 'm': | ||
82 | return pad2(d.getMonth()); | 66 | return pad2(d.getMonth()); |
83 | break; | ||
84 | case 'M': | 67 | case 'M': |
85 | return pad2(d.getMinutes()); | 68 | return pad2(d.getMinutes()); |
86 | break; | ||
87 | case 'p': | 69 | case 'p': |
88 | return d.getHours() >= 12 ? 'PM' : 'AM'; | 70 | return d.getHours() >= 12 ? 'PM' : 'AM'; |
89 | break; | ||
90 | case 's': | 71 | case 's': |
91 | return pad2(d.getSeconds()); | 72 | return pad2(d.getSeconds()); |
92 | break; | ||
93 | case 'S': | 73 | case 'S': |
94 | return d.getTime()/1000; | 74 | return d.getTime()/1000; |
95 | break; | ||
96 | case 'u': | 75 | case 'u': |
97 | return d.getDay() === 0 ? 7 : d.getDay(); | 76 | return d.getDay() === 0 ? 7 : d.getDay(); |
98 | break; | 77 | case 'U': |
99 | case 'U': | ||
100 | var d01 = new Date(d.getFullYear(),0,1); | 78 | var d01 = new Date(d.getFullYear(),0,1); |
101 | return pad2(Math.round((Math.ceil((d.getTime()-d01.getTime())/86400000)+1 + 6 - d.getDay())/7)); | 79 | return pad2(Math.round((Math.ceil((d.getTime()-d01.getTime())/86400000)+1 + 6 - d.getDay())/7)); |
102 | break; | 80 | case 'V': |
103 | case 'V': | ||
104 | var d01 = new Date(d.getFullYear(), 0, 1); | 81 | var d01 = new Date(d.getFullYear(), 0, 1); |
105 | var w = Math.round((Math.ceil((d.getTime()-d01.getTime())/86400000)+1 + 7 - (d.getDay() === 0 ? 7 : d.getDay()))/7); | 82 | var w = Math.round((Math.ceil((d.getTime()-d01.getTime())/86400000)+1 + 7 - (d.getDay() === 0 ? 7 : d.getDay()))/7); |
106 | var d31 = new Date(d.getFullYear(), 11, 31); | 83 | var d31 = new Date(d.getFullYear(), 11, 31); |
@@ -115,32 +92,24 @@ function strftime (fmt, time) | |||
115 | if (w === 53 && d31.getDay() < 4) w = 1; | 92 | if (w === 53 && d31.getDay() < 4) w = 1; |
116 | } | 93 | } |
117 | return pad2(w); | 94 | return pad2(w); |
118 | break; | ||
119 | case 'w': | 95 | case 'w': |
120 | return d.getDay(); | 96 | return d.getDay(); |
121 | break; | 97 | case 'W': |
122 | case 'W': | 98 | var d01 = new Date(d.getFullYear(),0,1); |
123 | var d01 = new Date(d.getFullYear(),0,1); | ||
124 | return pad2(Math.round((Math.ceil((d.getTime()-d01.getTime())/86400000)+1 + 7 - (d.getDay() === 0 ? 7 : d.getDay()))/7)); | 99 | return pad2(Math.round((Math.ceil((d.getTime()-d01.getTime())/86400000)+1 + 7 - (d.getDay() === 0 ? 7 : d.getDay()))/7)); |
125 | break; | ||
126 | case 'x': | 100 | case 'x': |
127 | return pad2(d.getDate())+'/'+pad2(d.getMonth())+'/'+d.getFullYear() | 101 | return pad2(d.getDate())+'/'+pad2(d.getMonth())+'/'+d.getFullYear(); |
128 | break; | ||
129 | case 'X': | 102 | case 'X': |
130 | return pad2(d.getHours())+':'+pad2(d.getMinutes())+':'+pad2(d.getSeconds()); | 103 | return pad2(d.getHours())+':'+pad2(d.getMinutes())+':'+pad2(d.getSeconds()); |
131 | break; | 104 | case 'y': |
132 | case 'y': | ||
133 | return pad2(d.getFullYear()%100); | 105 | return pad2(d.getFullYear()%100); |
134 | break; | ||
135 | case 'Y': | 106 | case 'Y': |
136 | return d.getFullYear(); | 107 | return d.getFullYear(); |
137 | break; | ||
138 | case 'Z': | 108 | case 'Z': |
139 | return d.toString().replace(/^.*\(([^)]+)\)$/, '$1'); | 109 | return d.toString().replace(/^.*\(([^)]+)\)$/, '$1'); |
140 | break; | ||
141 | default: | 110 | default: |
142 | return match; | 111 | return match; |
143 | } | 112 | } |
144 | }; | 113 | } |
145 | return fmt.replace(/%([aAbBcdHIjmMpsSUVwWxXyYZ%])/g, format); | 114 | return fmt.replace(/%([aAbBcdHIjmMpsSUVwWxXyYZ%])/g, format); |
146 | }; | 115 | } |