rgraph-rails 4.62 → 4.64

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +3 -4
  3. data/lib/rgraph-rails/version.rb +1 -1
  4. data/vendor/assets/javascripts/RGraph.bar.js +240 -3742
  5. data/vendor/assets/javascripts/RGraph.bipolar.js +165 -2005
  6. data/vendor/assets/javascripts/RGraph.common.annotate.js +35 -395
  7. data/vendor/assets/javascripts/RGraph.common.context.js +30 -595
  8. data/vendor/assets/javascripts/RGraph.common.core.js +418 -5359
  9. data/vendor/assets/javascripts/RGraph.common.csv.js +20 -276
  10. data/vendor/assets/javascripts/RGraph.common.deprecated.js +35 -450
  11. data/vendor/assets/javascripts/RGraph.common.dynamic.js +88 -1395
  12. data/vendor/assets/javascripts/RGraph.common.effects.js +90 -1545
  13. data/vendor/assets/javascripts/RGraph.common.key.js +52 -753
  14. data/vendor/assets/javascripts/RGraph.common.resizing.js +37 -563
  15. data/vendor/assets/javascripts/RGraph.common.sheets.js +29 -352
  16. data/vendor/assets/javascripts/RGraph.common.tooltips.js +32 -450
  17. data/vendor/assets/javascripts/RGraph.common.zoom.js +14 -219
  18. data/vendor/assets/javascripts/RGraph.cornergauge.js +71 -0
  19. data/vendor/assets/javascripts/RGraph.drawing.background.js +34 -570
  20. data/vendor/assets/javascripts/RGraph.drawing.circle.js +33 -544
  21. data/vendor/assets/javascripts/RGraph.drawing.image.js +51 -755
  22. data/vendor/assets/javascripts/RGraph.drawing.marker1.js +37 -645
  23. data/vendor/assets/javascripts/RGraph.drawing.marker2.js +36 -633
  24. data/vendor/assets/javascripts/RGraph.drawing.marker3.js +35 -514
  25. data/vendor/assets/javascripts/RGraph.drawing.poly.js +37 -559
  26. data/vendor/assets/javascripts/RGraph.drawing.rect.js +33 -548
  27. data/vendor/assets/javascripts/RGraph.drawing.text.js +36 -664
  28. data/vendor/assets/javascripts/RGraph.drawing.xaxis.js +50 -812
  29. data/vendor/assets/javascripts/RGraph.drawing.yaxis.js +51 -856
  30. data/vendor/assets/javascripts/RGraph.fuel.js +58 -964
  31. data/vendor/assets/javascripts/RGraph.funnel.js +55 -984
  32. data/vendor/assets/javascripts/RGraph.gantt.js +77 -1354
  33. data/vendor/assets/javascripts/RGraph.gauge.js +85 -1421
  34. data/vendor/assets/javascripts/RGraph.hbar.js +162 -2788
  35. data/vendor/assets/javascripts/RGraph.hprogress.js +80 -1401
  36. data/vendor/assets/javascripts/RGraph.line.js +249 -4248
  37. data/vendor/assets/javascripts/RGraph.meter.js +74 -1280
  38. data/vendor/assets/javascripts/RGraph.modaldialog.js +19 -301
  39. data/vendor/assets/javascripts/RGraph.odo.js +71 -1264
  40. data/vendor/assets/javascripts/RGraph.pie.js +137 -2288
  41. data/vendor/assets/javascripts/RGraph.radar.js +110 -1847
  42. data/vendor/assets/javascripts/RGraph.rose.js +108 -1977
  43. data/vendor/assets/javascripts/RGraph.rscatter.js +80 -1432
  44. data/vendor/assets/javascripts/RGraph.scatter.js +172 -3163
  45. data/vendor/assets/javascripts/RGraph.semicircularprogress.js +60 -1120
  46. data/vendor/assets/javascripts/RGraph.svg.bar.js +66 -1735
  47. data/vendor/assets/javascripts/RGraph.svg.common.ajax.js +21 -246
  48. data/vendor/assets/javascripts/RGraph.svg.common.core.js +255 -3937
  49. data/vendor/assets/javascripts/RGraph.svg.common.csv.js +20 -276
  50. data/vendor/assets/javascripts/RGraph.svg.common.fx.js +68 -1303
  51. data/vendor/assets/javascripts/RGraph.svg.common.key.js +19 -205
  52. data/vendor/assets/javascripts/RGraph.svg.common.sheets.js +29 -352
  53. data/vendor/assets/javascripts/RGraph.svg.common.tooltips.js +22 -273
  54. data/vendor/assets/javascripts/RGraph.svg.funnel.js +32 -0
  55. data/vendor/assets/javascripts/RGraph.svg.hbar.js +59 -1400
  56. data/vendor/assets/javascripts/RGraph.svg.line.js +70 -1580
  57. data/vendor/assets/javascripts/RGraph.svg.pie.js +55 -1131
  58. data/vendor/assets/javascripts/RGraph.svg.radar.js +57 -1502
  59. data/vendor/assets/javascripts/RGraph.svg.rose.js +66 -1817
  60. data/vendor/assets/javascripts/RGraph.svg.scatter.js +58 -1261
  61. data/vendor/assets/javascripts/RGraph.svg.semicircularprogress.js +28 -865
  62. data/vendor/assets/javascripts/RGraph.svg.waterfall.js +45 -1252
  63. data/vendor/assets/javascripts/RGraph.thermometer.js +63 -1136
  64. data/vendor/assets/javascripts/RGraph.vprogress.js +83 -1470
  65. data/vendor/assets/javascripts/RGraph.waterfall.js +83 -1347
  66. metadata +5 -4
  67. data/vendor/assets/javascripts/financial-data.js +0 -1067
@@ -1,277 +1,21 @@
1
- // version: 2017-05-08
2
- /**
3
- * o--------------------------------------------------------------------------------o
4
- * | This file is part of the RGraph package - you can learn more at: |
5
- * | |
6
- * | http://www.rgraph.net |
7
- * | |
8
- * | RGraph is licensed under the Open Source MIT license. That means that it's |
9
- * | totally free to use! |
10
- * o--------------------------------------------------------------------------------o
11
- */
12
1
 
13
- /**
14
- * Initialise the various objects
15
- */
16
- RGraph = window.RGraph || {isRGraph: true};
17
-
18
-
19
-
20
-
21
- RGraph.CSV = function (url, func)
22
- {
23
- var RG = RGraph,
24
- ua = navigator.userAgent,
25
- ma = Math;
26
-
27
-
28
-
29
-
30
- /**
31
- * Some default values
32
- */
33
- this.url = url;
34
- this.ready = func;
35
- this.data = null;
36
- this.numrows = null;
37
- this.numcols = null;
38
- this.seperator = arguments[2] || ',';
39
- this.endofline = arguments[3] || /\r?\n/;
40
- this.uid = RGraph.createUID();
41
-
42
-
43
-
44
-
45
- /**
46
- * A Custom split function
47
- *
48
- * @param string str The CSV string to split
49
- * @param mixed char The character to split on - or it can also be an object like this:
50
- * {
51
- * preserve: false, // Whether to preserve whitespace
52
- * char: ',' // The character to split on
53
- * }
54
- */
55
- this.splitCSV = function (str, split)
56
- {
57
- // Defaults
58
- var arr = [];
59
- var field = '';
60
- var inDoubleQuotes = false;
61
- var inSingleQuotes = false;
62
- var preserve = (typeof split === 'object' && split.preserve) ? true : false;
63
-
64
- // The character to split the CSV string on
65
- if (typeof split === 'object') {
66
- if (typeof split.char === 'string') {
67
- split = split.char;
68
- } else {
69
- split = ',';
70
- }
71
- } // If not an object just leave the char as it's supplied
72
-
73
-
74
-
75
- for (var i=0,len=str.length; i<len; i+=1) {
76
-
77
- char = str.charAt(i);
78
-
79
- if ( (char === '"') && !inDoubleQuotes) {
80
- inDoubleQuotes = true;
81
- continue;
82
-
83
- } else if ( (char === '"') && inDoubleQuotes) {
84
- inDoubleQuotes = false;
85
- continue;
86
- }
87
- if ( (char === "'") && !inSingleQuotes) {
88
- inSingleQuotes = true;
89
- continue;
90
-
91
- } else if ( (char === "'") && inSingleQuotes) {
92
- inSingleQuotes = false;
93
- continue;
94
-
95
- } else if (char === split && !inDoubleQuotes && !inSingleQuotes) {
96
- // TODO look ahead in order to allow for multi-character seperators
97
- arr.push(field);
98
- field = '';
99
- continue;
100
-
101
- } else {
102
- field = field + char;
103
- }
104
- }
105
-
106
- // Add the last field
107
- arr.push(field);
108
-
109
- // Now trim each value if necessary
110
- if (!preserve) {
111
- for (i=0,len=arr.length; i<len; i+=1) {
112
- arr[i] = arr[i].trim();
113
- }
114
- }
115
-
116
- return arr;
117
- };
118
-
119
-
120
-
121
-
122
- /**
123
- * This function splits the CSV data into an array so that it can be useful.
124
- */
125
- this.fetch = function ()
126
- {
127
- var sep = this.seperator,
128
- eol = this.endofline,
129
- obj = this;
130
-
131
- if (this.url.substring(0,3) === 'id:' || this.url.substring(0,4) === 'str:') {
132
-
133
- // Get rid of any surrounding whitespace
134
- if (this.url.substring(0,3) === 'id:') {
135
- var data = document.getElementById(this.url.substring(3)).innerHTML.trim();
136
-
137
- } else if (this.url.substring(0,4) === 'str:') {
138
- var data = this.url.substring(4).trim();
139
- }
140
-
141
- // Store the CSV data on the CSV object (ie - this object)
142
- obj.data = data.split(eol);
143
-
144
- // Store the number of rows
145
- obj.numrows = obj.data.length;
146
-
147
- for (var i=0,len=obj.data.length; i<len; i+=1) {
148
-
149
-
150
- /**
151
- * Split the individual line
152
- */
153
- //var row = obj.data[i].split(sep);
154
- var row = obj.splitCSV(obj.data[i], {preserve: false, char: sep});
155
-
156
-
157
- if (!obj.numcols) {
158
- obj.numcols = row.length;
159
- }
160
-
161
- /**
162
- * If the cell is purely made up of numbers - convert it
163
- */
164
- for (var j=0; j<row.length; j+=1) {
165
- if ((/^\-?[0-9.]+$/).test(row[j])) {
166
- row[j] = parseFloat(row[j]);
167
- }
168
-
169
- // Assign the split-up-row back to the data array
170
- obj.data[i] = row;
171
- }
172
- }
173
-
174
- // Call the ready function straight away
175
- obj.ready(obj);
176
-
177
- } else {
178
-
179
- RGraph.AJAX.getString(this.url, function (data)
180
- {
181
- data = data.replace(/(\r?\n)+$/, '');
182
-
183
- /**
184
- * Split the lines in the CSV
185
- */
186
- obj.data = data.split(eol);
187
-
188
- /**
189
- * Store the number of rows
190
- */
191
- obj.numrows = obj.data.length;
192
-
193
-
194
-
195
- /**
196
- * Loop thru each lines in the CSV file
197
- */
198
- for (var i=0,len=obj.data.length; i<len; i+=1) {
199
- /**
200
- * Use the new split function to split each row NOT preserving whitespace
201
- */
202
- //var row = obj.data[i].split(sep);
203
- var row = obj.splitCSV(obj.data[i], {preserve: false, char: sep});
204
-
205
- if (!obj.numcols) {
206
- obj.numcols = row.length;
207
- }
208
-
209
- /**
210
- * If the cell is purely made up of numbers - convert it
211
- */
212
- for (var j=0; j<row.length; j+=1) {
213
- if ((/^\-?[0-9.]+$/).test(row[j])) {
214
- row[j] = parseFloat(row[j]);
215
- }
216
-
217
- // Assign the split-up-row back to the data array
218
- obj.data[i] = row;
219
- }
220
- }
221
-
222
- // Call the ready function straight away
223
- obj.ready(obj);
224
- });
225
- }
226
- };
227
-
228
-
229
-
230
-
231
- /**
232
- * Returns a row of the CSV file
233
- *
234
- * @param number index The index of the row to fetch
235
- * @param start OPTIONAL If desired you can specify a column to start at (which starts at 0 by default)
236
- */
237
- this.getRow = function (index)
238
- {
239
- var row = [];
240
- var start = arguments[1] || 0;
241
-
242
- for (var i=start; i<this.numcols; i+=1) {
243
- row.push(this.data[index][i]);
244
- }
245
-
246
- return row;
247
- };
248
-
249
-
250
-
251
-
252
- /**
253
- * Returns a column of the CSV file
254
- *
255
- * @param number index The index of the column to fetch
256
- * @param start OPTIONAL If desired you can specify a row to start at (which starts at 0 by default)
257
- */
258
- this.getCol =
259
- this.getColumn = function (index)
260
- {
261
- var col = [];
262
- var start = arguments[1] || 0;
263
-
264
- for (var i=start; i<this.numrows; i+=1) {
265
- col.push(this.data[i][index]);
266
- }
267
-
268
- return col;
269
- };
270
-
271
-
272
-
273
-
274
-
275
- // Fetch the CSV file
276
- this.fetch();
277
- };
2
+ RGraph=window.RGraph||{isRGraph:true};RGraph.CSV=function(url,func)
3
+ {var RG=RGraph,ua=navigator.userAgent,ma=Math;this.url=url;this.ready=func;this.data=null;this.numrows=null;this.numcols=null;this.seperator=arguments[2]||',';this.endofline=arguments[3]||/\r?\n/;this.uid=RGraph.createUID();this.splitCSV=function(str,split)
4
+ {var arr=[];var field='';var inDoubleQuotes=false;var inSingleQuotes=false;var preserve=(typeof split==='object'&&split.preserve)?true:false;if(typeof split==='object'){if(typeof split.char==='string'){split=split.char;}else{split=',';}}
5
+ for(var i=0,len=str.length;i<len;i+=1){char=str.charAt(i);if((char==='"')&&!inDoubleQuotes){inDoubleQuotes=true;continue;}else if((char==='"')&&inDoubleQuotes){inDoubleQuotes=false;continue;}
6
+ if((char==="'")&&!inSingleQuotes){inSingleQuotes=true;continue;}else if((char==="'")&&inSingleQuotes){inSingleQuotes=false;continue;}else if(char===split&&!inDoubleQuotes&&!inSingleQuotes){arr.push(field);field='';continue;}else{field=field+char;}}
7
+ arr.push(field);if(!preserve){for(i=0,len=arr.length;i<len;i+=1){arr[i]=arr[i].trim();}}
8
+ return arr;};this.fetch=function()
9
+ {var sep=this.seperator,eol=this.endofline,obj=this;if(this.url.substring(0,3)==='id:'||this.url.substring(0,4)==='str:'){if(this.url.substring(0,3)==='id:'){var data=document.getElementById(this.url.substring(3)).innerHTML.trim();}else if(this.url.substring(0,4)==='str:'){var data=this.url.substring(4).trim();}
10
+ obj.data=data.split(eol);obj.numrows=obj.data.length;for(var i=0,len=obj.data.length;i<len;i+=1){var row=obj.splitCSV(obj.data[i],{preserve:false,char:sep});if(!obj.numcols){obj.numcols=row.length;}
11
+ for(var j=0;j<row.length;j+=1){if((/^\-?[0-9.]+$/).test(row[j])){row[j]=parseFloat(row[j]);}
12
+ obj.data[i]=row;}}
13
+ obj.ready(obj);}else{RGraph.AJAX.getString(this.url,function(data)
14
+ {data=data.replace(/(\r?\n)+$/,'');obj.data=data.split(eol);obj.numrows=obj.data.length;for(var i=0,len=obj.data.length;i<len;i+=1){var row=obj.splitCSV(obj.data[i],{preserve:false,char:sep});if(!obj.numcols){obj.numcols=row.length;}
15
+ for(var j=0;j<row.length;j+=1){if((/^\-?[0-9.]+$/).test(row[j])){row[j]=parseFloat(row[j]);}
16
+ obj.data[i]=row;}}
17
+ obj.ready(obj);});}};this.getRow=function(index)
18
+ {var row=[];var start=arguments[1]||0;for(var i=start;i<this.numcols;i+=1){row.push(this.data[index][i]);}
19
+ return row;};this.getCol=this.getColumn=function(index)
20
+ {var col=[];var start=arguments[1]||0;for(var i=start;i<this.numrows;i+=1){col.push(this.data[i][index]);}
21
+ return col;};this.fetch();};
@@ -1,451 +1,36 @@
1
- // version: 2017-05-08
2
- /**
3
- * o--------------------------------------------------------------------------------o
4
- * | This file is part of the RGraph package - you can learn more at: |
5
- * | |
6
- * | http://www.rgraph.net |
7
- * | |
8
- * | RGraph is licensed under the Open Source MIT license. That means that it's |
9
- * | totally free to use! |
10
- * o--------------------------------------------------------------------------------o
11
- */
12
1
 
13
- RGraph = window.RGraph || {isRGraph: true};
14
-
15
- // Module pattern
16
- (function (win, doc, undefined)
17
- {
18
- var RG = RGraph,
19
- ua = navigator.userAgent,
20
- ma = Math;
21
-
22
-
23
-
24
-
25
- /**
26
- * This is a useful function which is basically a shortcut for drawing left, right, top and bottom alligned text.
27
- *
28
- * @param object context The context
29
- * @param string font The font
30
- * @param int size The size of the text
31
- * @param int x The X coordinate
32
- * @param int y The Y coordinate
33
- * @param string text The text to draw
34
- * @parm string The vertical alignment. Can be null. "center" gives center aligned text, "top" gives top aligned text.
35
- * Anything else produces bottom aligned text. Default is bottom.
36
- * @param string The horizontal alignment. Can be null. "center" gives center aligned text, "right" gives right aligned text.
37
- * Anything else produces left aligned text. Default is left.
38
- * @param bool Whether to show a bounding box around the text. Defaults not to
39
- * @param int The angle that the text should be rotate at (IN DEGREES)
40
- * @param string Background color for the text
41
- * @param bool Whether the text is bold or not
42
- */
43
- RG.text =
44
- RG.Text = function (context, font, size, x, y, text)
45
- {
46
- // "Cache" the args as a local variable
47
- var args = arguments;
48
-
49
- // Handle undefined - change it to an empty string
50
- if ((typeof(text) != 'string' && typeof(text) != 'number') || text == 'undefined') {
51
- return;
52
- }
53
-
54
-
55
-
56
-
57
- /**
58
- * This accommodates multi-line text
59
- */
60
- if (typeof(text) == 'string' && text.match(/\r\n/)) {
61
-
62
- var dimensions = RGraph.MeasureText('M', args[11], font, size);
63
-
64
- /**
65
- * Measure the text (width and height)
66
- */
67
-
68
- var arr = text.split('\r\n');
69
-
70
- /**
71
- * Adjust the Y position
72
- */
73
-
74
- // This adjusts the initial y position
75
- if (args[6] && args[6] == 'center') y = (y - (dimensions[1] * ((arr.length - 1) / 2)));
76
-
77
- for (var i=1; i<arr.length; ++i) {
78
-
79
- RGraph.Text(context,
80
- font,
81
- size,
82
- args[9] == -90 ? (x + (size * 1.5)) : x,
83
- y + (dimensions[1] * i),
84
- arr[i],
85
- args[6] ? args[6] : null,
86
- args[7],
87
- args[8],
88
- args[9],
89
- args[10],
90
- args[11],
91
- args[12]);
92
- }
93
-
94
- // Update text to just be the first line
95
- text = arr[0];
96
- }
97
-
98
-
99
- // Accommodate MSIE
100
- if (document.all && RGraph.ISOLD) {
101
- y += 2;
102
- }
103
-
104
-
105
- context.font = (args[11] ? 'Bold ': '') + size + 'pt ' + font;
106
-
107
- var i;
108
- var origX = x;
109
- var origY = y;
110
- var originalFillStyle = context.fillStyle;
111
- var originalLineWidth = context.lineWidth;
112
-
113
- // Need these now the angle can be specified, ie defaults for the former two args
114
- if (typeof(args[6]) == 'undefined') args[6] = 'bottom'; // Vertical alignment. Default to bottom/baseline
115
- if (typeof(args[7]) == 'undefined') args[7] = 'left'; // Horizontal alignment. Default to left
116
- if (typeof(args[8]) == 'undefined') args[8] = null; // Show a bounding box. Useful for positioning during development. Defaults to false
117
- if (typeof(args[9]) == 'undefined') args[9] = 0; // Angle (IN DEGREES) that the text should be drawn at. 0 is middle right, and it goes clockwise
118
-
119
- // The alignment is recorded here for purposes of Opera compatibility
120
- if (navigator.userAgent.indexOf('Opera') != -1) {
121
- context.canvas.__rgraph_valign__ = args[6];
122
- context.canvas.__rgraph_halign__ = args[7];
123
- }
124
-
125
- // First, translate to x/y coords
126
- context.save();
127
-
128
- context.canvas.__rgraph_originalx__ = x;
129
- context.canvas.__rgraph_originaly__ = y;
130
-
131
- context.translate(x, y);
132
- x = 0;
133
- y = 0;
134
-
135
- // Rotate the canvas if need be
136
- if (args[9]) {
137
- context.rotate(args[9] / (180 / RGraph.PI));
138
- }
139
-
140
-
141
- // Vertical alignment - defaults to bottom
142
- if (args[6]) {
143
-
144
- var vAlign = args[6];
145
-
146
- if (vAlign == 'center') {
147
- context.textBaseline = 'middle';
148
- } else if (vAlign == 'top') {
149
- context.textBaseline = 'top';
150
- }
151
- }
152
-
153
-
154
- // Hoeizontal alignment - defaults to left
155
- if (args[7]) {
156
-
157
- var hAlign = args[7];
158
- var width = context.measureText(text).width;
159
-
160
- if (hAlign) {
161
- if (hAlign == 'center') {
162
- context.textAlign = 'center';
163
- } else if (hAlign == 'right') {
164
- context.textAlign = 'right';
165
- }
166
- }
167
- }
168
-
169
-
170
- context.fillStyle = originalFillStyle;
171
-
172
- /**
173
- * Draw a bounding box if requested
174
- */
175
- context.save();
176
- context.fillText(text,0,0);
177
- context.lineWidth = 1;
178
-
179
- var width = context.measureText(text).width;
180
- var width_offset = (hAlign == 'center' ? (width / 2) : (hAlign == 'right' ? width : 0));
181
- var height = size * 1.5; // !!!
182
- var height_offset = (vAlign == 'center' ? (height / 2) : (vAlign == 'top' ? height : 0));
183
- var ieOffset = RGraph.ISOLD ? 2 : 0;
184
-
185
- if (args[8]) {
186
-
187
- context.strokeRect(-3 - width_offset,
188
- 0 - 3 - height - ieOffset + height_offset,
189
- width + 6,
190
- height + 6);
191
- /**
192
- * If requested, draw a background for the text
193
- */
194
- if (args[10]) {
195
- context.fillStyle = args[10];
196
- context.fillRect(-3 - width_offset,
197
- 0 - 3 - height - ieOffset + height_offset,
198
- width + 6,
199
- height + 6);
200
- }
201
-
202
-
203
- context.fillStyle = originalFillStyle;
204
-
205
-
206
- /**
207
- * Do the actual drawing of the text
208
- */
209
- context.fillText(text,0,0);
210
- }
211
- context.restore();
212
-
213
- // Reset the lineWidth
214
- context.lineWidth = originalLineWidth;
215
-
216
- context.restore();
217
- };
218
-
219
-
220
-
221
-
222
- /**
223
- * This function returns the mouse position in relation to the canvas
224
- *
225
- * @param object e The event object.
226
- */
227
- RG.getMouseXY = function (e)
228
- {
229
- var el = (RGraph.ISOLD ? event.srcElement : e.target);
230
- var x;
231
- var y;
232
-
233
- // ???
234
- var paddingLeft = el.style.paddingLeft ? parseInt(el.style.paddingLeft) : 0;
235
- var paddingTop = el.style.paddingTop ? parseInt(el.style.paddingTop) : 0;
236
- var borderLeft = el.style.borderLeftWidth ? parseInt(el.style.borderLeftWidth) : 0;
237
- var borderTop = el.style.borderTopWidth ? parseInt(el.style.borderTopWidth) : 0;
238
-
239
- if (RGraph.ISIE8) e = event;
240
-
241
- // Browser with offsetX and offsetY
242
- if (typeof(e.offsetX) == 'number' && typeof(e.offsetY) == 'number') {
243
- x = e.offsetX;
244
- y = e.offsetY;
245
-
246
- // FF and other
247
- } else {
248
- x = 0;
249
- y = 0;
250
-
251
- while (el != document.body && el) {
252
- x += el.offsetLeft;
253
- y += el.offsetTop;
254
-
255
- el = el.offsetParent;
256
- }
257
-
258
- x = e.pageX - x;
259
- y = e.pageY - y;
260
- }
261
-
262
- return [x, y];
263
- };
264
-
265
-
266
-
267
-
268
- /**
269
- * This function attempts to "fill in" missing functions from the canvas
270
- * context object. Only two at the moment - measureText() nd fillText().
271
- *
272
- * @param object context The canvas 2D context
273
- */
274
- RG.oldBrowserCompat =
275
- RG.OldBrowserCompat = function (co)
276
- {
277
- if (!co) {
278
- return;
279
- }
280
-
281
- if (!co.measureText) {
282
-
283
- // This emulates the measureText() function
284
- co.measureText = function (text)
285
- {
286
- var textObj = document.createElement('DIV');
287
- textObj.innerHTML = text;
288
- textObj.style.position = 'absolute';
289
- textObj.style.top = '-100px';
290
- textObj.style.left = 0;
291
- document.body.appendChild(textObj);
292
-
293
- var width = {width: textObj.offsetWidth};
294
-
295
- textObj.style.display = 'none';
296
-
297
- return width;
298
- }
299
- }
300
-
301
- if (!co.fillText) {
302
- // This emulates the fillText() method
303
- co.fillText = function (text, targetX, targetY)
304
- {
305
- return false;
306
- }
307
- }
308
-
309
- // If IE8, add addEventListener()
310
- if (!co.canvas.addEventListener) {
311
- window.addEventListener = function (ev, func, bubble)
312
- {
313
- return this.attachEvent('on' + ev, func);
314
- }
315
-
316
- co.canvas.addEventListener = function (ev, func, bubble)
317
- {
318
- return this.attachEvent('on' + ev, func);
319
- }
320
- }
321
- };
322
-
323
-
324
-
325
-
326
- /**
327
- * Similar to the jQuery each() function - this lets you iterate easily over an array. The 'this' variable is set]
328
- * to the array in the callback function.
329
- *
330
- * @param array arr The array
331
- * @param function func The function to call
332
- * @param object Optionally you can specify the object that the "this" variable is set to
333
- */
334
- RG.each = function (arr, func)
335
- {
336
- for(var i=0, len=arr.length; i<len; i+=1) {
337
-
338
- if (typeof arguments[2] !== 'undefined') {
339
- var ret = func.call(arguments[2], i, arr[i]);
340
- } else {
341
- var ret = func.call(arr, i, arr[i]);
342
- }
343
-
344
- if (ret === false) {
345
- return;
346
- }
347
- }
348
- };
349
-
350
-
351
-
352
-
353
- /**
354
- * An old function the was used before all 4 gutters were added
355
- *
356
- * DEPRECATED
357
- *
358
- * @param object obj The chart object
359
- */
360
- RG.getHeight =
361
- RG.GetHeight = function (obj)
362
- {
363
- return obj.canvas.height;
364
- };
365
-
366
-
367
-
368
-
369
- /**
370
- * An old function the was used before all 4 gutters were added
371
- *
372
- * DEPRECATED
373
- *
374
- * @param object obj The chart object
375
- */
376
- RG.getWidth =
377
- RG.GetWidth = function (obj)
378
- {
379
- return obj.canvas.width;
380
- };
381
-
382
-
383
-
384
-
385
- /**
386
- * A timer function for measuring... time!
387
- *
388
- * @param string label A string to associate with this 'checkpoint'
389
- */
390
- RG.timer =
391
- RG.Timer = function (label)
392
- {
393
- if(typeof RG.TIMER_LAST_CHECKPOINT == 'undefined') {
394
-
395
- RG.TIMER_LAST_CHECKPOINT = Date.now();
396
- }
397
-
398
- var now = Date.now();
399
-
400
- console.log(label+': ' + (now - RG.TIMER_LAST_CHECKPOINT).toString());
401
-
402
- RG.TIMER_LAST_CHECKPOINT = now;
403
- };
404
-
405
-
406
-
407
-
408
- /**
409
- * If you prefer, you can use the SetConfig() method to set the configuration information
410
- * for your chart. You may find that setting the configuration this way eases reuse.
411
- *
412
- * @param object obj The graph object
413
- * @param object config The graph configuration information
414
- */
415
- RG.setConfig =
416
- RG.SetConfig = function (obj, config)
417
- {
418
- for (i in config) {
419
- if (typeof i === 'string') {
420
- obj.Set(i, config[i]);
421
- }
422
- }
423
-
424
- return obj;
425
- };
426
-
427
-
428
-
429
-
430
- // End module pattern
431
- })(window, document);
432
-
433
-
434
-
435
-
436
- /**
437
- * Checks whether strings or numbers are empty or not. It also
438
- * handles null or variables set to undefined. If a variable really
439
- * is undefined - ie it hasn't been declared at all - you need to use
440
- * "typeof variable" and check the return value - which will be undefined.
441
- *
442
- * @param mixed value The variable to check
443
- */
444
- window.$empty = function (value)
445
- {
446
- if (!value || value.length <= 0) {
447
- return true;
448
- }
449
-
450
- return false;
451
- };
2
+ RGraph=window.RGraph||{isRGraph:true};(function(win,doc,undefined)
3
+ {var RG=RGraph,ua=navigator.userAgent,ma=Math;RG.text=RG.Text=function(context,font,size,x,y,text)
4
+ {var args=arguments;if((typeof(text)!='string'&&typeof(text)!='number')||text=='undefined'){return;}
5
+ if(typeof(text)=='string'&&text.match(/\r\n/)){var dimensions=RGraph.MeasureText('M',args[11],font,size);var arr=text.split('\r\n');if(args[6]&&args[6]=='center')y=(y-(dimensions[1]*((arr.length-1)/2)));for(var i=1;i<arr.length;++i){RGraph.Text(context,font,size,args[9]==-90?(x+(size*1.5)):x,y+(dimensions[1]*i),arr[i],args[6]?args[6]:null,args[7],args[8],args[9],args[10],args[11],args[12]);}
6
+ text=arr[0];}
7
+ if(document.all&&RGraph.ISOLD){y+=2;}
8
+ context.font=(args[11]?'Bold ':'')+size+'pt '+font;var i;var origX=x;var origY=y;var originalFillStyle=context.fillStyle;var originalLineWidth=context.lineWidth;if(typeof(args[6])=='undefined')args[6]='bottom';if(typeof(args[7])=='undefined')args[7]='left';if(typeof(args[8])=='undefined')args[8]=null;if(typeof(args[9])=='undefined')args[9]=0;if(navigator.userAgent.indexOf('Opera')!=-1){context.canvas.__rgraph_valign__=args[6];context.canvas.__rgraph_halign__=args[7];}
9
+ context.save();context.canvas.__rgraph_originalx__=x;context.canvas.__rgraph_originaly__=y;context.translate(x,y);x=0;y=0;if(args[9]){context.rotate(args[9]/(180/RGraph.PI));}
10
+ if(args[6]){var vAlign=args[6];if(vAlign=='center'){context.textBaseline='middle';}else if(vAlign=='top'){context.textBaseline='top';}}
11
+ if(args[7]){var hAlign=args[7];var width=context.measureText(text).width;if(hAlign){if(hAlign=='center'){context.textAlign='center';}else if(hAlign=='right'){context.textAlign='right';}}}
12
+ context.fillStyle=originalFillStyle;context.save();context.fillText(text,0,0);context.lineWidth=1;var width=context.measureText(text).width;var width_offset=(hAlign=='center'?(width/2):(hAlign=='right'?width:0));var height=size*1.5;var height_offset=(vAlign=='center'?(height/2):(vAlign=='top'?height:0));var ieOffset=RGraph.ISOLD?2:0;if(args[8]){context.strokeRect(-3-width_offset,0-3-height-ieOffset+height_offset,width+6,height+6);if(args[10]){context.fillStyle=args[10];context.fillRect(-3-width_offset,0-3-height-ieOffset+height_offset,width+6,height+6);}
13
+ context.fillStyle=originalFillStyle;context.fillText(text,0,0);}
14
+ context.restore();context.lineWidth=originalLineWidth;context.restore();};RG.getMouseXY=function(e)
15
+ {var el=(RGraph.ISOLD?event.srcElement:e.target);var x;var y;var paddingLeft=el.style.paddingLeft?parseInt(el.style.paddingLeft):0;var paddingTop=el.style.paddingTop?parseInt(el.style.paddingTop):0;var borderLeft=el.style.borderLeftWidth?parseInt(el.style.borderLeftWidth):0;var borderTop=el.style.borderTopWidth?parseInt(el.style.borderTopWidth):0;if(RGraph.ISIE8)e=event;if(typeof(e.offsetX)=='number'&&typeof(e.offsetY)=='number'){x=e.offsetX;y=e.offsetY;}else{x=0;y=0;while(el!=document.body&&el){x+=el.offsetLeft;y+=el.offsetTop;el=el.offsetParent;}
16
+ x=e.pageX-x;y=e.pageY-y;}
17
+ return[x,y];};RG.oldBrowserCompat=RG.OldBrowserCompat=function(co)
18
+ {if(!co){return;}
19
+ if(!co.measureText){co.measureText=function(text)
20
+ {var textObj=document.createElement('DIV');textObj.innerHTML=text;textObj.style.position='absolute';textObj.style.top='-100px';textObj.style.left=0;document.body.appendChild(textObj);var width={width:textObj.offsetWidth};textObj.style.display='none';return width;}}
21
+ if(!co.fillText){co.fillText=function(text,targetX,targetY)
22
+ {return false;}}
23
+ if(!co.canvas.addEventListener){window.addEventListener=function(ev,func,bubble)
24
+ {return this.attachEvent('on'+ev,func);}
25
+ co.canvas.addEventListener=function(ev,func,bubble)
26
+ {return this.attachEvent('on'+ev,func);}}};RG.each=function(arr,func)
27
+ {for(var i=0,len=arr.length;i<len;i+=1){if(typeof arguments[2]!=='undefined'){var ret=func.call(arguments[2],i,arr[i]);}else{var ret=func.call(arr,i,arr[i]);}
28
+ if(ret===false){return;}}};RG.getHeight=RG.GetHeight=function(obj)
29
+ {return obj.canvas.height;};RG.getWidth=RG.GetWidth=function(obj)
30
+ {return obj.canvas.width;};RG.timer=RG.Timer=function(label)
31
+ {if(typeof RG.TIMER_LAST_CHECKPOINT=='undefined'){RG.TIMER_LAST_CHECKPOINT=Date.now();}
32
+ var now=Date.now();console.log(label+': '+(now-RG.TIMER_LAST_CHECKPOINT).toString());RG.TIMER_LAST_CHECKPOINT=now;};RG.setConfig=RG.SetConfig=function(obj,config)
33
+ {for(i in config){if(typeof i==='string'){obj.Set(i,config[i]);}}
34
+ return obj;};})(window,document);window.$empty=function(value)
35
+ {if(!value||value.length<=0){return true;}
36
+ return false;};