highcharts 7.1.1 → 7.1.2

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.
Files changed (415) hide show
  1. package/bower.json +1 -1
  2. package/css/annotations/popup.css +3 -3
  3. package/css/annotations/popup.scss +1 -1
  4. package/css/stocktools/gui.css +5 -5
  5. package/css/stocktools/gui.scss +1 -1
  6. package/es-modules/annotations/ControlPoint.js +1 -1
  7. package/es-modules/annotations/MockPoint.js +45 -12
  8. package/es-modules/annotations/annotations.src.js +203 -166
  9. package/es-modules/annotations/controllable/ControllableCircle.js +2 -10
  10. package/es-modules/annotations/controllable/ControllableImage.js +2 -10
  11. package/es-modules/annotations/controllable/ControllableLabel.js +54 -9
  12. package/es-modules/annotations/controllable/ControllableRect.js +2 -10
  13. package/es-modules/annotations/controllable/controllableMixin.js +32 -4
  14. package/es-modules/annotations/controllable/markerMixin.js +1 -0
  15. package/es-modules/annotations/eventEmitterMixin.js +1 -0
  16. package/es-modules/annotations/navigationBindings.js +15 -11
  17. package/es-modules/annotations/popup.js +59 -81
  18. package/es-modules/annotations/types/CrookedLine.js +19 -7
  19. package/es-modules/annotations/types/ElliottWave.js +7 -6
  20. package/es-modules/annotations/types/Fibonacci.js +14 -14
  21. package/es-modules/annotations/types/InfinityLine.js +4 -4
  22. package/es-modules/annotations/types/Measure.js +41 -41
  23. package/es-modules/annotations/types/Pitchfork.js +5 -4
  24. package/es-modules/annotations/types/VerticalLine.js +6 -5
  25. package/es-modules/error-messages.js +6 -1
  26. package/es-modules/indicators/indicators.src.js +5 -3
  27. package/es-modules/mixins/nodes.js +16 -8
  28. package/es-modules/modules/accessibility/AccessibilityComponent.js +4 -4
  29. package/es-modules/modules/accessibility/KeyboardNavigation.js +17 -4
  30. package/es-modules/modules/accessibility/components/RangeSelectorComponent.js +3 -2
  31. package/es-modules/modules/accessibility/components/SeriesComponent.js +110 -2
  32. package/es-modules/modules/accessibility/components/ZoomComponent.js +1 -1
  33. package/es-modules/modules/accessibility/options.js +2 -1
  34. package/es-modules/modules/bellcurve.src.js +27 -29
  35. package/es-modules/modules/boost/boost-init.js +14 -0
  36. package/es-modules/modules/boost/boost-overrides.js +13 -3
  37. package/es-modules/modules/boost/wgl-renderer.js +30 -15
  38. package/es-modules/modules/boost/wgl-shader.js +33 -16
  39. package/es-modules/modules/boost/wgl-vbuffer.js +8 -4
  40. package/es-modules/modules/broken-axis.src.js +1 -1
  41. package/es-modules/modules/bullet.src.js +68 -68
  42. package/es-modules/modules/cylinder.src.js +3 -1
  43. package/es-modules/modules/data.src.js +9 -5
  44. package/es-modules/modules/draggable-points.src.js +1 -1
  45. package/es-modules/modules/drilldown.src.js +1 -1
  46. package/es-modules/modules/export-data.src.js +7 -8
  47. package/es-modules/modules/exporting.src.js +9 -1
  48. package/es-modules/modules/full-screen.src.js +1 -1
  49. package/es-modules/modules/funnel3d.src.js +10 -3
  50. package/es-modules/modules/histogram.src.js +162 -164
  51. package/es-modules/modules/item-series.src.js +10 -10
  52. package/es-modules/modules/networkgraph/layouts.js +16 -12
  53. package/es-modules/modules/networkgraph/networkgraph.src.js +147 -51
  54. package/es-modules/modules/offline-exporting.src.js +15 -2
  55. package/es-modules/modules/oldie-polyfills.src.js +1 -1
  56. package/es-modules/modules/organization.src.js +65 -20
  57. package/es-modules/modules/pareto.src.js +52 -51
  58. package/es-modules/modules/pattern-fill.src.js +1 -1
  59. package/es-modules/modules/price-indicator.src.js +1 -1
  60. package/es-modules/modules/pyramid3d.src.js +1 -1
  61. package/es-modules/modules/sankey.src.js +22 -10
  62. package/es-modules/modules/series-label.src.js +16 -8
  63. package/es-modules/modules/solid-gauge.src.js +128 -79
  64. package/es-modules/modules/static-scale.src.js +8 -1
  65. package/es-modules/modules/stock-tools-gui.js +1 -1
  66. package/es-modules/modules/streamgraph.src.js +11 -11
  67. package/es-modules/modules/sunburst.src.js +23 -2
  68. package/es-modules/modules/tilemap.src.js +58 -57
  69. package/es-modules/modules/timeline.src.js +17 -12
  70. package/es-modules/modules/treemap.src.js +6 -6
  71. package/es-modules/modules/variwide.src.js +39 -39
  72. package/es-modules/modules/vector.src.js +108 -107
  73. package/es-modules/modules/venn.src.js +4 -2
  74. package/es-modules/modules/windbarb.src.js +43 -43
  75. package/es-modules/modules/wordcloud.src.js +1 -0
  76. package/es-modules/modules/xrange.src.js +112 -104
  77. package/es-modules/parts/AreaSeries.js +4 -1
  78. package/es-modules/parts/Axis.js +809 -1870
  79. package/es-modules/parts/Chart.js +254 -743
  80. package/es-modules/parts/Color.js +160 -113
  81. package/es-modules/parts/ColumnSeries.js +9 -3
  82. package/es-modules/parts/DataLabels.js +31 -2
  83. package/es-modules/parts/Dynamics.js +73 -26
  84. package/es-modules/parts/FlagsSeries.js +6 -4
  85. package/es-modules/parts/Globals.js +20 -36
  86. package/es-modules/parts/Html.js +116 -235
  87. package/es-modules/parts/Interaction.js +17 -7
  88. package/es-modules/parts/Legend.js +277 -632
  89. package/es-modules/parts/MSPointer.js +62 -106
  90. package/es-modules/parts/Options.js +128 -367
  91. package/es-modules/parts/OrdinalAxis.js +12 -0
  92. package/es-modules/parts/PieSeries.js +61 -44
  93. package/es-modules/parts/PlotLineOrBand.js +38 -3
  94. package/es-modules/parts/Point.js +117 -227
  95. package/es-modules/parts/Pointer.js +273 -558
  96. package/es-modules/parts/RangeSelector.js +5 -3
  97. package/es-modules/parts/Responsive.js +8 -4
  98. package/es-modules/parts/ScrollablePlotArea.js +215 -81
  99. package/es-modules/parts/Scrollbar.js +38 -23
  100. package/es-modules/parts/Series.js +151 -47
  101. package/es-modules/parts/Stacking.js +8 -3
  102. package/es-modules/parts/StockChart.js +42 -29
  103. package/es-modules/parts/SvgRenderer.js +1080 -2100
  104. package/es-modules/parts/Tick.js +11 -4
  105. package/es-modules/parts/Time.js +179 -363
  106. package/es-modules/parts/Tooltip.js +23 -12
  107. package/es-modules/parts/TouchPointer.js +69 -187
  108. package/es-modules/parts/Utilities.js +593 -846
  109. package/es-modules/parts-3d/Axis.js +2 -2
  110. package/es-modules/parts-3d/Column.js +18 -8
  111. package/es-modules/parts-gantt/GanttSeries.js +17 -21
  112. package/es-modules/parts-gantt/GridAxis.js +183 -101
  113. package/es-modules/parts-gantt/PathfinderAlgorithms.js +2 -2
  114. package/es-modules/parts-gantt/TreeGrid.js +53 -36
  115. package/es-modules/parts-map/ColorAxis.js +35 -14
  116. package/es-modules/parts-map/MapBubbleSeries.js +2 -1
  117. package/es-modules/parts-map/MapSeries.js +29 -18
  118. package/es-modules/parts-more/AreaRangeSeries.js +13 -12
  119. package/es-modules/parts-more/ColumnRangeSeries.js +8 -2
  120. package/es-modules/parts-more/GaugeSeries.js +9 -9
  121. package/es-modules/parts-more/PackedBubbleSeries.js +152 -115
  122. package/es-modules/parts-more/RadialAxis.js +102 -8
  123. package/es-modules/parts-more/WaterfallSeries.js +148 -35
  124. package/highcharts-3d.js +68 -67
  125. package/highcharts-3d.js.map +1 -1
  126. package/highcharts-3d.src.js +21 -11
  127. package/highcharts-gantt.d.ts +5 -3
  128. package/highcharts-gantt.js +618 -610
  129. package/highcharts-gantt.js.map +1 -1
  130. package/highcharts-gantt.src.d.ts +5 -3
  131. package/highcharts-gantt.src.js +5185 -8892
  132. package/highcharts-more.js +144 -140
  133. package/highcharts-more.js.map +1 -1
  134. package/highcharts-more.src.js +449 -194
  135. package/highcharts.d.ts +3943 -5236
  136. package/highcharts.js +454 -449
  137. package/highcharts.js.map +1 -1
  138. package/highcharts.src.d.ts +3943 -5236
  139. package/highcharts.src.js +4767 -8601
  140. package/highmaps.d.ts +5 -3
  141. package/highmaps.js +498 -494
  142. package/highmaps.js.map +1 -1
  143. package/highmaps.src.d.ts +5 -3
  144. package/highmaps.src.js +4547 -8507
  145. package/highstock.d.ts +5 -3
  146. package/highstock.js +597 -590
  147. package/highstock.js.map +1 -1
  148. package/highstock.src.d.ts +5 -3
  149. package/highstock.src.js +4871 -8661
  150. package/indicators/acceleration-bands.js +1 -1
  151. package/indicators/acceleration-bands.src.js +1 -1
  152. package/indicators/accumulation-distribution.js +1 -1
  153. package/indicators/accumulation-distribution.src.js +1 -1
  154. package/indicators/ao.js +1 -1
  155. package/indicators/ao.src.js +1 -1
  156. package/indicators/apo.js +1 -1
  157. package/indicators/apo.src.js +1 -1
  158. package/indicators/aroon-oscillator.js +1 -1
  159. package/indicators/aroon-oscillator.src.js +1 -1
  160. package/indicators/aroon.js +1 -1
  161. package/indicators/aroon.src.js +1 -1
  162. package/indicators/atr.js +1 -1
  163. package/indicators/atr.src.js +1 -1
  164. package/indicators/bollinger-bands.js +1 -1
  165. package/indicators/bollinger-bands.src.js +1 -1
  166. package/indicators/cci.js +1 -1
  167. package/indicators/cci.src.js +1 -1
  168. package/indicators/chaikin.js +1 -1
  169. package/indicators/chaikin.src.js +1 -1
  170. package/indicators/cmf.js +1 -1
  171. package/indicators/cmf.src.js +1 -1
  172. package/indicators/dema.js +1 -1
  173. package/indicators/dema.src.js +1 -1
  174. package/indicators/dpo.js +1 -1
  175. package/indicators/dpo.src.js +1 -1
  176. package/indicators/ema.js +1 -1
  177. package/indicators/ema.src.js +1 -1
  178. package/indicators/ichimoku-kinko-hyo.js +1 -1
  179. package/indicators/ichimoku-kinko-hyo.src.js +1 -1
  180. package/indicators/indicators-all.js +105 -105
  181. package/indicators/indicators-all.js.map +1 -1
  182. package/indicators/indicators-all.src.js +6 -4
  183. package/indicators/indicators.js +9 -9
  184. package/indicators/indicators.js.map +1 -1
  185. package/indicators/indicators.src.js +6 -4
  186. package/indicators/keltner-channels.js +1 -1
  187. package/indicators/keltner-channels.src.js +1 -1
  188. package/indicators/macd.js +1 -1
  189. package/indicators/macd.src.js +1 -1
  190. package/indicators/mfi.js +1 -1
  191. package/indicators/mfi.src.js +1 -1
  192. package/indicators/momentum.js +1 -1
  193. package/indicators/momentum.src.js +1 -1
  194. package/indicators/natr.js +1 -1
  195. package/indicators/natr.src.js +1 -1
  196. package/indicators/pivot-points.js +1 -1
  197. package/indicators/pivot-points.src.js +1 -1
  198. package/indicators/ppo.js +1 -1
  199. package/indicators/ppo.src.js +1 -1
  200. package/indicators/price-channel.js +1 -1
  201. package/indicators/price-channel.src.js +1 -1
  202. package/indicators/price-envelopes.js +1 -1
  203. package/indicators/price-envelopes.src.js +1 -1
  204. package/indicators/psar.js +1 -1
  205. package/indicators/psar.src.js +1 -1
  206. package/indicators/regressions.js +1 -1
  207. package/indicators/regressions.src.js +1 -1
  208. package/indicators/roc.js +1 -1
  209. package/indicators/roc.src.js +1 -1
  210. package/indicators/rsi.js +1 -1
  211. package/indicators/rsi.src.js +1 -1
  212. package/indicators/stochastic.js +1 -1
  213. package/indicators/stochastic.src.js +1 -1
  214. package/indicators/supertrend.js +1 -1
  215. package/indicators/supertrend.src.js +1 -1
  216. package/indicators/tema.js +1 -1
  217. package/indicators/tema.src.js +1 -1
  218. package/indicators/trix.js +1 -1
  219. package/indicators/trix.src.js +1 -1
  220. package/indicators/volume-by-price.js +1 -1
  221. package/indicators/volume-by-price.src.js +1 -1
  222. package/indicators/vwap.js +1 -1
  223. package/indicators/vwap.src.js +1 -1
  224. package/indicators/williams-r.js +1 -1
  225. package/indicators/williams-r.src.js +1 -1
  226. package/indicators/wma.js +1 -1
  227. package/indicators/wma.src.js +1 -1
  228. package/indicators/zigzag.js +1 -1
  229. package/indicators/zigzag.src.js +1 -1
  230. package/modules/accessibility.js +92 -89
  231. package/modules/accessibility.js.map +1 -1
  232. package/modules/accessibility.src.js +138 -15
  233. package/modules/annotations-advanced.js +128 -127
  234. package/modules/annotations-advanced.js.map +1 -1
  235. package/modules/annotations-advanced.src.js +514 -396
  236. package/modules/annotations.d.ts +36 -0
  237. package/modules/annotations.js +81 -81
  238. package/modules/annotations.js.map +1 -1
  239. package/modules/annotations.src.d.ts +36 -0
  240. package/modules/annotations.src.js +418 -315
  241. package/modules/arrow-symbols.js +1 -1
  242. package/modules/arrow-symbols.src.js +1 -1
  243. package/modules/boost-canvas.js +1 -1
  244. package/modules/boost-canvas.src.js +1 -1
  245. package/modules/boost.js +63 -63
  246. package/modules/boost.js.map +1 -1
  247. package/modules/boost.src.js +99 -39
  248. package/modules/broken-axis.js +1 -1
  249. package/modules/broken-axis.src.js +2 -2
  250. package/modules/bullet.js +1 -1
  251. package/modules/bullet.src.js +69 -69
  252. package/modules/current-date-indicator.js +1 -1
  253. package/modules/current-date-indicator.src.js +1 -1
  254. package/modules/cylinder.js +1 -1
  255. package/modules/cylinder.js.map +1 -1
  256. package/modules/cylinder.src.js +4 -2
  257. package/modules/data.js +4 -4
  258. package/modules/data.js.map +1 -1
  259. package/modules/data.src.js +10 -6
  260. package/modules/datagrouping.js +1 -1
  261. package/modules/datagrouping.src.js +1 -1
  262. package/modules/debugger.js +4 -4
  263. package/modules/debugger.js.map +1 -1
  264. package/modules/debugger.src.js +7 -2
  265. package/modules/dependency-wheel.js +1 -1
  266. package/modules/dependency-wheel.src.js +1 -1
  267. package/modules/dotplot.js +1 -1
  268. package/modules/dotplot.src.js +1 -1
  269. package/modules/drag-panes.js +1 -1
  270. package/modules/drag-panes.src.js +1 -1
  271. package/modules/draggable-points.js +1 -1
  272. package/modules/draggable-points.src.js +2 -2
  273. package/modules/drilldown.js +1 -1
  274. package/modules/drilldown.src.js +2 -2
  275. package/modules/export-data.js +2 -2
  276. package/modules/export-data.js.map +1 -1
  277. package/modules/export-data.src.js +8 -9
  278. package/modules/exporting.js +25 -25
  279. package/modules/exporting.js.map +1 -1
  280. package/modules/exporting.src.js +11 -3
  281. package/modules/full-screen.js +1 -1
  282. package/modules/full-screen.src.js +2 -2
  283. package/modules/funnel.js +1 -1
  284. package/modules/funnel.src.js +1 -1
  285. package/modules/funnel3d.js +2 -2
  286. package/modules/funnel3d.js.map +1 -1
  287. package/modules/funnel3d.src.js +11 -4
  288. package/modules/gantt.js +166 -164
  289. package/modules/gantt.js.map +1 -1
  290. package/modules/gantt.src.js +422 -295
  291. package/modules/grid-axis.js +18 -16
  292. package/modules/grid-axis.js.map +1 -1
  293. package/modules/grid-axis.src.js +184 -102
  294. package/modules/heatmap.js +22 -22
  295. package/modules/heatmap.js.map +1 -1
  296. package/modules/heatmap.src.js +36 -15
  297. package/modules/histogram-bellcurve.js +1 -1
  298. package/modules/histogram-bellcurve.js.map +1 -1
  299. package/modules/histogram-bellcurve.src.js +186 -183
  300. package/modules/item-series.js +1 -1
  301. package/modules/item-series.src.js +11 -11
  302. package/modules/map-parser.js +1 -1
  303. package/modules/map-parser.src.js +1 -1
  304. package/modules/map.js +83 -83
  305. package/modules/map.js.map +1 -1
  306. package/modules/map.src.js +67 -34
  307. package/modules/networkgraph.js +10 -9
  308. package/modules/networkgraph.js.map +1 -1
  309. package/modules/networkgraph.src.js +180 -72
  310. package/modules/no-data-to-display.js +1 -1
  311. package/modules/no-data-to-display.src.js +1 -1
  312. package/modules/offline-exporting.js +15 -15
  313. package/modules/offline-exporting.js.map +1 -1
  314. package/modules/offline-exporting.src.js +17 -4
  315. package/modules/oldie-polyfills.js +1 -1
  316. package/modules/oldie-polyfills.src.js +2 -2
  317. package/modules/oldie.js +2 -2
  318. package/modules/oldie.src.js +2 -2
  319. package/modules/organization.js +1 -1
  320. package/modules/organization.js.map +1 -1
  321. package/modules/organization.src.js +66 -21
  322. package/modules/overlapping-datalabels.js +1 -1
  323. package/modules/overlapping-datalabels.src.js +1 -1
  324. package/modules/parallel-coordinates.js +1 -1
  325. package/modules/parallel-coordinates.src.js +1 -1
  326. package/modules/pareto.js +1 -1
  327. package/modules/pareto.js.map +1 -1
  328. package/modules/pareto.src.js +53 -52
  329. package/modules/pathfinder.js +3 -3
  330. package/modules/pathfinder.js.map +1 -1
  331. package/modules/pathfinder.src.js +3 -3
  332. package/modules/pattern-fill.js +1 -1
  333. package/modules/pattern-fill.src.js +2 -2
  334. package/modules/price-indicator.js +1 -1
  335. package/modules/price-indicator.src.js +2 -2
  336. package/modules/pyramid3d.js +1 -1
  337. package/modules/pyramid3d.src.js +2 -2
  338. package/modules/sankey.js +14 -14
  339. package/modules/sankey.js.map +1 -1
  340. package/modules/sankey.src.js +39 -19
  341. package/modules/series-label.js +16 -16
  342. package/modules/series-label.js.map +1 -1
  343. package/modules/series-label.src.js +17 -9
  344. package/modules/solid-gauge.js +5 -5
  345. package/modules/solid-gauge.js.map +1 -1
  346. package/modules/solid-gauge.src.js +129 -80
  347. package/modules/sonification.js +1 -1
  348. package/modules/sonification.src.js +1 -1
  349. package/modules/static-scale.js +4 -4
  350. package/modules/static-scale.js.map +1 -1
  351. package/modules/static-scale.src.js +9 -2
  352. package/modules/stock-tools.js +2 -2
  353. package/modules/stock-tools.src.js +3 -3
  354. package/modules/stock.js +146 -145
  355. package/modules/stock.js.map +1 -1
  356. package/modules/stock.src.js +105 -61
  357. package/modules/streamgraph.js +1 -1
  358. package/modules/streamgraph.src.js +12 -12
  359. package/modules/sunburst.js +40 -40
  360. package/modules/sunburst.js.map +1 -1
  361. package/modules/sunburst.src.js +30 -9
  362. package/modules/tilemap.js +1 -1
  363. package/modules/tilemap.js.map +1 -1
  364. package/modules/tilemap.src.js +59 -58
  365. package/modules/timeline.js +12 -11
  366. package/modules/timeline.js.map +1 -1
  367. package/modules/timeline.src.js +18 -13
  368. package/modules/treegrid.js +45 -43
  369. package/modules/treegrid.js.map +1 -1
  370. package/modules/treegrid.src.js +238 -139
  371. package/modules/treemap.js +1 -1
  372. package/modules/treemap.src.js +7 -7
  373. package/modules/variable-pie.js +1 -1
  374. package/modules/variable-pie.src.js +1 -1
  375. package/modules/variwide.js +1 -1
  376. package/modules/variwide.src.js +40 -40
  377. package/modules/vector.js +1 -1
  378. package/modules/vector.js.map +1 -1
  379. package/modules/vector.src.js +109 -108
  380. package/modules/venn.js +23 -23
  381. package/modules/venn.js.map +1 -1
  382. package/modules/venn.src.js +5 -3
  383. package/modules/windbarb.js +1 -1
  384. package/modules/windbarb.src.js +44 -44
  385. package/modules/wordcloud.js +10 -10
  386. package/modules/wordcloud.js.map +1 -1
  387. package/modules/wordcloud.src.js +2 -1
  388. package/modules/xrange.js +12 -12
  389. package/modules/xrange.js.map +1 -1
  390. package/modules/xrange.src.js +113 -105
  391. package/package.json +1 -1
  392. package/themes/avocado.js +21 -37
  393. package/themes/avocado.src.js +1 -1
  394. package/themes/dark-blue.js +1 -1
  395. package/themes/dark-blue.src.js +1 -1
  396. package/themes/dark-green.js +1 -1
  397. package/themes/dark-green.src.js +1 -1
  398. package/themes/dark-unica.js +1 -1
  399. package/themes/dark-unica.src.js +1 -1
  400. package/themes/gray.js +1 -1
  401. package/themes/gray.src.js +1 -1
  402. package/themes/grid-light.js +1 -1
  403. package/themes/grid-light.src.js +1 -1
  404. package/themes/grid.js +1 -1
  405. package/themes/grid.src.js +1 -1
  406. package/themes/sand-signika.js +1 -1
  407. package/themes/sand-signika.src.js +1 -1
  408. package/themes/skies.js +1 -1
  409. package/themes/skies.src.js +1 -1
  410. package/themes/sunset.js +21 -37
  411. package/themes/sunset.src.js +1 -1
  412. package/.DS_Store +0 -0
  413. package/es-modules/.DS_Store +0 -0
  414. package/es-modules/modules/annotations-legacy.src.js +0 -1977
  415. package/js/.DS_Store +0 -0
@@ -1232,13 +1232,15 @@ RangeSelector.prototype = {
1232
1232
  };
1233
1233
  // Hide away the input box
1234
1234
  input.onblur = function () {
1235
+ // update extermes only when inputs are active
1235
1236
  if (input === H.doc.activeElement) { // Only when focused
1236
1237
  // Update also when no `change` event is triggered, like when
1237
1238
  // clicking inside the SVG (#4710)
1238
1239
  updateExtremes();
1239
- rangeSelector.hideInput(name);
1240
- input.blur(); // #4606
1241
1240
  }
1241
+ // #10404 - move hide and blur outside focus
1242
+ rangeSelector.hideInput(name);
1243
+ input.blur(); // #4606
1242
1244
  };
1243
1245
 
1244
1246
  // handle changes in the input boxes
@@ -1818,7 +1820,7 @@ Axis.prototype.minFromRange = function () {
1818
1820
  time.set(timeName, date, basePeriod + count);
1819
1821
 
1820
1822
  if (basePeriod === time.get(timeName, date)) {
1821
- date.setDate(0); // #6537
1823
+ time.set('Date', date, 0); // #6537
1822
1824
  }
1823
1825
 
1824
1826
  return date.getTime() - base;
@@ -190,7 +190,7 @@ Chart.prototype.setResponsive = function (redraw, reset) {
190
190
  // Undo previous rules. Before we apply a new set of rules, we need to
191
191
  // roll back completely to base options (#6291).
192
192
  if (currentResponsive) {
193
- this.update(currentResponsive.undoOptions, redraw);
193
+ this.update(currentResponsive.undoOptions, redraw, true);
194
194
  }
195
195
 
196
196
  if (ruleIds) {
@@ -203,7 +203,7 @@ Chart.prototype.setResponsive = function (redraw, reset) {
203
203
  undoOptions: undoOptions
204
204
  };
205
205
 
206
- this.update(mergedOptions, redraw);
206
+ this.update(mergedOptions, redraw, true);
207
207
 
208
208
  } else {
209
209
  this.currentResponsive = undefined;
@@ -253,7 +253,8 @@ Chart.prototype.matchResponsiveRule = function (rule, matches) {
253
253
  */
254
254
  Chart.prototype.currentOptions = function (options) {
255
255
 
256
- var ret = {};
256
+ var chart = this,
257
+ ret = {};
257
258
 
258
259
  /**
259
260
  * Recurse over a set of options and its current values,
@@ -263,7 +264,10 @@ Chart.prototype.currentOptions = function (options) {
263
264
  var i;
264
265
 
265
266
  H.objectEach(options, function (val, key) {
266
- if (!depth && ['series', 'xAxis', 'yAxis'].indexOf(key) > -1) {
267
+ if (
268
+ !depth &&
269
+ chart.collectionsWithUpdate.indexOf(key) > -1
270
+ ) {
267
271
  val = splat(val);
268
272
 
269
273
  ret[key] = [];
@@ -7,6 +7,14 @@
7
7
  * horizontally on mobile devices. Supports left and right side axes.
8
8
  */
9
9
 
10
+ /*
11
+ WIP on vertical scrollable plot area (#9378). To do:
12
+ - Bottom axis positioning
13
+ - Test with Gantt
14
+ - Look for size optimizing the code
15
+ - API and demos
16
+ */
17
+
10
18
  'use strict';
11
19
 
12
20
  import H from './Globals.js';
@@ -15,20 +23,36 @@ var addEvent = H.addEvent,
15
23
  Chart = H.Chart;
16
24
 
17
25
  /**
18
- * Options for a scrollable plot area. This feature provides a minimum width for
19
- * the plot area of the chart. If the width gets smaller than this, typically
20
- * on mobile devices, a native browser scrollbar is presented below the chart.
21
- * This scrollbar provides smooth scrolling for the contents of the plot area,
22
- * whereas the title, legend and axes are fixed.
26
+ * Options for a scrollable plot area. This feature provides a minimum size for
27
+ * the plot area of the chart. If the size gets smaller than this, typically
28
+ * on mobile devices, a native browser scrollbar is presented. This scrollbar
29
+ * provides smooth scrolling for the contents of the plot area, whereas the
30
+ * title, legend and unaffected axes are fixed.
31
+ *
32
+ * Since v7.1.2, a scrollable plot area can be defined for either horizontal or
33
+ * vertical scrolling, depending on whether the `minWidth` or `minHeight`
34
+ * option is set.
23
35
  *
24
- * @sample {highcharts} highcharts/chart/scrollable-plotarea
36
+ * @sample highcharts/chart/scrollable-plotarea
25
37
  * Scrollable plot area
38
+ * @sample highcharts/chart/scrollable-plotarea-vertical
39
+ * Vertically scrollable plot area
40
+ * @sample {gantt} highcharts/chart/scrollable-plotarea-vertical
41
+ * Gantt chart with vertically scrollable plot area
26
42
  *
27
43
  * @since 6.1.0
28
44
  * @product highcharts gantt
29
45
  * @apioption chart.scrollablePlotArea
30
46
  */
31
47
 
48
+ /**
49
+ * The minimum height for the plot area. If it gets smaller than this, the plot
50
+ * area will become scrollable.
51
+ *
52
+ * @type {number}
53
+ * @apioption chart.scrollablePlotArea.minHeight
54
+ */
55
+
32
56
  /**
33
57
  * The minimum width for the plot area. If it gets smaller than this, the plot
34
58
  * area will become scrollable.
@@ -46,6 +70,14 @@ var addEvent = H.addEvent,
46
70
  * @apioption chart.scrollablePlotArea.scrollPositionX
47
71
  */
48
72
 
73
+ /**
74
+ * The initial scrolling position of the scrollable plot area. Ranges from 0 to
75
+ * 1, where 0 aligns the plot area to the top and 1 aligns it to the bottom.
76
+ *
77
+ * @type {number}
78
+ * @apioption chart.scrollablePlotArea.scrollPositionY
79
+ */
80
+
49
81
  /**
50
82
  * The opacity of mask applied on one of the sides of the plot
51
83
  * area.
@@ -64,52 +96,90 @@ addEvent(Chart, 'afterSetChartSize', function (e) {
64
96
  var scrollablePlotArea = this.options.chart.scrollablePlotArea,
65
97
  scrollableMinWidth =
66
98
  scrollablePlotArea && scrollablePlotArea.minWidth,
67
- scrollablePixels;
99
+ scrollableMinHeight =
100
+ scrollablePlotArea && scrollablePlotArea.minHeight,
101
+ scrollablePixelsX,
102
+ scrollablePixelsY,
103
+ corrections;
68
104
 
69
- if (scrollableMinWidth && !this.renderer.forExport) {
105
+ if (!this.renderer.forExport) {
70
106
 
71
107
  // The amount of pixels to scroll, the difference between chart
72
108
  // width and scrollable width
73
- this.scrollablePixels = scrollablePixels = Math.max(
74
- 0,
75
- scrollableMinWidth - this.chartWidth
76
- );
109
+ if (scrollableMinWidth) {
110
+ this.scrollablePixelsX = scrollablePixelsX = Math.max(
111
+ 0,
112
+ scrollableMinWidth - this.chartWidth
113
+ );
114
+ if (scrollablePixelsX) {
115
+ this.plotWidth += scrollablePixelsX;
116
+ if (this.inverted) {
117
+ this.clipBox.height += scrollablePixelsX;
118
+ } else {
119
+ this.clipBox.width += scrollablePixelsX;
120
+ }
121
+
122
+ corrections = {
123
+ // Corrections for right side
124
+ 1: { name: 'right', value: scrollablePixelsX }
125
+ };
126
+ }
77
127
 
78
- if (scrollablePixels) {
79
- this.plotWidth += scrollablePixels;
80
- this.clipBox.width += scrollablePixels;
81
-
82
- if (!e.skipAxes) {
83
- this.axes.forEach(function (axis) {
84
- if (axis.side === 1) {
85
- // Get the plot lines right in getPlotLinePath,
86
- // temporarily set it to the adjusted plot width.
87
- axis.getPlotLinePath = function () {
88
- var right = this.right,
89
- path;
90
-
91
- this.right = right - axis.chart.scrollablePixels;
92
- path = H.Axis.prototype.getPlotLinePath.apply(
93
- this,
94
- arguments
95
- );
96
- this.right = right;
97
- return path;
98
- };
99
-
100
- } else {
101
- // Apply the corrected plotWidth
102
- axis.setAxisSize();
103
- axis.setAxisTranslation();
104
- }
105
- });
128
+ // Currently we can only do either X or Y
129
+ } else if (scrollableMinHeight) {
130
+ this.scrollablePixelsY = scrollablePixelsY = Math.max(
131
+ 0,
132
+ scrollableMinHeight - this.chartHeight
133
+ );
134
+ if (scrollablePixelsY) {
135
+ this.plotHeight += scrollablePixelsY;
136
+ if (this.inverted) {
137
+ this.clipBox.width += scrollablePixelsY;
138
+ } else {
139
+ this.clipBox.height += scrollablePixelsY;
140
+ }
141
+ corrections = {
142
+ 2: { name: 'bottom', value: scrollablePixelsY }
143
+ };
106
144
  }
107
145
  }
146
+
147
+ if (corrections && !e.skipAxes) {
148
+ this.axes.forEach(function (axis) {
149
+ // For right and bottom axes, only fix the plot line length
150
+ if (corrections[axis.side]) {
151
+ // Get the plot lines right in getPlotLinePath,
152
+ // temporarily set it to the adjusted plot width.
153
+ axis.getPlotLinePath = function () {
154
+ var marginName = corrections[axis.side].name,
155
+ correctionValue = corrections[axis.side].value,
156
+ // axis.right or axis.bottom
157
+ margin = this[marginName],
158
+ path;
159
+
160
+ // Temporarily adjust
161
+ this[marginName] = margin - correctionValue;
162
+ path = H.Axis.prototype.getPlotLinePath.apply(
163
+ this,
164
+ arguments
165
+ );
166
+ // Reset
167
+ this[marginName] = margin;
168
+ return path;
169
+ };
170
+
171
+ } else {
172
+ // Apply the corrected plotWidth
173
+ axis.setAxisSize();
174
+ axis.setAxisTranslation();
175
+ }
176
+ });
177
+ }
108
178
  }
109
179
  });
110
180
 
111
181
  addEvent(Chart, 'render', function () {
112
- if (this.scrollablePixels) {
182
+ if (this.scrollablePixelsX || this.scrollablePixelsY) {
113
183
  if (this.setUpScrolling) {
114
184
  this.setUpScrolling();
115
185
  }
@@ -126,13 +196,23 @@ addEvent(Chart, 'render', function () {
126
196
  */
127
197
  Chart.prototype.setUpScrolling = function () {
128
198
 
199
+ var attribs = {
200
+ WebkitOverflowScrolling: 'touch',
201
+ overflowX: 'hidden',
202
+ overflowY: 'hidden'
203
+ };
204
+
205
+ if (this.scrollablePixelsX) {
206
+ attribs.overflowX = 'auto';
207
+ }
208
+ if (this.scrollablePixelsY) {
209
+ attribs.overflowY = 'auto';
210
+ }
211
+
129
212
  // Add the necessary divs to provide scrolling
130
213
  this.scrollingContainer = H.createElement('div', {
131
214
  'className': 'highcharts-scrolling'
132
- }, {
133
- overflowX: 'auto',
134
- WebkitOverflowScrolling: 'touch'
135
- }, this.renderTo);
215
+ }, attribs, this.renderTo);
136
216
 
137
217
  this.innerContainer = H.createElement('div', {
138
218
  'className': 'highcharts-inner-container'
@@ -152,23 +232,31 @@ Chart.prototype.setUpScrolling = function () {
152
232
  */
153
233
  Chart.prototype.moveFixedElements = function () {
154
234
  var container = this.container,
155
- fixedRenderer = this.fixedRenderer;
156
-
157
- ([
158
- this.inverted ?
159
- '.highcharts-xaxis' :
160
- '.highcharts-yaxis',
161
- this.inverted ?
162
- '.highcharts-xaxis-labels' :
163
- '.highcharts-yaxis-labels',
164
- '.highcharts-contextbutton',
165
- '.highcharts-credits',
166
- '.highcharts-legend',
167
- '.highcharts-reset-zoom',
168
- '.highcharts-subtitle',
169
- '.highcharts-title',
170
- '.highcharts-legend-checkbox'
171
- ]).forEach(function (className) {
235
+ fixedRenderer = this.fixedRenderer,
236
+ fixedSelectors = [
237
+ '.highcharts-contextbutton',
238
+ '.highcharts-credits',
239
+ '.highcharts-legend',
240
+ '.highcharts-reset-zoom',
241
+ '.highcharts-subtitle',
242
+ '.highcharts-title',
243
+ '.highcharts-legend-checkbox'
244
+ ],
245
+ axisClass;
246
+
247
+ if (this.scrollablePixelsX && !this.inverted) {
248
+ axisClass = '.highcharts-yaxis';
249
+ } else if (this.scrollablePixelsX && this.inverted) {
250
+ axisClass = '.highcharts-xaxis';
251
+ } else if (this.scrollablePixelsY && !this.inverted) {
252
+ axisClass = '.highcharts-xaxis';
253
+ } else if (this.scrollablePixelsY && this.inverted) {
254
+ axisClass = '.highcharts-yaxis';
255
+ }
256
+
257
+ fixedSelectors.push(axisClass, axisClass + '-labels');
258
+
259
+ fixedSelectors.forEach(function (className) {
172
260
  [].forEach.call(
173
261
  container.querySelectorAll(className),
174
262
  function (elem) {
@@ -190,6 +278,7 @@ Chart.prototype.moveFixedElements = function () {
190
278
  Chart.prototype.applyFixed = function () {
191
279
  var fixedRenderer,
192
280
  scrollableWidth,
281
+ scrollableHeight,
193
282
  firstTime = !this.fixedDiv,
194
283
  scrollableOptions = this.options.chart.scrollablePlotArea;
195
284
 
@@ -218,8 +307,8 @@ Chart.prototype.applyFixed = function () {
218
307
 
219
308
  this.fixedRenderer = fixedRenderer = new H.Renderer(
220
309
  this.fixedDiv,
221
- 0,
222
- 0
310
+ this.chartWidth,
311
+ this.chartHeight
223
312
  );
224
313
 
225
314
  // Mask
@@ -238,43 +327,64 @@ Chart.prototype.applyFixed = function () {
238
327
  this.moveFixedElements();
239
328
 
240
329
  addEvent(this, 'afterShowResetZoom', this.moveFixedElements);
241
- }
242
330
 
243
- // Set the size of the fixed renderer to the visible width
244
- this.fixedRenderer.setSize(
245
- this.chartWidth,
246
- this.chartHeight
247
- );
331
+ } else {
332
+
333
+ // Set the size of the fixed renderer to the visible width
334
+ this.fixedRenderer.setSize(
335
+ this.chartWidth,
336
+ this.chartHeight
337
+ );
338
+ }
248
339
 
249
340
  // Increase the size of the scrollable renderer and background
250
- scrollableWidth = this.chartWidth + this.scrollablePixels;
341
+ scrollableWidth = this.chartWidth + (this.scrollablePixelsX || 0);
342
+ scrollableHeight = this.chartHeight + (this.scrollablePixelsY || 0);
251
343
  H.stop(this.container);
252
344
  this.container.style.width = scrollableWidth + 'px';
345
+ this.container.style.height = scrollableHeight + 'px';
253
346
  this.renderer.boxWrapper.attr({
254
347
  width: scrollableWidth,
255
- height: this.chartHeight,
256
- viewBox: [0, 0, scrollableWidth, this.chartHeight].join(' ')
348
+ height: scrollableHeight,
349
+ viewBox: [0, 0, scrollableWidth, scrollableHeight].join(' ')
350
+ });
351
+ this.chartBackground.attr({
352
+ width: scrollableWidth,
353
+ height: scrollableHeight
257
354
  });
258
- this.chartBackground.attr({ width: scrollableWidth });
355
+
356
+ if (this.scrollablePixelsY) {
357
+ this.scrollingContainer.style.height = this.chartHeight + 'px';
358
+ }
259
359
 
260
360
  // Set scroll position
261
361
  if (firstTime) {
262
362
 
263
363
  if (scrollableOptions.scrollPositionX) {
264
364
  this.scrollingContainer.scrollLeft =
265
- this.scrollablePixels * scrollableOptions.scrollPositionX;
365
+ this.scrollablePixelsX * scrollableOptions.scrollPositionX;
366
+ }
367
+ if (scrollableOptions.scrollPositionY) {
368
+ this.scrollingContainer.scrollTop =
369
+ this.scrollablePixelsY * scrollableOptions.scrollPositionY;
266
370
  }
267
371
  }
268
372
 
269
373
  // Mask behind the left and right side
270
374
  var axisOffset = this.axisOffset,
271
375
  maskTop = this.plotTop - axisOffset[0] - 1,
272
- maskBottom = this.plotTop + this.plotHeight + axisOffset[2],
376
+ maskLeft = this.plotLeft - axisOffset[3] - 1,
377
+ maskBottom = this.plotTop + this.plotHeight + axisOffset[2] + 1,
378
+ maskRight = this.plotLeft + this.plotWidth + axisOffset[1] + 1,
273
379
  maskPlotRight = this.plotLeft + this.plotWidth -
274
- this.scrollablePixels;
380
+ (this.scrollablePixelsX || 0),
381
+ maskPlotBottom = this.plotTop + this.plotHeight -
382
+ (this.scrollablePixelsY || 0),
383
+ d;
384
+
275
385
 
276
- this.scrollableMask.attr({
277
- d: this.scrollablePixels ? [
386
+ if (this.scrollablePixelsX) {
387
+ d = [
278
388
  // Left side
279
389
  'M', 0, maskTop,
280
390
  'L', this.plotLeft - 1, maskTop,
@@ -288,6 +398,30 @@ Chart.prototype.applyFixed = function () {
288
398
  'L', this.chartWidth, maskBottom,
289
399
  'L', maskPlotRight, maskBottom,
290
400
  'Z'
291
- ] : ['M', 0, 0]
292
- });
401
+ ];
402
+ } else if (this.scrollablePixelsY) {
403
+ d = [
404
+ // Top side
405
+ 'M', maskLeft, 0,
406
+ 'L', maskLeft, this.plotTop - 1,
407
+ 'L', maskRight, this.plotTop - 1,
408
+ 'L', maskRight, 0,
409
+ 'Z',
410
+
411
+ // Bottom side
412
+ 'M', maskLeft, maskPlotBottom,
413
+ 'L', maskLeft, this.chartHeight,
414
+ 'L', maskRight, this.chartHeight,
415
+ 'L', maskRight, maskPlotBottom,
416
+ 'Z'
417
+ ];
418
+ } else {
419
+ d = ['M', 0, 0];
420
+ }
421
+
422
+ if (this.redrawTrigger !== 'adjustHeight') {
423
+ this.scrollableMask.attr({
424
+ d: d
425
+ });
426
+ }
293
427
  };
@@ -1053,7 +1053,9 @@ if (!H.Scrollbar) {
1053
1053
  pick(axis.dataMax, axis.max) // #6930
1054
1054
  ),
1055
1055
  scrollbar = axis.scrollbar,
1056
- titleOffset = axis.titleOffset || 0,
1056
+ offset = axis.axisTitleMargin + (axis.titleOffset || 0),
1057
+ scrollbarsOffsets = axis.chart.scrollbarsOffsets,
1058
+ axisMargin = axis.options.margin || 0,
1057
1059
  offsetsIndex,
1058
1060
  from,
1059
1061
  to;
@@ -1061,49 +1063,62 @@ if (!H.Scrollbar) {
1061
1063
  if (scrollbar) {
1062
1064
 
1063
1065
  if (axis.horiz) {
1066
+
1067
+ // Reserve space for labels/title
1068
+ if (!axis.opposite) {
1069
+ scrollbarsOffsets[1] += offset;
1070
+ }
1071
+
1064
1072
  scrollbar.position(
1065
1073
  axis.left,
1066
- axis.top + axis.height + 2 +
1067
- axis.chart.scrollbarsOffsets[1] +
1068
- (axis.opposite ?
1069
- 0 :
1070
- titleOffset + axis.axisTitleMargin + axis.offset
1071
- ),
1074
+ axis.top + axis.height + 2 + scrollbarsOffsets[1] -
1075
+ (axis.opposite ? axisMargin : 0),
1072
1076
  axis.width,
1073
1077
  axis.height
1074
1078
  );
1079
+
1080
+ // Next scrollbar should reserve space for margin (if set)
1081
+ if (!axis.opposite) {
1082
+ scrollbarsOffsets[1] += axisMargin;
1083
+ }
1084
+
1075
1085
  offsetsIndex = 1;
1076
1086
  } else {
1087
+
1088
+ // Reserve space for labels/title
1089
+ if (axis.opposite) {
1090
+ scrollbarsOffsets[0] += offset;
1091
+ }
1092
+
1077
1093
  scrollbar.position(
1078
- axis.left + axis.width + 2 +
1079
- axis.chart.scrollbarsOffsets[0] +
1080
- (axis.opposite ?
1081
- titleOffset + axis.axisTitleMargin + axis.offset :
1082
- 0
1083
- ),
1094
+ axis.left + axis.width + 2 + scrollbarsOffsets[0] -
1095
+ (axis.opposite ? 0 : axisMargin),
1084
1096
  axis.top,
1085
1097
  axis.width,
1086
1098
  axis.height
1087
1099
  );
1100
+
1101
+ // Next scrollbar should reserve space for margin (if set)
1102
+ if (axis.opposite) {
1103
+ scrollbarsOffsets[0] += axisMargin;
1104
+ }
1105
+
1088
1106
  offsetsIndex = 0;
1089
1107
  }
1090
1108
 
1091
- if (
1092
- (!axis.opposite && !axis.horiz) || (axis.opposite && axis.horiz)
1093
- ) {
1094
- axis.chart.scrollbarsOffsets[offsetsIndex] +=
1095
- axis.scrollbar.size + axis.scrollbar.options.margin;
1096
- }
1109
+ scrollbarsOffsets[offsetsIndex] += scrollbar.size +
1110
+ scrollbar.options.margin;
1097
1111
 
1098
1112
  if (
1099
1113
  isNaN(scrollMin) ||
1100
1114
  isNaN(scrollMax) ||
1101
1115
  !defined(axis.min) ||
1102
- !defined(axis.max)
1116
+ !defined(axis.max) ||
1117
+ axis.min === axis.max // #10733
1103
1118
  ) {
1104
- // default action: when there is not extremes on the axis, but
1105
- // scrollbar exists, make it full size
1106
- scrollbar.setRange(0, 0);
1119
+ // default action: when extremes are the same or there is not
1120
+ // extremes on the axis, but scrollbar exists, make it full size
1121
+ scrollbar.setRange(0, 1);
1107
1122
  } else {
1108
1123
  from = (axis.min - scrollMin) / (scrollMax - scrollMin);
1109
1124
  to = (axis.max - scrollMin) / (scrollMax - scrollMin);