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,1015 +0,0 @@
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 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
- /**
22
- * The progress bar constructor
23
- *
24
- * @param mixed conf This can either be an object that contains all of the configuration data
25
- * (the updated way of configuring the object) or it can be a string consisting of the
26
- * canvas ID
27
- * @param number The minimum value (if using the older configuration style)
28
- * @param number The maximum value (if using the older configuration style)
29
- * @param number The represented value (if using the older configuration style)
30
- */
31
- RGraph.SemiCircularProgress = function (conf)
32
- {
33
- /**
34
- * Allow for object config style
35
- */
36
- if ( typeof conf === 'object'
37
- && typeof conf.id === 'string') {
38
-
39
- var parseConfObjectForOptions = true; // Set this so the config is parsed (at the end of the constructor)
40
-
41
- } else {
42
-
43
- var conf = {
44
- id: arguments[0],
45
- min: arguments[1],
46
- max: arguments[2],
47
- value: arguments[3]
48
- }
49
- }
50
-
51
-
52
-
53
-
54
- this.id = conf.id;
55
- this.canvas = document.getElementById(this.id);
56
- this.context = this.canvas.getContext('2d');
57
- this.canvas.__object__ = this;
58
-
59
- this.min = RGraph.stringsToNumbers(conf.min);
60
- this.max = RGraph.stringsToNumbers(conf.max);
61
- this.value = RGraph.stringsToNumbers(conf.value);
62
- this.type = 'semicircularprogress';
63
- this.coords = [];
64
- this.isRGraph = true;
65
- this.currentValue = null;
66
- this.uid = RGraph.createUID();
67
- this.canvas.uid = this.canvas.uid ? this.canvas.uid : RGraph.CreateUID();
68
- this.colorsParsed = false;
69
- this.coordsText = [];
70
- this.original_colors = [];
71
- this.firstDraw = true; // After the first draw this will be false
72
-
73
-
74
- /**
75
- * Compatibility with older browsers
76
- */
77
- //RGraph.OldBrowserCompat(this.context);
78
-
79
- this.properties =
80
- {
81
- 'chart.background.color': 'rgba(0,0,0,0)',
82
- 'chart.colors': ['#0c0'],
83
- 'chart.linewidth': 2,
84
- 'chart.strokestyle': '#666',
85
- 'chart.gutter.left': 25,
86
- 'chart.gutter.right': 25,
87
- 'chart.gutter.top': 25,
88
- 'chart.gutter.bottom': 35,
89
- 'chart.radius': null,
90
- 'chart.centerx': null,
91
- 'chart.centery': null,
92
- 'chart.width': null,
93
- 'chart.angles.start': 3.1415,
94
- 'chart.angles.end': 6.2830,
95
- 'chart.scale.decimals': 0,
96
- 'chart.scale.point': '.',
97
- 'chart.scale.thousand': ',',
98
- 'chart.scale.formatter': null,
99
- 'chart.scale.round': false,
100
- 'chart.shadow': false,
101
- 'chart.shadow.color': 'rgba(220,220,220,1)',
102
- 'chart.shadow.blur': 2,
103
- 'chart.shadow.offsetx': 2,
104
- 'chart.shadow.offsety': 2,
105
- 'chart.labels.center': true,
106
- 'chart.labels.center.font': null,
107
- 'chart.labels.center.bold': false,
108
- 'chart.labels.center.italic': false,
109
- 'chart.labels.center.fade': false,
110
- 'chart.labels.center.size': 40,
111
- 'chart.labels.center.color':'black',
112
-
113
- 'chart.labels.min.color': null,
114
- 'chart.labels.min.font': null,
115
- 'chart.labels.min.bold': false,
116
- 'chart.labels.min.size': null,
117
- 'chart.labels.min.italic': false,
118
-
119
- 'chart.labels.max.color': null,
120
- 'chart.labels.max.font': null,
121
- 'chart.labels.max.bold': false,
122
- 'chart.labels.max.size': null,
123
- 'chart.labels.max.italic': false,
124
-
125
- 'chart.title': '',
126
- 'chart.title.bold': true,
127
- 'chart.title.italic': false,
128
- 'chart.title.font': null,
129
- 'chart.title.size': null,
130
- 'chart.title.color': 'black',
131
- 'chart.text.size': 12,
132
- 'chart.text.color': 'black',
133
- 'chart.text.font': 'Segoe UI, Arial, Verdana, sans-serif',
134
- 'chart.text.accessible': true,
135
- 'chart.text.accessible.overflow': 'visible',
136
- 'chart.text.accessible.pointerevents': false,
137
- 'chart.contextmenu': null,
138
- 'chart.units.pre': '',
139
- 'chart.units.post': '',
140
- 'chart.tooltips': null,
141
- 'chart.tooltips.effect': 'fade',
142
- 'chart.tooltips.css.class': 'RGraph_tooltip',
143
- 'chart.tooltips.highlight': true,
144
- 'chart.tooltips.event': 'onclick',
145
- 'chart.tooltips.coords.page':true,
146
- 'chart.highlight.stroke': 'rgba(0,0,0,0)',
147
- 'chart.highlight.fill': 'rgba(255,255,255,0.7)',
148
- 'chart.annotatable': false,
149
- 'chart.annotate.color': 'black',
150
- 'chart.zoom.factor': 1.5,
151
- 'chart.zoom.fade.in': true,
152
- 'chart.zoom.fade.out': true,
153
- 'chart.zoom.hdir': 'right',
154
- 'chart.zoom.vdir': 'down',
155
- 'chart.zoom.frames': 25,
156
- 'chart.zoom.delay': 16.666,
157
- 'chart.zoom.shadow': true,
158
- 'chart.zoom.background': true,
159
- 'chart.zoom.action': 'zoom',
160
- 'chart.resizable': false,
161
- 'chart.resize.handle.adjust': [0,0],
162
- 'chart.resize.handle.background': null,
163
- 'chart.adjustable': false,
164
- 'chart.events.click': null,
165
- 'chart.events.mousemove': null,
166
- 'chart.clearto': 'rgba(0,0,0,0)'
167
- }
168
-
169
- // Check for support
170
- if (!this.canvas) {
171
- alert('[SEMICIRCULARPROGRESS] No canvas support');
172
- return;
173
- }
174
-
175
-
176
-
177
-
178
- /**
179
- * Translate half a pixel for antialiasing purposes - but only if it hasn't beeen
180
- * done already
181
- */
182
- if (!this.canvas.__rgraph_aa_translated__) {
183
- this.context.translate(0.5,0.5);
184
-
185
- this.canvas.__rgraph_aa_translated__ = true;
186
- }
187
-
188
-
189
-
190
-
191
- // Short variable names
192
- var RG = RGraph,
193
- ca = this.canvas,
194
- co = ca.getContext('2d'),
195
- prop = this.properties,
196
- pa2 = RG.path2,
197
- win = window,
198
- doc = document,
199
- ma = Math
200
-
201
-
202
-
203
- /**
204
- * "Decorate" the object with the generic effects if the effects library has been included
205
- */
206
- if (RG.Effects && typeof RG.Effects.decorate === 'function') {
207
- RG.Effects.decorate(this);
208
- }
209
-
210
-
211
-
212
-
213
- /**
214
- * A generic setter
215
- *
216
- * @param string name The name of the property to set or it can also be an object containing
217
- * object style configuration
218
- */
219
- this.set =
220
- this.Set = function (name)
221
- {
222
- var value = typeof arguments[1] === 'undefined' ? null : arguments[1];
223
-
224
- /**
225
- * the number of arguments is only one and it's an
226
- * object - parse it for configuration data and return.
227
- */
228
- if (arguments.length === 1 && typeof name === 'object') {
229
- RG.parseObjectStyleConfig(this, name);
230
- return this;
231
- }
232
-
233
-
234
-
235
- /**
236
- * This should be done first - prepend the propertyy name with "chart." if necessary
237
- */
238
- if (name.substr(0,6) != 'chart.') {
239
- name = 'chart.' + name;
240
- }
241
-
242
-
243
-
244
- // Convert uppercase letters to dot+lower case letter
245
- while(name.match(/([A-Z])/)) {
246
- name = name.replace(/([A-Z])/, '.' + RegExp.$1.toLowerCase());
247
- }
248
-
249
-
250
-
251
-
252
- prop[name.toLowerCase()] = value;
253
-
254
- return this;
255
- };
256
-
257
-
258
-
259
-
260
- /**
261
- * A generic getter
262
- *
263
- * @param string name The name of the property to get
264
- */
265
- this.get =
266
- this.Get = function (name)
267
- {
268
- /**
269
- * This should be done first - prepend the property name with "chart." if necessary
270
- */
271
- if (name.substr(0,6) != 'chart.') {
272
- name = 'chart.' + name;
273
- }
274
-
275
- // Convert uppercase letters to dot+lower case letter
276
- name = name.replace(/([A-Z])/g, function (str)
277
- {
278
- return '.' + String(RegExp.$1).toLowerCase()
279
- });
280
-
281
- return prop[name.toLowerCase()];
282
- };
283
-
284
-
285
-
286
-
287
- /**
288
- * Draws the progress bar
289
- */
290
- this.draw =
291
- this.Draw = function ()
292
- {
293
- /**
294
- * Fire the onbeforedraw event
295
- */
296
- RG.fireCustomEvent(this, 'onbeforedraw');
297
-
298
-
299
-
300
- /**
301
- * Parse the colors. This allows for simple gradient syntax
302
- */
303
- if (!this.colorsParsed) {
304
-
305
- this.parseColors();
306
-
307
-
308
- // Don't want to do this again
309
- this.colorsParsed = true;
310
- }
311
-
312
-
313
- /**
314
- * Set the current value
315
- */
316
- this.currentValue = this.value;
317
-
318
- /**
319
- * This is new in May 2011 and facilitates indiviual gutter settings,
320
- * eg chart.gutter.left
321
- */
322
- this.gutterLeft = prop['chart.gutter.left'];
323
- this.gutterRight = prop['chart.gutter.right'];
324
- this.gutterTop = prop['chart.gutter.top'];
325
- this.gutterBottom = prop['chart.gutter.bottom'];
326
-
327
- // Figure out the width and height
328
- this.radius = ma.min(
329
- (ca.width - prop['chart.gutter.left'] - prop['chart.gutter.right']) / 2,
330
- ca.height - prop['chart.gutter.top'] - prop['chart.gutter.bottom']
331
- );
332
- this.centerx = ((ca.width - this.gutterLeft - this.gutterRight) / 2) + this.gutterLeft;
333
- this.centery = ca.height - this.gutterBottom;
334
- this.width = this.radius / 3;
335
-
336
- // User specified centerx/y/radius
337
- if (typeof prop['chart.radius'] === 'number') this.radius = prop['chart.radius'];
338
- if (typeof prop['chart.centerx'] === 'number') this.centerx = prop['chart.centerx'];
339
- if (typeof prop['chart.centery'] === 'number') this.centery = prop['chart.centery'];
340
- if (typeof prop['chart.width'] === 'number') this.width = prop['chart.width'];
341
-
342
- this.coords = [];
343
-
344
-
345
-
346
- /**
347
- * Stop this growing uncontrollably
348
- */
349
- this.coordsText = [];
350
-
351
-
352
-
353
-
354
-
355
- //
356
- // Draw the meter
357
- //
358
- this.drawMeter();
359
- this.drawLabels();
360
-
361
-
362
-
363
- /**
364
- * Setup the context menu if required
365
- */
366
- if (prop['chart.contextmenu']) {
367
- RG.showContext(this);
368
- }
369
-
370
-
371
- /**
372
- * This installs the event listeners
373
- */
374
- RG.installEventListeners(this);
375
-
376
-
377
-
378
-
379
- /**
380
- * This function enables resizing
381
- */
382
- if (prop['chart.resizable']) {
383
- RG.allowResizing(this);
384
- }
385
-
386
- /**
387
- * Instead of using RGraph.common.adjusting.js, handle them here
388
- */
389
- this.allowAdjusting();
390
-
391
-
392
- /**
393
- * Fire the onfirstdraw event
394
- */
395
- if (this.firstDraw) {
396
- RG.fireCustomEvent(this, 'onfirstdraw');
397
- this.firstDraw = false;
398
- this.firstDrawFunc();
399
- }
400
-
401
-
402
-
403
-
404
- /**
405
- * Fire the RGraph ondraw event
406
- */
407
- RG.fireCustomEvent(this, 'ondraw');
408
-
409
- return this;
410
- };
411
-
412
-
413
-
414
-
415
- /**
416
- * Draw the bar itself
417
- */
418
- this.drawMeter =
419
- this.DrawMeter = function ()
420
- {
421
- //
422
- // The start/end angles
423
- //
424
- var start = prop['chart.angles.start'],
425
- end = prop['chart.angles.end'];
426
-
427
- //
428
- // Calculate a scale (though only two labels are shown)
429
- //
430
- this.scale2 = RG.getScale2(this, {
431
- 'max': this.max,
432
- 'strict': prop['chart.scale.round'] ? false : true,
433
- 'min': this.min,
434
- 'scale.thousand': prop['chart.scale.thousand'],
435
- 'scale.point': prop['chart.scale.point'],
436
- 'scale.decimals': prop['chart.scale.decimals'],
437
- 'ylabels.count': 5,
438
- 'scale.round': prop['chart.scale.round'],
439
- 'units.pre': prop['chart.units.pre'],
440
- 'units.post': prop['chart.units.post']
441
- });
442
-
443
- // Draw the backgrundColor
444
- if (prop['chart.background.color'] !== 'rgba(0,0,0,0)') {
445
- pa2(co, 'fs % fr % % % %',
446
- prop['chart.background.color'],
447
- 0,0,ca.width, ca.height
448
- );
449
- }
450
-
451
-
452
- // Draw the main semi-circle background and then lighten it by filling it again
453
- // in semi-transparent white
454
- pa2(
455
- co,
456
- 'lw % b a % % % % % false a % % % % % true c s % f % sx % sy % sc % sb % f rgba(255,255,255,0.85) sx 0 sy 0 sb 0 sc rgba(0,0,0,0) lw 1',
457
- prop['chart.linewidth'],
458
- this.centerx, this.centery, this.radius, start, end,
459
- this.centerx, this.centery, this.radius - this.width, end, start,
460
- prop['chart.strokestyle'],
461
- prop['chart.colors'][0],
462
- prop['chart.shadow.offsetx'], prop['chart.shadow.offsety'], prop['chart.shadow'] ? prop['chart.shadow.color'] : 'rgba(0,0,0,0)', prop['chart.shadow.blur']
463
- );
464
-
465
- var angle = start + ((end - start) * ((this.value - this.scale2.min) / (this.max - this.scale2.min)));
466
-
467
- // Draw the meter
468
- pa2(
469
- co,
470
- 'b a % % % % % false a % % % % % true c f %',
471
- this.centerx, this.centery, this.radius, start, angle,
472
- this.centerx, this.centery, this.radius - this.width, start + ((end - start) * ((this.value - this.scale2.min) / (this.max - this.scale2.min))), start,
473
- prop['chart.colors'][0]
474
- );
475
-
476
- this.coords = [[
477
- this.centerx,
478
- this.centery,
479
- this.radius,
480
- start,
481
- end,
482
- this.width,
483
- angle
484
- ]];
485
- };
486
-
487
-
488
-
489
-
490
- /**
491
- * The function that draws the labels
492
- */
493
- this.drawLabels =
494
- this.DrawLabels = function ()
495
- {
496
- var min = RG.numberFormat(
497
- this,
498
- this.scale2.min
499
- )
500
-
501
- var max = RG.numberFormat(
502
- this,
503
- this.scale2.max
504
- )
505
-
506
- // Draw the max label
507
- RG.text2(this, {
508
- font: prop['chart.labels.max.font'] || prop['chart.text.font'],
509
- bold: prop['chart.labels.max.bold'] || prop['chart.text.bold'],
510
- size: prop['chart.labels.max.size'] || prop['chart.text.size'],
511
- x: this.centerx + this.radius - (this.width / 2),
512
- y: this.centery + 5,
513
- valign: 'top',
514
- halign: 'center',
515
- text: max,
516
- color: prop['chart.labels.max.color'] || prop['chart.text.color'],
517
- italic: prop['chart.labels.max.italic']
518
- });
519
-
520
- // Draw the min label
521
- RG.text2(this, {
522
- font: prop['chart.labels.min.font'] || prop['chart.text.font'],
523
- bold: prop['chart.labels.min.bold'] || prop['chart.text.bold'],
524
- size: prop['chart.labels.min.size'] || prop['chart.text.size'],
525
- x: this.centerx - this.radius + (this.width / 2),
526
- y: this.centery + 5,
527
- valign: 'top',
528
- halign: 'center',
529
- text: min,
530
- color: prop['chart.labels.min.color'] || prop['chart.text.color'],
531
- italic: prop['chart.labels.min.italic']
532
- });
533
-
534
-
535
- // Draw the big label in the center
536
- if (prop['chart.labels.center']) {
537
- var ret = RG.text2(this, {
538
- font: prop['chart.labels.center.font'] || prop['chart.text.font'],
539
- size: prop['chart.labels.center.size'] || 50,
540
- bold: prop['chart.labels.center.bold'],
541
- italic: prop['chart.labels.center.italic'],
542
- x: this.centerx,
543
- y: this.centery,
544
- valign: 'bottom',
545
- halign: 'center',
546
- text: RG.numberFormat(
547
- this,
548
- this.value.toFixed(prop['chart.scale.decimals']),
549
- prop['chart.units.pre'],
550
- prop['chart.units.post']
551
- ),
552
- color: prop['chart.labels.center.color'] || prop['chart.text.color']
553
- });
554
-
555
- // Allows the center label to fade in
556
- if (prop['chart.labels.center.fade'] && ret.node) {
557
- ret.node.style.opacity = 0;
558
-
559
- var delay = 25,
560
- incr = 0.1;
561
-
562
- for (var i=0; i<10; ++i) {
563
- (function (index)
564
- {
565
- setTimeout(function ()
566
- {
567
- ret.node.style.opacity = incr * index;
568
- }, delay * (index + 1));
569
- })(i);
570
- }
571
- }
572
- }
573
-
574
- // Draw the title
575
- RG.drawTitle(
576
- this,
577
- prop['chart.title'],
578
- this.gutterTop,
579
- null,
580
- prop['chart.title.size']
581
- );
582
- };
583
-
584
-
585
-
586
-
587
- /**
588
- * Returns the focused bar
589
- *
590
- * @param event e The event object
591
- */
592
- this.getShape = function (e)
593
- {
594
- var mouseXY = RG.getMouseXY(e),
595
- mouseX = mouseXY[0],
596
- mouseY = mouseXY[1]
597
-
598
- // Draw the meter here but don't stroke or fill it
599
- // so that it can be tested with isPointInPath()
600
- pa2(
601
- co,
602
- 'b a % % % % % false a % % % % % true',
603
- this.coords[0][0], this.coords[0][1], this.coords[0][2], this.coords[0][3], this.coords[0][6],
604
- this.coords[0][0], this.coords[0][1], this.coords[0][2] - this.coords[0][5], this.coords[0][6], this.coords[0][3]
605
- );
606
-
607
-
608
-
609
- if (co.isPointInPath(mouseX, mouseY)) {
610
-
611
- return {
612
- object: this, 0: this,
613
- x: this.coords[0][0], 1: this.coords[0][0],
614
- y: this.coords[0][1], 2: this.coords[0][1],
615
- radius: this.coords[0][2], 3: this.coords[0][2],
616
- width: this.coords[0][5], 4: this.coords[0][5],
617
- start: this.coords[0][3], 5: this.coords[0][3],
618
- end: this.coords[0][6], 6: this.coords[0][6],
619
- index: 0,
620
- tooltip: !RG.isNull(prop['chart.tooltips']) ? prop['chart.tooltips'][0] : null
621
- };
622
- }
623
- };
624
-
625
-
626
-
627
-
628
- /**
629
- * This function returns the value that the mouse is positioned at, regardless of
630
- * the actual indicated value.
631
- *
632
- * @param object e The event object
633
- */
634
- this.getValue = function (e)
635
- {
636
- var mouseXY = RG.getMouseXY(e),
637
- mouseX = mouseXY[0],
638
- mouseY = mouseXY[1],
639
- angle = RG.getAngleByXY(
640
- this.centerx,
641
- this.centery,
642
- mouseX,
643
- mouseY
644
- );
645
-
646
- if (angle < prop['chart.angles.start'] && mouseX > this.centerx) { angle = prop['chart.angles.end']; }
647
- if (angle < prop['chart.angles.start']) { angle = prop['chart.angles.start']; }
648
-
649
- var value = (((angle - prop['chart.angles.start']) / (prop['chart.angles.end'] - prop['chart.angles.start'])) * (this.max - this.min)) + this.min;
650
-
651
- value = ma.max(value, this.min);
652
- value = ma.min(value, this.max);
653
-
654
- return value;
655
- };
656
-
657
-
658
-
659
-
660
- /**
661
- * Each object type has its own Highlight() function which highlights the appropriate shape
662
- *
663
- * @param object shape The shape to highlight
664
- */
665
- this.highlight =
666
- this.Highlight = function (shape)
667
- {
668
- if (typeof prop['chart.highlight.style'] === 'function') {
669
- (prop['chart.highlight.style'])(shape);
670
- } else {
671
- pa2(co, 'lw 5 b a % % % % % false a % % % % % true c s % f % lw 1',
672
- shape.x, shape.y, shape.radius, shape.start, shape.end,
673
- shape.x, shape.y, shape.radius - shape.width, shape.end, shape.start,
674
- prop['chart.highlight.stroke'],
675
- prop['chart.highlight.fill']
676
- );
677
- }
678
- };
679
-
680
-
681
-
682
-
683
- /**
684
- * The getObjectByXY() worker method. Don't call this call:
685
- *
686
- * RGraph.ObjectRegistry.getObjectByXY(e)
687
- *
688
- * @param object e The event object
689
- */
690
- this.getObjectByXY = function (e)
691
- {
692
- var mouseXY = RG.getMouseXY(e);
693
-
694
- if (
695
- mouseXY[0] > this.gutterLeft
696
- && mouseXY[0] < (ca.width - this.gutterRight)
697
- && mouseXY[1] >= this.gutterTop
698
- && mouseXY[1] <= (ca.height - this.gutterBottom)
699
- ) {
700
-
701
- return this;
702
- }
703
- };
704
-
705
-
706
-
707
-
708
- /**
709
- * This function allows the VProgress to be adjustable.
710
- * UPDATE: Not any more
711
- */
712
- this.allowAdjusting =
713
- this.AllowAdjusting = function () {};
714
-
715
-
716
-
717
-
718
- /**
719
- * This method handles the adjusting calculation for when the mouse is moved
720
- *
721
- * @param object e The event object
722
- */
723
- this.adjusting_mousemove =
724
- this.Adjusting_mousemove = function (e)
725
- {
726
- /**
727
- * Handle adjusting for the HProgress
728
- */
729
- if (prop['chart.adjustable'] && RG.Registry.Get('chart.adjusting') && RG.Registry.Get('chart.adjusting').uid == this.uid) {
730
-
731
- var value = this.getValue(e);
732
-
733
- if (typeof value === 'number') {
734
-
735
- // Fire the onadjust event
736
- RG.fireCustomEvent(this, 'onadjust');
737
-
738
- this.value = Number(value.toFixed(prop['chart.scale.decimals']));
739
- RG.redrawCanvas(this.canvas);
740
- }
741
- }
742
- };
743
-
744
-
745
-
746
-
747
- /**
748
- * This function positions a tooltip when it is displayed
749
- *
750
- * @param obj object The chart object
751
- * @param int x The X coordinate specified for the tooltip
752
- * @param int y The Y coordinate specified for the tooltip
753
- * @param objec tooltip The tooltips DIV element
754
- */
755
- this.positionTooltip = function (obj, x, y, tooltip, idx)
756
- {
757
- var coordX = obj.coords[tooltip.__index__][0],
758
- coordY = obj.coords[tooltip.__index__][1],
759
- coordW = obj.coords[tooltip.__index__][2],
760
- coordH = obj.coords[tooltip.__index__][3],
761
- canvasXY = RG.getCanvasXY(obj.canvas),
762
- mouseXY = RG.getMouseXY(window.event),
763
- gutterLeft = obj.gutterLeft,
764
- gutterTop = obj.gutterTop,
765
- width = tooltip.offsetWidth,
766
- height = tooltip.offsetHeight
767
- /*
768
- // Set the top position
769
- tooltip.style.left = 0;
770
- tooltip.style.top = window.event.pageY - height - 5 + 'px';
771
-
772
- // By default any overflow is hidden
773
- tooltip.style.overflow = '';
774
-
775
- // Reposition the tooltip if at the edges:
776
-
777
- // LEFT edge
778
- if (canvasXY[0] + mouseXY[0] - (width / 2) < 0) {
779
- tooltip.style.left = canvasXY[0] + mouseXY[0] - (width * 0.1) + 'px';
780
-
781
- // RIGHT edge
782
- } else if (canvasXY[0] + mouseXY[0] + (width / 2) > doc.body.offsetWidth) {
783
- tooltip.style.left = canvasXY[0] + mouseXY[0] - (width * 0.9) + 'px';
784
-
785
- // Default positioning - CENTERED
786
- } else {
787
- tooltip.style.left = canvasXY[0] + mouseXY[0] - (width / 2) + 'px';
788
- }
789
- */
790
- };
791
-
792
-
793
-
794
-
795
- /**
796
- * This function returns the appropriate angle (in radians) for the given
797
- * Y value
798
- *
799
- * @param int value The Y value you want the angle for
800
- * @returm int The angle
801
- */
802
- this.getAngle = function (value)
803
- {
804
- if (value > this.max || value < this.min) {
805
- return null;
806
- }
807
-
808
- var angle = (value / this.max) * (prop['chart.angles.end'] - prop['chart.angles.start'])
809
- angle += prop['chart.angles.start'];
810
-
811
- return angle;
812
- };
813
-
814
-
815
-
816
-
817
- /**
818
- * This returns true/false as to whether the cursor is over the chart area.
819
- * The cursor does not necessarily have to be over the bar itself.
820
- */
821
- this.overChartArea = function (e)
822
- {
823
- var mouseXY = RGraph.getMouseXY(e),
824
- mouseX = mouseXY[0],
825
- mouseY = mouseXY[1]
826
-
827
- // Draw the background to the Progress but don't stroke or fill it
828
- // so that it can be tested with isPointInPath()
829
- pa2(
830
- co,
831
- 'b a % % % % % false a % % % % % true',
832
- this.coords[0][0], this.coords[0][1], this.coords[0][2], prop['chart.angles.start'], prop['chart.angles.end'],
833
- this.coords[0][0], this.coords[0][1], this.coords[0][2] - this.coords[0][5], prop['chart.angles.end'], prop['chart.angles.start']
834
- );
835
-
836
- return co.isPointInPath(mouseX, mouseY);
837
- };
838
-
839
-
840
-
841
-
842
- /**
843
- *
844
- */
845
- this.parseColors = function ()
846
- {
847
- // Save the original colors so that they can be restored when the canvas is reset
848
- if (this.original_colors.length === 0) {
849
- this.original_colors['chart.colors'] = RG.arrayClone(prop['chart.colors']);
850
- }
851
-
852
- prop['chart.colors'][0] = this.parseSingleColorForGradient(prop['chart.colors'][0]);
853
- };
854
-
855
-
856
-
857
-
858
- /**
859
- * Use this function to reset the object to the post-constructor state. Eg reset colors if
860
- * need be etc
861
- */
862
- this.reset = function ()
863
- {
864
- };
865
-
866
-
867
-
868
-
869
- /**
870
- * This parses a single color value
871
- */
872
- this.parseSingleColorForGradient = function (color)
873
- {
874
- if (!color || typeof color != 'string') {
875
- return color;
876
- }
877
-
878
- if (color.match(/^gradient\((.*)\)$/i)) {
879
- var parts = RegExp.$1.split(':');
880
-
881
- // Create the gradient
882
- var grad = co.createLinearGradient(prop['chart.gutter.left'],0,ca.width - prop['chart.gutter.right'],0);
883
-
884
- var diff = 1 / (parts.length - 1);
885
-
886
- grad.addColorStop(0, RG.trim(parts[0]));
887
-
888
- for (var j=1,len=parts.length; j<len; ++j) {
889
- grad.addColorStop(j * diff, RG.trim(parts[j]));
890
- }
891
-
892
- return grad ? grad : color;
893
- }
894
-
895
- return grad ? grad : color;
896
- };
897
-
898
-
899
-
900
-
901
- /**
902
- * Using a function to add events makes it easier to facilitate method chaining
903
- *
904
- * @param string type The type of even to add
905
- * @param function func
906
- */
907
- this.on = function (type, func)
908
- {
909
- if (type.substr(0,2) !== 'on') {
910
- type = 'on' + type;
911
- }
912
-
913
- this[type] = func;
914
-
915
- return this;
916
- };
917
-
918
-
919
-
920
-
921
- /**
922
- * Used in chaining. Runs a function there and then - not waiting for
923
- * the events to fire (eg the onbeforedraw event)
924
- *
925
- * @param function func The function to execute
926
- */
927
- this.exec = function (func)
928
- {
929
- func(this);
930
-
931
- return this;
932
- };
933
-
934
-
935
-
936
-
937
- /**
938
- * This function runs once only
939
- * (put at the end of the file (before any effects))
940
- */
941
- this.firstDrawFunc = function ()
942
- {
943
- };
944
-
945
-
946
-
947
-
948
- /**
949
- * HProgress Grow effect (which is also the VPogress Grow effect)
950
- *
951
- * @param object obj The chart object
952
- */
953
- this.grow = function ()
954
- {
955
-
956
- var obj = this,
957
- initial_value = this.currentValue,
958
- opt = arguments[0] || {},
959
- numFrames = opt.frames || 30,
960
- frame = 0,
961
- callback = arguments[1] || function () {},
962
- diff = this.value - Number(this.currentValue),
963
- increment = diff / numFrames
964
-
965
- if (prop['chart.labels.center']) {
966
- var labelsCenter = true;
967
- this.set('labelsCenter', false);
968
- }
969
-
970
-
971
-
972
- function iterator ()
973
- {
974
- frame++;
975
-
976
- if (frame <= numFrames) {
977
-
978
- obj.value = initial_value + (increment * frame);
979
-
980
- RG.clear(ca);
981
- RG.redrawCanvas(ca);
982
-
983
- RG.Effects.updateCanvas(iterator);
984
- } else {
985
- if (labelsCenter) {
986
- obj.set('labelsCenter', true);
987
- RG.redrawCanvas(ca);
988
- }
989
- callback();
990
- }
991
- }
992
-
993
- iterator();
994
-
995
- return this;
996
- };
997
-
998
-
999
-
1000
- /**
1001
- * The chart is now always registered
1002
- */
1003
- RG.Register(this);
1004
-
1005
-
1006
-
1007
-
1008
- /**
1009
- * This is the 'end' of the constructor so if the first argument
1010
- * contains configuration data - handle that.
1011
- */
1012
- if (parseConfObjectForOptions) {
1013
- RG.parseObjectStyleConfig(this, conf.options);
1014
- }
1015
- };