highcharts-rails 3.0.1.5 → 3.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,354 @@
1
+ (function (Highcharts, HighchartsAdapter) {
2
+
3
+ var UNDEFINED,
4
+ ALIGN_FACTOR,
5
+ ALLOWED_SHAPES,
6
+ Chart = Highcharts.Chart,
7
+ extend = Highcharts.extend,
8
+ each = Highcharts.each,
9
+ defaultOptions;
10
+
11
+ defaultOptions = {
12
+ xAxis: 0,
13
+ yAxis: 0,
14
+ title: {
15
+ style: {},
16
+ text: "",
17
+ x: 0,
18
+ y: 0
19
+ },
20
+ shape: {
21
+ params: {
22
+ stroke: "#000000",
23
+ fill: "transparent",
24
+ strokeWidth: 2
25
+ }
26
+ }
27
+ };
28
+
29
+ ALLOWED_SHAPES = ["path", "rect", "circle"];
30
+
31
+ ALIGN_FACTOR = {
32
+ top: 0,
33
+ left: 0,
34
+ center: 0.5,
35
+ middle: 0.5,
36
+ bottom: 1,
37
+ right: 1
38
+ };
39
+
40
+
41
+ // Highcharts helper methods
42
+ var inArray = HighchartsAdapter.inArray,
43
+ merge = Highcharts.merge;
44
+
45
+ function isArray(obj) {
46
+ return Object.prototype.toString.call(obj) === '[object Array]';
47
+ }
48
+
49
+ function isNumber(n) {
50
+ return typeof n === 'number';
51
+ }
52
+
53
+ function defined(obj) {
54
+ return obj !== UNDEFINED && obj !== null;
55
+ }
56
+
57
+
58
+ // Define annotation prototype
59
+ var Annotation = function () {
60
+ this.init.apply(this, arguments);
61
+ };
62
+ Annotation.prototype = {
63
+ /*
64
+ * Initialize the annotation
65
+ */
66
+ init: function (chart, options) {
67
+ this.chart = chart;
68
+ this.options = merge({}, defaultOptions, options);
69
+ },
70
+
71
+ /*
72
+ * Render the annotation
73
+ */
74
+ render: function (redraw) {
75
+ var annotation = this,
76
+ chart = this.chart,
77
+ renderer = annotation.chart.renderer,
78
+ group = annotation.group,
79
+ title = annotation.title,
80
+ shape = annotation.shape,
81
+ options = annotation.options,
82
+ titleOptions = options.title,
83
+ shapeOptions = options.shape;
84
+
85
+ if (!group) {
86
+ group = annotation.group = renderer.g();
87
+ }
88
+
89
+ if (!title && titleOptions) {
90
+ title = annotation.title = renderer.label(titleOptions);
91
+ title.add(group);
92
+ }
93
+
94
+ if (!shape && shapeOptions && inArray(shapeOptions.type, ALLOWED_SHAPES) !== -1) {
95
+ shape = annotation.shape = renderer[options.shape.type](shapeOptions.params);
96
+ shape.add(group);
97
+ }
98
+
99
+ group.add(chart.annotations.group);
100
+
101
+ // link annotations to point or series
102
+ annotation.linkObjects();
103
+
104
+ if (redraw !== false) {
105
+ annotation.redraw();
106
+ }
107
+ },
108
+
109
+ /*
110
+ * Redraw the annotation title or shape after options update
111
+ */
112
+ redraw: function () {
113
+ var options = this.options,
114
+ chart = this.chart,
115
+ group = this.group,
116
+ title = this.title,
117
+ shape = this.shape,
118
+ linkedTo = this.linkedObject,
119
+ xAxis = chart.xAxis[options.xAxis],
120
+ yAxis = chart.yAxis[options.yAxis],
121
+ width = options.width,
122
+ height = options.height,
123
+ anchorY = ALIGN_FACTOR[options.anchorY],
124
+ anchorX = ALIGN_FACTOR[options.anchorX],
125
+ resetBBox = false,
126
+ shapeParams,
127
+ linkType,
128
+ series,
129
+ param,
130
+ bbox,
131
+ x,
132
+ y;
133
+
134
+ if (linkedTo) {
135
+ linkType = (linkedTo instanceof Highcharts.Point) ? 'point' :
136
+ (linkedTo instanceof Highcharts.Series) ? 'series' : null;
137
+
138
+ if (linkType === 'point') {
139
+ options.xValue = linkedTo.x;
140
+ options.yValue = linkedTo.y;
141
+ series = linkedTo.series;
142
+ } else if (linkType === 'series') {
143
+ series = linkedTo;
144
+ }
145
+
146
+ if (group.visibility !== series.group.visibility) {
147
+ group.attr({
148
+ visibility: series.group.visibility
149
+ });
150
+ }
151
+ }
152
+
153
+
154
+ // Based on given options find annotation pixel position
155
+ x = (defined(options.xValue) ? xAxis.toPixels(options.xValue + xAxis.minPointOffset) : options.x) - xAxis.minPixelPadding;
156
+ y = defined(options.yValue) ? yAxis.toPixels(options.yValue) : options.y;
157
+
158
+
159
+ if (isNaN(x) || isNaN(y) || !isNumber(x) || !isNumber(y)) {
160
+ return;
161
+ }
162
+
163
+
164
+ if (title) {
165
+ title.attr(options.title);
166
+ title.css(options.title.style);
167
+ resetBBox = true;
168
+ }
169
+
170
+ if (shape) {
171
+ shapeParams = extend({}, options.shape.params);
172
+
173
+ if (options.units === 'values') {
174
+ for (param in shapeParams) {
175
+ if (inArray(param, ['width', 'x']) > -1) {
176
+ shapeParams[param] = xAxis.translate(shapeParams[param]);
177
+ } else if (inArray(param, ['height', 'y']) > -1) {
178
+ shapeParams[param] = yAxis.translate(shapeParams[param]);
179
+ }
180
+ }
181
+
182
+ if (shapeParams.width) {
183
+ shapeParams.width -= xAxis.toPixels(0) - xAxis.left;
184
+ }
185
+
186
+ if (shapeParams.x) {
187
+ shapeParams.x += xAxis.minPixelPadding;
188
+ }
189
+
190
+ }
191
+
192
+ resetBBox = true;
193
+ shape.attr(shapeParams);
194
+ }
195
+
196
+ group.bBox = null;
197
+
198
+ // If annotation width or height is not defined in options use bounding box size
199
+ if (!isNumber(width)) {
200
+ bbox = group.getBBox();
201
+ width = bbox.width;
202
+ }
203
+
204
+ if (!isNumber(height)) {
205
+ // get bbox only if it wasn't set before
206
+ if (!bbox) {
207
+ bbox = group.getBBox();
208
+ }
209
+
210
+ height = bbox.height;
211
+ }
212
+
213
+ // Calculate anchor point
214
+ if (!isNumber(anchorX)) {
215
+ anchorX = ALIGN_FACTOR.center;
216
+ }
217
+
218
+ if (!isNumber(anchorY)) {
219
+ anchorY = ALIGN_FACTOR.center;
220
+ }
221
+
222
+ // Translate group according to its dimension and anchor point
223
+ x = x - width * anchorX;
224
+ y = y - height * anchorY;
225
+
226
+ if (chart.animation && defined(group.translateX) && defined(group.translateY)) {
227
+ group.animate({
228
+ translateX: x,
229
+ translateY: y
230
+ });
231
+ } else {
232
+ group.translate(x, y);
233
+ }
234
+ },
235
+
236
+ /*
237
+ * Destroy the annotation
238
+ */
239
+ destroy: function () {
240
+ var annotation = this,
241
+ chart = this.chart,
242
+ allItems = chart.annotations.allItems,
243
+ index = allItems.indexOf(annotation);
244
+
245
+ if (index > -1) {
246
+ allItems.splice(index, 1);
247
+ }
248
+
249
+ each(['title', 'shape', 'group'], function (element) {
250
+ if (annotation[element]) {
251
+ annotation[element].destroy();
252
+ annotation[element] = null;
253
+ }
254
+ });
255
+
256
+ annotation.group = annotation.title = annotation.shape = annotation.chart = annotation.options = null;
257
+ },
258
+
259
+ /*
260
+ * Update the annotation with a given options
261
+ */
262
+ update: function (options, redraw) {
263
+ extend(this.options, options);
264
+
265
+ // update link to point or series
266
+ this.linkObjects();
267
+
268
+ this.render(redraw);
269
+ },
270
+
271
+ linkObjects: function () {
272
+ var annotation = this,
273
+ chart = annotation.chart,
274
+ linkedTo = annotation.linkedObject,
275
+ linkedId = linkedTo && (linkedTo.id || linkedTo.options.id),
276
+ options = annotation.options,
277
+ id = options.linkedTo;
278
+
279
+ if (!defined(id)) {
280
+ annotation.linkedObject = null;
281
+ } else if (!defined(linkedTo) || id !== linkedId) {
282
+ annotation.linkedObject = chart.get(id);
283
+ }
284
+ }
285
+ };
286
+
287
+
288
+ // Add annotations methods to chart prototype
289
+ extend(Chart.prototype, {
290
+ annotations: {
291
+ /*
292
+ * Unified method for adding annotations to the chart
293
+ */
294
+ add: function (options, redraw) {
295
+ var annotations = this.allItems,
296
+ chart = this.chart,
297
+ item,
298
+ len;
299
+
300
+ if (!isArray(options)) {
301
+ options = [options];
302
+ }
303
+
304
+ len = options.length;
305
+
306
+ while (len--) {
307
+ item = new Annotation(chart, options[len]);
308
+ annotations.push(item);
309
+ item.render(redraw);
310
+ }
311
+ },
312
+
313
+ /**
314
+ * Redraw all annotations, method used in chart events
315
+ */
316
+ redraw: function () {
317
+ each(this.allItems, function (annotation) {
318
+ annotation.redraw();
319
+ });
320
+ }
321
+ }
322
+ });
323
+
324
+
325
+ // Initialize on chart load
326
+ Chart.prototype.callbacks.push(function (chart) {
327
+ var options = chart.options.annotations,
328
+ group;
329
+
330
+ group = chart.renderer.g("annotations");
331
+ group.attr({
332
+ zIndex: 7
333
+ });
334
+ group.add();
335
+
336
+ // initialize empty array for annotations
337
+ chart.annotations.allItems = [];
338
+
339
+ // link chart object to annotations
340
+ chart.annotations.chart = chart;
341
+
342
+ // link annotations group element to the chart
343
+ chart.annotations.group = group;
344
+
345
+ if (isArray(options) && options.length > 0) {
346
+ chart.annotations.add(chart.options.annotations);
347
+ }
348
+
349
+ // update annotations after chart redraw
350
+ Highcharts.addEvent(chart, 'redraw', function () {
351
+ chart.annotations.redraw();
352
+ });
353
+ });
354
+ }(Highcharts, HighchartsAdapter));
@@ -2908,7 +2908,7 @@ if (CanvasRenderingContext2D) {
2908
2908
  });
2909
2909
  }
2910
2910
  }/**
2911
- * @license Highcharts JS v3.0.1 (2013-04-09)
2911
+ * @license Highcharts JS v3.0.2 (2013-06-05)
2912
2912
  * CanVGRenderer Extension module
2913
2913
  *
2914
2914
  * (c) 2011-2012 Torstein Hønsi, Erik Olsson
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Highcharts JS v3.0.1 (2013-04-09)
2
+ * @license Highcharts JS v3.0.2 (2013-06-05)
3
3
  * Exporting module
4
4
  *
5
5
  * (c) 2010-2013 Torstein Hønsi
@@ -243,8 +243,7 @@ extend(Chart.prototype, {
243
243
  height: sourceHeight
244
244
  });
245
245
  options.exporting.enabled = false; // hide buttons in print
246
- options.chart.plotBackgroundImage = null; // the converter doesn't handle images
247
-
246
+
248
247
  // prepare for replicating the chart
249
248
  options.series = [];
250
249
  each(chart.series, function (serie) {
@@ -310,7 +309,7 @@ extend(Chart.prototype, {
310
309
  .replace(/width=([^" ]+)/g, 'width="$1"')
311
310
  .replace(/hc-svg-href="([^"]+)">/g, 'xlink:href="$1"/>')
312
311
  .replace(/id=([^" >]+)/g, 'id="$1"')
313
- .replace(/class=([^" ]+)/g, 'class="$1"')
312
+ .replace(/class=([^" >]+)/g, 'class="$1"')
314
313
  .replace(/ transform /g, ' ')
315
314
  .replace(/:(path|rect)/g, '$1')
316
315
  .replace(/style="([^"]+)"/g, function (s) {
@@ -339,11 +338,11 @@ extend(Chart.prototype, {
339
338
  chartExportingOptions = chart.options.exporting,
340
339
  svg = chart.getSVG(merge(
341
340
  { chart: { borderRadius: 0 } },
342
- chartExportingOptions,
341
+ chartExportingOptions.chartOptions,
343
342
  chartOptions,
344
343
  {
345
344
  exporting: {
346
- sourceWidth: options.sourceWidth || chartExportingOptions.sourceWidth, // docs: option and parameter in exportChart()
345
+ sourceWidth: options.sourceWidth || chartExportingOptions.sourceWidth, // docs: option and parameter in exportChart()
347
346
  sourceHeight: options.sourceHeight || chartExportingOptions.sourceHeight // docs
348
347
  }
349
348
  }
@@ -465,6 +464,7 @@ extend(Chart.prototype, {
465
464
  if (button) {
466
465
  button.setState(0);
467
466
  }
467
+ chart.openMenu = false;
468
468
  };
469
469
 
470
470
  // Hide the menu some time after mouse leave (#1357)
@@ -526,6 +526,7 @@ extend(Chart.prototype, {
526
526
  }
527
527
 
528
528
  css(menu, menuStyle);
529
+ chart.openMenu = true;
529
530
  },
530
531
 
531
532
  /**
@@ -645,9 +646,12 @@ extend(Chart.prototype, {
645
646
  // Destroy the extra buttons added
646
647
  for (i = 0; i < chart.exportSVGElements.length; i++) {
647
648
  elem = chart.exportSVGElements[i];
649
+
648
650
  // Destroy and null the svg/vml elements
649
- elem.onclick = elem.ontouchstart = null;
650
- chart.exportSVGElements[i] = elem.destroy();
651
+ if (elem) { // #1822
652
+ elem.onclick = elem.ontouchstart = null;
653
+ chart.exportSVGElements[i] = elem.destroy();
654
+ }
651
655
  }
652
656
 
653
657
  // Destroy the divs for the menu
@@ -17,7 +17,6 @@ Gem::Specification.new do |s|
17
17
  s.require_paths = ["lib"]
18
18
 
19
19
  s.add_dependency "railties", ">= 3.1"
20
- s.add_dependency "cocaine", "~> 0.4.0"
21
20
  s.add_development_dependency "bundler", "~> 1.0"
22
21
  s.add_development_dependency "rails", ">= 3.1"
23
22
  end
@@ -1,3 +1,3 @@
1
1
  module Highcharts
2
- VERSION = "3.0.1.5"
2
+ VERSION = "3.0.2"
3
3
  end
metadata CHANGED
@@ -2,14 +2,14 @@
2
2
  name: highcharts-rails
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 3.0.1.5
5
+ version: 3.0.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Per Christian B. Viken
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-08 00:00:00.000000000 Z
12
+ date: 2013-06-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties
@@ -27,22 +27,6 @@ dependencies:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
29
  version: '3.1'
30
- - !ruby/object:Gem::Dependency
31
- name: cocaine
32
- type: :runtime
33
- requirement: !ruby/object:Gem::Requirement
34
- none: false
35
- requirements:
36
- - - ~>
37
- - !ruby/object:Gem::Version
38
- version: 0.4.0
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- version: 0.4.0
46
30
  - !ruby/object:Gem::Dependency
47
31
  name: bundler
48
32
  type: :development
@@ -96,6 +80,7 @@ files:
96
80
  - app/assets/javascripts/highcharts/adapters/mootools.js
97
81
  - app/assets/javascripts/highcharts/adapters/prototype.js
98
82
  - app/assets/javascripts/highcharts/highcharts-more.js
83
+ - app/assets/javascripts/highcharts/modules/annotations.js
99
84
  - app/assets/javascripts/highcharts/modules/canvas-tools.js
100
85
  - app/assets/javascripts/highcharts/modules/data.js
101
86
  - app/assets/javascripts/highcharts/modules/exporting.js
@@ -107,7 +92,6 @@ files:
107
92
  - app/assets/javascripts/highcharts/themes/skies.js
108
93
  - highcharts-rails.gemspec
109
94
  - lib/highcharts-rails.rb
110
- - lib/highcharts/export_endpoint.rb
111
95
  - lib/highcharts/rails.rb
112
96
  - lib/highcharts/version.rb
113
97
  homepage: http://northblue.org/