highcharts-rails 5.0.0 → 5.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.markdown +99 -0
- data/Gemfile +1 -1
- data/README.markdown +2 -1
- data/Rakefile +28 -2
- data/app/assets/javascripts/highcharts.js +3935 -2584
- data/app/assets/javascripts/highcharts/highcharts-3d.js +44 -10
- data/app/assets/javascripts/highcharts/highcharts-more.js +32 -12
- data/app/assets/javascripts/highcharts/modules/accessibility.js +85 -18
- data/app/assets/javascripts/highcharts/modules/annotations.js +1 -1
- data/app/assets/javascripts/highcharts/modules/boost.js +34 -19
- data/app/assets/javascripts/highcharts/modules/broken-axis.js +1 -1
- data/app/assets/javascripts/highcharts/modules/data.js +2 -2
- data/app/assets/javascripts/highcharts/modules/drilldown.js +4 -3
- data/app/assets/javascripts/highcharts/modules/exporting.js +15 -14
- data/app/assets/javascripts/highcharts/modules/funnel.js +1 -1
- data/app/assets/javascripts/highcharts/modules/grid-axis.js +547 -0
- data/app/assets/javascripts/highcharts/modules/heatmap.js +17 -2
- data/app/assets/javascripts/highcharts/modules/no-data-to-display.js +1 -1
- data/app/assets/javascripts/highcharts/modules/offline-exporting.js +115 -73
- data/app/assets/javascripts/highcharts/modules/overlapping-datalabels.js +1 -1
- data/app/assets/javascripts/highcharts/modules/series-label.js +210 -148
- data/app/assets/javascripts/highcharts/modules/solid-gauge.js +30 -10
- data/app/assets/javascripts/highcharts/modules/treemap.js +6 -1
- data/app/assets/javascripts/highcharts/modules/xrange-series.js +278 -0
- data/lib/highcharts/version.rb +1 -1
- metadata +3 -1
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license Highcharts JS v5.0.
|
2
|
+
* @license Highcharts JS v5.0.3 (2016-11-18)
|
3
3
|
* Solid angular gauge module
|
4
4
|
*
|
5
5
|
* (c) 2010-2016 Torstein Honsi
|
@@ -23,6 +23,7 @@
|
|
23
23
|
*/
|
24
24
|
|
25
25
|
'use strict';
|
26
|
+
|
26
27
|
var pInt = H.pInt,
|
27
28
|
pick = H.pick,
|
28
29
|
each = H.each,
|
@@ -168,18 +169,23 @@
|
|
168
169
|
colorByPoint: true
|
169
170
|
|
170
171
|
}, {
|
171
|
-
bindAxes: function() {
|
172
|
-
var axis;
|
173
|
-
H.seriesTypes.gauge.prototype.bindAxes.call(this);
|
174
172
|
|
175
|
-
|
173
|
+
/**
|
174
|
+
* Extend the translate function to extend the Y axis with the necessary
|
175
|
+
* decoration (#5895).
|
176
|
+
*/
|
177
|
+
translate: function() {
|
178
|
+
var axis = this.yAxis;
|
176
179
|
H.extend(axis, colorAxisMethods);
|
177
180
|
|
178
181
|
// Prepare data classes
|
179
|
-
if (axis.options.dataClasses) {
|
182
|
+
if (!axis.dataClasses && axis.options.dataClasses) {
|
180
183
|
axis.initDataClasses(axis.options);
|
181
184
|
}
|
182
185
|
axis.initStops(axis.options);
|
186
|
+
|
187
|
+
// Generate points and inherit data label position
|
188
|
+
H.seriesTypes.gauge.prototype.translate.call(this);
|
183
189
|
},
|
184
190
|
|
185
191
|
/**
|
@@ -192,7 +198,21 @@
|
|
192
198
|
options = series.options,
|
193
199
|
renderer = series.chart.renderer,
|
194
200
|
overshoot = options.overshoot,
|
195
|
-
overshootVal = isNumber(overshoot) ? overshoot / 180 * Math.PI : 0
|
201
|
+
overshootVal = isNumber(overshoot) ? overshoot / 180 * Math.PI : 0,
|
202
|
+
thresholdAngleRad;
|
203
|
+
|
204
|
+
// Handle the threshold option
|
205
|
+
if (isNumber(options.threshold)) {
|
206
|
+
thresholdAngleRad = yAxis.startAngleRad + yAxis.translate(
|
207
|
+
options.threshold,
|
208
|
+
null,
|
209
|
+
null,
|
210
|
+
null,
|
211
|
+
true
|
212
|
+
);
|
213
|
+
}
|
214
|
+
this.thresholdAngleRad = pick(thresholdAngleRad, yAxis.startAngleRad);
|
215
|
+
|
196
216
|
|
197
217
|
each(series.points, function(point) {
|
198
218
|
var graphic = point.graphic,
|
@@ -222,8 +242,8 @@
|
|
222
242
|
rotation = Math.max(axisMinAngle, Math.min(axisMaxAngle, rotation));
|
223
243
|
}
|
224
244
|
|
225
|
-
minAngle = Math.min(rotation,
|
226
|
-
maxAngle = Math.max(rotation,
|
245
|
+
minAngle = Math.min(rotation, series.thresholdAngleRad);
|
246
|
+
maxAngle = Math.max(rotation, series.thresholdAngleRad);
|
227
247
|
|
228
248
|
if (maxAngle - minAngle > 2 * Math.PI) {
|
229
249
|
maxAngle = minAngle + 2 * Math.PI;
|
@@ -277,7 +297,7 @@
|
|
277
297
|
animate: function(init) {
|
278
298
|
|
279
299
|
if (!init) {
|
280
|
-
this.startAngleRad = this.
|
300
|
+
this.startAngleRad = this.thresholdAngleRad;
|
281
301
|
H.seriesTypes.pie.prototype.animate.call(this, init);
|
282
302
|
}
|
283
303
|
}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license Highcharts JS v5.0.
|
2
|
+
* @license Highcharts JS v5.0.3 (2016-11-18)
|
3
3
|
*
|
4
4
|
* (c) 2014 Highsoft AS
|
5
5
|
* Authors: Jon Arild Nygard / Oystein Moseng
|
@@ -21,6 +21,7 @@
|
|
21
21
|
* License: www.highcharts.com/license
|
22
22
|
*/
|
23
23
|
'use strict';
|
24
|
+
|
24
25
|
var seriesType = H.seriesType,
|
25
26
|
seriesTypes = H.seriesTypes,
|
26
27
|
map = H.map,
|
@@ -29,6 +30,7 @@
|
|
29
30
|
noop = H.noop,
|
30
31
|
each = H.each,
|
31
32
|
grep = H.grep,
|
33
|
+
isNumber = H.isNumber,
|
32
34
|
pick = H.pick,
|
33
35
|
Series = H.Series,
|
34
36
|
stableSort = H.stableSort,
|
@@ -917,6 +919,9 @@
|
|
917
919
|
}
|
918
920
|
return className;
|
919
921
|
},
|
922
|
+
isValid: function() {
|
923
|
+
return isNumber(this.value);
|
924
|
+
},
|
920
925
|
setState: function(state) {
|
921
926
|
H.Point.prototype.setState.call(this, state);
|
922
927
|
this.graphic.attr({
|
@@ -0,0 +1,278 @@
|
|
1
|
+
/**
|
2
|
+
* @license Highcharts JS v5.0.3 (2016-11-18)
|
3
|
+
* X-range series
|
4
|
+
*
|
5
|
+
* (c) 2010-2016 Torstein Honsi, Lars A. V. Cabrera
|
6
|
+
*
|
7
|
+
* --- WORK IN PROGRESS ---
|
8
|
+
*
|
9
|
+
* License: www.highcharts.com/license
|
10
|
+
*/
|
11
|
+
(function(factory) {
|
12
|
+
if (typeof module === 'object' && module.exports) {
|
13
|
+
module.exports = factory;
|
14
|
+
} else {
|
15
|
+
factory(Highcharts);
|
16
|
+
}
|
17
|
+
}(function(Highcharts) {
|
18
|
+
(function(H) {
|
19
|
+
/**
|
20
|
+
* (c) 2014-2016 Highsoft AS
|
21
|
+
* Authors: Torstein Honsi, Lars A. V. Cabrera
|
22
|
+
*
|
23
|
+
* License: www.highcharts.com/license
|
24
|
+
*/
|
25
|
+
'use strict';
|
26
|
+
|
27
|
+
var defaultPlotOptions = H.getOptions().plotOptions,
|
28
|
+
color = H.Color,
|
29
|
+
columnType = H.seriesTypes.column,
|
30
|
+
each = H.each,
|
31
|
+
extendClass = H.extendClass,
|
32
|
+
isNumber = H.isNumber,
|
33
|
+
isObject = H.isObject,
|
34
|
+
merge = H.merge,
|
35
|
+
pick = H.pick,
|
36
|
+
seriesTypes = H.seriesTypes,
|
37
|
+
stop = H.stop,
|
38
|
+
wrap = H.wrap,
|
39
|
+
Axis = H.Axis,
|
40
|
+
Point = H.Point,
|
41
|
+
Series = H.Series,
|
42
|
+
pointFormat = '<span style="color:{point.color}">' +
|
43
|
+
'\u25CF' +
|
44
|
+
'</span> {series.name}: <b>{point.yCategory}</b><br/>',
|
45
|
+
xrange = 'xrange';
|
46
|
+
|
47
|
+
defaultPlotOptions.xrange = merge(defaultPlotOptions.column, {
|
48
|
+
tooltip: {
|
49
|
+
pointFormat: pointFormat
|
50
|
+
}
|
51
|
+
});
|
52
|
+
seriesTypes.xrange = extendClass(columnType, {
|
53
|
+
pointClass: extendClass(Point, {
|
54
|
+
// Add x2 and yCategory to the available properties for tooltip formats
|
55
|
+
getLabelConfig: function() {
|
56
|
+
var cfg = Point.prototype.getLabelConfig.call(this);
|
57
|
+
|
58
|
+
cfg.x2 = this.x2;
|
59
|
+
cfg.yCategory = this.yCategory = this.series.yAxis.categories && this.series.yAxis.categories[this.y];
|
60
|
+
return cfg;
|
61
|
+
}
|
62
|
+
}),
|
63
|
+
type: xrange,
|
64
|
+
forceDL: true,
|
65
|
+
parallelArrays: ['x', 'x2', 'y'],
|
66
|
+
requireSorting: false,
|
67
|
+
animate: seriesTypes.line.prototype.animate,
|
68
|
+
|
69
|
+
/**
|
70
|
+
* Borrow the column series metrics, but with swapped axes. This gives free access
|
71
|
+
* to features like groupPadding, grouping, pointWidth etc.
|
72
|
+
*/
|
73
|
+
getColumnMetrics: function() {
|
74
|
+
var metrics,
|
75
|
+
chart = this.chart;
|
76
|
+
|
77
|
+
function swapAxes() {
|
78
|
+
each(chart.series, function(s) {
|
79
|
+
var xAxis = s.xAxis;
|
80
|
+
s.xAxis = s.yAxis;
|
81
|
+
s.yAxis = xAxis;
|
82
|
+
});
|
83
|
+
}
|
84
|
+
|
85
|
+
swapAxes();
|
86
|
+
|
87
|
+
this.yAxis.closestPointRange = 1;
|
88
|
+
metrics = columnType.prototype.getColumnMetrics.call(this);
|
89
|
+
|
90
|
+
swapAxes();
|
91
|
+
|
92
|
+
return metrics;
|
93
|
+
},
|
94
|
+
|
95
|
+
/**
|
96
|
+
* Override cropData to show a point where x is outside visible range
|
97
|
+
* but x2 is outside.
|
98
|
+
*/
|
99
|
+
cropData: function(xData, yData, min, max) {
|
100
|
+
|
101
|
+
// Replace xData with x2Data to find the appropriate cropStart
|
102
|
+
var cropData = Series.prototype.cropData,
|
103
|
+
crop = cropData.call(this, this.x2Data, yData, min, max);
|
104
|
+
|
105
|
+
// Re-insert the cropped xData
|
106
|
+
crop.xData = xData.slice(crop.start, crop.end);
|
107
|
+
|
108
|
+
return crop;
|
109
|
+
},
|
110
|
+
|
111
|
+
translate: function() {
|
112
|
+
columnType.prototype.translate.apply(this, arguments);
|
113
|
+
var series = this,
|
114
|
+
xAxis = series.xAxis,
|
115
|
+
metrics = series.columnMetrics,
|
116
|
+
minPointLength = series.options.minPointLength || 0;
|
117
|
+
|
118
|
+
each(series.points, function(point) {
|
119
|
+
var plotX = point.plotX,
|
120
|
+
posX = pick(point.x2, point.x + (point.len || 0)),
|
121
|
+
plotX2 = xAxis.toPixels(posX, true),
|
122
|
+
width = plotX2 - plotX,
|
123
|
+
widthDifference,
|
124
|
+
shapeArgs,
|
125
|
+
partialFill;
|
126
|
+
|
127
|
+
if (minPointLength) {
|
128
|
+
widthDifference = minPointLength - width;
|
129
|
+
if (widthDifference < 0) {
|
130
|
+
widthDifference = 0;
|
131
|
+
}
|
132
|
+
plotX -= widthDifference / 2;
|
133
|
+
plotX2 += widthDifference / 2;
|
134
|
+
}
|
135
|
+
|
136
|
+
plotX = Math.max(plotX, -10);
|
137
|
+
plotX2 = Math.min(Math.max(plotX2, -10), xAxis.len + 10);
|
138
|
+
|
139
|
+
point.shapeArgs = {
|
140
|
+
x: plotX,
|
141
|
+
y: point.plotY + metrics.offset,
|
142
|
+
width: plotX2 - plotX,
|
143
|
+
height: metrics.width
|
144
|
+
};
|
145
|
+
point.tooltipPos[0] += width / 2;
|
146
|
+
point.tooltipPos[1] -= metrics.width / 2;
|
147
|
+
|
148
|
+
// Add a partShapeArgs to the point, based on the shapeArgs property
|
149
|
+
partialFill = point.partialFill;
|
150
|
+
if (partialFill) {
|
151
|
+
// Get the partial fill amount
|
152
|
+
if (isObject(partialFill)) {
|
153
|
+
partialFill = partialFill.amount;
|
154
|
+
}
|
155
|
+
// If it was not a number, assume 0
|
156
|
+
if (!isNumber(partialFill)) {
|
157
|
+
partialFill = 0;
|
158
|
+
}
|
159
|
+
shapeArgs = point.shapeArgs;
|
160
|
+
point.partShapeArgs = {
|
161
|
+
x: shapeArgs.x,
|
162
|
+
y: shapeArgs.y + 1,
|
163
|
+
width: shapeArgs.width * partialFill,
|
164
|
+
height: shapeArgs.height - 2
|
165
|
+
};
|
166
|
+
}
|
167
|
+
});
|
168
|
+
},
|
169
|
+
|
170
|
+
drawPoints: function() {
|
171
|
+
var series = this,
|
172
|
+
chart = this.chart,
|
173
|
+
options = series.options,
|
174
|
+
renderer = chart.renderer,
|
175
|
+
animationLimit = options.animationLimit || 250,
|
176
|
+
verb = chart.pointCount < animationLimit ? 'animate' : 'attr';
|
177
|
+
|
178
|
+
// draw the columns
|
179
|
+
each(series.points, function(point) {
|
180
|
+
var plotY = point.plotY,
|
181
|
+
graphic = point.graphic,
|
182
|
+
type = point.shapeType,
|
183
|
+
shapeArgs = point.shapeArgs,
|
184
|
+
partShapeArgs = point.partShapeArgs,
|
185
|
+
seriesOpts = series.options,
|
186
|
+
pfOptions = point.partialFill,
|
187
|
+
fill,
|
188
|
+
state = point.selected && 'select',
|
189
|
+
cutOff = options.stacking && !options.borderRadius;
|
190
|
+
|
191
|
+
if (isNumber(plotY) && point.y !== null) {
|
192
|
+
if (graphic) { // update
|
193
|
+
stop(graphic);
|
194
|
+
point.graphicOriginal[verb](
|
195
|
+
merge(shapeArgs)
|
196
|
+
);
|
197
|
+
if (partShapeArgs) {
|
198
|
+
point.graphicOverlay[verb](
|
199
|
+
merge(partShapeArgs)
|
200
|
+
);
|
201
|
+
}
|
202
|
+
|
203
|
+
} else {
|
204
|
+
point.graphic = graphic = renderer.g('point')
|
205
|
+
.attr({
|
206
|
+
'class': point.getClassName()
|
207
|
+
})
|
208
|
+
.add(point.group || series.group);
|
209
|
+
|
210
|
+
point.graphicOriginal = renderer[type](shapeArgs)
|
211
|
+
.addClass('highcharts-partfill-original')
|
212
|
+
.add(graphic);
|
213
|
+
if (partShapeArgs) {
|
214
|
+
point.graphicOverlay = renderer[type](partShapeArgs)
|
215
|
+
.addClass('highcharts-partfill-overlay')
|
216
|
+
.add(graphic);
|
217
|
+
}
|
218
|
+
}
|
219
|
+
|
220
|
+
|
221
|
+
// Presentational
|
222
|
+
point.graphicOriginal
|
223
|
+
.attr(series.pointAttribs(point, state))
|
224
|
+
.shadow(options.shadow, null, cutOff);
|
225
|
+
if (partShapeArgs) {
|
226
|
+
// Ensure pfOptions is an object
|
227
|
+
if (!isObject(pfOptions)) {
|
228
|
+
pfOptions = {};
|
229
|
+
}
|
230
|
+
if (isObject(seriesOpts.partialFill)) {
|
231
|
+
pfOptions = merge(pfOptions, seriesOpts.partialFill);
|
232
|
+
}
|
233
|
+
|
234
|
+
fill = pfOptions.fill ||
|
235
|
+
color(series.color).brighten(-0.3).get('rgb');
|
236
|
+
point.graphicOverlay
|
237
|
+
.attr(series.pointAttribs(point, state))
|
238
|
+
.attr('fill', fill)
|
239
|
+
.attr('stroke-width', 0)
|
240
|
+
.shadow(options.shadow, null, cutOff);
|
241
|
+
}
|
242
|
+
|
243
|
+
|
244
|
+
} else if (graphic) {
|
245
|
+
point.graphic = graphic.destroy(); // #1269
|
246
|
+
}
|
247
|
+
});
|
248
|
+
}
|
249
|
+
});
|
250
|
+
|
251
|
+
/**
|
252
|
+
* Max x2 should be considered in xAxis extremes
|
253
|
+
*/
|
254
|
+
wrap(Axis.prototype, 'getSeriesExtremes', function(proceed) {
|
255
|
+
var axis = this,
|
256
|
+
series = axis.series,
|
257
|
+
dataMax,
|
258
|
+
modMax;
|
259
|
+
|
260
|
+
proceed.call(this);
|
261
|
+
if (axis.isXAxis && series.type === xrange) {
|
262
|
+
dataMax = pick(axis.dataMax, Number.MIN_VALUE);
|
263
|
+
each(this.series, function(series) {
|
264
|
+
each(series.x2Data || [], function(val) {
|
265
|
+
if (val > dataMax) {
|
266
|
+
dataMax = val;
|
267
|
+
modMax = true;
|
268
|
+
}
|
269
|
+
});
|
270
|
+
});
|
271
|
+
if (modMax) {
|
272
|
+
axis.dataMax = dataMax;
|
273
|
+
}
|
274
|
+
}
|
275
|
+
});
|
276
|
+
|
277
|
+
}(Highcharts));
|
278
|
+
}));
|
data/lib/highcharts/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: highcharts-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.0.
|
4
|
+
version: 5.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Per Christian B. Viken
|
@@ -82,6 +82,7 @@ files:
|
|
82
82
|
- app/assets/javascripts/highcharts/modules/drilldown.js
|
83
83
|
- app/assets/javascripts/highcharts/modules/exporting.js
|
84
84
|
- app/assets/javascripts/highcharts/modules/funnel.js
|
85
|
+
- app/assets/javascripts/highcharts/modules/grid-axis.js
|
85
86
|
- app/assets/javascripts/highcharts/modules/heatmap.js
|
86
87
|
- app/assets/javascripts/highcharts/modules/no-data-to-display.js
|
87
88
|
- app/assets/javascripts/highcharts/modules/offline-exporting.js
|
@@ -89,6 +90,7 @@ files:
|
|
89
90
|
- app/assets/javascripts/highcharts/modules/series-label.js
|
90
91
|
- app/assets/javascripts/highcharts/modules/solid-gauge.js
|
91
92
|
- app/assets/javascripts/highcharts/modules/treemap.js
|
93
|
+
- app/assets/javascripts/highcharts/modules/xrange-series.js
|
92
94
|
- app/assets/javascripts/highcharts/themes/dark-blue.js
|
93
95
|
- app/assets/javascripts/highcharts/themes/dark-green.js
|
94
96
|
- app/assets/javascripts/highcharts/themes/dark-unica.js
|