rgraph-rails 1.0.7 → 1.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -3
  3. data/lib/rgraph-rails/version.rb +1 -1
  4. data/license.txt +4 -16
  5. data/vendor/assets/javascripts/RGraph.bar.js +3734 -241
  6. data/vendor/assets/javascripts/RGraph.bipolar.js +2005 -115
  7. data/vendor/assets/javascripts/RGraph.common.annotate.js +395 -35
  8. data/vendor/assets/javascripts/RGraph.common.context.js +595 -30
  9. data/vendor/assets/javascripts/RGraph.common.core.js +5282 -405
  10. data/vendor/assets/javascripts/RGraph.common.csv.js +276 -19
  11. data/vendor/assets/javascripts/RGraph.common.deprecated.js +450 -35
  12. data/vendor/assets/javascripts/RGraph.common.dynamic.js +1395 -86
  13. data/vendor/assets/javascripts/RGraph.common.effects.js +1545 -90
  14. data/vendor/assets/javascripts/RGraph.common.key.js +753 -54
  15. data/vendor/assets/javascripts/RGraph.common.resizing.js +563 -37
  16. data/vendor/assets/javascripts/RGraph.common.sheets.js +352 -29
  17. data/vendor/assets/javascripts/RGraph.common.tooltips.js +450 -32
  18. data/vendor/assets/javascripts/RGraph.common.zoom.js +219 -14
  19. data/vendor/assets/javascripts/RGraph.drawing.background.js +570 -35
  20. data/vendor/assets/javascripts/RGraph.drawing.circle.js +544 -35
  21. data/vendor/assets/javascripts/RGraph.drawing.image.js +755 -52
  22. data/vendor/assets/javascripts/RGraph.drawing.marker1.js +645 -41
  23. data/vendor/assets/javascripts/RGraph.drawing.marker2.js +633 -37
  24. data/vendor/assets/javascripts/RGraph.drawing.marker3.js +514 -36
  25. data/vendor/assets/javascripts/RGraph.drawing.poly.js +559 -39
  26. data/vendor/assets/javascripts/RGraph.drawing.rect.js +548 -35
  27. data/vendor/assets/javascripts/RGraph.drawing.text.js +664 -36
  28. data/vendor/assets/javascripts/RGraph.drawing.xaxis.js +812 -50
  29. data/vendor/assets/javascripts/RGraph.drawing.yaxis.js +856 -51
  30. data/vendor/assets/javascripts/RGraph.fuel.js +964 -58
  31. data/vendor/assets/javascripts/RGraph.funnel.js +984 -55
  32. data/vendor/assets/javascripts/RGraph.gantt.js +1354 -77
  33. data/vendor/assets/javascripts/RGraph.gauge.js +1421 -87
  34. data/vendor/assets/javascripts/RGraph.hbar.js +2562 -146
  35. data/vendor/assets/javascripts/RGraph.hprogress.js +1401 -80
  36. data/vendor/assets/javascripts/RGraph.line.js +4226 -244
  37. data/vendor/assets/javascripts/RGraph.meter.js +1280 -74
  38. data/vendor/assets/javascripts/RGraph.modaldialog.js +301 -19
  39. data/vendor/assets/javascripts/RGraph.odo.js +1264 -71
  40. data/vendor/assets/javascripts/RGraph.pie.js +2288 -137
  41. data/vendor/assets/javascripts/RGraph.radar.js +1847 -110
  42. data/vendor/assets/javascripts/RGraph.rose.js +1977 -108
  43. data/vendor/assets/javascripts/RGraph.rscatter.js +1432 -80
  44. data/vendor/assets/javascripts/RGraph.scatter.js +3036 -168
  45. data/vendor/assets/javascripts/RGraph.semicircularprogress.js +1120 -60
  46. data/vendor/assets/javascripts/RGraph.svg.bar.js +1067 -0
  47. data/vendor/assets/javascripts/RGraph.svg.common.ajax.js +247 -0
  48. data/vendor/assets/javascripts/RGraph.svg.common.core.js +3363 -0
  49. data/vendor/assets/javascripts/RGraph.svg.common.csv.js +277 -0
  50. data/vendor/assets/javascripts/RGraph.svg.common.fx.js +1304 -0
  51. data/vendor/assets/javascripts/RGraph.svg.common.sheets.js +353 -0
  52. data/vendor/assets/javascripts/RGraph.svg.common.tooltips.js +233 -0
  53. data/vendor/assets/javascripts/RGraph.svg.hbar.js +1141 -0
  54. data/vendor/assets/javascripts/RGraph.svg.line.js +1486 -0
  55. data/vendor/assets/javascripts/RGraph.svg.pie.js +781 -0
  56. data/vendor/assets/javascripts/RGraph.svg.radar.js +1326 -0
  57. data/vendor/assets/javascripts/RGraph.svg.semicircularprogress.js +817 -0
  58. data/vendor/assets/javascripts/RGraph.thermometer.js +1135 -62
  59. data/vendor/assets/javascripts/RGraph.vprogress.js +1470 -83
  60. data/vendor/assets/javascripts/RGraph.waterfall.js +1347 -80
  61. metadata +15 -3
@@ -1,38 +1,564 @@
1
+ // version: 2017-01-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 licensed under the Open Source MIT license. That means that it's |
9
+ * | totally free to use! |
10
+ * o--------------------------------------------------------------------------------o
11
+ */
1
12
 
2
- RGraph=window.RGraph||{isRGraph:true};(function(win,doc,undefined)
3
- {var RG=RGraph,ua=navigator.userAgent,ma=Math,active=null;RGraph.allowResizing=RGraph.AllowResizing=function(obj)
4
- {var ca=obj.canvas,co=obj.context,pa2=RG.path2;ca.resizing=ca.resizing||{};ca.resizing.placeHolders=ca.resizing.placeHolders||[];if(!ca.resizing.originalw){ca.resizing.originalw=ca.width;}
5
- if(!ca.resizing.originalh){ca.resizing.originalh=ca.height;}
6
- var resizeHandleSize=15;if(!ca.resizing.__rgraph_original_width__||!ca.resizing.__rgraph_original_height__||!ca.resizing.__adjustX||!ca.resizing.__adjustY){ca.resizing.__rgraph_original_width__=ca.width;ca.resizing.__rgraph_original_height__=ca.height;ca.resizing.adjustX=(typeof obj.get('chart.resize.handle.adjust')=='object'&&typeof obj.get('chart.resize.handle.adjust')[0]=='number'?obj.Get('chart.resize.handle.adjust')[0]:0);ca.resizing.adjustY=(typeof obj.get('chart.resize.handle.adjust')=='object'&&typeof obj.get('chart.resize.handle.adjust')[1]=='number'?obj.Get('chart.resize.handle.adjust')[1]:0);ca.resizing.bgcolor=obj.get('chart.resize.handle.background')||'rgba(0,0,0,0)';}
7
- pa2(co,'b m % % r % % % % f %',ca.width-resizeHandleSize-resizeHandleSize+ca.resizing.adjustX,ca.height-resizeHandleSize,ca.width-resizeHandleSize-resizeHandleSize+ca.resizing.adjustX,ca.height-resizeHandleSize+ca.resizing.adjustY,2*resizeHandleSize,resizeHandleSize,ca.resizing.bgcolor);pa2(co,'b lw 1 m % % l % % m % % l % % s gray f transparent',ma.round(ca.width-(resizeHandleSize/2)+ca.resizing.adjustX),ca.height-resizeHandleSize+ca.resizing.adjustY,ma.round(ca.width-(resizeHandleSize/2)+ca.resizing.adjustX),ca.height+ca.resizing.adjustY,ca.width+ca.resizing.adjustX,ma.round(ca.height-(resizeHandleSize/2)+ca.resizing.adjustY),ca.width-resizeHandleSize+ca.resizing.adjustX,ma.round(ca.height-(resizeHandleSize/2)+ca.resizing.adjustY));pa2(co,['b','m',ca.width-(resizeHandleSize/2)+ca.resizing.adjustX,ca.height-resizeHandleSize+ca.resizing.adjustY,'l',ca.width-(resizeHandleSize/2)+3+ca.resizing.adjustX,ca.height-resizeHandleSize+3+ca.resizing.adjustY,'l',ca.width-(resizeHandleSize/2)-3+ca.resizing.adjustX,ca.height-resizeHandleSize+3+ca.resizing.adjustY,'c','f','gray']);pa2(co,['b','m',ca.width-(resizeHandleSize/2)+ca.resizing.adjustX,ca.height+ca.resizing.adjustY,'l',ca.width-(resizeHandleSize/2)+3+ca.resizing.adjustX,ca.height-3+ca.resizing.adjustY,'l',ca.width-(resizeHandleSize/2)-3+ca.resizing.adjustX,ca.height-3+ca.resizing.adjustY,'c','f','gray']);pa2(co,['b','m',ca.width-resizeHandleSize+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)+ca.resizing.adjustY,'l',ca.width-resizeHandleSize+3+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)+3+ca.resizing.adjustY,'l',ca.width-resizeHandleSize+3+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)-3+ca.resizing.adjustY,'c','f','gray']);pa2(co,['b','m',ca.width+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)+ca.resizing.adjustY,'l',ca.width-3+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)+3+ca.resizing.adjustY,'l',ca.width-3+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)-3+ca.resizing.adjustY,'c','f','gray']);pa2(co,['b','m',ca.width+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)+ca.resizing.adjustY,'r',ca.width-(resizeHandleSize/2)-2+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)-2+ca.resizing.adjustY,4,4,'r',ca.width-(resizeHandleSize/2)-2+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)-2+ca.resizing.adjustY,4,4,'s','gray','f','white']);pa2(co,['b','m',ma.round(ca.width-resizeHandleSize-3+ca.resizing.adjustX),ca.height-resizeHandleSize/2+ca.resizing.adjustY,'l',ma.round(ca.width-resizeHandleSize-resizeHandleSize+ca.resizing.adjustX),ca.height-(resizeHandleSize/2)+ca.resizing.adjustY,'l',ca.width-resizeHandleSize-resizeHandleSize+2+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)-2+ca.resizing.adjustY,'l',ca.width-resizeHandleSize-resizeHandleSize+2+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)+2+ca.resizing.adjustY,'l',ca.width-resizeHandleSize-resizeHandleSize+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)+ca.resizing.adjustY,'s','gray','f','gray']);pa2(co,['b','m',ma.round(ca.width-resizeHandleSize-resizeHandleSize-1+ca.resizing.adjustX),ca.height-(resizeHandleSize/2)-3+ca.resizing.adjustY,'l',ma.round(ca.width-resizeHandleSize-resizeHandleSize-1+ca.resizing.adjustX),ca.height-(resizeHandleSize/2)+3+ca.resizing.adjustY,'s','f']);if(obj.get('chart.resizable')&&!ca.rgraphResizewrapper){ca.rgraphResizewrapper=$('<div id="rgraph_resize_container_'+ca.id+'"></div>').css({'float':ca.style.cssFloat,position:'relative'}).get(0);$(ca).wrap(ca.rgraphResizewrapper);ca.style.cssFloat='none';ca.style.top=0;ca.style.left=0;var window_onmousemove=function(e)
8
- {var ca=active,obj=ca?ca.__object__:null;if(ca){e=RG.fixEventObject(e);if(ca.resizing.mousedown){var newWidth=ca.width+(e.pageX-ca.resizing.originalx);var newHeight=ca.height+(e.pageY-ca.resizing.originaly);if(newWidth>(ca.resizing.originalw/2)&&(typeof obj.get('resizableMaxwidth')==='number'?newWidth<obj.get('resizableMaxwidth'):true)){ca.resizing.div.style.width=newWidth+'px';}
9
- if(newHeight>(ca.resizing.originalh/2)&&(typeof obj.get('resizableMaxheight')==='number'?newHeight<obj.get('resizableMaxheight'):true)){ca.resizing.div.style.height=newHeight+'px';}
10
- RG.fireCustomEvent(ca.__object__,'onresize');}}}
11
- if(typeof ca.rgraph_resize_window_mousemove_listener_installed!='boolean'){window.addEventListener('mousemove',window_onmousemove,false);ca.rgraph_resize_window_mousemove_listener_installed=true;}
12
- var MouseupFunc=function(e)
13
- {if(!ca.resizing||!ca.resizing.div||!ca.resizing.mousedown){return;}
14
- if(ca.resizing.div){var div=ca.resizing.div;var coords=RG.getCanvasXY(ca);var parentNode=ca.parentNode;if(ca.style.position!='absolute'){var placeHolderDIV=document.createElement('DIV');placeHolderDIV.style.width=ca.resizing.originalw+'px';placeHolderDIV.style.height=ca.resizing.originalh+'px';placeHolderDIV.style.display='inline-block';placeHolderDIV.style.position=ca.style.position;placeHolderDIV.style.left=ca.style.left;placeHolderDIV.style.top=ca.style.top;placeHolderDIV.style.cssFloat=ca.style.cssFloat;parentNode.insertBefore(placeHolderDIV,ca);}
15
- ca.style.backgroundColor='white';ca.style.position='absolute';ca.style.border='1px dashed gray';ca.style.boxShadow='2px 2px 5px #ddd';ca.style.left=0;ca.style.top=0;ca.width=parseInt(div.style.width);ca.height=parseInt(div.style.height);ca.getContext('2d').translate(0.5,0.5);var objects=RG.ObjectRegistry.getObjectsByCanvasID(ca.id);for(var i=0,len=objects.length;i<len;i+=1){RG.resetColorsToOriginalValues(objects[i]);if(typeof objects[i].reset==='function'){objects[i].reset();}}
16
- RG.cache=[];RG.fireCustomEvent(ca.__object__,'onresizebeforedraw');RG.redrawCanvas(ca);ca.resizing.mousedown=false;div.style.display='none';document.body.removeChild(div);}
17
- if(RG.Registry.Get('chart.zoomed.div')||RGraph.Registry.Get('chart.zoomed.img')){RG.Registry.Set('chart.zoomed.div',null);RG.Registry.Set('chart.zoomed.img',null);}
18
- RG.FireCustomEvent(ca.__object__,'onresizeend');};var window_onmouseup=MouseupFunc;if(typeof ca.rgraph_resize_window_mouseup_listener_installed!='boolean'){window.addEventListener('mouseup',window_onmouseup,false);ca.rgraph_resize_window_mouseup_listener_installed=true;}
19
- var canvas_onmousemove=function(e)
20
- {e=RG.fixEventObject(e);var coords=RG.getMouseXY(e);var obj=e.target.__object__;var ca=e.target;var co=ca.getContext('2d');var cursor=ca.style.cursor;if(!ca.resizing.original_cursor){ca.resizing.original_cursor=cursor;}
21
- if((coords[0]>(ca.width-resizeHandleSize)&&coords[0]<ca.width&&coords[1]>(ca.height-resizeHandleSize)&&coords[1]<ca.height)){ca.style.cursor='move';}else if(coords[0]>(ca.width-resizeHandleSize-resizeHandleSize)&&coords[0]<ca.width-resizeHandleSize&&coords[1]>(ca.height-resizeHandleSize)&&coords[1]<ca.height){ca.style.cursor='pointer';}else{if(ca.resizing.original_cursor){ca.style.cursor=ca.resizing.original_cursor;ca.resizing.original_cursor=null;}else{ca.style.cursor='default';}}};if(typeof ca.rgraph_resize_mousemove_listener_installed!='boolean'){ca.addEventListener('mousemove',canvas_onmousemove,false);ca.rgraph_resize_mousemove_listener_installed=true;}
22
- var canvas_onmouseout=function(e)
23
- {e.target.style.cursor='default';e.target.title='';};if(typeof ca.rgraph_resize_mouseout_listener_installed!='boolean'){ca.addEventListener('mouseout',canvas_onmouseout,false);ca.rgraph_resize_mouseout_listener_installed=true;}
24
- var canvas_onmousedown=function(e)
25
- {e=RG.fixEventObject(e);var coords=RG.getMouseXY(e);var canvasXY=RG.getCanvasXY(e.target);var ca=e.target;active=ca;if(coords[0]>(ca.width-resizeHandleSize)&&coords[0]<ca.width&&coords[1]>(ca.height-resizeHandleSize)&&coords[1]<ca.height){RG.fireCustomEvent(obj,'onresizebegin');if(ca.resizing.original_css_border==null){ca.resizing.original_css_border=ca.style.border;}
26
- if(ca.resizing.original_css_shadow==null){ca.resizing.original_css_shadow=ca.style.boxShadow;}
27
- ca.resizing.mousedown=true;var div=document.createElement('DIV');div.style.position='absolute';div.style.left=canvasXY[0]+'px';div.style.top=canvasXY[1]+'px';div.style.width=ca.width+'px';div.style.height=ca.height+'px';div.style.border='1px dotted black';div.style.backgroundColor='gray';div.style.opacity=0.5;div.__canvas__=e.target;document.body.appendChild(div);ca.resizing.div=div;ca.resizing.placeHolders.push(div);for(var i=0;i<(ca.resizing.placeHolders.length-1);++i){ca.resizing.placeHolders[i].style.display='none';}
28
- div.onmouseup=function(e)
29
- {MouseupFunc(e);}
30
- ca.resizing.div.onmouseover=function(e)
31
- {e=RG.fixEventObject(e);e.stopPropagation();}
32
- ca.resizing.originalx=e.pageX;ca.resizing.originaly=e.pageY;ca.resizing.originalCanvasX=RG.getCanvasXY(ca)[0];ca.resizing.originalCanvasY=RG.getCanvasXY(ca)[1];}
33
- if(coords[0]>(ca.width-resizeHandleSize-resizeHandleSize)&&coords[0]<ca.width-resizeHandleSize&&coords[1]>(ca.height-resizeHandleSize)&&coords[1]<ca.height&&ca.resizing.originalw&&ca.resizing.originaly){RG.fireCustomEvent(ca.__object__,'onresizebegin');ca.width=ca.resizing.originalw;ca.height=ca.resizing.originalh;if(ca.__link__&&ca.__link__.style.display==='none'){ca.__link__.style.display='inline';}
34
- if(typeof ca.parentNode.id==='string'&&ca.parentNode.id.substring(0,24)==='rgraph_resize_container_'){ca.parentNode.style.width=ca.resizing.originalw+'px';ca.parentNode.style.height=ca.resizing.originalh+'px';}
35
- ca.style.border=ca.resizing.original_css_border;ca.style.boxShadow=ca.resizing.original_css_shadow;ca.style.left=(parseInt(ca.style.left))+'px';ca.style.top=(parseInt(ca.style.top))+'px';ca.getContext('2d').translate(0.5,0.5);RG.fireCustomEvent(ca.__object__,'onresizebeforedraw');var objects=RG.ObjectRegistry.getObjectsByCanvasID(ca.id);for(var i=0;i<objects.length;i+=1){RG.resetColorsToOriginalValues(objects[i]);if(objects[i].reset){objects[i].reset();}
36
- RG.redrawCanvas(objects[i].canvas);}
37
- RG.cache=[];if(ca.resizing.div){ca.resizing.div.style.width=ca.__original_width__+'px';ca.resizing.div.style.height=ca.__original_height__+'px';}
38
- RG.fireCustomEvent(ca.__object__,'onresize');RG.fireCustomEvent(ca.__object__,'onresizeend');}};if(typeof ca.rgraph_resize_mousedown_listener_installed!='boolean'){ca.addEventListener('mousedown',canvas_onmousedown,false);ca.rgraph_resize_mousedown_listener_installed=true;}}};})(window,document);
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
+ active = null;
22
+
23
+
24
+ /**
25
+ * This function can be used to allow resizing
26
+ *
27
+ * @param object obj Your graph object
28
+ */
29
+ RGraph.allowResizing =
30
+ RGraph.AllowResizing = function (obj)
31
+ {
32
+ var ca = obj.canvas,
33
+ co = obj.context,
34
+ pa2 = RG.path2;
35
+
36
+ ca.resizing = ca.resizing || {};
37
+ ca.resizing.placeHolders = ca.resizing.placeHolders || [];
38
+
39
+ /**
40
+ * Store the original width/height on the canvas
41
+ */
42
+ if (!ca.resizing.originalw) { ca.resizing.originalw = ca.width; }
43
+ if (!ca.resizing.originalh) { ca.resizing.originalh = ca.height; }
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+ // The size of the resize handle (so '15' isn't littered throughout the code)
58
+ var resizeHandleSize = 15;
59
+
60
+
61
+ // Add the original width and height to the canvas
62
+ if ( !ca.resizing.__rgraph_original_width__
63
+ || !ca.resizing.__rgraph_original_height__
64
+ || !ca.resizing.__adjustX
65
+ || !ca.resizing.__adjustY
66
+ ) {
67
+
68
+ ca.resizing.__rgraph_original_width__ = ca.width;
69
+ ca.resizing.__rgraph_original_height__ = ca.height;
70
+ ca.resizing.adjustX = (typeof obj.get('chart.resize.handle.adjust') == 'object' && typeof obj.get('chart.resize.handle.adjust')[0] == 'number' ? obj.Get('chart.resize.handle.adjust')[0] : 0);
71
+ ca.resizing.adjustY = (typeof obj.get('chart.resize.handle.adjust') == 'object' && typeof obj.get('chart.resize.handle.adjust')[1] == 'number' ? obj.Get('chart.resize.handle.adjust')[1] : 0);
72
+ ca.resizing.bgcolor = obj.get('chart.resize.handle.background') || 'rgba(0,0,0,0)';
73
+ }
74
+
75
+
76
+
77
+
78
+ // Draw the resize handle
79
+ pa2(co,
80
+ 'b m % % r % % % % f %',
81
+ ca.width - resizeHandleSize - resizeHandleSize + ca.resizing.adjustX, ca.height - resizeHandleSize,
82
+ ca.width - resizeHandleSize - resizeHandleSize + ca.resizing.adjustX, ca.height - resizeHandleSize + ca.resizing.adjustY, 2 * resizeHandleSize, resizeHandleSize,
83
+ ca.resizing.bgcolor
84
+ );
85
+
86
+ // Draw the arrows
87
+ pa2(co,
88
+ 'b lw 1 m % % l % % m % % l % % s gray f transparent',
89
+ ma.round(ca.width - (resizeHandleSize / 2) + ca.resizing.adjustX), ca.height - resizeHandleSize + ca.resizing.adjustY,
90
+ ma.round(ca.width - (resizeHandleSize / 2) + ca.resizing.adjustX), ca.height + ca.resizing.adjustY,
91
+ ca.width + ca.resizing.adjustX, ma.round(ca.height - (resizeHandleSize / 2) + ca.resizing.adjustY),
92
+ ca.width - resizeHandleSize + ca.resizing.adjustX, ma.round(ca.height - (resizeHandleSize / 2) + ca.resizing.adjustY)
93
+ );
94
+
95
+ // Top arrow head
96
+ pa2(co, [ 'b', 'm', ca.width - (resizeHandleSize / 2) + ca.resizing.adjustX, ca.height - resizeHandleSize + ca.resizing.adjustY, 'l',ca.width - (resizeHandleSize / 2) + 3 + ca.resizing.adjustX, ca.height - resizeHandleSize + 3 + ca.resizing.adjustY, 'l',ca.width - (resizeHandleSize / 2) - 3 + ca.resizing.adjustX, ca.height - resizeHandleSize + 3 + ca.resizing.adjustY, 'c', 'f','gray']);
97
+
98
+ // Bottom arrow head
99
+ pa2(co, ['b','m', ca.width - (resizeHandleSize / 2) + ca.resizing.adjustX, ca.height + ca.resizing.adjustY,'l', ca.width - (resizeHandleSize / 2) + 3 + ca.resizing.adjustX, ca.height - 3 + ca.resizing.adjustY,'l', ca.width - (resizeHandleSize / 2) - 3 + ca.resizing.adjustX, ca.height - 3 + ca.resizing.adjustY,'c','f', 'gray']);
100
+
101
+ // Left arrow head
102
+ pa2(co, ['b','m', ca.width - resizeHandleSize + ca.resizing.adjustX, ca.height - (resizeHandleSize / 2) + ca.resizing.adjustY,'l', ca.width - resizeHandleSize + 3 + ca.resizing.adjustX, ca.height - (resizeHandleSize / 2) + 3 + ca.resizing.adjustY,'l', ca.width - resizeHandleSize + 3 + ca.resizing.adjustX, ca.height - (resizeHandleSize / 2) - 3 + ca.resizing.adjustY,'c','f', 'gray']);
103
+
104
+ // Right arrow head
105
+ pa2(co, ['b','m',ca.width + ca.resizing.adjustX, ca.height - (resizeHandleSize / 2) + ca.resizing.adjustY,'l',ca.width - 3 + ca.resizing.adjustX, ca.height - (resizeHandleSize / 2) + 3 + ca.resizing.adjustY,'l',ca.width - 3 + ca.resizing.adjustX, ca.height - (resizeHandleSize / 2) - 3 + ca.resizing.adjustY,'c','f', 'gray']);
106
+
107
+ // Square at the centre of the arrows
108
+ pa2(co, ['b','m',ca.width + ca.resizing.adjustX, ca.height - (resizeHandleSize / 2) + ca.resizing.adjustY,'r',ca.width - (resizeHandleSize / 2) - 2 + ca.resizing.adjustX, ca.height - (resizeHandleSize / 2) - 2 + ca.resizing.adjustY, 4, 4,'r',ca.width - (resizeHandleSize / 2) - 2 + ca.resizing.adjustX, ca.height - (resizeHandleSize / 2) - 2 + ca.resizing.adjustY, 4, 4,'s','gray','f','white']);
109
+
110
+ // Draw the "Reset" button
111
+ pa2(co, ['b','m',ma.round(ca.width - resizeHandleSize - 3 + ca.resizing.adjustX), ca.height - resizeHandleSize / 2 + ca.resizing.adjustY,'l',ma.round(ca.width - resizeHandleSize - resizeHandleSize + ca.resizing.adjustX), ca.height - (resizeHandleSize / 2) + ca.resizing.adjustY,'l',ca.width - resizeHandleSize - resizeHandleSize + 2 + ca.resizing.adjustX, ca.height - (resizeHandleSize / 2) - 2 + ca.resizing.adjustY,'l',ca.width - resizeHandleSize - resizeHandleSize + 2 + ca.resizing.adjustX, ca.height - (resizeHandleSize / 2) + 2 + ca.resizing.adjustY,'l',ca.width - resizeHandleSize - resizeHandleSize + ca.resizing.adjustX, ca.height - (resizeHandleSize / 2) + ca.resizing.adjustY,'s','gray','f','gray']);
112
+
113
+ // The vertical line at the end of the reset button
114
+ pa2(co, ['b','m', ma.round(ca.width - resizeHandleSize - resizeHandleSize - 1 + ca.resizing.adjustX), ca.height - (resizeHandleSize / 2) - 3 + ca.resizing.adjustY,'l', ma.round(ca.width - resizeHandleSize - resizeHandleSize - 1 + ca.resizing.adjustX), ca.height - (resizeHandleSize / 2) + 3 + ca.resizing.adjustY,'s','f']);
115
+
116
+
117
+
118
+
119
+
120
+
121
+
122
+ /**
123
+ * The code inside this if() condition only runs once due to the if() condition tests- if
124
+ * the obj.rgraphResizewrapper variable exists then the code has run
125
+ */
126
+ if (obj.get('chart.resizable') && !ca.rgraphResizewrapper) {
127
+
128
+
129
+
130
+ // ** TODO ** Needs fixing
131
+ //
132
+ //
133
+ // Wrap the canvas
134
+ // ** NEEDS FIXING **
135
+ //
136
+ ca.rgraphResizewrapper = $('<div id="rgraph_resize_container_' + ca.id +'"></div>').css({
137
+ 'float': ca.style.cssFloat,
138
+ position: 'relative'
139
+ }).get(0);
140
+
141
+ $(ca).wrap(ca.rgraphResizewrapper);
142
+
143
+ // TODO Might need to add more properties here (eg margin, padding etc)
144
+ ca.style.cssFloat = 'none';
145
+ ca.style.top = 0;
146
+ ca.style.left = 0;
147
+
148
+
149
+
150
+ var window_onmousemove = function (e)
151
+ {
152
+ var ca = active,
153
+ obj = ca ? ca.__object__ : null;
154
+
155
+ if (ca) {
156
+
157
+ e = RG.fixEventObject(e);
158
+
159
+ if (ca.resizing.mousedown) {
160
+
161
+ var newWidth = ca.width + (e.pageX - ca.resizing.originalx);
162
+ var newHeight = ca.height + (e.pageY - ca.resizing.originaly);
163
+
164
+ if ( newWidth > (ca.resizing.originalw / 2)
165
+ && (typeof obj.get('resizableMaxwidth') === 'number' ? newWidth < obj.get('resizableMaxwidth') : true)
166
+ ) {
167
+ ca.resizing.div.style.width = newWidth + 'px';
168
+ }
169
+
170
+ if (newHeight > (ca.resizing.originalh / 2) && (typeof obj.get('resizableMaxheight') === 'number' ? newHeight < obj.get('resizableMaxheight') : true) ) {
171
+ ca.resizing.div.style.height = newHeight + 'px';
172
+ }
173
+
174
+ RG.fireCustomEvent(ca.__object__, 'onresize');
175
+ }
176
+ }
177
+ }
178
+
179
+
180
+
181
+ // Install the function as an event listener - but only once
182
+ if (typeof ca.rgraph_resize_window_mousemove_listener_installed != 'boolean') {
183
+ window.addEventListener('mousemove', window_onmousemove, false);
184
+ ca.rgraph_resize_window_mousemove_listener_installed = true;
185
+ }
186
+
187
+ // The window onmouseup function
188
+ var MouseupFunc = function (e)
189
+ {
190
+ if (!ca.resizing || !ca.resizing.div || !ca.resizing.mousedown) {
191
+ return;
192
+ }
193
+
194
+ if (ca.resizing.div) {
195
+
196
+ var div = ca.resizing.div;
197
+ var coords = RG.getCanvasXY(ca);
198
+
199
+ var parentNode = ca.parentNode;
200
+
201
+ if (ca.style.position != 'absolute') {
202
+
203
+ // Create a DIV to go in the canvases place
204
+ var placeHolderDIV = document.createElement('DIV');
205
+ placeHolderDIV.style.width = ca.resizing.originalw + 'px';
206
+ placeHolderDIV.style.height = ca.resizing.originalh + 'px';
207
+
208
+ placeHolderDIV.style.display = 'inline-block'; // Added 5th Nov 2010
209
+ placeHolderDIV.style.position = ca.style.position;
210
+ placeHolderDIV.style.left = ca.style.left;
211
+ placeHolderDIV.style.top = ca.style.top;
212
+ placeHolderDIV.style.cssFloat = ca.style.cssFloat;
213
+
214
+ parentNode.insertBefore(placeHolderDIV, ca);
215
+ }
216
+
217
+
218
+ // Now set the canvas to be positioned absolutely
219
+ ca.style.backgroundColor = 'white';
220
+ ca.style.position = 'absolute';
221
+ ca.style.border = '1px dashed gray';
222
+ ca.style.boxShadow = '2px 2px 5px #ddd';
223
+
224
+
225
+ ca.style.left = 0;//(ca.resizing.originalCanvasX - 2) + 'px';
226
+ ca.style.top = 0;//(ca.resizing.originalCanvasY - 2) + 'px';
227
+
228
+
229
+ // Set the dimensions of the canvas using the HTML attributes
230
+ ca.width = parseInt(div.style.width);
231
+ ca.height = parseInt(div.style.height);
232
+
233
+
234
+
235
+
236
+ // Because resizing the canvas resets any tranformation - the antialias fix needs to be reapplied.
237
+ ca.getContext('2d').translate(0.5,0.5);
238
+
239
+
240
+
241
+ // Reset the gradient parsing status by setting all of the color values back to their original
242
+ // values before Draw was first called
243
+ var objects = RG.ObjectRegistry.getObjectsByCanvasID(ca.id);
244
+ for (var i=0,len=objects.length; i<len; i+=1) {
245
+
246
+ RG.resetColorsToOriginalValues(objects[i]);
247
+ if (typeof objects[i].reset === 'function') {
248
+ objects[i].reset();
249
+ }
250
+ }
251
+
252
+
253
+
254
+
255
+ // Kill the background cache
256
+ RG.cache = [];
257
+
258
+
259
+ // Fire the onresize event
260
+ RG.fireCustomEvent(ca.__object__, 'onresizebeforedraw');
261
+
262
+ RG.redrawCanvas(ca);
263
+
264
+
265
+ // Get rid of transparent semi-opaque DIV
266
+ ca.resizing.mousedown = false;
267
+ div.style.display = 'none';
268
+ document.body.removeChild(div);
269
+ }
270
+
271
+
272
+ // If there is zoom enabled in thumbnail mode, lose the zoom image
273
+ if (RG.Registry.Get('chart.zoomed.div') || RGraph.Registry.Get('chart.zoomed.img')) {
274
+ RG.Registry.Set('chart.zoomed.div', null);
275
+ RG.Registry.Set('chart.zoomed.img', null);
276
+ }
277
+
278
+
279
+ // Fire the onresize event
280
+ RG.FireCustomEvent(ca.__object__, 'onresizeend');
281
+ };
282
+
283
+
284
+ var window_onmouseup = MouseupFunc;
285
+
286
+ // Install the function as an event listener - but only once
287
+ if (typeof ca.rgraph_resize_window_mouseup_listener_installed != 'boolean') {
288
+ window.addEventListener('mouseup', window_onmouseup, false);
289
+ ca.rgraph_resize_window_mouseup_listener_installed = true;
290
+ }
291
+
292
+
293
+
294
+
295
+
296
+
297
+
298
+
299
+
300
+
301
+
302
+
303
+
304
+
305
+
306
+
307
+
308
+
309
+
310
+
311
+
312
+
313
+
314
+
315
+
316
+
317
+
318
+
319
+ var canvas_onmousemove = function (e)
320
+ {
321
+
322
+ e = RG.fixEventObject(e);
323
+
324
+ var coords = RG.getMouseXY(e);
325
+ var obj = e.target.__object__;
326
+ var ca = e.target;
327
+ var co = ca.getContext('2d');
328
+ var cursor = ca.style.cursor;
329
+
330
+ // Save the original cursor
331
+ if (!ca.resizing.original_cursor) {
332
+ ca.resizing.original_cursor = cursor;
333
+ }
334
+
335
+ if ( (coords[0] > (ca.width - resizeHandleSize)
336
+ && coords[0] < ca.width
337
+ && coords[1] > (ca.height - resizeHandleSize)
338
+ && coords[1] < ca.height)) {
339
+
340
+ ca.style.cursor = 'move';
341
+
342
+ } else if ( coords[0] > (ca.width - resizeHandleSize - resizeHandleSize)
343
+ && coords[0] < ca.width - resizeHandleSize
344
+ && coords[1] > (ca.height - resizeHandleSize)
345
+ && coords[1] < ca.height) {
346
+
347
+ ca.style.cursor = 'pointer';
348
+
349
+ } else {
350
+ if (ca.resizing.original_cursor) {
351
+ ca.style.cursor = ca.resizing.original_cursor;
352
+ ca.resizing.original_cursor = null;
353
+ } else {
354
+ ca.style.cursor = 'default';
355
+ }
356
+ }
357
+ };
358
+
359
+
360
+
361
+
362
+
363
+ // Install the function as an event listener - but only once
364
+ if (typeof ca.rgraph_resize_mousemove_listener_installed != 'boolean') {
365
+ ca.addEventListener('mousemove', canvas_onmousemove, false);
366
+ ca.rgraph_resize_mousemove_listener_installed = true;
367
+ }
368
+
369
+
370
+
371
+
372
+
373
+ var canvas_onmouseout = function (e)
374
+ {
375
+ e.target.style.cursor = 'default';
376
+ e.target.title = '';
377
+ };
378
+
379
+ // Install the function as an event listener - but only once
380
+ if (typeof ca.rgraph_resize_mouseout_listener_installed != 'boolean') {
381
+ ca.addEventListener('mouseout', canvas_onmouseout, false);
382
+ ca.rgraph_resize_mouseout_listener_installed = true;
383
+ }
384
+
385
+
386
+
387
+
388
+
389
+ var canvas_onmousedown = function (e)
390
+ {
391
+ e = RG.fixEventObject(e);
392
+
393
+ var coords = RG.getMouseXY(e);
394
+ var canvasXY = RG.getCanvasXY(e.target);
395
+ var ca = e.target;
396
+
397
+ /**
398
+ * Set the active variable to the last canvas that was clicked on
399
+ */
400
+ active = ca;
401
+
402
+
403
+
404
+
405
+
406
+
407
+ if ( coords[0] > (ca.width - resizeHandleSize)
408
+ && coords[0] < ca.width
409
+ && coords[1] > (ca.height - resizeHandleSize)
410
+ && coords[1] < ca.height) {
411
+
412
+ RG.fireCustomEvent(obj, 'onresizebegin');
413
+
414
+ // Save the existing border
415
+ if (ca.resizing.original_css_border == null) {
416
+ ca.resizing.original_css_border = ca.style.border;
417
+ }
418
+
419
+ // Save the existing shadow
420
+ if (ca.resizing.original_css_shadow == null) {
421
+ ca.resizing.original_css_shadow = ca.style.boxShadow;
422
+ }
423
+
424
+ ca.resizing.mousedown = true;
425
+
426
+
427
+ // Create the semi-opaque DIV
428
+ var div = document.createElement('DIV');
429
+ div.style.position = 'absolute';
430
+ div.style.left = canvasXY[0] + 'px';
431
+ div.style.top = canvasXY[1] + 'px';
432
+ div.style.width = ca.width + 'px';
433
+ div.style.height = ca.height + 'px';
434
+ div.style.border = '1px dotted black';
435
+ div.style.backgroundColor = 'gray';
436
+ div.style.opacity = 0.5;
437
+ div.__canvas__ = e.target;
438
+ document.body.appendChild(div);
439
+
440
+ ca.resizing.div = div;
441
+ ca.resizing.placeHolders.push(div);
442
+
443
+ // Hide the previous resize indicator layers. This is only necessary it seems for the Meter chart
444
+ for (var i=0; i<(ca.resizing.placeHolders.length - 1); ++i) {
445
+ ca.resizing.placeHolders[i].style.display = 'none';
446
+ }
447
+
448
+ // This is a repetition of the window.onmouseup function (No need to use DOM2 here)
449
+ div.onmouseup = function (e)
450
+ {
451
+ MouseupFunc(e);
452
+ }
453
+
454
+
455
+ // No need to use DOM2 here
456
+ ca.resizing.div.onmouseover = function (e)
457
+ {
458
+ e = RG.fixEventObject(e);
459
+ e.stopPropagation();
460
+ }
461
+
462
+ // The mouse
463
+ ca.resizing.originalx = e.pageX;
464
+ ca.resizing.originaly = e.pageY;
465
+
466
+ ca.resizing.originalCanvasX = RG.getCanvasXY(ca)[0];
467
+ ca.resizing.originalCanvasY = RG.getCanvasXY(ca)[1];
468
+ }
469
+
470
+ // This facilitates the reset button
471
+ if ( coords[0] > (ca.width - resizeHandleSize - resizeHandleSize)
472
+ && coords[0] < ca.width - resizeHandleSize
473
+ && coords[1] > (ca.height - resizeHandleSize)
474
+ && coords[1] < ca.height
475
+ && ca.resizing.originalw
476
+ && ca.resizing.originaly) {
477
+
478
+
479
+ // Fire the onresizebegin event
480
+ RG.fireCustomEvent(ca.__object__, 'onresizebegin');
481
+
482
+ // Restore the original width and height
483
+ ca.width = ca.resizing.originalw;
484
+ ca.height = ca.resizing.originalh;
485
+
486
+ // TODO Need to check the parent is actually a DIV container or not?
487
+
488
+ // Show the link if it exists and the display is set to none
489
+ if (ca.__link__ && ca.__link__.style.display === 'none') {
490
+ ca.__link__.style.display = 'inline';
491
+ }
492
+
493
+ if (typeof ca.parentNode.id === 'string' && ca.parentNode.id.substring(0, 24) === 'rgraph_resize_container_') {
494
+ ca.parentNode.style.width = ca.resizing.originalw + 'px';
495
+ ca.parentNode.style.height = ca.resizing.originalh + 'px';
496
+ }
497
+
498
+ // Lose the border
499
+ ca.style.border = ca.resizing.original_css_border;
500
+
501
+ //Lose the shadow
502
+ ca.style.boxShadow = ca.resizing.original_css_shadow;
503
+
504
+
505
+ // Add 1 pixel to the top/left because the border is going
506
+ ca.style.left = (parseInt(ca.style.left)) + 'px';
507
+ ca.style.top = (parseInt(ca.style.top)) + 'px';
508
+
509
+
510
+
511
+ // Because resetting the canvas resizes it - and so loses any translation - need to reapply the
512
+ // antialiasing translation
513
+ ca.getContext('2d').translate(0.5,0.5);
514
+
515
+
516
+ RG.fireCustomEvent(ca.__object__, 'onresizebeforedraw');
517
+
518
+ // Since gradients are pre-parsed colors - this resets the colors to what they were
519
+ // before the parsing.
520
+ var objects = RG.ObjectRegistry.getObjectsByCanvasID(ca.id);
521
+ for (var i=0; i<objects.length; i+=1) {
522
+ RG.resetColorsToOriginalValues(objects[i]);
523
+ if (objects[i].reset) {
524
+ objects[i].reset();
525
+ }
526
+
527
+ RG.redrawCanvas(objects[i].canvas);
528
+ }
529
+
530
+
531
+ // Clear the cache so that old things (eg backgrounds) are not reused
532
+ RG.cache = [];
533
+
534
+
535
+
536
+
537
+
538
+
539
+ // Redraw the canvas
540
+ //RG.redrawCanvas(objects[i].canvas);
541
+
542
+
543
+ // Set the width and height on the DIV
544
+ if (ca.resizing.div) {
545
+ ca.resizing.div.style.width = ca.__original_width__ + 'px';
546
+ ca.resizing.div.style.height = ca.__original_height__ + 'px';
547
+ }
548
+
549
+
550
+ // Fire the resize event
551
+ RG.fireCustomEvent(ca.__object__, 'onresize');
552
+ RG.fireCustomEvent(ca.__object__, 'onresizeend');
553
+ }
554
+ };
555
+
556
+ // Install the function as an event listener - but only once
557
+ if (typeof ca.rgraph_resize_mousedown_listener_installed != 'boolean') {
558
+ ca.addEventListener('mousedown', canvas_onmousedown, false);
559
+ ca.rgraph_resize_mousedown_listener_installed = true;
560
+ }
561
+ }
562
+ };
563
+ // End module pattern
564
+ })(window, document);