highcharts-rails 5.0.12 → 5.0.13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.markdown +59 -0
- data/app/assets/javascripts/highcharts.js +6250 -788
- data/app/assets/javascripts/highcharts/highcharts-3d.js +210 -25
- data/app/assets/javascripts/highcharts/highcharts-more.js +908 -22
- data/app/assets/javascripts/highcharts/modules/accessibility.js +272 -64
- data/app/assets/javascripts/highcharts/modules/annotations.js +1 -1
- data/app/assets/javascripts/highcharts/modules/boost.js +89 -66
- data/app/assets/javascripts/highcharts/modules/broken-axis.js +65 -4
- data/app/assets/javascripts/highcharts/modules/data.js +1 -1
- data/app/assets/javascripts/highcharts/modules/drilldown.js +234 -17
- data/app/assets/javascripts/highcharts/modules/exporting.js +508 -69
- data/app/assets/javascripts/highcharts/modules/funnel.js +129 -8
- data/app/assets/javascripts/highcharts/modules/grid-axis.js +1 -1
- data/app/assets/javascripts/highcharts/modules/heatmap.js +361 -44
- data/app/assets/javascripts/highcharts/modules/no-data-to-display.js +64 -1
- data/app/assets/javascripts/highcharts/modules/offline-exporting.js +44 -44
- data/app/assets/javascripts/highcharts/modules/overlapping-datalabels.js +26 -3
- data/app/assets/javascripts/highcharts/modules/series-label.js +19 -1
- data/app/assets/javascripts/highcharts/modules/solid-gauge.js +14 -5
- data/app/assets/javascripts/highcharts/modules/stock.js +1122 -86
- data/app/assets/javascripts/highcharts/modules/treemap.js +265 -43
- data/app/assets/javascripts/highcharts/modules/xrange-series.js +1 -1
- data/lib/highcharts/version.rb +1 -1
- metadata +1 -1
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license Highcharts JS v5.0.
|
2
|
+
* @license Highcharts JS v5.0.13 (2017-07-27)
|
3
3
|
*
|
4
4
|
* (c) 2009-2017 Torstein Honsi
|
5
5
|
*
|
@@ -347,19 +347,80 @@
|
|
347
347
|
H.Series.prototype.gappedPath = function() {
|
348
348
|
var gapSize = this.options.gapSize,
|
349
349
|
points = this.points.slice(),
|
350
|
-
i = points.length - 1
|
350
|
+
i = points.length - 1,
|
351
|
+
yAxis = this.yAxis,
|
352
|
+
xRange,
|
353
|
+
stack;
|
354
|
+
|
355
|
+
/**
|
356
|
+
* Defines when to display a gap in the graph, together with the `gapUnit`
|
357
|
+
* option.
|
358
|
+
*
|
359
|
+
* When the `gapUnit` is `relative` (default), a gap size of 5 means
|
360
|
+
* that if the distance between two points is greater than five times
|
361
|
+
* that of the two closest points, the graph will be broken.
|
362
|
+
*
|
363
|
+
* When the `gapUnit` is `value`, the gap is based on absolute axis values,
|
364
|
+
* which on a datetime axis is milliseconds.
|
365
|
+
*
|
366
|
+
* In practice, this option is most often used to visualize gaps in
|
367
|
+
* time series. In a stock chart, intraday data is available for daytime
|
368
|
+
* hours, while gaps will appear in nights and weekends.
|
369
|
+
*
|
370
|
+
* @type {Number}
|
371
|
+
* @see [xAxis.breaks](#xAxis.breaks)
|
372
|
+
* @sample {highstock} stock/plotoptions/series-gapsize/
|
373
|
+
* Setting the gap size to 2 introduces gaps for weekends in daily
|
374
|
+
* datasets.
|
375
|
+
* @default 0
|
376
|
+
* @product highstock
|
377
|
+
* @apioption plotOptions.series.gapSize
|
378
|
+
*/
|
379
|
+
|
380
|
+
/**
|
381
|
+
* Together with `gapSize`, this option defines where to draw gaps in the
|
382
|
+
* graph.
|
383
|
+
*
|
384
|
+
* @type {String}
|
385
|
+
* @see [gapSize](plotOptions.series.gapSize)
|
386
|
+
* @default relative
|
387
|
+
* @validvalues ["relative", "value"]
|
388
|
+
* @since 5.0.13
|
389
|
+
* @product highstock
|
390
|
+
* @apioption plotOptions.series.gapUnit
|
391
|
+
*/
|
351
392
|
|
352
393
|
if (gapSize && i > 0) { // #5008
|
353
394
|
|
395
|
+
// Gap unit is relative
|
396
|
+
if (this.options.gapUnit !== 'value') {
|
397
|
+
gapSize *= this.closestPointRange;
|
398
|
+
}
|
399
|
+
|
354
400
|
// extension for ordinal breaks
|
355
401
|
while (i--) {
|
356
|
-
if (points[i + 1].x - points[i].x >
|
402
|
+
if (points[i + 1].x - points[i].x > gapSize) {
|
403
|
+
xRange = (points[i].x + points[i + 1].x) / 2;
|
404
|
+
|
357
405
|
points.splice( // insert after this one
|
358
406
|
i + 1,
|
359
407
|
0, {
|
360
|
-
isNull: true
|
408
|
+
isNull: true,
|
409
|
+
x: xRange
|
361
410
|
}
|
362
411
|
);
|
412
|
+
|
413
|
+
// For stacked chart generate empty stack items, #6546
|
414
|
+
if (this.options.stacking) {
|
415
|
+
stack = yAxis.stacks[this.stackKey][xRange] = new H.StackItem(
|
416
|
+
yAxis,
|
417
|
+
yAxis.options.stackLabels,
|
418
|
+
false,
|
419
|
+
xRange,
|
420
|
+
this.stack
|
421
|
+
);
|
422
|
+
stack.total = 0;
|
423
|
+
}
|
363
424
|
}
|
364
425
|
}
|
365
426
|
}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license Highcharts JS v5.0.
|
2
|
+
* @license Highcharts JS v5.0.13 (2017-07-27)
|
3
3
|
* Highcharts Drilldown module
|
4
4
|
*
|
5
5
|
* Author: Torstein Honsi
|
@@ -46,28 +46,158 @@
|
|
46
46
|
extend(defaultOptions.lang, {
|
47
47
|
drillUpText: '◁ Back to {series.name}'
|
48
48
|
});
|
49
|
+
|
50
|
+
/**
|
51
|
+
* Options for drill down, the concept of inspecting increasingly high
|
52
|
+
* resolution data through clicking on chart items like columns or pie slices.
|
53
|
+
*
|
54
|
+
* The drilldown feature requires the drilldown.js file to be loaded,
|
55
|
+
* found in the modules directory of the download package, or online at
|
56
|
+
* (code.highcharts.com/modules/drilldown.js)[code.highcharts.com/modules/drilldown.js].
|
57
|
+
*
|
58
|
+
* @type {Object}
|
59
|
+
* @optionparent drilldown
|
60
|
+
*/
|
49
61
|
defaultOptions.drilldown = {
|
50
62
|
|
63
|
+
|
64
|
+
/**
|
65
|
+
* Additional styles to apply to the X axis label for a point that
|
66
|
+
* has drilldown data. By default it is underlined and blue to invite
|
67
|
+
* to interaction.
|
68
|
+
*
|
69
|
+
* @type {CSSObject}
|
70
|
+
* @see In [styled mode](http://www.highcharts.com/docs/chart-design-and-
|
71
|
+
* style/style-by-css), active label styles can be set with the `.highcharts-
|
72
|
+
* drilldown-axis-label` class.
|
73
|
+
* @sample {highcharts} highcharts/drilldown/labels/ Label styles
|
74
|
+
* @default { "cursor": "pointer", "color": "#003399", "fontWeight": "bold", "textDecoration": "underline" }
|
75
|
+
* @since 3.0.8
|
76
|
+
* @product highcharts highmaps
|
77
|
+
*/
|
51
78
|
activeAxisLabelStyle: {
|
79
|
+
|
80
|
+
/**
|
81
|
+
*/
|
52
82
|
cursor: 'pointer',
|
83
|
+
|
84
|
+
/**
|
85
|
+
*/
|
53
86
|
color: '#003399',
|
87
|
+
|
88
|
+
/**
|
89
|
+
*/
|
54
90
|
fontWeight: 'bold',
|
91
|
+
|
92
|
+
/**
|
93
|
+
*/
|
55
94
|
textDecoration: 'underline'
|
56
95
|
},
|
96
|
+
|
97
|
+
/**
|
98
|
+
* Additional styles to apply to the data label of a point that has
|
99
|
+
* drilldown data. By default it is underlined and blue to invite to
|
100
|
+
* interaction.
|
101
|
+
*
|
102
|
+
* @type {CSSObject}
|
103
|
+
* @see In [styled mode](http://www.highcharts.com/docs/chart-design-and-
|
104
|
+
* style/style-by-css), active data label styles can be applied with
|
105
|
+
* the `.highcharts-drilldown-data-label` class.
|
106
|
+
* @sample {highcharts} highcharts/drilldown/labels/ Label styles
|
107
|
+
* @default { "cursor": "pointer", "color": "#003399", "fontWeight": "bold", "textDecoration": "underline" }
|
108
|
+
* @since 3.0.8
|
109
|
+
* @product highcharts highmaps
|
110
|
+
*/
|
57
111
|
activeDataLabelStyle: {
|
112
|
+
|
113
|
+
/**
|
114
|
+
*/
|
58
115
|
cursor: 'pointer',
|
116
|
+
|
117
|
+
/**
|
118
|
+
*/
|
59
119
|
color: '#003399',
|
120
|
+
|
121
|
+
/**
|
122
|
+
*/
|
60
123
|
fontWeight: 'bold',
|
124
|
+
|
125
|
+
/**
|
126
|
+
*/
|
61
127
|
textDecoration: 'underline'
|
62
128
|
},
|
63
129
|
|
130
|
+
|
131
|
+
/**
|
132
|
+
* Set the animation for all drilldown animations. Animation of a drilldown
|
133
|
+
* occurs when drilling between a column point and a column series,
|
134
|
+
* or a pie slice and a full pie series. Drilldown can still be used
|
135
|
+
* between series and points of different types, but animation will
|
136
|
+
* not occur.
|
137
|
+
*
|
138
|
+
* The animation can either be set as a boolean or a configuration
|
139
|
+
* object. If `true`, it will use the 'swing' jQuery easing and a duration
|
140
|
+
* of 500 ms. If used as a configuration object, the following properties
|
141
|
+
* are supported:
|
142
|
+
*
|
143
|
+
* <dl>
|
144
|
+
*
|
145
|
+
* <dt>duration</dt>
|
146
|
+
*
|
147
|
+
* <dd>The duration of the animation in milliseconds.</dd>
|
148
|
+
*
|
149
|
+
* <dt>easing</dt>
|
150
|
+
*
|
151
|
+
* <dd>A string reference to an easing function set on the `Math` object.
|
152
|
+
* See [the easing demo](http://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/plotoptions/series-
|
153
|
+
* animation-easing/).</dd>
|
154
|
+
*
|
155
|
+
* </dl>
|
156
|
+
*
|
157
|
+
* @type {Boolean|Object}
|
158
|
+
* @since 3.0.8
|
159
|
+
* @product highcharts highmaps
|
160
|
+
*/
|
64
161
|
animation: {
|
162
|
+
|
163
|
+
/**
|
164
|
+
*/
|
65
165
|
duration: 500
|
66
166
|
},
|
167
|
+
|
168
|
+
/**
|
169
|
+
* Options for the drill up button that appears when drilling down
|
170
|
+
* on a series. The text for the button is defined in [lang.drillUpText](#lang.
|
171
|
+
* drillUpText).
|
172
|
+
*
|
173
|
+
* @type {Object}
|
174
|
+
* @sample {highcharts} highcharts/drilldown/drillupbutton/ Drill up button
|
175
|
+
* @sample {highmaps} highcharts/drilldown/drillupbutton/ Drill up button
|
176
|
+
* @since 3.0.8
|
177
|
+
* @product highcharts highmaps
|
178
|
+
*/
|
67
179
|
drillUpButton: {
|
180
|
+
|
181
|
+
/**
|
182
|
+
* Positioning options for the button within the `relativeTo` box.
|
183
|
+
* Available properties are `x`, `y`, `align` and `verticalAlign`.
|
184
|
+
*
|
185
|
+
* @type {Object}
|
186
|
+
* @since 3.0.8
|
187
|
+
* @product highcharts highmaps
|
188
|
+
*/
|
68
189
|
position: {
|
190
|
+
|
191
|
+
/**
|
192
|
+
*/
|
69
193
|
align: 'right',
|
194
|
+
|
195
|
+
/**
|
196
|
+
*/
|
70
197
|
x: -10,
|
198
|
+
|
199
|
+
/**
|
200
|
+
*/
|
71
201
|
y: 10
|
72
202
|
}
|
73
203
|
// relativeTo: 'plotBox'
|
@@ -75,6 +205,72 @@
|
|
75
205
|
}
|
76
206
|
};
|
77
207
|
|
208
|
+
|
209
|
+
|
210
|
+
/**
|
211
|
+
* Fires when a drilldown point is clicked, before the new series is
|
212
|
+
* added. This event is also utilized for async drilldown, where the
|
213
|
+
* seriesOptions are not added by option, but rather loaded async. Note
|
214
|
+
* that when clicking a category label to trigger multiple series drilldown,
|
215
|
+
* one `drilldown` event is triggered per point in the category.
|
216
|
+
*
|
217
|
+
* Event arguments:
|
218
|
+
*
|
219
|
+
* <dl>
|
220
|
+
*
|
221
|
+
* <dt>`category`</dt>
|
222
|
+
*
|
223
|
+
* <dd>If a category label was clicked, which index.</dd>
|
224
|
+
*
|
225
|
+
* <dt>`point`</dt>
|
226
|
+
*
|
227
|
+
* <dd>The originating point.</dd>
|
228
|
+
*
|
229
|
+
* <dt>`originalEvent`</dt>
|
230
|
+
*
|
231
|
+
* <dd>The original browser event (usually click) that triggered the
|
232
|
+
* drilldown.</dd>
|
233
|
+
*
|
234
|
+
* <dt>`points`</dt>
|
235
|
+
*
|
236
|
+
* <dd>If a category label was clicked, this array holds all points
|
237
|
+
* corresponing to the category.</dd>
|
238
|
+
*
|
239
|
+
* <dt>`seriesOptions`</dt>
|
240
|
+
*
|
241
|
+
* <dd>Options for the new series</dd>
|
242
|
+
*
|
243
|
+
* </dl>
|
244
|
+
*
|
245
|
+
* @type {Function}
|
246
|
+
* @context Chart
|
247
|
+
* @sample {highcharts} highcharts/drilldown/async/ Async drilldown
|
248
|
+
* @since 3.0.8
|
249
|
+
* @product highcharts highmaps
|
250
|
+
* @apioption chart.events.drilldown
|
251
|
+
*/
|
252
|
+
|
253
|
+
/**
|
254
|
+
* Fires when drilling up from a drilldown series.
|
255
|
+
*
|
256
|
+
* @type {Function}
|
257
|
+
* @context Chart
|
258
|
+
* @since 3.0.8
|
259
|
+
* @product highcharts highmaps
|
260
|
+
* @apioption chart.events.drillup
|
261
|
+
*/
|
262
|
+
|
263
|
+
/**
|
264
|
+
* In a chart with multiple drilldown series, this event fires after
|
265
|
+
* all the series have been drilled up.
|
266
|
+
*
|
267
|
+
* @type {Function}
|
268
|
+
* @context Chart
|
269
|
+
* @since 4.2.4
|
270
|
+
* @product highcharts highmaps
|
271
|
+
* @apioption chart.events.drillupall
|
272
|
+
*/
|
273
|
+
|
78
274
|
/**
|
79
275
|
* A general fadeIn method
|
80
276
|
*/
|
@@ -282,10 +478,10 @@
|
|
282
478
|
|
283
479
|
/**
|
284
480
|
* When the chart is drilled down to a child series, calling `chart.drillUp()`
|
285
|
-
* will drill up to the parent series.
|
481
|
+
* will drill up to the parent series. Requires the drilldown module.
|
286
482
|
*
|
483
|
+
* @function drillUp
|
287
484
|
* @memberOf Highcharts.Chart
|
288
|
-
* @name #drillUp
|
289
485
|
*/
|
290
486
|
Chart.prototype.drillUp = function() {
|
291
487
|
var chart = this,
|
@@ -380,8 +576,6 @@
|
|
380
576
|
};
|
381
577
|
|
382
578
|
|
383
|
-
ColumnSeries.prototype.supportsDrilldown = true;
|
384
|
-
|
385
579
|
/**
|
386
580
|
* When drilling up, keep the upper series invisible until the lower series has
|
387
581
|
* moved into place
|
@@ -550,7 +744,6 @@
|
|
550
744
|
|
551
745
|
if (PieSeries) {
|
552
746
|
extend(PieSeries.prototype, {
|
553
|
-
supportsDrilldown: true,
|
554
747
|
animateDrillupTo: ColumnSeries.prototype.animateDrillupTo,
|
555
748
|
animateDrillupFrom: ColumnSeries.prototype.animateDrillupFrom,
|
556
749
|
|
@@ -758,11 +951,19 @@
|
|
758
951
|
proceed.call(this);
|
759
952
|
|
760
953
|
each(this.points, function(point) {
|
761
|
-
var
|
954
|
+
var dataLabelsOptions = point.options.dataLabels,
|
955
|
+
pointCSS = pick(
|
956
|
+
point.dlOptions,
|
957
|
+
dataLabelsOptions && dataLabelsOptions.style, {}
|
958
|
+
);
|
959
|
+
|
762
960
|
if (point.drilldown && point.dataLabel) {
|
763
961
|
if (css.color === 'contrast') {
|
764
962
|
pointCSS.color = renderer.getContrast(point.color || this.color);
|
765
963
|
}
|
964
|
+
if (dataLabelsOptions && dataLabelsOptions.color) {
|
965
|
+
pointCSS.color = dataLabelsOptions.color;
|
966
|
+
}
|
766
967
|
point.dataLabel
|
767
968
|
.addClass('highcharts-drilldown-data-label');
|
768
969
|
|
@@ -775,26 +976,42 @@
|
|
775
976
|
}, this);
|
776
977
|
});
|
777
978
|
|
979
|
+
|
980
|
+
var applyCursorCSS = function(element, cursor, addClass) {
|
981
|
+
element[addClass ? 'addClass' : 'removeClass']('highcharts-drilldown-point');
|
982
|
+
|
983
|
+
|
984
|
+
element.css({
|
985
|
+
cursor: cursor
|
986
|
+
});
|
987
|
+
|
988
|
+
};
|
989
|
+
|
778
990
|
// Mark the trackers with a pointer
|
779
991
|
var drawTrackerWrapper = function(proceed) {
|
780
992
|
proceed.call(this);
|
781
993
|
each(this.points, function(point) {
|
782
994
|
if (point.drilldown && point.graphic) {
|
783
|
-
point.graphic
|
784
|
-
|
785
|
-
|
786
|
-
point.graphic.css({
|
787
|
-
cursor: 'pointer'
|
788
|
-
});
|
789
|
-
|
995
|
+
applyCursorCSS(point.graphic, 'pointer', true);
|
790
996
|
}
|
791
997
|
});
|
792
998
|
};
|
793
999
|
|
794
|
-
|
795
|
-
|
796
|
-
|
1000
|
+
var setPointStateWrapper = function(proceed, state) {
|
1001
|
+
var ret = proceed.apply(this, Array.prototype.slice.call(arguments, 1));
|
1002
|
+
|
1003
|
+
if (this.drilldown && this.series.halo && state === 'hover') {
|
1004
|
+
applyCursorCSS(this.series.halo, 'pointer', true);
|
1005
|
+
} else if (this.series.halo) {
|
1006
|
+
applyCursorCSS(this.series.halo, 'auto', false);
|
797
1007
|
}
|
1008
|
+
return ret;
|
1009
|
+
};
|
1010
|
+
|
1011
|
+
|
1012
|
+
objectEach(seriesTypes, function(seriesType) {
|
1013
|
+
wrap(seriesType.prototype, 'drawTracker', drawTrackerWrapper);
|
1014
|
+
wrap(seriesType.prototype.pointClass.prototype, 'setState', setPointStateWrapper);
|
798
1015
|
});
|
799
1016
|
|
800
1017
|
}(Highcharts));
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license Highcharts JS v5.0.
|
2
|
+
* @license Highcharts JS v5.0.13 (2017-07-27)
|
3
3
|
* Exporting module
|
4
4
|
*
|
5
5
|
* (c) 2010-2017 Torstein Honsi
|
@@ -49,6 +49,9 @@
|
|
49
49
|
isFirefoxBrowser = /firefox/i.test(userAgent);
|
50
50
|
|
51
51
|
// Add language
|
52
|
+
/**
|
53
|
+
* @apioption lang
|
54
|
+
*/
|
52
55
|
extend(defaultOptions.lang, {
|
53
56
|
printChart: 'Print chart',
|
54
57
|
downloadPNG: 'Download PNG image',
|
@@ -60,6 +63,10 @@
|
|
60
63
|
|
61
64
|
// Buttons and menus are collected in a separate config option set called 'navigation'.
|
62
65
|
// This can be extended later to add control buttons like zoom and pan right click menus.
|
66
|
+
|
67
|
+
/**
|
68
|
+
* @apioption navigation
|
69
|
+
*/
|
63
70
|
defaultOptions.navigation = {
|
64
71
|
buttonOptions: {
|
65
72
|
theme: {},
|
@@ -77,91 +84,503 @@
|
|
77
84
|
|
78
85
|
|
79
86
|
// Presentational attributes
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
87
|
+
|
88
|
+
merge(true, defaultOptions.navigation,
|
89
|
+
/**
|
90
|
+
* A collection of options for buttons and menus appearing in the exporting module.
|
91
|
+
* @type {Object}
|
92
|
+
* @optionparent navigation
|
93
|
+
*/
|
94
|
+
{
|
95
|
+
|
96
|
+
/**
|
97
|
+
* CSS styles for the popup menu appearing by default when the export
|
98
|
+
* icon is clicked. This menu is rendered in HTML.
|
99
|
+
*
|
100
|
+
* @type {CSSObject}
|
101
|
+
* @see In [styled mode](http://www.highcharts.com/docs/chart-design-and-
|
102
|
+
* style/style-by-css), the menu is styled with the `.highcharts-menu`
|
103
|
+
* class.
|
104
|
+
* @sample {highcharts} highcharts/navigation/menustyle/ Light gray menu background
|
105
|
+
* @sample {highstock} highcharts/navigation/menustyle/ Light gray menu background
|
106
|
+
* @sample {highmaps} highcharts/navigation/menustyle/ Light gray menu background
|
107
|
+
* @default { "border": "1px solid #999999", "background": "#ffffff", "padding": "5px 0" }
|
108
|
+
* @since 2.0
|
109
|
+
* @product highcharts highstock highmaps
|
110
|
+
*/
|
111
|
+
menuStyle: {
|
112
|
+
|
113
|
+
/**
|
114
|
+
*/
|
115
|
+
border: '1px solid #999999',
|
116
|
+
|
117
|
+
/**
|
118
|
+
*/
|
119
|
+
background: '#ffffff',
|
120
|
+
|
121
|
+
/**
|
122
|
+
*/
|
123
|
+
padding: '5px 0'
|
124
|
+
},
|
125
|
+
|
126
|
+
/**
|
127
|
+
* CSS styles for the individual items within the popup menu appearing
|
128
|
+
* by default when the export icon is clicked. The menu items are rendered
|
129
|
+
* in HTML.
|
130
|
+
*
|
131
|
+
* @type {CSSObject}
|
132
|
+
* @see In [styled mode](http://www.highcharts.com/docs/chart-design-and-
|
133
|
+
* style/style-by-css), the menu items are styled with the `.highcharts-
|
134
|
+
* menu-item` class.
|
135
|
+
* @sample {highcharts} highcharts/navigation/menuitemstyle/ Add a grey stripe to the left
|
136
|
+
* @sample {highstock} highcharts/navigation/menuitemstyle/ Add a grey stripe to the left
|
137
|
+
* @sample {highmaps} highcharts/navigation/menuitemstyle/ Add a grey stripe to the left
|
138
|
+
* @default { "padding": "0.5em 1em", "color": "#333333", "background": "none" }
|
139
|
+
* @since 2.0
|
140
|
+
* @product highcharts highstock highmaps
|
141
|
+
*/
|
142
|
+
menuItemStyle: {
|
143
|
+
|
144
|
+
/**
|
145
|
+
*/
|
146
|
+
padding: '0.5em 1em',
|
147
|
+
|
148
|
+
/**
|
149
|
+
*/
|
150
|
+
background: 'none',
|
151
|
+
|
152
|
+
/**
|
153
|
+
*/
|
154
|
+
color: '#333333',
|
155
|
+
|
156
|
+
/**
|
157
|
+
*/
|
158
|
+
fontSize: isTouchDevice ? '14px' : '11px',
|
159
|
+
|
160
|
+
/**
|
161
|
+
*/
|
162
|
+
transition: 'background 250ms, color 250ms'
|
163
|
+
},
|
164
|
+
|
165
|
+
/**
|
166
|
+
* CSS styles for the hover state of the individual items within the
|
167
|
+
* popup menu appearing by default when the export icon is clicked.
|
168
|
+
* The menu items are rendered in HTML.
|
169
|
+
*
|
170
|
+
* @type {CSSObject}
|
171
|
+
* @see In [styled mode](http://www.highcharts.com/docs/chart-design-and-
|
172
|
+
* style/style-by-css), the menu items are styled with the `.highcharts-
|
173
|
+
* menu-item` class.
|
174
|
+
* @sample {highcharts} highcharts/navigation/menuitemhoverstyle/ Bold text on hover
|
175
|
+
* @sample {highstock} highcharts/navigation/menuitemhoverstyle/ Bold text on hover
|
176
|
+
* @sample {highmaps} highcharts/navigation/menuitemhoverstyle/ Bold text on hover
|
177
|
+
* @default { "background": "#335cad", "color": "#ffffff" }
|
178
|
+
* @since 2.0
|
179
|
+
* @product highcharts highstock highmaps
|
180
|
+
*/
|
181
|
+
menuItemHoverStyle: {
|
182
|
+
|
183
|
+
/**
|
184
|
+
*/
|
185
|
+
background: '#335cad',
|
186
|
+
|
187
|
+
/**
|
188
|
+
*/
|
189
|
+
color: '#ffffff'
|
190
|
+
},
|
191
|
+
|
192
|
+
/**
|
193
|
+
* A collection of options for buttons appearing in the exporting module.
|
194
|
+
*
|
195
|
+
*
|
196
|
+
* In [styled mode](http://www.highcharts.com/docs/chart-design-and-
|
197
|
+
* style/style-by-css), the buttons are styled with the `.highcharts-
|
198
|
+
* contextbutton` and `.highcharts-button-symbol` class.
|
199
|
+
*
|
200
|
+
* @product highcharts highstock highmaps
|
201
|
+
*/
|
202
|
+
buttonOptions: {
|
203
|
+
|
204
|
+
/**
|
205
|
+
* Fill color for the symbol within the button.
|
206
|
+
*
|
207
|
+
* @type {Color}
|
208
|
+
* @sample {highcharts} highcharts/navigation/buttonoptions-symbolfill/ Blue symbol stroke for one of the buttons
|
209
|
+
* @sample {highstock} highcharts/navigation/buttonoptions-symbolfill/ Blue symbol stroke for one of the buttons
|
210
|
+
* @sample {highmaps} highcharts/navigation/buttonoptions-symbolfill/ Blue symbol stroke for one of the buttons
|
211
|
+
* @default #666666
|
212
|
+
* @since 2.0
|
213
|
+
* @product highcharts highstock highmaps
|
214
|
+
*/
|
215
|
+
symbolFill: '#666666',
|
216
|
+
|
217
|
+
/**
|
218
|
+
* The color of the symbol's stroke or line.
|
219
|
+
*
|
220
|
+
* @type {Color}
|
221
|
+
* @sample {highcharts} highcharts/navigation/buttonoptions-symbolstroke/ Blue symbol stroke
|
222
|
+
* @sample {highstock} highcharts/navigation/buttonoptions-symbolstroke/ Blue symbol stroke
|
223
|
+
* @sample {highmaps} highcharts/navigation/buttonoptions-symbolstroke/ Blue symbol stroke
|
224
|
+
* @default #666666
|
225
|
+
* @since 2.0
|
226
|
+
* @product highcharts highstock highmaps
|
227
|
+
*/
|
228
|
+
symbolStroke: '#666666',
|
229
|
+
|
230
|
+
/**
|
231
|
+
* The pixel stroke width of the symbol on the button.
|
232
|
+
*
|
233
|
+
* @type {Number}
|
234
|
+
* @sample {highcharts} highcharts/navigation/buttonoptions-height/ Bigger buttons
|
235
|
+
* @sample {highstock} highcharts/navigation/buttonoptions-height/ Bigger buttons
|
236
|
+
* @sample {highmaps} highcharts/navigation/buttonoptions-height/ Bigger buttons
|
237
|
+
* @default 1
|
238
|
+
* @since 2.0
|
239
|
+
* @product highcharts highstock highmaps
|
240
|
+
*/
|
241
|
+
symbolStrokeWidth: 3,
|
242
|
+
|
243
|
+
/**
|
244
|
+
* A configuration object for the button theme. The object accepts
|
245
|
+
* SVG properties like `stroke-width`, `stroke` and `fill`. Tri-state
|
246
|
+
* button styles are supported by the `states.hover` and `states.select`
|
247
|
+
* objects.
|
248
|
+
*
|
249
|
+
* @type {Object}
|
250
|
+
* @sample {highcharts} highcharts/navigation/buttonoptions-theme/ Theming the buttons
|
251
|
+
* @sample {highstock} highcharts/navigation/buttonoptions-theme/ Theming the buttons
|
252
|
+
* @sample {highmaps} highcharts/navigation/buttonoptions-theme/ Theming the buttons
|
253
|
+
* @since 3.0
|
254
|
+
* @product highcharts highstock highmaps
|
255
|
+
*/
|
256
|
+
theme: {
|
257
|
+
|
258
|
+
/**
|
259
|
+
*/
|
260
|
+
fill: '#ffffff', // capture hover
|
261
|
+
|
262
|
+
/**
|
263
|
+
*/
|
264
|
+
stroke: 'none',
|
265
|
+
|
266
|
+
/**
|
267
|
+
*/
|
268
|
+
padding: 5
|
269
|
+
}
|
105
270
|
}
|
106
|
-
}
|
107
|
-
});
|
271
|
+
});
|
108
272
|
|
109
273
|
|
110
274
|
|
111
275
|
// Add the export related options
|
276
|
+
|
277
|
+
/**
|
278
|
+
* Options for the exporting module. For an overview on the matter, see [the docs](http://www.highcharts.com/docs/export-module/export-module-overview).
|
279
|
+
* @type {Object}
|
280
|
+
* @optionparent exporting
|
281
|
+
*/
|
112
282
|
defaultOptions.exporting = {
|
113
283
|
//enabled: true,
|
114
284
|
//filename: 'chart',
|
285
|
+
|
286
|
+
/**
|
287
|
+
* Default MIME type for exporting if `chart.exportChart()` is called
|
288
|
+
* without specifying a `type` option. Possible values are `image/png`,
|
289
|
+
* `image/jpeg`, `application/pdf` and `image/svg+xml`.
|
290
|
+
*
|
291
|
+
* @validvalue ["image/png", "image/jpeg", "application/pdf", "image/svg+xml"]
|
292
|
+
* @type {String}
|
293
|
+
* @default image/png
|
294
|
+
* @since 2.0
|
295
|
+
* @product highcharts highstock highmaps
|
296
|
+
*/
|
115
297
|
type: 'image/png',
|
298
|
+
|
299
|
+
/**
|
300
|
+
* The URL for the server module converting the SVG string to an image
|
301
|
+
* format. By default this points to Highchart's free web service.
|
302
|
+
*
|
303
|
+
* @type {String}
|
304
|
+
* @default https://export.highcharts.com
|
305
|
+
* @since 2.0
|
306
|
+
* @product highcharts highstock highmaps
|
307
|
+
*/
|
116
308
|
url: 'https://export.highcharts.com/',
|
117
309
|
//width: undefined,
|
310
|
+
|
311
|
+
/**
|
312
|
+
* When printing the chart from the menu item in the burger menu, if
|
313
|
+
* the on-screen chart exceeds this width, it is resized. After printing
|
314
|
+
* or cancelled, it is restored. The default width makes the chart
|
315
|
+
* fit into typical paper format. Note that this does not affect the
|
316
|
+
* chart when printing the web page as a whole.
|
317
|
+
*
|
318
|
+
* @type {Number}
|
319
|
+
* @default 780
|
320
|
+
* @since 4.2.5
|
321
|
+
* @product highcharts highstock highmaps
|
322
|
+
*/
|
118
323
|
printMaxWidth: 780,
|
324
|
+
|
325
|
+
/**
|
326
|
+
* Defines the scale or zoom factor for the exported image compared
|
327
|
+
* to the on-screen display. While for instance a 600px wide chart
|
328
|
+
* may look good on a website, it will look bad in print. The default
|
329
|
+
* scale of 2 makes this chart export to a 1200px PNG or JPG.
|
330
|
+
*
|
331
|
+
* @type {Number}
|
332
|
+
* @see [chart.width](#chart.width), [exporting.sourceWidth](#exporting.
|
333
|
+
* sourceWidth)
|
334
|
+
* @sample {highcharts} highcharts/exporting/scale/ Scale demonstrated
|
335
|
+
* @sample {highstock} highcharts/exporting/scale/ Scale demonstrated
|
336
|
+
* @sample {highmaps} maps/exporting/scale/ Scale demonstrated
|
337
|
+
* @default 2
|
338
|
+
* @since 3.0
|
339
|
+
* @product highcharts highstock highmaps
|
340
|
+
*/
|
119
341
|
scale: 2,
|
342
|
+
|
343
|
+
/**
|
344
|
+
* Options for the export related buttons, print and export. In addition
|
345
|
+
* to the default buttons listed here, custom buttons can be added.
|
346
|
+
* See [navigation.buttonOptions](#navigation.buttonOptions) for general
|
347
|
+
* options.
|
348
|
+
*
|
349
|
+
* @product highcharts highstock highmaps
|
350
|
+
*/
|
120
351
|
buttons: {
|
352
|
+
|
353
|
+
/**
|
354
|
+
* Options for the export button.
|
355
|
+
*
|
356
|
+
* In [styled mode](http://www.highcharts.com/docs/chart-design-and-
|
357
|
+
* style/style-by-css), export button styles can be applied with the
|
358
|
+
* `.highcharts-contextbutton` class.
|
359
|
+
*
|
360
|
+
* @extends navigation.buttonOptions
|
361
|
+
* @product highcharts highstock highmaps
|
362
|
+
*/
|
121
363
|
contextButton: {
|
364
|
+
|
365
|
+
/**
|
366
|
+
*/
|
122
367
|
className: 'highcharts-contextbutton',
|
368
|
+
|
369
|
+
/**
|
370
|
+
*/
|
123
371
|
menuClassName: 'highcharts-contextmenu',
|
124
372
|
//x: -10,
|
373
|
+
|
374
|
+
/**
|
375
|
+
* The symbol for the button. Points to a definition function in
|
376
|
+
* the `Highcharts.Renderer.symbols` collection. The default `exportIcon`
|
377
|
+
* function is part of the exporting module.
|
378
|
+
*
|
379
|
+
* @validvalue ["circle", "square", "diamond", "triangle", "triangle-down", "menu"]
|
380
|
+
* @type {String}
|
381
|
+
* @sample {highcharts} highcharts/exporting/buttons-contextbutton-symbol/ Use a circle for symbol
|
382
|
+
* @sample {highstock} highcharts/exporting/buttons-contextbutton-symbol/ Use a circle for symbol
|
383
|
+
* @sample {highmaps} highcharts/exporting/buttons-contextbutton-symbol/ Use a circle for symbol
|
384
|
+
* @default menu
|
385
|
+
* @since 2.0
|
386
|
+
* @product highcharts highstock highmaps
|
387
|
+
*/
|
125
388
|
symbol: 'menu',
|
389
|
+
|
390
|
+
/**
|
391
|
+
*/
|
126
392
|
_titleKey: 'contextButtonTitle',
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
393
|
+
|
394
|
+
/**
|
395
|
+
* A collection of config options for the menu items. Each options
|
396
|
+
* object consists of a `text` option which is a string to show in
|
397
|
+
* the menu item, as well as an `onclick` parameter which is a callback
|
398
|
+
* function to run on click.
|
399
|
+
*
|
400
|
+
* By default, there is the "Print" menu item plus one menu item
|
401
|
+
* for each of the available export types. Menu items can be customized
|
402
|
+
* by defining a new array of items and assigning `null` to unwanted
|
403
|
+
* positions (see override example below).
|
404
|
+
*
|
405
|
+
* @type {Array<Object>}
|
406
|
+
* @sample {highcharts} highcharts/exporting/buttons-contextbutton-onclick/ Skip the menu and export the chart directly
|
407
|
+
* @sample {highcharts} highcharts/exporting/buttons-contextbutton-menuitems/ Override the menu items
|
408
|
+
* @sample {highstock} highcharts/exporting/buttons-contextbutton-onclick/ Skip the menu and export the chart directly
|
409
|
+
* @sample {highstock} highcharts/exporting/buttons-contextbutton-menuitems/ Override the menu items
|
410
|
+
* @sample {highmaps} highcharts/exporting/buttons-contextbutton-onclick/ Skip the menu and export the chart directly
|
411
|
+
* @sample {highmaps} highcharts/exporting/buttons-contextbutton-menuitems/ Override the menu items
|
412
|
+
* @since 2.0
|
413
|
+
* @product highcharts highstock highmaps
|
414
|
+
*/
|
415
|
+
menuItems: [
|
416
|
+
'printChart',
|
417
|
+
'separator',
|
418
|
+
'downloadPNG',
|
419
|
+
'downloadJPEG',
|
420
|
+
'downloadPDF',
|
421
|
+
'downloadSVG'
|
422
|
+
]
|
423
|
+
}
|
424
|
+
},
|
425
|
+
// docs. Created API item with since:next. Add information and link to sample
|
426
|
+
// from menuItems too.
|
427
|
+
|
428
|
+
/**
|
429
|
+
* An object consisting of definitions for the menu items in the context
|
430
|
+
* menu. Each key value pair has a `key` that is referenced in the
|
431
|
+
* [menuItems](#exporting.buttons.contextButton.menuItems) setting,
|
432
|
+
* and a `value`, which is an object with the following properties:
|
433
|
+
*
|
434
|
+
* <dl>
|
435
|
+
*
|
436
|
+
* <dt>onclick</dt>
|
437
|
+
*
|
438
|
+
* <dd>The click handler for the menu item</dd>
|
439
|
+
*
|
440
|
+
* <dt>text</dt>
|
441
|
+
*
|
442
|
+
* <dd>The text for the menu item</dd>
|
443
|
+
*
|
444
|
+
* <dt>textKey</dt>
|
445
|
+
*
|
446
|
+
* <dd>If internationalization is required, the key to a language string</dd>
|
447
|
+
*
|
448
|
+
* </dl>
|
449
|
+
*
|
450
|
+
* @type {Object}
|
451
|
+
* @sample {highcharts} highcharts/exporting/menuitemdefinitions/ Menu item definitions
|
452
|
+
* @sample {highstock} highcharts/exporting/menuitemdefinitions/ Menu item definitions
|
453
|
+
* @sample {highmaps} highcharts/exporting/menuitemdefinitions/ Menu item definitions
|
454
|
+
* @since next
|
455
|
+
* @product highcharts highstock highmaps
|
456
|
+
*/
|
457
|
+
menuItemDefinitions: {
|
458
|
+
|
459
|
+
/**
|
460
|
+
*/
|
461
|
+
printChart: {
|
462
|
+
|
463
|
+
/**
|
464
|
+
*/
|
465
|
+
textKey: 'printChart',
|
466
|
+
|
467
|
+
/**
|
468
|
+
*/
|
469
|
+
onclick: function() {
|
470
|
+
this.print();
|
471
|
+
}
|
472
|
+
},
|
473
|
+
|
474
|
+
/**
|
475
|
+
*/
|
476
|
+
separator: {
|
477
|
+
|
478
|
+
/**
|
479
|
+
*/
|
480
|
+
separator: true
|
481
|
+
},
|
482
|
+
|
483
|
+
/**
|
484
|
+
*/
|
485
|
+
downloadPNG: {
|
486
|
+
|
487
|
+
/**
|
488
|
+
*/
|
489
|
+
textKey: 'downloadPNG',
|
490
|
+
|
491
|
+
/**
|
492
|
+
*/
|
493
|
+
onclick: function() {
|
494
|
+
this.exportChart();
|
495
|
+
}
|
496
|
+
},
|
497
|
+
|
498
|
+
/**
|
499
|
+
*/
|
500
|
+
downloadJPEG: {
|
501
|
+
|
502
|
+
/**
|
503
|
+
*/
|
504
|
+
textKey: 'downloadJPEG',
|
505
|
+
|
506
|
+
/**
|
507
|
+
*/
|
508
|
+
onclick: function() {
|
509
|
+
this.exportChart({
|
510
|
+
type: 'image/jpeg'
|
511
|
+
});
|
512
|
+
}
|
513
|
+
},
|
514
|
+
|
515
|
+
/**
|
516
|
+
*/
|
517
|
+
downloadPDF: {
|
518
|
+
|
519
|
+
/**
|
520
|
+
*/
|
521
|
+
textKey: 'downloadPDF',
|
522
|
+
|
523
|
+
/**
|
524
|
+
*/
|
525
|
+
onclick: function() {
|
526
|
+
this.exportChart({
|
527
|
+
type: 'application/pdf'
|
528
|
+
});
|
529
|
+
}
|
530
|
+
},
|
531
|
+
|
532
|
+
/**
|
533
|
+
*/
|
534
|
+
downloadSVG: {
|
535
|
+
|
536
|
+
/**
|
537
|
+
*/
|
538
|
+
textKey: 'downloadSVG',
|
539
|
+
|
540
|
+
/**
|
541
|
+
*/
|
542
|
+
onclick: function() {
|
543
|
+
this.exportChart({
|
544
|
+
type: 'image/svg+xml'
|
545
|
+
});
|
546
|
+
}
|
161
547
|
}
|
162
548
|
}
|
163
549
|
};
|
164
550
|
|
551
|
+
/**
|
552
|
+
* Fires after a chart is printed through the context menu item or the
|
553
|
+
* `Chart.print` method. Requires the exporting module.
|
554
|
+
*
|
555
|
+
* @type {Function}
|
556
|
+
* @context Chart
|
557
|
+
* @sample {highcharts} highcharts/chart/events-beforeprint-afterprint/
|
558
|
+
* Rescale the chart to print
|
559
|
+
* @sample {highstock} highcharts/chart/events-beforeprint-afterprint/
|
560
|
+
* Rescale the chart to print
|
561
|
+
* @sample {highmaps} highcharts/chart/events-beforeprint-afterprint/
|
562
|
+
* Rescale the chart to print
|
563
|
+
* @since 4.1.0
|
564
|
+
* @apioption chart.events.afterPrint
|
565
|
+
*/
|
566
|
+
|
567
|
+
/**
|
568
|
+
* Fires before a chart is printed through the context menu item or
|
569
|
+
* the `Chart.print` method. Requires the exporting module.
|
570
|
+
*
|
571
|
+
* @type {Function}
|
572
|
+
* @context Chart
|
573
|
+
* @sample {highcharts} highcharts/chart/events-beforeprint-afterprint/
|
574
|
+
* Rescale the chart to print
|
575
|
+
* @sample {highstock} highcharts/chart/events-beforeprint-afterprint/
|
576
|
+
* Rescale the chart to print
|
577
|
+
* @sample {highmaps} highcharts/chart/events-beforeprint-afterprint/
|
578
|
+
* Rescale the chart to print
|
579
|
+
* @since 4.1.0
|
580
|
+
* @apioption chart.events.beforePrint
|
581
|
+
*/
|
582
|
+
|
583
|
+
|
165
584
|
// Add the H.post utility
|
166
585
|
H.post = function(url, data, formAttributes) {
|
167
586
|
// create the form
|
@@ -192,8 +611,11 @@
|
|
192
611
|
extend(Chart.prototype, /** @lends Highcharts.Chart.prototype */ {
|
193
612
|
|
194
613
|
/**
|
195
|
-
* A collection of fixes on the produced SVG to
|
196
|
-
* browser bugs, VML problems and other.
|
614
|
+
* Exporting module only. A collection of fixes on the produced SVG to
|
615
|
+
* account for expando properties, browser bugs, VML problems and other.
|
616
|
+
* Returns a cleaned SVG.
|
617
|
+
*
|
618
|
+
* @private
|
197
619
|
*/
|
198
620
|
sanitizeSVG: function(svg, options) {
|
199
621
|
// Move HTML into a foreignObject
|
@@ -255,7 +677,13 @@
|
|
255
677
|
},
|
256
678
|
|
257
679
|
/**
|
258
|
-
* Return innerHTML of chart. Used as hook for
|
680
|
+
* Return the unfiltered innerHTML of the chart container. Used as hook for
|
681
|
+
* plugins. In styled mode, it also takes care of inlining CSS style rules.
|
682
|
+
*
|
683
|
+
* @see Chart#getSVG
|
684
|
+
*
|
685
|
+
* @returns {String}
|
686
|
+
* The unfiltered SVG of the chart.
|
259
687
|
*/
|
260
688
|
getChartHTML: function() {
|
261
689
|
|
@@ -538,7 +966,9 @@
|
|
538
966
|
},
|
539
967
|
|
540
968
|
/**
|
541
|
-
* Display a popup menu for choosing the export type
|
969
|
+
* Display a popup menu for choosing the export type.
|
970
|
+
*
|
971
|
+
* @private
|
542
972
|
*
|
543
973
|
* @param {String} className An identifier for the menu
|
544
974
|
* @param {Array} items A collection with text and onclicks for the items
|
@@ -615,7 +1045,12 @@
|
|
615
1045
|
|
616
1046
|
// create the items
|
617
1047
|
each(items, function(item) {
|
618
|
-
|
1048
|
+
|
1049
|
+
if (typeof item === 'string') {
|
1050
|
+
item = chart.options.exporting.menuItemDefinitions[item];
|
1051
|
+
}
|
1052
|
+
|
1053
|
+
if (H.isObject(item, true)) {
|
619
1054
|
var element;
|
620
1055
|
|
621
1056
|
if (item.separator) {
|
@@ -683,7 +1118,9 @@
|
|
683
1118
|
},
|
684
1119
|
|
685
1120
|
/**
|
686
|
-
* Add the export button to the chart
|
1121
|
+
* Add the export button to the chart, with options.
|
1122
|
+
*
|
1123
|
+
* @private
|
687
1124
|
*/
|
688
1125
|
addButton: function(options) {
|
689
1126
|
var chart = this,
|
@@ -796,7 +1233,9 @@
|
|
796
1233
|
},
|
797
1234
|
|
798
1235
|
/**
|
799
|
-
* Destroy the buttons.
|
1236
|
+
* Destroy the export buttons.
|
1237
|
+
*
|
1238
|
+
* @private
|
800
1239
|
*/
|
801
1240
|
destroyExport: function(e) {
|
802
1241
|
var chart = e ? e.target : this,
|