rgraph-rails 1.0.5 → 1.0.6

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 +8 -8
  2. data/.travis.yml +0 -1
  3. data/README.md +3 -3
  4. data/lib/rgraph-rails/version.rb +1 -1
  5. data/vendor/assets/javascripts/RGraph.bar.js +239 -3764
  6. data/vendor/assets/javascripts/RGraph.bipolar.js +115 -1986
  7. data/vendor/assets/javascripts/RGraph.common.annotate.js +35 -399
  8. data/vendor/assets/javascripts/RGraph.common.context.js +30 -600
  9. data/vendor/assets/javascripts/RGraph.common.core.js +403 -5187
  10. data/vendor/assets/javascripts/RGraph.common.csv.js +19 -275
  11. data/vendor/assets/javascripts/RGraph.common.deprecated.js +35 -454
  12. data/vendor/assets/javascripts/RGraph.common.dynamic.js +84 -1189
  13. data/vendor/assets/javascripts/RGraph.common.effects.js +90 -1548
  14. data/vendor/assets/javascripts/RGraph.common.key.js +54 -755
  15. data/vendor/assets/javascripts/RGraph.common.resizing.js +37 -567
  16. data/vendor/assets/javascripts/RGraph.common.sheets.js +29 -356
  17. data/vendor/assets/javascripts/RGraph.common.tooltips.js +32 -614
  18. data/vendor/assets/javascripts/RGraph.common.zoom.js +14 -223
  19. data/vendor/assets/javascripts/RGraph.cornergauge.js +71 -0
  20. data/vendor/assets/javascripts/RGraph.drawing.background.js +35 -620
  21. data/vendor/assets/javascripts/RGraph.drawing.circle.js +35 -576
  22. data/vendor/assets/javascripts/RGraph.drawing.image.js +52 -807
  23. data/vendor/assets/javascripts/RGraph.drawing.marker1.js +41 -717
  24. data/vendor/assets/javascripts/RGraph.drawing.marker2.js +37 -668
  25. data/vendor/assets/javascripts/RGraph.drawing.marker3.js +36 -563
  26. data/vendor/assets/javascripts/RGraph.drawing.poly.js +40 -608
  27. data/vendor/assets/javascripts/RGraph.drawing.rect.js +35 -597
  28. data/vendor/assets/javascripts/RGraph.drawing.text.js +34 -642
  29. data/vendor/assets/javascripts/RGraph.drawing.xaxis.js +50 -809
  30. data/vendor/assets/javascripts/RGraph.drawing.yaxis.js +51 -856
  31. data/vendor/assets/javascripts/RGraph.fuel.js +58 -964
  32. data/vendor/assets/javascripts/RGraph.funnel.js +55 -984
  33. data/vendor/assets/javascripts/RGraph.gantt.js +75 -1241
  34. data/vendor/assets/javascripts/RGraph.gauge.js +87 -1397
  35. data/vendor/assets/javascripts/RGraph.hbar.js +143 -2376
  36. data/vendor/assets/javascripts/RGraph.hprogress.js +80 -1397
  37. data/vendor/assets/javascripts/RGraph.line.js +241 -4162
  38. data/vendor/assets/javascripts/RGraph.meter.js +74 -1278
  39. metadata +3 -30
  40. data/vendor/assets/images/bg.png +0 -0
  41. data/vendor/assets/images/bullet.png +0 -0
  42. data/vendor/assets/images/facebook-large.png +0 -0
  43. data/vendor/assets/images/google-plus-large.png +0 -0
  44. data/vendor/assets/images/logo.png +0 -0
  45. data/vendor/assets/images/meter-image-sd-needle.png +0 -0
  46. data/vendor/assets/images/meter-image-sd.png +0 -0
  47. data/vendor/assets/images/meter-sketch-needle.png +0 -0
  48. data/vendor/assets/images/meter-sketch.png +0 -0
  49. data/vendor/assets/images/odometer-background.png +0 -0
  50. data/vendor/assets/images/rgraph.jpg +0 -0
  51. data/vendor/assets/images/title.png +0 -0
  52. data/vendor/assets/images/twitter-large.png +0 -0
  53. data/vendor/assets/javascripts/RGraph.modaldialog.js +0 -301
  54. data/vendor/assets/javascripts/RGraph.odo.js +0 -1265
  55. data/vendor/assets/javascripts/RGraph.pie.js +0 -2272
  56. data/vendor/assets/javascripts/RGraph.radar.js +0 -1847
  57. data/vendor/assets/javascripts/RGraph.rose.js +0 -1877
  58. data/vendor/assets/javascripts/RGraph.rscatter.js +0 -1425
  59. data/vendor/assets/javascripts/RGraph.scatter.js +0 -2970
  60. data/vendor/assets/javascripts/RGraph.semicircularprogress.js +0 -1015
  61. data/vendor/assets/javascripts/RGraph.thermometer.js +0 -1129
  62. data/vendor/assets/javascripts/RGraph.vprogress.js +0 -1452
  63. data/vendor/assets/javascripts/RGraph.waterfall.js +0 -1252
  64. data/vendor/assets/javascripts/financial-data.js +0 -1067
  65. data/vendor/assets/stylesheets/ModalDialog.css +0 -90
  66. data/vendor/assets/stylesheets/animations.css +0 -3347
  67. data/vendor/assets/stylesheets/website.css +0 -446
@@ -1,400 +1,36 @@
1
- // version: 2016-06-04
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 dual licensed under the Open Source GPL (General Public License) |
9
- * | v2.0 license and a commercial license which means that you're not bound by |
10
- * | the terms of the GPL. The commercial license starts at just 99 GBP and |
11
- * | you can read about it here: |
12
- * | |
13
- * | http://www.rgraph.net/license |
14
- * o--------------------------------------------------------------------------------o
15
- */
16
1
 
17
- RGraph = window.RGraph || {isRGraph: true};
18
-
19
- // Module pattern
20
- (function (win, doc, undefined)
21
- {
22
- var RG = RGraph,
23
- ua = navigator.userAgent,
24
- ma = Math;
25
-
26
-
27
-
28
-
29
- /**
30
- * This installs some event handlers
31
- *
32
- * Checking the RGraph.Annotate flag means the annotate code only runs once
33
- */
34
- RG.annotating_canvas_onmousedown = function (e)
35
- {
36
- if (e.button === 0) {
37
-
38
- e.target.__object__.Set('chart.mousedown', true);
39
-
40
- // Get the object from the canvas. Annotating must be enabled on the
41
- // last object defined
42
- var obj = e.target.__object__,
43
- prop = obj.properties
44
-
45
- // This starts the annotating "path" and set the color
46
- obj.context.beginPath();
47
-
48
- obj.context.strokeStyle = obj.Get('chart.annotate.color');
49
- obj.context.lineWidth = obj.Get('chart.annotate.linewidth');
50
-
51
- var mouseXY = RG.getMouseXY(e),
52
- mouseX = mouseXY[0],
53
- mouseY = mouseXY[1]
54
-
55
- // Allow for the Bar chart 3D
56
- if (obj.type === 'bar' && prop['chart.variant'] === '3d') {
57
- var adjustment = prop['chart.variant.threed.angle'] * mouseXY[0];
58
- mouseY -= adjustment;
59
- }
60
-
61
- // Clear the annotation recording
62
- RG.Registry.Set('annotate.actions', [obj.Get('chart.annotate.color')]);
63
-
64
- // This sets the initial X/Y position
65
- obj.context.moveTo(mouseX, mouseY);
66
- RG.Registry.Set('annotate.last.coordinates', [mouseX,mouseY]);
67
-
68
- RG.Registry.Set('started.annotating', false);
69
- RG.Registry.Set('chart.annotating', obj);
70
-
71
- // Fire the onannotatebegin event.
72
- RG.FireCustomEvent(obj, 'onannotatebegin');
73
- }
74
-
75
- return false;
76
- };
77
-
78
-
79
-
80
-
81
- /**
82
- * This cancels annotating for ALL canvases
83
- */
84
- RG.annotating_window_onmouseup = function (e)
85
- {
86
- var obj = RG.Registry.Get('chart.annotating');
87
- var win = window;
88
-
89
- if (e.button != 0 || !obj) {
90
- return;
91
- }
92
-
93
- // This cancels annotating on ALL canvas tags on the page
94
- var tags = doc.getElementsByTagName('canvas');
95
-
96
- for (var i=0; i<tags.length; ++i) {
97
- if (tags[i].__object__) {
98
- tags[i].__object__.Set('chart.mousedown', false);
99
- }
100
- }
101
-
102
- // Store the annotations in browser storage if it's available
103
- if (RG.Registry.Get('annotate.actions') && RG.Registry.Get('annotate.actions').length > 0 && win.localStorage) {
104
-
105
- var id = '__rgraph_annotations_' + e.target.id + '__';
106
- var annotations = win.localStorage[id] ? win.localStorage[id] + '|' : '';
107
- annotations += RG.Registry.Get('annotate.actions');
108
-
109
- // Store the annotations information in HTML5 browser storage here
110
- win.localStorage[id] = annotations;
111
- }
112
-
113
- // Clear the recorded annotations
114
- RG.Registry.Set('annotate.actions', []);
115
-
116
- // Fire the annotate event
117
- RG.FireCustomEvent(obj, 'onannotateend');
118
- };
119
-
120
-
121
-
122
-
123
- /**
124
- * The canvas onmousemove function
125
- */
126
- RGraph.annotating_canvas_onmousemove = function (e)
127
- {
128
- var obj = e.target.__object__;
129
- var prop = obj.properties;
130
- var mouseXY = RG.getMouseXY(e);
131
- var mouseX = mouseXY[0];
132
- var mouseY = mouseXY[1];
133
- var lastXY = RG.Registry.Get('annotate.last.coordinates');
134
-
135
- if (obj.Get('chart.mousedown')) {
136
-
137
- // Allow for the Bar chart 3D
138
- if (obj.type === 'bar' && prop['chart.variant'] === '3d') {
139
- var adjustment = prop['chart.variant.threed.angle'] * mouseXY[0];
140
- mouseY -= adjustment;
141
- }
142
-
143
- obj.context.beginPath();
144
-
145
- if (!lastXY) {
146
- obj.context.moveTo(mouseX, mouseY)
147
- } else {
148
- obj.context.strokeStyle = obj.properties['chart.annotate.color'];
149
- obj.context.moveTo(lastXY[0], lastXY[1]);
150
- obj.context.lineTo(mouseX, mouseY);
151
- }
152
-
153
- RG.Registry.Set('annotate.actions', RG.Registry.Get('annotate.actions') + '|' + mouseX + ',' + mouseY);
154
- RG.Registry.Set('annotate.last.coordinates', [mouseX,mouseY]);
155
-
156
- RG.FireCustomEvent(obj, 'onannotate');
157
- obj.context.stroke();
158
- }
159
- };
160
-
161
-
162
-
163
-
164
- /**
165
- * Shows the mini palette used for annotations
166
- *
167
- * @param object e The event object
168
- */
169
- RG.ShowPalette =
170
- RG.Showpalette = function (e)
171
- {
172
- var isSafari = navigator.userAgent.indexOf('Safari') ? true : false;
173
-
174
- e = RG.FixEventObject(e);
175
-
176
- var canvas = e.target.parentNode.__canvas__,
177
- context = canvas.getContext('2d'),
178
- obj = canvas.__object__,
179
- div = document.createElement('DIV'),
180
- coords = RG.getMouseXY(e)
181
-
182
- div.__object__ = obj; // The graph object
183
- div.className = 'RGraph_palette';
184
- div.style.position = 'absolute';
185
- div.style.backgroundColor = 'white';
186
- div.style.border = '1px solid black';
187
- div.style.left = 0;
188
- div.style.top = 0;
189
- div.style.padding = '3px';
190
- div.style.paddingLeft = '5px';
191
- div.style.opacity = 0;
192
- div.style.boxShadow = 'rgba(96,96,96,0.5) 3px 3px 3px';
193
- div.style.WebkitBoxShadow = 'rgba(96,96,96,0.5) 3px 3px 3px';
194
- div.style.MozBoxShadow = 'rgba(96,96,96,0.5) 3px 3px 3px';
195
-
196
-
197
- // MUST use named colors that are capitalised
198
- var colors = [
199
- 'Black',
200
- 'Red',
201
- 'Yellow',
202
- 'Green',
203
- 'Orange',
204
- 'White',
205
- 'Magenta',
206
- 'Pink'
207
- ];
208
-
209
- // Add the colors to the palette
210
- for (var i=0,len=colors.length; i<len; i+=1) {
211
-
212
- var div2 = doc.createElement('DIV');
213
- div2.cssClass = 'RGraph_palette_color';
214
- div2.style.fontSize = '12pt';
215
- div2.style.cursor = 'pointer';
216
- div2.style.padding = '1px';
217
- div2.style.paddingRight = '10px';
218
- div2.style.textAlign = 'left';
219
-
220
- var span = document.createElement('SPAN');
221
- span.style.display = 'inline-block';
222
- span.style.marginRight = '9px';
223
- span.style.width = '17px';
224
- span.style.height = '17px';
225
- span.style.top = '2px';
226
- span.style.position = 'relative';
227
- span.style.backgroundColor = colors[i];
228
- div2.appendChild(span);
229
-
230
- div2.innerHTML += colors[i];
231
-
232
-
233
- div2.onmouseover = function ()
234
- {
235
- this.style.backgroundColor = '#eee';
236
- }
237
-
238
- div2.onmouseout = function ()
239
- {
240
- this.style.backgroundColor = '';
241
- }
242
-
243
- div2.onclick = function (e)
244
- {
245
- var color = this.childNodes[0].style.backgroundColor;
246
-
247
- obj.Set('chart.annotate.color', color);
248
- }
249
- div.appendChild(div2);
250
- }
251
-
252
-
253
- doc.body.appendChild(div);
254
-
255
- /**
256
- * Now the div has been added to the document, move it up and left
257
- */
258
- div.style.left = e.pageX + 'px';
259
- div.style.top = e.pageY + 'px';
260
-
261
- /**
262
- * Chang the position if the cursor is near the right edge of the browser window
263
- */
264
- if ((e.pageX + (div.offsetWidth + 5) ) > document.body.offsetWidth) {
265
- div.style.left = (e.pageX - div.offsetWidth) + 'px';
266
- }
267
-
268
- /**
269
- * Store the palette div in the registry
270
- */
271
- RGraph.Registry.Set('chart.palette', div);
272
-
273
- setTimeout(function () {div.style.opacity = 0.2;}, 50);
274
- setTimeout(function () {div.style.opacity = 0.4;}, 100);
275
- setTimeout(function () {div.style.opacity = 0.6;}, 150);
276
- setTimeout(function () {div.style.opacity = 0.8;}, 200);
277
- setTimeout(function () {div.style.opacity = 1;}, 250);
278
-
279
- RGraph.hideContext();
280
-
281
- window.onclick = function ()
282
- {
283
- RG.hidePalette();
284
- }
285
-
286
- // Should this be here? Yes. This function is being used as an event handler.
287
- e.stopPropagation();
288
- return false;
289
- };
290
-
291
-
292
-
293
-
294
- /**
295
- * Clears any annotation data from global storage
296
- *
297
- * @param object canvas The canvas tag object
298
- */
299
- RG.clearAnnotations =
300
- RG.ClearAnnotations = function (canvas)
301
- {
302
- /**
303
- * For BC the argument can also be the ID of the canvas
304
- */
305
- if (typeof canvas === 'string') {
306
- var id = canvas;
307
- canvas = doc.getElementById(id);
308
- } else {
309
- var id = canvas.id
310
- }
311
-
312
- var obj = canvas.__object__;
313
-
314
- if (win.localStorage && win.localStorage['__rgraph_annotations_' + id + '__'] && win.localStorage['__rgraph_annotations_' + id + '__'].length) {
315
- win.localStorage['__rgraph_annotations_' + id + '__'] = [];
316
-
317
- RGraph.FireCustomEvent(obj, 'onannotateclear');
318
- }
319
- };
320
-
321
-
322
-
323
-
324
- /**
325
- * Replays stored annotations
326
- *
327
- * @param object obj The graph object
328
- */
329
- RG.replayAnnotations =
330
- RG.ReplayAnnotations = function (obj)
331
- {
332
- // Check for support
333
- if (!win.localStorage) {
334
- return;
335
- }
336
-
337
- var context = obj.context;
338
- var annotations = win.localStorage['__rgraph_annotations_' + obj.id + '__'];
339
- var i, len, move, coords;
340
-
341
- context.beginPath();
342
- context.lineWidth = obj.Get('annotate.linewidth');
343
-
344
- if (annotations && annotations.length) {
345
- annotations = annotations.split('|');
346
- } else {
347
- return;
348
- }
349
-
350
-
351
- for (i=0,len=annotations.length; i<len; ++i) {
352
-
353
- // If the element of the array is a color - finish the path,
354
- // stroke it and start a new one
355
- if (annotations[i].match(/[a-z]+/)) {
356
- context.stroke();
357
- context.beginPath();
358
-
359
- context.strokeStyle = annotations[i];
360
- move = true;
361
- continue;
362
- }
363
-
364
- coords = annotations[i].split(',');
365
- coords[0] = Number(coords[0]);
366
- coords[1] = Number(coords[1]);
367
-
368
- if (move) {
369
- context.moveTo(coords[0], coords[1]);
370
- move = false;
371
- } else {
372
- context.lineTo(coords[0], coords[1]);
373
- }
374
- }
375
-
376
- context.stroke();
377
- };
378
-
379
-
380
-
381
-
382
- window.addEventListener('load', function (e)
383
- {
384
- // This delay is necessary to allow the window.onload event listener to run
385
- setTimeout(function ()
386
- {
387
- var tags = doc.getElementsByTagName('canvas');
388
- for (var i=0; i<tags.length; ++i) {
389
- if (tags[i].__object__ && tags[i].__object__.isRGraph && tags[i].__object__.Get('chart.annotatable')) {
390
- RG.replayAnnotations(tags[i].__object__);
391
- }
392
- }
393
- }, 100); // This delay is sufficient to wait before replaying the annotations
394
- }, false);
395
-
396
-
397
-
398
-
399
- // End module pattern
400
- })(window, document);
2
+ RGraph=window.RGraph||{isRGraph:true};(function(win,doc,undefined)
3
+ {var RG=RGraph,ua=navigator.userAgent,ma=Math;RG.annotating_canvas_onmousedown=function(e)
4
+ {if(e.button===0){e.target.__object__.Set('chart.mousedown',true);var obj=e.target.__object__,prop=obj.properties
5
+ obj.context.beginPath();obj.context.strokeStyle=obj.Get('chart.annotate.color');obj.context.lineWidth=obj.Get('chart.annotate.linewidth');var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1]
6
+ if(obj.type==='bar'&&prop['chart.variant']==='3d'){var adjustment=prop['chart.variant.threed.angle']*mouseXY[0];mouseY-=adjustment;}
7
+ RG.Registry.Set('annotate.actions',[obj.Get('chart.annotate.color')]);obj.context.moveTo(mouseX,mouseY);RG.Registry.Set('annotate.last.coordinates',[mouseX,mouseY]);RG.Registry.Set('started.annotating',false);RG.Registry.Set('chart.annotating',obj);RG.FireCustomEvent(obj,'onannotatebegin');}
8
+ return false;};RG.annotating_window_onmouseup=function(e)
9
+ {var obj=RG.Registry.Get('chart.annotating');var win=window;if(e.button!=0||!obj){return;}
10
+ var tags=doc.getElementsByTagName('canvas');for(var i=0;i<tags.length;++i){if(tags[i].__object__){tags[i].__object__.Set('chart.mousedown',false);}}
11
+ if(RG.Registry.Get('annotate.actions')&&RG.Registry.Get('annotate.actions').length>0&&win.localStorage){var id='__rgraph_annotations_'+e.target.id+'__';var annotations=win.localStorage[id]?win.localStorage[id]+'|':'';annotations+=RG.Registry.Get('annotate.actions');win.localStorage[id]=annotations;}
12
+ RG.Registry.Set('annotate.actions',[]);RG.FireCustomEvent(obj,'onannotateend');};RGraph.annotating_canvas_onmousemove=function(e)
13
+ {var obj=e.target.__object__;var prop=obj.properties;var mouseXY=RG.getMouseXY(e);var mouseX=mouseXY[0];var mouseY=mouseXY[1];var lastXY=RG.Registry.Get('annotate.last.coordinates');if(obj.Get('chart.mousedown')){if(obj.type==='bar'&&prop['chart.variant']==='3d'){var adjustment=prop['chart.variant.threed.angle']*mouseXY[0];mouseY-=adjustment;}
14
+ obj.context.beginPath();if(!lastXY){obj.context.moveTo(mouseX,mouseY)}else{obj.context.strokeStyle=obj.properties['chart.annotate.color'];obj.context.moveTo(lastXY[0],lastXY[1]);obj.context.lineTo(mouseX,mouseY);}
15
+ RG.Registry.Set('annotate.actions',RG.Registry.Get('annotate.actions')+'|'+mouseX+','+mouseY);RG.Registry.Set('annotate.last.coordinates',[mouseX,mouseY]);RG.FireCustomEvent(obj,'onannotate');obj.context.stroke();}};RG.ShowPalette=RG.Showpalette=function(e)
16
+ {var isSafari=navigator.userAgent.indexOf('Safari')?true:false;e=RG.FixEventObject(e);var canvas=e.target.parentNode.__canvas__,context=canvas.getContext('2d'),obj=canvas.__object__,div=document.createElement('DIV'),coords=RG.getMouseXY(e)
17
+ div.__object__=obj;div.className='RGraph_palette';div.style.position='absolute';div.style.backgroundColor='white';div.style.border='1px solid black';div.style.left=0;div.style.top=0;div.style.padding='3px';div.style.paddingLeft='5px';div.style.opacity=0;div.style.boxShadow='rgba(96,96,96,0.5) 3px 3px 3px';div.style.WebkitBoxShadow='rgba(96,96,96,0.5) 3px 3px 3px';div.style.MozBoxShadow='rgba(96,96,96,0.5) 3px 3px 3px';var colors=['Black','Red','Yellow','Green','Orange','White','Magenta','Pink'];for(var i=0,len=colors.length;i<len;i+=1){var div2=doc.createElement('DIV');div2.cssClass='RGraph_palette_color';div2.style.fontSize='12pt';div2.style.cursor='pointer';div2.style.padding='1px';div2.style.paddingRight='10px';div2.style.textAlign='left';var span=document.createElement('SPAN');span.style.display='inline-block';span.style.marginRight='9px';span.style.width='17px';span.style.height='17px';span.style.top='2px';span.style.position='relative';span.style.backgroundColor=colors[i];div2.appendChild(span);div2.innerHTML+=colors[i];div2.onmouseover=function()
18
+ {this.style.backgroundColor='#eee';}
19
+ div2.onmouseout=function()
20
+ {this.style.backgroundColor='';}
21
+ div2.onclick=function(e)
22
+ {var color=this.childNodes[0].style.backgroundColor;obj.Set('chart.annotate.color',color);}
23
+ div.appendChild(div2);}
24
+ doc.body.appendChild(div);div.style.left=e.pageX+'px';div.style.top=e.pageY+'px';if((e.pageX+(div.offsetWidth+5))>document.body.offsetWidth){div.style.left=(e.pageX-div.offsetWidth)+'px';}
25
+ RGraph.Registry.Set('chart.palette',div);setTimeout(function(){div.style.opacity=0.2;},50);setTimeout(function(){div.style.opacity=0.4;},100);setTimeout(function(){div.style.opacity=0.6;},150);setTimeout(function(){div.style.opacity=0.8;},200);setTimeout(function(){div.style.opacity=1;},250);RGraph.hideContext();window.onclick=function()
26
+ {RG.hidePalette();}
27
+ e.stopPropagation();return false;};RG.clearAnnotations=RG.ClearAnnotations=function(canvas)
28
+ {if(typeof canvas==='string'){var id=canvas;canvas=doc.getElementById(id);}else{var id=canvas.id}
29
+ var obj=canvas.__object__;if(win.localStorage&&win.localStorage['__rgraph_annotations_'+id+'__']&&win.localStorage['__rgraph_annotations_'+id+'__'].length){win.localStorage['__rgraph_annotations_'+id+'__']=[];RGraph.FireCustomEvent(obj,'onannotateclear');}};RG.replayAnnotations=RG.ReplayAnnotations=function(obj)
30
+ {if(!win.localStorage){return;}
31
+ var context=obj.context;var annotations=win.localStorage['__rgraph_annotations_'+obj.id+'__'];var i,len,move,coords;context.beginPath();context.lineWidth=obj.Get('annotate.linewidth');if(annotations&&annotations.length){annotations=annotations.split('|');}else{return;}
32
+ for(i=0,len=annotations.length;i<len;++i){if(annotations[i].match(/[a-z]+/)){context.stroke();context.beginPath();context.strokeStyle=annotations[i];move=true;continue;}
33
+ coords=annotations[i].split(',');coords[0]=Number(coords[0]);coords[1]=Number(coords[1]);if(move){context.moveTo(coords[0],coords[1]);move=false;}else{context.lineTo(coords[0],coords[1]);}}
34
+ context.stroke();};window.addEventListener('load',function(e)
35
+ {setTimeout(function()
36
+ {var tags=doc.getElementsByTagName('canvas');for(var i=0;i<tags.length;++i){if(tags[i].__object__&&tags[i].__object__.isRGraph&&tags[i].__object__.Get('chart.annotatable')){RG.replayAnnotations(tags[i].__object__);}}},100);},false);})(window,document);