highcharts-rails 4.2.7 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.markdown +34 -0
  3. data/Gemfile +4 -0
  4. data/Rakefile +53 -32
  5. data/app/assets/javascripts/highcharts.js +18775 -17176
  6. data/app/assets/javascripts/highcharts/highcharts-3d.js +1849 -1563
  7. data/app/assets/javascripts/highcharts/highcharts-more.js +2162 -1988
  8. data/app/assets/javascripts/highcharts/modules/accessibility.js +1005 -0
  9. data/app/assets/javascripts/highcharts/modules/annotations.js +408 -401
  10. data/app/assets/javascripts/highcharts/modules/boost.js +561 -546
  11. data/app/assets/javascripts/highcharts/modules/broken-axis.js +330 -324
  12. data/app/assets/javascripts/highcharts/modules/data.js +973 -965
  13. data/app/assets/javascripts/highcharts/modules/drilldown.js +783 -723
  14. data/app/assets/javascripts/highcharts/modules/exporting.js +864 -785
  15. data/app/assets/javascripts/highcharts/modules/funnel.js +290 -306
  16. data/app/assets/javascripts/highcharts/modules/heatmap.js +701 -645
  17. data/app/assets/javascripts/highcharts/modules/no-data-to-display.js +150 -132
  18. data/app/assets/javascripts/highcharts/modules/offline-exporting.js +414 -355
  19. data/app/assets/javascripts/highcharts/modules/overlapping-datalabels.js +164 -0
  20. data/app/assets/javascripts/highcharts/modules/series-label.js +473 -448
  21. data/app/assets/javascripts/highcharts/modules/solid-gauge.js +279 -271
  22. data/app/assets/javascripts/highcharts/modules/treemap.js +921 -886
  23. data/app/assets/javascripts/highcharts/themes/dark-blue.js +307 -244
  24. data/app/assets/javascripts/highcharts/themes/dark-green.js +303 -244
  25. data/app/assets/javascripts/highcharts/themes/dark-unica.js +231 -201
  26. data/app/assets/javascripts/highcharts/themes/gray.js +314 -245
  27. data/app/assets/javascripts/highcharts/themes/grid-light.js +91 -66
  28. data/app/assets/javascripts/highcharts/themes/grid.js +124 -96
  29. data/app/assets/javascripts/highcharts/themes/sand-signika.js +119 -94
  30. data/app/assets/javascripts/highcharts/themes/skies.js +108 -85
  31. data/lib/highcharts/version.rb +1 -1
  32. metadata +13 -14
  33. data/app/assets/javascripts/highcharts/adapters/standalone-framework.js +0 -1
  34. data/app/assets/javascripts/highcharts/modules/canvas-tools.js +0 -3115
  35. data/app/assets/javascripts/highcharts/modules/map.js +0 -2117
@@ -1,279 +1,287 @@
1
1
  /**
2
- * @license Highcharts JS v4.2.7 (2016-09-21)
2
+ * @license Highcharts JS v5.0.0 (2016-09-29)
3
3
  * Solid angular gauge module
4
4
  *
5
5
  * (c) 2010-2016 Torstein Honsi
6
6
  *
7
7
  * License: www.highcharts.com/license
8
8
  */
9
-
10
- (function (factory) {
11
- if (typeof module === 'object' && module.exports) {
12
- module.exports = factory;
13
- } else {
14
- factory(Highcharts);
15
- }
16
- }(function (H) {
17
- 'use strict';
18
-
19
- var defaultPlotOptions = H.getOptions().plotOptions,
20
- pInt = H.pInt,
21
- pick = H.pick,
22
- each = H.each,
23
- isNumber = H.isNumber,
24
- colorAxisMethods,
25
- UNDEFINED;
26
-
27
- // The default options
28
- defaultPlotOptions.solidgauge = H.merge(defaultPlotOptions.gauge, {
29
- colorByPoint: true
30
- });
31
-
32
-
33
- // These methods are defined in the ColorAxis object, and copied here.
34
- // If we implement an AMD system we should make ColorAxis a dependency.
35
- colorAxisMethods = {
36
-
37
-
38
- initDataClasses: function (userOptions) {
39
- var axis = this,
40
- chart = this.chart,
41
- dataClasses,
42
- colorCounter = 0,
43
- options = this.options;
44
- this.dataClasses = dataClasses = [];
45
-
46
- each(userOptions.dataClasses, function (dataClass, i) {
47
- var colors;
48
-
49
- dataClass = H.merge(dataClass);
50
- dataClasses.push(dataClass);
51
- if (!dataClass.color) {
52
- if (options.dataClassColor === 'category') {
53
- colors = chart.options.colors;
54
- dataClass.color = colors[colorCounter++];
55
- // loop back to zero
56
- if (colorCounter === colors.length) {
57
- colorCounter = 0;
58
- }
59
- } else {
60
- dataClass.color = axis.tweenColors(H.Color(options.minColor), H.Color(options.maxColor), i / (userOptions.dataClasses.length - 1));
61
- }
62
- }
63
- });
64
- },
65
-
66
- initStops: function (userOptions) {
67
- this.stops = userOptions.stops || [
68
- [0, this.options.minColor],
69
- [1, this.options.maxColor]
70
- ];
71
- each(this.stops, function (stop) {
72
- stop.color = H.Color(stop[1]);
73
- });
74
- },
75
- /**
76
- * Translate from a value to a color
77
- */
78
- toColor: function (value, point) {
79
- var pos,
80
- stops = this.stops,
81
- from,
82
- to,
83
- color,
84
- dataClasses = this.dataClasses,
85
- dataClass,
86
- i;
87
-
88
- if (dataClasses) {
89
- i = dataClasses.length;
90
- while (i--) {
91
- dataClass = dataClasses[i];
92
- from = dataClass.from;
93
- to = dataClass.to;
94
- if ((from === UNDEFINED || value >= from) && (to === UNDEFINED || value <= to)) {
95
- color = dataClass.color;
96
- if (point) {
97
- point.dataClass = i;
98
- }
99
- break;
100
- }
101
- }
102
-
103
- } else {
104
-
105
- if (this.isLog) {
106
- value = this.val2lin(value);
107
- }
108
- pos = 1 - ((this.max - value) / (this.max - this.min));
109
- i = stops.length;
110
- while (i--) {
111
- if (pos > stops[i][0]) {
112
- break;
113
- }
114
- }
115
- from = stops[i] || stops[i + 1];
116
- to = stops[i + 1] || from;
117
-
118
- // The position within the gradient
119
- pos = 1 - (to[0] - pos) / ((to[0] - from[0]) || 1);
120
-
121
- color = this.tweenColors(
122
- from.color,
123
- to.color,
124
- pos
125
- );
126
- }
127
- return color;
128
- },
129
- /*
130
- * Return an intermediate color between two colors, according to pos where 0
131
- * is the from color and 1 is the to color.
132
- */
133
- tweenColors: function (from, to, pos) {
134
- // Check for has alpha, because rgba colors perform worse due to lack of
135
- // support in WebKit.
136
- var hasAlpha,
137
- ret;
138
-
139
- // Unsupported color, return to-color (#3920)
140
- if (!to.rgba.length || !from.rgba.length) {
141
- ret = to.input || 'none';
142
-
143
- // Interpolate
144
- } else {
145
- from = from.rgba;
146
- to = to.rgba;
147
- hasAlpha = (to[3] !== 1 || from[3] !== 1);
148
- ret = (hasAlpha ? 'rgba(' : 'rgb(') +
149
- Math.round(to[0] + (from[0] - to[0]) * (1 - pos)) + ',' +
150
- Math.round(to[1] + (from[1] - to[1]) * (1 - pos)) + ',' +
151
- Math.round(to[2] + (from[2] - to[2]) * (1 - pos)) +
152
- (hasAlpha ? (',' + (to[3] + (from[3] - to[3]) * (1 - pos))) : '') + ')';
153
- }
154
- return ret;
155
- }
156
- };
157
-
158
- /**
159
- * Handle animation of the color attributes directly
160
- */
161
- each(['fill', 'stroke'], function (prop) {
162
- H.Fx.prototype[prop + 'Setter'] = function () {
163
- this.elem.attr(prop, colorAxisMethods.tweenColors(H.Color(this.start), H.Color(this.end), this.pos));
164
- };
165
- });
166
-
167
- // The series prototype
168
- H.seriesTypes.solidgauge = H.extendClass(H.seriesTypes.gauge, {
169
- type: 'solidgauge',
170
- pointAttrToOptions: {}, // #4301, don't inherit line marker's attribs
171
- bindAxes: function () {
172
- var axis;
173
- H.seriesTypes.gauge.prototype.bindAxes.call(this);
174
-
175
- axis = this.yAxis;
176
- H.extend(axis, colorAxisMethods);
177
-
178
- // Prepare data classes
179
- if (axis.options.dataClasses) {
180
- axis.initDataClasses(axis.options);
181
- }
182
- axis.initStops(axis.options);
183
- },
184
-
185
- /**
186
- * Draw the points where each point is one needle
187
- */
188
- drawPoints: function () {
189
- var series = this,
190
- yAxis = series.yAxis,
191
- center = yAxis.center,
192
- options = series.options,
193
- renderer = series.chart.renderer,
194
- overshoot = options.overshoot,
195
- overshootVal = isNumber(overshoot) ? overshoot / 180 * Math.PI : 0;
196
-
197
- H.each(series.points, function (point) {
198
- var graphic = point.graphic,
199
- rotation = yAxis.startAngleRad + yAxis.translate(point.y, null, null, null, true),
200
- radius = (pInt(pick(point.options.radius, options.radius, 100)) * center[2]) / 200,
201
- innerRadius = (pInt(pick(point.options.innerRadius, options.innerRadius, 60)) * center[2]) / 200,
202
- shapeArgs,
203
- d,
204
- toColor = yAxis.toColor(point.y, point),
205
- axisMinAngle = Math.min(yAxis.startAngleRad, yAxis.endAngleRad),
206
- axisMaxAngle = Math.max(yAxis.startAngleRad, yAxis.endAngleRad),
207
- minAngle,
208
- maxAngle,
209
- attribs;
210
-
211
- if (toColor === 'none') { // #3708
212
- toColor = point.color || series.color || 'none';
213
- }
214
- if (toColor !== 'none') {
215
- point.color = toColor;
216
- }
217
-
218
- // Handle overshoot and clipping to axis max/min
219
- rotation = Math.max(axisMinAngle - overshootVal, Math.min(axisMaxAngle + overshootVal, rotation));
220
-
221
- // Handle the wrap option
222
- if (options.wrap === false) {
223
- rotation = Math.max(axisMinAngle, Math.min(axisMaxAngle, rotation));
224
- }
225
-
226
- minAngle = Math.min(rotation, yAxis.startAngleRad);
227
- maxAngle = Math.max(rotation, yAxis.startAngleRad);
228
-
229
- if (maxAngle - minAngle > 2 * Math.PI) {
230
- maxAngle = minAngle + 2 * Math.PI;
231
- }
232
-
233
- point.shapeArgs = shapeArgs = {
234
- x: center[0],
235
- y: center[1],
236
- r: radius,
237
- innerR: innerRadius,
238
- start: minAngle,
239
- end: maxAngle,
240
- fill: toColor
241
- };
242
- point.startR = radius; // For PieSeries.animate
243
-
244
- if (graphic) {
245
- d = shapeArgs.d;
246
- graphic.animate(shapeArgs);
247
- if (d) {
248
- shapeArgs.d = d; // animate alters it
249
- }
250
- } else {
251
- attribs = {
252
- stroke: options.borderColor || 'none',
253
- 'stroke-width': options.borderWidth || 0,
254
- fill: toColor,
255
- 'sweep-flag': 0
256
- };
257
- if (options.linecap !== 'square') {
258
- attribs['stroke-linecap'] = attribs['stroke-linejoin'] = 'round';
259
- }
260
- point.graphic = renderer.arc(shapeArgs)
261
- .attr(attribs)
262
- .add(series.group);
263
- }
264
- });
265
- },
266
-
267
- /**
268
- * Extend the pie slice animation by animating from start angle and up
269
- */
270
- animate: function (init) {
271
-
272
- if (!init) {
273
- this.startAngleRad = this.yAxis.startAngleRad;
274
- H.seriesTypes.pie.prototype.animate.call(this, init);
275
- }
276
- }
277
- });
278
-
9
+ (function(factory) {
10
+ if (typeof module === 'object' && module.exports) {
11
+ module.exports = factory;
12
+ } else {
13
+ factory(Highcharts);
14
+ }
15
+ }(function(Highcharts) {
16
+ (function(H) {
17
+ /**
18
+ * Solid angular gauge module
19
+ *
20
+ * (c) 2010-2016 Torstein Honsi
21
+ *
22
+ * License: www.highcharts.com/license
23
+ */
24
+
25
+ 'use strict';
26
+ var pInt = H.pInt,
27
+ pick = H.pick,
28
+ each = H.each,
29
+ isNumber = H.isNumber,
30
+ colorAxisMethods;
31
+
32
+ // These methods are defined in the ColorAxis object, and copied here.
33
+ // If we implement an AMD system we should make ColorAxis a dependency.
34
+ colorAxisMethods = {
35
+
36
+
37
+ initDataClasses: function(userOptions) {
38
+ var axis = this,
39
+ chart = this.chart,
40
+ dataClasses,
41
+ colorCounter = 0,
42
+ options = this.options;
43
+ this.dataClasses = dataClasses = [];
44
+
45
+ each(userOptions.dataClasses, function(dataClass, i) {
46
+ var colors;
47
+
48
+ dataClass = H.merge(dataClass);
49
+ dataClasses.push(dataClass);
50
+ if (!dataClass.color) {
51
+ if (options.dataClassColor === 'category') {
52
+ colors = chart.options.colors;
53
+ dataClass.color = colors[colorCounter++];
54
+ // loop back to zero
55
+ if (colorCounter === colors.length) {
56
+ colorCounter = 0;
57
+ }
58
+ } else {
59
+ dataClass.color = axis.tweenColors(H.color(options.minColor), H.color(options.maxColor), i / (userOptions.dataClasses.length - 1));
60
+ }
61
+ }
62
+ });
63
+ },
64
+
65
+ initStops: function(userOptions) {
66
+ this.stops = userOptions.stops || [
67
+ [0, this.options.minColor],
68
+ [1, this.options.maxColor]
69
+ ];
70
+ each(this.stops, function(stop) {
71
+ stop.color = H.color(stop[1]);
72
+ });
73
+ },
74
+ /**
75
+ * Translate from a value to a color
76
+ */
77
+ toColor: function(value, point) {
78
+ var pos,
79
+ stops = this.stops,
80
+ from,
81
+ to,
82
+ color,
83
+ dataClasses = this.dataClasses,
84
+ dataClass,
85
+ i;
86
+
87
+ if (dataClasses) {
88
+ i = dataClasses.length;
89
+ while (i--) {
90
+ dataClass = dataClasses[i];
91
+ from = dataClass.from;
92
+ to = dataClass.to;
93
+ if ((from === undefined || value >= from) && (to === undefined || value <= to)) {
94
+ color = dataClass.color;
95
+ if (point) {
96
+ point.dataClass = i;
97
+ }
98
+ break;
99
+ }
100
+ }
101
+
102
+ } else {
103
+
104
+ if (this.isLog) {
105
+ value = this.val2lin(value);
106
+ }
107
+ pos = 1 - ((this.max - value) / (this.max - this.min));
108
+ i = stops.length;
109
+ while (i--) {
110
+ if (pos > stops[i][0]) {
111
+ break;
112
+ }
113
+ }
114
+ from = stops[i] || stops[i + 1];
115
+ to = stops[i + 1] || from;
116
+
117
+ // The position within the gradient
118
+ pos = 1 - (to[0] - pos) / ((to[0] - from[0]) || 1);
119
+
120
+ color = this.tweenColors(
121
+ from.color,
122
+ to.color,
123
+ pos
124
+ );
125
+ }
126
+ return color;
127
+ },
128
+ /*
129
+ * Return an intermediate color between two colors, according to pos where 0
130
+ * is the from color and 1 is the to color.
131
+ */
132
+ tweenColors: function(from, to, pos) {
133
+ // Check for has alpha, because rgba colors perform worse due to lack of
134
+ // support in WebKit.
135
+ var hasAlpha,
136
+ ret;
137
+
138
+ // Unsupported color, return to-color (#3920)
139
+ if (!to.rgba.length || !from.rgba.length) {
140
+ ret = to.input || 'none';
141
+
142
+ // Interpolate
143
+ } else {
144
+ from = from.rgba;
145
+ to = to.rgba;
146
+ hasAlpha = (to[3] !== 1 || from[3] !== 1);
147
+ ret = (hasAlpha ? 'rgba(' : 'rgb(') +
148
+ Math.round(to[0] + (from[0] - to[0]) * (1 - pos)) + ',' +
149
+ Math.round(to[1] + (from[1] - to[1]) * (1 - pos)) + ',' +
150
+ Math.round(to[2] + (from[2] - to[2]) * (1 - pos)) +
151
+ (hasAlpha ? (',' + (to[3] + (from[3] - to[3]) * (1 - pos))) : '') + ')';
152
+ }
153
+ return ret;
154
+ }
155
+ };
156
+
157
+ /**
158
+ * Handle animation of the color attributes directly
159
+ */
160
+ each(['fill', 'stroke'], function(prop) {
161
+ H.Fx.prototype[prop + 'Setter'] = function() {
162
+ this.elem.attr(prop, colorAxisMethods.tweenColors(H.color(this.start), H.color(this.end), this.pos));
163
+ };
164
+ });
165
+
166
+ // The solidgauge series type
167
+ H.seriesType('solidgauge', 'gauge', {
168
+ colorByPoint: true
169
+
170
+ }, {
171
+ bindAxes: function() {
172
+ var axis;
173
+ H.seriesTypes.gauge.prototype.bindAxes.call(this);
174
+
175
+ axis = this.yAxis;
176
+ H.extend(axis, colorAxisMethods);
177
+
178
+ // Prepare data classes
179
+ if (axis.options.dataClasses) {
180
+ axis.initDataClasses(axis.options);
181
+ }
182
+ axis.initStops(axis.options);
183
+ },
184
+
185
+ /**
186
+ * Draw the points where each point is one needle
187
+ */
188
+ drawPoints: function() {
189
+ var series = this,
190
+ yAxis = series.yAxis,
191
+ center = yAxis.center,
192
+ options = series.options,
193
+ renderer = series.chart.renderer,
194
+ overshoot = options.overshoot,
195
+ overshootVal = isNumber(overshoot) ? overshoot / 180 * Math.PI : 0;
196
+
197
+ each(series.points, function(point) {
198
+ var graphic = point.graphic,
199
+ rotation = yAxis.startAngleRad + yAxis.translate(point.y, null, null, null, true),
200
+ radius = (pInt(pick(point.options.radius, options.radius, 100)) * center[2]) / 200,
201
+ innerRadius = (pInt(pick(point.options.innerRadius, options.innerRadius, 60)) * center[2]) / 200,
202
+ shapeArgs,
203
+ d,
204
+ toColor = yAxis.toColor(point.y, point),
205
+ axisMinAngle = Math.min(yAxis.startAngleRad, yAxis.endAngleRad),
206
+ axisMaxAngle = Math.max(yAxis.startAngleRad, yAxis.endAngleRad),
207
+ minAngle,
208
+ maxAngle;
209
+
210
+ if (toColor === 'none') { // #3708
211
+ toColor = point.color || series.color || 'none';
212
+ }
213
+ if (toColor !== 'none') {
214
+ point.color = toColor;
215
+ }
216
+
217
+ // Handle overshoot and clipping to axis max/min
218
+ rotation = Math.max(axisMinAngle - overshootVal, Math.min(axisMaxAngle + overshootVal, rotation));
219
+
220
+ // Handle the wrap option
221
+ if (options.wrap === false) {
222
+ rotation = Math.max(axisMinAngle, Math.min(axisMaxAngle, rotation));
223
+ }
224
+
225
+ minAngle = Math.min(rotation, yAxis.startAngleRad);
226
+ maxAngle = Math.max(rotation, yAxis.startAngleRad);
227
+
228
+ if (maxAngle - minAngle > 2 * Math.PI) {
229
+ maxAngle = minAngle + 2 * Math.PI;
230
+ }
231
+
232
+ point.shapeArgs = shapeArgs = {
233
+ x: center[0],
234
+ y: center[1],
235
+ r: radius,
236
+ innerR: innerRadius,
237
+ start: minAngle,
238
+ end: maxAngle,
239
+ fill: toColor
240
+ };
241
+ point.startR = radius; // For PieSeries.animate
242
+
243
+ if (graphic) {
244
+ d = shapeArgs.d;
245
+ graphic.animate(shapeArgs);
246
+ if (d) {
247
+ shapeArgs.d = d; // animate alters it
248
+ }
249
+ } else {
250
+ point.graphic = renderer.arc(shapeArgs)
251
+ .addClass('highcharts-point')
252
+ .attr({
253
+ fill: toColor,
254
+ 'sweep-flag': 0
255
+ })
256
+ .add(series.group);
257
+
258
+
259
+ if (options.linecap !== 'square') {
260
+ point.graphic.attr({
261
+ 'stroke-linecap': 'round',
262
+ 'stroke-linejoin': 'round'
263
+ });
264
+ }
265
+ point.graphic.attr({
266
+ stroke: options.borderColor || 'none',
267
+ 'stroke-width': options.borderWidth || 0
268
+ });
269
+
270
+ }
271
+ });
272
+ },
273
+
274
+ /**
275
+ * Extend the pie slice animation by animating from start angle and up
276
+ */
277
+ animate: function(init) {
278
+
279
+ if (!init) {
280
+ this.startAngleRad = this.yAxis.startAngleRad;
281
+ H.seriesTypes.pie.prototype.animate.call(this, init);
282
+ }
283
+ }
284
+ });
285
+
286
+ }(Highcharts));
279
287
  }));