diff options
Diffstat (limited to 'js')
-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 | } |