rgraph-rails 4.62 → 4.64

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +3 -4
  3. data/lib/rgraph-rails/version.rb +1 -1
  4. data/vendor/assets/javascripts/RGraph.bar.js +240 -3742
  5. data/vendor/assets/javascripts/RGraph.bipolar.js +165 -2005
  6. data/vendor/assets/javascripts/RGraph.common.annotate.js +35 -395
  7. data/vendor/assets/javascripts/RGraph.common.context.js +30 -595
  8. data/vendor/assets/javascripts/RGraph.common.core.js +418 -5359
  9. data/vendor/assets/javascripts/RGraph.common.csv.js +20 -276
  10. data/vendor/assets/javascripts/RGraph.common.deprecated.js +35 -450
  11. data/vendor/assets/javascripts/RGraph.common.dynamic.js +88 -1395
  12. data/vendor/assets/javascripts/RGraph.common.effects.js +90 -1545
  13. data/vendor/assets/javascripts/RGraph.common.key.js +52 -753
  14. data/vendor/assets/javascripts/RGraph.common.resizing.js +37 -563
  15. data/vendor/assets/javascripts/RGraph.common.sheets.js +29 -352
  16. data/vendor/assets/javascripts/RGraph.common.tooltips.js +32 -450
  17. data/vendor/assets/javascripts/RGraph.common.zoom.js +14 -219
  18. data/vendor/assets/javascripts/RGraph.cornergauge.js +71 -0
  19. data/vendor/assets/javascripts/RGraph.drawing.background.js +34 -570
  20. data/vendor/assets/javascripts/RGraph.drawing.circle.js +33 -544
  21. data/vendor/assets/javascripts/RGraph.drawing.image.js +51 -755
  22. data/vendor/assets/javascripts/RGraph.drawing.marker1.js +37 -645
  23. data/vendor/assets/javascripts/RGraph.drawing.marker2.js +36 -633
  24. data/vendor/assets/javascripts/RGraph.drawing.marker3.js +35 -514
  25. data/vendor/assets/javascripts/RGraph.drawing.poly.js +37 -559
  26. data/vendor/assets/javascripts/RGraph.drawing.rect.js +33 -548
  27. data/vendor/assets/javascripts/RGraph.drawing.text.js +36 -664
  28. data/vendor/assets/javascripts/RGraph.drawing.xaxis.js +50 -812
  29. data/vendor/assets/javascripts/RGraph.drawing.yaxis.js +51 -856
  30. data/vendor/assets/javascripts/RGraph.fuel.js +58 -964
  31. data/vendor/assets/javascripts/RGraph.funnel.js +55 -984
  32. data/vendor/assets/javascripts/RGraph.gantt.js +77 -1354
  33. data/vendor/assets/javascripts/RGraph.gauge.js +85 -1421
  34. data/vendor/assets/javascripts/RGraph.hbar.js +162 -2788
  35. data/vendor/assets/javascripts/RGraph.hprogress.js +80 -1401
  36. data/vendor/assets/javascripts/RGraph.line.js +249 -4248
  37. data/vendor/assets/javascripts/RGraph.meter.js +74 -1280
  38. data/vendor/assets/javascripts/RGraph.modaldialog.js +19 -301
  39. data/vendor/assets/javascripts/RGraph.odo.js +71 -1264
  40. data/vendor/assets/javascripts/RGraph.pie.js +137 -2288
  41. data/vendor/assets/javascripts/RGraph.radar.js +110 -1847
  42. data/vendor/assets/javascripts/RGraph.rose.js +108 -1977
  43. data/vendor/assets/javascripts/RGraph.rscatter.js +80 -1432
  44. data/vendor/assets/javascripts/RGraph.scatter.js +172 -3163
  45. data/vendor/assets/javascripts/RGraph.semicircularprogress.js +60 -1120
  46. data/vendor/assets/javascripts/RGraph.svg.bar.js +66 -1735
  47. data/vendor/assets/javascripts/RGraph.svg.common.ajax.js +21 -246
  48. data/vendor/assets/javascripts/RGraph.svg.common.core.js +255 -3937
  49. data/vendor/assets/javascripts/RGraph.svg.common.csv.js +20 -276
  50. data/vendor/assets/javascripts/RGraph.svg.common.fx.js +68 -1303
  51. data/vendor/assets/javascripts/RGraph.svg.common.key.js +19 -205
  52. data/vendor/assets/javascripts/RGraph.svg.common.sheets.js +29 -352
  53. data/vendor/assets/javascripts/RGraph.svg.common.tooltips.js +22 -273
  54. data/vendor/assets/javascripts/RGraph.svg.funnel.js +32 -0
  55. data/vendor/assets/javascripts/RGraph.svg.hbar.js +59 -1400
  56. data/vendor/assets/javascripts/RGraph.svg.line.js +70 -1580
  57. data/vendor/assets/javascripts/RGraph.svg.pie.js +55 -1131
  58. data/vendor/assets/javascripts/RGraph.svg.radar.js +57 -1502
  59. data/vendor/assets/javascripts/RGraph.svg.rose.js +66 -1817
  60. data/vendor/assets/javascripts/RGraph.svg.scatter.js +58 -1261
  61. data/vendor/assets/javascripts/RGraph.svg.semicircularprogress.js +28 -865
  62. data/vendor/assets/javascripts/RGraph.svg.waterfall.js +45 -1252
  63. data/vendor/assets/javascripts/RGraph.thermometer.js +63 -1136
  64. data/vendor/assets/javascripts/RGraph.vprogress.js +83 -1470
  65. data/vendor/assets/javascripts/RGraph.waterfall.js +83 -1347
  66. metadata +5 -4
  67. data/vendor/assets/javascripts/financial-data.js +0 -1067
@@ -1,206 +1,20 @@
1
- // version: 2017-05-08
2
- /**
3
- * o--------------------------------------------------------------------------------o
4
- * | This file is part of the RGraph package - you can learn more at: |
5
- * | |
6
- * | http://www.rgraph.net |
7
- * | |
8
- * | RGraph is licensed under the Open Source MIT license. That means that it's |
9
- * | totally free to use! |
10
- * o--------------------------------------------------------------------------------o
11
- */
12
1
 
13
- RGraph = window.RGraph || {isRGraph: true};
14
- RGraph.SVG = RGraph.SVG || {};
15
- RGraph.SVG.HTML = RGraph.SVG.HTML || {};
16
-
17
- // Module pattern
18
- (function (win, doc, undefined)
19
- {
20
- var RG = RGraph,
21
- ua = navigator.userAgent,
22
- ma = Math;
23
-
24
-
25
-
26
-
27
- /**
28
- * Draws the graph key (used by various graphs)
29
- *
30
- * @param object obj The graph object
31
- * @param array key An array of the texts to be listed in the key
32
- * @param colors An array of the colors to be used
33
- */
34
- RG.SVG.drawKey = function (obj)
35
- {
36
- var prop = obj.properties,
37
- key = prop.key,
38
- colors = prop.keyColors || prop.colors,
39
- defaultFont = 'Arial',
40
- blobSize = 0,
41
- width = 0;
42
-
43
- // Work out the center point of the SVG tag
44
- var centerx = obj.svg.getAttribute('width') / 2;
45
-
46
-
47
-
48
-
49
- // First measure the length so that the key can be centered
50
- for (var i=0,length = 0; i<key.length; i++) {
51
-
52
- // First measure the text
53
- var textDimensions = RG.SVG.measureText({
54
- text: key[i],
55
- bold: prop.keyTextBold || false,
56
- font: prop.keyTextFont || prop.textFont || defaultFont,
57
- size: prop.keyTextSize || prop.textSize
58
- });
59
-
60
- blobSize = ma.max(blobSize, textDimensions[1]);
61
-
62
- width = width + 10 + blobSize + 5 + textDimensions[0];
63
- }
64
-
65
- // Center the key
66
- x = centerx - width / 2;
67
-
68
-
69
-
70
-
71
-
72
-
73
-
74
- // Loop thru the key and draw them
75
- for (var i=0,y=prop.gutterTop - 5; i<key.length; ++i) {
76
-
77
- // First measure the text
78
- var textDimensions = RG.SVG.measureText({
79
- text: key[i],
80
- bold: prop.keyTextBold || false,
81
- font: prop.keyTextFont || prop.textFont || defaultFont,
82
- size: prop.keyTextSize || prop.textSize
83
- });
84
-
85
-
86
- RG.SVG.create({
87
- svg: obj.svg,
88
- type: 'rect',
89
- parent: obj.svg.all,
90
- attr: {
91
- x: x + prop.keyOffsetx,
92
- y: y - blobSize + prop.keyOffsety,
93
- width: blobSize,
94
- height: blobSize,
95
- fill: colors[i]
96
- }
97
- });
98
-
99
- RGraph.SVG.text({
100
- object: obj,
101
- parent: obj.svg.all,
102
- size: prop.keyTextSize || prop.textSize,
103
- bold: prop.keyTextBold || false,
104
- font: 'Arial',
105
- italic: prop.keyTextItalic|| false,
106
- halign: 'left',
107
- valign: 'bottom',
108
- text: key[i],
109
- x: x + blobSize + 5 + prop.keyTextOffsetx + prop.keyOffsetx,
110
- y: y + prop.keyTextOffsety + prop.keyOffsety,
111
- color: 'black',
112
- background: 'white',
113
- padding: 0
114
- })
115
-
116
- x += 10 + blobSize + 5 + textDimensions[0];
117
- }
118
- };
119
-
120
-
121
-
122
-
123
-
124
-
125
-
126
-
127
- /**
128
- * Create a TABLE based HTML key. There's lots of options so it's
129
- * suggested that you consult the documentation page
130
- *
131
- * @param mixed id This should be a string consisting of the ID of the container
132
- * @param object prop An object map of the various properties that you can use to
133
- * configure the key. See the documentation page for a list.
134
- */
135
- RG.SVG.HTML.key = function (id, prop)
136
- {
137
- var div = doc.getElementById(id);
138
-
139
-
140
- /**
141
- * Create the table that becomes the key
142
- */
143
- var str = '<table border="0" cellspacing="0" cellpadding="0" id="rgraph_key" style="display: inline;' + (function ()
144
- {
145
- var style = ''
146
- for (i in prop.tableCss) {
147
- if (typeof i === 'string') {
148
- style = style + i + ': ' + prop.tableCss[i] + ';';
149
- }
150
- }
151
- return style;
152
- })() + '" ' + (prop.tableClass ? 'class="' + prop.tableClass + '"' : '') + '>';
153
-
154
-
155
-
156
- /**
157
- * Add the individual key elements
158
- */
159
- for (var i=0; i<prop.labels.length; i+=1) {
160
- str += '<tr><td><div style="' + (function ()
161
- {
162
- var style = '';
163
-
164
- for (var j in prop.blobCss) {
165
- if (typeof j === 'string') {
166
- style = style + j + ': ' + prop.blobCss[j] + ';';
167
- }
168
- }
169
-
170
- return style;
171
- })() + 'display: inline-block; margin-right: 5px; margin-top: 4px; width: 15px; height: 15px; background-color: ' + prop.colors[i] + '"' + (prop.blobClass ? 'class="' + prop.blobClass + '"' : '') + '>&nbsp;</div><td>' + (prop.links && prop.links[i] ? '<a href="' + prop.links[i] + '">' : '') + '<span ' + (prop.labelClass ? 'class="' + prop.labelClass + '"' : '') + '" style="' + (function ()
172
- {
173
- var style = '';
174
-
175
- for (var j in prop.labelCss) {
176
- if (typeof j === 'string') {
177
- style = style + j + ': ' + prop.labelCss[j] + ';';
178
- }
179
- }
180
-
181
- return style;
182
- })() + '" ' + (function ()
183
- {
184
- var style = '';
185
-
186
- if (prop['labelCss_' + i]) {
187
- for (var j in prop['labelCss_' + i]) {
188
- style = style + j + ': ' + prop['labelCss_' + i][j] + ';';
189
- }
190
- }
191
-
192
- return style ? 'style="' + style + '"' : '';
193
- })() + '>' + prop.labels[i] + '</span>' + (prop.links && prop.links[i] ? '</a>' : '') + '</td></tr>';
194
- }
195
-
196
- div.innerHTML += (str + '</table>');
197
-
198
- // Return the TABLE object that is the HTML key
199
- return doc.getElementById('rgraph_key');
200
- };
201
-
202
-
203
-
204
-
205
- // End module pattern
206
- })(window, document);
2
+ RGraph=window.RGraph||{isRGraph:true};RGraph.SVG=RGraph.SVG||{};RGraph.SVG.HTML=RGraph.SVG.HTML||{};(function(win,doc,undefined)
3
+ {var RG=RGraph,ua=navigator.userAgent,ma=Math;RG.SVG.drawKey=function(obj)
4
+ {var prop=obj.properties,key=prop.key,colors=prop.keyColors||prop.colors,defaultFont='Arial',blobSize=0,width=0,keyColorShape=prop.keyColorShape;var centerx=obj.svg.getAttribute('width')/2;if(obj.type==='funnel'){centerx=(obj.graphWidth/2)+prop.gutterLeft;}
5
+ if(key&&key.length){for(var i=0,length=0;i<key.length;i++){var textDimensions=RG.SVG.measureText({text:key[i],bold:prop.keyTextBold||false,font:prop.keyTextFont||prop.textFont||defaultFont,size:prop.keyTextSize||prop.textSize});blobSize=ma.max(blobSize,textDimensions[1]);width=width+10+blobSize+5+textDimensions[0];}
6
+ x=centerx-width/2;for(var i=0,y=prop.gutterTop-5;i<key.length;++i){var textDimensions=RG.SVG.measureText({text:key[i],bold:prop.keyTextBold||false,font:prop.keyTextFont||prop.textFont||defaultFont,size:prop.keyTextSize||prop.textSize});var shape=prop.keyColorShape;if(typeof shape==='object'){shape=prop.keyColorShape[i];}
7
+ if(shape==='circle'){RG.SVG.create({svg:obj.svg,type:'circle',parent:obj.svg.all,attr:{cx:x+(blobSize/2)+prop.keyOffsety,cy:y-(blobSize/2)+prop.keyOffsety,r:blobSize/2,fill:colors[i]}});}else if(shape==='triangle'){RG.SVG.create({svg:obj.svg,type:'path',parent:obj.svg.all,attr:{d:'M {1} {2} L {3} {4} L {5} {6} z'.format(x+prop.keyOffsetx+(blobSize/2),y-blobSize+prop.keyOffsety,x+prop.keyOffsetx+blobSize,y+prop.keyOffsety,x+prop.keyOffsetx,y+prop.keyOffsety),fill:colors[i]}});}else if(shape==='line'){RG.SVG.create({svg:obj.svg,type:'path',parent:obj.svg.all,attr:{d:'M {1} {2} L {3} {4}'.format(x+prop.keyOffsetx,y-(blobSize/2)+prop.keyOffsety,x+prop.keyOffsetx+blobSize,y-(blobSize/2)+prop.keyOffsety),stroke:colors[i],'stroke-width':2,'stroke-linecap':'round'}});}else if(shape==='dot'){RG.SVG.create({svg:obj.svg,type:'path',parent:obj.svg.all,attr:{d:'M {1} {2} L {3} {4}'.format(x+prop.keyOffsetx,y-(blobSize/2)+prop.keyOffsety,x+prop.keyOffsetx+blobSize,y-(blobSize/2)+prop.keyOffsety),stroke:colors[i],'stroke-width':2,'stroke-linecap':'round'}});RG.SVG.create({svg:obj.svg,type:'circle',parent:obj.svg.all,attr:{cx:x+(blobSize/2)+prop.keyOffsety,cy:y-(blobSize/2)+prop.keyOffsety,r:blobSize/4,fill:colors[i]}});}else if(typeof shape==='function'){RG.SVG.create({svg:obj.svg,type:'path',parent:obj.svg.all,attr:{d:'M {1} {2} L {3} {4}'.format(x+prop.keyOffsetx,y-(blobSize/2)+prop.keyOffsety,x+prop.keyOffsetx+blobSize,y-(blobSize/2)+prop.keyOffsety),stroke:colors[i],'stroke-width':2,'stroke-linecap':'round'}});}else{RG.SVG.create({svg:obj.svg,type:'rect',parent:obj.svg.all,attr:{x:x+prop.keyOffsetx,y:y-blobSize+prop.keyOffsety,width:blobSize,height:blobSize,fill:colors[i]}});}
8
+ RGraph.SVG.text({object:obj,parent:obj.svg.all,size:prop.keyTextSize||prop.textSize,bold:prop.keyTextBold||false,font:'Arial',italic:prop.keyTextItalic||false,halign:'left',valign:'bottom',text:key[i],x:x+blobSize+5+prop.keyTextOffsetx+prop.keyOffsetx,y:y+prop.keyTextOffsety+prop.keyOffsety,color:'black',background:'white',padding:0})
9
+ x+=10+blobSize+5+textDimensions[0];}}};RG.SVG.HTML.key=function(id,prop)
10
+ {var div=doc.getElementById(id);var str='<table border="0" cellspacing="0" cellpadding="0" id="rgraph_key" style="display: inline;'+(function()
11
+ {var style=''
12
+ for(i in prop.tableCss){if(typeof i==='string'){style=style+i+': '+prop.tableCss[i]+';';}}
13
+ return style;})()+'" '+(prop.tableClass?'class="'+prop.tableClass+'"':'')+'>';for(var i=0;i<prop.labels.length;i+=1){str+='<tr><td><div style="'+(function()
14
+ {var style='';for(var j in prop.blobCss){if(typeof j==='string'){style=style+j+': '+prop.blobCss[j]+';';}}
15
+ return style;})()+'display: inline-block; margin-right: 5px; margin-top: 4px; width: 15px; height: 15px; background-color: '+prop.colors[i]+'"'+(prop.blobClass?'class="'+prop.blobClass+'"':'')+'>&nbsp;</div><td>'+(prop.links&&prop.links[i]?'<a href="'+prop.links[i]+'">':'')+'<span '+(prop.labelClass?'class="'+prop.labelClass+'"':'')+'" style="'+(function()
16
+ {var style='';for(var j in prop.labelCss){if(typeof j==='string'){style=style+j+': '+prop.labelCss[j]+';';}}
17
+ return style;})()+'" '+(function()
18
+ {var style='';if(prop['labelCss_'+i]){for(var j in prop['labelCss_'+i]){style=style+j+': '+prop['labelCss_'+i][j]+';';}}
19
+ return style?'style="'+style+'"':'';})()+'>'+prop.labels[i]+'</span>'+(prop.links&&prop.links[i]?'</a>':'')+'</td></tr>';}
20
+ div.innerHTML+=(str+'</table>');return doc.getElementById('rgraph_key');};})(window,document);
@@ -1,353 +1,30 @@
1
- // version: 2017-05-08
2
- /**
3
- * o--------------------------------------------------------------------------------o
4
- * | This file is part of the RGraph package - you can learn more at: |
5
- * | |
6
- * | http://www.rgraph.net |
7
- * | |
8
- * | RGraph is licensed under the Open Source MIT license. That means that it's |
9
- * | totally free to use! |
10
- * o--------------------------------------------------------------------------------o
11
- */
12
1
 
13
- /**
14
- * Initialise the various objects
15
- */
16
- RGraph = window.RGraph || {isRGraph: true};
17
-
18
- // Module pattern
19
- (function (win, doc, undefined)
20
- {
21
- RGraph.Sheets = function (key)
22
- {
23
- var worksheet,
24
- callback,
25
- letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
26
-
27
- // 3 arguments
28
- if (arguments.length === 3) {
29
- worksheet = Number(arguments[1]);
30
- callback = arguments[2];
31
-
32
- // 2 arguments
33
- } else {
34
- worksheet = 1;
35
- callback = arguments[1];
36
- }
37
-
38
- var url = 'https://spreadsheets.google.com/feeds/cells/[KEY]/[WORKSHEET]/public/full?alt=json-in-script&callback=__rgraph_JSONPCallback'.replace(/\[KEY\]/, key).replace(/\[WORKSHEET\]/, worksheet);
39
-
40
- /*
41
- * https://spreadsheets.google.com/feeds/cells/1q_BMjvKO_kKbAO3VjoaITSDyrLAk8f0SK5UFMmE3oRs/2/public/full?alt=json-in-script
42
- */
43
-
44
-
45
-
46
-
47
-
48
- //
49
- // Loads the spreadsheet
50
- //
51
- this.load = function(url, userCallback)
52
- {
53
- var obj = this;
54
-
55
- // A global on purpose
56
- __rgraph_JSONPCallback = function (json)
57
- {
58
- // Save the JSON on the RGraph.Sheets object
59
- obj.json = json;
60
-
61
- //
62
- // Put the entries in the JSON feed into a grid
63
- //
64
- var grid = [], row = 0, col = 0;
65
-
66
- for (var i=0; i<json.feed.entry.length; ++i) {
67
-
68
- row = json.feed.entry[i].gs$cell.row - 1;
69
- col = json.feed.entry[i].gs$cell.col - 1;
70
-
71
- if (!grid[row]) {
72
- grid[row] = [];
73
- }
74
-
75
- grid[row][col] = json.feed.entry[i].content.$t;
76
- }
77
-
78
-
79
- //
80
- // Determine the longest row
81
- //
82
- var maxcols = 0; // The max length of the rows
83
-
84
- for (var i=0; i<grid.length; ++i) {
85
- maxcols = grid[i] ? Math.max(maxcols, grid[i].length) : maxcols;
86
- }
87
-
88
-
89
-
90
- //
91
- // Now go through the array and fill in any blank holes.
92
- //
93
- for (var i=0; i<grid.length; ++i) {
94
-
95
- if (typeof grid[i] === 'undefined') {
96
- grid[i] = new Array(maxcols);
97
- }
98
-
99
- for (var j=0; j<maxcols; j++) {
100
- if (typeof grid[i][j] === 'undefined') {
101
- grid[i][j] = '';
102
- }
103
-
104
- // Convert numbers to real numbers and floats here too
105
- if (grid[i][j].match(/^[0-9]+$/)) {
106
- grid[i][j] = parseInt(grid[i][j]);
107
- } else if (grid[i][j].match(/^[0-9.]+$/)) {
108
- grid[i][j] = parseFloat(grid[i][j]);
109
- }
110
- }
111
- }
112
-
113
- //
114
- // Save the grid on the object
115
- //
116
- obj.data = grid;
117
-
118
-
119
-
120
- //
121
- // Call the users callback function. Users can access the raw data if
122
- // they want with the obj.data property or by using the accessor
123
- // methods (better)
124
- //
125
- userCallback(obj);
126
- };
127
-
128
- // Add the new script tag to the document that pulls in the JSON
129
- //
130
- // With jQuery...
131
- //
132
- //jQuery('body').append("<script src='" + url + "'></script>");
133
- //
134
- // And without jQuery...
135
-
136
- var scriptNode = document.createElement('SCRIPT');
137
- scriptNode.src = url;
138
- document.body.appendChild(scriptNode);
139
- };
140
-
141
-
142
-
143
-
144
- //
145
- // Fetches a row of data and returns it
146
- //
147
- // @param id number The numeric index of the column to fetch (starts at 1)
148
- // @param start number The index to start fetching/returning at. The first
149
- // character is 1
150
- // @param opt An option object containing options
151
- //
152
- this.row = function (index, start)
153
- {
154
- var opt = {}, row;
155
-
156
- // Default for start is 1
157
- start = start || 1;
158
-
159
- //
160
- // Parse the .trim argument
161
- //
162
-
163
- if (arguments && typeof arguments[2] === 'object' && typeof arguments[2].trim === 'boolean') {
164
- opt.trim = arguments[2].trim;
165
- } else {
166
- opt.trim = true;
167
- }
168
-
169
- row = this.data[index - 1].slice(start - 1);
170
-
171
- // Trim the array if required
172
- if (opt.trim) {
173
- row = RGraph.SVG.arrayTrim(row);
174
- }
175
-
176
- return row;
177
- };
178
-
179
-
180
-
181
- //
182
- // Fetches a column of data and returns it
183
- //
184
- // @param id number The letter that corresponds to the column
185
- // @param start number The index to start fetching/returning at. The first
186
- // character is 1
187
- // @param opt An option object containing options
188
- //
189
- this.col = function (index, start)
190
- {
191
- var opt = {},
192
- col = [];
193
-
194
- // Default for start is 1
195
- start = start || 1;
196
-
197
- if (arguments && typeof arguments[2] === 'object' && typeof arguments[2].trim === 'boolean') {
198
- opt.trim = arguments[2].trim;
199
- } else {
200
- opt.trim = true;
201
- }
202
-
203
- for (var i=0; i<this.data.length; ++i) {
204
- col.push(this.data[i][index - 1]);
205
- }
206
-
207
- // Trim the array if required
208
- if (opt.trim) {
209
- col = RGraph.SVG.arrayTrim(col);
210
- }
211
-
212
- // Now account for the start index
213
-
214
- col = col.slice(start - 1);
215
-
216
- return col;
217
- };
218
-
219
-
220
-
221
- //
222
- // Returns the index (zero index) of the given letters
223
- //
224
- this.getIndexOfLetters = function (l)
225
- {
226
- var parts = l.split('');
227
-
228
- if (parts.length === 1) {
229
- return letters.indexOf(l) + 1;
230
- } else if (parts.length === 2){
231
- var idx = ((letters.indexOf(parts[0]) + 1) * 26) + (letters.indexOf(parts[1]) + 1);
232
- return idx;
233
- }
234
- }
235
-
236
-
237
-
238
-
239
-
240
- //
241
- // The get method makes retrieving cells very straightforward,
242
- // for example: obj.get('B1');
243
- //
244
- // @param str string The cells(s) to fetch
245
- // @param string Optional set of options that are passed
246
- // to the relevant row/col function
247
- //
248
- this.get = function (str)
249
- {
250
- // Uppercase letters please!
251
- str = str.toUpperCase();
252
-
253
- //
254
- // Handle the style of .get('C') or .get('AA'
255
- //
256
- if (str.match(/^[a-z]+$/i)) {
257
- if (str.length === 1) {
258
- var index = letters.indexOf(str) + 1;
259
- return this.col(index, 1, arguments[1]);
260
-
261
- } else if (str.length === 2) {
262
- var index = ((letters.indexOf(str[0]) + 1) * 26) + letters.indexOf(str[1]) + 1;
263
- return this.col(index, 1, arguments[1]);
264
- }
265
- }
266
-
267
-
268
-
269
-
270
- //
271
- // Handle the style of .get('2');
272
- //(fetching a whole row
273
- //
274
- if (str.match(/^[0-9]+$/i)) {
275
- return this.row(str, null, arguments[1]);
276
- }
277
-
278
-
279
-
280
-
281
- //
282
- // Handle the style of .get('E2');
283
- //(fetching a single cell)
284
- //
285
- if (str.match(/^([a-z]{1,2})([0-9]+)$/i)) {
286
-
287
- var letter = RegExp.$1,
288
- number = RegExp.$2,
289
- col = this.get(letter, {trim: false});
290
-
291
-
292
- return col[number - 1];
293
- }
294
-
295
-
296
-
297
-
298
- //
299
- // Handle the style of .get('B2:E2');
300
- //(fetching the E2 cell to the E2 cell)
301
- //
302
- if (str.match(/^([a-z]{1,2})([0-9]+):([a-z]{1,2})([0-9]+)$/i)) {
303
-
304
- var letter1 = RegExp.$1,
305
- number1 = RegExp.$2,
306
- letter2 = RegExp.$3,
307
- number2 = RegExp.$4
308
-
309
-
310
- if (letter1 === letter2) {
311
- var cells = [],
312
- index = this.getIndexOfLetters(letter1),
313
- col = this.col(index, null, {trim: false});
314
-
315
- for (var i=(number1 - 1); i<=(number2 - 1); ++i) {
316
- cells.push(col[i]);
317
- }
318
-
319
- } else if (number1 === number2) {
320
-
321
- var cells = [],
322
- row = this.row(number1, null, {trim: false}),
323
- index1 = this.getIndexOfLetters(letter1),
324
- index2 = this.getIndexOfLetters(letter2)
325
-
326
- for (var i=(index1 - 1); i<=(index2 - 1); ++i) {
327
- cells.push(row[i]);
328
- }
329
- }
330
-
331
- // Trim the results
332
- if (arguments[1] && arguments[1].trim === false) {
333
- // Nada
334
- } else {
335
- cells = RGraph.SVG.arrayTrim(cells);
336
- }
337
-
338
- return cells;
339
-
340
- }
341
- };
342
-
343
-
344
-
345
-
346
- //
347
- // Load the data
348
- //
349
- this.load(url, callback);
350
- };
351
-
352
- // End module pattern
353
- })(window, document);
2
+ RGraph=window.RGraph||{isRGraph:true};(function(win,doc,undefined)
3
+ {RGraph.Sheets=function(key)
4
+ {var worksheet,callback,letters='ABCDEFGHIJKLMNOPQRSTUVWXYZ';if(arguments.length===3){worksheet=Number(arguments[1]);callback=arguments[2];}else{worksheet=1;callback=arguments[1];}
5
+ var url='https://spreadsheets.google.com/feeds/cells/[KEY]/[WORKSHEET]/public/full?alt=json-in-script&callback=__rgraph_JSONPCallback'.replace(/\[KEY\]/,key).replace(/\[WORKSHEET\]/,worksheet);this.load=function(url,userCallback)
6
+ {var obj=this;__rgraph_JSONPCallback=function(json)
7
+ {obj.json=json;var grid=[],row=0,col=0;for(var i=0;i<json.feed.entry.length;++i){row=json.feed.entry[i].gs$cell.row-1;col=json.feed.entry[i].gs$cell.col-1;if(!grid[row]){grid[row]=[];}
8
+ grid[row][col]=json.feed.entry[i].content.$t;}
9
+ var maxcols=0;for(var i=0;i<grid.length;++i){maxcols=grid[i]?Math.max(maxcols,grid[i].length):maxcols;}
10
+ for(var i=0;i<grid.length;++i){if(typeof grid[i]==='undefined'){grid[i]=new Array(maxcols);}
11
+ for(var j=0;j<maxcols;j++){if(typeof grid[i][j]==='undefined'){grid[i][j]='';}
12
+ if(grid[i][j].match(/^[0-9]+$/)){grid[i][j]=parseInt(grid[i][j]);}else if(grid[i][j].match(/^[0-9.]+$/)){grid[i][j]=parseFloat(grid[i][j]);}}}
13
+ obj.data=grid;userCallback(obj);};var scriptNode=document.createElement('SCRIPT');scriptNode.src=url;document.body.appendChild(scriptNode);};this.row=function(index,start)
14
+ {var opt={},row;start=start||1;if(arguments&&typeof arguments[2]==='object'&&typeof arguments[2].trim==='boolean'){opt.trim=arguments[2].trim;}else{opt.trim=true;}
15
+ row=this.data[index-1].slice(start-1);if(opt.trim){row=RGraph.SVG.arrayTrim(row);}
16
+ return row;};this.col=function(index,start)
17
+ {var opt={},col=[];start=start||1;if(arguments&&typeof arguments[2]==='object'&&typeof arguments[2].trim==='boolean'){opt.trim=arguments[2].trim;}else{opt.trim=true;}
18
+ for(var i=0;i<this.data.length;++i){col.push(this.data[i][index-1]);}
19
+ if(opt.trim){col=RGraph.SVG.arrayTrim(col);}
20
+ col=col.slice(start-1);return col;};this.getIndexOfLetters=function(l)
21
+ {var parts=l.split('');if(parts.length===1){return letters.indexOf(l)+1;}else if(parts.length===2){var idx=((letters.indexOf(parts[0])+1)*26)+(letters.indexOf(parts[1])+1);return idx;}}
22
+ this.get=function(str)
23
+ {str=str.toUpperCase();if(str.match(/^[a-z]+$/i)){if(str.length===1){var index=letters.indexOf(str)+1;return this.col(index,1,arguments[1]);}else if(str.length===2){var index=((letters.indexOf(str[0])+1)*26)+letters.indexOf(str[1])+1;return this.col(index,1,arguments[1]);}}
24
+ if(str.match(/^[0-9]+$/i)){return this.row(str,null,arguments[1]);}
25
+ if(str.match(/^([a-z]{1,2})([0-9]+)$/i)){var letter=RegExp.$1,number=RegExp.$2,col=this.get(letter,{trim:false});return col[number-1];}
26
+ if(str.match(/^([a-z]{1,2})([0-9]+):([a-z]{1,2})([0-9]+)$/i)){var letter1=RegExp.$1,number1=RegExp.$2,letter2=RegExp.$3,number2=RegExp.$4
27
+ if(letter1===letter2){var cells=[],index=this.getIndexOfLetters(letter1),col=this.col(index,null,{trim:false});for(var i=(number1-1);i<=(number2-1);++i){cells.push(col[i]);}}else if(number1===number2){var cells=[],row=this.row(number1,null,{trim:false}),index1=this.getIndexOfLetters(letter1),index2=this.getIndexOfLetters(letter2)
28
+ for(var i=(index1-1);i<=(index2-1);++i){cells.push(row[i]);}}
29
+ if(arguments[1]&&arguments[1].trim===false){}else{cells=RGraph.SVG.arrayTrim(cells);}
30
+ return cells;}};this.load(url,callback);};})(window,document);