highcharts 6.1.4 → 6.2.0

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 (695) hide show
  1. package/bower.json +1 -1
  2. package/css/highcharts.css +17 -0
  3. package/css/highcharts.scss +14 -0
  4. package/css/themes/dark-unica.css +17 -0
  5. package/css/themes/grid-light.css +17 -0
  6. package/css/themes/sand-signika.css +17 -0
  7. package/es-modules/indicators/momentum.src.js +1 -1
  8. package/es-modules/indicators/pivot-points.src.js +6 -1
  9. package/es-modules/masters/highcharts-gantt.src.js +11 -0
  10. package/es-modules/masters/modules/annotations.src.js +1 -1
  11. package/es-modules/masters/modules/arrow-symbols.src.js +12 -0
  12. package/es-modules/masters/modules/broken-axis.src.js +1 -1
  13. package/es-modules/masters/modules/current-date-indicator.src.js +12 -0
  14. package/es-modules/masters/modules/data.src.js +1 -1
  15. package/es-modules/masters/modules/draggable-points.src.js +9 -0
  16. package/es-modules/masters/modules/export-data.src.js +1 -1
  17. package/es-modules/masters/modules/exporting.src.js +1 -1
  18. package/es-modules/masters/modules/funnel.src.js +1 -1
  19. package/es-modules/masters/modules/gantt.src.js +2 -1
  20. package/es-modules/masters/modules/grid-axis.src.js +1 -1
  21. package/es-modules/masters/modules/heatmap.src.js +1 -1
  22. package/es-modules/masters/modules/item-series.src.js +1 -1
  23. package/es-modules/masters/modules/map.src.js +1 -1
  24. package/es-modules/masters/modules/overlapping-datalabels.src.js +1 -1
  25. package/es-modules/masters/modules/pathfinder.src.js +12 -0
  26. package/es-modules/masters/modules/sankey.src.js +1 -1
  27. package/es-modules/masters/modules/series-label.src.js +1 -1
  28. package/es-modules/masters/modules/solid-gauge.src.js +1 -1
  29. package/es-modules/masters/modules/stock.src.js +1 -1
  30. package/es-modules/masters/modules/streamgraph.src.js +1 -1
  31. package/es-modules/masters/modules/treegrid.src.js +12 -0
  32. package/es-modules/masters/modules/variwide.src.js +1 -1
  33. package/es-modules/masters/modules/vector.src.js +1 -1
  34. package/es-modules/masters/modules/windbarb.src.js +1 -1
  35. package/es-modules/masters/modules/xrange.src.js +1 -1
  36. package/es-modules/masters/themes/dark-blue.src.js +1 -1
  37. package/es-modules/masters/themes/dark-green.src.js +1 -1
  38. package/es-modules/masters/themes/dark-unica.src.js +1 -1
  39. package/es-modules/masters/themes/gray.src.js +1 -1
  40. package/es-modules/masters/themes/grid-light.src.js +1 -1
  41. package/es-modules/masters/themes/grid.src.js +1 -1
  42. package/es-modules/masters/themes/sand-signika.src.js +1 -1
  43. package/es-modules/masters/themes/skies.src.js +1 -1
  44. package/es-modules/mixins/centered-series.js +1 -1
  45. package/es-modules/mixins/on-series.js +1 -1
  46. package/es-modules/modules/boost.src.js +22 -14
  47. package/es-modules/modules/broken-axis.src.js +169 -134
  48. package/es-modules/modules/data.src.js +2 -2
  49. package/es-modules/modules/draggable-points.src.js +2257 -0
  50. package/es-modules/modules/drilldown.src.js +1 -0
  51. package/es-modules/modules/export-data.src.js +1 -1
  52. package/es-modules/modules/exporting.src.js +1 -1
  53. package/es-modules/modules/funnel.src.js +1 -1
  54. package/es-modules/modules/item-series.src.js +1 -1
  55. package/es-modules/modules/no-data-to-display.src.js +5 -5
  56. package/es-modules/modules/oldie.src.js +1 -1
  57. package/es-modules/modules/overlapping-datalabels.src.js +38 -22
  58. package/es-modules/modules/parallel-coordinates.src.js +3 -2
  59. package/es-modules/modules/sankey.src.js +1 -1
  60. package/es-modules/modules/series-label.src.js +2 -2
  61. package/es-modules/modules/solid-gauge.src.js +1 -1
  62. package/es-modules/modules/static-scale.src.js +67 -28
  63. package/es-modules/modules/streamgraph.src.js +1 -1
  64. package/es-modules/modules/tilemap.src.js +231 -134
  65. package/es-modules/modules/variwide.src.js +1 -1
  66. package/es-modules/modules/vector.src.js +92 -22
  67. package/es-modules/modules/windbarb.src.js +1 -1
  68. package/es-modules/modules/xrange.src.js +257 -77
  69. package/es-modules/parts/AreaSeries.js +77 -77
  70. package/es-modules/parts/AreaSplineSeries.js +64 -27
  71. package/es-modules/parts/Axis.js +160 -67
  72. package/es-modules/parts/BarSeries.js +68 -51
  73. package/es-modules/parts/CandlestickSeries.js +1 -1
  74. package/es-modules/parts/Chart.js +31 -55
  75. package/es-modules/parts/Color.js +29 -18
  76. package/es-modules/parts/ColumnSeries.js +264 -142
  77. package/es-modules/parts/DataGrouping.js +9 -6
  78. package/es-modules/parts/DataLabels.js +261 -210
  79. package/es-modules/parts/DateTimeAxis.js +26 -7
  80. package/es-modules/parts/Dynamics.js +5 -2
  81. package/es-modules/parts/FlagsSeries.js +1 -1
  82. package/es-modules/parts/Globals.js +1 -1
  83. package/es-modules/parts/Html.js +64 -12
  84. package/es-modules/parts/Interaction.js +187 -63
  85. package/es-modules/parts/Legend.js +7 -3
  86. package/es-modules/parts/LogarithmicAxis.js +35 -4
  87. package/es-modules/parts/MSPointer.js +1 -1
  88. package/es-modules/parts/Navigator.js +27 -5
  89. package/es-modules/parts/OHLCSeries.js +1 -1
  90. package/es-modules/parts/Options.js +15 -13
  91. package/es-modules/parts/OrdinalAxis.js +1 -1
  92. package/es-modules/parts/PieSeries.js +256 -140
  93. package/es-modules/parts/PlotBandSeries.experimental.js +1 -1
  94. package/es-modules/parts/PlotLineOrBand.js +7 -40
  95. package/es-modules/parts/Point.js +28 -4
  96. package/es-modules/parts/Pointer.js +8 -6
  97. package/es-modules/parts/RangeSelector.js +1 -1
  98. package/es-modules/parts/Responsive.js +82 -36
  99. package/es-modules/parts/ScatterSeries.js +57 -25
  100. package/es-modules/parts/ScrollablePlotArea.js +17 -7
  101. package/es-modules/parts/Scrollbar.js +9 -2
  102. package/es-modules/parts/Series.js +22 -9
  103. package/es-modules/parts/SplineSeries.js +51 -29
  104. package/es-modules/parts/Stacking.js +100 -6
  105. package/es-modules/parts/StockChart.js +9 -3
  106. package/es-modules/parts/SvgRenderer.js +15 -10
  107. package/es-modules/parts/Tick.js +150 -30
  108. package/es-modules/parts/Time.js +23 -5
  109. package/es-modules/parts/Tooltip.js +2 -2
  110. package/es-modules/parts/TouchPointer.js +1 -1
  111. package/es-modules/parts/Utilities.js +16 -1
  112. package/es-modules/parts-3d/Axis.js +1 -1
  113. package/es-modules/parts-3d/Chart.js +1 -1
  114. package/es-modules/parts-3d/Column.js +1 -1
  115. package/es-modules/parts-3d/Math.js +1 -1
  116. package/es-modules/parts-3d/Pie.js +1 -1
  117. package/es-modules/parts-3d/SVGRenderer.js +1 -1
  118. package/es-modules/parts-3d/Scatter.js +1 -1
  119. package/es-modules/parts-3d/Series.js +1 -1
  120. package/es-modules/parts-3d/VMLRenderer.js +1 -1
  121. package/es-modules/parts-gantt/ArrowSymbols.js +110 -0
  122. package/es-modules/parts-gantt/CurrentDateIndicator.js +92 -0
  123. package/es-modules/parts-gantt/GanttChart.js +111 -0
  124. package/es-modules/parts-gantt/GanttSeries.js +376 -0
  125. package/es-modules/parts-gantt/GridAxis.js +965 -0
  126. package/es-modules/parts-gantt/Pathfinder.js +1247 -0
  127. package/es-modules/parts-gantt/PathfinderAlgorithms.js +746 -0
  128. package/es-modules/parts-gantt/Tree.js +146 -0
  129. package/es-modules/parts-gantt/TreeGrid.js +917 -0
  130. package/es-modules/parts-map/ColorAxis.js +1 -1
  131. package/es-modules/parts-map/ColorSeriesMixin.js +1 -1
  132. package/es-modules/parts-map/GeoJSON.js +1 -1
  133. package/es-modules/parts-map/HeatmapSeries.js +124 -53
  134. package/es-modules/parts-map/Map.js +1 -1
  135. package/es-modules/parts-map/MapAxis.js +1 -1
  136. package/es-modules/parts-map/MapBubbleSeries.js +1 -1
  137. package/es-modules/parts-map/MapLineSeries.js +1 -1
  138. package/es-modules/parts-map/MapNavigation.js +1 -1
  139. package/es-modules/parts-map/MapPointSeries.js +1 -1
  140. package/es-modules/parts-map/MapPointer.js +1 -1
  141. package/es-modules/parts-map/MapSeries.js +2 -2
  142. package/es-modules/parts-more/AreaRangeSeries.js +80 -38
  143. package/es-modules/parts-more/AreaSplineRangeSeries.js +1 -1
  144. package/es-modules/parts-more/BoxPlotSeries.js +1 -1
  145. package/es-modules/parts-more/BubbleSeries.js +1 -1
  146. package/es-modules/parts-more/ColumnRangeSeries.js +1 -1
  147. package/es-modules/parts-more/ErrorBarSeries.js +1 -1
  148. package/es-modules/parts-more/GaugeSeries.js +1 -1
  149. package/es-modules/parts-more/Pane.js +2 -1
  150. package/es-modules/parts-more/Polar.js +1 -1
  151. package/es-modules/parts-more/PolygonSeries.js +1 -1
  152. package/es-modules/parts-more/RadialAxis.js +5 -4
  153. package/es-modules/parts-more/WaterfallSeries.js +1 -1
  154. package/es-modules/supplemental.docs.js +0 -1955
  155. package/es-modules/themes/dark-blue.js +1 -1
  156. package/es-modules/themes/dark-green.js +1 -1
  157. package/es-modules/themes/dark-unica.js +1 -1
  158. package/es-modules/themes/gray.js +1 -1
  159. package/es-modules/themes/grid-light.js +1 -1
  160. package/es-modules/themes/grid.js +1 -1
  161. package/es-modules/themes/sand-signika.js +1 -1
  162. package/es-modules/themes/skies.js +1 -1
  163. package/highcharts-3d.js +1 -1
  164. package/highcharts-3d.src.js +10 -10
  165. package/highcharts-gantt.js +503 -0
  166. package/highcharts-gantt.js.map +1 -0
  167. package/highcharts-gantt.src.js +49289 -0
  168. package/highcharts-more.js +65 -64
  169. package/highcharts-more.js.map +1 -1
  170. package/highcharts-more.src.js +97 -53
  171. package/highcharts.js +415 -410
  172. package/highcharts.js.map +1 -1
  173. package/highcharts.src.js +2170 -1128
  174. package/highmaps.js +443 -438
  175. package/highmaps.js.map +1 -1
  176. package/highmaps.src.js +1647 -849
  177. package/highstock.js +553 -548
  178. package/highstock.js.map +1 -1
  179. package/highstock.src.js +2398 -1283
  180. package/indicators/accumulation-distribution.js +1 -1
  181. package/indicators/accumulation-distribution.src.js +1 -1
  182. package/indicators/atr.js +1 -1
  183. package/indicators/atr.src.js +1 -1
  184. package/indicators/bollinger-bands.js +1 -1
  185. package/indicators/bollinger-bands.src.js +1 -1
  186. package/indicators/cci.js +1 -1
  187. package/indicators/cci.src.js +1 -1
  188. package/indicators/cmf.js +1 -1
  189. package/indicators/cmf.src.js +1 -1
  190. package/indicators/ema.js +1 -1
  191. package/indicators/ema.src.js +1 -1
  192. package/indicators/ichimoku-kinko-hyo.js +1 -1
  193. package/indicators/ichimoku-kinko-hyo.src.js +1 -1
  194. package/indicators/indicators.js +1 -1
  195. package/indicators/indicators.src.js +1 -1
  196. package/indicators/macd.js +1 -1
  197. package/indicators/macd.src.js +1 -1
  198. package/indicators/mfi.js +1 -1
  199. package/indicators/mfi.src.js +1 -1
  200. package/indicators/momentum.js +1 -1
  201. package/indicators/momentum.src.js +2 -2
  202. package/indicators/pivot-points.js +4 -4
  203. package/indicators/pivot-points.js.map +1 -1
  204. package/indicators/pivot-points.src.js +7 -2
  205. package/indicators/price-envelopes.js +1 -1
  206. package/indicators/price-envelopes.src.js +1 -1
  207. package/indicators/psar.js +1 -1
  208. package/indicators/psar.src.js +1 -1
  209. package/indicators/roc.js +1 -1
  210. package/indicators/roc.src.js +1 -1
  211. package/indicators/rsi.js +1 -1
  212. package/indicators/rsi.src.js +1 -1
  213. package/indicators/stochastic.js +1 -1
  214. package/indicators/stochastic.src.js +1 -1
  215. package/indicators/volume-by-price.js +1 -1
  216. package/indicators/volume-by-price.src.js +1 -1
  217. package/indicators/vwap.js +1 -1
  218. package/indicators/vwap.src.js +1 -1
  219. package/indicators/wma.js +1 -1
  220. package/indicators/wma.src.js +1 -1
  221. package/indicators/zigzag.js +1 -1
  222. package/indicators/zigzag.src.js +1 -1
  223. package/js/es-modules/indicators/momentum.src.js +1 -1
  224. package/js/es-modules/indicators/pivot-points.src.js +6 -1
  225. package/js/es-modules/masters/highcharts-gantt.src.js +11 -0
  226. package/js/es-modules/masters/modules/annotations.src.js +1 -1
  227. package/js/es-modules/masters/modules/arrow-symbols.src.js +12 -0
  228. package/js/es-modules/masters/modules/broken-axis.src.js +1 -1
  229. package/js/es-modules/masters/modules/current-date-indicator.src.js +12 -0
  230. package/js/es-modules/masters/modules/data.src.js +1 -1
  231. package/js/es-modules/masters/modules/draggable-points.src.js +9 -0
  232. package/js/es-modules/masters/modules/export-data.src.js +1 -1
  233. package/js/es-modules/masters/modules/exporting.src.js +1 -1
  234. package/js/es-modules/masters/modules/funnel.src.js +1 -1
  235. package/js/es-modules/masters/modules/gantt.src.js +2 -1
  236. package/js/es-modules/masters/modules/grid-axis.src.js +1 -1
  237. package/js/es-modules/masters/modules/heatmap.src.js +1 -1
  238. package/js/es-modules/masters/modules/item-series.src.js +1 -1
  239. package/js/es-modules/masters/modules/map.src.js +1 -1
  240. package/js/es-modules/masters/modules/overlapping-datalabels.src.js +1 -1
  241. package/js/es-modules/masters/modules/pathfinder.src.js +12 -0
  242. package/js/es-modules/masters/modules/sankey.src.js +1 -1
  243. package/js/es-modules/masters/modules/series-label.src.js +1 -1
  244. package/js/es-modules/masters/modules/solid-gauge.src.js +1 -1
  245. package/js/es-modules/masters/modules/stock.src.js +1 -1
  246. package/js/es-modules/masters/modules/streamgraph.src.js +1 -1
  247. package/js/es-modules/masters/modules/treegrid.src.js +12 -0
  248. package/js/es-modules/masters/modules/variwide.src.js +1 -1
  249. package/js/es-modules/masters/modules/vector.src.js +1 -1
  250. package/js/es-modules/masters/modules/windbarb.src.js +1 -1
  251. package/js/es-modules/masters/modules/xrange.src.js +1 -1
  252. package/js/es-modules/masters/themes/dark-blue.src.js +1 -1
  253. package/js/es-modules/masters/themes/dark-green.src.js +1 -1
  254. package/js/es-modules/masters/themes/dark-unica.src.js +1 -1
  255. package/js/es-modules/masters/themes/gray.src.js +1 -1
  256. package/js/es-modules/masters/themes/grid-light.src.js +1 -1
  257. package/js/es-modules/masters/themes/grid.src.js +1 -1
  258. package/js/es-modules/masters/themes/sand-signika.src.js +1 -1
  259. package/js/es-modules/masters/themes/skies.src.js +1 -1
  260. package/js/es-modules/mixins/centered-series.js +1 -1
  261. package/js/es-modules/mixins/on-series.js +1 -1
  262. package/js/es-modules/modules/boost.src.js +22 -14
  263. package/js/es-modules/modules/broken-axis.src.js +169 -134
  264. package/js/es-modules/modules/data.src.js +2 -2
  265. package/js/es-modules/modules/draggable-points.src.js +2257 -0
  266. package/js/es-modules/modules/drilldown.src.js +1 -0
  267. package/js/es-modules/modules/export-data.src.js +1 -1
  268. package/js/es-modules/modules/exporting.src.js +1 -1
  269. package/js/es-modules/modules/funnel.src.js +1 -1
  270. package/js/es-modules/modules/item-series.src.js +1 -1
  271. package/js/es-modules/modules/no-data-to-display.src.js +5 -5
  272. package/js/es-modules/modules/oldie.src.js +1 -1
  273. package/js/es-modules/modules/overlapping-datalabels.src.js +38 -22
  274. package/js/es-modules/modules/parallel-coordinates.src.js +3 -2
  275. package/js/es-modules/modules/sankey.src.js +1 -1
  276. package/js/es-modules/modules/series-label.src.js +2 -2
  277. package/js/es-modules/modules/solid-gauge.src.js +1 -1
  278. package/js/es-modules/modules/static-scale.src.js +67 -28
  279. package/js/es-modules/modules/streamgraph.src.js +1 -1
  280. package/js/es-modules/modules/tilemap.src.js +231 -134
  281. package/js/es-modules/modules/variwide.src.js +1 -1
  282. package/js/es-modules/modules/vector.src.js +92 -22
  283. package/js/es-modules/modules/windbarb.src.js +1 -1
  284. package/js/es-modules/modules/xrange.src.js +255 -68
  285. package/js/es-modules/parts/AreaSeries.js +77 -77
  286. package/js/es-modules/parts/AreaSplineSeries.js +64 -27
  287. package/js/es-modules/parts/Axis.js +160 -67
  288. package/js/es-modules/parts/BarSeries.js +68 -51
  289. package/js/es-modules/parts/CandlestickSeries.js +1 -1
  290. package/js/es-modules/parts/Chart.js +31 -55
  291. package/js/es-modules/parts/Color.js +29 -18
  292. package/js/es-modules/parts/ColumnSeries.js +231 -123
  293. package/js/es-modules/parts/DataGrouping.js +9 -6
  294. package/js/es-modules/parts/DataLabels.js +230 -182
  295. package/js/es-modules/parts/DateTimeAxis.js +26 -7
  296. package/js/es-modules/parts/Dynamics.js +5 -2
  297. package/js/es-modules/parts/FlagsSeries.js +1 -1
  298. package/js/es-modules/parts/Globals.js +1 -1
  299. package/js/es-modules/parts/Html.js +64 -12
  300. package/js/es-modules/parts/Interaction.js +178 -61
  301. package/js/es-modules/parts/Legend.js +7 -3
  302. package/js/es-modules/parts/LogarithmicAxis.js +35 -4
  303. package/js/es-modules/parts/MSPointer.js +1 -1
  304. package/js/es-modules/parts/Navigator.js +27 -5
  305. package/js/es-modules/parts/OHLCSeries.js +1 -1
  306. package/js/es-modules/parts/Options.js +13 -12
  307. package/js/es-modules/parts/OrdinalAxis.js +1 -1
  308. package/js/es-modules/parts/PieSeries.js +245 -132
  309. package/js/es-modules/parts/PlotBandSeries.experimental.js +1 -1
  310. package/js/es-modules/parts/PlotLineOrBand.js +7 -40
  311. package/js/es-modules/parts/Point.js +28 -4
  312. package/js/es-modules/parts/Pointer.js +8 -6
  313. package/js/es-modules/parts/RangeSelector.js +1 -1
  314. package/js/es-modules/parts/Responsive.js +82 -36
  315. package/js/es-modules/parts/ScatterSeries.js +56 -25
  316. package/js/es-modules/parts/ScrollablePlotArea.js +17 -7
  317. package/js/es-modules/parts/Scrollbar.js +9 -2
  318. package/js/es-modules/parts/Series.js +22 -9
  319. package/js/es-modules/parts/SplineSeries.js +51 -29
  320. package/js/es-modules/parts/Stacking.js +100 -6
  321. package/js/es-modules/parts/StockChart.js +9 -3
  322. package/js/es-modules/parts/SvgRenderer.js +15 -10
  323. package/js/es-modules/parts/Tick.js +150 -30
  324. package/js/es-modules/parts/Time.js +23 -5
  325. package/js/es-modules/parts/Tooltip.js +2 -2
  326. package/js/es-modules/parts/TouchPointer.js +1 -1
  327. package/js/es-modules/parts/Utilities.js +16 -1
  328. package/js/es-modules/parts-3d/Axis.js +1 -1
  329. package/js/es-modules/parts-3d/Chart.js +1 -1
  330. package/js/es-modules/parts-3d/Column.js +1 -1
  331. package/js/es-modules/parts-3d/Math.js +1 -1
  332. package/js/es-modules/parts-3d/Pie.js +1 -1
  333. package/js/es-modules/parts-3d/SVGRenderer.js +1 -1
  334. package/js/es-modules/parts-3d/Scatter.js +1 -1
  335. package/js/es-modules/parts-3d/Series.js +1 -1
  336. package/js/es-modules/parts-3d/VMLRenderer.js +1 -1
  337. package/js/es-modules/parts-gantt/ArrowSymbols.js +110 -0
  338. package/js/es-modules/parts-gantt/CurrentDateIndicator.js +92 -0
  339. package/js/es-modules/parts-gantt/GanttChart.js +111 -0
  340. package/js/es-modules/parts-gantt/GanttSeries.js +371 -0
  341. package/js/es-modules/parts-gantt/GridAxis.js +962 -0
  342. package/js/es-modules/parts-gantt/Pathfinder.js +1225 -0
  343. package/js/es-modules/parts-gantt/PathfinderAlgorithms.js +746 -0
  344. package/js/es-modules/parts-gantt/Tree.js +146 -0
  345. package/js/es-modules/parts-gantt/TreeGrid.js +891 -0
  346. package/js/es-modules/parts-map/ColorAxis.js +1 -1
  347. package/js/es-modules/parts-map/ColorSeriesMixin.js +1 -1
  348. package/js/es-modules/parts-map/GeoJSON.js +1 -1
  349. package/js/es-modules/parts-map/HeatmapSeries.js +122 -52
  350. package/js/es-modules/parts-map/Map.js +1 -1
  351. package/js/es-modules/parts-map/MapAxis.js +1 -1
  352. package/js/es-modules/parts-map/MapBubbleSeries.js +1 -1
  353. package/js/es-modules/parts-map/MapLineSeries.js +1 -1
  354. package/js/es-modules/parts-map/MapNavigation.js +1 -1
  355. package/js/es-modules/parts-map/MapPointSeries.js +1 -1
  356. package/js/es-modules/parts-map/MapPointer.js +1 -1
  357. package/js/es-modules/parts-map/MapSeries.js +2 -2
  358. package/js/es-modules/parts-more/AreaRangeSeries.js +80 -38
  359. package/js/es-modules/parts-more/AreaSplineRangeSeries.js +1 -1
  360. package/js/es-modules/parts-more/BoxPlotSeries.js +1 -1
  361. package/js/es-modules/parts-more/BubbleSeries.js +1 -1
  362. package/js/es-modules/parts-more/ColumnRangeSeries.js +1 -1
  363. package/js/es-modules/parts-more/ErrorBarSeries.js +1 -1
  364. package/js/es-modules/parts-more/GaugeSeries.js +1 -1
  365. package/js/es-modules/parts-more/Pane.js +2 -1
  366. package/js/es-modules/parts-more/Polar.js +1 -1
  367. package/js/es-modules/parts-more/PolygonSeries.js +1 -1
  368. package/js/es-modules/parts-more/RadialAxis.js +5 -4
  369. package/js/es-modules/parts-more/WaterfallSeries.js +1 -1
  370. package/js/es-modules/supplemental.docs.js +0 -1955
  371. package/js/es-modules/themes/dark-blue.js +1 -1
  372. package/js/es-modules/themes/dark-green.js +1 -1
  373. package/js/es-modules/themes/dark-unica.js +1 -1
  374. package/js/es-modules/themes/gray.js +1 -1
  375. package/js/es-modules/themes/grid-light.js +1 -1
  376. package/js/es-modules/themes/grid.js +1 -1
  377. package/js/es-modules/themes/sand-signika.js +1 -1
  378. package/js/es-modules/themes/skies.js +1 -1
  379. package/js/highcharts-3d.js +1 -1
  380. package/js/highcharts-3d.src.js +10 -10
  381. package/js/highcharts-gantt.js +480 -0
  382. package/js/highcharts-gantt.js.map +1 -0
  383. package/js/highcharts-gantt.src.js +47011 -0
  384. package/js/highcharts-more.js +62 -61
  385. package/js/highcharts-more.js.map +1 -1
  386. package/js/highcharts-more.src.js +97 -53
  387. package/js/highcharts.js +394 -390
  388. package/js/highcharts.js.map +1 -1
  389. package/js/highcharts.src.js +2083 -1070
  390. package/js/highmaps.js +420 -416
  391. package/js/highmaps.js.map +1 -1
  392. package/js/highmaps.src.js +1569 -798
  393. package/js/highstock.js +526 -520
  394. package/js/highstock.js.map +1 -1
  395. package/js/highstock.src.js +2311 -1225
  396. package/js/indicators/accumulation-distribution.js +1 -1
  397. package/js/indicators/accumulation-distribution.src.js +1 -1
  398. package/js/indicators/atr.js +1 -1
  399. package/js/indicators/atr.src.js +1 -1
  400. package/js/indicators/bollinger-bands.js +1 -1
  401. package/js/indicators/bollinger-bands.src.js +1 -1
  402. package/js/indicators/cci.js +1 -1
  403. package/js/indicators/cci.src.js +1 -1
  404. package/js/indicators/cmf.js +1 -1
  405. package/js/indicators/cmf.src.js +1 -1
  406. package/js/indicators/ema.js +1 -1
  407. package/js/indicators/ema.src.js +1 -1
  408. package/js/indicators/ichimoku-kinko-hyo.js +1 -1
  409. package/js/indicators/ichimoku-kinko-hyo.src.js +1 -1
  410. package/js/indicators/indicators.js +1 -1
  411. package/js/indicators/indicators.src.js +1 -1
  412. package/js/indicators/macd.js +1 -1
  413. package/js/indicators/macd.src.js +1 -1
  414. package/js/indicators/mfi.js +1 -1
  415. package/js/indicators/mfi.src.js +1 -1
  416. package/js/indicators/momentum.js +1 -1
  417. package/js/indicators/momentum.src.js +2 -2
  418. package/js/indicators/pivot-points.js +4 -4
  419. package/js/indicators/pivot-points.js.map +1 -1
  420. package/js/indicators/pivot-points.src.js +7 -2
  421. package/js/indicators/price-envelopes.js +1 -1
  422. package/js/indicators/price-envelopes.src.js +1 -1
  423. package/js/indicators/psar.js +1 -1
  424. package/js/indicators/psar.src.js +1 -1
  425. package/js/indicators/roc.js +1 -1
  426. package/js/indicators/roc.src.js +1 -1
  427. package/js/indicators/rsi.js +1 -1
  428. package/js/indicators/rsi.src.js +1 -1
  429. package/js/indicators/stochastic.js +1 -1
  430. package/js/indicators/stochastic.src.js +1 -1
  431. package/js/indicators/volume-by-price.js +1 -1
  432. package/js/indicators/volume-by-price.src.js +1 -1
  433. package/js/indicators/vwap.js +1 -1
  434. package/js/indicators/vwap.src.js +1 -1
  435. package/js/indicators/wma.js +1 -1
  436. package/js/indicators/wma.src.js +1 -1
  437. package/js/indicators/zigzag.js +1 -1
  438. package/js/indicators/zigzag.src.js +1 -1
  439. package/js/modules/accessibility.js +1 -1
  440. package/js/modules/accessibility.src.js +1 -1
  441. package/js/modules/annotations.js +2 -2
  442. package/js/modules/annotations.src.js +2 -2
  443. package/js/modules/arrow-symbols.js +13 -0
  444. package/js/modules/arrow-symbols.js.map +1 -0
  445. package/js/modules/arrow-symbols.src.js +138 -0
  446. package/js/modules/boost-canvas.js +1 -1
  447. package/js/modules/boost-canvas.src.js +1 -1
  448. package/js/modules/boost.js +43 -43
  449. package/js/modules/boost.js.map +1 -1
  450. package/js/modules/boost.src.js +23 -15
  451. package/js/modules/broken-axis.js +11 -10
  452. package/js/modules/broken-axis.js.map +1 -1
  453. package/js/modules/broken-axis.src.js +171 -136
  454. package/js/modules/bullet.js +1 -1
  455. package/js/modules/bullet.src.js +1 -1
  456. package/js/modules/current-date-indicator.js +13 -0
  457. package/js/modules/current-date-indicator.js.map +1 -0
  458. package/js/modules/current-date-indicator.src.js +120 -0
  459. package/js/modules/data.js +2 -2
  460. package/js/modules/data.src.js +4 -4
  461. package/js/modules/drag-panes.js +1 -1
  462. package/js/modules/drag-panes.src.js +1 -1
  463. package/js/modules/draggable-points.js +38 -0
  464. package/js/modules/draggable-points.js.map +1 -0
  465. package/js/modules/draggable-points.src.js +2281 -0
  466. package/js/modules/drilldown.js +1 -1
  467. package/js/modules/drilldown.js.map +1 -1
  468. package/js/modules/drilldown.src.js +2 -1
  469. package/js/modules/export-data.js +2 -2
  470. package/js/modules/export-data.src.js +3 -3
  471. package/js/modules/exporting.js +2 -2
  472. package/js/modules/exporting.src.js +3 -3
  473. package/js/modules/funnel.js +2 -2
  474. package/js/modules/funnel.src.js +3 -3
  475. package/js/modules/gantt.js +80 -18
  476. package/js/modules/gantt.js.map +1 -1
  477. package/js/modules/gantt.src.js +5490 -372
  478. package/js/modules/grid-axis.js +15 -11
  479. package/js/modules/grid-axis.js.map +1 -1
  480. package/js/modules/grid-axis.src.js +731 -293
  481. package/js/modules/heatmap.js +2 -2
  482. package/js/modules/heatmap.js.map +1 -1
  483. package/js/modules/heatmap.src.js +126 -56
  484. package/js/modules/histogram-bellcurve.js +1 -1
  485. package/js/modules/histogram-bellcurve.src.js +1 -1
  486. package/js/modules/item-series.js +2 -2
  487. package/js/modules/item-series.src.js +3 -3
  488. package/js/modules/map.js +2 -2
  489. package/js/modules/map.js.map +1 -1
  490. package/js/modules/map.src.js +137 -67
  491. package/js/modules/no-data-to-display.js +1 -1
  492. package/js/modules/no-data-to-display.src.js +6 -6
  493. package/js/modules/offline-exporting.js +2 -2
  494. package/js/modules/offline-exporting.src.js +2 -2
  495. package/js/modules/oldie.js +2 -2
  496. package/js/modules/oldie.src.js +3 -3
  497. package/js/modules/overlapping-datalabels.js +2 -2
  498. package/js/modules/overlapping-datalabels.src.js +2 -2
  499. package/js/modules/parallel-coordinates.js +9 -9
  500. package/js/modules/parallel-coordinates.js.map +1 -1
  501. package/js/modules/parallel-coordinates.src.js +4 -3
  502. package/js/modules/pareto.js +1 -1
  503. package/js/modules/pareto.src.js +1 -1
  504. package/js/modules/pathfinder.js +34 -0
  505. package/js/modules/pathfinder.js.map +1 -0
  506. package/js/modules/pathfinder.src.js +2106 -0
  507. package/js/modules/pattern-fill.js +1 -1
  508. package/js/modules/pattern-fill.src.js +1 -1
  509. package/js/modules/sankey.js +2 -2
  510. package/js/modules/sankey.src.js +3 -3
  511. package/js/modules/series-label.js +2 -2
  512. package/js/modules/series-label.src.js +4 -4
  513. package/js/modules/solid-gauge.js +2 -2
  514. package/js/modules/solid-gauge.src.js +3 -3
  515. package/js/modules/static-scale.js +3 -3
  516. package/js/modules/static-scale.js.map +1 -1
  517. package/js/modules/static-scale.src.js +65 -26
  518. package/js/modules/stock.js +135 -134
  519. package/js/modules/stock.js.map +1 -1
  520. package/js/modules/stock.src.js +230 -157
  521. package/js/modules/streamgraph.js +2 -2
  522. package/js/modules/streamgraph.src.js +3 -3
  523. package/js/modules/sunburst.js +1 -1
  524. package/js/modules/sunburst.src.js +1 -1
  525. package/js/modules/tilemap.js +1 -1
  526. package/js/modules/tilemap.js.map +1 -1
  527. package/js/modules/tilemap.src.js +355 -188
  528. package/js/modules/treegrid.js +51 -0
  529. package/js/modules/treegrid.js.map +1 -0
  530. package/js/modules/treegrid.src.js +2759 -0
  531. package/js/modules/treemap.js +1 -1
  532. package/js/modules/treemap.src.js +1 -1
  533. package/js/modules/variable-pie.js +1 -1
  534. package/js/modules/variable-pie.src.js +1 -1
  535. package/js/modules/variwide.js +2 -2
  536. package/js/modules/variwide.src.js +3 -3
  537. package/js/modules/vector.js +2 -2
  538. package/js/modules/vector.js.map +1 -1
  539. package/js/modules/vector.src.js +94 -24
  540. package/js/modules/windbarb.js +2 -2
  541. package/js/modules/windbarb.src.js +4 -4
  542. package/js/modules/wordcloud.js +1 -1
  543. package/js/modules/wordcloud.src.js +1 -1
  544. package/js/modules/xrange.js +11 -10
  545. package/js/modules/xrange.js.map +1 -1
  546. package/js/modules/xrange.src.js +257 -70
  547. package/js/themes/avocado.js +1 -1
  548. package/js/themes/avocado.src.js +1 -1
  549. package/js/themes/dark-blue.js +2 -2
  550. package/js/themes/dark-blue.src.js +3 -3
  551. package/js/themes/dark-green.js +2 -2
  552. package/js/themes/dark-green.src.js +3 -3
  553. package/js/themes/dark-unica.js +2 -2
  554. package/js/themes/dark-unica.src.js +3 -3
  555. package/js/themes/gray.js +2 -2
  556. package/js/themes/gray.src.js +3 -3
  557. package/js/themes/grid-light.js +2 -2
  558. package/js/themes/grid-light.src.js +3 -3
  559. package/js/themes/grid.js +2 -2
  560. package/js/themes/grid.src.js +3 -3
  561. package/js/themes/sand-signika.js +2 -2
  562. package/js/themes/sand-signika.src.js +3 -3
  563. package/js/themes/skies.js +2 -2
  564. package/js/themes/skies.src.js +3 -3
  565. package/js/themes/sunset.js +1 -1
  566. package/js/themes/sunset.src.js +1 -1
  567. package/modules/accessibility.js +1 -1
  568. package/modules/accessibility.src.js +1 -1
  569. package/modules/annotations.js +2 -2
  570. package/modules/annotations.src.js +2 -2
  571. package/modules/arrow-symbols.js +13 -0
  572. package/modules/arrow-symbols.js.map +1 -0
  573. package/modules/arrow-symbols.src.js +138 -0
  574. package/modules/boost-canvas.js +1 -1
  575. package/modules/boost-canvas.src.js +1 -1
  576. package/modules/boost.js +36 -36
  577. package/modules/boost.js.map +1 -1
  578. package/modules/boost.src.js +23 -15
  579. package/modules/broken-axis.js +11 -10
  580. package/modules/broken-axis.js.map +1 -1
  581. package/modules/broken-axis.src.js +171 -136
  582. package/modules/bullet.js +1 -1
  583. package/modules/bullet.src.js +1 -1
  584. package/modules/current-date-indicator.js +13 -0
  585. package/modules/current-date-indicator.js.map +1 -0
  586. package/modules/current-date-indicator.src.js +120 -0
  587. package/modules/data.js +2 -2
  588. package/modules/data.src.js +4 -4
  589. package/modules/drag-panes.js +1 -1
  590. package/modules/drag-panes.src.js +1 -1
  591. package/modules/draggable-points.js +38 -0
  592. package/modules/draggable-points.js.map +1 -0
  593. package/modules/draggable-points.src.js +2281 -0
  594. package/modules/drilldown.js +1 -1
  595. package/modules/drilldown.js.map +1 -1
  596. package/modules/drilldown.src.js +2 -1
  597. package/modules/export-data.js +2 -2
  598. package/modules/export-data.src.js +3 -3
  599. package/modules/exporting.js +2 -2
  600. package/modules/exporting.src.js +3 -3
  601. package/modules/funnel.js +2 -2
  602. package/modules/funnel.src.js +3 -3
  603. package/modules/gantt.js +83 -19
  604. package/modules/gantt.js.map +1 -1
  605. package/modules/gantt.src.js +5553 -379
  606. package/modules/grid-axis.js +16 -11
  607. package/modules/grid-axis.js.map +1 -1
  608. package/modules/grid-axis.src.js +732 -293
  609. package/modules/heatmap.js +2 -2
  610. package/modules/heatmap.js.map +1 -1
  611. package/modules/heatmap.src.js +128 -57
  612. package/modules/histogram-bellcurve.js +1 -1
  613. package/modules/histogram-bellcurve.src.js +1 -1
  614. package/modules/item-series.js +2 -2
  615. package/modules/item-series.src.js +3 -3
  616. package/modules/map.js +2 -2
  617. package/modules/map.js.map +1 -1
  618. package/modules/map.src.js +139 -68
  619. package/modules/no-data-to-display.js +1 -1
  620. package/modules/no-data-to-display.src.js +6 -6
  621. package/modules/offline-exporting.js +2 -2
  622. package/modules/offline-exporting.src.js +2 -2
  623. package/modules/oldie.js +2 -2
  624. package/modules/oldie.src.js +3 -3
  625. package/modules/overlapping-datalabels.js +2 -2
  626. package/modules/overlapping-datalabels.src.js +2 -2
  627. package/modules/parallel-coordinates.js +8 -8
  628. package/modules/parallel-coordinates.js.map +1 -1
  629. package/modules/parallel-coordinates.src.js +4 -3
  630. package/modules/pareto.js +1 -1
  631. package/modules/pareto.src.js +1 -1
  632. package/modules/pathfinder.js +35 -0
  633. package/modules/pathfinder.js.map +1 -0
  634. package/modules/pathfinder.src.js +2128 -0
  635. package/modules/pattern-fill.js +1 -1
  636. package/modules/pattern-fill.src.js +1 -1
  637. package/modules/sankey.js +2 -2
  638. package/modules/sankey.src.js +3 -3
  639. package/modules/series-label.js +2 -2
  640. package/modules/series-label.src.js +4 -4
  641. package/modules/solid-gauge.js +2 -2
  642. package/modules/solid-gauge.src.js +3 -3
  643. package/modules/static-scale.js +3 -3
  644. package/modules/static-scale.js.map +1 -1
  645. package/modules/static-scale.src.js +65 -26
  646. package/modules/stock.js +142 -142
  647. package/modules/stock.js.map +1 -1
  648. package/modules/stock.src.js +230 -157
  649. package/modules/streamgraph.js +2 -2
  650. package/modules/streamgraph.src.js +3 -3
  651. package/modules/sunburst.js +1 -1
  652. package/modules/sunburst.src.js +1 -1
  653. package/modules/tilemap.js +1 -1
  654. package/modules/tilemap.js.map +1 -1
  655. package/modules/tilemap.src.js +357 -189
  656. package/modules/treegrid.js +52 -0
  657. package/modules/treegrid.js.map +1 -0
  658. package/modules/treegrid.src.js +2797 -0
  659. package/modules/treemap.js +1 -1
  660. package/modules/treemap.src.js +1 -1
  661. package/modules/variable-pie.js +1 -1
  662. package/modules/variable-pie.src.js +1 -1
  663. package/modules/variwide.js +2 -2
  664. package/modules/variwide.src.js +3 -3
  665. package/modules/vector.js +2 -2
  666. package/modules/vector.js.map +1 -1
  667. package/modules/vector.src.js +94 -24
  668. package/modules/windbarb.js +2 -2
  669. package/modules/windbarb.src.js +4 -4
  670. package/modules/wordcloud.js +1 -1
  671. package/modules/wordcloud.src.js +1 -1
  672. package/modules/xrange.js +12 -11
  673. package/modules/xrange.js.map +1 -1
  674. package/modules/xrange.src.js +259 -79
  675. package/package.json +1 -1
  676. package/themes/avocado.js +1 -1
  677. package/themes/avocado.src.js +1 -1
  678. package/themes/dark-blue.js +2 -2
  679. package/themes/dark-blue.src.js +3 -3
  680. package/themes/dark-green.js +2 -2
  681. package/themes/dark-green.src.js +3 -3
  682. package/themes/dark-unica.js +2 -2
  683. package/themes/dark-unica.src.js +3 -3
  684. package/themes/gray.js +2 -2
  685. package/themes/gray.src.js +3 -3
  686. package/themes/grid-light.js +2 -2
  687. package/themes/grid-light.src.js +3 -3
  688. package/themes/grid.js +2 -2
  689. package/themes/grid.src.js +3 -3
  690. package/themes/sand-signika.js +2 -2
  691. package/themes/sand-signika.src.js +3 -3
  692. package/themes/skies.js +2 -2
  693. package/themes/skies.src.js +3 -3
  694. package/themes/sunset.js +1 -1
  695. package/themes/sunset.src.js +1 -1
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Highcharts JS v6.1.4 (2018-09-25)
2
+ * @license Highcharts JS v6.2.0 (2018-10-17)
3
3
  * GridAxis
4
4
  *
5
5
  * (c) 2016 Lars A. V. Cabrera
@@ -28,14 +28,78 @@
28
28
  * License: www.highcharts.com/license
29
29
  */
30
30
 
31
- var each = H.each,
32
- isObject = H.isObject,
31
+ var argsToArray = function (args) {
32
+ return Array.prototype.slice.call(args, 1);
33
+ },
34
+ dateFormat = H.dateFormat,
35
+ defined = H.defined,
36
+ each = H.each,
37
+ isArray = H.isArray,
38
+ isNumber = H.isNumber,
39
+ isObject = function (x) {
40
+ // Always use strict mode
41
+ return H.isObject(x, true);
42
+ },
43
+ merge = H.merge,
33
44
  pick = H.pick,
34
45
  wrap = H.wrap,
35
46
  Axis = H.Axis,
36
- Chart = H.Chart,
37
47
  Tick = H.Tick;
38
48
 
49
+ /**
50
+ * Set grid options for the axis labels. Requires Highcharts Gantt.
51
+ *
52
+ * @type {object}
53
+ * @since 6.2.0
54
+ * @product gantt
55
+ * @apioption xAxis.grid
56
+ */
57
+
58
+ /**
59
+ * Enable grid on the axis labels. Defaults to true for Gantt charts.
60
+ *
61
+ * @type {boolean}
62
+ * @since 6.2.0
63
+ * @default true
64
+ * @product gantt
65
+ * @apioption xAxis.grid.enabled
66
+ */
67
+
68
+ /**
69
+ * Set specific options for each column (or row for horizontal axes) in the
70
+ * grid. Each extra column/row is its own axis, and the axis options can be set
71
+ * here.
72
+ *
73
+ * @type {Array<object>}
74
+ * @sample gantt/demo/left-axis-table
75
+ * Left axis as a table
76
+ * @apioption xAxis.grid.columns
77
+ */
78
+
79
+ /**
80
+ * Set border color for the label grid lines.
81
+ *
82
+ * @type {Highcharts.ColorString}
83
+ * @apioption xAxis.grid.borderColor
84
+ */
85
+
86
+ /**
87
+ * Set border width of the label grid lines.
88
+ *
89
+ * @type {number}
90
+ * @default 1
91
+ * @apioption xAxis.grid.borderWidth
92
+ */
93
+
94
+ /**
95
+ * Set cell height for grid axis labels. By default this is calculated from font
96
+ * size.
97
+ *
98
+ * @type {number}
99
+ * @default null
100
+ * @apioption xAxis.grid.cellHeight
101
+ */
102
+
39
103
 
40
104
  // Enum for which side the axis is on.
41
105
  // Maps to axis.side
@@ -50,6 +114,14 @@
50
114
  3: 'left'
51
115
  };
52
116
 
117
+ /**
118
+ * Checks if an axis is a navigator axis.
119
+ * @return {Boolean} true if axis is found in axis.chart.navigator
120
+ */
121
+ Axis.prototype.isNavigatorAxis = function () {
122
+ return /highcharts-navigator-[xy]axis/.test(this.options.className);
123
+ };
124
+
53
125
  /**
54
126
  * Checks if an axis is the outer axis in its dimension. Since
55
127
  * axes are placed outwards in order, the axis with the highest
@@ -64,11 +136,12 @@
64
136
  */
65
137
  Axis.prototype.isOuterAxis = function () {
66
138
  var axis = this,
139
+ chart = axis.chart,
67
140
  thisIndex = -1,
68
141
  isOuter = true;
69
142
 
70
- each(this.chart.axes, function (otherAxis, index) {
71
- if (otherAxis.side === axis.side) {
143
+ each(chart.axes, function (otherAxis, index) {
144
+ if (otherAxis.side === axis.side && !otherAxis.isNavigatorAxis()) {
72
145
  if (otherAxis === axis) {
73
146
  // Get the index of the axis in question
74
147
  thisIndex = index;
@@ -77,9 +150,8 @@
77
150
  // not been found yet
78
151
  } else if (thisIndex >= 0 && index > thisIndex) {
79
152
  // There was an axis on the same side with a
80
- // higher index. Exit the loop.
153
+ // higher index.
81
154
  isOuter = false;
82
- return;
83
155
  }
84
156
  }
85
157
  });
@@ -89,97 +161,37 @@
89
161
  };
90
162
 
91
163
  /**
92
- * Shortcut function to Tick.label.getBBox().width.
93
- *
94
- * @return {number} width - the width of the tick label
164
+ * Get the largest label width and height.
165
+ * @param {object} ticks All the ticks on one axis.
166
+ * @param {array} tickPositions All the tick positions on one axis.
167
+ * @return {object} object containing the properties height and width.
95
168
  */
96
- Tick.prototype.getLabelWidth = function () {
97
- return this.label.getBBox().width;
98
- };
99
-
100
- /**
101
- * Get the maximum label length.
102
- * This function can be used in states where the axis.maxLabelLength has not
103
- * been set.
104
- *
105
- * @param {boolean} force - Optional parameter to force a new calculation, even
106
- * if a value has already been set
107
- * @return {number} maxLabelLength - the maximum label length of the axis
108
- */
109
- Axis.prototype.getMaxLabelLength = function (force) {
110
- var tickPositions = this.tickPositions,
111
- ticks = this.ticks,
112
- maxLabelLength = 0;
113
-
114
- if (!this.maxLabelLength || force) {
115
- each(tickPositions, function (tick) {
116
- tick = ticks[tick];
117
- if (tick && tick.labelLength > maxLabelLength) {
118
- maxLabelLength = tick.labelLength;
119
- }
120
- });
121
- this.maxLabelLength = maxLabelLength;
122
- }
123
- return this.maxLabelLength;
124
- };
125
-
126
- /**
127
- * Adds the axis defined in axis.options.title
128
- */
129
- Axis.prototype.addTitle = function () {
130
- var axis = this,
131
- renderer = axis.chart.renderer,
132
- axisParent = axis.axisParent,
133
- horiz = axis.horiz,
134
- opposite = axis.opposite,
135
- options = axis.options,
136
- axisTitleOptions = options.title,
137
- hasData,
138
- showAxis,
139
- textAlign;
140
-
141
- // For reuse in Axis.render
142
- hasData = axis.hasData();
143
- axis.showAxis = showAxis = hasData || pick(options.showEmpty, true);
144
-
145
- // Disregard title generation in original Axis.getOffset()
146
- options.title = '';
147
-
148
- if (!axis.axisTitle) {
149
- textAlign = axisTitleOptions.textAlign;
150
- if (!textAlign) {
151
- textAlign = (horiz ? {
152
- low: 'left',
153
- middle: 'center',
154
- high: 'right'
155
- } : {
156
- low: opposite ? 'right' : 'left',
157
- middle: 'center',
158
- high: opposite ? 'left' : 'right'
159
- })[axisTitleOptions.align];
169
+ Axis.prototype.getMaxLabelDimensions = function (ticks, tickPositions) {
170
+ var dimensions = {
171
+ width: 0,
172
+ height: 0
173
+ };
174
+
175
+ each(tickPositions, function (pos) {
176
+ var tick = ticks[pos],
177
+ tickHeight = 0,
178
+ tickWidth = 0,
179
+ label;
180
+
181
+ if (isObject(tick)) {
182
+ label = isObject(tick.label) ? tick.label : {};
183
+
184
+ // Find width and height of tick
185
+ tickHeight = label.getBBox ? label.getBBox().height : 0;
186
+ tickWidth = isNumber(label.textPxLength) ? label.textPxLength : 0;
187
+
188
+ // Update the result if width and/or height are larger
189
+ dimensions.height = Math.max(tickHeight, dimensions.height);
190
+ dimensions.width = Math.max(tickWidth, dimensions.width);
160
191
  }
161
- axis.axisTitle = renderer.text(
162
- axisTitleOptions.text,
163
- 0,
164
- 0,
165
- axisTitleOptions.useHTML
166
- )
167
- .attr({
168
- zIndex: 7,
169
- rotation: axisTitleOptions.rotation || 0,
170
- align: textAlign
171
- })
172
- .addClass('highcharts-axis-title')
173
-
174
- // Add to axisParent instead of axisGroup, to ignore the space
175
- // it takes
176
- .add(axisParent);
177
- axis.axisTitle.isNew = true;
178
- }
179
-
192
+ });
180
193
 
181
- // hide or show the title depending on whether showEmpty is set
182
- axis.axisTitle[showAxis ? 'show' : 'hide'](true);
194
+ return dimensions;
183
195
  };
184
196
 
185
197
  /**
@@ -188,106 +200,172 @@
188
200
  H.dateFormats = {
189
201
  // Week number
190
202
  W: function (timestamp) {
191
- var date = new this.Date(timestamp),
192
- day = this.get('Day', date) === 0 ? 7 : this.get('Day', date),
193
- time = date.getTime(),
194
- startOfYear = new Date(this.get('FullYear', date), 0, 1, -6),
195
- dayNumber;
196
- this.set('Date', date, this.get('Date', date) + 4 - day);
197
- dayNumber = Math.floor((time - startOfYear) / 86400000);
198
- return 1 + Math.floor(dayNumber / 7);
203
+ var d = new Date(timestamp),
204
+ yearStart,
205
+ weekNo;
206
+ d.setHours(0, 0, 0, 0);
207
+ d.setDate(d.getDate() - (d.getDay() || 7));
208
+ yearStart = new Date(d.getFullYear(), 0, 1);
209
+ weekNo = Math.ceil((((d - yearStart) / 86400000) + 1) / 7);
210
+ return weekNo;
199
211
  },
200
212
  // First letter of the day of the week, e.g. 'M' for 'Monday'.
201
213
  E: function (timestamp) {
202
- return this.dateFormat('%a', timestamp, true).charAt(0);
214
+ return dateFormat('%a', timestamp, true).charAt(0);
203
215
  }
204
216
  };
205
217
 
206
218
  /**
207
- * Prevents adding the last tick label if the axis is not a category axis.
208
- *
209
- * Since numeric labels are normally placed at starts and ends of a range of
210
- * value, and this module makes the label point at the value, an "extra" label
211
- * would appear.
212
- *
219
+ * If chart is stockChart, always return 'left' to avoid labels being placed
220
+ * inside chart. Stock charts place yAxis labels inside by default.
213
221
  * @param {function} proceed - the original function
222
+ * @return {string} 'left' if stockChart, or auto calculated alignment
214
223
  */
215
- wrap(Tick.prototype, 'addLabel', function (proceed) {
216
- var axis = this.axis,
217
- isCategoryAxis = axis.options.categories !== undefined,
218
- tickPositions = axis.tickPositions,
219
- lastTick = tickPositions[tickPositions.length - 1],
220
- isLastTick = this.pos !== lastTick;
221
-
222
- if (!axis.options.grid || isCategoryAxis || isLastTick) {
223
- proceed.apply(this);
224
+ wrap(Axis.prototype, 'autoLabelAlign', function (proceed) {
225
+ var axis = this,
226
+ retVal;
227
+ if (axis.chart.isStock) {
228
+ retVal = 'left';
229
+ } else {
230
+ retVal = proceed.apply(axis, argsToArray(arguments));
224
231
  }
232
+ return retVal;
225
233
  });
226
234
 
227
235
  /**
228
- * Center tick labels vertically and horizontally between ticks
236
+ * Center tick labels in cells.
229
237
  *
230
238
  * @param {function} proceed - the original function
231
239
  *
232
240
  * @return {object} object - an object containing x and y positions
233
- * for the tick
241
+ * for the tick
234
242
  */
235
- wrap(Tick.prototype, 'getLabelPosition', function (proceed, x, y, label) {
236
- var retVal = proceed.apply(this, Array.prototype.slice.call(arguments, 1)),
237
- axis = this.axis,
243
+ wrap(Tick.prototype, 'getLabelPosition', function (proceed, x, y, label, horiz,
244
+ labelOpts, tickmarkOffset, index) {
245
+ var tick = this,
246
+ axis = tick.axis,
247
+ reversed = axis.reversed,
248
+ chart = axis.chart,
238
249
  options = axis.options,
239
- tickInterval = options.tickInterval || 1,
240
- newX,
241
- newPos,
242
- axisHeight,
243
- fontSize,
244
- labelMetrics,
245
- lblB,
246
- lblH,
247
- labelCenter;
248
-
249
- // Only center tick labels if axis has option grid: true
250
- if (options.grid) {
251
- fontSize = options.labels.style.fontSize;
252
- labelMetrics = axis.chart.renderer.fontMetrics(fontSize, label);
253
- lblB = labelMetrics.b;
254
- lblH = labelMetrics.h;
255
-
256
- if (axis.horiz && options.categories === undefined) {
257
- // Center x position
258
- axisHeight = axis.axisGroup.getBBox().height;
259
- newPos = this.pos + tickInterval / 2;
260
- retVal.x = axis.translate(newPos) + axis.left;
261
- labelCenter = (axisHeight / 2) + (lblH / 2) - Math.abs(lblH - lblB);
262
-
263
- // Center y position
264
- if (axis.side === axisSide.top) {
265
- retVal.y = y - labelCenter;
266
- } else {
267
- retVal.y = y + labelCenter;
268
- }
250
+ gridOptions = (options && isObject(options.grid)) ? options.grid : {},
251
+ align = labelOpts.align,
252
+ // verticalAlign is currently not supported for axis.labels.
253
+ verticalAlign = 'middle', // labelOpts.verticalAlign,
254
+ side = axisSide[axis.side],
255
+ tickPositions = axis.tickPositions,
256
+ tickPos = tick.pos - tickmarkOffset,
257
+ nextTickPos = (
258
+ isNumber(tickPositions[index + 1]) ?
259
+ tickPositions[index + 1] - tickmarkOffset :
260
+ axis.max + tickmarkOffset
261
+ ),
262
+ tickSize = axis.tickSize('tick', true),
263
+ tickWidth = isArray(tickSize) ? tickSize[0] : 0,
264
+ crispCorr = tickSize && tickSize[1] / 2,
265
+ labelHeight,
266
+ lblMetrics,
267
+ lines,
268
+ result,
269
+ bottom,
270
+ top,
271
+ left,
272
+ right;
273
+
274
+ // Only center tick labels in grid axes
275
+ if (gridOptions.enabled === true) {
276
+ /**
277
+ * Calculate top and bottom positions of the cell.
278
+ */
279
+ if (side === 'top') {
280
+ bottom = axis.top + axis.offset;
281
+ top = bottom - tickWidth;
282
+ } else if (side === 'bottom') {
283
+ top = chart.chartHeight - axis.bottom + axis.offset;
284
+ bottom = top + tickWidth;
269
285
  } else {
270
- // Center y position
271
- if (options.categories === undefined) {
272
- newPos = this.pos + (tickInterval / 2);
273
- retVal.y = axis.translate(newPos) + axis.top + (lblB / 2);
274
- }
286
+ bottom = axis.top + axis.len - axis.translate(
287
+ reversed ? nextTickPos : tickPos
288
+ );
289
+ top = axis.top + axis.len - axis.translate(
290
+ reversed ? tickPos : nextTickPos
291
+ );
292
+ }
275
293
 
276
- // Center x position
277
- newX = (this.getLabelWidth() / 2) - (axis.maxLabelLength / 2);
278
- if (axis.side === axisSide.left) {
279
- retVal.x += newX;
280
- } else {
281
- retVal.x -= newX;
282
- }
294
+ /**
295
+ * Calculate left and right positions of the cell.
296
+ */
297
+ if (side === 'right') {
298
+ left = chart.chartWidth - axis.right + axis.offset;
299
+ right = left + tickWidth;
300
+ } else if (side === 'left') {
301
+ right = axis.left + axis.offset;
302
+ left = right - tickWidth;
303
+ } else {
304
+ left = Math.round(axis.left + axis.translate(
305
+ reversed ? nextTickPos : tickPos
306
+ )) - crispCorr;
307
+ right = Math.round(axis.left + axis.translate(
308
+ reversed ? tickPos : nextTickPos
309
+ )) - crispCorr;
310
+ }
311
+
312
+ tick.slotWidth = right - left;
313
+
314
+ /**
315
+ * Calculate the positioning of the label based on alignment.
316
+ */
317
+ result = {
318
+ x: (
319
+ align === 'left' ?
320
+ left :
321
+ align === 'right' ?
322
+ right :
323
+ left + ((right - left) / 2) // default to center
324
+ ),
325
+ y: (
326
+ verticalAlign === 'top' ?
327
+ top :
328
+ verticalAlign === 'bottom' ?
329
+ bottom :
330
+ top + ((bottom - top) / 2) // default to middle
331
+ )
332
+ };
333
+
334
+ lblMetrics = chart.renderer.fontMetrics(
335
+ labelOpts.style.fontSize,
336
+ label.element
337
+ );
338
+ labelHeight = label.getBBox().height;
339
+
340
+ // Adjustment to y position to align the label correctly.
341
+ // Would be better to have a setter or similar for this.
342
+ if (!labelOpts.useHTML) {
343
+ lines = Math.round(labelHeight / lblMetrics.h);
344
+ result.y += (
345
+ // Center the label
346
+ // TODO: why does this actually center the label?
347
+ ((lblMetrics.b - (lblMetrics.h - lblMetrics.f)) / 2) +
348
+ // Adjust for height of additional lines.
349
+ -(((lines - 1) * lblMetrics.h) / 2)
350
+ );
351
+ } else {
352
+ result.y += (
353
+ // Readjust yCorr in htmlUpdateTransform
354
+ lblMetrics.b +
355
+ // Adjust for height of html label
356
+ -(labelHeight / 2)
357
+ );
283
358
  }
359
+
360
+ result.x += (axis.horiz && labelOpts.x || 0);
361
+ } else {
362
+ result = proceed.apply(tick, argsToArray(arguments));
284
363
  }
285
- return retVal;
364
+ return result;
286
365
  });
287
366
 
288
-
289
367
  /**
290
- * Draw vertical ticks extra long to create cell floors and roofs.
368
+ * Draw vertical axis ticks extra long to create cell floors and roofs.
291
369
  * Overrides the tickLength for vertical axes.
292
370
  *
293
371
  * @param {function} proceed - the original function
@@ -295,105 +373,400 @@
295
373
  */
296
374
  wrap(Axis.prototype, 'tickSize', function (proceed) {
297
375
  var axis = this,
298
- retVal = proceed.apply(axis, Array.prototype.slice.call(arguments, 1)),
376
+ dimensions = axis.maxLabelDimensions,
377
+ options = axis.options,
378
+ gridOptions = (options && isObject(options.grid)) ? options.grid : {},
379
+ retVal = proceed.apply(axis, argsToArray(arguments)),
299
380
  labelPadding,
300
381
  distance;
301
382
 
302
- if (axis.options.grid && !axis.horiz) {
383
+ if (gridOptions.enabled === true) {
303
384
  labelPadding = (Math.abs(axis.defaultLeftAxisOptions.labels.x) * 2);
304
- if (!axis.maxLabelLength) {
305
- axis.maxLabelLength = axis.getMaxLabelLength();
306
- }
307
- distance = axis.maxLabelLength + labelPadding;
385
+ distance = labelPadding +
386
+ (axis.horiz ? dimensions.height : dimensions.width);
308
387
 
309
- retVal[0] = distance;
388
+ if (isArray(retVal)) {
389
+ retVal[0] = distance;
390
+ } else {
391
+ retVal = [distance];
392
+ }
310
393
  }
311
394
  return retVal;
312
395
  });
313
396
 
397
+ wrap(Axis.prototype, 'getTitlePosition', function (proceed) {
398
+ var axis = this,
399
+ options = axis.options,
400
+ gridOptions = (options && isObject(options.grid)) ? options.grid : {};
401
+
402
+ if (gridOptions.enabled === true) {
403
+ // compute anchor points for each of the title align options
404
+ var title = axis.axisTitle,
405
+ titleWidth = title && title.getBBox().width,
406
+ horiz = axis.horiz,
407
+ axisLeft = axis.left,
408
+ axisTop = axis.top,
409
+ axisWidth = axis.width,
410
+ axisHeight = axis.height,
411
+ axisTitleOptions = options.title,
412
+ opposite = axis.opposite,
413
+ offset = axis.offset,
414
+ tickSize = axis.tickSize() || [0],
415
+ xOption = axisTitleOptions.x || 0,
416
+ yOption = axisTitleOptions.y || 0,
417
+ titleMargin = pick(axisTitleOptions.margin, horiz ? 5 : 10),
418
+ titleFontSize = axis.chart.renderer.fontMetrics(
419
+ axisTitleOptions.style && axisTitleOptions.style.fontSize,
420
+ title
421
+ ).f,
422
+ // TODO account for alignment
423
+ // the position in the perpendicular direction of the axis
424
+ offAxis = (horiz ? axisTop + axisHeight : axisLeft) +
425
+ (horiz ? 1 : -1) * // horizontal axis reverses the margin
426
+ (opposite ? -1 : 1) * // so does opposite axes
427
+ (tickSize[0] / 2) +
428
+ (axis.side === axisSide.bottom ? titleFontSize : 0);
429
+
430
+ return {
431
+ x: horiz ?
432
+ axisLeft - titleWidth / 2 - titleMargin + xOption :
433
+ offAxis + (opposite ? axisWidth : 0) + offset + xOption,
434
+ y: horiz ?
435
+ (
436
+ offAxis -
437
+ (opposite ? axisHeight : 0) +
438
+ (opposite ? titleFontSize : -titleFontSize) / 2 +
439
+ offset +
440
+ yOption
441
+ ) :
442
+ axisTop - titleMargin + yOption
443
+ };
444
+ }
445
+
446
+ return proceed.apply(this, argsToArray(arguments));
447
+ });
448
+
314
449
  /**
315
- * Disregards space required by axisTitle, by adding axisTitle to axisParent
316
- * instead of axisGroup, and disregarding margins and offsets related to
317
- * axisTitle.
318
- *
319
- * @param {function} proceed - the original function
450
+ * Avoid altering tickInterval when reserving space.
320
451
  */
321
- wrap(Axis.prototype, 'getOffset', function (proceed) {
452
+ wrap(Axis.prototype, 'unsquish', function (proceed) {
322
453
  var axis = this,
323
- axisOffset = axis.chart.axisOffset,
324
- side = axis.side,
325
- axisHeight,
326
- tickSize,
327
454
  options = axis.options,
328
- axisTitleOptions = options.title,
329
- addTitle = axisTitleOptions &&
330
- axisTitleOptions.text &&
331
- axisTitleOptions.enabled !== false;
455
+ gridOptions = (options && isObject(options.grid)) ? options.grid : {};
332
456
 
333
- if (axis.options.grid && isObject(axis.options.title)) {
457
+ if (gridOptions.enabled === true && this.categories) {
458
+ return this.tickInterval;
459
+ }
334
460
 
335
- tickSize = axis.tickSize('tick')[0];
336
- if (axisOffset[side] && tickSize) {
337
- axisHeight = axisOffset[side] + tickSize;
338
- }
461
+ return proceed.apply(this, argsToArray(arguments));
462
+ });
339
463
 
340
- if (addTitle) {
341
- // Use the custom addTitle() to add it, while preventing making room
342
- // for it
343
- axis.addTitle();
344
- }
464
+ /**
465
+ * Creates a left and right wall on horizontal axes:
466
+ * - Places leftmost tick at the start of the axis, to create a left wall
467
+ * - Ensures that the rightmost tick is at the end of the axis, to create a
468
+ * right wall.
469
+ *
470
+ * @param {function} proceed - the original function
471
+ * @param {object} options - the pure axis options as input by the user
472
+ */
473
+ H.addEvent(Axis, 'afterSetOptions', function (e) {
474
+ var options = this.options,
475
+ userOptions = e.userOptions,
476
+ gridAxisOptions,
477
+ gridOptions = (options && isObject(options.grid)) ? options.grid : {};
478
+
479
+ if (gridOptions.enabled === true) {
480
+
481
+ // Merge the user options into default grid axis options so that when a
482
+ // user option is set, it takes presedence.
483
+ gridAxisOptions = merge(true, {
484
+
485
+ className: 'highcharts-grid-axis ' + (userOptions.className || ''),
486
+
487
+ dateTimeLabelFormats: {
488
+ hour: {
489
+ list: ['%H:%M', '%H']
490
+ },
491
+ day: {
492
+ list: ['%A, %e. %B', '%a, %e. %b', '%E']
493
+ },
494
+ week: {
495
+ list: ['Week %W', 'W%W']
496
+ },
497
+ month: {
498
+ list: ['%B', '%b', '%o']
499
+ }
500
+ },
345
501
 
346
- proceed.apply(axis, Array.prototype.slice.call(arguments, 1));
502
+ grid: {
503
+ borderWidth: 1
504
+ },
347
505
 
348
- axisOffset[side] = pick(axisHeight, axisOffset[side]);
506
+ labels: {
507
+ padding: 2,
508
+ style: {
509
+ fontSize: '13px'
510
+ }
511
+ },
512
+
513
+ title: {
514
+ text: null,
515
+ reserveSpace: false,
516
+ rotation: 0
517
+ },
518
+
519
+ // In a grid axis, only allow one unit of certain types, for example
520
+ // we shouln't have one grid cell spanning two days.
521
+ units: [[
522
+ 'millisecond', // unit name
523
+ [1, 10, 100]
524
+ ], [
525
+ 'second',
526
+ [1, 10]
527
+ ], [
528
+ 'minute',
529
+ [1, 5, 15]
530
+ ], [
531
+ 'hour',
532
+ [1, 6]
533
+ ], [
534
+ 'day',
535
+ [1]
536
+ ], [
537
+ 'week',
538
+ [1]
539
+ ], [
540
+ 'month',
541
+ [1]
542
+ ], [
543
+ 'year',
544
+ null
545
+ ]]
546
+ }, userOptions);
547
+
548
+ // X-axis specific options
549
+ if (this.coll === 'xAxis') {
550
+
551
+ // For linked axes, tickPixelInterval is used only if the
552
+ // tickPositioner below doesn't run or returns undefined (like
553
+ // multiple years)
554
+ if (
555
+ defined(userOptions.linkedTo) &&
556
+ !defined(userOptions.tickPixelInterval)
557
+ ) {
558
+ gridAxisOptions.tickPixelInterval = 350;
559
+ }
349
560
 
561
+ // For the secondary grid axis, use the primary axis' tick intervals
562
+ // and return ticks one level higher.
563
+ if (
564
+ // Check for tick pixel interval in options
565
+ !defined(userOptions.tickPixelInterval) &&
566
+
567
+ // Only for linked axes
568
+ defined(userOptions.linkedTo) &&
569
+
570
+ !defined(userOptions.tickPositioner) &&
571
+ !defined(userOptions.tickInterval)
572
+ ) {
573
+ gridAxisOptions.tickPositioner = function (min, max) {
574
+
575
+ var parentInfo = (
576
+ this.linkedParent &&
577
+ this.linkedParent.tickPositions &&
578
+ this.linkedParent.tickPositions.info
579
+ );
580
+
581
+ if (parentInfo) {
582
+
583
+ var unitIdx,
584
+ count,
585
+ unitName,
586
+ i,
587
+ units = gridAxisOptions.units,
588
+ unitRange;
589
+
590
+ for (i = 0; i < units.length; i++) {
591
+ if (units[i][0] === parentInfo.unitName) {
592
+ unitIdx = i;
593
+ break;
594
+ }
595
+ }
596
+
597
+ // Spanning multiple years, go default
598
+ if (!units[unitIdx][1]) {
599
+ return;
600
+ }
601
+
602
+ // Get the first allowed count on the next unit.
603
+ if (units[unitIdx + 1]) {
604
+ unitName = units[unitIdx + 1][0];
605
+ count = (units[unitIdx + 1][1] || [1])[0];
606
+ }
607
+
608
+ unitRange = H.timeUnits[unitName];
609
+ this.tickInterval = unitRange * count;
610
+ return this.getTimeTicks(
611
+ {
612
+ unitRange: unitRange,
613
+ count: count,
614
+ unitName: unitName
615
+ },
616
+ min,
617
+ max,
618
+ this.options.startOfWeek
619
+ );
620
+ }
621
+ };
622
+ }
350
623
 
351
- // Put axis options back after original Axis.getOffset() has been called
352
- options.title = axisTitleOptions;
624
+ }
625
+
626
+ // Now merge the combined options into the axis options
627
+ merge(true, this.options, gridAxisOptions);
628
+
629
+ if (this.horiz) {
630
+ /** _________________________
631
+ * Make this: ___|_____|_____|_____|__|
632
+ * ^ ^
633
+ * _________________________
634
+ * Into this: |_____|_____|_____|_____|
635
+ * ^ ^
636
+ */
637
+ options.minPadding = pick(userOptions.minPadding, 0);
638
+ options.maxPadding = pick(userOptions.maxPadding, 0);
639
+ }
640
+
641
+ // If borderWidth is set, then use its value for tick and line width.
642
+ if (isNumber(options.grid.borderWidth)) {
643
+ options.tickWidth = options.lineWidth = gridOptions.borderWidth;
644
+ }
353
645
 
354
- } else {
355
- proceed.apply(axis, Array.prototype.slice.call(arguments, 1));
356
646
  }
357
647
  });
358
648
 
359
649
  /**
360
- * Prevents rotation of labels when squished, as rotating them would not
361
- * help.
650
+ * Ensures a left wall on horizontal axes with series inheriting from column.
651
+ * ColumnSeries normally sets pointRange to null, resulting in Axis to select
652
+ * other values for point ranges. This enforces the above Axis.setOptions()
653
+ * override.
654
+ * _________________________
655
+ * Enforce this: ___|_____|_____|_____|__|
656
+ * ^
657
+ * _________________________
658
+ * To be this: |_____|_____|_____|_____|
659
+ * ^
362
660
  *
363
661
  * @param {function} proceed - the original function
662
+ * @param {object} options - the pure axis options as input by the user
364
663
  */
365
- wrap(Axis.prototype, 'renderUnsquish', function (proceed) {
366
- if (this.options.grid) {
367
- this.labelRotation = 0;
368
- this.options.labels.rotation = 0;
664
+ wrap(Axis.prototype, 'setAxisTranslation', function (proceed) {
665
+ var axis = this,
666
+ options = axis.options,
667
+ gridOptions = (options && isObject(options.grid)) ? options.grid : {},
668
+ tickInfo = this.tickPositions && this.tickPositions.info,
669
+ userLabels = this.userOptions.labels || {};
670
+
671
+ if (this.horiz) {
672
+ if (gridOptions.enabled === true) {
673
+ each(axis.series, function (series) {
674
+ series.options.pointRange = 0;
675
+ });
676
+ }
677
+
678
+ // Lower level time ticks, like hours or minutes, represent points in
679
+ // time and not ranges. These should be aligned left in the grid cell
680
+ // by default. The same applies to years of higher order.
681
+ if (
682
+ tickInfo &&
683
+ (
684
+ options.dateTimeLabelFormats[tickInfo.unitName]
685
+ .range === false ||
686
+ tickInfo.count > 1 // years
687
+ ) &&
688
+ !defined(userLabels.align)
689
+ ) {
690
+ options.labels.align = 'left';
691
+
692
+ if (!defined(userLabels.x)) {
693
+ options.labels.x = 3;
694
+ }
695
+ }
369
696
  }
370
- proceed.apply(this);
697
+
698
+ proceed.apply(axis, argsToArray(arguments));
371
699
  });
372
700
 
701
+ // TODO: Does this function do what the drawing says? Seems to affect ticks and
702
+ // not the labels directly?
373
703
  /**
374
- * Places leftmost tick at the start of the axis, to create a left wall.
375
- *
704
+ * Makes tick labels which are usually ignored in a linked axis displayed if
705
+ * they are within range of linkedParent.min.
706
+ * _____________________________
707
+ * | | | | |
708
+ * Make this: | | 2 | 3 | 4 |
709
+ * |___|_______|_______|_______|
710
+ * ^
711
+ * _____________________________
712
+ * | | | | |
713
+ * Into this: | 1 | 2 | 3 | 4 |
714
+ * |___|_______|_______|_______|
715
+ * ^
376
716
  * @param {function} proceed - the original function
377
717
  */
378
- wrap(Axis.prototype, 'setOptions', function (proceed, userOptions) {
379
- var axis = this;
380
- if (userOptions.grid && axis.horiz) {
381
- userOptions.startOnTick = true;
382
- userOptions.minPadding = 0;
383
- userOptions.endOnTick = true;
718
+ wrap(Axis.prototype, 'trimTicks', function (proceed) {
719
+ var axis = this,
720
+ options = axis.options,
721
+ gridOptions = (options && isObject(options.grid)) ? options.grid : {},
722
+ categoryAxis = axis.categories,
723
+ tickPositions = axis.tickPositions,
724
+ firstPos = tickPositions[0],
725
+ lastPos = tickPositions[tickPositions.length - 1],
726
+ linkedMin = axis.linkedParent && axis.linkedParent.min,
727
+ linkedMax = axis.linkedParent && axis.linkedParent.max,
728
+ min = linkedMin || axis.min,
729
+ max = linkedMax || axis.max,
730
+ tickInterval = axis.tickInterval,
731
+ moreThanMin = firstPos > min,
732
+ lessThanMax = lastPos < max,
733
+ endMoreThanMin = firstPos < min && firstPos + tickInterval > min,
734
+ startLessThanMax = lastPos > max && lastPos - tickInterval < max;
735
+
736
+ if (
737
+ gridOptions.enabled === true &&
738
+ !categoryAxis &&
739
+ (axis.horiz || axis.isLinked)
740
+ ) {
741
+ if ((moreThanMin || endMoreThanMin) && !options.startOnTick) {
742
+ tickPositions[0] = min;
743
+ }
744
+
745
+ if ((lessThanMax || startLessThanMax) && !options.endOnTick) {
746
+ tickPositions[tickPositions.length - 1] = max;
747
+ }
384
748
  }
385
- proceed.apply(this, Array.prototype.slice.call(arguments, 1));
749
+
750
+ proceed.apply(axis, argsToArray(arguments));
386
751
  });
387
752
 
388
753
  /**
389
- * Draw an extra line on the far side of the the axisLine,
390
- * creating cell roofs of a grid.
754
+ * Draw an extra line on the far side of the outermost axis,
755
+ * creating floor/roof/wall of a grid. And some padding.
756
+ *
757
+ * Make this:
758
+ * (axis.min) __________________________ (axis.max)
759
+ * | | | | |
760
+ * Into this:
761
+ * (axis.min) __________________________ (axis.max)
762
+ * ___|____|____|____|____|__
391
763
  *
392
764
  * @param {function} proceed - the original function
393
765
  */
394
766
  wrap(Axis.prototype, 'render', function (proceed) {
395
767
  var axis = this,
396
768
  options = axis.options,
769
+ gridOptions = (options && isObject(options.grid)) ? options.grid : {},
397
770
  labelPadding,
398
771
  distance,
399
772
  lineWidth,
@@ -403,14 +776,21 @@
403
776
  xStartIndex,
404
777
  xEndIndex,
405
778
  renderer = axis.chart.renderer,
779
+ horiz = axis.horiz,
406
780
  axisGroupBox;
407
781
 
408
- if (options.grid) {
782
+ if (gridOptions.enabled === true) {
783
+ // TODO acutual label padding (top, bottom, left, right)
784
+ // Label padding is needed to figure out where to draw the outer line.
409
785
  labelPadding = (Math.abs(axis.defaultLeftAxisOptions.labels.x) * 2);
410
- distance = axis.maxLabelLength + labelPadding;
786
+ axis.maxLabelDimensions = axis.getMaxLabelDimensions(
787
+ axis.ticks,
788
+ axis.tickPositions
789
+ );
790
+ distance = axis.maxLabelDimensions.width + labelPadding;
411
791
  lineWidth = options.lineWidth;
412
792
 
413
- // Remove right wall before rendering
793
+ // Remove right wall before rendering if updating
414
794
  if (axis.rightWall) {
415
795
  axis.rightWall.destroy();
416
796
  }
@@ -421,27 +801,17 @@
421
801
 
422
802
  axisGroupBox = axis.axisGroup.getBBox();
423
803
 
424
- // Add right wall on horizontal axes
425
- if (axis.horiz) {
426
- axis.rightWall = renderer.path([
427
- 'M',
428
- axisGroupBox.x + axis.width + 1, // account for left wall
429
- axisGroupBox.y,
430
- 'L',
431
- axisGroupBox.x + axis.width + 1, // account for left wall
432
- axisGroupBox.y + axisGroupBox.height
433
- ])
434
- .attr({
435
- stroke: options.tickColor || '#ccd6eb',
436
- 'stroke-width': options.tickWidth || 1,
437
- zIndex: 7,
438
- class: 'grid-wall'
439
- })
440
- .add(axis.axisGroup);
441
- }
442
-
804
+ /*
805
+ * Draw an extra axis line on outer axes
806
+ * >
807
+ * Make this: |______|______|______|___
808
+ *
809
+ * > _________________________
810
+ * Into this: |______|______|______|__|
811
+ *
812
+ */
443
813
  if (axis.isOuterAxis() && axis.axisLine) {
444
- if (axis.horiz) {
814
+ if (horiz) {
445
815
  // -1 to avoid adding distance each time the chart updates
446
816
  distance = axisGroupBox.height - 1;
447
817
  }
@@ -459,7 +829,7 @@
459
829
  }
460
830
 
461
831
  // If axis is horizontal, reposition line path vertically
462
- if (axis.horiz) {
832
+ if (horiz) {
463
833
  linePath[yStartIndex] = linePath[yStartIndex] + distance;
464
834
  linePath[yEndIndex] = linePath[yEndIndex] + distance;
465
835
  } else {
@@ -471,10 +841,10 @@
471
841
  if (!axis.axisLineExtra) {
472
842
  axis.axisLineExtra = renderer.path(linePath)
473
843
  .attr({
474
- stroke: options.lineColor,
475
- 'stroke-width': lineWidth,
844
+
476
845
  zIndex: 7
477
846
  })
847
+ .addClass('highcharts-axis-line')
478
848
  .add(axis.axisGroup);
479
849
  } else {
480
850
  axis.axisLineExtra.animate({
@@ -486,62 +856,130 @@
486
856
  axis.axisLine[axis.showAxis ? 'show' : 'hide'](true);
487
857
  }
488
858
  }
859
+
489
860
  } else {
490
861
  proceed.apply(axis);
491
862
  }
492
863
  });
493
864
 
494
865
  /**
495
- * Wraps chart rendering with the following customizations:
496
- * 1. Prohibit timespans of multitudes of a time unit
497
- * 2. Draw cell walls on vertical axes
866
+ * Wraps axis init to draw cell walls on vertical axes.
498
867
  *
499
868
  * @param {function} proceed - the original function
500
869
  */
501
- wrap(Chart.prototype, 'render', function (proceed) {
502
- // 25 is optimal height for default fontSize (11px)
503
- // 25 / 11 ≈ 2.28
504
- var fontSizeToCellHeightRatio = 25 / 11,
505
- fontMetrics,
506
- fontSize;
507
-
508
- each(this.axes, function (axis) {
509
- var options = axis.options;
510
- if (options.grid) {
511
- fontSize = options.labels.style.fontSize;
870
+ wrap(Axis.prototype, 'init', function (proceed, chart, userOptions) {
871
+ var axis = this,
872
+ gridOptions = (
873
+ (userOptions && isObject(userOptions.grid)) ?
874
+ userOptions.grid :
875
+ {}
876
+ ),
877
+ columnOptions,
878
+ column,
879
+ columnIndex,
880
+ i;
881
+ function applyGridOptions(axis) {
882
+ var options = axis.options,
883
+ // TODO: Consider using cell margins defined in % of font size?
884
+ // 25 is optimal height for default fontSize (11px)
885
+ // 25 / 11 ≈ 2.28
886
+ fontSizeToCellHeightRatio = 25 / 11,
887
+ fontSize = options.labels.style.fontSize,
512
888
  fontMetrics = axis.chart.renderer.fontMetrics(fontSize);
513
889
 
514
- // Prohibit timespans of multitudes of a time unit,
515
- // e.g. two days, three weeks, etc.
516
- if (options.type === 'datetime') {
517
- options.units = [
518
- ['millisecond', [1]],
519
- ['second', [1]],
520
- ['minute', [1]],
521
- ['hour', [1]],
522
- ['day', [1]],
523
- ['week', [1]],
524
- ['month', [1]],
525
- ['year', null]
526
- ];
527
- }
890
+ // Center-align by default
891
+ if (!options.labels) {
892
+ options.labels = {};
893
+ }
894
+ options.labels.align = pick(options.labels.align, 'center');
895
+
896
+ // TODO: Check against tickLabelPlacement between/on etc
897
+ /**
898
+ * Prevents adding the last tick label if the axis is not a category
899
+ * axis.
900
+ *
901
+ * Since numeric labels are normally placed at starts and ends of a
902
+ * range of value, and this module makes the label point at the value,
903
+ * an "extra" label would appear.
904
+ */
905
+ if (!axis.categories) {
906
+ options.showLastLabel = false;
907
+ }
528
908
 
529
- // Make tick marks taller, creating cell walls of a grid.
530
- // Use cellHeight axis option if set
531
- if (axis.horiz) {
532
- options.tickLength = options.cellHeight ||
533
- fontMetrics.h * fontSizeToCellHeightRatio;
534
- } else {
535
- options.tickWidth = 1;
536
- if (!options.lineWidth) {
537
- options.lineWidth = 1;
538
- }
539
- }
909
+ /**
910
+ * Make tick marks taller, creating cell walls of a grid.
911
+ * Use cellHeight axis option if set
912
+ */
913
+ if (axis.horiz) {
914
+ options.tickLength = gridOptions.cellHeight ||
915
+ fontMetrics.h * fontSizeToCellHeightRatio;
540
916
  }
541
- });
542
917
 
543
- // Call original Chart.render()
544
- proceed.apply(this);
918
+ /**
919
+ * Prevents rotation of labels when squished, as rotating them would not
920
+ * help.
921
+ */
922
+ axis.labelRotation = 0;
923
+ options.labels.rotation = 0;
924
+ }
925
+
926
+ if (gridOptions.enabled) {
927
+ if (defined(gridOptions.borderColor)) {
928
+ userOptions.tickColor =
929
+ userOptions.lineColor = gridOptions.borderColor;
930
+ }
931
+
932
+ // Handle columns, each column is a grid axis
933
+ if (isArray(gridOptions.columns)) {
934
+ columnIndex = 0;
935
+ i = gridOptions.columns.length;
936
+ while (i--) {
937
+ columnOptions = merge(
938
+ userOptions,
939
+ gridOptions.columns[i],
940
+ {
941
+ // Force to behave like category axis
942
+ type: 'category'
943
+ }
944
+ );
945
+
946
+ delete columnOptions.grid.columns; // Prevent recursion
947
+
948
+ column = new Axis(chart, columnOptions);
949
+ column.isColumn = true;
950
+ column.columnIndex = columnIndex;
951
+
952
+ wrap(column, 'labelFormatter', function (proceed) {
953
+ var axis = this.axis,
954
+ tickPos = axis.tickPositions,
955
+ value = this.value,
956
+ series = axis.series[0],
957
+ isFirst = value === tickPos[0],
958
+ isLast = value === tickPos[tickPos.length - 1],
959
+ point = H.find(series.options.data, function (p) {
960
+ return p[axis.isXAxis ? 'x' : 'y'] === value;
961
+ });
962
+
963
+ // Make additional properties available for the formatter
964
+ this.isFirst = isFirst;
965
+ this.isLast = isLast;
966
+ this.point = point;
967
+
968
+ // Call original labelFormatter
969
+ return proceed.call(this);
970
+ });
971
+
972
+ columnIndex++;
973
+ }
974
+ } else {
975
+ // Call original Axis.init()
976
+ proceed.apply(axis, argsToArray(arguments));
977
+ applyGridOptions(axis);
978
+ }
979
+ } else {
980
+ // Call original Axis.init()
981
+ proceed.apply(axis, argsToArray(arguments));
982
+ }
545
983
  });
546
984
 
547
985
  }(Highcharts));