aw-highstock_rails 7.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (697) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.travis.yml +7 -0
  4. data/CODE_OF_CONDUCT.md +74 -0
  5. data/Gemfile +6 -0
  6. data/Gemfile.lock +22 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +53 -0
  9. data/Rakefile +10 -0
  10. data/aw-highstock_rails.gemspec +28 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +8 -0
  13. data/lib/aw/highstock_rails.rb +9 -0
  14. data/lib/aw/highstock_rails/version.rb +5 -0
  15. data/vendor/assets/javascripts/highstock/css/annotations/popup.css +229 -0
  16. data/vendor/assets/javascripts/highstock/css/annotations/popup.scss +235 -0
  17. data/vendor/assets/javascripts/highstock/css/highcharts.css +890 -0
  18. data/vendor/assets/javascripts/highstock/css/highcharts.scss +788 -0
  19. data/vendor/assets/javascripts/highstock/css/stocktools/gui.css +268 -0
  20. data/vendor/assets/javascripts/highstock/css/stocktools/gui.scss +270 -0
  21. data/vendor/assets/javascripts/highstock/css/themes/dark-unica.css +951 -0
  22. data/vendor/assets/javascripts/highstock/css/themes/dark-unica.scss +122 -0
  23. data/vendor/assets/javascripts/highstock/css/themes/grid-light.css +904 -0
  24. data/vendor/assets/javascripts/highstock/css/themes/grid-light.scss +33 -0
  25. data/vendor/assets/javascripts/highstock/css/themes/sand-signika.css +920 -0
  26. data/vendor/assets/javascripts/highstock/css/themes/sand-signika.scss +74 -0
  27. data/vendor/assets/javascripts/highstock/es-modules/annotations/ControlPoint.js +130 -0
  28. data/vendor/assets/javascripts/highstock/es-modules/annotations/MockPoint.js +415 -0
  29. data/vendor/assets/javascripts/highstock/es-modules/annotations/annotations.src.js +1231 -0
  30. data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/ControllableCircle.js +92 -0
  31. data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/ControllableImage.js +101 -0
  32. data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/ControllableLabel.js +452 -0
  33. data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/ControllablePath.js +175 -0
  34. data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/ControllableRect.js +93 -0
  35. data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/controllableMixin.js +411 -0
  36. data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/markerMixin.js +214 -0
  37. data/vendor/assets/javascripts/highstock/es-modules/annotations/eventEmitterMixin.js +271 -0
  38. data/vendor/assets/javascripts/highstock/es-modules/annotations/navigationBindings.js +1283 -0
  39. data/vendor/assets/javascripts/highstock/es-modules/annotations/popup.js +1069 -0
  40. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/CrookedLine.js +191 -0
  41. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/ElliottWave.js +76 -0
  42. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/Fibonacci.js +247 -0
  43. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/InfinityLine.js +185 -0
  44. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/Measure.js +928 -0
  45. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/Pitchfork.js +203 -0
  46. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/Tunnel.js +242 -0
  47. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/VerticalLine.js +157 -0
  48. data/vendor/assets/javascripts/highstock/es-modules/error-messages.js +128 -0
  49. data/vendor/assets/javascripts/highstock/es-modules/error.js +1 -0
  50. data/vendor/assets/javascripts/highstock/es-modules/indicators/acceleration-bands.src.js +199 -0
  51. data/vendor/assets/javascripts/highstock/es-modules/indicators/accumulation-distribution.src.js +129 -0
  52. data/vendor/assets/javascripts/highstock/es-modules/indicators/ao.src.js +206 -0
  53. data/vendor/assets/javascripts/highstock/es-modules/indicators/apo.src.js +148 -0
  54. data/vendor/assets/javascripts/highstock/es-modules/indicators/aroon-oscillator.src.js +128 -0
  55. data/vendor/assets/javascripts/highstock/es-modules/indicators/aroon.src.js +173 -0
  56. data/vendor/assets/javascripts/highstock/es-modules/indicators/atr.src.js +151 -0
  57. data/vendor/assets/javascripts/highstock/es-modules/indicators/bollinger-bands.src.js +209 -0
  58. data/vendor/assets/javascripts/highstock/es-modules/indicators/cci.src.js +131 -0
  59. data/vendor/assets/javascripts/highstock/es-modules/indicators/chaikin.src.js +167 -0
  60. data/vendor/assets/javascripts/highstock/es-modules/indicators/cmf.src.js +246 -0
  61. data/vendor/assets/javascripts/highstock/es-modules/indicators/dema.src.js +191 -0
  62. data/vendor/assets/javascripts/highstock/es-modules/indicators/dpo.src.js +138 -0
  63. data/vendor/assets/javascripts/highstock/es-modules/indicators/ema.src.js +166 -0
  64. data/vendor/assets/javascripts/highstock/es-modules/indicators/ichimoku-kinko-hyo.src.js +850 -0
  65. data/vendor/assets/javascripts/highstock/es-modules/indicators/indicators.src.js +425 -0
  66. data/vendor/assets/javascripts/highstock/es-modules/indicators/keltner-channels.src.js +193 -0
  67. data/vendor/assets/javascripts/highstock/es-modules/indicators/macd.src.js +417 -0
  68. data/vendor/assets/javascripts/highstock/es-modules/indicators/mfi.src.js +198 -0
  69. data/vendor/assets/javascripts/highstock/es-modules/indicators/momentum.src.js +119 -0
  70. data/vendor/assets/javascripts/highstock/es-modules/indicators/natr.src.js +74 -0
  71. data/vendor/assets/javascripts/highstock/es-modules/indicators/pivot-points.src.js +360 -0
  72. data/vendor/assets/javascripts/highstock/es-modules/indicators/ppo.src.js +152 -0
  73. data/vendor/assets/javascripts/highstock/es-modules/indicators/price-channel.src.js +149 -0
  74. data/vendor/assets/javascripts/highstock/es-modules/indicators/price-envelopes.src.js +251 -0
  75. data/vendor/assets/javascripts/highstock/es-modules/indicators/psar.src.js +307 -0
  76. data/vendor/assets/javascripts/highstock/es-modules/indicators/regressions.src.js +427 -0
  77. data/vendor/assets/javascripts/highstock/es-modules/indicators/roc.src.js +149 -0
  78. data/vendor/assets/javascripts/highstock/es-modules/indicators/rsi.src.js +163 -0
  79. data/vendor/assets/javascripts/highstock/es-modules/indicators/stochastic.src.js +193 -0
  80. data/vendor/assets/javascripts/highstock/es-modules/indicators/supertrend.src.js +544 -0
  81. data/vendor/assets/javascripts/highstock/es-modules/indicators/tema.src.js +247 -0
  82. data/vendor/assets/javascripts/highstock/es-modules/indicators/trix.src.js +96 -0
  83. data/vendor/assets/javascripts/highstock/es-modules/indicators/volume-by-price.src.js +671 -0
  84. data/vendor/assets/javascripts/highstock/es-modules/indicators/vwap.src.js +189 -0
  85. data/vendor/assets/javascripts/highstock/es-modules/indicators/williams-r.src.js +128 -0
  86. data/vendor/assets/javascripts/highstock/es-modules/indicators/wma.src.js +146 -0
  87. data/vendor/assets/javascripts/highstock/es-modules/indicators/zigzag.src.js +221 -0
  88. data/vendor/assets/javascripts/highstock/es-modules/masters/highcharts-3d.src.js +17 -0
  89. data/vendor/assets/javascripts/highstock/es-modules/masters/highcharts-more.src.js +22 -0
  90. data/vendor/assets/javascripts/highstock/es-modules/masters/highstock.src.js +11 -0
  91. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/acceleration-bands.src.js +11 -0
  92. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/accumulation-distribution.src.js +11 -0
  93. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/ao.src.js +11 -0
  94. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/apo.src.js +11 -0
  95. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/aroon-oscillator.src.js +11 -0
  96. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/aroon.src.js +11 -0
  97. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/atr.src.js +11 -0
  98. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/bollinger-bands.src.js +11 -0
  99. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/cci.src.js +11 -0
  100. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/chaikin.src.js +11 -0
  101. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/cmf.src.js +10 -0
  102. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/dema.src.js +11 -0
  103. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/dpo.src.js +11 -0
  104. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/ema.src.js +11 -0
  105. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +11 -0
  106. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/indicators-all.src.js +49 -0
  107. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/indicators.src.js +11 -0
  108. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/keltner-channels.src.js +11 -0
  109. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/macd.src.js +11 -0
  110. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/mfi.src.js +11 -0
  111. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/momentum.src.js +11 -0
  112. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/natr.src.js +11 -0
  113. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/pivot-points.src.js +11 -0
  114. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/ppo.src.js +11 -0
  115. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/price-channel.src.js +11 -0
  116. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/price-envelopes.src.js +11 -0
  117. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/psar.src.js +11 -0
  118. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/regressions.src.js +11 -0
  119. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/roc.src.js +11 -0
  120. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/rsi.src.js +11 -0
  121. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/stochastic.src.js +11 -0
  122. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/supertrend.src.js +11 -0
  123. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/tema.src.js +11 -0
  124. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/trix.src.js +11 -0
  125. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/volume-by-price.src.js +11 -0
  126. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/vwap.src.js +11 -0
  127. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/williams-r.src.js +11 -0
  128. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/wma.src.js +11 -0
  129. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/zigzag.src.js +11 -0
  130. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/accessibility.src.js +13 -0
  131. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/annotations-advanced.src.js +20 -0
  132. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/annotations.src.js +12 -0
  133. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/arrow-symbols.src.js +10 -0
  134. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/boost-canvas.src.js +11 -0
  135. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/boost.src.js +11 -0
  136. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/bullet.src.js +11 -0
  137. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/current-date-indicator.src.js +10 -0
  138. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/cylinder.src.js +10 -0
  139. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/data.src.js +10 -0
  140. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/datagrouping.src.js +12 -0
  141. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/debugger.src.js +13 -0
  142. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/dependency-wheel.src.js +10 -0
  143. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/drag-panes.src.js +11 -0
  144. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/draggable-points.src.js +9 -0
  145. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/drilldown.src.js +10 -0
  146. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/export-data.src.js +10 -0
  147. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/exporting.src.js +10 -0
  148. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/full-screen.src.js +11 -0
  149. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/funnel.src.js +10 -0
  150. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/grid-axis.src.js +10 -0
  151. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/heatmap.src.js +11 -0
  152. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/histogram-bellcurve.src.js +11 -0
  153. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/item-series.src.js +11 -0
  154. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/networkgraph.src.js +10 -0
  155. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/no-data-to-display.src.js +11 -0
  156. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/offline-exporting.src.js +10 -0
  157. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/oldie-polyfills.src.js +11 -0
  158. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/oldie.src.js +11 -0
  159. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/overlapping-datalabels.src.js +9 -0
  160. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/parallel-coordinates.src.js +11 -0
  161. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/pareto.src.js +11 -0
  162. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/pathfinder.src.js +10 -0
  163. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/pattern-fill.src.js +11 -0
  164. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/price-indicator.src.js +11 -0
  165. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/sankey.src.js +10 -0
  166. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/series-label.src.js +9 -0
  167. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/solid-gauge.src.js +10 -0
  168. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/sonification.src.js +12 -0
  169. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/static-scale.src.js +10 -0
  170. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/stock-tools.src.js +12 -0
  171. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/stock.src.js +19 -0
  172. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/streamgraph.src.js +10 -0
  173. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/sunburst.src.js +10 -0
  174. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/tilemap.src.js +10 -0
  175. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/timeline.src.js +11 -0
  176. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/treegrid.src.js +10 -0
  177. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/treemap.src.js +10 -0
  178. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/variable-pie.src.js +11 -0
  179. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/variwide.src.js +10 -0
  180. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/vector.src.js +10 -0
  181. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/venn.src.js +10 -0
  182. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/windbarb.src.js +10 -0
  183. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/wordcloud.src.js +10 -0
  184. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/xrange.src.js +10 -0
  185. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/avocado.js +9 -0
  186. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/avocado.src.js +9 -0
  187. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/dark-blue.src.js +9 -0
  188. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/dark-green.src.js +9 -0
  189. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/dark-unica.src.js +9 -0
  190. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/gray.src.js +9 -0
  191. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/grid-light.src.js +9 -0
  192. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/grid.src.js +9 -0
  193. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/sand-signika.src.js +9 -0
  194. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/skies.src.js +9 -0
  195. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/sunset.js +9 -0
  196. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/sunset.src.js +9 -0
  197. data/vendor/assets/javascripts/highstock/es-modules/mixins/ajax.js +123 -0
  198. data/vendor/assets/javascripts/highstock/es-modules/mixins/centered-series.js +116 -0
  199. data/vendor/assets/javascripts/highstock/es-modules/mixins/derived-series.js +150 -0
  200. data/vendor/assets/javascripts/highstock/es-modules/mixins/download-url.js +103 -0
  201. data/vendor/assets/javascripts/highstock/es-modules/mixins/draw-point.js +51 -0
  202. data/vendor/assets/javascripts/highstock/es-modules/mixins/geometry-circles.js +300 -0
  203. data/vendor/assets/javascripts/highstock/es-modules/mixins/geometry.js +50 -0
  204. data/vendor/assets/javascripts/highstock/es-modules/mixins/indicator-required.js +49 -0
  205. data/vendor/assets/javascripts/highstock/es-modules/mixins/multipe-lines.js +223 -0
  206. data/vendor/assets/javascripts/highstock/es-modules/mixins/navigation.js +59 -0
  207. data/vendor/assets/javascripts/highstock/es-modules/mixins/nodes.js +76 -0
  208. data/vendor/assets/javascripts/highstock/es-modules/mixins/on-series.js +167 -0
  209. data/vendor/assets/javascripts/highstock/es-modules/mixins/polygon.js +293 -0
  210. data/vendor/assets/javascripts/highstock/es-modules/mixins/reduce-array.js +53 -0
  211. data/vendor/assets/javascripts/highstock/es-modules/mixins/tree-series.js +256 -0
  212. data/vendor/assets/javascripts/highstock/es-modules/modules/a11y-i18n.src.js +524 -0
  213. data/vendor/assets/javascripts/highstock/es-modules/modules/annotations-legacy.src.js +1951 -0
  214. data/vendor/assets/javascripts/highstock/es-modules/modules/bellcurve.src.js +173 -0
  215. data/vendor/assets/javascripts/highstock/es-modules/modules/boost-canvas.src.js +732 -0
  216. data/vendor/assets/javascripts/highstock/es-modules/modules/boost.src.js +3730 -0
  217. data/vendor/assets/javascripts/highstock/es-modules/modules/bullet.src.js +361 -0
  218. data/vendor/assets/javascripts/highstock/es-modules/modules/cylinder.src.js +389 -0
  219. data/vendor/assets/javascripts/highstock/es-modules/modules/data.src.js +2417 -0
  220. data/vendor/assets/javascripts/highstock/es-modules/modules/debugger.src.js +109 -0
  221. data/vendor/assets/javascripts/highstock/es-modules/modules/dependency-wheel.src.js +199 -0
  222. data/vendor/assets/javascripts/highstock/es-modules/modules/drag-panes.src.js +624 -0
  223. data/vendor/assets/javascripts/highstock/es-modules/modules/draggable-points.src.js +2625 -0
  224. data/vendor/assets/javascripts/highstock/es-modules/modules/drilldown.src.js +1300 -0
  225. data/vendor/assets/javascripts/highstock/es-modules/modules/export-data.src.js +983 -0
  226. data/vendor/assets/javascripts/highstock/es-modules/modules/exporting.src.js +2149 -0
  227. data/vendor/assets/javascripts/highstock/es-modules/modules/full-screen.src.js +40 -0
  228. data/vendor/assets/javascripts/highstock/es-modules/modules/funnel.src.js +552 -0
  229. data/vendor/assets/javascripts/highstock/es-modules/modules/histogram.src.js +229 -0
  230. data/vendor/assets/javascripts/highstock/es-modules/modules/item-series.src.js +150 -0
  231. data/vendor/assets/javascripts/highstock/es-modules/modules/keyboard-navigation.src.js +1606 -0
  232. data/vendor/assets/javascripts/highstock/es-modules/modules/networkgraph/QuadTree.js +175 -0
  233. data/vendor/assets/javascripts/highstock/es-modules/modules/networkgraph/layouts.js +506 -0
  234. data/vendor/assets/javascripts/highstock/es-modules/modules/networkgraph/networkgraph.src.js +740 -0
  235. data/vendor/assets/javascripts/highstock/es-modules/modules/no-data-to-display.src.js +260 -0
  236. data/vendor/assets/javascripts/highstock/es-modules/modules/offline-exporting.src.js +710 -0
  237. data/vendor/assets/javascripts/highstock/es-modules/modules/oldie-polyfills.src.js +121 -0
  238. data/vendor/assets/javascripts/highstock/es-modules/modules/oldie.src.js +1556 -0
  239. data/vendor/assets/javascripts/highstock/es-modules/modules/overlapping-datalabels.src.js +250 -0
  240. data/vendor/assets/javascripts/highstock/es-modules/modules/parallel-coordinates.src.js +492 -0
  241. data/vendor/assets/javascripts/highstock/es-modules/modules/pareto.src.js +152 -0
  242. data/vendor/assets/javascripts/highstock/es-modules/modules/pattern-fill.src.js +607 -0
  243. data/vendor/assets/javascripts/highstock/es-modules/modules/price-indicator.src.js +149 -0
  244. data/vendor/assets/javascripts/highstock/es-modules/modules/sankey.src.js +809 -0
  245. data/vendor/assets/javascripts/highstock/es-modules/modules/screen-reader.src.js +954 -0
  246. data/vendor/assets/javascripts/highstock/es-modules/modules/series-label.src.js +1042 -0
  247. data/vendor/assets/javascripts/highstock/es-modules/modules/solid-gauge.src.js +486 -0
  248. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/Earcon.js +184 -0
  249. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/Instrument.js +582 -0
  250. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/Timeline.js +702 -0
  251. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/chartSonify.js +1026 -0
  252. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/instrumentDefinitions.js +37 -0
  253. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/musicalFrequencies.js +113 -0
  254. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/pointSonify.js +385 -0
  255. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/sonification.js +107 -0
  256. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/utilities.js +178 -0
  257. data/vendor/assets/javascripts/highstock/es-modules/modules/static-scale.src.js +88 -0
  258. data/vendor/assets/javascripts/highstock/es-modules/modules/stock-tools-bindings.js +1950 -0
  259. data/vendor/assets/javascripts/highstock/es-modules/modules/stock-tools-gui.js +1458 -0
  260. data/vendor/assets/javascripts/highstock/es-modules/modules/streamgraph.src.js +132 -0
  261. data/vendor/assets/javascripts/highstock/es-modules/modules/sunburst.src.js +1041 -0
  262. data/vendor/assets/javascripts/highstock/es-modules/modules/tilemap.src.js +769 -0
  263. data/vendor/assets/javascripts/highstock/es-modules/modules/timeline.src.js +750 -0
  264. data/vendor/assets/javascripts/highstock/es-modules/modules/treemap.src.js +1803 -0
  265. data/vendor/assets/javascripts/highstock/es-modules/modules/variable-pie.src.js +459 -0
  266. data/vendor/assets/javascripts/highstock/es-modules/modules/variwide.src.js +350 -0
  267. data/vendor/assets/javascripts/highstock/es-modules/modules/vector.src.js +354 -0
  268. data/vendor/assets/javascripts/highstock/es-modules/modules/venn.src.js +1192 -0
  269. data/vendor/assets/javascripts/highstock/es-modules/modules/windbarb.src.js +380 -0
  270. data/vendor/assets/javascripts/highstock/es-modules/modules/wordcloud.src.js +1103 -0
  271. data/vendor/assets/javascripts/highstock/es-modules/modules/xrange.src.js +761 -0
  272. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Axis.js +669 -0
  273. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Chart.js +1753 -0
  274. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Column.js +437 -0
  275. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Math.js +206 -0
  276. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Pie.js +207 -0
  277. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/SVGRenderer.js +1002 -0
  278. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Scatter.js +154 -0
  279. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Series.js +73 -0
  280. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/VMLRenderer.js +62 -0
  281. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/ArrowSymbols.js +198 -0
  282. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/CurrentDateIndicator.js +100 -0
  283. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/GanttChart.js +140 -0
  284. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/GanttSeries.js +415 -0
  285. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/GridAxis.js +961 -0
  286. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/Pathfinder.js +1298 -0
  287. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/PathfinderAlgorithms.js +816 -0
  288. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/Tree.js +158 -0
  289. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/TreeGrid.js +1003 -0
  290. data/vendor/assets/javascripts/highstock/es-modules/parts-map/ColorAxis.js +1103 -0
  291. data/vendor/assets/javascripts/highstock/es-modules/parts-map/ColorSeriesMixin.js +138 -0
  292. data/vendor/assets/javascripts/highstock/es-modules/parts-map/GeoJSON.js +435 -0
  293. data/vendor/assets/javascripts/highstock/es-modules/parts-map/HeatmapSeries.js +474 -0
  294. data/vendor/assets/javascripts/highstock/es-modules/parts-map/Map.js +477 -0
  295. data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapAxis.js +124 -0
  296. data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapBubbleSeries.js +274 -0
  297. data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapLineSeries.js +143 -0
  298. data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapNavigation.js +357 -0
  299. data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapPointSeries.js +187 -0
  300. data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapPointer.js +132 -0
  301. data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapSeries.js +1294 -0
  302. data/vendor/assets/javascripts/highstock/es-modules/parts-more/AreaRangeSeries.js +725 -0
  303. data/vendor/assets/javascripts/highstock/es-modules/parts-more/AreaSplineRangeSeries.js +98 -0
  304. data/vendor/assets/javascripts/highstock/es-modules/parts-more/BoxPlotSeries.js +617 -0
  305. data/vendor/assets/javascripts/highstock/es-modules/parts-more/BubbleLegend.js +1167 -0
  306. data/vendor/assets/javascripts/highstock/es-modules/parts-more/BubbleSeries.js +661 -0
  307. data/vendor/assets/javascripts/highstock/es-modules/parts-more/ColumnPyramidSeries.js +288 -0
  308. data/vendor/assets/javascripts/highstock/es-modules/parts-more/ColumnRangeSeries.js +278 -0
  309. data/vendor/assets/javascripts/highstock/es-modules/parts-more/ErrorBarSeries.js +172 -0
  310. data/vendor/assets/javascripts/highstock/es-modules/parts-more/GaugeSeries.js +618 -0
  311. data/vendor/assets/javascripts/highstock/es-modules/parts-more/PackedBubbleSeries.js +567 -0
  312. data/vendor/assets/javascripts/highstock/es-modules/parts-more/Pane.js +399 -0
  313. data/vendor/assets/javascripts/highstock/es-modules/parts-more/Polar.js +634 -0
  314. data/vendor/assets/javascripts/highstock/es-modules/parts-more/PolygonSeries.js +151 -0
  315. data/vendor/assets/javascripts/highstock/es-modules/parts-more/RadialAxis.js +685 -0
  316. data/vendor/assets/javascripts/highstock/es-modules/parts-more/WaterfallSeries.js +765 -0
  317. data/vendor/assets/javascripts/highstock/es-modules/parts.js +684 -0
  318. data/vendor/assets/javascripts/highstock/es-modules/parts/AreaSeries.js +578 -0
  319. data/vendor/assets/javascripts/highstock/es-modules/parts/AreaSplineSeries.js +122 -0
  320. data/vendor/assets/javascripts/highstock/es-modules/parts/Axis.js +6453 -0
  321. data/vendor/assets/javascripts/highstock/es-modules/parts/BarSeries.js +153 -0
  322. data/vendor/assets/javascripts/highstock/es-modules/parts/CandlestickSeries.js +358 -0
  323. data/vendor/assets/javascripts/highstock/es-modules/parts/Chart.js +2307 -0
  324. data/vendor/assets/javascripts/highstock/es-modules/parts/Color.js +301 -0
  325. data/vendor/assets/javascripts/highstock/es-modules/parts/ColumnSeries.js +1125 -0
  326. data/vendor/assets/javascripts/highstock/es-modules/parts/DataGrouping.js +1115 -0
  327. data/vendor/assets/javascripts/highstock/es-modules/parts/DataLabels.js +1431 -0
  328. data/vendor/assets/javascripts/highstock/es-modules/parts/DateTimeAxis.js +134 -0
  329. data/vendor/assets/javascripts/highstock/es-modules/parts/Dynamics.js +1301 -0
  330. data/vendor/assets/javascripts/highstock/es-modules/parts/FlagsSeries.js +739 -0
  331. data/vendor/assets/javascripts/highstock/es-modules/parts/Globals.js +75 -0
  332. data/vendor/assets/javascripts/highstock/es-modules/parts/Html.js +539 -0
  333. data/vendor/assets/javascripts/highstock/es-modules/parts/Interaction.js +1299 -0
  334. data/vendor/assets/javascripts/highstock/es-modules/parts/Legend.js +1411 -0
  335. data/vendor/assets/javascripts/highstock/es-modules/parts/LogarithmicAxis.js +168 -0
  336. data/vendor/assets/javascripts/highstock/es-modules/parts/MSPointer.js +176 -0
  337. data/vendor/assets/javascripts/highstock/es-modules/parts/Navigator.js +2486 -0
  338. data/vendor/assets/javascripts/highstock/es-modules/parts/OHLCSeries.js +412 -0
  339. data/vendor/assets/javascripts/highstock/es-modules/parts/Options.js +3732 -0
  340. data/vendor/assets/javascripts/highstock/es-modules/parts/OrdinalAxis.js +962 -0
  341. data/vendor/assets/javascripts/highstock/es-modules/parts/PieSeries.js +1328 -0
  342. data/vendor/assets/javascripts/highstock/es-modules/parts/PlotBandSeries.experimental.js +74 -0
  343. data/vendor/assets/javascripts/highstock/es-modules/parts/PlotLineOrBand.js +1061 -0
  344. data/vendor/assets/javascripts/highstock/es-modules/parts/Point.js +681 -0
  345. data/vendor/assets/javascripts/highstock/es-modules/parts/Pointer.js +1332 -0
  346. data/vendor/assets/javascripts/highstock/es-modules/parts/RangeSelector.js +2063 -0
  347. data/vendor/assets/javascripts/highstock/es-modules/parts/Responsive.js +295 -0
  348. data/vendor/assets/javascripts/highstock/es-modules/parts/ScatterSeries.js +278 -0
  349. data/vendor/assets/javascripts/highstock/es-modules/parts/ScrollablePlotArea.js +266 -0
  350. data/vendor/assets/javascripts/highstock/es-modules/parts/Scrollbar.js +1134 -0
  351. data/vendor/assets/javascripts/highstock/es-modules/parts/Series.js +5864 -0
  352. data/vendor/assets/javascripts/highstock/es-modules/parts/SplineSeries.js +267 -0
  353. data/vendor/assets/javascripts/highstock/es-modules/parts/Stacking.js +604 -0
  354. data/vendor/assets/javascripts/highstock/es-modules/parts/StockChart.js +951 -0
  355. data/vendor/assets/javascripts/highstock/es-modules/parts/SvgRenderer.js +5109 -0
  356. data/vendor/assets/javascripts/highstock/es-modules/parts/Tick.js +746 -0
  357. data/vendor/assets/javascripts/highstock/es-modules/parts/Time.js +881 -0
  358. data/vendor/assets/javascripts/highstock/es-modules/parts/Tooltip.js +1318 -0
  359. data/vendor/assets/javascripts/highstock/es-modules/parts/TouchPointer.js +404 -0
  360. data/vendor/assets/javascripts/highstock/es-modules/parts/Utilities.js +2751 -0
  361. data/vendor/assets/javascripts/highstock/es-modules/themes/avocado.js +37 -0
  362. data/vendor/assets/javascripts/highstock/es-modules/themes/dark-blue.js +259 -0
  363. data/vendor/assets/javascripts/highstock/es-modules/themes/dark-green.js +261 -0
  364. data/vendor/assets/javascripts/highstock/es-modules/themes/dark-unica.js +220 -0
  365. data/vendor/assets/javascripts/highstock/es-modules/themes/gray.js +267 -0
  366. data/vendor/assets/javascripts/highstock/es-modules/themes/grid-light.js +81 -0
  367. data/vendor/assets/javascripts/highstock/es-modules/themes/grid.js +110 -0
  368. data/vendor/assets/javascripts/highstock/es-modules/themes/sand-signika.js +111 -0
  369. data/vendor/assets/javascripts/highstock/es-modules/themes/skies.js +100 -0
  370. data/vendor/assets/javascripts/highstock/es-modules/themes/sunset.js +36 -0
  371. data/vendor/assets/javascripts/highstock/highcharts-3d.js +85 -0
  372. data/vendor/assets/javascripts/highstock/highcharts-3d.js.map +1 -0
  373. data/vendor/assets/javascripts/highstock/highcharts-more.js +101 -0
  374. data/vendor/assets/javascripts/highstock/highcharts-more.js.map +1 -0
  375. data/vendor/assets/javascripts/highstock/highstock.js +583 -0
  376. data/vendor/assets/javascripts/highstock/highstock.js.map +1 -0
  377. data/vendor/assets/javascripts/highstock/indicators/acceleration-bands.js +16 -0
  378. data/vendor/assets/javascripts/highstock/indicators/acceleration-bands.js.map +1 -0
  379. data/vendor/assets/javascripts/highstock/indicators/acceleration-bands.src.js +448 -0
  380. data/vendor/assets/javascripts/highstock/indicators/accumulation-distribution.js +12 -0
  381. data/vendor/assets/javascripts/highstock/indicators/accumulation-distribution.js.map +1 -0
  382. data/vendor/assets/javascripts/highstock/indicators/accumulation-distribution.src.js +156 -0
  383. data/vendor/assets/javascripts/highstock/indicators/ao.js +13 -0
  384. data/vendor/assets/javascripts/highstock/indicators/ao.js.map +1 -0
  385. data/vendor/assets/javascripts/highstock/indicators/ao.src.js +233 -0
  386. data/vendor/assets/javascripts/highstock/indicators/apo.js +13 -0
  387. data/vendor/assets/javascripts/highstock/indicators/apo.js.map +1 -0
  388. data/vendor/assets/javascripts/highstock/indicators/apo.src.js +223 -0
  389. data/vendor/assets/javascripts/highstock/indicators/aroon-oscillator.js +15 -0
  390. data/vendor/assets/javascripts/highstock/indicators/aroon-oscillator.js.map +1 -0
  391. data/vendor/assets/javascripts/highstock/indicators/aroon-oscillator.src.js +426 -0
  392. data/vendor/assets/javascripts/highstock/indicators/aroon.js +16 -0
  393. data/vendor/assets/javascripts/highstock/indicators/aroon.js.map +1 -0
  394. data/vendor/assets/javascripts/highstock/indicators/aroon.src.js +423 -0
  395. data/vendor/assets/javascripts/highstock/indicators/atr.js +12 -0
  396. data/vendor/assets/javascripts/highstock/indicators/atr.js.map +1 -0
  397. data/vendor/assets/javascripts/highstock/indicators/atr.src.js +178 -0
  398. data/vendor/assets/javascripts/highstock/indicators/bollinger-bands.js +16 -0
  399. data/vendor/assets/javascripts/highstock/indicators/bollinger-bands.js.map +1 -0
  400. data/vendor/assets/javascripts/highstock/indicators/bollinger-bands.src.js +458 -0
  401. data/vendor/assets/javascripts/highstock/indicators/cci.js +12 -0
  402. data/vendor/assets/javascripts/highstock/indicators/cci.js.map +1 -0
  403. data/vendor/assets/javascripts/highstock/indicators/cci.src.js +158 -0
  404. data/vendor/assets/javascripts/highstock/indicators/chaikin.js +15 -0
  405. data/vendor/assets/javascripts/highstock/indicators/chaikin.js.map +1 -0
  406. data/vendor/assets/javascripts/highstock/indicators/chaikin.src.js +370 -0
  407. data/vendor/assets/javascripts/highstock/indicators/cmf.js +12 -0
  408. data/vendor/assets/javascripts/highstock/indicators/cmf.js.map +1 -0
  409. data/vendor/assets/javascripts/highstock/indicators/cmf.src.js +273 -0
  410. data/vendor/assets/javascripts/highstock/indicators/dema.js +13 -0
  411. data/vendor/assets/javascripts/highstock/indicators/dema.js.map +1 -0
  412. data/vendor/assets/javascripts/highstock/indicators/dema.src.js +266 -0
  413. data/vendor/assets/javascripts/highstock/indicators/dpo.js +12 -0
  414. data/vendor/assets/javascripts/highstock/indicators/dpo.js.map +1 -0
  415. data/vendor/assets/javascripts/highstock/indicators/dpo.src.js +166 -0
  416. data/vendor/assets/javascripts/highstock/indicators/ema.js +12 -0
  417. data/vendor/assets/javascripts/highstock/indicators/ema.js.map +1 -0
  418. data/vendor/assets/javascripts/highstock/indicators/ema.src.js +193 -0
  419. data/vendor/assets/javascripts/highstock/indicators/ichimoku-kinko-hyo.js +22 -0
  420. data/vendor/assets/javascripts/highstock/indicators/ichimoku-kinko-hyo.js.map +1 -0
  421. data/vendor/assets/javascripts/highstock/indicators/ichimoku-kinko-hyo.src.js +877 -0
  422. data/vendor/assets/javascripts/highstock/indicators/indicators-all.js +117 -0
  423. data/vendor/assets/javascripts/highstock/indicators/indicators-all.js.map +1 -0
  424. data/vendor/assets/javascripts/highstock/indicators/indicators-all.src.js +9389 -0
  425. data/vendor/assets/javascripts/highstock/indicators/indicators.js +17 -0
  426. data/vendor/assets/javascripts/highstock/indicators/indicators.js.map +1 -0
  427. data/vendor/assets/javascripts/highstock/indicators/indicators.src.js +500 -0
  428. data/vendor/assets/javascripts/highstock/indicators/keltner-channels.js +16 -0
  429. data/vendor/assets/javascripts/highstock/indicators/keltner-channels.js.map +1 -0
  430. data/vendor/assets/javascripts/highstock/indicators/keltner-channels.src.js +442 -0
  431. data/vendor/assets/javascripts/highstock/indicators/macd.js +18 -0
  432. data/vendor/assets/javascripts/highstock/indicators/macd.js.map +1 -0
  433. data/vendor/assets/javascripts/highstock/indicators/macd.src.js +444 -0
  434. data/vendor/assets/javascripts/highstock/indicators/mfi.js +13 -0
  435. data/vendor/assets/javascripts/highstock/indicators/mfi.js.map +1 -0
  436. data/vendor/assets/javascripts/highstock/indicators/mfi.src.js +225 -0
  437. data/vendor/assets/javascripts/highstock/indicators/momentum.js +12 -0
  438. data/vendor/assets/javascripts/highstock/indicators/momentum.js.map +1 -0
  439. data/vendor/assets/javascripts/highstock/indicators/momentum.src.js +146 -0
  440. data/vendor/assets/javascripts/highstock/indicators/natr.js +12 -0
  441. data/vendor/assets/javascripts/highstock/indicators/natr.js.map +1 -0
  442. data/vendor/assets/javascripts/highstock/indicators/natr.src.js +101 -0
  443. data/vendor/assets/javascripts/highstock/indicators/pivot-points.js +16 -0
  444. data/vendor/assets/javascripts/highstock/indicators/pivot-points.js.map +1 -0
  445. data/vendor/assets/javascripts/highstock/indicators/pivot-points.src.js +387 -0
  446. data/vendor/assets/javascripts/highstock/indicators/ppo.js +13 -0
  447. data/vendor/assets/javascripts/highstock/indicators/ppo.js.map +1 -0
  448. data/vendor/assets/javascripts/highstock/indicators/ppo.src.js +227 -0
  449. data/vendor/assets/javascripts/highstock/indicators/price-channel.js +16 -0
  450. data/vendor/assets/javascripts/highstock/indicators/price-channel.js.map +1 -0
  451. data/vendor/assets/javascripts/highstock/indicators/price-channel.src.js +450 -0
  452. data/vendor/assets/javascripts/highstock/indicators/price-envelopes.js +15 -0
  453. data/vendor/assets/javascripts/highstock/indicators/price-envelopes.js.map +1 -0
  454. data/vendor/assets/javascripts/highstock/indicators/price-envelopes.src.js +278 -0
  455. data/vendor/assets/javascripts/highstock/indicators/psar.js +13 -0
  456. data/vendor/assets/javascripts/highstock/indicators/psar.js.map +1 -0
  457. data/vendor/assets/javascripts/highstock/indicators/psar.src.js +334 -0
  458. data/vendor/assets/javascripts/highstock/indicators/regressions.js +14 -0
  459. data/vendor/assets/javascripts/highstock/indicators/regressions.js.map +1 -0
  460. data/vendor/assets/javascripts/highstock/indicators/regressions.src.js +454 -0
  461. data/vendor/assets/javascripts/highstock/indicators/roc.js +12 -0
  462. data/vendor/assets/javascripts/highstock/indicators/roc.js.map +1 -0
  463. data/vendor/assets/javascripts/highstock/indicators/roc.src.js +176 -0
  464. data/vendor/assets/javascripts/highstock/indicators/rsi.js +12 -0
  465. data/vendor/assets/javascripts/highstock/indicators/rsi.js.map +1 -0
  466. data/vendor/assets/javascripts/highstock/indicators/rsi.src.js +190 -0
  467. data/vendor/assets/javascripts/highstock/indicators/stochastic.js +17 -0
  468. data/vendor/assets/javascripts/highstock/indicators/stochastic.js.map +1 -0
  469. data/vendor/assets/javascripts/highstock/indicators/stochastic.src.js +494 -0
  470. data/vendor/assets/javascripts/highstock/indicators/supertrend.js +17 -0
  471. data/vendor/assets/javascripts/highstock/indicators/supertrend.js.map +1 -0
  472. data/vendor/assets/javascripts/highstock/indicators/supertrend.src.js +571 -0
  473. data/vendor/assets/javascripts/highstock/indicators/tema.js +14 -0
  474. data/vendor/assets/javascripts/highstock/indicators/tema.js.map +1 -0
  475. data/vendor/assets/javascripts/highstock/indicators/tema.src.js +322 -0
  476. data/vendor/assets/javascripts/highstock/indicators/trix.js +12 -0
  477. data/vendor/assets/javascripts/highstock/indicators/trix.js.map +1 -0
  478. data/vendor/assets/javascripts/highstock/indicators/trix.src.js +171 -0
  479. data/vendor/assets/javascripts/highstock/indicators/volume-by-price.js +21 -0
  480. data/vendor/assets/javascripts/highstock/indicators/volume-by-price.js.map +1 -0
  481. data/vendor/assets/javascripts/highstock/indicators/volume-by-price.src.js +698 -0
  482. data/vendor/assets/javascripts/highstock/indicators/vwap.js +12 -0
  483. data/vendor/assets/javascripts/highstock/indicators/vwap.js.map +1 -0
  484. data/vendor/assets/javascripts/highstock/indicators/vwap.src.js +216 -0
  485. data/vendor/assets/javascripts/highstock/indicators/williams-r.js +13 -0
  486. data/vendor/assets/javascripts/highstock/indicators/williams-r.js.map +1 -0
  487. data/vendor/assets/javascripts/highstock/indicators/williams-r.src.js +207 -0
  488. data/vendor/assets/javascripts/highstock/indicators/wma.js +12 -0
  489. data/vendor/assets/javascripts/highstock/indicators/wma.js.map +1 -0
  490. data/vendor/assets/javascripts/highstock/indicators/wma.src.js +173 -0
  491. data/vendor/assets/javascripts/highstock/indicators/zigzag.js +13 -0
  492. data/vendor/assets/javascripts/highstock/indicators/zigzag.js.map +1 -0
  493. data/vendor/assets/javascripts/highstock/indicators/zigzag.src.js +248 -0
  494. data/vendor/assets/javascripts/highstock/lib/canvg.js +130 -0
  495. data/vendor/assets/javascripts/highstock/lib/canvg.src.js +3073 -0
  496. data/vendor/assets/javascripts/highstock/lib/jspdf.js +283 -0
  497. data/vendor/assets/javascripts/highstock/lib/jspdf.src.js +21627 -0
  498. data/vendor/assets/javascripts/highstock/lib/rgbcolor.js +17 -0
  499. data/vendor/assets/javascripts/highstock/lib/rgbcolor.src.js +299 -0
  500. data/vendor/assets/javascripts/highstock/lib/svg2pdf.js +38 -0
  501. data/vendor/assets/javascripts/highstock/lib/svg2pdf.src.js +4390 -0
  502. data/vendor/assets/javascripts/highstock/modules/accessibility.js +73 -0
  503. data/vendor/assets/javascripts/highstock/modules/accessibility.js.map +1 -0
  504. data/vendor/assets/javascripts/highstock/modules/accessibility.src.js +3103 -0
  505. data/vendor/assets/javascripts/highstock/modules/annotations-advanced.js +132 -0
  506. data/vendor/assets/javascripts/highstock/modules/annotations-advanced.js.map +1 -0
  507. data/vendor/assets/javascripts/highstock/modules/annotations-advanced.src.js +8230 -0
  508. data/vendor/assets/javascripts/highstock/modules/annotations.js +94 -0
  509. data/vendor/assets/javascripts/highstock/modules/annotations.js.map +1 -0
  510. data/vendor/assets/javascripts/highstock/modules/annotations.src.js +6001 -0
  511. data/vendor/assets/javascripts/highstock/modules/arrow-symbols.js +11 -0
  512. data/vendor/assets/javascripts/highstock/modules/arrow-symbols.js.map +1 -0
  513. data/vendor/assets/javascripts/highstock/modules/arrow-symbols.src.js +225 -0
  514. data/vendor/assets/javascripts/highstock/modules/boost-canvas.js +23 -0
  515. data/vendor/assets/javascripts/highstock/modules/boost-canvas.js.map +1 -0
  516. data/vendor/assets/javascripts/highstock/modules/boost-canvas.src.js +756 -0
  517. data/vendor/assets/javascripts/highstock/modules/boost.js +65 -0
  518. data/vendor/assets/javascripts/highstock/modules/boost.js.map +1 -0
  519. data/vendor/assets/javascripts/highstock/modules/boost.src.js +3752 -0
  520. data/vendor/assets/javascripts/highstock/modules/bullet.js +14 -0
  521. data/vendor/assets/javascripts/highstock/modules/bullet.js.map +1 -0
  522. data/vendor/assets/javascripts/highstock/modules/bullet.src.js +388 -0
  523. data/vendor/assets/javascripts/highstock/modules/current-date-indicator.js +11 -0
  524. data/vendor/assets/javascripts/highstock/modules/current-date-indicator.js.map +1 -0
  525. data/vendor/assets/javascripts/highstock/modules/current-date-indicator.src.js +127 -0
  526. data/vendor/assets/javascripts/highstock/modules/cylinder.js +14 -0
  527. data/vendor/assets/javascripts/highstock/modules/cylinder.js.map +1 -0
  528. data/vendor/assets/javascripts/highstock/modules/cylinder.src.js +413 -0
  529. data/vendor/assets/javascripts/highstock/modules/data.js +37 -0
  530. data/vendor/assets/javascripts/highstock/modules/data.js.map +1 -0
  531. data/vendor/assets/javascripts/highstock/modules/data.src.js +2565 -0
  532. data/vendor/assets/javascripts/highstock/modules/datagrouping.js +25 -0
  533. data/vendor/assets/javascripts/highstock/modules/datagrouping.js.map +1 -0
  534. data/vendor/assets/javascripts/highstock/modules/datagrouping.src.js +1140 -0
  535. data/vendor/assets/javascripts/highstock/modules/debugger.js +28 -0
  536. data/vendor/assets/javascripts/highstock/modules/debugger.js.map +1 -0
  537. data/vendor/assets/javascripts/highstock/modules/debugger.src.js +267 -0
  538. data/vendor/assets/javascripts/highstock/modules/dependency-wheel.js +15 -0
  539. data/vendor/assets/javascripts/highstock/modules/dependency-wheel.js.map +1 -0
  540. data/vendor/assets/javascripts/highstock/modules/dependency-wheel.src.js +301 -0
  541. data/vendor/assets/javascripts/highstock/modules/drag-panes.js +18 -0
  542. data/vendor/assets/javascripts/highstock/modules/drag-panes.js.map +1 -0
  543. data/vendor/assets/javascripts/highstock/modules/drag-panes.src.js +649 -0
  544. data/vendor/assets/javascripts/highstock/modules/draggable-points.js +40 -0
  545. data/vendor/assets/javascripts/highstock/modules/draggable-points.js.map +1 -0
  546. data/vendor/assets/javascripts/highstock/modules/draggable-points.src.js +2650 -0
  547. data/vendor/assets/javascripts/highstock/modules/drilldown.js +29 -0
  548. data/vendor/assets/javascripts/highstock/modules/drilldown.js.map +1 -0
  549. data/vendor/assets/javascripts/highstock/modules/drilldown.src.js +1321 -0
  550. data/vendor/assets/javascripts/highstock/modules/export-data.js +27 -0
  551. data/vendor/assets/javascripts/highstock/modules/export-data.js.map +1 -0
  552. data/vendor/assets/javascripts/highstock/modules/export-data.src.js +1234 -0
  553. data/vendor/assets/javascripts/highstock/modules/exporting.js +35 -0
  554. data/vendor/assets/javascripts/highstock/modules/exporting.js.map +1 -0
  555. data/vendor/assets/javascripts/highstock/modules/exporting.src.js +2233 -0
  556. data/vendor/assets/javascripts/highstock/modules/full-screen.js +11 -0
  557. data/vendor/assets/javascripts/highstock/modules/full-screen.js.map +1 -0
  558. data/vendor/assets/javascripts/highstock/modules/full-screen.src.js +68 -0
  559. data/vendor/assets/javascripts/highstock/modules/funnel.js +14 -0
  560. data/vendor/assets/javascripts/highstock/modules/funnel.js.map +1 -0
  561. data/vendor/assets/javascripts/highstock/modules/funnel.src.js +576 -0
  562. data/vendor/assets/javascripts/highstock/modules/grid-axis.js +23 -0
  563. data/vendor/assets/javascripts/highstock/modules/grid-axis.js.map +1 -0
  564. data/vendor/assets/javascripts/highstock/modules/grid-axis.src.js +988 -0
  565. data/vendor/assets/javascripts/highstock/modules/heatmap.js +28 -0
  566. data/vendor/assets/javascripts/highstock/modules/heatmap.js.map +1 -0
  567. data/vendor/assets/javascripts/highstock/modules/heatmap.src.js +1731 -0
  568. data/vendor/assets/javascripts/highstock/modules/histogram-bellcurve.js +16 -0
  569. data/vendor/assets/javascripts/highstock/modules/histogram-bellcurve.js.map +1 -0
  570. data/vendor/assets/javascripts/highstock/modules/histogram-bellcurve.src.js +570 -0
  571. data/vendor/assets/javascripts/highstock/modules/item-series.js +13 -0
  572. data/vendor/assets/javascripts/highstock/modules/item-series.js.map +1 -0
  573. data/vendor/assets/javascripts/highstock/modules/item-series.src.js +176 -0
  574. data/vendor/assets/javascripts/highstock/modules/networkgraph.js +31 -0
  575. data/vendor/assets/javascripts/highstock/modules/networkgraph.js.map +1 -0
  576. data/vendor/assets/javascripts/highstock/modules/networkgraph.src.js +1348 -0
  577. data/vendor/assets/javascripts/highstock/modules/no-data-to-display.js +13 -0
  578. data/vendor/assets/javascripts/highstock/modules/no-data-to-display.js.map +1 -0
  579. data/vendor/assets/javascripts/highstock/modules/no-data-to-display.src.js +285 -0
  580. data/vendor/assets/javascripts/highstock/modules/offline-exporting.js +22 -0
  581. data/vendor/assets/javascripts/highstock/modules/offline-exporting.js.map +1 -0
  582. data/vendor/assets/javascripts/highstock/modules/offline-exporting.src.js +838 -0
  583. data/vendor/assets/javascripts/highstock/modules/oldie-polyfills.js +13 -0
  584. data/vendor/assets/javascripts/highstock/modules/oldie-polyfills.js.map +1 -0
  585. data/vendor/assets/javascripts/highstock/modules/oldie-polyfills.src.js +150 -0
  586. data/vendor/assets/javascripts/highstock/modules/oldie.js +35 -0
  587. data/vendor/assets/javascripts/highstock/modules/oldie.js.map +1 -0
  588. data/vendor/assets/javascripts/highstock/modules/oldie.src.js +1582 -0
  589. data/vendor/assets/javascripts/highstock/modules/overlapping-datalabels.js +9 -0
  590. data/vendor/assets/javascripts/highstock/modules/overlapping-datalabels.js.map +1 -0
  591. data/vendor/assets/javascripts/highstock/modules/overlapping-datalabels.src.js +22 -0
  592. data/vendor/assets/javascripts/highstock/modules/parallel-coordinates.js +18 -0
  593. data/vendor/assets/javascripts/highstock/modules/parallel-coordinates.js.map +1 -0
  594. data/vendor/assets/javascripts/highstock/modules/parallel-coordinates.src.js +517 -0
  595. data/vendor/assets/javascripts/highstock/modules/pareto.js +14 -0
  596. data/vendor/assets/javascripts/highstock/modules/pareto.js.map +1 -0
  597. data/vendor/assets/javascripts/highstock/modules/pareto.src.js +327 -0
  598. data/vendor/assets/javascripts/highstock/modules/pathfinder.js +34 -0
  599. data/vendor/assets/javascripts/highstock/modules/pathfinder.js.map +1 -0
  600. data/vendor/assets/javascripts/highstock/modules/pathfinder.src.js +2336 -0
  601. data/vendor/assets/javascripts/highstock/modules/pattern-fill.js +21 -0
  602. data/vendor/assets/javascripts/highstock/modules/pattern-fill.js.map +1 -0
  603. data/vendor/assets/javascripts/highstock/modules/pattern-fill.src.js +634 -0
  604. data/vendor/assets/javascripts/highstock/modules/price-indicator.js +13 -0
  605. data/vendor/assets/javascripts/highstock/modules/price-indicator.js.map +1 -0
  606. data/vendor/assets/javascripts/highstock/modules/price-indicator.src.js +176 -0
  607. data/vendor/assets/javascripts/highstock/modules/sankey.js +22 -0
  608. data/vendor/assets/javascripts/highstock/modules/sankey.js.map +1 -0
  609. data/vendor/assets/javascripts/highstock/modules/sankey.src.js +911 -0
  610. data/vendor/assets/javascripts/highstock/modules/series-label.js +23 -0
  611. data/vendor/assets/javascripts/highstock/modules/series-label.js.map +1 -0
  612. data/vendor/assets/javascripts/highstock/modules/series-label.src.js +1065 -0
  613. data/vendor/assets/javascripts/highstock/modules/solid-gauge.js +15 -0
  614. data/vendor/assets/javascripts/highstock/modules/solid-gauge.js.map +1 -0
  615. data/vendor/assets/javascripts/highstock/modules/solid-gauge.src.js +510 -0
  616. data/vendor/assets/javascripts/highstock/modules/sonification.js +53 -0
  617. data/vendor/assets/javascripts/highstock/modules/sonification.js.map +1 -0
  618. data/vendor/assets/javascripts/highstock/modules/sonification.src.js +3341 -0
  619. data/vendor/assets/javascripts/highstock/modules/static-scale.js +12 -0
  620. data/vendor/assets/javascripts/highstock/modules/static-scale.js.map +1 -0
  621. data/vendor/assets/javascripts/highstock/modules/static-scale.src.js +114 -0
  622. data/vendor/assets/javascripts/highstock/modules/stock-tools.js +65 -0
  623. data/vendor/assets/javascripts/highstock/modules/stock-tools.js.map +1 -0
  624. data/vendor/assets/javascripts/highstock/modules/stock-tools.src.js +3437 -0
  625. data/vendor/assets/javascripts/highstock/modules/stock.js +151 -0
  626. data/vendor/assets/javascripts/highstock/modules/stock.js.map +1 -0
  627. data/vendor/assets/javascripts/highstock/modules/stock.src.js +10907 -0
  628. data/vendor/assets/javascripts/highstock/modules/streamgraph.js +10 -0
  629. data/vendor/assets/javascripts/highstock/modules/streamgraph.js.map +1 -0
  630. data/vendor/assets/javascripts/highstock/modules/streamgraph.src.js +158 -0
  631. data/vendor/assets/javascripts/highstock/modules/sunburst.js +52 -0
  632. data/vendor/assets/javascripts/highstock/modules/sunburst.js.map +1 -0
  633. data/vendor/assets/javascripts/highstock/modules/sunburst.src.js +3174 -0
  634. data/vendor/assets/javascripts/highstock/modules/tilemap.js +26 -0
  635. data/vendor/assets/javascripts/highstock/modules/tilemap.js.map +1 -0
  636. data/vendor/assets/javascripts/highstock/modules/tilemap.src.js +1402 -0
  637. data/vendor/assets/javascripts/highstock/modules/timeline.js +23 -0
  638. data/vendor/assets/javascripts/highstock/modules/timeline.js.map +1 -0
  639. data/vendor/assets/javascripts/highstock/modules/timeline.src.js +778 -0
  640. data/vendor/assets/javascripts/highstock/modules/treegrid.js +50 -0
  641. data/vendor/assets/javascripts/highstock/modules/treegrid.js.map +1 -0
  642. data/vendor/assets/javascripts/highstock/modules/treegrid.src.js +2917 -0
  643. data/vendor/assets/javascripts/highstock/modules/treemap.js +39 -0
  644. data/vendor/assets/javascripts/highstock/modules/treemap.js.map +1 -0
  645. data/vendor/assets/javascripts/highstock/modules/treemap.src.js +2083 -0
  646. data/vendor/assets/javascripts/highstock/modules/variable-pie.js +16 -0
  647. data/vendor/assets/javascripts/highstock/modules/variable-pie.js.map +1 -0
  648. data/vendor/assets/javascripts/highstock/modules/variable-pie.src.js +485 -0
  649. data/vendor/assets/javascripts/highstock/modules/variwide.js +15 -0
  650. data/vendor/assets/javascripts/highstock/modules/variwide.js.map +1 -0
  651. data/vendor/assets/javascripts/highstock/modules/variwide.src.js +376 -0
  652. data/vendor/assets/javascripts/highstock/modules/vector.js +13 -0
  653. data/vendor/assets/javascripts/highstock/modules/vector.js.map +1 -0
  654. data/vendor/assets/javascripts/highstock/modules/vector.src.js +381 -0
  655. data/vendor/assets/javascripts/highstock/modules/venn.js +30 -0
  656. data/vendor/assets/javascripts/highstock/modules/venn.js.map +1 -0
  657. data/vendor/assets/javascripts/highstock/modules/venn.src.js +1624 -0
  658. data/vendor/assets/javascripts/highstock/modules/windbarb.js +17 -0
  659. data/vendor/assets/javascripts/highstock/modules/windbarb.js.map +1 -0
  660. data/vendor/assets/javascripts/highstock/modules/windbarb.src.js +574 -0
  661. data/vendor/assets/javascripts/highstock/modules/wordcloud.js +25 -0
  662. data/vendor/assets/javascripts/highstock/modules/wordcloud.js.map +1 -0
  663. data/vendor/assets/javascripts/highstock/modules/wordcloud.src.js +1475 -0
  664. data/vendor/assets/javascripts/highstock/modules/xrange.js +20 -0
  665. data/vendor/assets/javascripts/highstock/modules/xrange.js.map +1 -0
  666. data/vendor/assets/javascripts/highstock/modules/xrange.src.js +788 -0
  667. data/vendor/assets/javascripts/highstock/themes/avocado.js +9 -0
  668. data/vendor/assets/javascripts/highstock/themes/avocado.js.map +1 -0
  669. data/vendor/assets/javascripts/highstock/themes/avocado.src.js +63 -0
  670. data/vendor/assets/javascripts/highstock/themes/dark-blue.js +15 -0
  671. data/vendor/assets/javascripts/highstock/themes/dark-blue.js.map +1 -0
  672. data/vendor/assets/javascripts/highstock/themes/dark-blue.src.js +285 -0
  673. data/vendor/assets/javascripts/highstock/themes/dark-green.js +15 -0
  674. data/vendor/assets/javascripts/highstock/themes/dark-green.js.map +1 -0
  675. data/vendor/assets/javascripts/highstock/themes/dark-green.src.js +287 -0
  676. data/vendor/assets/javascripts/highstock/themes/dark-unica.js +14 -0
  677. data/vendor/assets/javascripts/highstock/themes/dark-unica.js.map +1 -0
  678. data/vendor/assets/javascripts/highstock/themes/dark-unica.src.js +246 -0
  679. data/vendor/assets/javascripts/highstock/themes/gray.js +15 -0
  680. data/vendor/assets/javascripts/highstock/themes/gray.js.map +1 -0
  681. data/vendor/assets/javascripts/highstock/themes/gray.src.js +293 -0
  682. data/vendor/assets/javascripts/highstock/themes/grid-light.js +11 -0
  683. data/vendor/assets/javascripts/highstock/themes/grid-light.js.map +1 -0
  684. data/vendor/assets/javascripts/highstock/themes/grid-light.src.js +107 -0
  685. data/vendor/assets/javascripts/highstock/themes/grid.js +11 -0
  686. data/vendor/assets/javascripts/highstock/themes/grid.js.map +1 -0
  687. data/vendor/assets/javascripts/highstock/themes/grid.src.js +136 -0
  688. data/vendor/assets/javascripts/highstock/themes/sand-signika.js +11 -0
  689. data/vendor/assets/javascripts/highstock/themes/sand-signika.js.map +1 -0
  690. data/vendor/assets/javascripts/highstock/themes/sand-signika.src.js +137 -0
  691. data/vendor/assets/javascripts/highstock/themes/skies.js +11 -0
  692. data/vendor/assets/javascripts/highstock/themes/skies.js.map +1 -0
  693. data/vendor/assets/javascripts/highstock/themes/skies.src.js +126 -0
  694. data/vendor/assets/javascripts/highstock/themes/sunset.js +9 -0
  695. data/vendor/assets/javascripts/highstock/themes/sunset.js.map +1 -0
  696. data/vendor/assets/javascripts/highstock/themes/sunset.src.js +62 -0
  697. metadata +781 -0
@@ -0,0 +1,73 @@
1
+ /*
2
+ Highcharts JS v7.0.3 (2019-02-06)
3
+ Accessibility module
4
+
5
+ (c) 2010-2019 Highsoft AS
6
+ Author: Oystein Moseng
7
+
8
+ License: www.highcharts.com/license
9
+ */
10
+ (function(n){"object"===typeof module&&module.exports?(n["default"]=n,module.exports=n):"function"===typeof define&&define.amd?define(function(){return n}):n("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(n){(function(a){function n(a,g){var k=a.indexOf("#each("),h=a.indexOf("#plural("),f=a.indexOf("["),m=a.indexOf("]");if(-1<k){var f=a.slice(k).indexOf(")")+k,c=a.substring(0,k),h=a.substring(f+1),f=a.substring(k+6,f).split(","),k=Number(f[1]);a="";if(g=g[f[0]])for(k=isNaN(k)?g.length:
11
+ k,k=0>k?g.length+k:Math.min(k,g.length),f=0;f<k;++f)a+=c+g[f]+h;return a.length?a:""}if(-1<h){c=a.slice(h).indexOf(")")+h;a=a.substring(h+8,c).split(",");switch(Number(g[a[0]])){case 0:a=q(a[4],a[1]);break;case 1:a=q(a[2],a[1]);break;case 2:a=q(a[3],a[1]);break;default:a=a[1]}a?(g=a,g=g.trim&&g.trim()||g.replace(/^\s+|\s+$/g,"")):g="";return g}return-1<f?(h=a.substring(0,f),a=Number(a.substring(f+1,m)),g=g[h],!isNaN(a)&&g&&(0>a?(c=g[g.length+a],void 0===c&&(c=g[0])):(c=g[a],void 0===c&&(c=g[g.length-
12
+ 1]))),void 0!==c?c:""):"{"+a+"}"}var q=a.pick;a.i18nFormat=function(p,g,k){var h=function(c,a){c=c.slice(a||0);var d=c.indexOf("{"),b=c.indexOf("}");if(-1<d&&b>d)return{statement:c.substring(d+1,b),begin:a+d+1,end:a+b}},f=[],m,c;c=0;do m=h(p,c),c=p.substring(c,m&&m.begin-1),c.length&&f.push({value:c,type:"constant"}),m&&f.push({value:m.statement,type:"statement"}),c=m&&m.end+1;while(m);f.forEach(function(c){"statement"===c.type&&(c.value=n(c.value,g))});return a.format(f.reduce(function(c,a){return c+
13
+ a.value},""),g,k)};a.Chart.prototype.langFormat=function(p,g,k){p=p.split(".");for(var h=this.options.lang,f=0;f<p.length;++f)h=h&&h[p[f]];return"string"===typeof h&&a.i18nFormat(h,g,k)};a.setOptions({lang:{accessibility:{screenReaderRegionLabel:"Chart screen reader information.",navigationHint:"Use regions/landmarks to skip ahead to chart {#plural(numSeries, and navigate between data series,)}",defaultChartTitle:"Chart",longDescriptionHeading:"Long description.",noDescription:"No description available.",
14
+ structureHeading:"Structure.",viewAsDataTable:"View as data table.",chartHeading:"Chart graphic.",chartContainerLabel:"Interactive chart. {title}. Use up and down arrows to navigate with most screen readers.",rangeSelectorMinInput:"Select start date.",rangeSelectorMaxInput:"Select end date.",tableSummary:"Table representation of chart.",mapZoomIn:"Zoom chart",mapZoomOut:"Zoom out chart",rangeSelectorButton:"Select range {buttonText}",legendLabel:"Toggle series visibility",svgContainerTitle:"{chartTitle}",
15
+ seriesTypeDescriptions:{boxplot:"Box plot charts are typically used to display groups of statistical data. Each data point in the chart can have up to 5 values: minimum, lower quartile, median, upper quartile, and maximum.",arearange:"Arearange charts are line charts displaying a range between a lower and higher value for each point.",areasplinerange:"These charts are line charts displaying a range between a lower and higher value for each point.",bubble:"Bubble charts are scatter charts where each data point also has a size value.",
16
+ columnrange:"Columnrange charts are column charts displaying a range between a lower and higher value for each point.",errorbar:"Errorbar series are used to display the variability of the data.",funnel:"Funnel charts are used to display reduction of data in stages.",pyramid:"Pyramid charts consist of a single pyramid with item heights corresponding to each point value.",waterfall:"A waterfall chart is a column chart where each column contributes towards a total end value."},chartTypes:{emptyChart:"Empty chart",
17
+ mapTypeDescription:"Map of {mapTitle} with {numSeries} data series.",unknownMap:"Map of unspecified region with {numSeries} data series.",combinationChart:"Combination chart with {numSeries} data series.",defaultSingle:"Chart with {numPoints} data {#plural(numPoints, points, point)}.",defaultMultiple:"Chart with {numSeries} data series.",splineSingle:"Line chart with {numPoints} data {#plural(numPoints, points, point)}.",splineMultiple:"Line chart with {numSeries} lines.",lineSingle:"Line chart with {numPoints} data {#plural(numPoints, points, point)}.",
18
+ lineMultiple:"Line chart with {numSeries} lines.",columnSingle:"Bar chart with {numPoints} {#plural(numPoints, bars, bar)}.",columnMultiple:"Bar chart with {numSeries} data series.",barSingle:"Bar chart with {numPoints} {#plural(numPoints, bars, bar)}.",barMultiple:"Bar chart with {numSeries} data series.",pieSingle:"Pie chart with {numPoints} {#plural(numPoints, slices, slice)}.",pieMultiple:"Pie chart with {numSeries} pies.",scatterSingle:"Scatter chart with {numPoints} {#plural(numPoints, points, point)}.",
19
+ scatterMultiple:"Scatter chart with {numSeries} data series.",boxplotSingle:"Boxplot with {numPoints} {#plural(numPoints, boxes, box)}.",boxplotMultiple:"Boxplot with {numSeries} data series.",bubbleSingle:"Bubble chart with {numPoints} {#plural(numPoints, bubbles, bubble)}.",bubbleMultiple:"Bubble chart with {numSeries} data series."},axis:{xAxisDescriptionSingular:"The chart has 1 X axis displaying {names[0]}.",xAxisDescriptionPlural:"The chart has {numAxes} X axes displaying {#names.forEach(-1) }and {names[-1]}",
20
+ yAxisDescriptionSingular:"The chart has 1 Y axis displaying {names[0]}.",yAxisDescriptionPlural:"The chart has {numAxes} Y axes displaying {#names.forEach(-1) }and {names[-1]}"},exporting:{chartMenuLabel:"Chart export",menuButtonLabel:"View export menu",exportRegionLabel:"Chart export menu"},series:{summary:{"default":"{name}, series {ix} of {numSeries} with {numPoints} data {#plural(numPoints, points, point)}.",defaultCombination:"{name}, series {ix} of {numSeries} with {numPoints} data {#plural(numPoints, points, point)}.",
21
+ line:"{name}, line {ix} of {numSeries} with {numPoints} data {#plural(numPoints, points, point)}.",lineCombination:"{name}, series {ix} of {numSeries}. Line with {numPoints} data {#plural(numPoints, points, point)}.",spline:"{name}, line {ix} of {numSeries} with {numPoints} data {#plural(numPoints, points, point)}.",splineCombination:"{name}, series {ix} of {numSeries}. Line with {numPoints} data {#plural(numPoints, points, point)}.",column:"{name}, bar series {ix} of {numSeries} with {numPoints} {#plural(numPoints, bars, bar)}.",
22
+ columnCombination:"{name}, series {ix} of {numSeries}. Bar series with {numPoints} {#plural(numPoints, bars, bar)}.",bar:"{name}, bar series {ix} of {numSeries} with {numPoints} {#plural(numPoints, bars, bar)}.",barCombination:"{name}, series {ix} of {numSeries}. Bar series with {numPoints} {#plural(numPoints, bars, bar)}.",pie:"{name}, pie {ix} of {numSeries} with {numPoints} {#plural(numPoints, slices, slice)}.",pieCombination:"{name}, series {ix} of {numSeries}. Pie with {numPoints} {#plural(numPoints, slices, slice)}.",
23
+ scatter:"{name}, scatter plot {ix} of {numSeries} with {numPoints} {#plural(numPoints, points, point)}.",scatterCombination:"{name}, series {ix} of {numSeries}, scatter plot with {numPoints} {#plural(numPoints, points, point)}.",boxplot:"{name}, boxplot {ix} of {numSeries} with {numPoints} {#plural(numPoints, boxes, box)}.",boxplotCombination:"{name}, series {ix} of {numSeries}. Boxplot with {numPoints} {#plural(numPoints, boxes, box)}.",bubble:"{name}, bubble series {ix} of {numSeries} with {numPoints} {#plural(numPoints, bubbles, bubble)}.",
24
+ bubbleCombination:"{name}, series {ix} of {numSeries}. Bubble series with {numPoints} {#plural(numPoints, bubbles, bubble)}.",map:"{name}, map {ix} of {numSeries} with {numPoints} {#plural(numPoints, areas, area)}.",mapCombination:"{name}, series {ix} of {numSeries}. Map with {numPoints} {#plural(numPoints, areas, area)}.",mapline:"{name}, line {ix} of {numSeries} with {numPoints} data {#plural(numPoints, points, point)}.",maplineCombination:"{name}, series {ix} of {numSeries}. Line with {numPoints} data {#plural(numPoints, points, point)}.",
25
+ mapbubble:"{name}, bubble series {ix} of {numSeries} with {numPoints} {#plural(numPoints, bubbles, bubble)}.",mapbubbleCombination:"{name}, series {ix} of {numSeries}. Bubble series with {numPoints} {#plural(numPoints, bubbles, bubble)}."},description:"{description}",xAxisDescription:"X axis, {name}",yAxisDescription:"Y axis, {name}"}}}})})(n);(function(a){function n(c){return c.replace(/&/g,"\x26amp;").replace(/</g,"\x26lt;").replace(/>/g,"\x26gt;").replace(/"/g,"\x26quot;").replace(/'/g,"\x26#x27;").replace(/\//g,
26
+ "\x26#x2F;")}function q(c){return"string"===typeof c?c.replace(/<\/?[^>]+(>|$)/g,""):c}function p(c){for(var a=c.childNodes.length;a--;)c.appendChild(c.childNodes[a])}var g=a.win.document,k=a.erase,h=a.addEvent,f=a.merge,m={position:"absolute",top:"-999em",width:"1px",height:"1px",overflow:"hidden"};a.Series.prototype.commonKeys="name id category x value y".split(" ");a.Series.prototype.specialKeys="z open high q3 median q1 low close".split(" ");a.seriesTypes.pie&&(a.seriesTypes.pie.prototype.specialKeys=
27
+ []);a.setOptions({accessibility:{enabled:!0,pointDescriptionThreshold:!1,screenReaderSectionFormatter:function(c){var a=c.options,e=c.types||[],d={chart:c,numSeries:c.series&&c.series.length},e=(1===e.length&&"pie"===e[0]||"map"===e[0])&&{}||c.getAxesDescription();return"\x3cdiv\x3e"+c.langFormat("accessibility.navigationHint",d)+"\x3c/div\x3e\x3ch3\x3e"+(a.title.text?n(a.title.text):c.langFormat("accessibility.defaultChartTitle",d))+(a.subtitle&&a.subtitle.text?". "+n(a.subtitle.text):"")+"\x3c/h3\x3e"+
28
+ (a.chart.description?"\x3ch4\x3e"+c.langFormat("accessibility.longDescriptionHeading",d)+"\x3c/h4\x3e\x3cdiv\x3e"+a.chart.description+"\x3c/div\x3e":"")+"\x3ch4\x3e"+c.langFormat("accessibility.structureHeading",d)+"\x3c/h4\x3e\x3cdiv\x3e"+(a.chart.typeDescription||c.getTypeDescription())+"\x3c/div\x3e"+(e.xAxis?"\x3cdiv\x3e"+e.xAxis+"\x3c/div\x3e":"")+(e.yAxis?"\x3cdiv\x3e"+e.yAxis+"\x3c/div\x3e":"")}}});a.addEvent(a.Series,"afterRender",function(){this.chart.options.accessibility.enabled&&this.setA11yDescription()});
29
+ a.Series.prototype.setA11yDescription=function(){var c=this.chart.options.accessibility,a=this.points&&this.points.length&&this.points[0].graphic&&this.points[0].graphic.element,e=a&&a.parentNode||this.graph&&this.graph.element||this.group&&this.group.element;e&&(e.lastChild===a&&p(e),this.points&&(this.points.length<c.pointDescriptionThreshold||!1===c.pointDescriptionThreshold)&&this.points.forEach(function(d){d.graphic&&(d.graphic.element.setAttribute("role","img"),d.graphic.element.setAttribute("tabindex",
30
+ "-1"),d.graphic.element.setAttribute("aria-label",q(d.series.options.pointDescriptionFormatter&&d.series.options.pointDescriptionFormatter(d)||c.pointDescriptionFormatter&&c.pointDescriptionFormatter(d)||d.buildPointInfoString())))}),1<this.chart.series.length||c.describeSingleSeries)&&(e.setAttribute("role",this.options.exposeElementToA11y?"img":"region"),e.setAttribute("tabindex","-1"),e.setAttribute("aria-label",q(c.seriesDescriptionFormatter&&c.seriesDescriptionFormatter(this)||this.buildSeriesInfoString())))};
31
+ a.Series.prototype.buildSeriesInfoString=function(){var c=this.chart,a=this.description||this.options.description,a=a&&c.langFormat("accessibility.series.description",{description:a,series:this}),e=c.langFormat("accessibility.series.xAxisDescription",{name:this.xAxis&&this.xAxis.getDescription(),series:this}),d=c.langFormat("accessibility.series.yAxisDescription",{name:this.yAxis&&this.yAxis.getDescription(),series:this}),b={name:this.name||"",ix:this.index+1,numSeries:c.series.length,numPoints:this.points.length,
32
+ series:this},l=1===c.types.length?"":"Combination";return(c.langFormat("accessibility.series.summary."+this.type+l,b)||c.langFormat("accessibility.series.summary.default"+l,b))+(a?" "+a:"")+(1<c.yAxis.length&&this.yAxis?" "+d:"")+(1<c.xAxis.length&&this.xAxis?" "+e:"")};a.Point.prototype.buildPointInfoString=function(){var c=this,r=c.series,e=r.chart,d=e.options.accessibility,b="",l=r.xAxis&&r.xAxis.isDatetimeAxis,d=l&&e.time.dateFormat(d.pointDateFormatter&&d.pointDateFormatter(c)||d.pointDateFormat||
33
+ a.Tooltip.prototype.getXDateFormat.call({getDateFormat:a.Tooltip.prototype.getDateFormat,chart:e},c,e.options.tooltip,r.xAxis),c.x);a.find(r.specialKeys,function(b){return void 0!==c[b]})?(l&&(b=d),r.commonKeys.concat(r.specialKeys).forEach(function(d){void 0===c[d]||l&&"x"===d||(b+=(b?". ":"")+d+", "+c[d])})):b=(this.name||d||this.category||this.id||"x, "+this.x)+", "+(void 0!==this.value?this.value:this.y);return this.index+1+". "+b+"."+(this.description?" "+this.description:"")+(1<e.series.length&&
34
+ r.name?" "+r.name:"")};a.Axis.prototype.getDescription=function(){return this.userOptions&&this.userOptions.description||this.axisTitle&&this.axisTitle.textStr||this.options.id||this.categories&&"categories"||this.isDatetimeAxis&&"Time"||"values"};h(a.Series,"afterInit",function(){var c=this.chart;c.options.accessibility.enabled&&(c.types=c.types||[],0>c.types.indexOf(this.type)&&c.types.push(this.type))});h(a.Series,"remove",function(){var c=this.chart,a=this,e=!1;c.series.forEach(function(d){d!==
35
+ a&&0>c.types.indexOf(a.type)&&(e=!0)});e||k(c.types,a.type)});a.Chart.prototype.getTypeDescription=function(){var c=this.types&&this.types[0],a=this.series&&this.series[0]||{},e=a.mapTitle,d=this.langFormat("accessibility.seriesTypeDescriptions."+c,{chart:this}),a={numSeries:this.series.length,numPoints:a.points&&a.points.length,chart:this,mapTitle:e},b=this.series&&1===this.series.length?"Single":"Multiple";return c?"map"===c?e?this.langFormat("accessibility.chartTypes.mapTypeDescription",a):this.langFormat("accessibility.chartTypes.unknownMap",
36
+ a):1<this.types.length?this.langFormat("accessibility.chartTypes.combinationChart",a):(this.langFormat("accessibility.chartTypes."+c+b,a)||this.langFormat("accessibility.chartTypes.default"+b,a))+(d?" "+d:""):this.langFormat("accessibility.chartTypes.emptyChart",a)};a.Chart.prototype.getAxesDescription=function(){var c=this.xAxis.length,a=this.yAxis.length,e={};c&&(e.xAxis=this.langFormat("accessibility.axis.xAxisDescription"+(1<c?"Plural":"Singular"),{chart:this,names:this.xAxis.map(function(d){return d.getDescription()}),
37
+ numAxes:c}));a&&(e.yAxis=this.langFormat("accessibility.axis.yAxisDescription"+(1<a?"Plural":"Singular"),{chart:this,names:this.yAxis.map(function(d){return d.getDescription()}),numAxes:a}));return e};a.Chart.prototype.addAccessibleContextMenuAttribs=function(){var c=this.exportDivElements;c&&(c.forEach(function(c){"DIV"!==c.tagName||c.children&&c.children.length||(c.setAttribute("role","menuitem"),c.setAttribute("tabindex",-1))}),c[0].parentNode.setAttribute("role","menu"),c[0].parentNode.setAttribute("aria-label",
38
+ this.langFormat("accessibility.exporting.chartMenuLabel",{chart:this})))};a.Chart.prototype.addScreenReaderRegion=function(c,a){var e=this,d=e.screenReaderRegion=g.createElement("div"),b=g.createElement("h4"),l=g.createElement("a"),t=e.screenReaderHeading=g.createElement("h4");d.setAttribute("id",c);d.setAttribute("role","region");d.setAttribute("aria-label",e.langFormat("accessibility.screenReaderRegionLabel",{chart:this}));d.innerHTML=e.options.accessibility.screenReaderSectionFormatter(e);e.getCSV&&
39
+ (l.innerHTML=e.langFormat("accessibility.viewAsDataTable",{chart:e}),l.href="#"+a,l.setAttribute("tabindex","-1"),l.onclick=e.options.accessibility.onTableAnchorClick||function(){e.viewData();g.getElementById(a).focus()},b.appendChild(l),d.appendChild(b));t.innerHTML=e.langFormat("accessibility.chartHeading",{chart:e});e.renderTo.insertBefore(t,e.renderTo.firstChild);e.renderTo.insertBefore(d,e.renderTo.firstChild);f(!0,t.style,m);f(!0,d.style,m)};h(a.Legend,"afterRender",function(){var c=this.group,
40
+ a=this.allItems,e=this.chart;c&&a&&a.length&&(c.attr({role:"region","aria-label":e.langFormat("accessibility.legendLabel")}),this.box&&this.box.attr("aria-hidden","true"),a.forEach(function(d){var b=d.legendGroup,l=d.legendItem,c=d.visible;d=e.langFormat("accessibility.legendItem",{chart:e,itemName:q(d.name)});b&&l&&(b.attr({role:"button","aria-pressed":c?"false":"true"}),d&&b.attr("aria-label",d),l.attr("aria-hidden","false"))}))});h(a.Legend,"afterColorizeItem",function(c){var a=c.item&&c.item.legendGroup;
41
+ c=c.visible?"false":"true";a&&(a.attr("aria-pressed",c),a.div&&a.div.setAttribute("aria-pressed",c))});a.Chart.prototype.callbacks.push(function(c){var a=c.options;if(a.accessibility.enabled){var e=c.container.getElementsByTagName("desc")[0],d=c.container.getElementsByTagName("text"),b="highcharts-title-"+c.index,l="highcharts-data-table-"+c.index,t="highcharts-information-region-"+c.index,u=a.title.text||c.langFormat("accessibility.defaultChartTitle",{chart:c}),v=q(c.langFormat("accessibility.svgContainerTitle",
42
+ {chartTitle:u}));v.length&&(a=g.createElementNS("http://www.w3.org/2000/svg","title"),a.textContent=v,a.id=b,e.parentNode.insertBefore(a,e));c.renderTo.setAttribute("role","region");c.renderTo.setAttribute("aria-label",c.langFormat("accessibility.chartContainerLabel",{title:q(u),chart:c}));if(c.exportSVGElements&&c.exportSVGElements[0]&&c.exportSVGElements[0].element){var e=c.exportSVGElements[0].element,f=e.onclick;e.onclick=function(){f.apply(this,Array.prototype.slice.call(arguments));c.addAccessibleContextMenuAttribs();
43
+ c.highlightExportItem(0)};e.setAttribute("role","button");e.setAttribute("aria-label",c.langFormat("accessibility.exporting.menuButtonLabel",{chart:c}));c.exportingGroup.element.setAttribute("role","region");c.exportingGroup.element.setAttribute("aria-label",c.langFormat("accessibility.exporting.exportRegionLabel",{chart:c}))}c.rangeSelector&&["minInput","maxInput"].forEach(function(b,d){c.rangeSelector[b]&&(c.rangeSelector[b].setAttribute("tabindex","-1"),c.rangeSelector[b].setAttribute("role","textbox"),
44
+ c.rangeSelector[b].setAttribute("aria-label",c.langFormat("accessibility.rangeSelector"+(d?"MaxInput":"MinInput"),{chart:c})))});[].forEach.call(d,function(b){"false"!==b.getAttribute("aria-hidden")&&b.setAttribute("aria-hidden","true")});c.addScreenReaderRegion(t,l);h(c,"afterGetTable",function(b){b.html=b.html.replace("\x3ctable ",'\x3ctable summary\x3d"'+c.langFormat("accessibility.tableSummary",{chart:c})+'"')})}})})(n);(function(a){function n(d){var b=d.index,a=d.series.points,c=a.length;if(a[b]!==
45
+ d)for(;c--;){if(a[c]===d)return c}else return b}function q(d,b){this.chart=d;this.id=b.id;this.keyCodeMap=b.keyCodeMap;this.validate=b.validate;this.init=b.init;this.terminate=b.terminate}function p(d){var b;d&&d.onclick&&f.createEvent&&(b=f.createEvent("Events"),b.initEvent("click",!0,!1),d.onclick(b))}function g(d){var b=d.chart.options.accessibility;return d.options.skipKeyboardNavigation||!1===d.options.enableMouseTracking||!d.visible||b.pointDescriptionThreshold&&b.pointDescriptionThreshold<=
46
+ d.points.length}function k(d){var b=d.series.chart.options.accessibility;return d.isNull&&b.keyboardNavigation.skipNullPoints||!1===d.visible||g(d.series)}var h=a.win,f=h.document,m=a.addEvent,c=a.fireEvent,r=a.merge,e=a.pick;a.extend(a.SVGElement.prototype,{addFocusBorder:function(d,b){this.focusBorder&&this.removeFocusBorder();var a=this.getBBox();d=e(d,3);a.x+=this.translateX?this.translateX:0;a.y+=this.translateY?this.translateY:0;this.focusBorder=this.renderer.rect(a.x-d,a.y-d,a.width+2*d,a.height+
47
+ 2*d,b&&b.borderRadius).addClass("highcharts-focus-border").attr({zIndex:99}).add(this.parentGroup);this.renderer.styledMode||this.focusBorder.attr({stroke:b&&b.stroke,"stroke-width":b&&b.strokeWidth})},removeFocusBorder:function(){this.focusBorder&&(this.focusBorder.destroy(),delete this.focusBorder)}});a.Series.prototype.keyboardMoveVertical=!0;["column","pie"].forEach(function(d){a.seriesTypes[d]&&(a.seriesTypes[d].prototype.keyboardMoveVertical=!1)});a.setOptions({accessibility:{keyboardNavigation:{enabled:!0,
48
+ focusBorder:{enabled:!0,hideBrowserFocusOutline:!0,style:{color:"#335cad",lineWidth:2,borderRadius:3},margin:2},skipNullPoints:!0}}});q.prototype={run:function(d){var b=this,a=d.which||d.keyCode,c=!1,e=!1;this.keyCodeMap.forEach(function(l){-1<l[0].indexOf(a)&&(c=!0,e=!1!==l[1].call(b,a,d))});c||9!==a||(e=this.move(d.shiftKey?-1:1));return e},move:function(d){var b=this.chart;this.terminate&&this.terminate(d);b.keyboardNavigationModuleIndex+=d;var a=b.keyboardNavigationModules[b.keyboardNavigationModuleIndex];
49
+ b.focusElement&&b.focusElement.removeFocusBorder();if(a){if(a.validate&&!a.validate())return this.move(d);if(a.init)return a.init(d),!0}b.keyboardNavigationModuleIndex=0;0<d?(this.chart.exiting=!0,this.chart.tabExitAnchor.focus()):this.chart.renderTo.focus();return!1}};a.Axis.prototype.panStep=function(d,b){var a=b||3;b=this.getExtremes();var c=(b.max-b.min)/a*d,a=b.max+c,c=b.min+c,e=a-c;0>d&&c<b.dataMin?(c=b.dataMin,a=c+e):0<d&&a>b.dataMax&&(a=b.dataMax,c=a-e);this.setExtremes(c,a)};a.Chart.prototype.setFocusToElement=
50
+ function(d,b){var a=this.options.accessibility.keyboardNavigation.focusBorder;b=b||d;b.element&&b.element.focus&&(b.element.focus(),a.hideBrowserFocusOutline&&b.css({outline:"none"}));a.enabled&&(this.focusElement&&this.focusElement.removeFocusBorder(),d.addFocusBorder(a.margin,{stroke:a.style.color,strokeWidth:a.style.lineWidth,borderRadius:a.style.borderRadius}),this.focusElement=d)};a.Point.prototype.highlight=function(){var d=this.series.chart;if(this.isNull)d.tooltip&&d.tooltip.hide(0);else this.onMouseOver();
51
+ this.graphic&&d.setFocusToElement(this.graphic);d.highlightedPoint=this;return this};a.Chart.prototype.highlightAdjacentPoint=function(d){var b=this.series,a=this.highlightedPoint,c=a&&n(a)||0,e=a&&a.series.points,f=this.series&&this.series[this.series.length-1],f=f&&f.points&&f.points[f.points.length-1];if(!b[0]||!b[0].points)return!1;if(a){if(b=b[a.series.index+(d?1:-1)],c=e[c+(d?1:-1)],!c&&b&&(c=b.points[d?0:b.points.length-1]),!c)return!1}else c=d?b[0].points[0]:f;return k(c)?(b=c.series,g(b)?
52
+ this.highlightedPoint=d?b.points[b.points.length-1]:b.points[0]:this.highlightedPoint=c,this.highlightAdjacentPoint(d)):c.highlight()};a.Series.prototype.highlightFirstValidPoint=function(){var d=this.chart.highlightedPoint,b=(d&&d.series)===this?n(d):0;if(d=this.points){for(var a=b,c=d.length;a<c;++a)if(!k(d[a]))return d[a].highlight();for(;0<=b;--b)if(!k(d[b]))return d[b].highlight()}return!1};a.Chart.prototype.highlightAdjacentSeries=function(d){var b,a,c=this.highlightedPoint,e=(b=this.series&&
53
+ this.series[this.series.length-1])&&b.points&&b.points[b.points.length-1];if(!this.highlightedPoint)return b=d?this.series&&this.series[0]:b,(a=d?b&&b.points&&b.points[0]:e)?a.highlight():!1;b=this.series[c.series.index+(d?-1:1)];if(!b)return!1;var e=Infinity,f,h=b.points.length;if(void 0===c.plotX||void 0===c.plotY)a=void 0;else{for(;h--;)f=b.points[h],void 0!==f.plotX&&void 0!==f.plotY&&(f=(c.plotX-f.plotX)*(c.plotX-f.plotX)*4+(c.plotY-f.plotY)*(c.plotY-f.plotY)*1,f<e&&(e=f,a=h));a=void 0!==a&&
54
+ b.points[a]}if(!a)return!1;if(g(b))return a.highlight(),d=this.highlightAdjacentSeries(d),d?d:(c.highlight(),!1);a.highlight();return a.series.highlightFirstValidPoint()};a.Chart.prototype.highlightAdjacentPointVertical=function(d){var b=this.highlightedPoint,a=Infinity,c;if(void 0===b.plotX||void 0===b.plotY)return!1;this.series.forEach(function(l){g(l)||l.points.forEach(function(e){if(void 0!==e.plotY&&void 0!==e.plotX&&e!==b){var t=e.plotY-b.plotY,f=Math.abs(e.plotX-b.plotX),f=Math.abs(t)*Math.abs(t)+
55
+ f*f*4;l.yAxis.reversed&&(t*=-1);!(0>t&&d||0<t&&!d||5>f||k(e))&&f<a&&(a=f,c=e)}})});return c?c.highlight():!1};a.Chart.prototype.showExportMenu=function(){this.exportSVGElements&&this.exportSVGElements[0]&&(this.exportSVGElements[0].element.onclick(),this.highlightExportItem(0))};a.Chart.prototype.hideExportMenu=function(){var a=this.exportDivElements;a&&this.exportContextMenu&&(a.forEach(function(b){if("highcharts-menu-item"===b.className&&b.onmouseout)b.onmouseout()}),this.highlightedExportItem=
56
+ 0,this.exportContextMenu.hideMenu(),this.container.focus())};a.Chart.prototype.highlightExportItem=function(a){var b=this.exportDivElements&&this.exportDivElements[a],d=this.exportDivElements&&this.exportDivElements[this.highlightedExportItem],c;if(b&&"DIV"===b.tagName&&(!b.children||!b.children.length)){c=!!(this.renderTo.getElementsByTagName("g")[0]||{}).focus;b.focus&&c&&b.focus();if(d&&d.onmouseout)d.onmouseout();if(b.onmouseover)b.onmouseover();this.highlightedExportItem=a;return!0}};a.Chart.prototype.highlightLastExportItem=
57
+ function(){var a;if(this.exportDivElements)for(a=this.exportDivElements.length;a--&&!this.highlightExportItem(a););};a.Chart.prototype.highlightRangeSelectorButton=function(a){var b=this.rangeSelector.buttons;b[this.highlightedRangeSelectorItemIx]&&b[this.highlightedRangeSelectorItemIx].setState(this.oldRangeSelectorItemState||0);this.highlightedRangeSelectorItemIx=a;return b[a]?(this.setFocusToElement(b[a].box,b[a]),this.oldRangeSelectorItemState=b[a].state,b[a].setState(2),!0):!1};a.Chart.prototype.highlightLegendItem=
58
+ function(a){var b=this.legend.allItems,d=this.highlightedLegendItemIx;return b[a]?(b[d]&&c(b[d].legendGroup.element,"mouseout"),void 0!==b[a].pageIx&&b[a].pageIx+1!==this.legend.currentPage&&this.legend.scroll(1+b[a].pageIx-this.legend.currentPage),this.highlightedLegendItemIx=a,this.setFocusToElement(b[a].legendItem,b[a].legendGroup),c(b[a].legendGroup.element,"mouseover"),!0):!1};a.Chart.prototype.addKeyboardNavigationModules=function(){function a(a,c,d){return new q(b,r({keyCodeMap:c},{id:a},d))}
59
+ var b=this;b.keyboardNavigationModules=[a("entry",[]),a("points",[[[37,39],function(a){a=39===a;return b.highlightAdjacentPoint(a)?!0:this.init(a?1:-1)}],[[38,40],function(a){a=38!==a;var c=b.options.accessibility.keyboardNavigation;if(c.mode&&"serialize"===c.mode)return b.highlightAdjacentPoint(a)?!0:this.init(a?1:-1);b[b.highlightedPoint&&b.highlightedPoint.series.keyboardMoveVertical?"highlightAdjacentPointVertical":"highlightAdjacentSeries"](a);return!0}],[[13,32],function(){b.highlightedPoint&&
60
+ b.highlightedPoint.firePointEvent("click")}]],{init:function(a){var c=b.series.length,d=0<a?0:c;if(0<a)for(delete b.highlightedPoint;d<c;){if(a=b.series[d].highlightFirstValidPoint())return a;++d}else for(;d--;)if(b.highlightedPoint=b.series[d].points[b.series[d].points.length-1],a=b.series[d].highlightFirstValidPoint())return a},terminate:function(){b.tooltip&&b.tooltip.hide(0);delete b.highlightedPoint}}),a("resetZoom",[[[9,37,38,39,40],function(a,b){return this.move(9===a&&b.shiftKey||38===a||
61
+ 37===a?-1:1)}],[[13,32],function(){b.zoomOut()}]],{validate:function(){return b.resetZoomButton&&b.resetZoomButton.box},init:function(){b.setFocusToElement(b.resetZoomButton.box,b.resetZoomButton)}}),a("exporting",[[[37,38],function(){for(var a=b.highlightedExportItem||0,c=!0;a--;)if(b.highlightExportItem(a)){c=!1;break}if(c)return b.highlightLastExportItem(),!0}],[[39,40],function(){for(var a=!0,c=(b.highlightedExportItem||0)+1;c<b.exportDivElements.length;++c)if(b.highlightExportItem(c)){a=!1;break}if(a)return b.highlightExportItem(0),
62
+ !0}],[[13,32],function(){p(b.exportDivElements[b.highlightedExportItem])}]],{validate:function(){return b.exportChart&&!(b.options.exporting&&!1===b.options.exporting.enabled)},init:function(a){b.highlightedPoint=null;b.showExportMenu();0>a&&b.highlightLastExportItem()},terminate:function(){b.hideExportMenu()}}),a("mapZoom",[[[38,40,37,39],function(a){b[38===a||40===a?"yAxis":"xAxis"][0].panStep(39>a?-1:1)}],[[9],function(a,c){b.mapNavButtons[b.focusedMapNavButtonIx].setState(0);if(c.shiftKey&&!b.focusedMapNavButtonIx||
63
+ !c.shiftKey&&b.focusedMapNavButtonIx)return b.mapZoom(),this.move(c.shiftKey?-1:1);b.focusedMapNavButtonIx+=c.shiftKey?-1:1;a=b.mapNavButtons[b.focusedMapNavButtonIx];b.setFocusToElement(a.box,a);a.setState(2)}],[[13,32],function(){p(b.mapNavButtons[b.focusedMapNavButtonIx].element)}]],{validate:function(){return b.mapZoom&&b.mapNavButtons&&2===b.mapNavButtons.length},init:function(a){var c=b.mapNavButtons[0],d=b.mapNavButtons[1],c=0<a?c:d;b.mapNavButtons.forEach(function(a,c){a.element.setAttribute("tabindex",
64
+ -1);a.element.setAttribute("role","button");a.element.setAttribute("aria-label",b.langFormat("accessibility.mapZoom"+(c?"Out":"In"),{chart:b}))});b.setFocusToElement(c.box,c);c.setState(2);b.focusedMapNavButtonIx=0<a?0:1}}),a("rangeSelector",[[[37,39,38,40],function(a){a=37===a||38===a?-1:1;if(!b.highlightRangeSelectorButton(b.highlightedRangeSelectorItemIx+a))return this.move(a)}],[[13,32],function(){3!==b.oldRangeSelectorItemState&&p(b.rangeSelector.buttons[b.highlightedRangeSelectorItemIx].element)}]],
65
+ {validate:function(){return b.rangeSelector&&b.rangeSelector.buttons&&b.rangeSelector.buttons.length},init:function(a){b.rangeSelector.buttons.forEach(function(a){a.element.setAttribute("tabindex","-1");a.element.setAttribute("role","button");a.element.setAttribute("aria-label",b.langFormat("accessibility.rangeSelectorButton",{chart:b,buttonText:a.text&&a.text.textStr}))});b.highlightRangeSelectorButton(0<a?0:b.rangeSelector.buttons.length-1)}}),a("rangeSelectorInput",[[[9,38,40],function(a,c){a=
66
+ 9===a&&c.shiftKey||38===a?-1:1;c=b.highlightedInputRangeIx+=a;if(1<c||0>c)return this.move(a);b.rangeSelector[c?"maxInput":"minInput"].focus()}]],{validate:function(){return b.rangeSelector&&b.rangeSelector.inputGroup&&"hidden"!==b.rangeSelector.inputGroup.element.getAttribute("visibility")&&!1!==b.options.rangeSelector.inputEnabled&&b.rangeSelector.minInput&&b.rangeSelector.maxInput},init:function(a){b.highlightedInputRangeIx=0<a?0:1;b.rangeSelector[b.highlightedInputRangeIx?"maxInput":"minInput"].focus()}}),
67
+ a("legend",[[[37,39,38,40],function(a){a=37===a||38===a?-1:1;!b.highlightLegendItem(b.highlightedLegendItemIx+a)&&1<b.legend.allItems.length&&this.init(a)}],[[13,32],function(){var a=b.legend.allItems[b.highlightedLegendItemIx].legendItem.element;p(b.legend.options.useHTML?a:a.parentNode)}]],{validate:function(){return b.legend&&b.legend.allItems&&b.legend.display&&!(b.colorAxis&&b.colorAxis.length)&&!1!==(b.options.legend&&b.options.legend.keyboardNavigation&&b.options.legend.keyboardNavigation.enabled)},
68
+ init:function(a){b.legend.allItems.forEach(function(a){a.legendGroup.element.setAttribute("tabindex","-1")});b.highlightLegendItem(0<a?0:b.legend.allItems.length-1)}})]};a.Chart.prototype.addExitAnchor=function(){var a=this;a.tabExitAnchor=f.createElement("div");a.tabExitAnchor.setAttribute("tabindex","0");r(!0,a.tabExitAnchor.style,{position:"absolute",top:"-999em",width:"1px",height:"1px",overflow:"hidden"});a.renderTo.appendChild(a.tabExitAnchor);return m(a.tabExitAnchor,"focus",function(b){b=
69
+ b||h.event;a.exiting?a.exiting=!1:(a.renderTo.focus(),b.preventDefault(),a.keyboardNavigationModuleIndex=a.keyboardNavigationModules.length-1,b=a.keyboardNavigationModules[a.keyboardNavigationModuleIndex],b.validate&&!b.validate()?b.move(-1):b.init(-1))})};a.Chart.prototype.resetKeyboardNavigation=function(){var a=this.keyboardNavigationModules&&this.keyboardNavigationModules[this.keyboardNavigationModuleIndex||0];a&&a.terminate&&a.terminate();this.focusElement&&this.focusElement.removeFocusBorder();
70
+ this.keyboardNavigationModuleIndex=0;this.keyboardReset=!0};a.addEvent(a.Series,"destroy",function(){var a=this.chart;a.highlightedPoint&&a.highlightedPoint.series===this&&(delete a.highlightedPoint,a.focusElement&&a.focusElement.removeFocusBorder())});a.Chart.prototype.callbacks.push(function(a){var b=a.options.accessibility;b.enabled&&b.keyboardNavigation.enabled&&(a.addKeyboardNavigationModules(),a.keyboardNavigationModuleIndex=0,a.container.hasAttribute&&!a.container.hasAttribute("tabIndex")&&
71
+ a.container.setAttribute("tabindex","0"),a.tabExitAnchor||(a.unbindExitAnchorFocus=a.addExitAnchor()),a.unbindKeydownHandler=m(a.renderTo,"keydown",function(b){b=b||h.event;var c=a.keyboardNavigationModules[a.keyboardNavigationModuleIndex];a.keyboardReset=!1;c&&c.run(b)&&b.preventDefault()}),a.unbindBlurHandler=m(f,"mouseup",function(){a.keyboardReset||a.pointer&&a.pointer.chartPosition||a.resetKeyboardNavigation()}),m(a,"destroy",function(){a.resetKeyboardNavigation();a.unbindExitAnchorFocus&&a.tabExitAnchor&&
72
+ a.unbindExitAnchorFocus();a.unbindKeydownHandler&&a.renderTo&&a.unbindKeydownHandler();a.unbindBlurHandler&&a.unbindBlurHandler()}))})})(n)});
73
+ //# sourceMappingURL=accessibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accessibility.js.map","lineCount":72,"mappings":"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","sources":["accessibility.src.js"],"names":["factory","module","exports","define","amd","Highcharts","undefined","H","formatExtendedStatement","statement","ctx","eachStart","indexOf","pluralStart","indexStart","indexEnd","eachEnd","slice","preEach","substring","postEach","eachArguments","eachStatement","split","lenArg","Number","result","arr","i","isNaN","length","len","Math","min","pluralEnd","pluralArguments","pluralStatement","num","pick","str","trim","replace","arrayName","ix","val","i18nFormat","H.i18nFormat","formatString","context","time","getFirstBracketStatement","sourceStr","offset","startBracket","endBracket","begin","end","tokens","bracketRes","constRes","cursor","push","value","type","forEach","token","format","reduce","acc","cur","Chart","prototype","langFormat","H.Chart.prototype.langFormat","langKey","keys","options","lang","setOptions","accessibility","screenReaderRegionLabel","navigationHint","defaultChartTitle","longDescriptionHeading","noDescription","structureHeading","viewAsDataTable","chartHeading","chartContainerLabel","rangeSelectorMinInput","rangeSelectorMaxInput","tableSummary","mapZoomIn","mapZoomOut","rangeSelectorButton","legendLabel","svgContainerTitle","seriesTypeDescriptions","boxplot","arearange","areasplinerange","bubble","columnrange","errorbar","funnel","pyramid","waterfall","chartTypes","emptyChart","mapTypeDescription","unknownMap","combinationChart","defaultSingle","defaultMultiple","splineSingle","splineMultiple","lineSingle","lineMultiple","columnSingle","columnMultiple","barSingle","barMultiple","pieSingle","pieMultiple","scatterSingle","scatterMultiple","boxplotSingle","boxplotMultiple","bubbleSingle","bubbleMultiple","axis","xAxisDescriptionSingular","xAxisDescriptionPlural","yAxisDescriptionSingular","yAxisDescriptionPlural","exporting","chartMenuLabel","menuButtonLabel","exportRegionLabel","series","summary","defaultCombination","line","lineCombination","spline","splineCombination","column","columnCombination","bar","barCombination","pie","pieCombination","scatter","scatterCombination","boxplotCombination","bubbleCombination","map","mapCombination","mapline","maplineCombination","mapbubble","mapbubbleCombination","description","xAxisDescription","yAxisDescription","htmlencode","html","stripTags","s","reverseChildNodes","node","childNodes","appendChild","doc","win","document","erase","addEvent","merge","hiddenStyle","position","top","width","height","overflow","Series","commonKeys","specialKeys","seriesTypes","enabled","pointDescriptionThreshold","screenReaderSectionFormatter","chart","types","formatContext","numSeries","axesDesc","getAxesDescription","title","text","subtitle","typeDescription","getTypeDescription","xAxis","yAxis","setA11yDescription","H.Series.prototype.setA11yDescription","a11yOptions","firstPointEl","points","graphic","element","seriesEl","parentNode","graph","group","lastChild","point","setAttribute","pointDescriptionFormatter","buildPointInfoString","describeSingleSeries","exposeElementToA11y","seriesDescriptionFormatter","buildSeriesInfoString","H.Series.prototype.buildSeriesInfoString","desc","xAxisInfo","name","getDescription","yAxisInfo","summaryContext","index","numPoints","combination","Point","H.Point.prototype.buildPointInfoString","infoString","dateTimePoint","isDatetimeAxis","timeDesc","dateFormat","pointDateFormatter","pointDateFormat","Tooltip","getXDateFormat","call","getDateFormat","tooltip","x","find","hasSpecialKey","key","concat","category","id","y","Axis","H.Axis.prototype.getDescription","userOptions","axisTitle","textStr","categories","removedSeries","hasType","H.Chart.prototype.getTypeDescription","firstType","firstSeries","mapTitle","typeDesc","multi","H.Chart.prototype.getAxesDescription","numXAxes","numYAxes","names","numAxes","addAccessibleContextMenuAttribs","H.Chart.prototype.addAccessibleContextMenuAttribs","exportList","exportDivElements","item","tagName","children","addScreenReaderRegion","H.Chart.prototype.addScreenReaderRegion","tableId","hiddenSection","screenReaderRegion","createElement","tableShortcut","tableShortcutAnchor","screenReaderHeading","innerHTML","getCSV","href","onclick","onTableAnchorClick","viewData","getElementById","focus","renderTo","insertBefore","firstChild","style","Legend","items","allItems","attr","role","box","itemGroup","legendGroup","legendItem","visible","label","itemName","e","pressed","div","callbacks","descElement","container","getElementsByTagName","textElements","titleId","hiddenSectionId","chartTitle","titleElement","createElementNS","textContent","exportSVGElements","button","oldExportCallback","button.onclick","apply","Array","arguments","highlightExportItem","exportingGroup","rangeSelector","el","getAttribute","getPointIndex","KeyboardNavigationModule","keyCodeMap","validate","init","terminate","fakeClickEvent","fakeEvent","createEvent","initEvent","isSkipSeries","skipKeyboardNavigation","enableMouseTracking","isSkipPoint","isNull","keyboardNavigation","skipNullPoints","fireEvent","extend","SVGElement","addFocusBorder","margin","focusBorder","removeFocusBorder","bb","getBBox","pad","translateX","translateY","renderer","rect","borderRadius","addClass","zIndex","add","parentGroup","styledMode","stroke","strokeWidth","destroy","keyboardMoveVertical","hideBrowserFocusOutline","color","lineWidth","run","navModule","keyCode","which","found","handled","codeSet","move","shiftKey","direction","keyboardNavigationModuleIndex","newModule","keyboardNavigationModules","focusElement","exiting","tabExitAnchor","panStep","H.Axis.prototype.panStep","granularity","gran","extremes","getExtremes","step","max","newMax","newMin","size","dataMin","dataMax","setExtremes","setFocusToElement","H.Chart.prototype.setFocusToElement","svgElement","focusBorderOptions","browserFocusElement","css","outline","highlight","H.Point.prototype.highlight","hide","onMouseOver","highlightedPoint","highlightAdjacentPoint","H.Chart.prototype.highlightAdjacentPoint","next","curPoint","curPointIndex","curPoints","lastSeries","lastPoint","newSeries","newPoint","highlightFirstValidPoint","H.Series.prototype.highlightFirstValidPoint","start","j","highlightAdjacentSeries","H.Chart.prototype.highlightAdjacentSeries","down","minDistance","Infinity","dPoint","plotX","plotY","distance","xWeight","minIx","adjacentNewPoint","highlightAdjacentPointVertical","H.Chart.prototype.highlightAdjacentPointVertical","bestPoint","yDistance","abs","reversed","showExportMenu","H.Chart.prototype.showExportMenu","hideExportMenu","H.Chart.prototype.hideExportMenu","exportContextMenu","className","onmouseout","highlightedExportItem","hideMenu","H.Chart.prototype.highlightExportItem","listItem","curHighlighted","hasSVGFocusSupport","onmouseover","highlightLastExportItem","H.Chart.prototype.highlightLastExportItem","highlightRangeSelectorButton","H.Chart.prototype.highlightRangeSelectorButton","buttons","highlightedRangeSelectorItemIx","setState","oldRangeSelectorItemState","state","highlightLegendItem","H.Chart.prototype.highlightLegendItem","legend","oldIx","highlightedLegendItemIx","pageIx","currentPage","scroll","addKeyboardNavigationModules","H.Chart.prototype.addKeyboardNavigationModules","navModuleFactory","keyMap","right","navOptions","mode","highlightMethod","firePointEvent","dir","res","zoomOut","resetZoomButton","reachedEnd","exportChart","mapNavButtons","focusedMapNavButtonIx","mapZoom","zoomIn","initialButton","buttonText","newIx","highlightedInputRangeIx","inputGroup","inputEnabled","minInput","maxInput","legendElement","useHTML","display","colorAxis","addExitAnchor","H.Chart.prototype.addExitAnchor","ev","event","preventDefault","curModule","resetKeyboardNavigation","H.Chart.prototype.resetKeyboardNavigation","curMod","keyboardReset","hasAttribute","unbindExitAnchorFocus","unbindKeydownHandler","curNavModule","unbindBlurHandler","pointer","chartPosition"]}
@@ -0,0 +1,3103 @@
1
+ /**
2
+ * @license Highcharts JS v7.0.3 (2019-02-06)
3
+ * Accessibility module
4
+ *
5
+ * (c) 2010-2019 Highsoft AS
6
+ * Author: Oystein Moseng
7
+ *
8
+ * License: www.highcharts.com/license
9
+ */
10
+ 'use strict';
11
+ (function (factory) {
12
+ if (typeof module === 'object' && module.exports) {
13
+ factory['default'] = factory;
14
+ module.exports = factory;
15
+ } else if (typeof define === 'function' && define.amd) {
16
+ define(function () {
17
+ return factory;
18
+ });
19
+ } else {
20
+ factory(typeof Highcharts !== 'undefined' ? Highcharts : undefined);
21
+ }
22
+ }(function (Highcharts) {
23
+ (function (H) {
24
+ /**
25
+ * Accessibility module - internationalization support
26
+ *
27
+ * (c) 2010-2019 Highsoft AS
28
+ * Author: Øystein Moseng
29
+ *
30
+ * License: www.highcharts.com/license
31
+ */
32
+
33
+
34
+
35
+ var pick = H.pick;
36
+
37
+ /**
38
+ * String trim that works for IE6-8 as well.
39
+ *
40
+ * @private
41
+ * @function stringTrim
42
+ *
43
+ * @param {string} str
44
+ * The input string
45
+ *
46
+ * @return {string}
47
+ * The trimmed string
48
+ */
49
+ function stringTrim(str) {
50
+ return str.trim && str.trim() || str.replace(/^\s+|\s+$/g, '');
51
+ }
52
+
53
+ /**
54
+ * i18n utility function. Format a single array or plural statement in a format
55
+ * string. If the statement is not an array or plural statement, returns the
56
+ * statement within brackets. Invalid array statements return an empty string.
57
+ *
58
+ * @private
59
+ * @function formatExtendedStatement
60
+ *
61
+ * @param {string} statement
62
+ *
63
+ * @param {Highcharts.Dictionary<*>} ctx
64
+ * Context to apply to the format string.
65
+ *
66
+ * @return {string}
67
+ */
68
+ function formatExtendedStatement(statement, ctx) {
69
+ var eachStart = statement.indexOf('#each('),
70
+ pluralStart = statement.indexOf('#plural('),
71
+ indexStart = statement.indexOf('['),
72
+ indexEnd = statement.indexOf(']'),
73
+ arr,
74
+ result;
75
+
76
+ // Dealing with an each-function?
77
+ if (eachStart > -1) {
78
+ var eachEnd = statement.slice(eachStart).indexOf(')') + eachStart,
79
+ preEach = statement.substring(0, eachStart),
80
+ postEach = statement.substring(eachEnd + 1),
81
+ eachStatement = statement.substring(eachStart + 6, eachEnd),
82
+ eachArguments = eachStatement.split(','),
83
+ lenArg = Number(eachArguments[1]),
84
+ len;
85
+
86
+ result = '';
87
+ arr = ctx[eachArguments[0]];
88
+ if (arr) {
89
+ lenArg = isNaN(lenArg) ? arr.length : lenArg;
90
+ len = lenArg < 0 ?
91
+ arr.length + lenArg :
92
+ Math.min(lenArg, arr.length); // Overshoot
93
+ // Run through the array for the specified length
94
+ for (var i = 0; i < len; ++i) {
95
+ result += preEach + arr[i] + postEach;
96
+ }
97
+ }
98
+ return result.length ? result : '';
99
+ }
100
+
101
+ // Dealing with a plural-function?
102
+ if (pluralStart > -1) {
103
+ var pluralEnd = statement.slice(pluralStart).indexOf(')') + pluralStart,
104
+ pluralStatement = statement.substring(pluralStart + 8, pluralEnd),
105
+ pluralArguments = pluralStatement.split(','),
106
+ num = Number(ctx[pluralArguments[0]]);
107
+
108
+ switch (num) {
109
+ case 0:
110
+ result = pick(pluralArguments[4], pluralArguments[1]);
111
+ break;
112
+ case 1:
113
+ result = pick(pluralArguments[2], pluralArguments[1]);
114
+ break;
115
+ case 2:
116
+ result = pick(pluralArguments[3], pluralArguments[1]);
117
+ break;
118
+ default:
119
+ result = pluralArguments[1];
120
+ }
121
+ return result ? stringTrim(result) : '';
122
+ }
123
+
124
+ // Array index
125
+ if (indexStart > -1) {
126
+ var arrayName = statement.substring(0, indexStart),
127
+ ix = Number(statement.substring(indexStart + 1, indexEnd)),
128
+ val;
129
+
130
+ arr = ctx[arrayName];
131
+ if (!isNaN(ix) && arr) {
132
+ if (ix < 0) {
133
+ val = arr[arr.length + ix];
134
+ // Handle negative overshoot
135
+ if (val === undefined) {
136
+ val = arr[0];
137
+ }
138
+ } else {
139
+ val = arr[ix];
140
+ // Handle positive overshoot
141
+ if (val === undefined) {
142
+ val = arr[arr.length - 1];
143
+ }
144
+ }
145
+ }
146
+ return val !== undefined ? val : '';
147
+ }
148
+
149
+ // Standard substitution, delegate to H.format or similar
150
+ return '{' + statement + '}';
151
+ }
152
+
153
+
154
+ /**
155
+ * i18n formatting function. Extends Highcharts.format() functionality by also
156
+ * handling arrays and plural conditionals. Arrays can be indexed as follows:
157
+ *
158
+ * - Format: 'This is the first index: {myArray[0]}. The last: {myArray[-1]}.'
159
+ *
160
+ * - Context: { myArray: [0, 1, 2, 3, 4, 5] }
161
+ *
162
+ * - Result: 'This is the first index: 0. The last: 5.'
163
+ *
164
+ *
165
+ * They can also be iterated using the #each() function. This will repeat the
166
+ * contents of the bracket expression for each element. Example:
167
+ *
168
+ * - Format: 'List contains: {#each(myArray)cm }'
169
+ *
170
+ * - Context: { myArray: [0, 1, 2] }
171
+ *
172
+ * - Result: 'List contains: 0cm 1cm 2cm '
173
+ *
174
+ *
175
+ * The #each() function optionally takes a length parameter. If positive, this
176
+ * parameter specifies the max number of elements to iterate through. If
177
+ * negative, the function will subtract the number from the length of the array.
178
+ * Use this to stop iterating before the array ends. Example:
179
+ *
180
+ * - Format: 'List contains: {#each(myArray, -1) }and {myArray[-1]}.'
181
+ *
182
+ * - Context: { myArray: [0, 1, 2, 3] }
183
+ *
184
+ * - Result: 'List contains: 0, 1, 2, and 3.'
185
+ *
186
+ *
187
+ * Use the #plural() function to pick a string depending on whether or not a
188
+ * context object is 1. Arguments are #plural(obj, plural, singular). Example:
189
+ *
190
+ * - Format: 'Has {numPoints} {#plural(numPoints, points, point}.'
191
+ *
192
+ * - Context: { numPoints: 5 }
193
+ *
194
+ * - Result: 'Has 5 points.'
195
+ *
196
+ *
197
+ * Optionally there are additional parameters for dual and none: #plural(obj,
198
+ * plural, singular, dual, none). Example:
199
+ *
200
+ * - Format: 'Has {#plural(numPoints, many points, one point, two points,
201
+ * none}.'
202
+ *
203
+ * - Context: { numPoints: 2 }
204
+ *
205
+ * - Result: 'Has two points.'
206
+ *
207
+ *
208
+ * The dual or none parameters will take precedence if they are supplied.
209
+ *
210
+ *
211
+ * @function Highcharts.i18nFormat
212
+ * @requires a11y-i18n
213
+ *
214
+ * @param {string} formatString
215
+ * The string to format.
216
+ *
217
+ * @param {Highcharts.Dictionary<*>} context
218
+ * Context to apply to the format string.
219
+ *
220
+ * @param {Highcharts.Time} time
221
+ * A `Time` instance for date formatting, passed on to H.format().
222
+ *
223
+ * @return {string}
224
+ * The formatted string.
225
+ */
226
+ H.i18nFormat = function (formatString, context, time) {
227
+ var getFirstBracketStatement = function (sourceStr, offset) {
228
+ var str = sourceStr.slice(offset || 0),
229
+ startBracket = str.indexOf('{'),
230
+ endBracket = str.indexOf('}');
231
+
232
+ if (startBracket > -1 && endBracket > startBracket) {
233
+ return {
234
+ statement: str.substring(startBracket + 1, endBracket),
235
+ begin: offset + startBracket + 1,
236
+ end: offset + endBracket
237
+ };
238
+ }
239
+ },
240
+ tokens = [],
241
+ bracketRes,
242
+ constRes,
243
+ cursor = 0;
244
+
245
+ // Tokenize format string into bracket statements and constants
246
+ do {
247
+ bracketRes = getFirstBracketStatement(formatString, cursor);
248
+ constRes = formatString.substring(
249
+ cursor,
250
+ bracketRes && bracketRes.begin - 1
251
+ );
252
+
253
+ // If we have constant content before this bracket statement, add it
254
+ if (constRes.length) {
255
+ tokens.push({
256
+ value: constRes,
257
+ type: 'constant'
258
+ });
259
+ }
260
+
261
+ // Add the bracket statement
262
+ if (bracketRes) {
263
+ tokens.push({
264
+ value: bracketRes.statement,
265
+ type: 'statement'
266
+ });
267
+ }
268
+
269
+ cursor = bracketRes && bracketRes.end + 1;
270
+ } while (bracketRes);
271
+
272
+ // Perform the formatting. The formatArrayStatement function returns the
273
+ // statement in brackets if it is not an array statement, which means it
274
+ // gets picked up by H.format below.
275
+ tokens.forEach(function (token) {
276
+ if (token.type === 'statement') {
277
+ token.value = formatExtendedStatement(token.value, context);
278
+ }
279
+ });
280
+
281
+ // Join string back together and pass to H.format to pick up non-array
282
+ // statements.
283
+ return H.format(tokens.reduce(function (acc, cur) {
284
+ return acc + cur.value;
285
+ }, ''), context, time);
286
+ };
287
+
288
+
289
+ /**
290
+ * Apply context to a format string from lang options of the chart.
291
+ *
292
+ * @function Highcharts.Chart#langFormat
293
+ * @requires a11y-i18n
294
+ *
295
+ * @param {string} langKey
296
+ * Key (using dot notation) into lang option structure.
297
+ *
298
+ * @param {Highcharts.Dictionary<*>} context
299
+ * Context to apply to the format string.
300
+ *
301
+ * @return {string}
302
+ * The formatted string.
303
+ */
304
+ H.Chart.prototype.langFormat = function (langKey, context, time) {
305
+ var keys = langKey.split('.'),
306
+ formatString = this.options.lang,
307
+ i = 0;
308
+
309
+ for (; i < keys.length; ++i) {
310
+ formatString = formatString && formatString[keys[i]];
311
+ }
312
+ return typeof formatString === 'string' && H.i18nFormat(
313
+ formatString, context, time
314
+ );
315
+ };
316
+
317
+ H.setOptions({
318
+ lang: {
319
+
320
+ /* eslint-disable max-len */
321
+ /**
322
+ * Configure the accessibility strings in the chart. Requires the
323
+ * [accessibility module](//code.highcharts.com/modules/accessibility.js)
324
+ * to be loaded. For a description of the module and information on its
325
+ * features, see [Highcharts Accessibility](
326
+ * http://www.highcharts.com/docs/chart-concepts/accessibility).
327
+ *
328
+ * For more dynamic control over the accessibility functionality, see
329
+ * [accessibility.pointDescriptionFormatter](
330
+ * accessibility.pointDescriptionFormatter),
331
+ * [accessibility.seriesDescriptionFormatter](
332
+ * accessibility.seriesDescriptionFormatter), and
333
+ * [accessibility.screenReaderSectionFormatter](
334
+ * accessibility.screenReaderSectionFormatter).
335
+ *
336
+ * @since 6.0.6
337
+ * @optionparent lang.accessibility
338
+ */
339
+ /* eslint-enable max-len */
340
+ accessibility: {
341
+
342
+ /* eslint-disable max-len */
343
+ screenReaderRegionLabel: 'Chart screen reader information.',
344
+ navigationHint: 'Use regions/landmarks to skip ahead to chart {#plural(numSeries, and navigate between data series,)}',
345
+ defaultChartTitle: 'Chart',
346
+ longDescriptionHeading: 'Long description.',
347
+ noDescription: 'No description available.',
348
+ structureHeading: 'Structure.',
349
+ viewAsDataTable: 'View as data table.',
350
+ chartHeading: 'Chart graphic.',
351
+ chartContainerLabel: 'Interactive chart. {title}. Use up and down arrows to navigate with most screen readers.',
352
+ rangeSelectorMinInput: 'Select start date.',
353
+ rangeSelectorMaxInput: 'Select end date.',
354
+ tableSummary: 'Table representation of chart.',
355
+ mapZoomIn: 'Zoom chart',
356
+ mapZoomOut: 'Zoom out chart',
357
+ rangeSelectorButton: 'Select range {buttonText}',
358
+ legendLabel: 'Toggle series visibility',
359
+ /* eslint-enable max-len */
360
+
361
+ /**
362
+ * Title element text for the chart SVG element. Leave this
363
+ * empty to disable adding the title element. Browsers will display
364
+ * this content when hovering over elements in the chart. Assistive
365
+ * technology may use this element to label the chart.
366
+ *
367
+ * @since 6.0.8
368
+ */
369
+ svgContainerTitle: '{chartTitle}',
370
+
371
+ /**
372
+ * Descriptions of lesser known series types. The relevant
373
+ * description is added to the screen reader information region
374
+ * when these series types are used.
375
+ *
376
+ * @since 6.0.6
377
+ */
378
+ seriesTypeDescriptions: {
379
+ boxplot: 'Box plot charts are typically used to display ' +
380
+ 'groups of statistical data. Each data point in the ' +
381
+ 'chart can have up to 5 values: minimum, lower quartile, ' +
382
+ 'median, upper quartile, and maximum.',
383
+ arearange: 'Arearange charts are line charts displaying a ' +
384
+ 'range between a lower and higher value for each point.',
385
+ areasplinerange: 'These charts are line charts displaying a ' +
386
+ 'range between a lower and higher value for each point.',
387
+ bubble: 'Bubble charts are scatter charts where each data ' +
388
+ 'point also has a size value.',
389
+ columnrange: 'Columnrange charts are column charts ' +
390
+ 'displaying a range between a lower and higher value for ' +
391
+ 'each point.',
392
+ errorbar: 'Errorbar series are used to display the ' +
393
+ 'variability of the data.',
394
+ funnel: 'Funnel charts are used to display reduction of data ' +
395
+ 'in stages.',
396
+ pyramid: 'Pyramid charts consist of a single pyramid with ' +
397
+ 'item heights corresponding to each point value.',
398
+ waterfall: 'A waterfall chart is a column chart where each ' +
399
+ 'column contributes towards a total end value.'
400
+ },
401
+
402
+ /**
403
+ * Chart type description strings. This is added to the chart
404
+ * information region.
405
+ *
406
+ * If there is only a single series type used in the chart, we use
407
+ * the format string for the series type, or default if missing.
408
+ * There is one format string for cases where there is only a single
409
+ * series in the chart, and one for multiple series of the same
410
+ * type.
411
+ *
412
+ * @since 6.0.6
413
+ */
414
+ chartTypes: {
415
+ /* eslint-disable max-len */
416
+ emptyChart: 'Empty chart',
417
+ mapTypeDescription: 'Map of {mapTitle} with {numSeries} data series.',
418
+ unknownMap: 'Map of unspecified region with {numSeries} data series.',
419
+ combinationChart: 'Combination chart with {numSeries} data series.',
420
+ defaultSingle: 'Chart with {numPoints} data {#plural(numPoints, points, point)}.',
421
+ defaultMultiple: 'Chart with {numSeries} data series.',
422
+ splineSingle: 'Line chart with {numPoints} data {#plural(numPoints, points, point)}.',
423
+ splineMultiple: 'Line chart with {numSeries} lines.',
424
+ lineSingle: 'Line chart with {numPoints} data {#plural(numPoints, points, point)}.',
425
+ lineMultiple: 'Line chart with {numSeries} lines.',
426
+ columnSingle: 'Bar chart with {numPoints} {#plural(numPoints, bars, bar)}.',
427
+ columnMultiple: 'Bar chart with {numSeries} data series.',
428
+ barSingle: 'Bar chart with {numPoints} {#plural(numPoints, bars, bar)}.',
429
+ barMultiple: 'Bar chart with {numSeries} data series.',
430
+ pieSingle: 'Pie chart with {numPoints} {#plural(numPoints, slices, slice)}.',
431
+ pieMultiple: 'Pie chart with {numSeries} pies.',
432
+ scatterSingle: 'Scatter chart with {numPoints} {#plural(numPoints, points, point)}.',
433
+ scatterMultiple: 'Scatter chart with {numSeries} data series.',
434
+ boxplotSingle: 'Boxplot with {numPoints} {#plural(numPoints, boxes, box)}.',
435
+ boxplotMultiple: 'Boxplot with {numSeries} data series.',
436
+ bubbleSingle: 'Bubble chart with {numPoints} {#plural(numPoints, bubbles, bubble)}.',
437
+ bubbleMultiple: 'Bubble chart with {numSeries} data series.'
438
+ }, /* eslint-enable max-len */
439
+
440
+ /**
441
+ * Axis description format strings.
442
+ *
443
+ * @since 6.0.6
444
+ */
445
+ axis: {
446
+ /* eslint-disable max-len */
447
+ xAxisDescriptionSingular: 'The chart has 1 X axis displaying {names[0]}.',
448
+ xAxisDescriptionPlural: 'The chart has {numAxes} X axes displaying {#names.forEach(-1) }and {names[-1]}',
449
+ yAxisDescriptionSingular: 'The chart has 1 Y axis displaying {names[0]}.',
450
+ yAxisDescriptionPlural: 'The chart has {numAxes} Y axes displaying {#names.forEach(-1) }and {names[-1]}'
451
+ }, /* eslint-enable max-len */
452
+
453
+ /**
454
+ * Exporting menu format strings for accessibility module.
455
+ *
456
+ * @since 6.0.6
457
+ */
458
+ exporting: {
459
+ chartMenuLabel: 'Chart export',
460
+ menuButtonLabel: 'View export menu',
461
+ exportRegionLabel: 'Chart export menu'
462
+ },
463
+
464
+ /**
465
+ * Lang configuration for different series types. For more dynamic
466
+ * control over the series element descriptions, see
467
+ * [accessibility.seriesDescriptionFormatter](
468
+ * accessibility.seriesDescriptionFormatter).
469
+ *
470
+ * @since 6.0.6
471
+ */
472
+ series: {
473
+ /**
474
+ * Lang configuration for the series main summary. Each series
475
+ * type has two modes:
476
+ *
477
+ * 1. This series type is the only series type used in the
478
+ * chart
479
+ *
480
+ * 2. This is a combination chart with multiple series types
481
+ *
482
+ * If a definition does not exist for the specific series type
483
+ * and mode, the 'default' lang definitions are used.
484
+ *
485
+ * @since 6.0.6
486
+ */
487
+ summary: {
488
+ /* eslint-disable max-len */
489
+ 'default': '{name}, series {ix} of {numSeries} with {numPoints} data {#plural(numPoints, points, point)}.',
490
+ defaultCombination: '{name}, series {ix} of {numSeries} with {numPoints} data {#plural(numPoints, points, point)}.',
491
+ line: '{name}, line {ix} of {numSeries} with {numPoints} data {#plural(numPoints, points, point)}.',
492
+ lineCombination: '{name}, series {ix} of {numSeries}. Line with {numPoints} data {#plural(numPoints, points, point)}.',
493
+ spline: '{name}, line {ix} of {numSeries} with {numPoints} data {#plural(numPoints, points, point)}.',
494
+ splineCombination: '{name}, series {ix} of {numSeries}. Line with {numPoints} data {#plural(numPoints, points, point)}.',
495
+ column: '{name}, bar series {ix} of {numSeries} with {numPoints} {#plural(numPoints, bars, bar)}.',
496
+ columnCombination: '{name}, series {ix} of {numSeries}. Bar series with {numPoints} {#plural(numPoints, bars, bar)}.',
497
+ bar: '{name}, bar series {ix} of {numSeries} with {numPoints} {#plural(numPoints, bars, bar)}.',
498
+ barCombination: '{name}, series {ix} of {numSeries}. Bar series with {numPoints} {#plural(numPoints, bars, bar)}.',
499
+ pie: '{name}, pie {ix} of {numSeries} with {numPoints} {#plural(numPoints, slices, slice)}.',
500
+ pieCombination: '{name}, series {ix} of {numSeries}. Pie with {numPoints} {#plural(numPoints, slices, slice)}.',
501
+ scatter: '{name}, scatter plot {ix} of {numSeries} with {numPoints} {#plural(numPoints, points, point)}.',
502
+ scatterCombination: '{name}, series {ix} of {numSeries}, scatter plot with {numPoints} {#plural(numPoints, points, point)}.',
503
+ boxplot: '{name}, boxplot {ix} of {numSeries} with {numPoints} {#plural(numPoints, boxes, box)}.',
504
+ boxplotCombination: '{name}, series {ix} of {numSeries}. Boxplot with {numPoints} {#plural(numPoints, boxes, box)}.',
505
+ bubble: '{name}, bubble series {ix} of {numSeries} with {numPoints} {#plural(numPoints, bubbles, bubble)}.',
506
+ bubbleCombination: '{name}, series {ix} of {numSeries}. Bubble series with {numPoints} {#plural(numPoints, bubbles, bubble)}.',
507
+ map: '{name}, map {ix} of {numSeries} with {numPoints} {#plural(numPoints, areas, area)}.',
508
+ mapCombination: '{name}, series {ix} of {numSeries}. Map with {numPoints} {#plural(numPoints, areas, area)}.',
509
+ mapline: '{name}, line {ix} of {numSeries} with {numPoints} data {#plural(numPoints, points, point)}.',
510
+ maplineCombination: '{name}, series {ix} of {numSeries}. Line with {numPoints} data {#plural(numPoints, points, point)}.',
511
+ mapbubble: '{name}, bubble series {ix} of {numSeries} with {numPoints} {#plural(numPoints, bubbles, bubble)}.',
512
+ mapbubbleCombination: '{name}, series {ix} of {numSeries}. Bubble series with {numPoints} {#plural(numPoints, bubbles, bubble)}.'
513
+ }, /* eslint-enable max-len */
514
+
515
+ /**
516
+ * User supplied description text. This is added after the main
517
+ * summary if present.
518
+ *
519
+ * @since 6.0.6
520
+ */
521
+ description: '{description}',
522
+
523
+ /**
524
+ * xAxis description for series if there are multiple xAxes in
525
+ * the chart.
526
+ *
527
+ * @since 6.0.6
528
+ */
529
+ xAxisDescription: 'X axis, {name}',
530
+
531
+ /**
532
+ * yAxis description for series if there are multiple yAxes in
533
+ * the chart.
534
+ *
535
+ * @since 6.0.6
536
+ */
537
+ yAxisDescription: 'Y axis, {name}'
538
+
539
+ }
540
+
541
+ }
542
+
543
+ }
544
+ });
545
+
546
+ }(Highcharts));
547
+ (function (H) {
548
+ /**
549
+ * Accessibility module - Screen Reader support
550
+ *
551
+ * (c) 2010-2017 Highsoft AS
552
+ * Author: Oystein Moseng
553
+ *
554
+ * License: www.highcharts.com/license
555
+ */
556
+
557
+
558
+
559
+ var win = H.win,
560
+ doc = win.document,
561
+ erase = H.erase,
562
+ addEvent = H.addEvent,
563
+ merge = H.merge,
564
+ // CSS style to hide element from visual users while still exposing it to
565
+ // screen readers
566
+ hiddenStyle = {
567
+ position: 'absolute',
568
+ top: '-999em',
569
+ width: '1px',
570
+ height: '1px',
571
+ overflow: 'hidden'
572
+ };
573
+
574
+ // If a point has one of the special keys defined, we expose all keys to the
575
+ // screen reader.
576
+ H.Series.prototype.commonKeys = ['name', 'id', 'category', 'x', 'value', 'y'];
577
+ H.Series.prototype.specialKeys = [
578
+ 'z', 'open', 'high', 'q3', 'median', 'q1', 'low', 'close'
579
+ ];
580
+ if (H.seriesTypes.pie) {
581
+ // A pie is always simple. Don't quote me on that.
582
+ H.seriesTypes.pie.prototype.specialKeys = [];
583
+ }
584
+
585
+
586
+ /**
587
+ * HTML encode some characters vulnerable for XSS.
588
+ *
589
+ * @private
590
+ * @function htmlencode
591
+ *
592
+ * @param {string} html
593
+ * The input string.
594
+ *
595
+ * @return {string}
596
+ * The excaped string.
597
+ */
598
+ function htmlencode(html) {
599
+ return html
600
+ .replace(/&/g, '&amp;')
601
+ .replace(/</g, '&lt;')
602
+ .replace(/>/g, '&gt;')
603
+ .replace(/"/g, '&quot;')
604
+ .replace(/'/g, '&#x27;')
605
+ .replace(/\//g, '&#x2F;');
606
+ }
607
+
608
+
609
+ /**
610
+ * Strip HTML tags away from a string. Used for aria-label attributes, painting
611
+ * on a canvas will fail if the text contains tags.
612
+ *
613
+ * @private
614
+ * @function stripTags
615
+ *
616
+ * @param {string} s
617
+ * The input string.
618
+ *
619
+ * @return {string}
620
+ * The filtered string.
621
+ */
622
+ function stripTags(s) {
623
+ return typeof s === 'string' ? s.replace(/<\/?[^>]+(>|$)/g, '') : s;
624
+ }
625
+
626
+
627
+ // Accessibility options
628
+ H.setOptions({
629
+
630
+ /**
631
+ * Options for configuring accessibility for the chart. Requires the
632
+ * [accessibility module](https://code.highcharts.com/modules/accessibility.js)
633
+ * to be loaded. For a description of the module and information
634
+ * on its features, see
635
+ * [Highcharts Accessibility](http://www.highcharts.com/docs/chart-concepts/accessibility).
636
+ *
637
+ * @since 5.0.0
638
+ * @optionparent accessibility
639
+ */
640
+ accessibility: {
641
+
642
+ /**
643
+ * Whether or not to add series descriptions to charts with a single
644
+ * series.
645
+ *
646
+ * @type {boolean}
647
+ * @default false
648
+ * @since 5.0.0
649
+ * @apioption accessibility.describeSingleSeries
650
+ */
651
+
652
+ /**
653
+ * Function to run upon clicking the "View as Data Table" link in the
654
+ * screen reader region.
655
+ *
656
+ * By default Highcharts will insert and set focus to a data table
657
+ * representation of the chart.
658
+ *
659
+ * @type {Function}
660
+ * @since 5.0.0
661
+ * @apioption accessibility.onTableAnchorClick
662
+ */
663
+
664
+ /**
665
+ * Date format to use for points on datetime axes when describing them
666
+ * to screen reader users.
667
+ *
668
+ * Defaults to the same format as in tooltip.
669
+ *
670
+ * For an overview of the replacement codes, see
671
+ * [dateFormat](/class-reference/Highcharts#dateFormat).
672
+ *
673
+ * @see [pointDateFormatter](#accessibility.pointDateFormatter)
674
+ *
675
+ * @type {string}
676
+ * @since 5.0.0
677
+ * @apioption accessibility.pointDateFormat
678
+ */
679
+
680
+ /**
681
+ * Formatter function to determine the date/time format used with
682
+ * points on datetime axes when describing them to screen reader users.
683
+ * Receives one argument, `point`, referring to the point to describe.
684
+ * Should return a date format string compatible with
685
+ * [dateFormat](/class-reference/Highcharts#dateFormat).
686
+ *
687
+ * @see [pointDateFormat](#accessibility.pointDateFormat)
688
+ *
689
+ * @type {Function}
690
+ * @since 5.0.0
691
+ * @apioption accessibility.pointDateFormatter
692
+ */
693
+
694
+ /**
695
+ * Formatter function to use instead of the default for point
696
+ * descriptions.
697
+ * Receives one argument, `point`, referring to the point to describe.
698
+ * Should return a String with the description of the point for a screen
699
+ * reader user.
700
+ *
701
+ * @see [point.description](#series.line.data.description)
702
+ *
703
+ * @type {Function}
704
+ * @since 5.0.0
705
+ * @apioption accessibility.pointDescriptionFormatter
706
+ */
707
+
708
+ /**
709
+ * Formatter function to use instead of the default for series
710
+ * descriptions. Receives one argument, `series`, referring to the
711
+ * series to describe. Should return a String with the description of
712
+ * the series for a screen reader user.
713
+ *
714
+ * @see [series.description](#plotOptions.series.description)
715
+ *
716
+ * @type {Function}
717
+ * @since 5.0.0
718
+ * @apioption accessibility.seriesDescriptionFormatter
719
+ */
720
+
721
+ /**
722
+ * Enable accessibility features for the chart.
723
+ *
724
+ * @since 5.0.0
725
+ */
726
+ enabled: true,
727
+
728
+ /**
729
+ * When a series contains more points than this, we no longer expose
730
+ * information about individual points to screen readers.
731
+ *
732
+ * Set to `false` to disable.
733
+ *
734
+ * @type {false|number}
735
+ * @since 5.0.0
736
+ */
737
+ pointDescriptionThreshold: false, // set to false to disable
738
+
739
+ /**
740
+ * A formatter function to create the HTML contents of the hidden screen
741
+ * reader information region. Receives one argument, `chart`, referring
742
+ * to the chart object. Should return a String with the HTML content
743
+ * of the region.
744
+ *
745
+ * The link to view the chart as a data table will be added
746
+ * automatically after the custom HTML content.
747
+ *
748
+ * @type {Function}
749
+ * @default undefined
750
+ * @since 5.0.0
751
+ */
752
+ screenReaderSectionFormatter: function (chart) {
753
+ var options = chart.options,
754
+ chartTypes = chart.types || [],
755
+ formatContext = {
756
+ chart: chart,
757
+ numSeries: chart.series && chart.series.length
758
+ },
759
+ // Build axis info - but not for pies and maps. Consider not
760
+ // adding for certain other types as well (funnel, pyramid?)
761
+ axesDesc = (
762
+ chartTypes.length === 1 && chartTypes[0] === 'pie' ||
763
+ chartTypes[0] === 'map'
764
+ ) && {} || chart.getAxesDescription();
765
+
766
+ return '<div>' + chart.langFormat(
767
+ 'accessibility.navigationHint', formatContext
768
+ ) + '</div><h3>' +
769
+ (
770
+ options.title.text ?
771
+ htmlencode(options.title.text) :
772
+ chart.langFormat(
773
+ 'accessibility.defaultChartTitle', formatContext
774
+ )
775
+ ) +
776
+ (
777
+ options.subtitle && options.subtitle.text ?
778
+ '. ' + htmlencode(options.subtitle.text) :
779
+ ''
780
+ ) +
781
+ '</h3>' + (
782
+ options.chart.description ? (
783
+ '<h4>' + chart.langFormat(
784
+ 'accessibility.longDescriptionHeading',
785
+ formatContext
786
+ ) +
787
+ '</h4><div>' + options.chart.description + '</div>'
788
+ ) : ''
789
+ ) + '<h4>' + chart.langFormat(
790
+ 'accessibility.structureHeading', formatContext
791
+ ) + '</h4><div>' +
792
+ (
793
+ options.chart.typeDescription ||
794
+ chart.getTypeDescription()
795
+ ) + '</div>' +
796
+ (axesDesc.xAxis ? (
797
+ '<div>' + axesDesc.xAxis + '</div>'
798
+ ) : '') +
799
+ (axesDesc.yAxis ? (
800
+ '<div>' + axesDesc.yAxis + '</div>'
801
+ ) : '');
802
+ }
803
+
804
+ }
805
+
806
+ });
807
+
808
+ /**
809
+ * A text description of the chart.
810
+ *
811
+ * If the Accessibility module is loaded, this is included by default
812
+ * as a long description of the chart and its contents in the hidden
813
+ * screen reader information region.
814
+ *
815
+ * @see [typeDescription](#chart.typeDescription)
816
+ *
817
+ * @type {string}
818
+ * @since 5.0.0
819
+ * @apioption chart.description
820
+ */
821
+
822
+ /**
823
+ * A text description of the chart type.
824
+ *
825
+ * If the Accessibility module is loaded, this will be included in the
826
+ * description of the chart in the screen reader information region.
827
+ *
828
+ *
829
+ * Highcharts will by default attempt to guess the chart type, but for
830
+ * more complex charts it is recommended to specify this property for
831
+ * clarity.
832
+ *
833
+ * @type {string}
834
+ * @since 5.0.0
835
+ * @apioption chart.typeDescription
836
+ */
837
+
838
+
839
+ /**
840
+ * Utility function. Reverses child nodes of a DOM element.
841
+ *
842
+ * @private
843
+ * @function reverseChildNodes
844
+ *
845
+ * @param {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement} node
846
+ */
847
+ function reverseChildNodes(node) {
848
+ var i = node.childNodes.length;
849
+
850
+ while (i--) {
851
+ node.appendChild(node.childNodes[i]);
852
+ }
853
+ }
854
+
855
+
856
+ // Whenever drawing series, put info on DOM elements
857
+ H.addEvent(H.Series, 'afterRender', function () {
858
+ if (this.chart.options.accessibility.enabled) {
859
+ this.setA11yDescription();
860
+ }
861
+ });
862
+
863
+
864
+ /**
865
+ * Put accessible info on series and points of a series.
866
+ *
867
+ * @private
868
+ * @function Highcharts.Series#setA11yDescription
869
+ */
870
+ H.Series.prototype.setA11yDescription = function () {
871
+ var a11yOptions = this.chart.options.accessibility,
872
+ firstPointEl = (
873
+ this.points &&
874
+ this.points.length &&
875
+ this.points[0].graphic &&
876
+ this.points[0].graphic.element
877
+ ),
878
+ seriesEl = (
879
+ firstPointEl &&
880
+ firstPointEl.parentNode || this.graph &&
881
+ this.graph.element || this.group &&
882
+ this.group.element
883
+ ); // Could be tracker series depending on series type
884
+
885
+ if (seriesEl) {
886
+ // For some series types the order of elements do not match the order of
887
+ // points in series. In that case we have to reverse them in order for
888
+ // AT to read them out in an understandable order
889
+ if (seriesEl.lastChild === firstPointEl) {
890
+ reverseChildNodes(seriesEl);
891
+ }
892
+ // Make individual point elements accessible if possible. Note: If
893
+ // markers are disabled there might not be any elements there to make
894
+ // accessible.
895
+ if (
896
+ this.points && (
897
+ this.points.length < a11yOptions.pointDescriptionThreshold ||
898
+ a11yOptions.pointDescriptionThreshold === false
899
+ )
900
+ ) {
901
+ this.points.forEach(function (point) {
902
+ if (point.graphic) {
903
+ point.graphic.element.setAttribute('role', 'img');
904
+ point.graphic.element.setAttribute('tabindex', '-1');
905
+ point.graphic.element.setAttribute('aria-label', stripTags(
906
+ point.series.options.pointDescriptionFormatter &&
907
+ point.series.options.pointDescriptionFormatter(point) ||
908
+ a11yOptions.pointDescriptionFormatter &&
909
+ a11yOptions.pointDescriptionFormatter(point) ||
910
+ point.buildPointInfoString()
911
+ ));
912
+ }
913
+ });
914
+ }
915
+ // Make series element accessible
916
+ if (this.chart.series.length > 1 || a11yOptions.describeSingleSeries) {
917
+ seriesEl.setAttribute(
918
+ 'role',
919
+ this.options.exposeElementToA11y ? 'img' : 'region'
920
+ );
921
+ seriesEl.setAttribute('tabindex', '-1');
922
+ seriesEl.setAttribute(
923
+ 'aria-label',
924
+ stripTags(
925
+ a11yOptions.seriesDescriptionFormatter &&
926
+ a11yOptions.seriesDescriptionFormatter(this) ||
927
+ this.buildSeriesInfoString()
928
+ )
929
+ );
930
+ }
931
+ }
932
+ };
933
+
934
+
935
+ /**
936
+ * Return string with information about series.
937
+ *
938
+ * @private
939
+ * @function Highcharts.Series#buildSeriesInfoString
940
+ *
941
+ * @return {string}
942
+ */
943
+ H.Series.prototype.buildSeriesInfoString = function () {
944
+ var chart = this.chart,
945
+ desc = this.description || this.options.description,
946
+ description = desc && chart.langFormat(
947
+ 'accessibility.series.description', {
948
+ description: desc,
949
+ series: this
950
+ }
951
+ ),
952
+ xAxisInfo = chart.langFormat(
953
+ 'accessibility.series.xAxisDescription',
954
+ {
955
+ name: this.xAxis && this.xAxis.getDescription(),
956
+ series: this
957
+ }
958
+ ),
959
+ yAxisInfo = chart.langFormat(
960
+ 'accessibility.series.yAxisDescription',
961
+ {
962
+ name: this.yAxis && this.yAxis.getDescription(),
963
+ series: this
964
+ }
965
+ ),
966
+ summaryContext = {
967
+ name: this.name || '',
968
+ ix: this.index + 1,
969
+ numSeries: chart.series.length,
970
+ numPoints: this.points.length,
971
+ series: this
972
+ },
973
+ combination = chart.types.length === 1 ? '' : 'Combination',
974
+ summary = chart.langFormat(
975
+ 'accessibility.series.summary.' + this.type + combination,
976
+ summaryContext
977
+ ) || chart.langFormat(
978
+ 'accessibility.series.summary.default' + combination,
979
+ summaryContext
980
+ );
981
+
982
+ return summary + (description ? ' ' + description : '') + (
983
+ chart.yAxis.length > 1 && this.yAxis ?
984
+ ' ' + yAxisInfo : ''
985
+ ) + (
986
+ chart.xAxis.length > 1 && this.xAxis ?
987
+ ' ' + xAxisInfo : ''
988
+ );
989
+ };
990
+
991
+
992
+ /**
993
+ * Return string with information about point.
994
+ *
995
+ * @private
996
+ * @function Highcharts.Point#buildPointInfoString
997
+ *
998
+ * @return {string}
999
+ */
1000
+ H.Point.prototype.buildPointInfoString = function () {
1001
+ var point = this,
1002
+ series = point.series,
1003
+ chart = series.chart,
1004
+ a11yOptions = chart.options.accessibility,
1005
+ infoString = '',
1006
+ dateTimePoint = series.xAxis && series.xAxis.isDatetimeAxis,
1007
+ timeDesc =
1008
+ dateTimePoint &&
1009
+ chart.time.dateFormat(
1010
+ a11yOptions.pointDateFormatter &&
1011
+ a11yOptions.pointDateFormatter(point) ||
1012
+ a11yOptions.pointDateFormat ||
1013
+ H.Tooltip.prototype.getXDateFormat.call(
1014
+ {
1015
+ getDateFormat: H.Tooltip.prototype.getDateFormat,
1016
+ chart: chart
1017
+ },
1018
+ point,
1019
+ chart.options.tooltip,
1020
+ series.xAxis
1021
+ ),
1022
+ point.x
1023
+ ),
1024
+ hasSpecialKey = H.find(series.specialKeys, function (key) {
1025
+ return point[key] !== undefined;
1026
+ });
1027
+
1028
+ // If the point has one of the less common properties defined, display all
1029
+ // that are defined
1030
+ if (hasSpecialKey) {
1031
+ if (dateTimePoint) {
1032
+ infoString = timeDesc;
1033
+ }
1034
+ series.commonKeys.concat(series.specialKeys).forEach(function (key) {
1035
+ if (point[key] !== undefined && !(dateTimePoint && key === 'x')) {
1036
+ infoString += (infoString ? '. ' : '') +
1037
+ key + ', ' +
1038
+ point[key];
1039
+ }
1040
+ });
1041
+ } else {
1042
+ // Pick and choose properties for a succint label
1043
+ infoString =
1044
+ (
1045
+ this.name ||
1046
+ timeDesc ||
1047
+ this.category ||
1048
+ this.id ||
1049
+ 'x, ' + this.x
1050
+ ) + ', ' +
1051
+ (this.value !== undefined ? this.value : this.y);
1052
+ }
1053
+
1054
+ return (this.index + 1) + '. ' + infoString + '.' +
1055
+ (this.description ? ' ' + this.description : '') +
1056
+ (chart.series.length > 1 && series.name ? ' ' + series.name : '');
1057
+ };
1058
+
1059
+
1060
+ /**
1061
+ * Get descriptive label for axis.
1062
+ *
1063
+ * @private
1064
+ * @function Highcharts.Axis#getDescription
1065
+ *
1066
+ * @return {string}
1067
+ */
1068
+ H.Axis.prototype.getDescription = function () {
1069
+ return (
1070
+ this.userOptions && this.userOptions.description ||
1071
+ this.axisTitle && this.axisTitle.textStr ||
1072
+ this.options.id ||
1073
+ this.categories && 'categories' ||
1074
+ this.isDatetimeAxis && 'Time' ||
1075
+ 'values'
1076
+ );
1077
+ };
1078
+
1079
+
1080
+ // Whenever adding or removing series, keep track of types present in chart
1081
+ addEvent(H.Series, 'afterInit', function () {
1082
+ var chart = this.chart;
1083
+
1084
+ if (chart.options.accessibility.enabled) {
1085
+ chart.types = chart.types || [];
1086
+
1087
+ // Add type to list if does not exist
1088
+ if (chart.types.indexOf(this.type) < 0) {
1089
+ chart.types.push(this.type);
1090
+ }
1091
+ }
1092
+ });
1093
+ addEvent(H.Series, 'remove', function () {
1094
+ var chart = this.chart,
1095
+ removedSeries = this,
1096
+ hasType = false;
1097
+
1098
+ // Check if any of the other series have the same type as this one.
1099
+ // Otherwise remove it from the list.
1100
+ chart.series.forEach(function (s) {
1101
+ if (
1102
+ s !== removedSeries &&
1103
+ chart.types.indexOf(removedSeries.type) < 0
1104
+ ) {
1105
+ hasType = true;
1106
+ }
1107
+ });
1108
+ if (!hasType) {
1109
+ erase(chart.types, removedSeries.type);
1110
+ }
1111
+ });
1112
+
1113
+
1114
+ /**
1115
+ * Return simplified description of chart type. Some types will not be familiar
1116
+ * to most screen reader users, but in those cases we try to add a description
1117
+ * of the type.
1118
+ *
1119
+ * @private
1120
+ * @function Highcharts.Chart#getTypeDescription
1121
+ *
1122
+ * @return {string}
1123
+ */
1124
+ H.Chart.prototype.getTypeDescription = function () {
1125
+ var firstType = this.types && this.types[0],
1126
+ firstSeries = this.series && this.series[0] || {},
1127
+ mapTitle = firstSeries.mapTitle,
1128
+ typeDesc = this.langFormat(
1129
+ 'accessibility.seriesTypeDescriptions.' + firstType,
1130
+ { chart: this }
1131
+ ),
1132
+ formatContext = {
1133
+ numSeries: this.series.length,
1134
+ numPoints: firstSeries.points && firstSeries.points.length,
1135
+ chart: this,
1136
+ mapTitle: mapTitle
1137
+ },
1138
+ multi = this.series && this.series.length === 1 ? 'Single' : 'Multiple';
1139
+
1140
+ if (!firstType) {
1141
+ return this.langFormat(
1142
+ 'accessibility.chartTypes.emptyChart', formatContext
1143
+ );
1144
+ }
1145
+
1146
+ if (firstType === 'map') {
1147
+ return mapTitle ?
1148
+ this.langFormat(
1149
+ 'accessibility.chartTypes.mapTypeDescription',
1150
+ formatContext
1151
+ ) :
1152
+ this.langFormat(
1153
+ 'accessibility.chartTypes.unknownMap',
1154
+ formatContext
1155
+ );
1156
+ }
1157
+
1158
+ if (this.types.length > 1) {
1159
+ return this.langFormat(
1160
+ 'accessibility.chartTypes.combinationChart', formatContext
1161
+ );
1162
+ }
1163
+
1164
+ return (
1165
+ this.langFormat(
1166
+ 'accessibility.chartTypes.' + firstType + multi,
1167
+ formatContext
1168
+ ) ||
1169
+ this.langFormat(
1170
+ 'accessibility.chartTypes.default' + multi,
1171
+ formatContext
1172
+ )
1173
+ ) +
1174
+ (typeDesc ? ' ' + typeDesc : '');
1175
+ };
1176
+
1177
+
1178
+ /**
1179
+ * Return object with text description of each of the chart's axes.
1180
+ *
1181
+ * @private
1182
+ * @function Highcharts.Chart#getAxesDescription
1183
+ *
1184
+ * @return {*}
1185
+ */
1186
+ H.Chart.prototype.getAxesDescription = function () {
1187
+ var numXAxes = this.xAxis.length,
1188
+ numYAxes = this.yAxis.length,
1189
+ desc = {};
1190
+
1191
+ if (numXAxes) {
1192
+ desc.xAxis = this.langFormat(
1193
+ 'accessibility.axis.xAxisDescription' + (
1194
+ numXAxes > 1 ? 'Plural' : 'Singular'
1195
+ ),
1196
+ {
1197
+ chart: this,
1198
+ names: this.xAxis.map(function (axis) {
1199
+ return axis.getDescription();
1200
+ }),
1201
+ numAxes: numXAxes
1202
+ }
1203
+ );
1204
+ }
1205
+
1206
+ if (numYAxes) {
1207
+ desc.yAxis = this.langFormat(
1208
+ 'accessibility.axis.yAxisDescription' + (
1209
+ numYAxes > 1 ? 'Plural' : 'Singular'
1210
+ ),
1211
+ {
1212
+ chart: this,
1213
+ names: this.yAxis.map(function (axis) {
1214
+ return axis.getDescription();
1215
+ }),
1216
+ numAxes: numYAxes
1217
+ }
1218
+ );
1219
+ }
1220
+
1221
+ return desc;
1222
+ };
1223
+
1224
+
1225
+ /**
1226
+ * Set a11y attribs on exporting menu.
1227
+ *
1228
+ * @private
1229
+ * @function Highcharts.Chart#addAccessibleContextMenuAttribs
1230
+ */
1231
+ H.Chart.prototype.addAccessibleContextMenuAttribs = function () {
1232
+ var exportList = this.exportDivElements;
1233
+
1234
+ if (exportList) {
1235
+ // Set tabindex on the menu items to allow focusing by script
1236
+ // Set role to give screen readers a chance to pick up the contents
1237
+ exportList.forEach(function (item) {
1238
+ if (item.tagName === 'DIV' &&
1239
+ !(item.children && item.children.length)) {
1240
+ item.setAttribute('role', 'menuitem');
1241
+ item.setAttribute('tabindex', -1);
1242
+ }
1243
+ });
1244
+ // Set accessibility properties on parent div
1245
+ exportList[0].parentNode.setAttribute('role', 'menu');
1246
+ exportList[0].parentNode.setAttribute(
1247
+ 'aria-label',
1248
+ this.langFormat(
1249
+ 'accessibility.exporting.chartMenuLabel', { chart: this }
1250
+ )
1251
+ );
1252
+ }
1253
+ };
1254
+
1255
+
1256
+ /**
1257
+ * Add screen reader region to chart. tableId is the HTML id of the table to
1258
+ * focus when clicking the table anchor in the screen reader region.
1259
+ *
1260
+ * @private
1261
+ * @function Highcharts.Chart#addScreenReaderRegion
1262
+ *
1263
+ * @param {string} id
1264
+ *
1265
+ * @param {string} tableId
1266
+ */
1267
+ H.Chart.prototype.addScreenReaderRegion = function (id, tableId) {
1268
+ var chart = this,
1269
+ hiddenSection = chart.screenReaderRegion = doc.createElement('div'),
1270
+ tableShortcut = doc.createElement('h4'),
1271
+ tableShortcutAnchor = doc.createElement('a'),
1272
+ chartHeading = chart.screenReaderHeading = doc.createElement('h4');
1273
+
1274
+ hiddenSection.setAttribute('id', id);
1275
+ hiddenSection.setAttribute('role', 'region');
1276
+ hiddenSection.setAttribute(
1277
+ 'aria-label',
1278
+ chart.langFormat(
1279
+ 'accessibility.screenReaderRegionLabel', { chart: this }
1280
+ )
1281
+ );
1282
+
1283
+ hiddenSection.innerHTML = chart.options.accessibility
1284
+ .screenReaderSectionFormatter(chart);
1285
+
1286
+ // Add shortcut to data table if export-data is loaded
1287
+ if (chart.getCSV) {
1288
+ tableShortcutAnchor.innerHTML = chart.langFormat(
1289
+ 'accessibility.viewAsDataTable', { chart: chart }
1290
+ );
1291
+ tableShortcutAnchor.href = '#' + tableId;
1292
+ // Make this unreachable by user tabbing
1293
+ tableShortcutAnchor.setAttribute('tabindex', '-1');
1294
+ tableShortcutAnchor.onclick =
1295
+ chart.options.accessibility.onTableAnchorClick || function () {
1296
+ chart.viewData();
1297
+ doc.getElementById(tableId).focus();
1298
+ };
1299
+ tableShortcut.appendChild(tableShortcutAnchor);
1300
+ hiddenSection.appendChild(tableShortcut);
1301
+ }
1302
+
1303
+ // Note: JAWS seems to refuse to read aria-label on the container, so add an
1304
+ // h4 element as title for the chart.
1305
+ chartHeading.innerHTML = chart.langFormat(
1306
+ 'accessibility.chartHeading', { chart: chart }
1307
+ );
1308
+ chart.renderTo.insertBefore(chartHeading, chart.renderTo.firstChild);
1309
+ chart.renderTo.insertBefore(hiddenSection, chart.renderTo.firstChild);
1310
+
1311
+ // Hide the section and the chart heading
1312
+ merge(true, chartHeading.style, hiddenStyle);
1313
+ merge(true, hiddenSection.style, hiddenStyle);
1314
+ };
1315
+
1316
+
1317
+ // Add ARIA to legend
1318
+ addEvent(H.Legend, 'afterRender', function () {
1319
+ var group = this.group,
1320
+ items = this.allItems,
1321
+ chart = this.chart;
1322
+ if (group && items && items.length) {
1323
+ group.attr({
1324
+ role: 'region',
1325
+ 'aria-label': chart.langFormat('accessibility.legendLabel')
1326
+ });
1327
+
1328
+ if (this.box) {
1329
+ this.box.attr('aria-hidden', 'true');
1330
+ }
1331
+
1332
+ items.forEach(function (item) {
1333
+ var itemGroup = item.legendGroup,
1334
+ text = item.legendItem,
1335
+ visible = item.visible,
1336
+ label = chart.langFormat(
1337
+ 'accessibility.legendItem',
1338
+ {
1339
+ chart: chart,
1340
+ itemName: stripTags(item.name)
1341
+ }
1342
+ );
1343
+ if (itemGroup && text) {
1344
+ itemGroup.attr({
1345
+ role: 'button',
1346
+ 'aria-pressed': visible ? 'false' : 'true'
1347
+ });
1348
+ if (label) {
1349
+ itemGroup.attr('aria-label', label);
1350
+ }
1351
+ text.attr('aria-hidden', 'false');
1352
+ }
1353
+ });
1354
+ }
1355
+ });
1356
+
1357
+
1358
+ // Handle show/hide series/points
1359
+ addEvent(H.Legend, 'afterColorizeItem', function (e) {
1360
+ var legendGroup = e.item && e.item.legendGroup,
1361
+ pressed = e.visible ? 'false' : 'true';
1362
+ if (legendGroup) {
1363
+ legendGroup.attr('aria-pressed', pressed);
1364
+ if (legendGroup.div) {
1365
+ legendGroup.div.setAttribute('aria-pressed', pressed);
1366
+ }
1367
+ }
1368
+ });
1369
+
1370
+
1371
+ // Make chart container accessible, and wrap table functionality.
1372
+ H.Chart.prototype.callbacks.push(function (chart) {
1373
+ var options = chart.options,
1374
+ a11yOptions = options.accessibility;
1375
+
1376
+ if (!a11yOptions.enabled) {
1377
+ return;
1378
+ }
1379
+
1380
+ var titleElement,
1381
+ descElement = chart.container.getElementsByTagName('desc')[0],
1382
+ textElements = chart.container.getElementsByTagName('text'),
1383
+ titleId = 'highcharts-title-' + chart.index,
1384
+ tableId = 'highcharts-data-table-' + chart.index,
1385
+ hiddenSectionId = 'highcharts-information-region-' + chart.index,
1386
+ chartTitle = options.title.text || chart.langFormat(
1387
+ 'accessibility.defaultChartTitle', { chart: chart }
1388
+ ),
1389
+ svgContainerTitle = stripTags(chart.langFormat(
1390
+ 'accessibility.svgContainerTitle', {
1391
+ chartTitle: chartTitle
1392
+ }
1393
+ ));
1394
+
1395
+ // Add SVG title tag if it is set
1396
+ if (svgContainerTitle.length) {
1397
+ titleElement = doc.createElementNS(
1398
+ 'http://www.w3.org/2000/svg',
1399
+ 'title'
1400
+ );
1401
+ titleElement.textContent = svgContainerTitle;
1402
+ titleElement.id = titleId;
1403
+ descElement.parentNode.insertBefore(titleElement, descElement);
1404
+ }
1405
+
1406
+ chart.renderTo.setAttribute('role', 'region');
1407
+ chart.renderTo.setAttribute(
1408
+ 'aria-label',
1409
+ chart.langFormat(
1410
+ 'accessibility.chartContainerLabel',
1411
+ {
1412
+ title: stripTags(chartTitle),
1413
+ chart: chart
1414
+ }
1415
+ )
1416
+ );
1417
+
1418
+ // Set screen reader properties on export menu
1419
+ if (
1420
+ chart.exportSVGElements &&
1421
+ chart.exportSVGElements[0] &&
1422
+ chart.exportSVGElements[0].element
1423
+ ) {
1424
+ // Set event handler on button
1425
+ var button = chart.exportSVGElements[0].element,
1426
+ oldExportCallback = button.onclick;
1427
+
1428
+ button.onclick = function () {
1429
+ oldExportCallback.apply(
1430
+ this,
1431
+ Array.prototype.slice.call(arguments)
1432
+ );
1433
+ chart.addAccessibleContextMenuAttribs();
1434
+ chart.highlightExportItem(0);
1435
+ };
1436
+
1437
+ // Set props on button
1438
+ button.setAttribute('role', 'button');
1439
+ button.setAttribute(
1440
+ 'aria-label',
1441
+ chart.langFormat(
1442
+ 'accessibility.exporting.menuButtonLabel', { chart: chart }
1443
+ )
1444
+ );
1445
+
1446
+ // Set props on group
1447
+ chart.exportingGroup.element.setAttribute('role', 'region');
1448
+ chart.exportingGroup.element.setAttribute(
1449
+ 'aria-label',
1450
+ chart.langFormat(
1451
+ 'accessibility.exporting.exportRegionLabel', { chart: chart }
1452
+ )
1453
+ );
1454
+ }
1455
+
1456
+ // Set screen reader properties on input boxes for range selector. We need
1457
+ // to do this regardless of whether or not these are visible, as they are
1458
+ // by default part of the page's tabindex unless we set them to -1.
1459
+ if (chart.rangeSelector) {
1460
+ ['minInput', 'maxInput'].forEach(function (key, i) {
1461
+ if (chart.rangeSelector[key]) {
1462
+ chart.rangeSelector[key].setAttribute('tabindex', '-1');
1463
+ chart.rangeSelector[key].setAttribute('role', 'textbox');
1464
+ chart.rangeSelector[key].setAttribute(
1465
+ 'aria-label',
1466
+ chart.langFormat(
1467
+ 'accessibility.rangeSelector' +
1468
+ (i ? 'MaxInput' : 'MinInput'), { chart: chart }
1469
+ )
1470
+ );
1471
+ }
1472
+ });
1473
+ }
1474
+
1475
+ // Hide text elements from screen readers
1476
+ [].forEach.call(textElements, function (el) {
1477
+ if (el.getAttribute('aria-hidden') !== 'false') {
1478
+ el.setAttribute('aria-hidden', 'true');
1479
+ }
1480
+ });
1481
+
1482
+ // Add top-secret screen reader region
1483
+ chart.addScreenReaderRegion(hiddenSectionId, tableId);
1484
+
1485
+ // Add ID and summary attr to table HTML
1486
+ addEvent(chart, 'afterGetTable', function (e) {
1487
+ e.html = e.html
1488
+ .replace(
1489
+ '<table ',
1490
+ '<table summary="' + chart.langFormat(
1491
+ 'accessibility.tableSummary', { chart: chart }
1492
+ ) + '"'
1493
+ );
1494
+ });
1495
+ });
1496
+
1497
+ }(Highcharts));
1498
+ (function (H) {
1499
+ /**
1500
+ * Accessibility module - Keyboard navigation
1501
+ *
1502
+ * (c) 2010-2017 Highsoft AS
1503
+ * Author: Oystein Moseng
1504
+ *
1505
+ * License: www.highcharts.com/license
1506
+ */
1507
+
1508
+
1509
+
1510
+ var win = H.win,
1511
+ doc = win.document,
1512
+ addEvent = H.addEvent,
1513
+ fireEvent = H.fireEvent,
1514
+ merge = H.merge,
1515
+ pick = H.pick;
1516
+
1517
+ /*
1518
+ * Add focus border functionality to SVGElements. Draws a new rect on top of
1519
+ * element around its bounding box.
1520
+ */
1521
+ H.extend(H.SVGElement.prototype, {
1522
+
1523
+ /**
1524
+ * @private
1525
+ * @function Highcharts.SVGElement#addFocusBorder
1526
+ *
1527
+ * @param {number} margin
1528
+ *
1529
+ * @param {Higcharts.CSSObject} style
1530
+ */
1531
+ addFocusBorder: function (margin, style) {
1532
+ // Allow updating by just adding new border
1533
+ if (this.focusBorder) {
1534
+ this.removeFocusBorder();
1535
+ }
1536
+ // Add the border rect
1537
+ var bb = this.getBBox(),
1538
+ pad = pick(margin, 3);
1539
+
1540
+ bb.x += this.translateX ? this.translateX : 0;
1541
+ bb.y += this.translateY ? this.translateY : 0;
1542
+
1543
+ this.focusBorder = this.renderer.rect(
1544
+ bb.x - pad,
1545
+ bb.y - pad,
1546
+ bb.width + 2 * pad,
1547
+ bb.height + 2 * pad,
1548
+ style && style.borderRadius
1549
+ )
1550
+ .addClass('highcharts-focus-border')
1551
+ .attr({
1552
+ zIndex: 99
1553
+ })
1554
+ .add(this.parentGroup);
1555
+
1556
+ if (!this.renderer.styledMode) {
1557
+ this.focusBorder.attr({
1558
+ stroke: style && style.stroke,
1559
+ 'stroke-width': style && style.strokeWidth
1560
+ });
1561
+ }
1562
+ },
1563
+
1564
+ /**
1565
+ * @private
1566
+ * @function Highcharts.SVGElement#removeFocusBorder
1567
+ */
1568
+ removeFocusBorder: function () {
1569
+ if (this.focusBorder) {
1570
+ this.focusBorder.destroy();
1571
+ delete this.focusBorder;
1572
+ }
1573
+ }
1574
+ });
1575
+
1576
+
1577
+ /*
1578
+ * Set for which series types it makes sense to move to the closest point with
1579
+ * up/down arrows, and which series types should just move to next series.
1580
+ */
1581
+ H.Series.prototype.keyboardMoveVertical = true;
1582
+ ['column', 'pie'].forEach(function (type) {
1583
+ if (H.seriesTypes[type]) {
1584
+ H.seriesTypes[type].prototype.keyboardMoveVertical = false;
1585
+ }
1586
+ });
1587
+
1588
+
1589
+ /**
1590
+ * Get the index of a point in a series. This is needed when using e.g. data
1591
+ * grouping.
1592
+ *
1593
+ * @private
1594
+ * @function getPointIndex
1595
+ *
1596
+ * @param {Highcharts.Point} point
1597
+ * The point to find index of.
1598
+ *
1599
+ * @return {number}
1600
+ * The index in the series.points array of the point.
1601
+ */
1602
+ function getPointIndex(point) {
1603
+ var index = point.index,
1604
+ points = point.series.points,
1605
+ i = points.length;
1606
+
1607
+ if (points[index] !== point) {
1608
+ while (i--) {
1609
+ if (points[i] === point) {
1610
+ return i;
1611
+ }
1612
+ }
1613
+ } else {
1614
+ return index;
1615
+ }
1616
+ }
1617
+
1618
+
1619
+ // Set default keyboard navigation options
1620
+ H.setOptions({
1621
+
1622
+ /**
1623
+ * @since 5.0.0
1624
+ * @optionparent accessibility
1625
+ */
1626
+ accessibility: {
1627
+
1628
+ /**
1629
+ * Options for keyboard navigation.
1630
+ *
1631
+ * @since 5.0.0
1632
+ */
1633
+ keyboardNavigation: {
1634
+
1635
+ /**
1636
+ * Enable keyboard navigation for the chart.
1637
+ *
1638
+ * @since 5.0.0
1639
+ */
1640
+ enabled: true,
1641
+
1642
+
1643
+ /**
1644
+ * Options for the focus border drawn around elements while
1645
+ * navigating through them.
1646
+ *
1647
+ * @sample highcharts/accessibility/custom-focus
1648
+ * Custom focus ring
1649
+ *
1650
+ * @since 6.0.3
1651
+ */
1652
+ focusBorder: {
1653
+
1654
+ /**
1655
+ * Enable/disable focus border for chart.
1656
+ *
1657
+ * @since 6.0.3
1658
+ */
1659
+ enabled: true,
1660
+
1661
+ /**
1662
+ * Hide the browser's default focus indicator.
1663
+ *
1664
+ * @since 6.0.4
1665
+ */
1666
+ hideBrowserFocusOutline: true,
1667
+
1668
+ /**
1669
+ * Style options for the focus border drawn around elements
1670
+ * while navigating through them. Note that some browsers in
1671
+ * addition draw their own borders for focused elements. These
1672
+ * automatic borders can not be styled by Highcharts.
1673
+ *
1674
+ * In styled mode, the border is given the
1675
+ * `.highcharts-focus-border` class.
1676
+ *
1677
+ * @type {Highcharts.CSSObject}
1678
+ * @default {"color": "#335cad", "lineWidth": 2, "borderRadius": 3}
1679
+ * @since 6.0.3
1680
+ */
1681
+ style: {
1682
+ /** @ignore-option */
1683
+ color: '#335cad',
1684
+ /** @ignore-option */
1685
+ lineWidth: 2,
1686
+ /** @ignore-option */
1687
+ borderRadius: 3
1688
+ },
1689
+
1690
+ /**
1691
+ * Focus border margin around the elements.
1692
+ *
1693
+ * @since 6.0.3
1694
+ */
1695
+ margin: 2
1696
+
1697
+ },
1698
+
1699
+ /**
1700
+ * Set the keyboard navigation mode for the chart. Can be "normal"
1701
+ * or "serialize". In normal mode, left/right arrow keys move
1702
+ * between points in a series, while up/down arrow keys move between
1703
+ * series. Up/down navigation acts intelligently to figure out which
1704
+ * series makes sense to move to from any given point.
1705
+ *
1706
+ * In "serialize" mode, points are instead navigated as a single
1707
+ * list. Left/right behaves as in "normal" mode. Up/down arrow keys
1708
+ * will behave like left/right. This is useful for unifying
1709
+ * navigation behavior with/without screen readers enabled.
1710
+ *
1711
+ * @type {string}
1712
+ * @default normal
1713
+ * @since 6.0.4
1714
+ * @validvalue ["normal", "serialize"]
1715
+ * @apioption accessibility.keyboardNavigation.mode
1716
+ */
1717
+
1718
+ /**
1719
+ * Skip null points when navigating through points with the
1720
+ * keyboard.
1721
+ *
1722
+ * @since 5.0.0
1723
+ */
1724
+ skipNullPoints: true
1725
+
1726
+ }
1727
+
1728
+ }
1729
+
1730
+ });
1731
+
1732
+ /**
1733
+ * Keyboard navigation for the legend. Requires the Accessibility module.
1734
+ *
1735
+ * @since 5.0.14
1736
+ * @apioption legend.keyboardNavigation
1737
+ */
1738
+
1739
+ /**
1740
+ * Enable/disable keyboard navigation for the legend. Requires the Accessibility
1741
+ * module.
1742
+ *
1743
+ * @see [accessibility.keyboardNavigation](
1744
+ * #accessibility.keyboardNavigation.enabled)
1745
+ *
1746
+ * @type {boolean}
1747
+ * @default true
1748
+ * @since 5.0.13
1749
+ * @apioption legend.keyboardNavigation.enabled
1750
+ */
1751
+
1752
+
1753
+ /**
1754
+ * Abstraction layer for keyboard navigation. Keep a map of keyCodes to handler
1755
+ * functions, and a next/prev move handler for tab order. The module's keyCode
1756
+ * handlers determine when to move to another module. Validate holds a function
1757
+ * to determine if there are prerequisites for this module to run that are not
1758
+ * met. Init holds a function to run once before any keyCodes are interpreted.
1759
+ * Terminate holds a function to run once before moving to next/prev module.
1760
+ *
1761
+ * @private
1762
+ * @class
1763
+ * @name KeyboardNavigationModule
1764
+ *
1765
+ * @param {Highcharts.Chart} chart
1766
+ * The chart object keeps track of a list of KeyboardNavigationModules.
1767
+ *
1768
+ * @param {*} options
1769
+ */
1770
+ function KeyboardNavigationModule(chart, options) {
1771
+ this.chart = chart;
1772
+ this.id = options.id;
1773
+ this.keyCodeMap = options.keyCodeMap;
1774
+ this.validate = options.validate;
1775
+ this.init = options.init;
1776
+ this.terminate = options.terminate;
1777
+ }
1778
+ KeyboardNavigationModule.prototype = {
1779
+
1780
+ /**
1781
+ * Find handler function(s) for key code in the keyCodeMap and run it.
1782
+ *
1783
+ * @private
1784
+ * @function KeyboardNavigationModule#run
1785
+ *
1786
+ * @param {global.Event} e
1787
+ *
1788
+ * @return {boolean}
1789
+ */
1790
+ run: function (e) {
1791
+ var navModule = this,
1792
+ keyCode = e.which || e.keyCode,
1793
+ found = false,
1794
+ handled = false;
1795
+
1796
+ this.keyCodeMap.forEach(function (codeSet) {
1797
+ if (codeSet[0].indexOf(keyCode) > -1) {
1798
+ found = true;
1799
+ handled = codeSet[1].call(navModule, keyCode, e) !== false;
1800
+ }
1801
+ });
1802
+ // Default tab handler, move to next/prev module
1803
+ if (!found && keyCode === 9) {
1804
+ handled = this.move(e.shiftKey ? -1 : 1);
1805
+ }
1806
+ return handled;
1807
+ },
1808
+
1809
+ /**
1810
+ * Move to next/prev valid module, or undefined if none, and init it.
1811
+ * Returns true on success and false if there is no valid module to move to.
1812
+ *
1813
+ * @private
1814
+ * @function KeyboardNavigationModule#move
1815
+ *
1816
+ * @param {number} direction
1817
+ *
1818
+ * @return {boolean}
1819
+ */
1820
+ move: function (direction) {
1821
+ var chart = this.chart;
1822
+
1823
+ if (this.terminate) {
1824
+ this.terminate(direction);
1825
+ }
1826
+ chart.keyboardNavigationModuleIndex += direction;
1827
+ var newModule = chart.keyboardNavigationModules[
1828
+ chart.keyboardNavigationModuleIndex
1829
+ ];
1830
+
1831
+ // Remove existing focus border if any
1832
+ if (chart.focusElement) {
1833
+ chart.focusElement.removeFocusBorder();
1834
+ }
1835
+
1836
+ // Verify new module
1837
+ if (newModule) {
1838
+ if (newModule.validate && !newModule.validate()) {
1839
+ return this.move(direction); // Invalid module, recurse
1840
+ }
1841
+ if (newModule.init) {
1842
+ newModule.init(direction); // Valid module, init it
1843
+ return true;
1844
+ }
1845
+ }
1846
+ // No module
1847
+ chart.keyboardNavigationModuleIndex = 0; // Reset counter
1848
+
1849
+ // Set focus to chart or exit anchor depending on direction
1850
+ if (direction > 0) {
1851
+ this.chart.exiting = true;
1852
+ this.chart.tabExitAnchor.focus();
1853
+ } else {
1854
+ this.chart.renderTo.focus();
1855
+ }
1856
+
1857
+ return false;
1858
+ }
1859
+ };
1860
+
1861
+
1862
+ /**
1863
+ * Utility function to attempt to fake a click event on an element.
1864
+ *
1865
+ * @private
1866
+ * @function fakeClickEvent
1867
+ *
1868
+ * @param {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement}
1869
+ */
1870
+ function fakeClickEvent(element) {
1871
+ var fakeEvent;
1872
+
1873
+ if (element && element.onclick && doc.createEvent) {
1874
+ fakeEvent = doc.createEvent('Events');
1875
+ fakeEvent.initEvent('click', true, false);
1876
+ element.onclick(fakeEvent);
1877
+ }
1878
+ }
1879
+
1880
+
1881
+ /**
1882
+ * Determine if a series should be skipped
1883
+ *
1884
+ * @private
1885
+ * @function isSkipSeries
1886
+ *
1887
+ * @param {Highcharts.Series} series
1888
+ *
1889
+ * @return {boolean}
1890
+ */
1891
+ function isSkipSeries(series) {
1892
+ var a11yOptions = series.chart.options.accessibility;
1893
+
1894
+ return series.options.skipKeyboardNavigation ||
1895
+ series.options.enableMouseTracking === false || // #8440
1896
+ !series.visible ||
1897
+ // Skip all points in a series where pointDescriptionThreshold is
1898
+ // reached
1899
+ (a11yOptions.pointDescriptionThreshold &&
1900
+ a11yOptions.pointDescriptionThreshold <= series.points.length);
1901
+ }
1902
+
1903
+
1904
+ /**
1905
+ * Determine if a point should be skipped
1906
+ *
1907
+ * @private
1908
+ * @function isSkipPoint
1909
+ *
1910
+ * @param {Highcharts.Point} point
1911
+ *
1912
+ * @return {boolean}
1913
+ */
1914
+ function isSkipPoint(point) {
1915
+ var a11yOptions = point.series.chart.options.accessibility;
1916
+
1917
+ return point.isNull && a11yOptions.keyboardNavigation.skipNullPoints ||
1918
+ point.visible === false ||
1919
+ isSkipSeries(point.series);
1920
+ }
1921
+
1922
+
1923
+ /**
1924
+ * Get the point in a series that is closest (in distance) to a reference point.
1925
+ * Optionally supply weight factors for x and y directions.
1926
+ *
1927
+ * @private
1928
+ * @function getClosestPoint
1929
+ *
1930
+ * @param {Highcharts.Point} point
1931
+ *
1932
+ * @param {Highcharts.Series} series
1933
+ *
1934
+ * @param {number} [xWeight]
1935
+ *
1936
+ * @param {number} [yWeight]
1937
+ *
1938
+ * @return {Highcharts.Point|undefined}
1939
+ */
1940
+ function getClosestPoint(point, series, xWeight, yWeight) {
1941
+ var minDistance = Infinity,
1942
+ dPoint,
1943
+ minIx,
1944
+ distance,
1945
+ i = series.points.length;
1946
+
1947
+ if (point.plotX === undefined || point.plotY === undefined) {
1948
+ return;
1949
+ }
1950
+ while (i--) {
1951
+ dPoint = series.points[i];
1952
+ if (dPoint.plotX === undefined || dPoint.plotY === undefined) {
1953
+ continue;
1954
+ }
1955
+ distance = (point.plotX - dPoint.plotX) *
1956
+ (point.plotX - dPoint.plotX) * (xWeight || 1) +
1957
+ (point.plotY - dPoint.plotY) *
1958
+ (point.plotY - dPoint.plotY) * (yWeight || 1);
1959
+ if (distance < minDistance) {
1960
+ minDistance = distance;
1961
+ minIx = i;
1962
+ }
1963
+ }
1964
+ return minIx !== undefined && series.points[minIx];
1965
+ }
1966
+
1967
+
1968
+ /**
1969
+ * Pan along axis in a direction (1 or -1), optionally with a defined
1970
+ * granularity (number of steps it takes to walk across current view)
1971
+ *
1972
+ * @private
1973
+ * @function Highcharts.Axis#panStep
1974
+ *
1975
+ * @param {number} direction
1976
+ *
1977
+ * @param {number} [granularity]
1978
+ */
1979
+ H.Axis.prototype.panStep = function (direction, granularity) {
1980
+ var gran = granularity || 3,
1981
+ extremes = this.getExtremes(),
1982
+ step = (extremes.max - extremes.min) / gran * direction,
1983
+ newMax = extremes.max + step,
1984
+ newMin = extremes.min + step,
1985
+ size = newMax - newMin;
1986
+
1987
+ if (direction < 0 && newMin < extremes.dataMin) {
1988
+ newMin = extremes.dataMin;
1989
+ newMax = newMin + size;
1990
+ } else if (direction > 0 && newMax > extremes.dataMax) {
1991
+ newMax = extremes.dataMax;
1992
+ newMin = newMax - size;
1993
+ }
1994
+ this.setExtremes(newMin, newMax);
1995
+ };
1996
+
1997
+
1998
+ /**
1999
+ * Set chart's focus to an SVGElement. Calls focus() on it, and draws the focus
2000
+ * border.
2001
+ *
2002
+ * @private
2003
+ * @function Highcharts.Chart#setFocusToElement
2004
+ *
2005
+ * @param {Highcharts.SVGElement} svgElement
2006
+ * Element to draw the border around.
2007
+ *
2008
+ * @param {Highcharts.SVGElement} [focusElement]
2009
+ * If supplied, it draws the border around svgElement and sets the focus
2010
+ * to focusElement.
2011
+ */
2012
+ H.Chart.prototype.setFocusToElement = function (svgElement, focusElement) {
2013
+ var focusBorderOptions = this.options.accessibility
2014
+ .keyboardNavigation.focusBorder,
2015
+ browserFocusElement = focusElement || svgElement;
2016
+
2017
+ // Set browser focus if possible
2018
+ if (
2019
+ browserFocusElement.element &&
2020
+ browserFocusElement.element.focus
2021
+ ) {
2022
+ browserFocusElement.element.focus();
2023
+ // Hide default focus ring
2024
+ if (focusBorderOptions.hideBrowserFocusOutline) {
2025
+ browserFocusElement.css({ outline: 'none' });
2026
+ }
2027
+ }
2028
+ if (focusBorderOptions.enabled) {
2029
+ // Remove old focus border
2030
+ if (this.focusElement) {
2031
+ this.focusElement.removeFocusBorder();
2032
+ }
2033
+ // Draw focus border (since some browsers don't do it automatically)
2034
+ svgElement.addFocusBorder(focusBorderOptions.margin, {
2035
+ stroke: focusBorderOptions.style.color,
2036
+ strokeWidth: focusBorderOptions.style.lineWidth,
2037
+ borderRadius: focusBorderOptions.style.borderRadius
2038
+ });
2039
+ this.focusElement = svgElement;
2040
+ }
2041
+ };
2042
+
2043
+
2044
+ /**
2045
+ * Highlights a point (show tooltip and display hover state).
2046
+ *
2047
+ * @private
2048
+ * @function Highcharts.Point#highlight
2049
+ *
2050
+ * @return {Highcharts.Point}
2051
+ * This highlighted point.
2052
+ */
2053
+ H.Point.prototype.highlight = function () {
2054
+ var chart = this.series.chart;
2055
+
2056
+ if (!this.isNull) {
2057
+ this.onMouseOver(); // Show the hover marker and tooltip
2058
+ } else {
2059
+ if (chart.tooltip) {
2060
+ chart.tooltip.hide(0);
2061
+ }
2062
+ // Don't call blur on the element, as it messes up the chart div's focus
2063
+ }
2064
+
2065
+ // We focus only after calling onMouseOver because the state change can
2066
+ // change z-index and mess up the element.
2067
+ if (this.graphic) {
2068
+ chart.setFocusToElement(this.graphic);
2069
+ }
2070
+
2071
+ chart.highlightedPoint = this;
2072
+ return this;
2073
+ };
2074
+
2075
+
2076
+ /**
2077
+ * Function to highlight next/previous point in chart.
2078
+ *
2079
+ * @private
2080
+ * @function Highcharts.Chart#highlightAdjacentPoint
2081
+ *
2082
+ * @param {boolean} next
2083
+ * Flag for the direction.
2084
+ *
2085
+ * @return {Highcharts.Point|false}
2086
+ * Returns highlighted point on success, false on failure (no adjacent
2087
+ * point to highlight in chosen direction).
2088
+ */
2089
+ H.Chart.prototype.highlightAdjacentPoint = function (next) {
2090
+ var chart = this,
2091
+ series = chart.series,
2092
+ curPoint = chart.highlightedPoint,
2093
+ curPointIndex = curPoint && getPointIndex(curPoint) || 0,
2094
+ curPoints = curPoint && curPoint.series.points,
2095
+ lastSeries = chart.series && chart.series[chart.series.length - 1],
2096
+ lastPoint = lastSeries && lastSeries.points &&
2097
+ lastSeries.points[lastSeries.points.length - 1],
2098
+ newSeries,
2099
+ newPoint;
2100
+
2101
+ // If no points, return false
2102
+ if (!series[0] || !series[0].points) {
2103
+ return false;
2104
+ }
2105
+
2106
+ if (!curPoint) {
2107
+ // No point is highlighted yet. Try first/last point depending on move
2108
+ // direction
2109
+ newPoint = next ? series[0].points[0] : lastPoint;
2110
+ } else {
2111
+ // We have a highlighted point.
2112
+ // Grab next/prev point & series
2113
+ newSeries = series[curPoint.series.index + (next ? 1 : -1)];
2114
+ newPoint = curPoints[curPointIndex + (next ? 1 : -1)];
2115
+ if (!newPoint && newSeries) {
2116
+ // Done with this series, try next one
2117
+ newPoint = newSeries.points[next ? 0 : newSeries.points.length - 1];
2118
+ }
2119
+
2120
+ // If there is no adjacent point, we return false
2121
+ if (!newPoint) {
2122
+ return false;
2123
+ }
2124
+ }
2125
+
2126
+ // Recursively skip points
2127
+ if (isSkipPoint(newPoint)) {
2128
+ // If we skip this whole series, move to the end of the series before we
2129
+ // recurse, just to optimize
2130
+ newSeries = newPoint.series;
2131
+ if (isSkipSeries(newSeries)) {
2132
+ chart.highlightedPoint = next ?
2133
+ newSeries.points[newSeries.points.length - 1] :
2134
+ newSeries.points[0];
2135
+ } else {
2136
+ // Otherwise, just move one point
2137
+ chart.highlightedPoint = newPoint;
2138
+ }
2139
+ // Retry
2140
+ return chart.highlightAdjacentPoint(next);
2141
+ }
2142
+
2143
+ // There is an adjacent point, highlight it
2144
+ return newPoint.highlight();
2145
+ };
2146
+
2147
+
2148
+ /**
2149
+ * Highlight first valid point in a series. Returns the point if successfully
2150
+ * highlighted, otherwise false. If there is a highlighted point in the series,
2151
+ * use that as starting point.
2152
+ *
2153
+ * @private
2154
+ * @function Highcharts.Series#highlightFirstValidPoint
2155
+ *
2156
+ * @return {Highcharts.Point|false}
2157
+ */
2158
+ H.Series.prototype.highlightFirstValidPoint = function () {
2159
+ var curPoint = this.chart.highlightedPoint,
2160
+ start = (curPoint && curPoint.series) === this ?
2161
+ getPointIndex(curPoint) :
2162
+ 0,
2163
+ points = this.points;
2164
+
2165
+ if (points) {
2166
+ for (var i = start, len = points.length; i < len; ++i) {
2167
+ if (!isSkipPoint(points[i])) {
2168
+ return points[i].highlight();
2169
+ }
2170
+ }
2171
+ for (var j = start; j >= 0; --j) {
2172
+ if (!isSkipPoint(points[j])) {
2173
+ return points[j].highlight();
2174
+ }
2175
+ }
2176
+ }
2177
+ return false;
2178
+ };
2179
+
2180
+
2181
+ /**
2182
+ * Highlight next/previous series in chart. Returns false if no adjacent series
2183
+ * in the direction, otherwise returns new highlighted point.
2184
+ *
2185
+ * @private
2186
+ * @function Highcharts.Chart#highlightAdjacentSeries
2187
+ *
2188
+ * @param {boolean} down
2189
+ *
2190
+ * @return {Highcharts.Point|false}
2191
+ */
2192
+ H.Chart.prototype.highlightAdjacentSeries = function (down) {
2193
+ var chart = this,
2194
+ newSeries,
2195
+ newPoint,
2196
+ adjacentNewPoint,
2197
+ curPoint = chart.highlightedPoint,
2198
+ lastSeries = chart.series && chart.series[chart.series.length - 1],
2199
+ lastPoint = lastSeries && lastSeries.points &&
2200
+ lastSeries.points[lastSeries.points.length - 1];
2201
+
2202
+ // If no point is highlighted, highlight the first/last point
2203
+ if (!chart.highlightedPoint) {
2204
+ newSeries = down ? (chart.series && chart.series[0]) : lastSeries;
2205
+ newPoint = down ?
2206
+ (newSeries && newSeries.points && newSeries.points[0]) : lastPoint;
2207
+ return newPoint ? newPoint.highlight() : false;
2208
+ }
2209
+
2210
+ newSeries = chart.series[curPoint.series.index + (down ? -1 : 1)];
2211
+
2212
+ if (!newSeries) {
2213
+ return false;
2214
+ }
2215
+
2216
+ // We have a new series in this direction, find the right point
2217
+ // Weigh xDistance as counting much higher than Y distance
2218
+ newPoint = getClosestPoint(curPoint, newSeries, 4);
2219
+
2220
+ if (!newPoint) {
2221
+ return false;
2222
+ }
2223
+
2224
+ // New series and point exists, but we might want to skip it
2225
+ if (isSkipSeries(newSeries)) {
2226
+ // Skip the series
2227
+ newPoint.highlight();
2228
+ adjacentNewPoint = chart.highlightAdjacentSeries(down); // Try recurse
2229
+ if (!adjacentNewPoint) {
2230
+ // Recurse failed
2231
+ curPoint.highlight();
2232
+ return false;
2233
+ }
2234
+ // Recurse succeeded
2235
+ return adjacentNewPoint;
2236
+ }
2237
+
2238
+ // Highlight the new point or any first valid point back or forwards from it
2239
+ newPoint.highlight();
2240
+ return newPoint.series.highlightFirstValidPoint();
2241
+ };
2242
+
2243
+
2244
+ /**
2245
+ * Highlight the closest point vertically.
2246
+ *
2247
+ * @private
2248
+ * @function Highcharts.Chart#highlightAdjacentPointVertical
2249
+ *
2250
+ * @param {boolean} down
2251
+ *
2252
+ * @return {Highcharts.Point|false}
2253
+ */
2254
+ H.Chart.prototype.highlightAdjacentPointVertical = function (down) {
2255
+ var curPoint = this.highlightedPoint,
2256
+ minDistance = Infinity,
2257
+ bestPoint;
2258
+
2259
+ if (curPoint.plotX === undefined || curPoint.plotY === undefined) {
2260
+ return false;
2261
+ }
2262
+ this.series.forEach(function (series) {
2263
+ if (isSkipSeries(series)) {
2264
+ return;
2265
+ }
2266
+ series.points.forEach(function (point) {
2267
+ if (point.plotY === undefined || point.plotX === undefined ||
2268
+ point === curPoint) {
2269
+ return;
2270
+ }
2271
+ var yDistance = point.plotY - curPoint.plotY,
2272
+ width = Math.abs(point.plotX - curPoint.plotX),
2273
+ distance = Math.abs(yDistance) * Math.abs(yDistance) +
2274
+ width * width * 4; // Weigh horizontal distance highly
2275
+
2276
+ // Reverse distance number if axis is reversed
2277
+ if (series.yAxis.reversed) {
2278
+ yDistance *= -1;
2279
+ }
2280
+
2281
+ if (
2282
+ yDistance < 0 && down || yDistance > 0 && !down || // Wrong dir
2283
+ distance < 5 || // Points in same spot => infinite loop
2284
+ isSkipPoint(point)
2285
+ ) {
2286
+ return;
2287
+ }
2288
+
2289
+ if (distance < minDistance) {
2290
+ minDistance = distance;
2291
+ bestPoint = point;
2292
+ }
2293
+ });
2294
+ });
2295
+
2296
+ return bestPoint ? bestPoint.highlight() : false;
2297
+ };
2298
+
2299
+
2300
+ /**
2301
+ * Show the export menu and focus the first item (if exists).
2302
+ *
2303
+ * @private
2304
+ * @function Highcharts.Chart#showExportMenu
2305
+ */
2306
+ H.Chart.prototype.showExportMenu = function () {
2307
+ if (this.exportSVGElements && this.exportSVGElements[0]) {
2308
+ this.exportSVGElements[0].element.onclick();
2309
+ this.highlightExportItem(0);
2310
+ }
2311
+ };
2312
+
2313
+
2314
+ /**
2315
+ * Hide export menu.
2316
+ *
2317
+ * @private
2318
+ * @function Highcharts.Chart#hideExportMenu
2319
+ */
2320
+ H.Chart.prototype.hideExportMenu = function () {
2321
+ var chart = this,
2322
+ exportList = chart.exportDivElements;
2323
+
2324
+ if (exportList && chart.exportContextMenu) {
2325
+ // Reset hover states etc.
2326
+ exportList.forEach(function (el) {
2327
+ if (el.className === 'highcharts-menu-item' && el.onmouseout) {
2328
+ el.onmouseout();
2329
+ }
2330
+ });
2331
+ chart.highlightedExportItem = 0;
2332
+ // Hide the menu div
2333
+ chart.exportContextMenu.hideMenu();
2334
+ // Make sure the chart has focus and can capture keyboard events
2335
+ chart.container.focus();
2336
+ }
2337
+ };
2338
+
2339
+
2340
+ /**
2341
+ * Highlight export menu item by index.
2342
+ *
2343
+ * @private
2344
+ * @function Highcharts.Chart#highlightExportItem
2345
+ *
2346
+ * @param {number} ix
2347
+ *
2348
+ * @return {true|undefined}
2349
+ */
2350
+ H.Chart.prototype.highlightExportItem = function (ix) {
2351
+ var listItem = this.exportDivElements && this.exportDivElements[ix],
2352
+ curHighlighted =
2353
+ this.exportDivElements &&
2354
+ this.exportDivElements[this.highlightedExportItem],
2355
+ hasSVGFocusSupport;
2356
+
2357
+ if (
2358
+ listItem &&
2359
+ listItem.tagName === 'DIV' &&
2360
+ !(listItem.children && listItem.children.length)
2361
+ ) {
2362
+ // Test if we have focus support for SVG elements
2363
+ hasSVGFocusSupport = !!(
2364
+ this.renderTo.getElementsByTagName('g')[0] || {}
2365
+ ).focus;
2366
+
2367
+ // Only focus if we can set focus back to the elements after
2368
+ // destroying the menu (#7422)
2369
+ if (listItem.focus && hasSVGFocusSupport) {
2370
+ listItem.focus();
2371
+ }
2372
+ if (curHighlighted && curHighlighted.onmouseout) {
2373
+ curHighlighted.onmouseout();
2374
+ }
2375
+ if (listItem.onmouseover) {
2376
+ listItem.onmouseover();
2377
+ }
2378
+ this.highlightedExportItem = ix;
2379
+ return true;
2380
+ }
2381
+ };
2382
+
2383
+
2384
+ /**
2385
+ * Try to highlight the last valid export menu item.
2386
+ *
2387
+ * @private
2388
+ * @function Highcharts.Chart#highlightLastExportItem
2389
+ */
2390
+ H.Chart.prototype.highlightLastExportItem = function () {
2391
+ var chart = this,
2392
+ i;
2393
+
2394
+ if (chart.exportDivElements) {
2395
+ i = chart.exportDivElements.length;
2396
+ while (i--) {
2397
+ if (chart.highlightExportItem(i)) {
2398
+ break;
2399
+ }
2400
+ }
2401
+ }
2402
+ };
2403
+
2404
+
2405
+ /**
2406
+ * Highlight range selector button by index.
2407
+ *
2408
+ * @private
2409
+ * @function Highcharts.Chart#highlightRangeSelectorButton
2410
+ *
2411
+ * @param {number} ix
2412
+ *
2413
+ * @return {boolean}
2414
+ */
2415
+ H.Chart.prototype.highlightRangeSelectorButton = function (ix) {
2416
+ var buttons = this.rangeSelector.buttons;
2417
+
2418
+ // Deselect old
2419
+ if (buttons[this.highlightedRangeSelectorItemIx]) {
2420
+ buttons[this.highlightedRangeSelectorItemIx].setState(
2421
+ this.oldRangeSelectorItemState || 0
2422
+ );
2423
+ }
2424
+ // Select new
2425
+ this.highlightedRangeSelectorItemIx = ix;
2426
+ if (buttons[ix]) {
2427
+ this.setFocusToElement(buttons[ix].box, buttons[ix]);
2428
+ this.oldRangeSelectorItemState = buttons[ix].state;
2429
+ buttons[ix].setState(2);
2430
+ return true;
2431
+ }
2432
+ return false;
2433
+ };
2434
+
2435
+
2436
+ /**
2437
+ * Highlight legend item by index.
2438
+ *
2439
+ * @private
2440
+ * @function Highcharts.Chart#highlightLegendItem
2441
+ *
2442
+ * @param {number} ix
2443
+ *
2444
+ * @return {boolean}
2445
+ */
2446
+ H.Chart.prototype.highlightLegendItem = function (ix) {
2447
+ var items = this.legend.allItems,
2448
+ oldIx = this.highlightedLegendItemIx;
2449
+
2450
+ if (items[ix]) {
2451
+ if (items[oldIx]) {
2452
+ fireEvent(
2453
+ items[oldIx].legendGroup.element,
2454
+ 'mouseout'
2455
+ );
2456
+ }
2457
+ // Scroll if we have to
2458
+ if (items[ix].pageIx !== undefined &&
2459
+ items[ix].pageIx + 1 !== this.legend.currentPage) {
2460
+ this.legend.scroll(1 + items[ix].pageIx - this.legend.currentPage);
2461
+ }
2462
+ // Focus
2463
+ this.highlightedLegendItemIx = ix;
2464
+ this.setFocusToElement(items[ix].legendItem, items[ix].legendGroup);
2465
+ fireEvent(items[ix].legendGroup.element, 'mouseover');
2466
+ return true;
2467
+ }
2468
+ return false;
2469
+ };
2470
+
2471
+
2472
+ /**
2473
+ * Add keyboard navigation handling modules to chart.
2474
+ *
2475
+ * @private
2476
+ * @function Highcharts.Chart#addKeyboardNavigationModules
2477
+ */
2478
+ H.Chart.prototype.addKeyboardNavigationModules = function () {
2479
+ var chart = this;
2480
+
2481
+ /**
2482
+ * @private
2483
+ * @function navModuleFactory
2484
+ *
2485
+ * @param {string} id
2486
+ *
2487
+ * @param {Array<Array<number>,Function>} keyMap
2488
+ *
2489
+ * @param {Highcharts.Dictionary<Function>} options
2490
+ *
2491
+ * @return {KeyboardNavigationModule}
2492
+ */
2493
+ function navModuleFactory(id, keyMap, options) {
2494
+ return new KeyboardNavigationModule(chart, merge({
2495
+ keyCodeMap: keyMap
2496
+ }, { id: id }, options));
2497
+ }
2498
+
2499
+ /**
2500
+ * List of the different keyboard handling modes we use depending on where
2501
+ * we are in the chart. Each mode has a set of handling functions mapped to
2502
+ * key codes. Each mode determines when to move to the next/prev mode.
2503
+ *
2504
+ * @private
2505
+ * @name Highcharts.Chart#keyboardNavigationModules
2506
+ * @type {Array<KeyboardNavigationModule>}
2507
+ */
2508
+ chart.keyboardNavigationModules = [
2509
+
2510
+ // Entry point catching the first tab, allowing users to tab into points
2511
+ // more intuitively.
2512
+ navModuleFactory('entry', []),
2513
+
2514
+ // Points
2515
+ navModuleFactory('points', [
2516
+ // Left/Right
2517
+ [[37, 39], function (keyCode) {
2518
+ var right = keyCode === 39;
2519
+
2520
+ if (!chart.highlightAdjacentPoint(right)) {
2521
+ // Failed to highlight next, wrap to last/first
2522
+ return this.init(right ? 1 : -1);
2523
+ }
2524
+ return true;
2525
+ }],
2526
+ // Up/Down
2527
+ [[38, 40], function (keyCode) {
2528
+ var down = keyCode !== 38,
2529
+ navOptions = chart.options.accessibility.keyboardNavigation;
2530
+
2531
+ if (navOptions.mode && navOptions.mode === 'serialize') {
2532
+ // Act like left/right
2533
+ if (!chart.highlightAdjacentPoint(down)) {
2534
+ return this.init(down ? 1 : -1);
2535
+ }
2536
+ return true;
2537
+ }
2538
+ // Normal mode, move between series
2539
+ var highlightMethod = chart.highlightedPoint &&
2540
+ chart.highlightedPoint.series.keyboardMoveVertical ?
2541
+ 'highlightAdjacentPointVertical' :
2542
+ 'highlightAdjacentSeries';
2543
+
2544
+ chart[highlightMethod](down);
2545
+ return true;
2546
+ }],
2547
+ // Enter/Spacebar
2548
+ [[13, 32], function () {
2549
+ if (chart.highlightedPoint) {
2550
+ chart.highlightedPoint.firePointEvent('click');
2551
+ }
2552
+ }]
2553
+ ], {
2554
+ // Always start highlighting from scratch when entering this module
2555
+ init: function (dir) {
2556
+ var numSeries = chart.series.length,
2557
+ i = dir > 0 ? 0 : numSeries,
2558
+ res;
2559
+
2560
+ if (dir > 0) {
2561
+ delete chart.highlightedPoint;
2562
+ // Find first valid point to highlight
2563
+ while (i < numSeries) {
2564
+ res = chart.series[i].highlightFirstValidPoint();
2565
+ if (res) {
2566
+ return res;
2567
+ }
2568
+ ++i;
2569
+ }
2570
+ } else {
2571
+ // Find last valid point to highlight
2572
+ while (i--) {
2573
+ chart.highlightedPoint = chart.series[i].points[
2574
+ chart.series[i].points.length - 1
2575
+ ];
2576
+ // Highlight first valid point in the series will also
2577
+ // look backwards. It always starts from currently
2578
+ // highlighted point.
2579
+ res = chart.series[i].highlightFirstValidPoint();
2580
+ if (res) {
2581
+ return res;
2582
+ }
2583
+ }
2584
+ }
2585
+ },
2586
+ // If leaving points, don't show tooltip anymore
2587
+ terminate: function () {
2588
+ if (chart.tooltip) {
2589
+ chart.tooltip.hide(0);
2590
+ }
2591
+ delete chart.highlightedPoint;
2592
+ }
2593
+ }),
2594
+
2595
+ // Reset zoom
2596
+ navModuleFactory('resetZoom', [
2597
+ // Tab/Up/Down/Left/Right - just move
2598
+ [[9, 37, 38, 39, 40], function (keyCode, e) {
2599
+ return this.move((
2600
+ keyCode === 9 && e.shiftKey ||
2601
+ keyCode === 38 || keyCode === 37
2602
+ ) ? -1 : 1);
2603
+ }],
2604
+ // Space/Enter - select
2605
+ [[13, 32], function () {
2606
+ chart.zoomOut();
2607
+ }]
2608
+ ], {
2609
+ // Only run if we have a reset zoom button
2610
+ validate: function () {
2611
+ return chart.resetZoomButton && chart.resetZoomButton.box;
2612
+ },
2613
+ init: function () {
2614
+ chart.setFocusToElement(
2615
+ chart.resetZoomButton.box, chart.resetZoomButton
2616
+ );
2617
+ }
2618
+ }),
2619
+
2620
+ // Exporting
2621
+ navModuleFactory('exporting', [
2622
+ // Left/Up
2623
+ [[37, 38], function () {
2624
+ var i = chart.highlightedExportItem || 0,
2625
+ reachedEnd = true;
2626
+
2627
+ // Try to highlight prev item in list. Highlighting e.g.
2628
+ // separators will fail.
2629
+ while (i--) {
2630
+ if (chart.highlightExportItem(i)) {
2631
+ reachedEnd = false;
2632
+ break;
2633
+ }
2634
+ }
2635
+ if (reachedEnd) {
2636
+ chart.highlightLastExportItem();
2637
+ return true;
2638
+ }
2639
+ }],
2640
+ // Right/Down
2641
+ [[39, 40], function () {
2642
+ var highlightedExportItem = chart.highlightedExportItem || 0,
2643
+ reachedEnd = true;
2644
+
2645
+ // Try to highlight next item in list. Highlighting e.g.
2646
+ // separators will fail.
2647
+ for (
2648
+ var i = highlightedExportItem + 1;
2649
+ i < chart.exportDivElements.length;
2650
+ ++i
2651
+ ) {
2652
+ if (chart.highlightExportItem(i)) {
2653
+ reachedEnd = false;
2654
+ break;
2655
+ }
2656
+ }
2657
+ if (reachedEnd) {
2658
+ chart.highlightExportItem(0);
2659
+ return true;
2660
+ }
2661
+ }],
2662
+ // Enter/Spacebar
2663
+ [[13, 32], function () {
2664
+ fakeClickEvent(
2665
+ chart.exportDivElements[chart.highlightedExportItem]
2666
+ );
2667
+ }]
2668
+ ], {
2669
+ // Only run exporting navigation if exporting support exists and is
2670
+ // enabled on chart
2671
+ validate: function () {
2672
+ return (
2673
+ chart.exportChart &&
2674
+ !(
2675
+ chart.options.exporting &&
2676
+ chart.options.exporting.enabled === false
2677
+ )
2678
+ );
2679
+ },
2680
+ // Show export menu
2681
+ init: function (direction) {
2682
+ chart.highlightedPoint = null;
2683
+ chart.showExportMenu();
2684
+ // If coming back to export menu from other module, try to
2685
+ // highlight last item in menu
2686
+ if (direction < 0) {
2687
+ chart.highlightLastExportItem();
2688
+ }
2689
+ },
2690
+ // Hide the menu
2691
+ terminate: function () {
2692
+ chart.hideExportMenu();
2693
+ }
2694
+ }),
2695
+
2696
+ // Map zoom
2697
+ navModuleFactory('mapZoom', [
2698
+ // Up/down/left/right
2699
+ [[38, 40, 37, 39], function (keyCode) {
2700
+ chart[keyCode === 38 || keyCode === 40 ? 'yAxis' : 'xAxis'][0]
2701
+ .panStep(keyCode < 39 ? -1 : 1);
2702
+ }],
2703
+
2704
+ // Tabs
2705
+ [[9], function (keyCode, e) {
2706
+ var button;
2707
+
2708
+ // Deselect old
2709
+ chart.mapNavButtons[chart.focusedMapNavButtonIx].setState(0);
2710
+ if (
2711
+ e.shiftKey && !chart.focusedMapNavButtonIx ||
2712
+ !e.shiftKey && chart.focusedMapNavButtonIx
2713
+ ) { // trying to go somewhere we can't?
2714
+ chart.mapZoom(); // Reset zoom
2715
+ // Nowhere to go, go to prev/next module
2716
+ return this.move(e.shiftKey ? -1 : 1);
2717
+ }
2718
+ chart.focusedMapNavButtonIx += e.shiftKey ? -1 : 1;
2719
+ button = chart.mapNavButtons[chart.focusedMapNavButtonIx];
2720
+ chart.setFocusToElement(button.box, button);
2721
+ button.setState(2);
2722
+ }],
2723
+
2724
+ // Enter/Spacebar
2725
+ [[13, 32], function () {
2726
+ fakeClickEvent(
2727
+ chart.mapNavButtons[chart.focusedMapNavButtonIx].element
2728
+ );
2729
+ }]
2730
+ ], {
2731
+ // Only run this module if we have map zoom on the chart
2732
+ validate: function () {
2733
+ return (
2734
+ chart.mapZoom &&
2735
+ chart.mapNavButtons &&
2736
+ chart.mapNavButtons.length === 2
2737
+ );
2738
+ },
2739
+
2740
+ // Make zoom buttons do their magic
2741
+ init: function (direction) {
2742
+ var zoomIn = chart.mapNavButtons[0],
2743
+ zoomOut = chart.mapNavButtons[1],
2744
+ initialButton = direction > 0 ? zoomIn : zoomOut;
2745
+
2746
+ chart.mapNavButtons.forEach(function (button, i) {
2747
+ button.element.setAttribute('tabindex', -1);
2748
+ button.element.setAttribute('role', 'button');
2749
+ button.element.setAttribute(
2750
+ 'aria-label',
2751
+ chart.langFormat(
2752
+ 'accessibility.mapZoom' + (i ? 'Out' : 'In'),
2753
+ { chart: chart }
2754
+ )
2755
+ );
2756
+ });
2757
+
2758
+ chart.setFocusToElement(initialButton.box, initialButton);
2759
+ initialButton.setState(2);
2760
+ chart.focusedMapNavButtonIx = direction > 0 ? 0 : 1;
2761
+ }
2762
+ }),
2763
+
2764
+ // Highstock range selector (minus input boxes)
2765
+ navModuleFactory('rangeSelector', [
2766
+ // Left/Right/Up/Down
2767
+ [[37, 39, 38, 40], function (keyCode) {
2768
+ var direction = (keyCode === 37 || keyCode === 38) ? -1 : 1;
2769
+
2770
+ // Try to highlight next/prev button
2771
+ if (
2772
+ !chart.highlightRangeSelectorButton(
2773
+ chart.highlightedRangeSelectorItemIx + direction
2774
+ )
2775
+ ) {
2776
+ return this.move(direction);
2777
+ }
2778
+ }],
2779
+ // Enter/Spacebar
2780
+ [[13, 32], function () {
2781
+ // Don't allow click if button used to be disabled
2782
+ if (chart.oldRangeSelectorItemState !== 3) {
2783
+ fakeClickEvent(
2784
+ chart.rangeSelector.buttons[
2785
+ chart.highlightedRangeSelectorItemIx
2786
+ ].element
2787
+ );
2788
+ }
2789
+ }]
2790
+ ], {
2791
+ // Only run this module if we have range selector
2792
+ validate: function () {
2793
+ return (
2794
+ chart.rangeSelector &&
2795
+ chart.rangeSelector.buttons &&
2796
+ chart.rangeSelector.buttons.length
2797
+ );
2798
+ },
2799
+
2800
+ // Make elements focusable and accessible
2801
+ init: function (direction) {
2802
+ chart.rangeSelector.buttons.forEach(function (button) {
2803
+ button.element.setAttribute('tabindex', '-1');
2804
+ button.element.setAttribute('role', 'button');
2805
+ button.element.setAttribute(
2806
+ 'aria-label',
2807
+ chart.langFormat(
2808
+ 'accessibility.rangeSelectorButton',
2809
+ {
2810
+ chart: chart,
2811
+ buttonText: button.text && button.text.textStr
2812
+ }
2813
+ )
2814
+ );
2815
+ });
2816
+ // Focus first/last button
2817
+ chart.highlightRangeSelectorButton(
2818
+ direction > 0 ? 0 : chart.rangeSelector.buttons.length - 1
2819
+ );
2820
+ }
2821
+ }),
2822
+
2823
+ // Highstock range selector, input boxes
2824
+ navModuleFactory('rangeSelectorInput', [
2825
+ // Tab/Up/Down
2826
+ [[9, 38, 40], function (keyCode, e) {
2827
+ var direction =
2828
+ (keyCode === 9 && e.shiftKey || keyCode === 38) ? -1 : 1,
2829
+
2830
+ newIx = chart.highlightedInputRangeIx =
2831
+ chart.highlightedInputRangeIx + direction;
2832
+
2833
+ // Try to highlight next/prev item in list.
2834
+ if (newIx > 1 || newIx < 0) { // Out of range
2835
+ return this.move(direction);
2836
+ }
2837
+ chart.rangeSelector[newIx ? 'maxInput' : 'minInput'].focus();
2838
+ }]
2839
+ ], {
2840
+ // Only run if we have range selector with input boxes
2841
+ validate: function () {
2842
+ var inputVisible = (
2843
+ chart.rangeSelector &&
2844
+ chart.rangeSelector.inputGroup &&
2845
+ chart.rangeSelector.inputGroup.element
2846
+ .getAttribute('visibility') !== 'hidden'
2847
+ );
2848
+
2849
+ return (
2850
+ inputVisible &&
2851
+ chart.options.rangeSelector.inputEnabled !== false &&
2852
+ chart.rangeSelector.minInput &&
2853
+ chart.rangeSelector.maxInput
2854
+ );
2855
+ },
2856
+
2857
+ // Highlight first/last input box
2858
+ init: function (direction) {
2859
+ chart.highlightedInputRangeIx = direction > 0 ? 0 : 1;
2860
+ chart.rangeSelector[
2861
+ chart.highlightedInputRangeIx ? 'maxInput' : 'minInput'
2862
+ ].focus();
2863
+ }
2864
+ }),
2865
+
2866
+ // Legend navigation
2867
+ navModuleFactory('legend', [
2868
+ // Left/Right/Up/Down
2869
+ [[37, 39, 38, 40], function (keyCode) {
2870
+ var direction = (keyCode === 37 || keyCode === 38) ? -1 : 1;
2871
+
2872
+ // Try to highlight next/prev legend item
2873
+ if (!chart.highlightLegendItem(
2874
+ chart.highlightedLegendItemIx + direction
2875
+ ) && chart.legend.allItems.length > 1) {
2876
+ // Wrap around if more than 1 item
2877
+ this.init(direction);
2878
+ }
2879
+ }],
2880
+ // Enter/Spacebar
2881
+ [[13, 32], function () {
2882
+ var legendElement = chart.legend.allItems[
2883
+ chart.highlightedLegendItemIx
2884
+ ].legendItem.element;
2885
+
2886
+ fakeClickEvent(
2887
+ !chart.legend.options.useHTML ? // #8561
2888
+ legendElement.parentNode : legendElement
2889
+ );
2890
+ }]
2891
+ ], {
2892
+ // Only run this module if we have at least one legend - wait for
2893
+ // it - item. Don't run if the legend is populated by a colorAxis.
2894
+ // Don't run if legend navigation is disabled.
2895
+ validate: function () {
2896
+ return chart.legend && chart.legend.allItems &&
2897
+ chart.legend.display &&
2898
+ !(chart.colorAxis && chart.colorAxis.length) &&
2899
+ (chart.options.legend &&
2900
+ chart.options.legend.keyboardNavigation &&
2901
+ chart.options.legend.keyboardNavigation.enabled) !== false;
2902
+ },
2903
+
2904
+ // Make elements focusable
2905
+ init: function (direction) {
2906
+ chart.legend.allItems.forEach(function (item) {
2907
+ item.legendGroup.element.setAttribute('tabindex', '-1');
2908
+ });
2909
+ // Focus first/last item
2910
+ chart.highlightLegendItem(
2911
+ direction > 0 ? 0 : chart.legend.allItems.length - 1
2912
+ );
2913
+ }
2914
+ })
2915
+ ];
2916
+ };
2917
+
2918
+
2919
+ /**
2920
+ * Add exit anchor to the chart. We use this to move focus out of chart whenever
2921
+ * we want, by setting focus to this div and not preventing the default tab
2922
+ * action. We also use this when users come back into the chart by tabbing back,
2923
+ * in order to navigate from the end of the chart.
2924
+ *
2925
+ * @private
2926
+ * @function Highcharts.Chart#addExitAnchor
2927
+ *
2928
+ * @return {Function}
2929
+ * Returns the unbind function for the exit anchor's event handler.
2930
+ */
2931
+ H.Chart.prototype.addExitAnchor = function () {
2932
+ var chart = this;
2933
+
2934
+ chart.tabExitAnchor = doc.createElement('div');
2935
+ chart.tabExitAnchor.setAttribute('tabindex', '0');
2936
+
2937
+ // Hide exit anchor
2938
+ merge(true, chart.tabExitAnchor.style, {
2939
+ position: 'absolute',
2940
+ top: '-999em',
2941
+ width: '1px',
2942
+ height: '1px',
2943
+ overflow: 'hidden'
2944
+ });
2945
+
2946
+ chart.renderTo.appendChild(chart.tabExitAnchor);
2947
+ return addEvent(
2948
+ chart.tabExitAnchor,
2949
+ 'focus',
2950
+ function (ev) {
2951
+ var e = ev || win.event,
2952
+ curModule;
2953
+
2954
+ // If focusing and we are exiting, do nothing once.
2955
+ if (!chart.exiting) {
2956
+
2957
+ // Not exiting, means we are coming in backwards
2958
+ chart.renderTo.focus();
2959
+ e.preventDefault();
2960
+
2961
+ // Move to last valid keyboard nav module
2962
+ // Note the we don't run it, just set the index
2963
+ chart.keyboardNavigationModuleIndex =
2964
+ chart.keyboardNavigationModules.length - 1;
2965
+ curModule = chart.keyboardNavigationModules[
2966
+ chart.keyboardNavigationModuleIndex
2967
+ ];
2968
+
2969
+ // Validate the module
2970
+ if (curModule.validate && !curModule.validate()) {
2971
+ // Invalid.
2972
+ // Move inits next valid module in direction
2973
+ curModule.move(-1);
2974
+ } else {
2975
+ // We have a valid module, init it
2976
+ curModule.init(-1);
2977
+ }
2978
+
2979
+ } else {
2980
+ // Don't skip the next focus, we only skip once.
2981
+ chart.exiting = false;
2982
+ }
2983
+ }
2984
+ );
2985
+ };
2986
+
2987
+
2988
+ /**
2989
+ * Clear the chart and reset the navigation state.
2990
+ *
2991
+ * @private
2992
+ * @function Highcharts.Chart#resetKeyboardNavigation
2993
+ */
2994
+ H.Chart.prototype.resetKeyboardNavigation = function () {
2995
+ var chart = this,
2996
+ curMod = (
2997
+ chart.keyboardNavigationModules &&
2998
+ chart.keyboardNavigationModules[
2999
+ chart.keyboardNavigationModuleIndex || 0
3000
+ ]
3001
+ );
3002
+
3003
+ if (curMod && curMod.terminate) {
3004
+ curMod.terminate();
3005
+ }
3006
+ if (chart.focusElement) {
3007
+ chart.focusElement.removeFocusBorder();
3008
+ }
3009
+ chart.keyboardNavigationModuleIndex = 0;
3010
+ chart.keyboardReset = true;
3011
+ };
3012
+
3013
+
3014
+ // On destroy, we need to clean up the focus border and the state.
3015
+ H.addEvent(H.Series, 'destroy', function () {
3016
+ var chart = this.chart;
3017
+
3018
+ if (chart.highlightedPoint && chart.highlightedPoint.series === this) {
3019
+ delete chart.highlightedPoint;
3020
+ if (chart.focusElement) {
3021
+ chart.focusElement.removeFocusBorder();
3022
+ }
3023
+ }
3024
+ });
3025
+
3026
+
3027
+ // Add keyboard navigation events on chart load.
3028
+ H.Chart.prototype.callbacks.push(function (chart) {
3029
+ var a11yOptions = chart.options.accessibility;
3030
+
3031
+ if (a11yOptions.enabled && a11yOptions.keyboardNavigation.enabled) {
3032
+
3033
+ // Init nav modules. We start at the first module, and as the user
3034
+ // navigates through the chart the index will increase to use different
3035
+ // handler modules.
3036
+ chart.addKeyboardNavigationModules();
3037
+ chart.keyboardNavigationModuleIndex = 0;
3038
+
3039
+ // Make chart container reachable by tab
3040
+ if (
3041
+ chart.container.hasAttribute &&
3042
+ !chart.container.hasAttribute('tabIndex')
3043
+ ) {
3044
+ chart.container.setAttribute('tabindex', '0');
3045
+ }
3046
+
3047
+ // Add tab exit anchor
3048
+ if (!chart.tabExitAnchor) {
3049
+ chart.unbindExitAnchorFocus = chart.addExitAnchor();
3050
+ }
3051
+
3052
+ // Handle keyboard events by routing them to active keyboard nav module
3053
+ chart.unbindKeydownHandler = addEvent(chart.renderTo, 'keydown',
3054
+ function (ev) {
3055
+ var e = ev || win.event,
3056
+ curNavModule = chart.keyboardNavigationModules[
3057
+ chart.keyboardNavigationModuleIndex
3058
+ ];
3059
+
3060
+ chart.keyboardReset = false;
3061
+ // If there is a nav module for the current index, run it.
3062
+ // Otherwise, we are outside of the chart in some direction.
3063
+ if (curNavModule) {
3064
+ if (curNavModule.run(e)) {
3065
+ // Successfully handled this key event, stop default
3066
+ e.preventDefault();
3067
+ }
3068
+ }
3069
+ });
3070
+
3071
+ // Reset chart navigation state if we click outside the chart and it's
3072
+ // not already reset
3073
+ chart.unbindBlurHandler = addEvent(doc, 'mouseup', function () {
3074
+ if (
3075
+ !chart.keyboardReset &&
3076
+ !(chart.pointer && chart.pointer.chartPosition)
3077
+ ) {
3078
+ chart.resetKeyboardNavigation();
3079
+ }
3080
+ });
3081
+
3082
+ // Add cleanup handlers
3083
+ addEvent(chart, 'destroy', function () {
3084
+ chart.resetKeyboardNavigation();
3085
+ if (chart.unbindExitAnchorFocus && chart.tabExitAnchor) {
3086
+ chart.unbindExitAnchorFocus();
3087
+ }
3088
+ if (chart.unbindKeydownHandler && chart.renderTo) {
3089
+ chart.unbindKeydownHandler();
3090
+ }
3091
+ if (chart.unbindBlurHandler) {
3092
+ chart.unbindBlurHandler();
3093
+ }
3094
+ });
3095
+ }
3096
+ });
3097
+
3098
+ }(Highcharts));
3099
+ return (function () {
3100
+
3101
+
3102
+ }());
3103
+ }));