highcharts-rails 5.0.12 → 5.0.13
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.
- 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,
|