rgraph-rails 1.0.1

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 (74) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +4 -0
  5. data/CODE_OF_CONDUCT.md +13 -0
  6. data/Gemfile +4 -0
  7. data/README.md +73 -0
  8. data/Rakefile +6 -0
  9. data/bin/console +14 -0
  10. data/bin/setup +7 -0
  11. data/lib/rgraph-rails/version.rb +3 -0
  12. data/lib/rgraph-rails.rb +8 -0
  13. data/license.txt +19 -0
  14. data/rgraph-rails.gemspec +26 -0
  15. data/vendor/assets/images/bg.png +0 -0
  16. data/vendor/assets/images/bullet.png +0 -0
  17. data/vendor/assets/images/facebook-large.png +0 -0
  18. data/vendor/assets/images/google-plus-large.png +0 -0
  19. data/vendor/assets/images/logo.png +0 -0
  20. data/vendor/assets/images/meter-image-sd-needle.png +0 -0
  21. data/vendor/assets/images/meter-image-sd.png +0 -0
  22. data/vendor/assets/images/meter-sketch-needle.png +0 -0
  23. data/vendor/assets/images/meter-sketch.png +0 -0
  24. data/vendor/assets/images/odometer-background.png +0 -0
  25. data/vendor/assets/images/rgraph.jpg +0 -0
  26. data/vendor/assets/images/title.png +0 -0
  27. data/vendor/assets/images/twitter-large.png +0 -0
  28. data/vendor/assets/javascripts/RGraph.bar.js +3246 -0
  29. data/vendor/assets/javascripts/RGraph.bipolar.js +2003 -0
  30. data/vendor/assets/javascripts/RGraph.common.annotate.js +399 -0
  31. data/vendor/assets/javascripts/RGraph.common.context.js +600 -0
  32. data/vendor/assets/javascripts/RGraph.common.core.js +4751 -0
  33. data/vendor/assets/javascripts/RGraph.common.csv.js +275 -0
  34. data/vendor/assets/javascripts/RGraph.common.deprecated.js +454 -0
  35. data/vendor/assets/javascripts/RGraph.common.dynamic.js +1194 -0
  36. data/vendor/assets/javascripts/RGraph.common.effects.js +1524 -0
  37. data/vendor/assets/javascripts/RGraph.common.key.js +735 -0
  38. data/vendor/assets/javascripts/RGraph.common.resizing.js +550 -0
  39. data/vendor/assets/javascripts/RGraph.common.tooltips.js +605 -0
  40. data/vendor/assets/javascripts/RGraph.common.zoom.js +223 -0
  41. data/vendor/assets/javascripts/RGraph.drawing.background.js +636 -0
  42. data/vendor/assets/javascripts/RGraph.drawing.circle.js +579 -0
  43. data/vendor/assets/javascripts/RGraph.drawing.image.js +810 -0
  44. data/vendor/assets/javascripts/RGraph.drawing.marker1.js +710 -0
  45. data/vendor/assets/javascripts/RGraph.drawing.marker2.js +672 -0
  46. data/vendor/assets/javascripts/RGraph.drawing.marker3.js +568 -0
  47. data/vendor/assets/javascripts/RGraph.drawing.poly.js +623 -0
  48. data/vendor/assets/javascripts/RGraph.drawing.rect.js +603 -0
  49. data/vendor/assets/javascripts/RGraph.drawing.text.js +648 -0
  50. data/vendor/assets/javascripts/RGraph.drawing.xaxis.js +815 -0
  51. data/vendor/assets/javascripts/RGraph.drawing.yaxis.js +860 -0
  52. data/vendor/assets/javascripts/RGraph.fuel.js +965 -0
  53. data/vendor/assets/javascripts/RGraph.funnel.js +988 -0
  54. data/vendor/assets/javascripts/RGraph.gantt.js +1242 -0
  55. data/vendor/assets/javascripts/RGraph.gauge.js +1391 -0
  56. data/vendor/assets/javascripts/RGraph.hbar.js +1794 -0
  57. data/vendor/assets/javascripts/RGraph.hprogress.js +1307 -0
  58. data/vendor/assets/javascripts/RGraph.line.js +3940 -0
  59. data/vendor/assets/javascripts/RGraph.meter.js +1242 -0
  60. data/vendor/assets/javascripts/RGraph.modaldialog.js +292 -0
  61. data/vendor/assets/javascripts/RGraph.odo.js +1265 -0
  62. data/vendor/assets/javascripts/RGraph.pie.js +1979 -0
  63. data/vendor/assets/javascripts/RGraph.radar.js +1840 -0
  64. data/vendor/assets/javascripts/RGraph.rose.js +1860 -0
  65. data/vendor/assets/javascripts/RGraph.rscatter.js +1332 -0
  66. data/vendor/assets/javascripts/RGraph.scatter.js +3029 -0
  67. data/vendor/assets/javascripts/RGraph.thermometer.js +1131 -0
  68. data/vendor/assets/javascripts/RGraph.vprogress.js +1326 -0
  69. data/vendor/assets/javascripts/RGraph.waterfall.js +1252 -0
  70. data/vendor/assets/javascripts/financial-data.js +1067 -0
  71. data/vendor/assets/stylesheets/ModalDialog.css +90 -0
  72. data/vendor/assets/stylesheets/animations.css +3347 -0
  73. data/vendor/assets/stylesheets/website.css +402 -0
  74. metadata +175 -0
@@ -0,0 +1,605 @@
1
+ // version: 2015-11-02
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 is just �99 (GBP) and you can |
11
+ * | read about it here: |
12
+ * | http://www.rgraph.net/license |
13
+ * o--------------------------------------------------------------------------------o
14
+ */
15
+
16
+ RGraph = window.RGraph || {isRGraph: true};
17
+
18
+
19
+
20
+
21
+ // Module pattern
22
+ (function (win, doc, undefined)
23
+ {
24
+ var RG = RGraph,
25
+ ua = navigator.userAgent,
26
+ ma = Math;
27
+
28
+
29
+
30
+
31
+ /**
32
+ * This is used in two functions, hence it's here
33
+ */
34
+ RG.tooltips = {};
35
+ RG.tooltips.padding = '3px';
36
+ RG.tooltips.font_face = 'Tahoma';
37
+ RG.tooltips.font_size = '10pt';
38
+
39
+
40
+
41
+
42
+ /**
43
+ * Shows a tooltip next to the mouse pointer
44
+ *
45
+ * @param canvas object The canvas element object
46
+ * @param text string The tooltip text
47
+ * @param int x The X position that the tooltip should appear at. Combined with the canvases offsetLeft
48
+ * gives the absolute X position
49
+ * @param int y The Y position the tooltip should appear at. Combined with the canvases offsetTop
50
+ * gives the absolute Y position
51
+ * @param int idx The index of the tooltip in the graph objects tooltip array
52
+ * @param object e The event object
53
+ */
54
+ RG.tooltip =
55
+ RG.Tooltip = function (obj, text, x, y, idx, e)
56
+ {
57
+ /**
58
+ * chart.tooltip.override allows you to totally take control of rendering the tooltip yourself
59
+ */
60
+ if (typeof(obj.Get('chart.tooltips.override')) == 'function') {
61
+ return obj.Get('chart.tooltips.override')(obj, text, x, y, idx);
62
+ }
63
+
64
+ /**
65
+ * Save the X/Y coords
66
+ */
67
+ var originalX = x;
68
+ var originalY = y;
69
+
70
+ /**
71
+ * This facilitates the "id:xxx" format
72
+ */
73
+ text = RGraph.getTooltipTextFromDIV(text);
74
+
75
+ /**
76
+ * First clear any exising timers
77
+ */
78
+ var timers = RGraph.Registry.Get('chart.tooltip.timers');
79
+
80
+ if (timers && timers.length) {
81
+ for (i=0; i<timers.length; ++i) {
82
+ clearTimeout(timers[i]);
83
+ }
84
+ }
85
+ RGraph.Registry.Set('chart.tooltip.timers', []);
86
+
87
+ /**
88
+ * Hide the context menu if it's currently shown
89
+ */
90
+ if (obj.Get('chart.contextmenu')) {
91
+ RGraph.HideContext();
92
+ }
93
+
94
+ var effect = obj.Get('chart.tooltips.effect') ? obj.Get('chart.tooltips.effect').toLowerCase() : 'fade';
95
+
96
+
97
+ /**
98
+ * Show a tool tip
99
+ */
100
+ var tooltipObj = document.createElement('DIV');
101
+ tooltipObj.className = obj.Get('chart.tooltips.css.class');
102
+ tooltipObj.style.display = 'none';
103
+ tooltipObj.style.position = RGraph.isFixed(obj.canvas) ? 'fixed' : 'absolute';
104
+ tooltipObj.style.left = 0;
105
+ tooltipObj.style.top = 0;
106
+ tooltipObj.style.backgroundColor = 'rgb(255,255,239)';
107
+ tooltipObj.style.color = 'black';
108
+ if (!document.all) tooltipObj.style.border = '';
109
+ tooltipObj.style.visibility = 'visible';
110
+ tooltipObj.style.paddingLeft = RGraph.tooltips.padding;
111
+ tooltipObj.style.paddingRight = RGraph.tooltips.padding;
112
+ tooltipObj.style.fontFamily = RGraph.tooltips.font_face;
113
+ tooltipObj.style.fontSize = RGraph.tooltips.font_size;
114
+ tooltipObj.style.zIndex = 3;
115
+
116
+ // Only apply a border if there's content
117
+ if (RGraph.trim(text).length > 0) {
118
+ tooltipObj.style.border = '1px #bbb solid';
119
+ }
120
+
121
+ tooltipObj.style.borderRadius = '5px';
122
+ tooltipObj.style.MozBorderRadius = '5px';
123
+ tooltipObj.style.WebkitBorderRadius = '5px';
124
+ tooltipObj.style.WebkitBoxShadow = 'rgba(96,96,96,0.5) 0 0 5px';
125
+ tooltipObj.style.MozBoxShadow = 'rgba(96,96,96,0.5) 0 0 5px';
126
+ tooltipObj.style.boxShadow = 'rgba(96,96,96,0.5) 0 0 5px';
127
+ tooltipObj.style.filter = 'progid:DXImageTransform.Microsoft.Shadow(color=#666666,direction=135)';
128
+ tooltipObj.style.opacity = 0;
129
+ //tooltipObj.style.overflow = 'hidden';
130
+ tooltipObj.innerHTML = text;
131
+ tooltipObj.__text__ = text; // This is set because the innerHTML can change when it's set
132
+ tooltipObj.__canvas__ = obj.canvas;
133
+ tooltipObj.style.display = 'inline';
134
+ tooltipObj.id = '__rgraph_tooltip_' + obj.canvas.id + '_' + obj.uid + '_'+ idx;
135
+ tooltipObj.__event__ = obj.Get('chart.tooltips.event') || 'click';
136
+ tooltipObj.__object__ = obj;
137
+
138
+ if (typeof(idx) == 'number') {
139
+ tooltipObj.__index__ = idx;
140
+ origIdx = idx;
141
+ }
142
+
143
+ if (obj.type == 'line' || obj.type == 'radar') {
144
+ for (var ds=0; ds<obj.data.length; ++ds) {
145
+ if (idx >= obj.data[ds].length) {
146
+ idx -= obj.data[ds].length;
147
+ } else {
148
+ break;
149
+ }
150
+ }
151
+
152
+ tooltipObj.__dataset__ = ds;
153
+ tooltipObj.__index2__ = idx;
154
+ }
155
+
156
+ document.body.appendChild(tooltipObj);
157
+
158
+ var width = tooltipObj.offsetWidth;
159
+ var height = tooltipObj.offsetHeight;
160
+
161
+
162
+ /**
163
+ * Set the width on the tooltip so it doesn't resize if the window is resized
164
+ */
165
+ tooltipObj.style.width = width + 'px';
166
+
167
+
168
+
169
+ tooltipObj.style.top = (y - height - 2) + 'px';
170
+
171
+ /**
172
+ * If the function exists call the object specific tooltip positioning function
173
+ */
174
+ if (typeof(obj.positionTooltip) == 'function') {
175
+ if (tooltipObj.innerHTML.length > 0) {
176
+
177
+ obj.positionTooltip(obj, x, y, tooltipObj, origIdx ? origIdx : idx);
178
+
179
+ if (obj.Get('chart.tooltips.coords.page')) {
180
+
181
+ tooltipObj.style.left = e.pageX - (width / 2) - 4.25 + 'px';
182
+ tooltipObj.style.top = e.pageY - height - 10 + 'px';
183
+
184
+ document.getElementById('__rgraph_tooltip_pointer__').style.left = (parseInt(tooltipObj.offsetWidth) / 2) - 8.5 + 'px';
185
+ }
186
+ }
187
+ } else {
188
+ tooltipObj.style.left = e.pageX - (width / 2) - 4.25 + 'px';
189
+ tooltipObj.style.top = e.pageY - height - 7 + 'px';
190
+ }
191
+
192
+
193
+ if (effect == 'fade' || effect == 'expand' || effect == 'contract' || effect == 'snap') {
194
+ setTimeout(function () {tooltipObj.style.opacity = 0.1;}, 25);
195
+ setTimeout(function () {tooltipObj.style.opacity = 0.2;}, 50);
196
+ setTimeout(function () {tooltipObj.style.opacity = 0.3;}, 75);
197
+ setTimeout(function () {tooltipObj.style.opacity = 0.4;}, 100);
198
+ setTimeout(function () {tooltipObj.style.opacity = 0.5;}, 125);
199
+ setTimeout(function () {tooltipObj.style.opacity = 0.6;}, 150);
200
+ setTimeout(function () {tooltipObj.style.opacity = 0.7;}, 175);
201
+ setTimeout(function () {tooltipObj.style.opacity = 0.8;}, 200);
202
+ setTimeout(function () {tooltipObj.style.opacity = 0.9;}, 225);
203
+
204
+ if (effect == 'expand' || effect == 'contract' || effect == 'snap') {
205
+ console.log('[RGRAPH] The snap, expand and contract tooltip effects are deprecated. Available effects now are fade and none');
206
+ }
207
+ }
208
+
209
+ setTimeout("if (RGraph.Registry.Get('chart.tooltip')) { RGraph.Registry.Get('chart.tooltip').style.opacity = 1;}", effect == 'none' ? 50 : 250);
210
+
211
+ /**
212
+ * If the tooltip it self is clicked, cancel it
213
+ */
214
+ tooltipObj.onmousedown = function (e){e.stopPropagation();}
215
+ tooltipObj.onmouseup = function (e){e.stopPropagation();}
216
+ tooltipObj.onclick = function (e){if (e.button == 0) {e.stopPropagation();}}
217
+
218
+
219
+
220
+
221
+
222
+
223
+
224
+ /**
225
+ * Keep a reference to the tooltip in the registry
226
+ */
227
+ RGraph.Registry.Set('chart.tooltip', tooltipObj);
228
+
229
+ /**
230
+ * Fire the tooltip event
231
+ */
232
+ RG.FireCustomEvent(obj, 'ontooltip');
233
+ };
234
+
235
+
236
+
237
+
238
+
239
+ /**
240
+ *
241
+ */
242
+ RG.getTooltipTextFromDIV = function (text)
243
+ {
244
+ // This regex is duplicated firher down on roughly line 888
245
+ var result = /^id:(.*)/.exec(text);
246
+
247
+ if (result && result[1] && document.getElementById(result[1])) {
248
+ text = document.getElementById(result[1]).innerHTML;
249
+ } else if (result && result[1]) {
250
+ text = '';
251
+ }
252
+
253
+ return text;
254
+ };
255
+
256
+
257
+ /**
258
+ *
259
+ */
260
+ RG.getTooltipWidth = function (text, obj)
261
+ {
262
+ var div = document.createElement('DIV');
263
+ div.className = obj.Get('chart.tooltips.css.class');
264
+ div.style.paddingLeft = RGraph.tooltips.padding;
265
+ div.style.paddingRight = RGraph.tooltips.padding;
266
+ div.style.fontFamily = RGraph.tooltips.font_face;
267
+ div.style.fontSize = RGraph.tooltips.font_size;
268
+ div.style.visibility = 'hidden';
269
+ div.style.position = 'absolute';
270
+ div.style.top = '300px';
271
+ div.style.left = 0;
272
+ div.style.display = 'inline';
273
+ div.innerHTML = RGraph.getTooltipTextFromDIV(text);
274
+ document.body.appendChild(div);
275
+
276
+ return div.offsetWidth;
277
+ };
278
+
279
+
280
+ /**
281
+ * Hides the currently shown tooltip
282
+ */
283
+ RG.hideTooltip =
284
+ RG.HideTooltip = function ()
285
+ {
286
+ var tooltip = RGraph.Registry.Get('chart.tooltip');
287
+ var uid = arguments[0] && arguments[0].uid ? arguments[0].uid : null;
288
+
289
+ if (tooltip && tooltip.parentNode && (!uid || uid == tooltip.__canvas__.uid)) {
290
+ tooltip.parentNode.removeChild(tooltip);
291
+ tooltip.style.display = 'none';
292
+ tooltip.style.visibility = 'hidden';
293
+ RGraph.Registry.Set('chart.tooltip', null);
294
+ }
295
+ };
296
+
297
+
298
+
299
+ /**
300
+ * This installs the window mousedown event listener. It clears any highlight that may
301
+ * be present.
302
+ *
303
+ * @param object obj The chart object
304
+ *
305
+ RGraph.InstallWindowMousedownTooltipListener = function (obj)
306
+ {
307
+ if (RGraph.Registry.Get('__rgraph_event_listeners__')['window_mousedown']) {
308
+ return;
309
+ }
310
+
311
+ // When the canvas is cleared, reset this flag so that the event listener is installed again
312
+ RGraph.AddCustomEventListener(obj, 'onclear', function (obj) {RGraph.Registry.Get('__rgraph_event_listeners__')['window_mousedown'] = false;})
313
+
314
+ // NOTE: Global on purpose
315
+ rgraph_window_mousedown = function (e)
316
+ {
317
+ if (RGraph.Registry.Get('chart.tooltip')) {
318
+
319
+ var obj = RGraph.Registry.Get('chart.tooltip').__object__;
320
+ var canvas = obj.canvas;
321
+
322
+ /**
323
+ * Get rid of the tooltip and redraw all canvases on the page
324
+ *
325
+ RGraph.HideTooltip();
326
+
327
+ /**
328
+ * No need to clear if highlighting is disabled
329
+ *
330
+ * TODO Really, need to check ALL of the pertinent objects that
331
+ * are drawing on the canvas using the ObjectRegistry -
332
+ * ie RGraph.ObjectRegistry.getObjectsByCanvasID()
333
+ *
334
+ if (obj.Get('chart.tooltips.highlight')) {
335
+ RGraph.RedrawCanvas(canvas);
336
+ }
337
+ }
338
+ }
339
+ window.addEventListener('mousedown', rgraph_window_mousedown, false);
340
+ RGraph.AddEventListener('window_' + obj.id, 'mousedown', rgraph_window_mousedown);
341
+ }
342
+ */
343
+
344
+
345
+ /**
346
+ * This installs the canvas mouseup event listener. This is the function that
347
+ * actually shows the appropriate (if any) tooltip.
348
+ *
349
+ * @param object obj The chart object
350
+ *
351
+ RGraph.InstallCanvasMouseupTooltipListener = function (obj)
352
+ {
353
+ if (RGraph.Registry.Get('__rgraph_event_listeners__')[obj.canvas.id + '_mouseup']) {
354
+ return;
355
+ }
356
+ RGraph.Registry.Get('__rgraph_event_listeners__')[obj.canvas.id + '_mouseup'] = true;
357
+
358
+ // When the canvas is cleared, reset this flag so that the event listener is installed again
359
+ RGraph.AddCustomEventListener(obj, 'onclear', function (obj) {RGraph.Registry.Get('__rgraph_event_listeners__')[obj.canvas.id + '_mouseup'] = false});
360
+
361
+ // Install the onclick event handler for the tooltips
362
+ //
363
+ // // NOTE: Global on purpose
364
+ rgraph_canvas_mouseup_func = function (e)
365
+ {
366
+ var x = arguments[1] ? arguments[1] : e.pageX;
367
+ var y = arguments[2] ? arguments[2] : e.pageY;
368
+
369
+ var objects = RGraph.ObjectRegistry.getObjectsByCanvasID(e.target.id);
370
+
371
+ // It's important to go backwards through the array so that the front charts
372
+ // are checked first, then the charts at the back
373
+ for (var i=(objects.length - 1); i>=0; --i) {
374
+
375
+ var shape = objects[i].getShape(e);
376
+
377
+ if (shape && shape['object'] && !RGraph.Registry.Get('chart.tooltip')) {
378
+
379
+ /**
380
+ * This allows the Scatter chart funky tooltips style
381
+ *
382
+ if (objects[i].type == 'scatter' && shape['dataset'] > 0) {
383
+ for (var j=0; j<(objects[i].data.length - 1); ++j) {
384
+ shape['index'] += objects[i].data[j].length;
385
+ }
386
+ }
387
+
388
+ var text = RGraph.parseTooltipText(objects[i].Get('chart.tooltips'), shape['index']);
389
+
390
+ if (text) {
391
+
392
+ if (shape['object'].Get('chart.tooltips.hotspot.xonly')) {
393
+ var canvasXY = RGraph.getCanvasXY(objects[i].canvas);
394
+ x = canvasXY[0] + shape[1];
395
+ y = canvasXY[1] + shape[2];
396
+ }
397
+
398
+ RGraph.Tooltip(objects[i], text, x, y, shape['index']);
399
+ objects[i].Highlight(shape);
400
+
401
+ e.stopPropagation();
402
+ e.cancelBubble = true;
403
+ return false;
404
+ }
405
+ }
406
+ }
407
+ }
408
+ obj.canvas.addEventListener('mouseup', rgraph_canvas_mouseup_func, false);
409
+ RGraph.AddEventListener(obj.id, 'mouseup', rgraph_canvas_mouseup_func);
410
+ }
411
+ */
412
+
413
+
414
+
415
+ /**
416
+ * This installs the canvas mousemove event listener. This is the function that
417
+ * changes the mouse pointer if need be.
418
+ *
419
+ * @param object obj The chart object
420
+ *
421
+ RGraph.InstallCanvasMousemoveTooltipListener = function (obj)
422
+ {
423
+ if (RGraph.Registry.Get('__rgraph_event_listeners__')[obj.canvas.id + '_mousemove']) {
424
+ return;
425
+ }
426
+ RGraph.Registry.Get('__rgraph_event_listeners__')[obj.canvas.id + '_mousemove'] = true;
427
+
428
+ // When the canvas is cleared, reset this flag so that the event listener is installed again
429
+ RGraph.AddCustomEventListener(obj, 'onclear', function (obj) {RGraph.Registry.Get('__rgraph_event_listeners__')[obj.canvas.id + '_mousemove'] = false})
430
+
431
+ // Install the mousemove event handler for the tooltips
432
+ //
433
+ // NOTE: Global on purpose
434
+ rgraph_canvas_mousemove_func = function (e)
435
+ {
436
+ var objects = RGraph.ObjectRegistry.getObjectsByCanvasID(e.target.id);
437
+
438
+ for (var i=0; i<objects.length; ++i) {
439
+
440
+ var shape = objects[i].getShape(e);
441
+
442
+ if (shape && shape['object']) {
443
+
444
+ /**
445
+ * This allows the Scatter chart funky tooltips style
446
+ *
447
+ if (objects[i].type == 'scatter' && shape['dataset'] > 0) {
448
+ for (var j=0; j<(objects[i].data.length - 1); ++j) {
449
+ shape['index'] += objects[i].data[j].length;
450
+ }
451
+ }
452
+
453
+ var text = RGraph.parseTooltipText(objects[i].Get('chart.tooltips'), shape['index']);
454
+
455
+
456
+ if (text) {
457
+
458
+ e.target.style.cursor = 'pointer';
459
+
460
+ /**
461
+ * This facilitates the event triggering the tooltips being mousemove
462
+ *
463
+
464
+ if ( typeof(objects[i].Get('chart.tooltips.event')) == 'string'
465
+ && objects[i].Get('chart.tooltips.event') == 'onmousemove'
466
+ && (!RGraph.Registry.Get('chart.tooltip') || shape['index'] != RGraph.Registry.Get('chart.tooltip').__index__ || shape['object'].uid != RGraph.Registry.Get('chart.tooltip').__object__.uid)
467
+ ) {
468
+
469
+ // Hide any current tooltip
470
+ rgraph_window_mousedown(e);
471
+
472
+ rgraph_canvas_mouseup_func(e);
473
+ }
474
+ }
475
+ }
476
+ }
477
+ }
478
+ obj.canvas.addEventListener('mousemove', rgraph_canvas_mousemove_func, false);
479
+ RGraph.AddEventListener(obj.id, 'mousemove', rgraph_canvas_mousemove_func);
480
+ }
481
+ */
482
+
483
+
484
+
485
+
486
+
487
+
488
+
489
+ /**
490
+ * This (as the name suggests preloads any images it can find in the tooltip text
491
+ *
492
+ * @param object obj The chart object
493
+ */
494
+ RG.preLoadTooltipImages =
495
+ RG.PreLoadTooltipImages = function (obj)
496
+ {
497
+ var tooltips = obj.Get('chart.tooltips');
498
+
499
+ if (RGraph.hasTooltips(obj)) {
500
+
501
+ if (obj.type == 'rscatter') {
502
+ tooltips = [];
503
+ for (var i=0; i<obj.data.length; ++i) {
504
+ tooltips.push(obj.data[3]);
505
+ }
506
+ }
507
+
508
+ for (var i=0; i<tooltips.length; ++i) {
509
+ // Add the text to an offscreen DIV tag
510
+ var div = document.createElement('DIV');
511
+ div.style.position = 'absolute';
512
+ div.style.opacity = 0;
513
+ div.style.top = '-100px';
514
+ div.style.left = '-100px';
515
+ div.innerHTML = tooltips[i];
516
+ document.body.appendChild(div);
517
+
518
+ // Now get the IMG tags and create them
519
+ var img_tags = div.getElementsByTagName('IMG');
520
+
521
+ // Create the image in an off-screen image tag
522
+ for (var j=0; j<img_tags.length; ++j) {
523
+ if (img_tags && img_tags[i]) {
524
+ var img = document.createElement('IMG');
525
+ img.style.position = 'absolute';
526
+ img.style.opacity = 0;
527
+ img.style.top = '-100px';
528
+ img.style.left = '-100px';
529
+ img.src = img_tags[i].src
530
+ document.body.appendChild(img);
531
+
532
+ setTimeout(function () {document.body.removeChild(img);}, 250);
533
+ }
534
+ }
535
+
536
+ // Now remove the div
537
+ document.body.removeChild(div);
538
+ }
539
+ }
540
+ };
541
+
542
+
543
+
544
+
545
+ /**
546
+ * This is the tooltips canvas onmousemove listener
547
+ */
548
+ RG.tooltips_mousemove =
549
+ RG.Tooltips_mousemove = function (obj, e)
550
+ {
551
+ var shape = obj.getShape(e);
552
+ var changeCursor_tooltips = false
553
+
554
+ if ( shape
555
+ && typeof(shape['index']) == 'number'
556
+ && obj.Get('chart.tooltips')[shape['index']]
557
+ ) {
558
+
559
+ var text = RGraph.parseTooltipText(obj.Get('chart.tooltips'), shape['index']);
560
+
561
+ if (text) {
562
+
563
+ /**
564
+ * Change the cursor
565
+ */
566
+ changeCursor_tooltips = true;
567
+
568
+ if (obj.Get('chart.tooltips.event') == 'onmousemove') {
569
+
570
+ // Show the tooltip if it's not the same as the one already visible
571
+ if (
572
+ !RGraph.Registry.Get('chart.tooltip')
573
+ || RGraph.Registry.Get('chart.tooltip').__object__.uid != obj.uid
574
+ || RGraph.Registry.Get('chart.tooltip').__index__ != shape['index']
575
+ ) {
576
+
577
+ RGraph.HideTooltip();
578
+ RGraph.Clear(obj.canvas);
579
+ RGraph.Redraw();
580
+ RGraph.Tooltip(obj, text, e.pageX, e.pageY, shape['index']);
581
+ obj.Highlight(shape);
582
+ }
583
+ }
584
+ }
585
+
586
+ /**
587
+ * More highlighting
588
+ */
589
+ } else if (shape && typeof(shape['index']) == 'number') {
590
+
591
+ var text = RGraph.parseTooltipText(obj.Get('chart.tooltips'), shape['index']);
592
+
593
+ if (text) {
594
+ changeCursor_tooltips = true
595
+ }
596
+ }
597
+
598
+ return changeCursor_tooltips;
599
+ };
600
+
601
+
602
+
603
+
604
+ // End module pattern
605
+ })(window, document);