outfielding-jqplot-rails 1.0.8 → 1.0.9

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 (41) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/CHANGELOG.md +8 -4
  4. data/changes-jqplot.txt +48 -37
  5. data/copyright-jqplot.txt +17 -17
  6. data/lib/outfielding-jqplot-rails/version.rb +1 -1
  7. data/vendor/assets/javascripts/excanvas.js +1438 -1438
  8. data/vendor/assets/javascripts/jqplot-plugins/jqplot.BezierCurveRenderer.js +313 -313
  9. data/vendor/assets/javascripts/jqplot-plugins/jqplot.barRenderer.js +801 -801
  10. data/vendor/assets/javascripts/jqplot-plugins/jqplot.blockRenderer.js +234 -234
  11. data/vendor/assets/javascripts/jqplot-plugins/jqplot.bubbleRenderer.js +758 -758
  12. data/vendor/assets/javascripts/jqplot-plugins/jqplot.canvasAxisLabelRenderer.js +202 -202
  13. data/vendor/assets/javascripts/jqplot-plugins/jqplot.canvasAxisTickRenderer.js +252 -252
  14. data/vendor/assets/javascripts/jqplot-plugins/jqplot.canvasOverlay.js +1020 -1020
  15. data/vendor/assets/javascripts/jqplot-plugins/jqplot.canvasTextRenderer.js +448 -448
  16. data/vendor/assets/javascripts/jqplot-plugins/jqplot.categoryAxisRenderer.js +679 -679
  17. data/vendor/assets/javascripts/jqplot-plugins/jqplot.ciParser.js +115 -115
  18. data/vendor/assets/javascripts/jqplot-plugins/jqplot.cursor.js +1108 -1108
  19. data/vendor/assets/javascripts/jqplot-plugins/jqplot.dateAxisRenderer.js +741 -741
  20. data/vendor/assets/javascripts/jqplot-plugins/jqplot.donutRenderer.js +816 -805
  21. data/vendor/assets/javascripts/jqplot-plugins/jqplot.dragable.js +224 -224
  22. data/vendor/assets/javascripts/jqplot-plugins/jqplot.enhancedLegendRenderer.js +305 -305
  23. data/vendor/assets/javascripts/jqplot-plugins/jqplot.enhancedPieLegendRenderer.js +261 -0
  24. data/vendor/assets/javascripts/jqplot-plugins/jqplot.funnelRenderer.js +942 -942
  25. data/vendor/assets/javascripts/jqplot-plugins/jqplot.highlighter.js +464 -464
  26. data/vendor/assets/javascripts/jqplot-plugins/jqplot.json2.js +475 -475
  27. data/vendor/assets/javascripts/jqplot-plugins/jqplot.logAxisRenderer.js +533 -533
  28. data/vendor/assets/javascripts/jqplot-plugins/jqplot.mekkoAxisRenderer.js +611 -611
  29. data/vendor/assets/javascripts/jqplot-plugins/jqplot.mekkoRenderer.js +437 -437
  30. data/vendor/assets/javascripts/jqplot-plugins/jqplot.meterGaugeRenderer.js +1029 -1029
  31. data/vendor/assets/javascripts/jqplot-plugins/jqplot.mobile.js +2 -2
  32. data/vendor/assets/javascripts/jqplot-plugins/jqplot.ohlcRenderer.js +373 -373
  33. data/vendor/assets/javascripts/jqplot-plugins/jqplot.pieRenderer.js +945 -903
  34. data/vendor/assets/javascripts/jqplot-plugins/jqplot.pointLabels.js +379 -377
  35. data/vendor/assets/javascripts/jqplot-plugins/jqplot.pyramidAxisRenderer.js +728 -728
  36. data/vendor/assets/javascripts/jqplot-plugins/jqplot.pyramidGridRenderer.js +428 -428
  37. data/vendor/assets/javascripts/jqplot-plugins/jqplot.pyramidRenderer.js +513 -513
  38. data/vendor/assets/javascripts/jqplot-plugins/jqplot.trendline.js +222 -222
  39. data/vendor/assets/javascripts/jquery.jqplot.js +11477 -11411
  40. data/vendor/assets/stylesheets/jquery.jqplot.css +259 -259
  41. metadata +9 -10
@@ -1,449 +1,449 @@
1
- /**
2
- * jqPlot
3
- * Pure JavaScript plotting plugin using jQuery
4
- *
5
- * Version: 1.0.8
6
- * Revision: 1250
7
- *
8
- * Copyright (c) 2009-2013 Chris Leonello
9
- * jqPlot is currently available for use in all personal or commercial projects
10
- * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
11
- * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
12
- * choose the license that best suits your project and use it accordingly.
13
- *
14
- * Although not required, the author would appreciate an email letting him
15
- * know of any substantial use of jqPlot. You can reach the author at:
16
- * chris at jqplot dot com or see http://www.jqplot.com/info.php .
17
- *
18
- * If you are feeling kind and generous, consider supporting the project by
19
- * making a donation at: http://www.jqplot.com/donate.php .
20
- *
21
- * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
22
- *
23
- * version 2007.04.27
24
- * author Ash Searle
25
- * http://hexmen.com/blog/2007/03/printf-sprintf/
26
- * http://hexmen.com/js/sprintf.js
27
- * The author (Ash Searle) has placed this code in the public domain:
28
- * "This code is unrestricted: you are free to use it however you like."
29
- *
30
- * included jsDate library by Chris Leonello:
31
- *
32
- * Copyright (c) 2010-2013 Chris Leonello
33
- *
34
- * jsDate is currently available for use in all personal or commercial projects
35
- * under both the MIT and GPL version 2.0 licenses. This means that you can
36
- * choose the license that best suits your project and use it accordingly.
37
- *
38
- * jsDate borrows many concepts and ideas from the Date Instance
39
- * Methods by Ken Snyder along with some parts of Ken's actual code.
40
- *
41
- * Ken's original Date Instance Methods and copyright notice:
42
- *
43
- * Ken Snyder (ken d snyder at gmail dot com)
44
- * 2008-09-10
45
- * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
46
- * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
47
- *
48
- * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
49
- * Larry has generously given permission to adapt his code for inclusion
50
- * into jqPlot.
51
- *
52
- * Larry's original code can be found here:
53
- *
54
- * https://github.com/lsiden/export-jqplot-to-png
55
- *
56
- *
57
- */
58
-
59
- (function($) {
60
- // This code is a modified version of the canvastext.js code, copyright below:
61
- //
62
- // This code is released to the public domain by Jim Studt, 2007.
63
- // He may keep some sort of up to date copy at http://www.federated.com/~jim/canvastext/
64
- //
65
- $.jqplot.CanvasTextRenderer = function(options){
66
- this.fontStyle = 'normal'; // normal, italic, oblique [not implemented]
67
- this.fontVariant = 'normal'; // normal, small caps [not implemented]
68
- this.fontWeight = 'normal'; // normal, bold, bolder, lighter, 100 - 900
69
- this.fontSize = '10px';
70
- this.fontFamily = 'sans-serif';
71
- this.fontStretch = 1.0;
72
- this.fillStyle = '#666666';
73
- this.angle = 0;
74
- this.textAlign = 'start';
75
- this.textBaseline = 'alphabetic';
76
- this.text;
77
- this.width;
78
- this.height;
79
- this.pt2px = 1.28;
80
-
81
- $.extend(true, this, options);
82
- this.normalizedFontSize = this.normalizeFontSize(this.fontSize);
83
- this.setHeight();
84
- };
85
-
86
- $.jqplot.CanvasTextRenderer.prototype.init = function(options) {
87
- $.extend(true, this, options);
88
- this.normalizedFontSize = this.normalizeFontSize(this.fontSize);
89
- this.setHeight();
90
- };
91
-
92
- // convert css spec into point size
93
- // returns float
94
- $.jqplot.CanvasTextRenderer.prototype.normalizeFontSize = function(sz) {
95
- sz = String(sz);
96
- var n = parseFloat(sz);
97
- if (sz.indexOf('px') > -1) {
98
- return n/this.pt2px;
99
- }
100
- else if (sz.indexOf('pt') > -1) {
101
- return n;
102
- }
103
- else if (sz.indexOf('em') > -1) {
104
- return n*12;
105
- }
106
- else if (sz.indexOf('%') > -1) {
107
- return n*12/100;
108
- }
109
- // default to pixels;
110
- else {
111
- return n/this.pt2px;
112
- }
113
- };
114
-
115
-
116
- $.jqplot.CanvasTextRenderer.prototype.fontWeight2Float = function(w) {
117
- // w = normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900
118
- // return values adjusted for Hershey font.
119
- if (Number(w)) {
120
- return w/400;
121
- }
122
- else {
123
- switch (w) {
124
- case 'normal':
125
- return 1;
126
- break;
127
- case 'bold':
128
- return 1.75;
129
- break;
130
- case 'bolder':
131
- return 2.25;
132
- break;
133
- case 'lighter':
134
- return 0.75;
135
- break;
136
- default:
137
- return 1;
138
- break;
139
- }
140
- }
141
- };
142
-
143
- $.jqplot.CanvasTextRenderer.prototype.getText = function() {
144
- return this.text;
145
- };
146
-
147
- $.jqplot.CanvasTextRenderer.prototype.setText = function(t, ctx) {
148
- this.text = t;
149
- this.setWidth(ctx);
150
- return this;
151
- };
152
-
153
- $.jqplot.CanvasTextRenderer.prototype.getWidth = function(ctx) {
154
- return this.width;
155
- };
156
-
157
- $.jqplot.CanvasTextRenderer.prototype.setWidth = function(ctx, w) {
158
- if (!w) {
159
- this.width = this.measure(ctx, this.text);
160
- }
161
- else {
162
- this.width = w;
163
- }
164
- return this;
165
- };
166
-
167
- // return height in pixels.
168
- $.jqplot.CanvasTextRenderer.prototype.getHeight = function(ctx) {
169
- return this.height;
170
- };
171
-
172
- // w - height in pt
173
- // set heigh in px
174
- $.jqplot.CanvasTextRenderer.prototype.setHeight = function(w) {
175
- if (!w) {
176
- //height = this.fontSize /0.75;
177
- this.height = this.normalizedFontSize * this.pt2px;
178
- }
179
- else {
180
- this.height = w;
181
- }
182
- return this;
183
- };
184
-
185
- $.jqplot.CanvasTextRenderer.prototype.letter = function (ch)
186
- {
187
- return this.letters[ch];
188
- };
189
-
190
- $.jqplot.CanvasTextRenderer.prototype.ascent = function()
191
- {
192
- return this.normalizedFontSize;
193
- };
194
-
195
- $.jqplot.CanvasTextRenderer.prototype.descent = function()
196
- {
197
- return 7.0*this.normalizedFontSize/25.0;
198
- };
199
-
200
- $.jqplot.CanvasTextRenderer.prototype.measure = function(ctx, str)
201
- {
202
- var total = 0;
203
- var len = str.length;
204
-
205
- for (var i = 0; i < len; i++) {
206
- var c = this.letter(str.charAt(i));
207
- if (c) {
208
- total += c.width * this.normalizedFontSize / 25.0 * this.fontStretch;
209
- }
210
- }
211
- return total;
212
- };
213
-
214
- $.jqplot.CanvasTextRenderer.prototype.draw = function(ctx,str)
215
- {
216
- var x = 0;
217
- // leave room at bottom for descenders.
218
- var y = this.height*0.72;
219
- var total = 0;
220
- var len = str.length;
221
- var mag = this.normalizedFontSize / 25.0;
222
-
223
- ctx.save();
224
- var tx, ty;
225
-
226
- // 1st quadrant
227
- if ((-Math.PI/2 <= this.angle && this.angle <= 0) || (Math.PI*3/2 <= this.angle && this.angle <= Math.PI*2)) {
228
- tx = 0;
229
- ty = -Math.sin(this.angle) * this.width;
230
- }
231
- // 4th quadrant
232
- else if ((0 < this.angle && this.angle <= Math.PI/2) || (-Math.PI*2 <= this.angle && this.angle <= -Math.PI*3/2)) {
233
- tx = Math.sin(this.angle) * this.height;
234
- ty = 0;
235
- }
236
- // 2nd quadrant
237
- else if ((-Math.PI < this.angle && this.angle < -Math.PI/2) || (Math.PI <= this.angle && this.angle <= Math.PI*3/2)) {
238
- tx = -Math.cos(this.angle) * this.width;
239
- ty = -Math.sin(this.angle) * this.width - Math.cos(this.angle) * this.height;
240
- }
241
- // 3rd quadrant
242
- else if ((-Math.PI*3/2 < this.angle && this.angle < Math.PI) || (Math.PI/2 < this.angle && this.angle < Math.PI)) {
243
- tx = Math.sin(this.angle) * this.height - Math.cos(this.angle)*this.width;
244
- ty = -Math.cos(this.angle) * this.height;
245
- }
246
-
247
- ctx.strokeStyle = this.fillStyle;
248
- ctx.fillStyle = this.fillStyle;
249
- ctx.translate(tx, ty);
250
- ctx.rotate(this.angle);
251
- ctx.lineCap = "round";
252
- // multiplier was 2.0
253
- var fact = (this.normalizedFontSize > 30) ? 2.0 : 2 + (30 - this.normalizedFontSize)/20;
254
- ctx.lineWidth = fact * mag * this.fontWeight2Float(this.fontWeight);
255
-
256
- for ( var i = 0; i < len; i++) {
257
- var c = this.letter( str.charAt(i));
258
- if ( !c) {
259
- continue;
260
- }
261
-
262
- ctx.beginPath();
263
-
264
- var penUp = 1;
265
- var needStroke = 0;
266
- for ( var j = 0; j < c.points.length; j++) {
267
- var a = c.points[j];
268
- if ( a[0] == -1 && a[1] == -1) {
269
- penUp = 1;
270
- continue;
271
- }
272
- if ( penUp) {
273
- ctx.moveTo( x + a[0]*mag*this.fontStretch, y - a[1]*mag);
274
- penUp = false;
275
- } else {
276
- ctx.lineTo( x + a[0]*mag*this.fontStretch, y - a[1]*mag);
277
- }
278
- }
279
- ctx.stroke();
280
- x += c.width*mag*this.fontStretch;
281
- }
282
- ctx.restore();
283
- return total;
284
- };
285
-
286
- $.jqplot.CanvasTextRenderer.prototype.letters = {
287
- ' ': { width: 16, points: [] },
288
- '!': { width: 10, points: [[5,21],[5,7],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]] },
289
- '"': { width: 16, points: [[4,21],[4,14],[-1,-1],[12,21],[12,14]] },
290
- '#': { width: 21, points: [[11,25],[4,-7],[-1,-1],[17,25],[10,-7],[-1,-1],[4,12],[18,12],[-1,-1],[3,6],[17,6]] },
291
- '$': { width: 20, points: [[8,25],[8,-4],[-1,-1],[12,25],[12,-4],[-1,-1],[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]] },
292
- '%': { width: 24, points: [[21,21],[3,0],[-1,-1],[8,21],[10,19],[10,17],[9,15],[7,14],[5,14],[3,16],[3,18],[4,20],[6,21],[8,21],[10,20],[13,19],[16,19],[19,20],[21,21],[-1,-1],[17,7],[15,6],[14,4],[14,2],[16,0],[18,0],[20,1],[21,3],[21,5],[19,7],[17,7]] },
293
- '&': { width: 26, points: [[23,12],[23,13],[22,14],[21,14],[20,13],[19,11],[17,6],[15,3],[13,1],[11,0],[7,0],[5,1],[4,2],[3,4],[3,6],[4,8],[5,9],[12,13],[13,14],[14,16],[14,18],[13,20],[11,21],[9,20],[8,18],[8,16],[9,13],[11,10],[16,3],[18,1],[20,0],[22,0],[23,1],[23,2]] },
294
- '\'': { width: 10, points: [[5,19],[4,20],[5,21],[6,20],[6,18],[5,16],[4,15]] },
295
- '(': { width: 14, points: [[11,25],[9,23],[7,20],[5,16],[4,11],[4,7],[5,2],[7,-2],[9,-5],[11,-7]] },
296
- ')': { width: 14, points: [[3,25],[5,23],[7,20],[9,16],[10,11],[10,7],[9,2],[7,-2],[5,-5],[3,-7]] },
297
- '*': { width: 16, points: [[8,21],[8,9],[-1,-1],[3,18],[13,12],[-1,-1],[13,18],[3,12]] },
298
- '+': { width: 26, points: [[13,18],[13,0],[-1,-1],[4,9],[22,9]] },
299
- ',': { width: 10, points: [[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]] },
300
- '-': { width: 18, points: [[6,9],[12,9]] },
301
- '.': { width: 10, points: [[5,2],[4,1],[5,0],[6,1],[5,2]] },
302
- '/': { width: 22, points: [[20,25],[2,-7]] },
303
- '0': { width: 20, points: [[9,21],[6,20],[4,17],[3,12],[3,9],[4,4],[6,1],[9,0],[11,0],[14,1],[16,4],[17,9],[17,12],[16,17],[14,20],[11,21],[9,21]] },
304
- '1': { width: 20, points: [[6,17],[8,18],[11,21],[11,0]] },
305
- '2': { width: 20, points: [[4,16],[4,17],[5,19],[6,20],[8,21],[12,21],[14,20],[15,19],[16,17],[16,15],[15,13],[13,10],[3,0],[17,0]] },
306
- '3': { width: 20, points: [[5,21],[16,21],[10,13],[13,13],[15,12],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]] },
307
- '4': { width: 20, points: [[13,21],[3,7],[18,7],[-1,-1],[13,21],[13,0]] },
308
- '5': { width: 20, points: [[15,21],[5,21],[4,12],[5,13],[8,14],[11,14],[14,13],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]] },
309
- '6': { width: 20, points: [[16,18],[15,20],[12,21],[10,21],[7,20],[5,17],[4,12],[4,7],[5,3],[7,1],[10,0],[11,0],[14,1],[16,3],[17,6],[17,7],[16,10],[14,12],[11,13],[10,13],[7,12],[5,10],[4,7]] },
310
- '7': { width: 20, points: [[17,21],[7,0],[-1,-1],[3,21],[17,21]] },
311
- '8': { width: 20, points: [[8,21],[5,20],[4,18],[4,16],[5,14],[7,13],[11,12],[14,11],[16,9],[17,7],[17,4],[16,2],[15,1],[12,0],[8,0],[5,1],[4,2],[3,4],[3,7],[4,9],[6,11],[9,12],[13,13],[15,14],[16,16],[16,18],[15,20],[12,21],[8,21]] },
312
- '9': { width: 20, points: [[16,14],[15,11],[13,9],[10,8],[9,8],[6,9],[4,11],[3,14],[3,15],[4,18],[6,20],[9,21],[10,21],[13,20],[15,18],[16,14],[16,9],[15,4],[13,1],[10,0],[8,0],[5,1],[4,3]] },
313
- ':': { width: 10, points: [[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]] },
314
- ';': { width: 10, points: [[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]] },
315
- '<': { width: 24, points: [[20,18],[4,9],[20,0]] },
316
- '=': { width: 26, points: [[4,12],[22,12],[-1,-1],[4,6],[22,6]] },
317
- '>': { width: 24, points: [[4,18],[20,9],[4,0]] },
318
- '?': { width: 18, points: [[3,16],[3,17],[4,19],[5,20],[7,21],[11,21],[13,20],[14,19],[15,17],[15,15],[14,13],[13,12],[9,10],[9,7],[-1,-1],[9,2],[8,1],[9,0],[10,1],[9,2]] },
319
- '@': { width: 27, points: [[18,13],[17,15],[15,16],[12,16],[10,15],[9,14],[8,11],[8,8],[9,6],[11,5],[14,5],[16,6],[17,8],[-1,-1],[12,16],[10,14],[9,11],[9,8],[10,6],[11,5],[-1,-1],[18,16],[17,8],[17,6],[19,5],[21,5],[23,7],[24,10],[24,12],[23,15],[22,17],[20,19],[18,20],[15,21],[12,21],[9,20],[7,19],[5,17],[4,15],[3,12],[3,9],[4,6],[5,4],[7,2],[9,1],[12,0],[15,0],[18,1],[20,2],[21,3],[-1,-1],[19,16],[18,8],[18,6],[19,5]] },
320
- 'A': { width: 18, points: [[9,21],[1,0],[-1,-1],[9,21],[17,0],[-1,-1],[4,7],[14,7]] },
321
- 'B': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[-1,-1],[4,11],[13,11],[16,10],[17,9],[18,7],[18,4],[17,2],[16,1],[13,0],[4,0]] },
322
- 'C': { width: 21, points: [[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5]] },
323
- 'D': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[11,21],[14,20],[16,18],[17,16],[18,13],[18,8],[17,5],[16,3],[14,1],[11,0],[4,0]] },
324
- 'E': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11],[-1,-1],[4,0],[17,0]] },
325
- 'F': { width: 18, points: [[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11]] },
326
- 'G': { width: 21, points: [[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[18,8],[-1,-1],[13,8],[18,8]] },
327
- 'H': { width: 22, points: [[4,21],[4,0],[-1,-1],[18,21],[18,0],[-1,-1],[4,11],[18,11]] },
328
- 'I': { width: 8, points: [[4,21],[4,0]] },
329
- 'J': { width: 16, points: [[12,21],[12,5],[11,2],[10,1],[8,0],[6,0],[4,1],[3,2],[2,5],[2,7]] },
330
- 'K': { width: 21, points: [[4,21],[4,0],[-1,-1],[18,21],[4,7],[-1,-1],[9,12],[18,0]] },
331
- 'L': { width: 17, points: [[4,21],[4,0],[-1,-1],[4,0],[16,0]] },
332
- 'M': { width: 24, points: [[4,21],[4,0],[-1,-1],[4,21],[12,0],[-1,-1],[20,21],[12,0],[-1,-1],[20,21],[20,0]] },
333
- 'N': { width: 22, points: [[4,21],[4,0],[-1,-1],[4,21],[18,0],[-1,-1],[18,21],[18,0]] },
334
- 'O': { width: 22, points: [[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21]] },
335
- 'P': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,14],[17,12],[16,11],[13,10],[4,10]] },
336
- 'Q': { width: 22, points: [[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21],[-1,-1],[12,4],[18,-2]] },
337
- 'R': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[4,11],[-1,-1],[11,11],[18,0]] },
338
- 'S': { width: 20, points: [[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]] },
339
- 'T': { width: 16, points: [[8,21],[8,0],[-1,-1],[1,21],[15,21]] },
340
- 'U': { width: 22, points: [[4,21],[4,6],[5,3],[7,1],[10,0],[12,0],[15,1],[17,3],[18,6],[18,21]] },
341
- 'V': { width: 18, points: [[1,21],[9,0],[-1,-1],[17,21],[9,0]] },
342
- 'W': { width: 24, points: [[2,21],[7,0],[-1,-1],[12,21],[7,0],[-1,-1],[12,21],[17,0],[-1,-1],[22,21],[17,0]] },
343
- 'X': { width: 20, points: [[3,21],[17,0],[-1,-1],[17,21],[3,0]] },
344
- 'Y': { width: 18, points: [[1,21],[9,11],[9,0],[-1,-1],[17,21],[9,11]] },
345
- 'Z': { width: 20, points: [[17,21],[3,0],[-1,-1],[3,21],[17,21],[-1,-1],[3,0],[17,0]] },
346
- '[': { width: 14, points: [[4,25],[4,-7],[-1,-1],[5,25],[5,-7],[-1,-1],[4,25],[11,25],[-1,-1],[4,-7],[11,-7]] },
347
- '\\': { width: 14, points: [[0,21],[14,-3]] },
348
- ']': { width: 14, points: [[9,25],[9,-7],[-1,-1],[10,25],[10,-7],[-1,-1],[3,25],[10,25],[-1,-1],[3,-7],[10,-7]] },
349
- '^': { width: 16, points: [[6,15],[8,18],[10,15],[-1,-1],[3,12],[8,17],[13,12],[-1,-1],[8,17],[8,0]] },
350
- '_': { width: 16, points: [[0,-2],[16,-2]] },
351
- '`': { width: 10, points: [[6,21],[5,20],[4,18],[4,16],[5,15],[6,16],[5,17]] },
352
- 'a': { width: 19, points: [[15,14],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
353
- 'b': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]] },
354
- 'c': { width: 18, points: [[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
355
- 'd': { width: 19, points: [[15,21],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
356
- 'e': { width: 18, points: [[3,8],[15,8],[15,10],[14,12],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
357
- 'f': { width: 12, points: [[10,21],[8,21],[6,20],[5,17],[5,0],[-1,-1],[2,14],[9,14]] },
358
- 'g': { width: 19, points: [[15,14],[15,-2],[14,-5],[13,-6],[11,-7],[8,-7],[6,-6],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
359
- 'h': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]] },
360
- 'i': { width: 8, points: [[3,21],[4,20],[5,21],[4,22],[3,21],[-1,-1],[4,14],[4,0]] },
361
- 'j': { width: 10, points: [[5,21],[6,20],[7,21],[6,22],[5,21],[-1,-1],[6,14],[6,-3],[5,-6],[3,-7],[1,-7]] },
362
- 'k': { width: 17, points: [[4,21],[4,0],[-1,-1],[14,14],[4,4],[-1,-1],[8,8],[15,0]] },
363
- 'l': { width: 8, points: [[4,21],[4,0]] },
364
- 'm': { width: 30, points: [[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0],[-1,-1],[15,10],[18,13],[20,14],[23,14],[25,13],[26,10],[26,0]] },
365
- 'n': { width: 19, points: [[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]] },
366
- 'o': { width: 19, points: [[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3],[16,6],[16,8],[15,11],[13,13],[11,14],[8,14]] },
367
- 'p': { width: 19, points: [[4,14],[4,-7],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]] },
368
- 'q': { width: 19, points: [[15,14],[15,-7],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
369
- 'r': { width: 13, points: [[4,14],[4,0],[-1,-1],[4,8],[5,11],[7,13],[9,14],[12,14]] },
370
- 's': { width: 17, points: [[14,11],[13,13],[10,14],[7,14],[4,13],[3,11],[4,9],[6,8],[11,7],[13,6],[14,4],[14,3],[13,1],[10,0],[7,0],[4,1],[3,3]] },
371
- 't': { width: 12, points: [[5,21],[5,4],[6,1],[8,0],[10,0],[-1,-1],[2,14],[9,14]] },
372
- 'u': { width: 19, points: [[4,14],[4,4],[5,1],[7,0],[10,0],[12,1],[15,4],[-1,-1],[15,14],[15,0]] },
373
- 'v': { width: 16, points: [[2,14],[8,0],[-1,-1],[14,14],[8,0]] },
374
- 'w': { width: 22, points: [[3,14],[7,0],[-1,-1],[11,14],[7,0],[-1,-1],[11,14],[15,0],[-1,-1],[19,14],[15,0]] },
375
- 'x': { width: 17, points: [[3,14],[14,0],[-1,-1],[14,14],[3,0]] },
376
- 'y': { width: 16, points: [[2,14],[8,0],[-1,-1],[14,14],[8,0],[6,-4],[4,-6],[2,-7],[1,-7]] },
377
- 'z': { width: 17, points: [[14,14],[3,0],[-1,-1],[3,14],[14,14],[-1,-1],[3,0],[14,0]] },
378
- '{': { width: 14, points: [[9,25],[7,24],[6,23],[5,21],[5,19],[6,17],[7,16],[8,14],[8,12],[6,10],[-1,-1],[7,24],[6,22],[6,20],[7,18],[8,17],[9,15],[9,13],[8,11],[4,9],[8,7],[9,5],[9,3],[8,1],[7,0],[6,-2],[6,-4],[7,-6],[-1,-1],[6,8],[8,6],[8,4],[7,2],[6,1],[5,-1],[5,-3],[6,-5],[7,-6],[9,-7]] },
379
- '|': { width: 8, points: [[4,25],[4,-7]] },
380
- '}': { width: 14, points: [[5,25],[7,24],[8,23],[9,21],[9,19],[8,17],[7,16],[6,14],[6,12],[8,10],[-1,-1],[7,24],[8,22],[8,20],[7,18],[6,17],[5,15],[5,13],[6,11],[10,9],[6,7],[5,5],[5,3],[6,1],[7,0],[8,-2],[8,-4],[7,-6],[-1,-1],[8,8],[6,6],[6,4],[7,2],[8,1],[9,-1],[9,-3],[8,-5],[7,-6],[5,-7]] },
381
- '~': { width: 24, points: [[3,6],[3,8],[4,11],[6,12],[8,12],[10,11],[14,8],[16,7],[18,7],[20,8],[21,10],[-1,-1],[3,8],[4,10],[6,11],[8,11],[10,10],[14,7],[16,6],[18,6],[20,7],[21,10],[21,12]] }
382
- };
383
-
384
- $.jqplot.CanvasFontRenderer = function(options) {
385
- options = options || {};
386
- if (!options.pt2px) {
387
- options.pt2px = 1.5;
388
- }
389
- $.jqplot.CanvasTextRenderer.call(this, options);
390
- };
391
-
392
- $.jqplot.CanvasFontRenderer.prototype = new $.jqplot.CanvasTextRenderer({});
393
- $.jqplot.CanvasFontRenderer.prototype.constructor = $.jqplot.CanvasFontRenderer;
394
-
395
- $.jqplot.CanvasFontRenderer.prototype.measure = function(ctx, str)
396
- {
397
- // var fstyle = this.fontStyle+' '+this.fontVariant+' '+this.fontWeight+' '+this.fontSize+' '+this.fontFamily;
398
- var fstyle = this.fontSize+' '+this.fontFamily;
399
- ctx.save();
400
- ctx.font = fstyle;
401
- var w = ctx.measureText(str).width;
402
- ctx.restore();
403
- return w;
404
- };
405
-
406
- $.jqplot.CanvasFontRenderer.prototype.draw = function(ctx, str)
407
- {
408
- var x = 0;
409
- // leave room at bottom for descenders.
410
- var y = this.height*0.72;
411
- //var y = 12;
412
-
413
- ctx.save();
414
- var tx, ty;
415
-
416
- // 1st quadrant
417
- if ((-Math.PI/2 <= this.angle && this.angle <= 0) || (Math.PI*3/2 <= this.angle && this.angle <= Math.PI*2)) {
418
- tx = 0;
419
- ty = -Math.sin(this.angle) * this.width;
420
- }
421
- // 4th quadrant
422
- else if ((0 < this.angle && this.angle <= Math.PI/2) || (-Math.PI*2 <= this.angle && this.angle <= -Math.PI*3/2)) {
423
- tx = Math.sin(this.angle) * this.height;
424
- ty = 0;
425
- }
426
- // 2nd quadrant
427
- else if ((-Math.PI < this.angle && this.angle < -Math.PI/2) || (Math.PI <= this.angle && this.angle <= Math.PI*3/2)) {
428
- tx = -Math.cos(this.angle) * this.width;
429
- ty = -Math.sin(this.angle) * this.width - Math.cos(this.angle) * this.height;
430
- }
431
- // 3rd quadrant
432
- else if ((-Math.PI*3/2 < this.angle && this.angle < Math.PI) || (Math.PI/2 < this.angle && this.angle < Math.PI)) {
433
- tx = Math.sin(this.angle) * this.height - Math.cos(this.angle)*this.width;
434
- ty = -Math.cos(this.angle) * this.height;
435
- }
436
- ctx.strokeStyle = this.fillStyle;
437
- ctx.fillStyle = this.fillStyle;
438
- // var fstyle = this.fontStyle+' '+this.fontVariant+' '+this.fontWeight+' '+this.fontSize+' '+this.fontFamily;
439
- var fstyle = this.fontSize+' '+this.fontFamily;
440
- ctx.font = fstyle;
441
- ctx.translate(tx, ty);
442
- ctx.rotate(this.angle);
443
- ctx.fillText(str, x, y);
444
- // ctx.strokeText(str, x, y);
445
-
446
- ctx.restore();
447
- };
448
-
1
+ /**
2
+ * jqPlot
3
+ * Pure JavaScript plotting plugin using jQuery
4
+ *
5
+ * Version: 1.0.9
6
+ * Revision: d96a669
7
+ *
8
+ * Copyright (c) 2009-2016 Chris Leonello
9
+ * jqPlot is currently available for use in all personal or commercial projects
10
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
11
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
12
+ * choose the license that best suits your project and use it accordingly.
13
+ *
14
+ * Although not required, the author would appreciate an email letting him
15
+ * know of any substantial use of jqPlot. You can reach the author at:
16
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
17
+ *
18
+ * If you are feeling kind and generous, consider supporting the project by
19
+ * making a donation at: http://www.jqplot.com/donate.php .
20
+ *
21
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
22
+ *
23
+ * version 2007.04.27
24
+ * author Ash Searle
25
+ * http://hexmen.com/blog/2007/03/printf-sprintf/
26
+ * http://hexmen.com/js/sprintf.js
27
+ * The author (Ash Searle) has placed this code in the public domain:
28
+ * "This code is unrestricted: you are free to use it however you like."
29
+ *
30
+ * included jsDate library by Chris Leonello:
31
+ *
32
+ * Copyright (c) 2010-2015 Chris Leonello
33
+ *
34
+ * jsDate is currently available for use in all personal or commercial projects
35
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
36
+ * choose the license that best suits your project and use it accordingly.
37
+ *
38
+ * jsDate borrows many concepts and ideas from the Date Instance
39
+ * Methods by Ken Snyder along with some parts of Ken's actual code.
40
+ *
41
+ * Ken's original Date Instance Methods and copyright notice:
42
+ *
43
+ * Ken Snyder (ken d snyder at gmail dot com)
44
+ * 2008-09-10
45
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
46
+ * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
47
+ *
48
+ * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
49
+ * Larry has generously given permission to adapt his code for inclusion
50
+ * into jqPlot.
51
+ *
52
+ * Larry's original code can be found here:
53
+ *
54
+ * https://github.com/lsiden/export-jqplot-to-png
55
+ *
56
+ *
57
+ */
58
+
59
+ (function($) {
60
+ // This code is a modified version of the canvastext.js code, copyright below:
61
+ //
62
+ // This code is released to the public domain by Jim Studt, 2007.
63
+ // He may keep some sort of up to date copy at http://www.federated.com/~jim/canvastext/
64
+ //
65
+ $.jqplot.CanvasTextRenderer = function(options){
66
+ this.fontStyle = 'normal'; // normal, italic, oblique [not implemented]
67
+ this.fontVariant = 'normal'; // normal, small caps [not implemented]
68
+ this.fontWeight = 'normal'; // normal, bold, bolder, lighter, 100 - 900
69
+ this.fontSize = '10px';
70
+ this.fontFamily = 'sans-serif';
71
+ this.fontStretch = 1.0;
72
+ this.fillStyle = '#666666';
73
+ this.angle = 0;
74
+ this.textAlign = 'start';
75
+ this.textBaseline = 'alphabetic';
76
+ this.text;
77
+ this.width;
78
+ this.height;
79
+ this.pt2px = 1.28;
80
+
81
+ $.extend(true, this, options);
82
+ this.normalizedFontSize = this.normalizeFontSize(this.fontSize);
83
+ this.setHeight();
84
+ };
85
+
86
+ $.jqplot.CanvasTextRenderer.prototype.init = function(options) {
87
+ $.extend(true, this, options);
88
+ this.normalizedFontSize = this.normalizeFontSize(this.fontSize);
89
+ this.setHeight();
90
+ };
91
+
92
+ // convert css spec into point size
93
+ // returns float
94
+ $.jqplot.CanvasTextRenderer.prototype.normalizeFontSize = function(sz) {
95
+ sz = String(sz);
96
+ var n = parseFloat(sz);
97
+ if (sz.indexOf('px') > -1) {
98
+ return n/this.pt2px;
99
+ }
100
+ else if (sz.indexOf('pt') > -1) {
101
+ return n;
102
+ }
103
+ else if (sz.indexOf('em') > -1) {
104
+ return n*12;
105
+ }
106
+ else if (sz.indexOf('%') > -1) {
107
+ return n*12/100;
108
+ }
109
+ // default to pixels;
110
+ else {
111
+ return n/this.pt2px;
112
+ }
113
+ };
114
+
115
+
116
+ $.jqplot.CanvasTextRenderer.prototype.fontWeight2Float = function(w) {
117
+ // w = normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900
118
+ // return values adjusted for Hershey font.
119
+ if (Number(w)) {
120
+ return w/400;
121
+ }
122
+ else {
123
+ switch (w) {
124
+ case 'normal':
125
+ return 1;
126
+ break;
127
+ case 'bold':
128
+ return 1.75;
129
+ break;
130
+ case 'bolder':
131
+ return 2.25;
132
+ break;
133
+ case 'lighter':
134
+ return 0.75;
135
+ break;
136
+ default:
137
+ return 1;
138
+ break;
139
+ }
140
+ }
141
+ };
142
+
143
+ $.jqplot.CanvasTextRenderer.prototype.getText = function() {
144
+ return this.text;
145
+ };
146
+
147
+ $.jqplot.CanvasTextRenderer.prototype.setText = function(t, ctx) {
148
+ this.text = t;
149
+ this.setWidth(ctx);
150
+ return this;
151
+ };
152
+
153
+ $.jqplot.CanvasTextRenderer.prototype.getWidth = function(ctx) {
154
+ return this.width;
155
+ };
156
+
157
+ $.jqplot.CanvasTextRenderer.prototype.setWidth = function(ctx, w) {
158
+ if (!w) {
159
+ this.width = this.measure(ctx, this.text);
160
+ }
161
+ else {
162
+ this.width = w;
163
+ }
164
+ return this;
165
+ };
166
+
167
+ // return height in pixels.
168
+ $.jqplot.CanvasTextRenderer.prototype.getHeight = function(ctx) {
169
+ return this.height;
170
+ };
171
+
172
+ // w - height in pt
173
+ // set heigh in px
174
+ $.jqplot.CanvasTextRenderer.prototype.setHeight = function(w) {
175
+ if (!w) {
176
+ //height = this.fontSize /0.75;
177
+ this.height = this.normalizedFontSize * this.pt2px;
178
+ }
179
+ else {
180
+ this.height = w;
181
+ }
182
+ return this;
183
+ };
184
+
185
+ $.jqplot.CanvasTextRenderer.prototype.letter = function (ch)
186
+ {
187
+ return this.letters[ch];
188
+ };
189
+
190
+ $.jqplot.CanvasTextRenderer.prototype.ascent = function()
191
+ {
192
+ return this.normalizedFontSize;
193
+ };
194
+
195
+ $.jqplot.CanvasTextRenderer.prototype.descent = function()
196
+ {
197
+ return 7.0*this.normalizedFontSize/25.0;
198
+ };
199
+
200
+ $.jqplot.CanvasTextRenderer.prototype.measure = function(ctx, str)
201
+ {
202
+ var total = 0;
203
+ var len = str.length;
204
+
205
+ for (var i = 0; i < len; i++) {
206
+ var c = this.letter(str.charAt(i));
207
+ if (c) {
208
+ total += c.width * this.normalizedFontSize / 25.0 * this.fontStretch;
209
+ }
210
+ }
211
+ return total;
212
+ };
213
+
214
+ $.jqplot.CanvasTextRenderer.prototype.draw = function(ctx,str)
215
+ {
216
+ var x = 0;
217
+ // leave room at bottom for descenders.
218
+ var y = this.height*0.72;
219
+ var total = 0;
220
+ var len = str.length;
221
+ var mag = this.normalizedFontSize / 25.0;
222
+
223
+ ctx.save();
224
+ var tx, ty;
225
+
226
+ // 1st quadrant
227
+ if ((-Math.PI/2 <= this.angle && this.angle <= 0) || (Math.PI*3/2 <= this.angle && this.angle <= Math.PI*2)) {
228
+ tx = 0;
229
+ ty = -Math.sin(this.angle) * this.width;
230
+ }
231
+ // 4th quadrant
232
+ else if ((0 < this.angle && this.angle <= Math.PI/2) || (-Math.PI*2 <= this.angle && this.angle <= -Math.PI*3/2)) {
233
+ tx = Math.sin(this.angle) * this.height;
234
+ ty = 0;
235
+ }
236
+ // 2nd quadrant
237
+ else if ((-Math.PI < this.angle && this.angle < -Math.PI/2) || (Math.PI <= this.angle && this.angle <= Math.PI*3/2)) {
238
+ tx = -Math.cos(this.angle) * this.width;
239
+ ty = -Math.sin(this.angle) * this.width - Math.cos(this.angle) * this.height;
240
+ }
241
+ // 3rd quadrant
242
+ else if ((-Math.PI*3/2 < this.angle && this.angle < Math.PI) || (Math.PI/2 < this.angle && this.angle < Math.PI)) {
243
+ tx = Math.sin(this.angle) * this.height - Math.cos(this.angle)*this.width;
244
+ ty = -Math.cos(this.angle) * this.height;
245
+ }
246
+
247
+ ctx.strokeStyle = this.fillStyle;
248
+ ctx.fillStyle = this.fillStyle;
249
+ ctx.translate(tx, ty);
250
+ ctx.rotate(this.angle);
251
+ ctx.lineCap = "round";
252
+ // multiplier was 2.0
253
+ var fact = (this.normalizedFontSize > 30) ? 2.0 : 2 + (30 - this.normalizedFontSize)/20;
254
+ ctx.lineWidth = fact * mag * this.fontWeight2Float(this.fontWeight);
255
+
256
+ for ( var i = 0; i < len; i++) {
257
+ var c = this.letter( str.charAt(i));
258
+ if ( !c) {
259
+ continue;
260
+ }
261
+
262
+ ctx.beginPath();
263
+
264
+ var penUp = 1;
265
+ var needStroke = 0;
266
+ for ( var j = 0; j < c.points.length; j++) {
267
+ var a = c.points[j];
268
+ if ( a[0] == -1 && a[1] == -1) {
269
+ penUp = 1;
270
+ continue;
271
+ }
272
+ if ( penUp) {
273
+ ctx.moveTo( x + a[0]*mag*this.fontStretch, y - a[1]*mag);
274
+ penUp = false;
275
+ } else {
276
+ ctx.lineTo( x + a[0]*mag*this.fontStretch, y - a[1]*mag);
277
+ }
278
+ }
279
+ ctx.stroke();
280
+ x += c.width*mag*this.fontStretch;
281
+ }
282
+ ctx.restore();
283
+ return total;
284
+ };
285
+
286
+ $.jqplot.CanvasTextRenderer.prototype.letters = {
287
+ ' ': { width: 16, points: [] },
288
+ '!': { width: 10, points: [[5,21],[5,7],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]] },
289
+ '"': { width: 16, points: [[4,21],[4,14],[-1,-1],[12,21],[12,14]] },
290
+ '#': { width: 21, points: [[11,25],[4,-7],[-1,-1],[17,25],[10,-7],[-1,-1],[4,12],[18,12],[-1,-1],[3,6],[17,6]] },
291
+ '$': { width: 20, points: [[8,25],[8,-4],[-1,-1],[12,25],[12,-4],[-1,-1],[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]] },
292
+ '%': { width: 24, points: [[21,21],[3,0],[-1,-1],[8,21],[10,19],[10,17],[9,15],[7,14],[5,14],[3,16],[3,18],[4,20],[6,21],[8,21],[10,20],[13,19],[16,19],[19,20],[21,21],[-1,-1],[17,7],[15,6],[14,4],[14,2],[16,0],[18,0],[20,1],[21,3],[21,5],[19,7],[17,7]] },
293
+ '&': { width: 26, points: [[23,12],[23,13],[22,14],[21,14],[20,13],[19,11],[17,6],[15,3],[13,1],[11,0],[7,0],[5,1],[4,2],[3,4],[3,6],[4,8],[5,9],[12,13],[13,14],[14,16],[14,18],[13,20],[11,21],[9,20],[8,18],[8,16],[9,13],[11,10],[16,3],[18,1],[20,0],[22,0],[23,1],[23,2]] },
294
+ '\'': { width: 10, points: [[5,19],[4,20],[5,21],[6,20],[6,18],[5,16],[4,15]] },
295
+ '(': { width: 14, points: [[11,25],[9,23],[7,20],[5,16],[4,11],[4,7],[5,2],[7,-2],[9,-5],[11,-7]] },
296
+ ')': { width: 14, points: [[3,25],[5,23],[7,20],[9,16],[10,11],[10,7],[9,2],[7,-2],[5,-5],[3,-7]] },
297
+ '*': { width: 16, points: [[8,21],[8,9],[-1,-1],[3,18],[13,12],[-1,-1],[13,18],[3,12]] },
298
+ '+': { width: 26, points: [[13,18],[13,0],[-1,-1],[4,9],[22,9]] },
299
+ ',': { width: 10, points: [[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]] },
300
+ '-': { width: 18, points: [[6,9],[12,9]] },
301
+ '.': { width: 10, points: [[5,2],[4,1],[5,0],[6,1],[5,2]] },
302
+ '/': { width: 22, points: [[20,25],[2,-7]] },
303
+ '0': { width: 20, points: [[9,21],[6,20],[4,17],[3,12],[3,9],[4,4],[6,1],[9,0],[11,0],[14,1],[16,4],[17,9],[17,12],[16,17],[14,20],[11,21],[9,21]] },
304
+ '1': { width: 20, points: [[6,17],[8,18],[11,21],[11,0]] },
305
+ '2': { width: 20, points: [[4,16],[4,17],[5,19],[6,20],[8,21],[12,21],[14,20],[15,19],[16,17],[16,15],[15,13],[13,10],[3,0],[17,0]] },
306
+ '3': { width: 20, points: [[5,21],[16,21],[10,13],[13,13],[15,12],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]] },
307
+ '4': { width: 20, points: [[13,21],[3,7],[18,7],[-1,-1],[13,21],[13,0]] },
308
+ '5': { width: 20, points: [[15,21],[5,21],[4,12],[5,13],[8,14],[11,14],[14,13],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]] },
309
+ '6': { width: 20, points: [[16,18],[15,20],[12,21],[10,21],[7,20],[5,17],[4,12],[4,7],[5,3],[7,1],[10,0],[11,0],[14,1],[16,3],[17,6],[17,7],[16,10],[14,12],[11,13],[10,13],[7,12],[5,10],[4,7]] },
310
+ '7': { width: 20, points: [[17,21],[7,0],[-1,-1],[3,21],[17,21]] },
311
+ '8': { width: 20, points: [[8,21],[5,20],[4,18],[4,16],[5,14],[7,13],[11,12],[14,11],[16,9],[17,7],[17,4],[16,2],[15,1],[12,0],[8,0],[5,1],[4,2],[3,4],[3,7],[4,9],[6,11],[9,12],[13,13],[15,14],[16,16],[16,18],[15,20],[12,21],[8,21]] },
312
+ '9': { width: 20, points: [[16,14],[15,11],[13,9],[10,8],[9,8],[6,9],[4,11],[3,14],[3,15],[4,18],[6,20],[9,21],[10,21],[13,20],[15,18],[16,14],[16,9],[15,4],[13,1],[10,0],[8,0],[5,1],[4,3]] },
313
+ ':': { width: 10, points: [[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]] },
314
+ ';': { width: 10, points: [[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]] },
315
+ '<': { width: 24, points: [[20,18],[4,9],[20,0]] },
316
+ '=': { width: 26, points: [[4,12],[22,12],[-1,-1],[4,6],[22,6]] },
317
+ '>': { width: 24, points: [[4,18],[20,9],[4,0]] },
318
+ '?': { width: 18, points: [[3,16],[3,17],[4,19],[5,20],[7,21],[11,21],[13,20],[14,19],[15,17],[15,15],[14,13],[13,12],[9,10],[9,7],[-1,-1],[9,2],[8,1],[9,0],[10,1],[9,2]] },
319
+ '@': { width: 27, points: [[18,13],[17,15],[15,16],[12,16],[10,15],[9,14],[8,11],[8,8],[9,6],[11,5],[14,5],[16,6],[17,8],[-1,-1],[12,16],[10,14],[9,11],[9,8],[10,6],[11,5],[-1,-1],[18,16],[17,8],[17,6],[19,5],[21,5],[23,7],[24,10],[24,12],[23,15],[22,17],[20,19],[18,20],[15,21],[12,21],[9,20],[7,19],[5,17],[4,15],[3,12],[3,9],[4,6],[5,4],[7,2],[9,1],[12,0],[15,0],[18,1],[20,2],[21,3],[-1,-1],[19,16],[18,8],[18,6],[19,5]] },
320
+ 'A': { width: 18, points: [[9,21],[1,0],[-1,-1],[9,21],[17,0],[-1,-1],[4,7],[14,7]] },
321
+ 'B': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[-1,-1],[4,11],[13,11],[16,10],[17,9],[18,7],[18,4],[17,2],[16,1],[13,0],[4,0]] },
322
+ 'C': { width: 21, points: [[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5]] },
323
+ 'D': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[11,21],[14,20],[16,18],[17,16],[18,13],[18,8],[17,5],[16,3],[14,1],[11,0],[4,0]] },
324
+ 'E': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11],[-1,-1],[4,0],[17,0]] },
325
+ 'F': { width: 18, points: [[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11]] },
326
+ 'G': { width: 21, points: [[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[18,8],[-1,-1],[13,8],[18,8]] },
327
+ 'H': { width: 22, points: [[4,21],[4,0],[-1,-1],[18,21],[18,0],[-1,-1],[4,11],[18,11]] },
328
+ 'I': { width: 8, points: [[4,21],[4,0]] },
329
+ 'J': { width: 16, points: [[12,21],[12,5],[11,2],[10,1],[8,0],[6,0],[4,1],[3,2],[2,5],[2,7]] },
330
+ 'K': { width: 21, points: [[4,21],[4,0],[-1,-1],[18,21],[4,7],[-1,-1],[9,12],[18,0]] },
331
+ 'L': { width: 17, points: [[4,21],[4,0],[-1,-1],[4,0],[16,0]] },
332
+ 'M': { width: 24, points: [[4,21],[4,0],[-1,-1],[4,21],[12,0],[-1,-1],[20,21],[12,0],[-1,-1],[20,21],[20,0]] },
333
+ 'N': { width: 22, points: [[4,21],[4,0],[-1,-1],[4,21],[18,0],[-1,-1],[18,21],[18,0]] },
334
+ 'O': { width: 22, points: [[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21]] },
335
+ 'P': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,14],[17,12],[16,11],[13,10],[4,10]] },
336
+ 'Q': { width: 22, points: [[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21],[-1,-1],[12,4],[18,-2]] },
337
+ 'R': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[4,11],[-1,-1],[11,11],[18,0]] },
338
+ 'S': { width: 20, points: [[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]] },
339
+ 'T': { width: 16, points: [[8,21],[8,0],[-1,-1],[1,21],[15,21]] },
340
+ 'U': { width: 22, points: [[4,21],[4,6],[5,3],[7,1],[10,0],[12,0],[15,1],[17,3],[18,6],[18,21]] },
341
+ 'V': { width: 18, points: [[1,21],[9,0],[-1,-1],[17,21],[9,0]] },
342
+ 'W': { width: 24, points: [[2,21],[7,0],[-1,-1],[12,21],[7,0],[-1,-1],[12,21],[17,0],[-1,-1],[22,21],[17,0]] },
343
+ 'X': { width: 20, points: [[3,21],[17,0],[-1,-1],[17,21],[3,0]] },
344
+ 'Y': { width: 18, points: [[1,21],[9,11],[9,0],[-1,-1],[17,21],[9,11]] },
345
+ 'Z': { width: 20, points: [[17,21],[3,0],[-1,-1],[3,21],[17,21],[-1,-1],[3,0],[17,0]] },
346
+ '[': { width: 14, points: [[4,25],[4,-7],[-1,-1],[5,25],[5,-7],[-1,-1],[4,25],[11,25],[-1,-1],[4,-7],[11,-7]] },
347
+ '\\': { width: 14, points: [[0,21],[14,-3]] },
348
+ ']': { width: 14, points: [[9,25],[9,-7],[-1,-1],[10,25],[10,-7],[-1,-1],[3,25],[10,25],[-1,-1],[3,-7],[10,-7]] },
349
+ '^': { width: 16, points: [[6,15],[8,18],[10,15],[-1,-1],[3,12],[8,17],[13,12],[-1,-1],[8,17],[8,0]] },
350
+ '_': { width: 16, points: [[0,-2],[16,-2]] },
351
+ '`': { width: 10, points: [[6,21],[5,20],[4,18],[4,16],[5,15],[6,16],[5,17]] },
352
+ 'a': { width: 19, points: [[15,14],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
353
+ 'b': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]] },
354
+ 'c': { width: 18, points: [[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
355
+ 'd': { width: 19, points: [[15,21],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
356
+ 'e': { width: 18, points: [[3,8],[15,8],[15,10],[14,12],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
357
+ 'f': { width: 12, points: [[10,21],[8,21],[6,20],[5,17],[5,0],[-1,-1],[2,14],[9,14]] },
358
+ 'g': { width: 19, points: [[15,14],[15,-2],[14,-5],[13,-6],[11,-7],[8,-7],[6,-6],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
359
+ 'h': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]] },
360
+ 'i': { width: 8, points: [[3,21],[4,20],[5,21],[4,22],[3,21],[-1,-1],[4,14],[4,0]] },
361
+ 'j': { width: 10, points: [[5,21],[6,20],[7,21],[6,22],[5,21],[-1,-1],[6,14],[6,-3],[5,-6],[3,-7],[1,-7]] },
362
+ 'k': { width: 17, points: [[4,21],[4,0],[-1,-1],[14,14],[4,4],[-1,-1],[8,8],[15,0]] },
363
+ 'l': { width: 8, points: [[4,21],[4,0]] },
364
+ 'm': { width: 30, points: [[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0],[-1,-1],[15,10],[18,13],[20,14],[23,14],[25,13],[26,10],[26,0]] },
365
+ 'n': { width: 19, points: [[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]] },
366
+ 'o': { width: 19, points: [[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3],[16,6],[16,8],[15,11],[13,13],[11,14],[8,14]] },
367
+ 'p': { width: 19, points: [[4,14],[4,-7],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]] },
368
+ 'q': { width: 19, points: [[15,14],[15,-7],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
369
+ 'r': { width: 13, points: [[4,14],[4,0],[-1,-1],[4,8],[5,11],[7,13],[9,14],[12,14]] },
370
+ 's': { width: 17, points: [[14,11],[13,13],[10,14],[7,14],[4,13],[3,11],[4,9],[6,8],[11,7],[13,6],[14,4],[14,3],[13,1],[10,0],[7,0],[4,1],[3,3]] },
371
+ 't': { width: 12, points: [[5,21],[5,4],[6,1],[8,0],[10,0],[-1,-1],[2,14],[9,14]] },
372
+ 'u': { width: 19, points: [[4,14],[4,4],[5,1],[7,0],[10,0],[12,1],[15,4],[-1,-1],[15,14],[15,0]] },
373
+ 'v': { width: 16, points: [[2,14],[8,0],[-1,-1],[14,14],[8,0]] },
374
+ 'w': { width: 22, points: [[3,14],[7,0],[-1,-1],[11,14],[7,0],[-1,-1],[11,14],[15,0],[-1,-1],[19,14],[15,0]] },
375
+ 'x': { width: 17, points: [[3,14],[14,0],[-1,-1],[14,14],[3,0]] },
376
+ 'y': { width: 16, points: [[2,14],[8,0],[-1,-1],[14,14],[8,0],[6,-4],[4,-6],[2,-7],[1,-7]] },
377
+ 'z': { width: 17, points: [[14,14],[3,0],[-1,-1],[3,14],[14,14],[-1,-1],[3,0],[14,0]] },
378
+ '{': { width: 14, points: [[9,25],[7,24],[6,23],[5,21],[5,19],[6,17],[7,16],[8,14],[8,12],[6,10],[-1,-1],[7,24],[6,22],[6,20],[7,18],[8,17],[9,15],[9,13],[8,11],[4,9],[8,7],[9,5],[9,3],[8,1],[7,0],[6,-2],[6,-4],[7,-6],[-1,-1],[6,8],[8,6],[8,4],[7,2],[6,1],[5,-1],[5,-3],[6,-5],[7,-6],[9,-7]] },
379
+ '|': { width: 8, points: [[4,25],[4,-7]] },
380
+ '}': { width: 14, points: [[5,25],[7,24],[8,23],[9,21],[9,19],[8,17],[7,16],[6,14],[6,12],[8,10],[-1,-1],[7,24],[8,22],[8,20],[7,18],[6,17],[5,15],[5,13],[6,11],[10,9],[6,7],[5,5],[5,3],[6,1],[7,0],[8,-2],[8,-4],[7,-6],[-1,-1],[8,8],[6,6],[6,4],[7,2],[8,1],[9,-1],[9,-3],[8,-5],[7,-6],[5,-7]] },
381
+ '~': { width: 24, points: [[3,6],[3,8],[4,11],[6,12],[8,12],[10,11],[14,8],[16,7],[18,7],[20,8],[21,10],[-1,-1],[3,8],[4,10],[6,11],[8,11],[10,10],[14,7],[16,6],[18,6],[20,7],[21,10],[21,12]] }
382
+ };
383
+
384
+ $.jqplot.CanvasFontRenderer = function(options) {
385
+ options = options || {};
386
+ if (!options.pt2px) {
387
+ options.pt2px = 1.5;
388
+ }
389
+ $.jqplot.CanvasTextRenderer.call(this, options);
390
+ };
391
+
392
+ $.jqplot.CanvasFontRenderer.prototype = new $.jqplot.CanvasTextRenderer({});
393
+ $.jqplot.CanvasFontRenderer.prototype.constructor = $.jqplot.CanvasFontRenderer;
394
+
395
+ $.jqplot.CanvasFontRenderer.prototype.measure = function(ctx, str)
396
+ {
397
+ // var fstyle = this.fontStyle+' '+this.fontVariant+' '+this.fontWeight+' '+this.fontSize+' '+this.fontFamily;
398
+ var fstyle = this.fontSize+' '+this.fontFamily;
399
+ ctx.save();
400
+ ctx.font = fstyle;
401
+ var w = ctx.measureText(str).width;
402
+ ctx.restore();
403
+ return w;
404
+ };
405
+
406
+ $.jqplot.CanvasFontRenderer.prototype.draw = function(ctx, str)
407
+ {
408
+ var x = 0;
409
+ // leave room at bottom for descenders.
410
+ var y = this.height*0.72;
411
+ //var y = 12;
412
+
413
+ ctx.save();
414
+ var tx, ty;
415
+
416
+ // 1st quadrant
417
+ if ((-Math.PI/2 <= this.angle && this.angle <= 0) || (Math.PI*3/2 <= this.angle && this.angle <= Math.PI*2)) {
418
+ tx = 0;
419
+ ty = -Math.sin(this.angle) * this.width;
420
+ }
421
+ // 4th quadrant
422
+ else if ((0 < this.angle && this.angle <= Math.PI/2) || (-Math.PI*2 <= this.angle && this.angle <= -Math.PI*3/2)) {
423
+ tx = Math.sin(this.angle) * this.height;
424
+ ty = 0;
425
+ }
426
+ // 2nd quadrant
427
+ else if ((-Math.PI < this.angle && this.angle < -Math.PI/2) || (Math.PI <= this.angle && this.angle <= Math.PI*3/2)) {
428
+ tx = -Math.cos(this.angle) * this.width;
429
+ ty = -Math.sin(this.angle) * this.width - Math.cos(this.angle) * this.height;
430
+ }
431
+ // 3rd quadrant
432
+ else if ((-Math.PI*3/2 < this.angle && this.angle < Math.PI) || (Math.PI/2 < this.angle && this.angle < Math.PI)) {
433
+ tx = Math.sin(this.angle) * this.height - Math.cos(this.angle)*this.width;
434
+ ty = -Math.cos(this.angle) * this.height;
435
+ }
436
+ ctx.strokeStyle = this.fillStyle;
437
+ ctx.fillStyle = this.fillStyle;
438
+ // var fstyle = this.fontStyle+' '+this.fontVariant+' '+this.fontWeight+' '+this.fontSize+' '+this.fontFamily;
439
+ var fstyle = this.fontSize+' '+this.fontFamily;
440
+ ctx.font = fstyle;
441
+ ctx.translate(tx, ty);
442
+ ctx.rotate(this.angle);
443
+ ctx.fillText(str, x, y);
444
+ // ctx.strokeText(str, x, y);
445
+
446
+ ctx.restore();
447
+ };
448
+
449
449
  })(jQuery);