aw-highstock_rails 7.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.travis.yml +7 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +22 -0
- data/LICENSE.txt +21 -0
- data/README.md +53 -0
- data/Rakefile +10 -0
- data/aw-highstock_rails.gemspec +28 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/aw/highstock_rails.rb +9 -0
- data/lib/aw/highstock_rails/version.rb +5 -0
- data/vendor/assets/javascripts/highstock/css/annotations/popup.css +229 -0
- data/vendor/assets/javascripts/highstock/css/annotations/popup.scss +235 -0
- data/vendor/assets/javascripts/highstock/css/highcharts.css +890 -0
- data/vendor/assets/javascripts/highstock/css/highcharts.scss +788 -0
- data/vendor/assets/javascripts/highstock/css/stocktools/gui.css +268 -0
- data/vendor/assets/javascripts/highstock/css/stocktools/gui.scss +270 -0
- data/vendor/assets/javascripts/highstock/css/themes/dark-unica.css +951 -0
- data/vendor/assets/javascripts/highstock/css/themes/dark-unica.scss +122 -0
- data/vendor/assets/javascripts/highstock/css/themes/grid-light.css +904 -0
- data/vendor/assets/javascripts/highstock/css/themes/grid-light.scss +33 -0
- data/vendor/assets/javascripts/highstock/css/themes/sand-signika.css +920 -0
- data/vendor/assets/javascripts/highstock/css/themes/sand-signika.scss +74 -0
- data/vendor/assets/javascripts/highstock/es-modules/annotations/ControlPoint.js +130 -0
- data/vendor/assets/javascripts/highstock/es-modules/annotations/MockPoint.js +415 -0
- data/vendor/assets/javascripts/highstock/es-modules/annotations/annotations.src.js +1231 -0
- data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/ControllableCircle.js +92 -0
- data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/ControllableImage.js +101 -0
- data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/ControllableLabel.js +452 -0
- data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/ControllablePath.js +175 -0
- data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/ControllableRect.js +93 -0
- data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/controllableMixin.js +411 -0
- data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/markerMixin.js +214 -0
- data/vendor/assets/javascripts/highstock/es-modules/annotations/eventEmitterMixin.js +271 -0
- data/vendor/assets/javascripts/highstock/es-modules/annotations/navigationBindings.js +1283 -0
- data/vendor/assets/javascripts/highstock/es-modules/annotations/popup.js +1069 -0
- data/vendor/assets/javascripts/highstock/es-modules/annotations/types/CrookedLine.js +191 -0
- data/vendor/assets/javascripts/highstock/es-modules/annotations/types/ElliottWave.js +76 -0
- data/vendor/assets/javascripts/highstock/es-modules/annotations/types/Fibonacci.js +247 -0
- data/vendor/assets/javascripts/highstock/es-modules/annotations/types/InfinityLine.js +185 -0
- data/vendor/assets/javascripts/highstock/es-modules/annotations/types/Measure.js +928 -0
- data/vendor/assets/javascripts/highstock/es-modules/annotations/types/Pitchfork.js +203 -0
- data/vendor/assets/javascripts/highstock/es-modules/annotations/types/Tunnel.js +242 -0
- data/vendor/assets/javascripts/highstock/es-modules/annotations/types/VerticalLine.js +157 -0
- data/vendor/assets/javascripts/highstock/es-modules/error-messages.js +128 -0
- data/vendor/assets/javascripts/highstock/es-modules/error.js +1 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/acceleration-bands.src.js +199 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/accumulation-distribution.src.js +129 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/ao.src.js +206 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/apo.src.js +148 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/aroon-oscillator.src.js +128 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/aroon.src.js +173 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/atr.src.js +151 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/bollinger-bands.src.js +209 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/cci.src.js +131 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/chaikin.src.js +167 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/cmf.src.js +246 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/dema.src.js +191 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/dpo.src.js +138 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/ema.src.js +166 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/ichimoku-kinko-hyo.src.js +850 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/indicators.src.js +425 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/keltner-channels.src.js +193 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/macd.src.js +417 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/mfi.src.js +198 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/momentum.src.js +119 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/natr.src.js +74 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/pivot-points.src.js +360 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/ppo.src.js +152 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/price-channel.src.js +149 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/price-envelopes.src.js +251 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/psar.src.js +307 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/regressions.src.js +427 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/roc.src.js +149 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/rsi.src.js +163 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/stochastic.src.js +193 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/supertrend.src.js +544 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/tema.src.js +247 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/trix.src.js +96 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/volume-by-price.src.js +671 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/vwap.src.js +189 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/williams-r.src.js +128 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/wma.src.js +146 -0
- data/vendor/assets/javascripts/highstock/es-modules/indicators/zigzag.src.js +221 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/highcharts-3d.src.js +17 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/highcharts-more.src.js +22 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/highstock.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/acceleration-bands.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/accumulation-distribution.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/ao.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/apo.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/aroon-oscillator.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/aroon.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/atr.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/bollinger-bands.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/cci.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/chaikin.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/cmf.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/dema.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/dpo.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/ema.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/indicators-all.src.js +49 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/indicators.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/keltner-channels.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/macd.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/mfi.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/momentum.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/natr.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/pivot-points.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/ppo.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/price-channel.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/price-envelopes.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/psar.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/regressions.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/roc.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/rsi.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/stochastic.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/supertrend.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/tema.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/trix.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/volume-by-price.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/vwap.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/williams-r.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/wma.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/zigzag.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/accessibility.src.js +13 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/annotations-advanced.src.js +20 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/annotations.src.js +12 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/arrow-symbols.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/boost-canvas.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/boost.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/bullet.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/current-date-indicator.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/cylinder.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/data.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/datagrouping.src.js +12 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/debugger.src.js +13 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/dependency-wheel.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/drag-panes.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/draggable-points.src.js +9 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/drilldown.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/export-data.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/exporting.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/full-screen.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/funnel.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/grid-axis.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/heatmap.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/histogram-bellcurve.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/item-series.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/networkgraph.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/no-data-to-display.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/offline-exporting.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/oldie-polyfills.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/oldie.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/overlapping-datalabels.src.js +9 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/parallel-coordinates.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/pareto.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/pathfinder.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/pattern-fill.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/price-indicator.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/sankey.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/series-label.src.js +9 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/solid-gauge.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/sonification.src.js +12 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/static-scale.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/stock-tools.src.js +12 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/stock.src.js +19 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/streamgraph.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/sunburst.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/tilemap.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/timeline.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/treegrid.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/treemap.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/variable-pie.src.js +11 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/variwide.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/vector.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/venn.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/windbarb.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/wordcloud.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/modules/xrange.src.js +10 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/themes/avocado.js +9 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/themes/avocado.src.js +9 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/themes/dark-blue.src.js +9 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/themes/dark-green.src.js +9 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/themes/dark-unica.src.js +9 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/themes/gray.src.js +9 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/themes/grid-light.src.js +9 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/themes/grid.src.js +9 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/themes/sand-signika.src.js +9 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/themes/skies.src.js +9 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/themes/sunset.js +9 -0
- data/vendor/assets/javascripts/highstock/es-modules/masters/themes/sunset.src.js +9 -0
- data/vendor/assets/javascripts/highstock/es-modules/mixins/ajax.js +123 -0
- data/vendor/assets/javascripts/highstock/es-modules/mixins/centered-series.js +116 -0
- data/vendor/assets/javascripts/highstock/es-modules/mixins/derived-series.js +150 -0
- data/vendor/assets/javascripts/highstock/es-modules/mixins/download-url.js +103 -0
- data/vendor/assets/javascripts/highstock/es-modules/mixins/draw-point.js +51 -0
- data/vendor/assets/javascripts/highstock/es-modules/mixins/geometry-circles.js +300 -0
- data/vendor/assets/javascripts/highstock/es-modules/mixins/geometry.js +50 -0
- data/vendor/assets/javascripts/highstock/es-modules/mixins/indicator-required.js +49 -0
- data/vendor/assets/javascripts/highstock/es-modules/mixins/multipe-lines.js +223 -0
- data/vendor/assets/javascripts/highstock/es-modules/mixins/navigation.js +59 -0
- data/vendor/assets/javascripts/highstock/es-modules/mixins/nodes.js +76 -0
- data/vendor/assets/javascripts/highstock/es-modules/mixins/on-series.js +167 -0
- data/vendor/assets/javascripts/highstock/es-modules/mixins/polygon.js +293 -0
- data/vendor/assets/javascripts/highstock/es-modules/mixins/reduce-array.js +53 -0
- data/vendor/assets/javascripts/highstock/es-modules/mixins/tree-series.js +256 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/a11y-i18n.src.js +524 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/annotations-legacy.src.js +1951 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/bellcurve.src.js +173 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/boost-canvas.src.js +732 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/boost.src.js +3730 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/bullet.src.js +361 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/cylinder.src.js +389 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/data.src.js +2417 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/debugger.src.js +109 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/dependency-wheel.src.js +199 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/drag-panes.src.js +624 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/draggable-points.src.js +2625 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/drilldown.src.js +1300 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/export-data.src.js +983 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/exporting.src.js +2149 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/full-screen.src.js +40 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/funnel.src.js +552 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/histogram.src.js +229 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/item-series.src.js +150 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/keyboard-navigation.src.js +1606 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/networkgraph/QuadTree.js +175 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/networkgraph/layouts.js +506 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/networkgraph/networkgraph.src.js +740 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/no-data-to-display.src.js +260 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/offline-exporting.src.js +710 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/oldie-polyfills.src.js +121 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/oldie.src.js +1556 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/overlapping-datalabels.src.js +250 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/parallel-coordinates.src.js +492 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/pareto.src.js +152 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/pattern-fill.src.js +607 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/price-indicator.src.js +149 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/sankey.src.js +809 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/screen-reader.src.js +954 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/series-label.src.js +1042 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/solid-gauge.src.js +486 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/Earcon.js +184 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/Instrument.js +582 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/Timeline.js +702 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/chartSonify.js +1026 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/instrumentDefinitions.js +37 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/musicalFrequencies.js +113 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/pointSonify.js +385 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/sonification.js +107 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/utilities.js +178 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/static-scale.src.js +88 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/stock-tools-bindings.js +1950 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/stock-tools-gui.js +1458 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/streamgraph.src.js +132 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/sunburst.src.js +1041 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/tilemap.src.js +769 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/timeline.src.js +750 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/treemap.src.js +1803 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/variable-pie.src.js +459 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/variwide.src.js +350 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/vector.src.js +354 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/venn.src.js +1192 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/windbarb.src.js +380 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/wordcloud.src.js +1103 -0
- data/vendor/assets/javascripts/highstock/es-modules/modules/xrange.src.js +761 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Axis.js +669 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Chart.js +1753 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Column.js +437 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Math.js +206 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Pie.js +207 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-3d/SVGRenderer.js +1002 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Scatter.js +154 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Series.js +73 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-3d/VMLRenderer.js +62 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/ArrowSymbols.js +198 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/CurrentDateIndicator.js +100 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/GanttChart.js +140 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/GanttSeries.js +415 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/GridAxis.js +961 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/Pathfinder.js +1298 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/PathfinderAlgorithms.js +816 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/Tree.js +158 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/TreeGrid.js +1003 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-map/ColorAxis.js +1103 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-map/ColorSeriesMixin.js +138 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-map/GeoJSON.js +435 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-map/HeatmapSeries.js +474 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-map/Map.js +477 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapAxis.js +124 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapBubbleSeries.js +274 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapLineSeries.js +143 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapNavigation.js +357 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapPointSeries.js +187 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapPointer.js +132 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapSeries.js +1294 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-more/AreaRangeSeries.js +725 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-more/AreaSplineRangeSeries.js +98 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-more/BoxPlotSeries.js +617 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-more/BubbleLegend.js +1167 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-more/BubbleSeries.js +661 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-more/ColumnPyramidSeries.js +288 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-more/ColumnRangeSeries.js +278 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-more/ErrorBarSeries.js +172 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-more/GaugeSeries.js +618 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-more/PackedBubbleSeries.js +567 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-more/Pane.js +399 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-more/Polar.js +634 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-more/PolygonSeries.js +151 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-more/RadialAxis.js +685 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts-more/WaterfallSeries.js +765 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts.js +684 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/AreaSeries.js +578 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/AreaSplineSeries.js +122 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/Axis.js +6453 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/BarSeries.js +153 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/CandlestickSeries.js +358 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/Chart.js +2307 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/Color.js +301 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/ColumnSeries.js +1125 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/DataGrouping.js +1115 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/DataLabels.js +1431 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/DateTimeAxis.js +134 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/Dynamics.js +1301 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/FlagsSeries.js +739 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/Globals.js +75 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/Html.js +539 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/Interaction.js +1299 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/Legend.js +1411 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/LogarithmicAxis.js +168 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/MSPointer.js +176 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/Navigator.js +2486 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/OHLCSeries.js +412 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/Options.js +3732 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/OrdinalAxis.js +962 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/PieSeries.js +1328 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/PlotBandSeries.experimental.js +74 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/PlotLineOrBand.js +1061 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/Point.js +681 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/Pointer.js +1332 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/RangeSelector.js +2063 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/Responsive.js +295 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/ScatterSeries.js +278 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/ScrollablePlotArea.js +266 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/Scrollbar.js +1134 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/Series.js +5864 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/SplineSeries.js +267 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/Stacking.js +604 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/StockChart.js +951 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/SvgRenderer.js +5109 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/Tick.js +746 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/Time.js +881 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/Tooltip.js +1318 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/TouchPointer.js +404 -0
- data/vendor/assets/javascripts/highstock/es-modules/parts/Utilities.js +2751 -0
- data/vendor/assets/javascripts/highstock/es-modules/themes/avocado.js +37 -0
- data/vendor/assets/javascripts/highstock/es-modules/themes/dark-blue.js +259 -0
- data/vendor/assets/javascripts/highstock/es-modules/themes/dark-green.js +261 -0
- data/vendor/assets/javascripts/highstock/es-modules/themes/dark-unica.js +220 -0
- data/vendor/assets/javascripts/highstock/es-modules/themes/gray.js +267 -0
- data/vendor/assets/javascripts/highstock/es-modules/themes/grid-light.js +81 -0
- data/vendor/assets/javascripts/highstock/es-modules/themes/grid.js +110 -0
- data/vendor/assets/javascripts/highstock/es-modules/themes/sand-signika.js +111 -0
- data/vendor/assets/javascripts/highstock/es-modules/themes/skies.js +100 -0
- data/vendor/assets/javascripts/highstock/es-modules/themes/sunset.js +36 -0
- data/vendor/assets/javascripts/highstock/highcharts-3d.js +85 -0
- data/vendor/assets/javascripts/highstock/highcharts-3d.js.map +1 -0
- data/vendor/assets/javascripts/highstock/highcharts-more.js +101 -0
- data/vendor/assets/javascripts/highstock/highcharts-more.js.map +1 -0
- data/vendor/assets/javascripts/highstock/highstock.js +583 -0
- data/vendor/assets/javascripts/highstock/highstock.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/acceleration-bands.js +16 -0
- data/vendor/assets/javascripts/highstock/indicators/acceleration-bands.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/acceleration-bands.src.js +448 -0
- data/vendor/assets/javascripts/highstock/indicators/accumulation-distribution.js +12 -0
- data/vendor/assets/javascripts/highstock/indicators/accumulation-distribution.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/accumulation-distribution.src.js +156 -0
- data/vendor/assets/javascripts/highstock/indicators/ao.js +13 -0
- data/vendor/assets/javascripts/highstock/indicators/ao.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/ao.src.js +233 -0
- data/vendor/assets/javascripts/highstock/indicators/apo.js +13 -0
- data/vendor/assets/javascripts/highstock/indicators/apo.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/apo.src.js +223 -0
- data/vendor/assets/javascripts/highstock/indicators/aroon-oscillator.js +15 -0
- data/vendor/assets/javascripts/highstock/indicators/aroon-oscillator.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/aroon-oscillator.src.js +426 -0
- data/vendor/assets/javascripts/highstock/indicators/aroon.js +16 -0
- data/vendor/assets/javascripts/highstock/indicators/aroon.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/aroon.src.js +423 -0
- data/vendor/assets/javascripts/highstock/indicators/atr.js +12 -0
- data/vendor/assets/javascripts/highstock/indicators/atr.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/atr.src.js +178 -0
- data/vendor/assets/javascripts/highstock/indicators/bollinger-bands.js +16 -0
- data/vendor/assets/javascripts/highstock/indicators/bollinger-bands.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/bollinger-bands.src.js +458 -0
- data/vendor/assets/javascripts/highstock/indicators/cci.js +12 -0
- data/vendor/assets/javascripts/highstock/indicators/cci.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/cci.src.js +158 -0
- data/vendor/assets/javascripts/highstock/indicators/chaikin.js +15 -0
- data/vendor/assets/javascripts/highstock/indicators/chaikin.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/chaikin.src.js +370 -0
- data/vendor/assets/javascripts/highstock/indicators/cmf.js +12 -0
- data/vendor/assets/javascripts/highstock/indicators/cmf.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/cmf.src.js +273 -0
- data/vendor/assets/javascripts/highstock/indicators/dema.js +13 -0
- data/vendor/assets/javascripts/highstock/indicators/dema.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/dema.src.js +266 -0
- data/vendor/assets/javascripts/highstock/indicators/dpo.js +12 -0
- data/vendor/assets/javascripts/highstock/indicators/dpo.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/dpo.src.js +166 -0
- data/vendor/assets/javascripts/highstock/indicators/ema.js +12 -0
- data/vendor/assets/javascripts/highstock/indicators/ema.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/ema.src.js +193 -0
- data/vendor/assets/javascripts/highstock/indicators/ichimoku-kinko-hyo.js +22 -0
- data/vendor/assets/javascripts/highstock/indicators/ichimoku-kinko-hyo.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/ichimoku-kinko-hyo.src.js +877 -0
- data/vendor/assets/javascripts/highstock/indicators/indicators-all.js +117 -0
- data/vendor/assets/javascripts/highstock/indicators/indicators-all.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/indicators-all.src.js +9389 -0
- data/vendor/assets/javascripts/highstock/indicators/indicators.js +17 -0
- data/vendor/assets/javascripts/highstock/indicators/indicators.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/indicators.src.js +500 -0
- data/vendor/assets/javascripts/highstock/indicators/keltner-channels.js +16 -0
- data/vendor/assets/javascripts/highstock/indicators/keltner-channels.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/keltner-channels.src.js +442 -0
- data/vendor/assets/javascripts/highstock/indicators/macd.js +18 -0
- data/vendor/assets/javascripts/highstock/indicators/macd.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/macd.src.js +444 -0
- data/vendor/assets/javascripts/highstock/indicators/mfi.js +13 -0
- data/vendor/assets/javascripts/highstock/indicators/mfi.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/mfi.src.js +225 -0
- data/vendor/assets/javascripts/highstock/indicators/momentum.js +12 -0
- data/vendor/assets/javascripts/highstock/indicators/momentum.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/momentum.src.js +146 -0
- data/vendor/assets/javascripts/highstock/indicators/natr.js +12 -0
- data/vendor/assets/javascripts/highstock/indicators/natr.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/natr.src.js +101 -0
- data/vendor/assets/javascripts/highstock/indicators/pivot-points.js +16 -0
- data/vendor/assets/javascripts/highstock/indicators/pivot-points.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/pivot-points.src.js +387 -0
- data/vendor/assets/javascripts/highstock/indicators/ppo.js +13 -0
- data/vendor/assets/javascripts/highstock/indicators/ppo.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/ppo.src.js +227 -0
- data/vendor/assets/javascripts/highstock/indicators/price-channel.js +16 -0
- data/vendor/assets/javascripts/highstock/indicators/price-channel.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/price-channel.src.js +450 -0
- data/vendor/assets/javascripts/highstock/indicators/price-envelopes.js +15 -0
- data/vendor/assets/javascripts/highstock/indicators/price-envelopes.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/price-envelopes.src.js +278 -0
- data/vendor/assets/javascripts/highstock/indicators/psar.js +13 -0
- data/vendor/assets/javascripts/highstock/indicators/psar.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/psar.src.js +334 -0
- data/vendor/assets/javascripts/highstock/indicators/regressions.js +14 -0
- data/vendor/assets/javascripts/highstock/indicators/regressions.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/regressions.src.js +454 -0
- data/vendor/assets/javascripts/highstock/indicators/roc.js +12 -0
- data/vendor/assets/javascripts/highstock/indicators/roc.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/roc.src.js +176 -0
- data/vendor/assets/javascripts/highstock/indicators/rsi.js +12 -0
- data/vendor/assets/javascripts/highstock/indicators/rsi.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/rsi.src.js +190 -0
- data/vendor/assets/javascripts/highstock/indicators/stochastic.js +17 -0
- data/vendor/assets/javascripts/highstock/indicators/stochastic.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/stochastic.src.js +494 -0
- data/vendor/assets/javascripts/highstock/indicators/supertrend.js +17 -0
- data/vendor/assets/javascripts/highstock/indicators/supertrend.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/supertrend.src.js +571 -0
- data/vendor/assets/javascripts/highstock/indicators/tema.js +14 -0
- data/vendor/assets/javascripts/highstock/indicators/tema.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/tema.src.js +322 -0
- data/vendor/assets/javascripts/highstock/indicators/trix.js +12 -0
- data/vendor/assets/javascripts/highstock/indicators/trix.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/trix.src.js +171 -0
- data/vendor/assets/javascripts/highstock/indicators/volume-by-price.js +21 -0
- data/vendor/assets/javascripts/highstock/indicators/volume-by-price.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/volume-by-price.src.js +698 -0
- data/vendor/assets/javascripts/highstock/indicators/vwap.js +12 -0
- data/vendor/assets/javascripts/highstock/indicators/vwap.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/vwap.src.js +216 -0
- data/vendor/assets/javascripts/highstock/indicators/williams-r.js +13 -0
- data/vendor/assets/javascripts/highstock/indicators/williams-r.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/williams-r.src.js +207 -0
- data/vendor/assets/javascripts/highstock/indicators/wma.js +12 -0
- data/vendor/assets/javascripts/highstock/indicators/wma.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/wma.src.js +173 -0
- data/vendor/assets/javascripts/highstock/indicators/zigzag.js +13 -0
- data/vendor/assets/javascripts/highstock/indicators/zigzag.js.map +1 -0
- data/vendor/assets/javascripts/highstock/indicators/zigzag.src.js +248 -0
- data/vendor/assets/javascripts/highstock/lib/canvg.js +130 -0
- data/vendor/assets/javascripts/highstock/lib/canvg.src.js +3073 -0
- data/vendor/assets/javascripts/highstock/lib/jspdf.js +283 -0
- data/vendor/assets/javascripts/highstock/lib/jspdf.src.js +21627 -0
- data/vendor/assets/javascripts/highstock/lib/rgbcolor.js +17 -0
- data/vendor/assets/javascripts/highstock/lib/rgbcolor.src.js +299 -0
- data/vendor/assets/javascripts/highstock/lib/svg2pdf.js +38 -0
- data/vendor/assets/javascripts/highstock/lib/svg2pdf.src.js +4390 -0
- data/vendor/assets/javascripts/highstock/modules/accessibility.js +73 -0
- data/vendor/assets/javascripts/highstock/modules/accessibility.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/accessibility.src.js +3103 -0
- data/vendor/assets/javascripts/highstock/modules/annotations-advanced.js +132 -0
- data/vendor/assets/javascripts/highstock/modules/annotations-advanced.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/annotations-advanced.src.js +8230 -0
- data/vendor/assets/javascripts/highstock/modules/annotations.js +94 -0
- data/vendor/assets/javascripts/highstock/modules/annotations.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/annotations.src.js +6001 -0
- data/vendor/assets/javascripts/highstock/modules/arrow-symbols.js +11 -0
- data/vendor/assets/javascripts/highstock/modules/arrow-symbols.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/arrow-symbols.src.js +225 -0
- data/vendor/assets/javascripts/highstock/modules/boost-canvas.js +23 -0
- data/vendor/assets/javascripts/highstock/modules/boost-canvas.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/boost-canvas.src.js +756 -0
- data/vendor/assets/javascripts/highstock/modules/boost.js +65 -0
- data/vendor/assets/javascripts/highstock/modules/boost.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/boost.src.js +3752 -0
- data/vendor/assets/javascripts/highstock/modules/bullet.js +14 -0
- data/vendor/assets/javascripts/highstock/modules/bullet.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/bullet.src.js +388 -0
- data/vendor/assets/javascripts/highstock/modules/current-date-indicator.js +11 -0
- data/vendor/assets/javascripts/highstock/modules/current-date-indicator.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/current-date-indicator.src.js +127 -0
- data/vendor/assets/javascripts/highstock/modules/cylinder.js +14 -0
- data/vendor/assets/javascripts/highstock/modules/cylinder.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/cylinder.src.js +413 -0
- data/vendor/assets/javascripts/highstock/modules/data.js +37 -0
- data/vendor/assets/javascripts/highstock/modules/data.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/data.src.js +2565 -0
- data/vendor/assets/javascripts/highstock/modules/datagrouping.js +25 -0
- data/vendor/assets/javascripts/highstock/modules/datagrouping.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/datagrouping.src.js +1140 -0
- data/vendor/assets/javascripts/highstock/modules/debugger.js +28 -0
- data/vendor/assets/javascripts/highstock/modules/debugger.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/debugger.src.js +267 -0
- data/vendor/assets/javascripts/highstock/modules/dependency-wheel.js +15 -0
- data/vendor/assets/javascripts/highstock/modules/dependency-wheel.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/dependency-wheel.src.js +301 -0
- data/vendor/assets/javascripts/highstock/modules/drag-panes.js +18 -0
- data/vendor/assets/javascripts/highstock/modules/drag-panes.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/drag-panes.src.js +649 -0
- data/vendor/assets/javascripts/highstock/modules/draggable-points.js +40 -0
- data/vendor/assets/javascripts/highstock/modules/draggable-points.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/draggable-points.src.js +2650 -0
- data/vendor/assets/javascripts/highstock/modules/drilldown.js +29 -0
- data/vendor/assets/javascripts/highstock/modules/drilldown.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/drilldown.src.js +1321 -0
- data/vendor/assets/javascripts/highstock/modules/export-data.js +27 -0
- data/vendor/assets/javascripts/highstock/modules/export-data.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/export-data.src.js +1234 -0
- data/vendor/assets/javascripts/highstock/modules/exporting.js +35 -0
- data/vendor/assets/javascripts/highstock/modules/exporting.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/exporting.src.js +2233 -0
- data/vendor/assets/javascripts/highstock/modules/full-screen.js +11 -0
- data/vendor/assets/javascripts/highstock/modules/full-screen.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/full-screen.src.js +68 -0
- data/vendor/assets/javascripts/highstock/modules/funnel.js +14 -0
- data/vendor/assets/javascripts/highstock/modules/funnel.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/funnel.src.js +576 -0
- data/vendor/assets/javascripts/highstock/modules/grid-axis.js +23 -0
- data/vendor/assets/javascripts/highstock/modules/grid-axis.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/grid-axis.src.js +988 -0
- data/vendor/assets/javascripts/highstock/modules/heatmap.js +28 -0
- data/vendor/assets/javascripts/highstock/modules/heatmap.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/heatmap.src.js +1731 -0
- data/vendor/assets/javascripts/highstock/modules/histogram-bellcurve.js +16 -0
- data/vendor/assets/javascripts/highstock/modules/histogram-bellcurve.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/histogram-bellcurve.src.js +570 -0
- data/vendor/assets/javascripts/highstock/modules/item-series.js +13 -0
- data/vendor/assets/javascripts/highstock/modules/item-series.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/item-series.src.js +176 -0
- data/vendor/assets/javascripts/highstock/modules/networkgraph.js +31 -0
- data/vendor/assets/javascripts/highstock/modules/networkgraph.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/networkgraph.src.js +1348 -0
- data/vendor/assets/javascripts/highstock/modules/no-data-to-display.js +13 -0
- data/vendor/assets/javascripts/highstock/modules/no-data-to-display.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/no-data-to-display.src.js +285 -0
- data/vendor/assets/javascripts/highstock/modules/offline-exporting.js +22 -0
- data/vendor/assets/javascripts/highstock/modules/offline-exporting.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/offline-exporting.src.js +838 -0
- data/vendor/assets/javascripts/highstock/modules/oldie-polyfills.js +13 -0
- data/vendor/assets/javascripts/highstock/modules/oldie-polyfills.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/oldie-polyfills.src.js +150 -0
- data/vendor/assets/javascripts/highstock/modules/oldie.js +35 -0
- data/vendor/assets/javascripts/highstock/modules/oldie.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/oldie.src.js +1582 -0
- data/vendor/assets/javascripts/highstock/modules/overlapping-datalabels.js +9 -0
- data/vendor/assets/javascripts/highstock/modules/overlapping-datalabels.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/overlapping-datalabels.src.js +22 -0
- data/vendor/assets/javascripts/highstock/modules/parallel-coordinates.js +18 -0
- data/vendor/assets/javascripts/highstock/modules/parallel-coordinates.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/parallel-coordinates.src.js +517 -0
- data/vendor/assets/javascripts/highstock/modules/pareto.js +14 -0
- data/vendor/assets/javascripts/highstock/modules/pareto.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/pareto.src.js +327 -0
- data/vendor/assets/javascripts/highstock/modules/pathfinder.js +34 -0
- data/vendor/assets/javascripts/highstock/modules/pathfinder.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/pathfinder.src.js +2336 -0
- data/vendor/assets/javascripts/highstock/modules/pattern-fill.js +21 -0
- data/vendor/assets/javascripts/highstock/modules/pattern-fill.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/pattern-fill.src.js +634 -0
- data/vendor/assets/javascripts/highstock/modules/price-indicator.js +13 -0
- data/vendor/assets/javascripts/highstock/modules/price-indicator.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/price-indicator.src.js +176 -0
- data/vendor/assets/javascripts/highstock/modules/sankey.js +22 -0
- data/vendor/assets/javascripts/highstock/modules/sankey.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/sankey.src.js +911 -0
- data/vendor/assets/javascripts/highstock/modules/series-label.js +23 -0
- data/vendor/assets/javascripts/highstock/modules/series-label.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/series-label.src.js +1065 -0
- data/vendor/assets/javascripts/highstock/modules/solid-gauge.js +15 -0
- data/vendor/assets/javascripts/highstock/modules/solid-gauge.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/solid-gauge.src.js +510 -0
- data/vendor/assets/javascripts/highstock/modules/sonification.js +53 -0
- data/vendor/assets/javascripts/highstock/modules/sonification.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/sonification.src.js +3341 -0
- data/vendor/assets/javascripts/highstock/modules/static-scale.js +12 -0
- data/vendor/assets/javascripts/highstock/modules/static-scale.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/static-scale.src.js +114 -0
- data/vendor/assets/javascripts/highstock/modules/stock-tools.js +65 -0
- data/vendor/assets/javascripts/highstock/modules/stock-tools.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/stock-tools.src.js +3437 -0
- data/vendor/assets/javascripts/highstock/modules/stock.js +151 -0
- data/vendor/assets/javascripts/highstock/modules/stock.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/stock.src.js +10907 -0
- data/vendor/assets/javascripts/highstock/modules/streamgraph.js +10 -0
- data/vendor/assets/javascripts/highstock/modules/streamgraph.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/streamgraph.src.js +158 -0
- data/vendor/assets/javascripts/highstock/modules/sunburst.js +52 -0
- data/vendor/assets/javascripts/highstock/modules/sunburst.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/sunburst.src.js +3174 -0
- data/vendor/assets/javascripts/highstock/modules/tilemap.js +26 -0
- data/vendor/assets/javascripts/highstock/modules/tilemap.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/tilemap.src.js +1402 -0
- data/vendor/assets/javascripts/highstock/modules/timeline.js +23 -0
- data/vendor/assets/javascripts/highstock/modules/timeline.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/timeline.src.js +778 -0
- data/vendor/assets/javascripts/highstock/modules/treegrid.js +50 -0
- data/vendor/assets/javascripts/highstock/modules/treegrid.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/treegrid.src.js +2917 -0
- data/vendor/assets/javascripts/highstock/modules/treemap.js +39 -0
- data/vendor/assets/javascripts/highstock/modules/treemap.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/treemap.src.js +2083 -0
- data/vendor/assets/javascripts/highstock/modules/variable-pie.js +16 -0
- data/vendor/assets/javascripts/highstock/modules/variable-pie.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/variable-pie.src.js +485 -0
- data/vendor/assets/javascripts/highstock/modules/variwide.js +15 -0
- data/vendor/assets/javascripts/highstock/modules/variwide.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/variwide.src.js +376 -0
- data/vendor/assets/javascripts/highstock/modules/vector.js +13 -0
- data/vendor/assets/javascripts/highstock/modules/vector.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/vector.src.js +381 -0
- data/vendor/assets/javascripts/highstock/modules/venn.js +30 -0
- data/vendor/assets/javascripts/highstock/modules/venn.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/venn.src.js +1624 -0
- data/vendor/assets/javascripts/highstock/modules/windbarb.js +17 -0
- data/vendor/assets/javascripts/highstock/modules/windbarb.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/windbarb.src.js +574 -0
- data/vendor/assets/javascripts/highstock/modules/wordcloud.js +25 -0
- data/vendor/assets/javascripts/highstock/modules/wordcloud.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/wordcloud.src.js +1475 -0
- data/vendor/assets/javascripts/highstock/modules/xrange.js +20 -0
- data/vendor/assets/javascripts/highstock/modules/xrange.js.map +1 -0
- data/vendor/assets/javascripts/highstock/modules/xrange.src.js +788 -0
- data/vendor/assets/javascripts/highstock/themes/avocado.js +9 -0
- data/vendor/assets/javascripts/highstock/themes/avocado.js.map +1 -0
- data/vendor/assets/javascripts/highstock/themes/avocado.src.js +63 -0
- data/vendor/assets/javascripts/highstock/themes/dark-blue.js +15 -0
- data/vendor/assets/javascripts/highstock/themes/dark-blue.js.map +1 -0
- data/vendor/assets/javascripts/highstock/themes/dark-blue.src.js +285 -0
- data/vendor/assets/javascripts/highstock/themes/dark-green.js +15 -0
- data/vendor/assets/javascripts/highstock/themes/dark-green.js.map +1 -0
- data/vendor/assets/javascripts/highstock/themes/dark-green.src.js +287 -0
- data/vendor/assets/javascripts/highstock/themes/dark-unica.js +14 -0
- data/vendor/assets/javascripts/highstock/themes/dark-unica.js.map +1 -0
- data/vendor/assets/javascripts/highstock/themes/dark-unica.src.js +246 -0
- data/vendor/assets/javascripts/highstock/themes/gray.js +15 -0
- data/vendor/assets/javascripts/highstock/themes/gray.js.map +1 -0
- data/vendor/assets/javascripts/highstock/themes/gray.src.js +293 -0
- data/vendor/assets/javascripts/highstock/themes/grid-light.js +11 -0
- data/vendor/assets/javascripts/highstock/themes/grid-light.js.map +1 -0
- data/vendor/assets/javascripts/highstock/themes/grid-light.src.js +107 -0
- data/vendor/assets/javascripts/highstock/themes/grid.js +11 -0
- data/vendor/assets/javascripts/highstock/themes/grid.js.map +1 -0
- data/vendor/assets/javascripts/highstock/themes/grid.src.js +136 -0
- data/vendor/assets/javascripts/highstock/themes/sand-signika.js +11 -0
- data/vendor/assets/javascripts/highstock/themes/sand-signika.js.map +1 -0
- data/vendor/assets/javascripts/highstock/themes/sand-signika.src.js +137 -0
- data/vendor/assets/javascripts/highstock/themes/skies.js +11 -0
- data/vendor/assets/javascripts/highstock/themes/skies.js.map +1 -0
- data/vendor/assets/javascripts/highstock/themes/skies.src.js +126 -0
- data/vendor/assets/javascripts/highstock/themes/sunset.js +9 -0
- data/vendor/assets/javascripts/highstock/themes/sunset.js.map +1 -0
- data/vendor/assets/javascripts/highstock/themes/sunset.src.js +62 -0
- 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":"A;;;;;;;;;AAUC,SAAS,CAACA,CAAD,CAAU,CACM,QAAtB,GAAI,MAAOC,OAAX,EAAkCA,MAAAC,QAAlC,EACIF,CAAA,CAAQ,SAAR,CACA,CADqBA,CACrB,CAAAC,MAAAC,QAAA,CAAiBF,CAFrB,EAG6B,UAAtB,GAAI,MAAOG,OAAX,EAAoCA,MAAAC,IAApC,CACHD,MAAA,CAAO,QAAS,EAAG,CACf,MAAOH,EADQ,CAAnB,CADG,CAKHA,CAAA,CAA8B,WAAtB,GAAA,MAAOK,WAAP,CAAoCA,UAApC,CAAiDC,IAAAA,EAAzD,CATY,CAAnB,CAAA,CAWC,QAAS,CAACD,CAAD,CAAa,CACnB,SAAS,CAACE,CAAD,CAAI,CA6CVC,QAASA,EAAuB,CAACC,CAAD,CAAYC,CAAZ,CAAiB,CAAA,IACzCC,EAAYF,CAAAG,QAAA,CAAkB,QAAlB,CAD6B,CAEzCC,EAAcJ,CAAAG,QAAA,CAAkB,UAAlB,CAF2B,CAGzCE,EAAaL,CAAAG,QAAA,CAAkB,GAAlB,CAH4B,CAIzCG,EAAWN,CAAAG,QAAA,CAAkB,GAAlB,CAKf,IAAiB,EAAjB,CAAID,CAAJ,CAAoB,CACZK,IAAAA,EAAUP,CAAAQ,MAAA,CAAgBN,CAAhB,CAAAC,QAAA,CAAmC,GAAnC,CAAVI,CAAoDL,CAApDK,CACAE,EAAUT,CAAAU,UAAA,CAAoB,CAApB,CAAuBR,CAAvB,CADVK,CAEAI,EAAWX,CAAAU,UAAA,CAAoBH,CAApB,CAA8B,CAA9B,CAFXA,CAIAK,EADgBZ,CAAAU,UAAAG,CAAoBX,CAApBW,CAAgC,CAAhCA,CAAmCN,CAAnCM,CACAC,MAAA,CAAoB,GAApB,CAJhBP,CAKAQ,EAASC,MAAA,CAAOJ,CAAA,CAAc,CAAd,CAAP,CAGbK,EAAA,CAAS,EAET,IADAC,CACA,CADMjB,CAAA,CAAIW,CAAA,CAAc,CAAd,CAAJ,CACN,CAMI,IALAG,CAKSI,CALAC,KAAA,CAAML,CAAN,CAAA,CAAgBG,CAAAG,OAAhB;AAA6BN,CAK7BI,CAJTG,CAISH,CAJM,CAAT,CAAAJ,CAAA,CACFG,CAAAG,OADE,CACWN,CADX,CAEFQ,IAAAC,IAAA,CAAST,CAAT,CAAiBG,CAAAG,OAAjB,CAEKF,CAAAA,CAAAA,CAAI,CAAb,CAAgBA,CAAhB,CAAoBG,CAApB,CAAyB,EAAEH,CAA3B,CACIF,CAAA,EAAUR,CAAV,CAAoBS,CAAA,CAAIC,CAAJ,CAApB,CAA6BR,CAGrC,OAAOM,EAAAI,OAAA,CAAgBJ,CAAhB,CAAyB,EArBhB,CAyBpB,GAAmB,EAAnB,CAAIb,CAAJ,CAAsB,CACdqB,CAAAA,CAAYzB,CAAAQ,MAAA,CAAgBJ,CAAhB,CAAAD,QAAA,CAAqC,GAArC,CAAZsB,CAAwDrB,CAExDsB,EAAAA,CADkB1B,CAAAU,UAAAiB,CAAoBvB,CAApBuB,CAAkC,CAAlCA,CAAqCF,CAArCE,CACAb,MAAA,CAAsB,GAAtB,CAGtB,QAFUE,MAAAY,CAAO3B,CAAA,CAAIyB,CAAA,CAAgB,CAAhB,CAAJ,CAAPE,CAEV,EACA,KAAK,CAAL,CACIX,CAAA,CAASY,CAAA,CAAKH,CAAA,CAAgB,CAAhB,CAAL,CAAyBA,CAAA,CAAgB,CAAhB,CAAzB,CACT,MACJ,MAAK,CAAL,CACIT,CAAA,CAASY,CAAA,CAAKH,CAAA,CAAgB,CAAhB,CAAL,CAAyBA,CAAA,CAAgB,CAAhB,CAAzB,CACT,MACJ,MAAK,CAAL,CACIT,CAAA,CAASY,CAAA,CAAKH,CAAA,CAAgB,CAAhB,CAAL,CAAyBA,CAAA,CAAgB,CAAhB,CAAzB,CACT,MACJ,SACIT,CAAA,CAASS,CAAA,CAAgB,CAAhB,CAXb,CAaOT,CAAA,EAAS,CAvEpB,CAuEoB,CAvEpB,CAAA,CAAA,CAAOa,CAAAC,KAAP,EAAmBD,CAAAC,KAAA,EAAnB,EAAiCD,CAAAE,QAAA,CAAY,YAAZ,CAA0B,EAA1B,CAuEtB,EAA8B,CAA9B,CAA8B,EAArC,OAAO,EAnBW,CAuBtB,MAAkB,EAAlB,CAAI3B,CAAJ,EACQ4B,CAoBG,CApBSjC,CAAAU,UAAA,CAAoB,CAApB,CAAuBL,CAAvB,CAoBT,CAnBH6B,CAmBG,CAnBElB,MAAA,CAAOhB,CAAAU,UAAA,CAAoBL,CAApB,CAAiC,CAAjC,CAAoCC,CAApC,CAAP,CAmBF,CAhBPY,CAgBO,CAhBDjB,CAAA,CAAIgC,CAAJ,CAgBC,CAfF,CAAAb,KAAA,CAAMc,CAAN,CAeE,EAfWhB,CAeX,GAdM,CAAT,CAAIgB,CAAJ,EACIC,CAEA,CAFMjB,CAAA,CAAIA,CAAAG,OAAJ,CAAiBa,CAAjB,CAEN,CAAYrC,IAAAA,EAAZ,GAAIsC,CAAJ,GACIA,CADJ,CACUjB,CAAA,CAAI,CAAJ,CADV,CAHJ,GAOIiB,CAEA,CAFMjB,CAAA,CAAIgB,CAAJ,CAEN,CAAYrC,IAAAA,EAAZ,GAAIsC,CAAJ,GACIA,CADJ,CACUjB,CAAA,CAAIA,CAAAG,OAAJ;AAAiB,CAAjB,CADV,CATJ,CAcG,EAAQxB,IAAAA,EAAR,GAAAsC,CAAA,CAAoBA,CAApB,CAA0B,EArBrC,EAyBO,GAzBP,CAyBanC,CAzBb,CAyByB,GAlFoB,CAjCjD,IAAI6B,EAAO/B,CAAA+B,KA+LX/B,EAAAsC,WAAA,CAAeC,QAAS,CAACC,CAAD,CAAeC,CAAf,CAAwBC,CAAxB,CAA8B,CAAA,IAC9CC,EAA2BA,QAAS,CAACC,CAAD,CAAYC,CAAZ,CAAoB,CAChDb,CAAAA,CAAMY,CAAAlC,MAAA,CAAgBmC,CAAhB,EAA0B,CAA1B,CAD0C,KAEhDC,EAAed,CAAA3B,QAAA,CAAY,GAAZ,CAFiC,CAGhD0C,EAAaf,CAAA3B,QAAA,CAAY,GAAZ,CAEjB,IAAoB,EAApB,CAAIyC,CAAJ,EAAyBC,CAAzB,CAAsCD,CAAtC,CACI,MAAO,CACH5C,UAAW8B,CAAApB,UAAA,CAAckC,CAAd,CAA6B,CAA7B,CAAgCC,CAAhC,CADR,CAEHC,MAAOH,CAAPG,CAAgBF,CAAhBE,CAA+B,CAF5B,CAGHC,IAAKJ,CAALI,CAAcF,CAHX,CANyC,CADV,CAc9CG,EAAS,EAdqC,CAe9CC,CAf8C,CAgB9CC,CACAC,EAAAA,CAAS,CAGb,GACIF,EAsBA,CAtBaR,CAAA,CAAyBH,CAAzB,CAAuCa,CAAvC,CAsBb,CArBAD,CAqBA,CArBWZ,CAAA5B,UAAA,CACPyC,CADO,CAEPF,CAFO,EAEOA,CAAAH,MAFP,CAE0B,CAF1B,CAqBX,CAfII,CAAA7B,OAeJ,EAdI2B,CAAAI,KAAA,CAAY,CACRC,MAAOH,CADC,CAERI,KAAM,UAFE,CAAZ,CAcJ,CAPIL,CAOJ,EANID,CAAAI,KAAA,CAAY,CACRC,MAAOJ,CAAAjD,UADC,CAERsD,KAAM,WAFE,CAAZ,CAMJ,CAAAH,CAAA,CAASF,CAAT,EAAuBA,CAAAF,IAAvB,CAAwC,CAvB5C,OAwBSE,CAxBT,CA6BAD,EAAAO,QAAA,CAAe,QAAS,CAACC,CAAD,CAAQ,CACT,WAAnB,GAAIA,CAAAF,KAAJ,GACIE,CAAAH,MADJ,CACkBtD,CAAA,CAAwByD,CAAAH,MAAxB,CAAqCd,CAArC,CADlB,CAD4B,CAAhC,CAQA,OAAOzC,EAAA2D,OAAA,CAAST,CAAAU,OAAA,CAAc,QAAS,CAACC,CAAD,CAAMC,CAAN,CAAW,CAC9C,MAAOD,EAAP;AAAaC,CAAAP,MADiC,CAAlC,CAEb,EAFa,CAAT,CAECd,CAFD,CAEUC,CAFV,CAzD2C,CA8EtD1C,EAAA+D,MAAAC,UAAAC,WAAA,CAA+BC,QAAS,CAACC,CAAD,CAAU1B,CAAV,CAAmBC,CAAnB,CAAyB,CACzD0B,CAAAA,CAAOD,CAAAnD,MAAA,CAAc,GAAd,CAIX,KAL6D,IAEzDwB,EAAe,IAAA6B,QAAAC,KAF0C,CAGzDjD,EAAI,CAER,CAAOA,CAAP,CAAW+C,CAAA7C,OAAX,CAAwB,EAAEF,CAA1B,CACImB,CAAA,CAAeA,CAAf,EAA+BA,CAAA,CAAa4B,CAAA,CAAK/C,CAAL,CAAb,CAEnC,OAA+B,QAA/B,GAAO,MAAOmB,EAAd,EAA2CxC,CAAAsC,WAAA,CACvCE,CADuC,CACzBC,CADyB,CAChBC,CADgB,CARkB,CAajE1C,EAAAuE,WAAA,CAAa,CACTD,KAAM,CAsBFE,cAAe,CAGXC,wBAAyB,kCAHd,CAIXC,eAAgB,sGAJL,CAKXC,kBAAmB,OALR,CAMXC,uBAAwB,mBANb,CAOXC,cAAe,2BAPJ;AAQXC,iBAAkB,YARP,CASXC,gBAAiB,qBATN,CAUXC,aAAc,gBAVH,CAWXC,oBAAqB,0FAXV,CAYXC,sBAAuB,oBAZZ,CAaXC,sBAAuB,kBAbZ,CAcXC,aAAc,gCAdH,CAeXC,UAAW,YAfA,CAgBXC,WAAY,gBAhBD,CAiBXC,oBAAqB,2BAjBV,CAkBXC,YAAa,0BAlBF,CA6BXC,kBAAmB,cA7BR;AAsCXC,uBAAwB,CACpBC,QAAS,+LADW,CAKpBC,UAAW,sGALS,CAOpBC,gBAAiB,kGAPG,CASpBC,OAAQ,+EATY;AAWpBC,YAAa,0GAXO,CAcpBC,SAAU,kEAdU,CAgBpBC,OAAQ,gEAhBY,CAkBpBC,QAAS,iGAlBW,CAoBpBC,UAAW,8FApBS,CAtCb,CA0EXC,WAAY,CAERC,WAAY,aAFJ;AAGRC,mBAAoB,iDAHZ,CAIRC,WAAY,yDAJJ,CAKRC,iBAAkB,iDALV,CAMRC,cAAe,kEANP,CAORC,gBAAiB,qCAPT,CAQRC,aAAc,uEARN,CASRC,eAAgB,oCATR,CAURC,WAAY,uEAVJ;AAWRC,aAAc,oCAXN,CAYRC,aAAc,6DAZN,CAaRC,eAAgB,yCAbR,CAcRC,UAAW,6DAdH,CAeRC,YAAa,yCAfL,CAgBRC,UAAW,iEAhBH,CAiBRC,YAAa,kCAjBL,CAkBRC,cAAe,qEAlBP;AAmBRC,gBAAiB,6CAnBT,CAoBRC,cAAe,4DApBP,CAqBRC,gBAAiB,uCArBT,CAsBRC,aAAc,sEAtBN,CAuBRC,eAAgB,4CAvBR,CA1ED,CAyGXC,KAAM,CAEFC,yBAA0B,+CAFxB,CAGFC,uBAAwB,gFAHtB;AAIFC,yBAA0B,+CAJxB,CAKFC,uBAAwB,gFALtB,CAzGK,CAsHXC,UAAW,CACPC,eAAgB,cADT,CAEPC,gBAAiB,kBAFV,CAGPC,kBAAmB,mBAHZ,CAtHA,CAoIXC,OAAQ,CAeJC,QAAS,CAEL,UAAW,+FAFN,CAGLC,mBAAoB,+FAHf;AAILC,KAAM,6FAJD,CAKLC,gBAAiB,qGALZ,CAMLC,OAAQ,6FANH,CAOLC,kBAAmB,qGAPd,CAQLC,OAAQ,0FARH;AASLC,kBAAmB,kGATd,CAULC,IAAK,0FAVA,CAWLC,eAAgB,kGAXX,CAYLC,IAAK,uFAZA,CAaLC,eAAgB,+FAbX;AAcLC,QAAS,gGAdJ,CAeLC,mBAAoB,wGAff,CAgBLvD,QAAS,wFAhBJ,CAiBLwD,mBAAoB,gGAjBf,CAkBLrD,OAAQ,mGAlBH;AAmBLsD,kBAAmB,2GAnBd,CAoBLC,IAAK,qFApBA,CAqBLC,eAAgB,6FArBX,CAsBLC,QAAS,6FAtBJ,CAuBLC,mBAAoB,qGAvBf;AAwBLC,UAAW,mGAxBN,CAyBLC,qBAAsB,2GAzBjB,CAfL,CAiDJC,YAAa,eAjDT,CAyDJC,iBAAkB,gBAzDd,CAiEJC,iBAAkB,gBAjEd,CApIG,CAtBb,CADG,CAAb,CAtSU,CAAb,CAAA,CA2gBC/J,CA3gBD,CA4gBA,UAAS,CAACE,CAAD,CAAI,CAmDV8J,QAASA,EAAU,CAACC,CAAD,CAAO,CACtB,MAAOA,EAAA7H,QAAA,CACM,IADN,CACY,UADZ,CAAAA,QAAA,CAEM,IAFN,CAEY,SAFZ,CAAAA,QAAA,CAGM,IAHN,CAGY,SAHZ,CAAAA,QAAA,CAIM,IAJN,CAIY,WAJZ,CAAAA,QAAA,CAKM,IALN,CAKY,WALZ,CAAAA,QAAA,CAMM,KANN;AAMa,WANb,CADe,CAwB1B8H,QAASA,EAAS,CAACC,CAAD,CAAI,CAClB,MAAoB,QAAb,GAAA,MAAOA,EAAP,CAAwBA,CAAA/H,QAAA,CAAU,iBAAV,CAA6B,EAA7B,CAAxB,CAA2D+H,CADhD,CAiOtBC,QAASA,EAAiB,CAACC,CAAD,CAAO,CAG7B,IAFA,IAAI9I,EAAI8I,CAAAC,WAAA7I,OAER,CAAOF,CAAA,EAAP,CAAA,CACI8I,CAAAE,YAAA,CAAiBF,CAAAC,WAAA,CAAgB/I,CAAhB,CAAjB,CAJyB,CA5SvB,IAaNiJ,EADMtK,CAAAuK,IACAC,SAbA,CAcNC,EAAQzK,CAAAyK,MAdF,CAeNC,EAAW1K,CAAA0K,SAfL,CAgBNC,EAAQ3K,CAAA2K,MAhBF,CAmBNC,EAAc,CACVC,SAAU,UADA,CAEVC,IAAK,QAFK,CAGVC,MAAO,KAHG,CAIVC,OAAQ,KAJE,CAKVC,SAAU,QALA,CAUlBjL,EAAAkL,OAAAlH,UAAAmH,WAAA,CAAgC,4BAAA,MAAA,CAAA,GAAA,CAChCnL,EAAAkL,OAAAlH,UAAAoH,YAAA,CAAiC,oCAAA,MAAA,CAAA,GAAA,CAG7BpL,EAAAqL,YAAAtC,IAAJ,GAEI/I,CAAAqL,YAAAtC,IAAA/E,UAAAoH,YAFJ;AAE8C,EAF9C,CAgDApL,EAAAuE,WAAA,CAAa,CAYTC,cAAe,CAsFX8G,QAAS,CAAA,CAtFE,CAiGXC,0BAA2B,CAAA,CAjGhB,CAgHXC,6BAA8BA,QAAS,CAACC,CAAD,CAAQ,CAAA,IACvCpH,EAAUoH,CAAApH,QAD6B,CAEvC+B,EAAaqF,CAAAC,MAAbtF,EAA4B,EAFW,CAGvCuF,EAAgB,CACZF,MAAOA,CADK,CAEZG,UAAWH,CAAArD,OAAXwD,EAA2BH,CAAArD,OAAA7G,OAFf,CAHuB,CASvCsK,GAC0B,CAD1BA,GACIzF,CAAA7E,OADJsK,EACiD,KADjDA,GAC+BzF,CAAA,CAAW,CAAX,CAD/ByF,EAEsB,KAFtBA,GAEIzF,CAAA,CAAW,CAAX,CAFJyF,GAGK,EAHLA,EAGWJ,CAAAK,mBAAA,EAEf,OAAO,aAAP,CAAiBL,CAAAxH,WAAA,CACb,8BADa,CACmB0H,CADnB,CAAjB,CAEI,wBAFJ,EAIItH,CAAA0H,MAAAC,KAAA,CACIlC,CAAA,CAAWzF,CAAA0H,MAAAC,KAAX,CADJ,CAEIP,CAAAxH,WAAA,CACI,iCADJ,CACuC0H,CADvC,CANR,GAWItH,CAAA4H,SAAA,EAAoB5H,CAAA4H,SAAAD,KAApB,CACI,IADJ,CACWlC,CAAA,CAAWzF,CAAA4H,SAAAD,KAAX,CADX,CAEI,EAbR,EAeA,aAfA;CAgBI3H,CAAAoH,MAAA9B,YAAA,CACI,YADJ,CACa8B,CAAAxH,WAAA,CACL,sCADK,CAEL0H,CAFK,CADb,CAKI,wBALJ,CAKmBtH,CAAAoH,MAAA9B,YALnB,CAK+C,cAL/C,CAMI,EAtBR,EAuBI,YAvBJ,CAuBa8B,CAAAxH,WAAA,CACT,gCADS,CACyB0H,CADzB,CAvBb,CAyBI,wBAzBJ,EA2BItH,CAAAoH,MAAAS,gBA3BJ,EA4BIT,CAAAU,mBAAA,EA5BJ,EA6BI,cA7BJ,EA8BCN,CAAAO,MAAA,CACG,aADH,CACaP,CAAAO,MADb,CAC8B,cAD9B,CAEG,EAhCJ,GAiCCP,CAAAQ,MAAA,CACG,aADH,CACaR,CAAAQ,MADb,CAC8B,cAD9B,CAEG,EAnCJ,CAd2C,CAhHpC,CAZN,CAAb,CAqOArM,EAAA0K,SAAA,CAAW1K,CAAAkL,OAAX,CAAqB,aAArB,CAAoC,QAAS,EAAG,CACxC,IAAAO,MAAApH,QAAAG,cAAA8G,QAAJ,EACI,IAAAgB,mBAAA,EAFwC,CAAhD,CAaAtM;CAAAkL,OAAAlH,UAAAsI,mBAAA,CAAwCC,QAAS,EAAG,CAAA,IAC5CC,EAAc,IAAAf,MAAApH,QAAAG,cAD8B,CAE5CiI,EACI,IAAAC,OADJD,EAEI,IAAAC,OAAAnL,OAFJkL,EAGI,IAAAC,OAAA,CAAY,CAAZ,CAAAC,QAHJF,EAII,IAAAC,OAAA,CAAY,CAAZ,CAAAC,QAAAC,QANwC,CAQ5CC,EACIJ,CADJI,EAEIJ,CAAAK,WAFJD,EAE+B,IAAAE,MAF/BF,EAGI,IAAAE,MAAAH,QAHJC,EAG0B,IAAAG,MAH1BH,EAII,IAAAG,MAAAJ,QAGJC,EAAJ,GAIQA,CAAAI,UA2BA,GA3BuBR,CA2BvB,EA1BAvC,CAAA,CAAkB2C,CAAlB,CA0BA,CApBA,IAAAH,OAoBA,GAnBI,IAAAA,OAAAnL,OAmBJ,CAnByBiL,CAAAjB,0BAmBzB,EAlB8C,CAAA,CAkB9C,GAlBIiB,CAAAjB,0BAkBJ,GAfA,IAAAmB,OAAAjJ,QAAA,CAAoB,QAAS,CAACyJ,CAAD,CAAQ,CAC7BA,CAAAP,QAAJ,GACIO,CAAAP,QAAAC,QAAAO,aAAA,CAAmC,MAAnC,CAA2C,KAA3C,CAEA,CADAD,CAAAP,QAAAC,QAAAO,aAAA,CAAmC,UAAnC;AAA+C,IAA/C,CACA,CAAAD,CAAAP,QAAAC,QAAAO,aAAA,CAAmC,YAAnC,CAAiDnD,CAAA,CAC7CkD,CAAA9E,OAAA/D,QAAA+I,0BAD6C,EAE7CF,CAAA9E,OAAA/D,QAAA+I,0BAAA,CAA+CF,CAA/C,CAF6C,EAG7CV,CAAAY,0BAH6C,EAI7CZ,CAAAY,0BAAA,CAAsCF,CAAtC,CAJ6C,EAK7CA,CAAAG,qBAAA,EAL6C,CAAjD,CAHJ,CADiC,CAArC,CAeA,CAA2B,CAA3B,CAAA,IAAA5B,MAAArD,OAAA7G,OAAA,EAAgCiL,CAAAc,qBA/BxC,IAgCQT,CAAAM,aAAA,CACI,MADJ,CAEI,IAAA9I,QAAAkJ,oBAAA,CAAmC,KAAnC,CAA2C,QAF/C,CAKA,CADAV,CAAAM,aAAA,CAAsB,UAAtB,CAAkC,IAAlC,CACA,CAAAN,CAAAM,aAAA,CACI,YADJ,CAEInD,CAAA,CACIwC,CAAAgB,2BADJ,EAEIhB,CAAAgB,2BAAA,CAAuC,IAAvC,CAFJ,EAGI,IAAAC,sBAAA,EAHJ,CAFJ,CArCR,CAfgD,CAyEpDzN;CAAAkL,OAAAlH,UAAAyJ,sBAAA,CAA2CC,QAAS,EAAG,CAAA,IAC/CjC,EAAQ,IAAAA,MADuC,CAE/CkC,EAAO,IAAAhE,YAAPgE,EAA2B,IAAAtJ,QAAAsF,YAFoB,CAG/CA,EAAcgE,CAAdhE,EAAsB8B,CAAAxH,WAAA,CAClB,kCADkB,CACkB,CAChC0F,YAAagE,CADmB,CAEhCvF,OAAQ,IAFwB,CADlB,CAHyB,CAS/CwF,EAAYnC,CAAAxH,WAAA,CACR,uCADQ,CAER,CACI4J,KAAM,IAAAzB,MAANyB,EAAoB,IAAAzB,MAAA0B,eAAA,EADxB,CAEI1F,OAAQ,IAFZ,CAFQ,CATmC,CAgB/C2F,EAAYtC,CAAAxH,WAAA,CACR,uCADQ,CAER,CACI4J,KAAM,IAAAxB,MAANwB,EAAoB,IAAAxB,MAAAyB,eAAA,EADxB,CAEI1F,OAAQ,IAFZ,CAFQ,CAhBmC,CAuB/C4F,EAAiB,CACbH,KAAM,IAAAA,KAANA,EAAmB,EADN,CAEbzL,GAAI,IAAA6L,MAAJ7L,CAAiB,CAFJ,CAGbwJ,UAAWH,CAAArD,OAAA7G,OAHE,CAIb2M,UAAW,IAAAxB,OAAAnL,OAJE;AAKb6G,OAAQ,IALK,CAvB8B,CA8B/C+F,EAAqC,CAAvB,GAAA1C,CAAAC,MAAAnK,OAAA,CAA2B,EAA3B,CAAgC,aASlD,QARckK,CAAAxH,WAAA,CACN,+BADM,CAC4B,IAAAT,KAD5B,CACwC2K,CADxC,CAENH,CAFM,CAQd,EALSvC,CAAAxH,WAAA,CACD,sCADC,CACwCkK,CADxC,CAEDH,CAFC,CAKT,GAAkBrE,CAAA,CAAc,GAAd,CAAoBA,CAApB,CAAkC,EAApD,GACyB,CAArB,CAAA8B,CAAAY,MAAA9K,OAAA,EAA0B,IAAA8K,MAA1B,CACI,GADJ,CACU0B,CADV,CACsB,EAF1B,GAIyB,CAArB,CAAAtC,CAAAW,MAAA7K,OAAA,EAA0B,IAAA6K,MAA1B,CACI,GADJ,CACUwB,CADV,CACsB,EAL1B,CAvCmD,CAyDvD5N,EAAAoO,MAAApK,UAAAqJ,qBAAA,CAAyCgB,QAAS,EAAG,CAAA,IAC7CnB,EAAQ,IADqC,CAE7C9E,EAAS8E,CAAA9E,OAFoC,CAG7CqD,EAAQrD,CAAAqD,MAHqC,CAI7Ce,EAAcf,CAAApH,QAAAG,cAJ+B,CAK7C8J,EAAa,EALgC,CAM7CC,EAAgBnG,CAAAgE,MAAhBmC,EAAgCnG,CAAAgE,MAAAoC,eANa,CAO7CC,EACIF,CADJE,EAEIhD,CAAA/I,KAAAgM,WAAA,CACIlC,CAAAmC,mBADJ,EAEInC,CAAAmC,mBAAA,CAA+BzB,CAA/B,CAFJ,EAGIV,CAAAoC,gBAHJ;AAII5O,CAAA6O,QAAA7K,UAAA8K,eAAAC,KAAA,CACI,CACIC,cAAehP,CAAA6O,QAAA7K,UAAAgL,cADnB,CAEIvD,MAAOA,CAFX,CADJ,CAKIyB,CALJ,CAMIzB,CAAApH,QAAA4K,QANJ,CAOI7G,CAAAgE,MAPJ,CAJJ,CAaIc,CAAAgC,EAbJ,CAeYlP,EAAAmP,KAAAC,CAAOhH,CAAAgD,YAAPgE,CAA2B,QAAS,CAACC,CAAD,CAAM,CACtD,MAAsBtP,KAAAA,EAAtB,GAAOmN,CAAA,CAAMmC,CAAN,CAD+C,CAA1CD,CAMpB,EACQb,CAGJ,GAFID,CAEJ,CAFiBG,CAEjB,EAAArG,CAAA+C,WAAAmE,OAAA,CAAyBlH,CAAAgD,YAAzB,CAAA3H,QAAA,CAAqD,QAAS,CAAC4L,CAAD,CAAM,CAC7CtP,IAAAA,EAAnB,GAAImN,CAAA,CAAMmC,CAAN,CAAJ,EAAkCd,CAAlC,EAA2D,GAA3D,GAAmDc,CAAnD,GACIf,CADJ,GACmBA,CAAA,CAAa,IAAb,CAAoB,EADvC,EAEQe,CAFR,CAEc,IAFd,CAGQnC,CAAA,CAAMmC,CAAN,CAHR,CADgE,CAApE,CAJJ,EAaIf,CAbJ,EAeY,IAAAT,KAfZ,EAgBYY,CAhBZ,EAiBY,IAAAc,SAjBZ,EAkBY,IAAAC,GAlBZ,EAmBY,KAnBZ,CAmBoB,IAAAN,EAnBpB,EAoBY,IApBZ,EAqBwBnP,IAAAA,EAAf,GAAA,IAAAwD,MAAA,CAA2B,IAAAA,MAA3B,CAAwC,IAAAkM,EArBjD,CAwBA,OAAQ,KAAAxB,MAAR,CAAqB,CAArB,CAA0B,IAA1B,CAAiCK,CAAjC,CAA8C,GAA9C,EACK,IAAA3E,YAAA,CAAmB,GAAnB,CAAyB,IAAAA,YAAzB,CAA4C,EADjD,GAE2B,CAAtB,CAAA8B,CAAArD,OAAA7G,OAAA;AAA2B6G,CAAAyF,KAA3B,CAAyC,GAAzC,CAA+CzF,CAAAyF,KAA/C,CAA6D,EAFlE,CAtDiD,CAoErD7N,EAAA0P,KAAA1L,UAAA8J,eAAA,CAAkC6B,QAAS,EAAG,CAC1C,MACI,KAAAC,YADJ,EACwB,IAAAA,YAAAjG,YADxB,EAEI,IAAAkG,UAFJ,EAEsB,IAAAA,UAAAC,QAFtB,EAGI,IAAAzL,QAAAmL,GAHJ,EAII,IAAAO,WAJJ,EAIuB,YAJvB,EAKI,IAAAvB,eALJ,EAK2B,MAL3B,EAMI,QAPsC,CAa9C9D,EAAA,CAAS1K,CAAAkL,OAAT,CAAmB,WAAnB,CAAgC,QAAS,EAAG,CACxC,IAAIO,EAAQ,IAAAA,MAERA,EAAApH,QAAAG,cAAA8G,QAAJ,GACIG,CAAAC,MAGA,CAHcD,CAAAC,MAGd,EAH6B,EAG7B,CAAqC,CAArC,CAAID,CAAAC,MAAArL,QAAA,CAAoB,IAAAmD,KAApB,CAAJ,EACIiI,CAAAC,MAAApI,KAAA,CAAiB,IAAAE,KAAjB,CALR,CAHwC,CAA5C,CAYAkH,EAAA,CAAS1K,CAAAkL,OAAT,CAAmB,QAAnB,CAA6B,QAAS,EAAG,CAAA,IACjCO,EAAQ,IAAAA,MADyB,CAEjCuE,EAAgB,IAFiB,CAGjCC,EAAU,CAAA,CAIdxE,EAAArD,OAAA3E,QAAA,CAAqB,QAAS,CAACwG,CAAD,CAAI,CAE1BA,CADJ;AACU+F,CADV,EAE8C,CAF9C,CAEIvE,CAAAC,MAAArL,QAAA,CAAoB2P,CAAAxM,KAApB,CAFJ,GAIIyM,CAJJ,CAIc,CAAA,CAJd,CAD8B,CAAlC,CAQKA,EAAL,EACIxF,CAAA,CAAMgB,CAAAC,MAAN,CAAmBsE,CAAAxM,KAAnB,CAhBiC,CAAzC,CA+BAxD,EAAA+D,MAAAC,UAAAmI,mBAAA,CAAuC+D,QAAS,EAAG,CAAA,IAC3CC,EAAY,IAAAzE,MAAZyE,EAA0B,IAAAzE,MAAA,CAAW,CAAX,CADiB,CAE3C0E,EAAc,IAAAhI,OAAdgI,EAA6B,IAAAhI,OAAA,CAAY,CAAZ,CAA7BgI,EAA+C,EAFJ,CAG3CC,EAAWD,CAAAC,SAHgC,CAI3CC,EAAW,IAAArM,WAAA,CACP,uCADO,CACmCkM,CADnC,CAEP,CAAE1E,MAAO,IAAT,CAFO,CAJgC,CAQ3CE,EAAgB,CACZC,UAAW,IAAAxD,OAAA7G,OADC,CAEZ2M,UAAWkC,CAAA1D,OAAXwB,EAAiCkC,CAAA1D,OAAAnL,OAFrB,CAGZkK,MAAO,IAHK,CAIZ4E,SAAUA,CAJE,CAR2B,CAc3CE,EAAQ,IAAAnI,OAAA,EAAsC,CAAtC,GAAe,IAAAA,OAAA7G,OAAf,CAA0C,QAA1C,CAAqD,UAEjE,OAAK4O,EAAL,CAMkB,KAAlB,GAAIA,CAAJ,CACWE,CAAA,CACH,IAAApM,WAAA,CACI,6CADJ,CAEI0H,CAFJ,CADG,CAKH,IAAA1H,WAAA,CACI,qCADJ;AAEI0H,CAFJ,CANR,CAYwB,CAAxB,CAAI,IAAAD,MAAAnK,OAAJ,CACW,IAAA0C,WAAA,CACH,2CADG,CAC0C0H,CAD1C,CADX,EAOI,IAAA1H,WAAA,CACI,2BADJ,CACkCkM,CADlC,CAC8CI,CAD9C,CAEI5E,CAFJ,CAPJ,EAWI,IAAA1H,WAAA,CACI,kCADJ,CACyCsM,CADzC,CAEI5E,CAFJ,CAXJ,GAgBC2E,CAAA,CAAW,GAAX,CAAiBA,CAAjB,CAA4B,EAhB7B,CAlBA,CACW,IAAArM,WAAA,CACH,qCADG,CACoC0H,CADpC,CAjBoC,CA8DnD3L,EAAA+D,MAAAC,UAAA8H,mBAAA,CAAuC0E,QAAS,EAAG,CAAA,IAC3CC,EAAW,IAAArE,MAAA7K,OADgC,CAE3CmP,EAAW,IAAArE,MAAA9K,OAFgC,CAG3CoM,EAAO,EAEP8C,EAAJ,GACI9C,CAAAvB,MADJ,CACiB,IAAAnI,WAAA,CACT,qCADS,EAEM,CAAX,CAAAwM,CAAA,CAAe,QAAf,CAA0B,UAFrB,EAIT,CACIhF,MAAO,IADX,CAEIkF,MAAO,IAAAvE,MAAA/C,IAAA,CAAe,QAAS,CAAC1B,CAAD,CAAO,CAClC,MAAOA,EAAAmG,eAAA,EAD2B,CAA/B,CAFX;AAKI8C,QAASH,CALb,CAJS,CADjB,CAeIC,EAAJ,GACI/C,CAAAtB,MADJ,CACiB,IAAApI,WAAA,CACT,qCADS,EAEM,CAAX,CAAAyM,CAAA,CAAe,QAAf,CAA0B,UAFrB,EAIT,CACIjF,MAAO,IADX,CAEIkF,MAAO,IAAAtE,MAAAhD,IAAA,CAAe,QAAS,CAAC1B,CAAD,CAAO,CAClC,MAAOA,EAAAmG,eAAA,EAD2B,CAA/B,CAFX,CAKI8C,QAASF,CALb,CAJS,CADjB,CAeA,OAAO/C,EAnCwC,CA6CnD3N,EAAA+D,MAAAC,UAAA6M,gCAAA,CAAoDC,QAAS,EAAG,CAC5D,IAAIC,EAAa,IAAAC,kBAEbD,EAAJ,GAGIA,CAAAtN,QAAA,CAAmB,QAAS,CAACwN,CAAD,CAAO,CACV,KAArB,GAAIA,CAAAC,QAAJ,EACMD,CAAAE,SADN,EACuBF,CAAAE,SAAA5P,OADvB,GAEI0P,CAAA9D,aAAA,CAAkB,MAAlB,CAA0B,UAA1B,CACA,CAAA8D,CAAA9D,aAAA,CAAkB,UAAlB,CAA+B,EAA/B,CAHJ,CAD+B,CAAnC,CASA,CADA4D,CAAA,CAAW,CAAX,CAAAjE,WAAAK,aAAA,CAAsC,MAAtC,CAA8C,MAA9C,CACA,CAAA4D,CAAA,CAAW,CAAX,CAAAjE,WAAAK,aAAA,CACI,YADJ;AAEI,IAAAlJ,WAAA,CACI,wCADJ,CAC8C,CAAEwH,MAAO,IAAT,CAD9C,CAFJ,CAZJ,CAH4D,CAoChEzL,EAAA+D,MAAAC,UAAAoN,sBAAA,CAA0CC,QAAS,CAAC7B,CAAD,CAAK8B,CAAL,CAAc,CAAA,IACzD7F,EAAQ,IADiD,CAEzD8F,EAAgB9F,CAAA+F,mBAAhBD,CAA2CjH,CAAAmH,cAAA,CAAkB,KAAlB,CAFc,CAGzDC,EAAgBpH,CAAAmH,cAAA,CAAkB,IAAlB,CAHyC,CAIzDE,EAAsBrH,CAAAmH,cAAA,CAAkB,GAAlB,CAJmC,CAKzDzM,EAAeyG,CAAAmG,oBAAf5M,CAA2CsF,CAAAmH,cAAA,CAAkB,IAAlB,CAE/CF,EAAApE,aAAA,CAA2B,IAA3B,CAAiCqC,CAAjC,CACA+B,EAAApE,aAAA,CAA2B,MAA3B,CAAmC,QAAnC,CACAoE,EAAApE,aAAA,CACI,YADJ,CAEI1B,CAAAxH,WAAA,CACI,uCADJ,CAC6C,CAAEwH,MAAO,IAAT,CAD7C,CAFJ,CAOA8F,EAAAM,UAAA,CAA0BpG,CAAApH,QAAAG,cAAAgH,6BAAA,CACQC,CADR,CAItBA,EAAAqG,OAAJ;CACIH,CAAAE,UAYA,CAZgCpG,CAAAxH,WAAA,CAC5B,+BAD4B,CACK,CAAEwH,MAAOA,CAAT,CADL,CAYhC,CATAkG,CAAAI,KASA,CAT2B,GAS3B,CATiCT,CASjC,CAPAK,CAAAxE,aAAA,CAAiC,UAAjC,CAA6C,IAA7C,CAOA,CANAwE,CAAAK,QAMA,CALIvG,CAAApH,QAAAG,cAAAyN,mBAKJ,EALsD,QAAS,EAAG,CAC1DxG,CAAAyG,SAAA,EACA5H,EAAA6H,eAAA,CAAmBb,CAAnB,CAAAc,MAAA,EAF0D,CAKlE,CADAV,CAAArH,YAAA,CAA0BsH,CAA1B,CACA,CAAAJ,CAAAlH,YAAA,CAA0BqH,CAA1B,CAbJ,CAkBA1M,EAAA6M,UAAA,CAAyBpG,CAAAxH,WAAA,CACrB,4BADqB,CACS,CAAEwH,MAAOA,CAAT,CADT,CAGzBA,EAAA4G,SAAAC,aAAA,CAA4BtN,CAA5B,CAA0CyG,CAAA4G,SAAAE,WAA1C,CACA9G,EAAA4G,SAAAC,aAAA,CAA4Bf,CAA5B,CAA2C9F,CAAA4G,SAAAE,WAA3C,CAGA5H,EAAA,CAAM,CAAA,CAAN,CAAY3F,CAAAwN,MAAZ,CAAgC5H,CAAhC,CACAD,EAAA,CAAM,CAAA,CAAN,CAAY4G,CAAAiB,MAAZ,CAAiC5H,CAAjC,CA9C6D,CAmDjEF,EAAA,CAAS1K,CAAAyS,OAAT,CAAmB,aAAnB,CAAkC,QAAS,EAAG,CAAA,IACtCzF,EAAQ,IAAAA,MAD8B;AAEtC0F,EAAQ,IAAAC,SAF8B,CAGtClH,EAAQ,IAAAA,MACRuB,EAAJ,EAAa0F,CAAb,EAAsBA,CAAAnR,OAAtB,GACIyL,CAAA4F,KAAA,CAAW,CACPC,KAAM,QADC,CAEP,aAAcpH,CAAAxH,WAAA,CAAiB,2BAAjB,CAFP,CAAX,CASA,CAJI,IAAA6O,IAIJ,EAHI,IAAAA,IAAAF,KAAA,CAAc,aAAd,CAA6B,MAA7B,CAGJ,CAAAF,CAAAjP,QAAA,CAAc,QAAS,CAACwN,CAAD,CAAO,CAAA,IACtB8B,EAAY9B,CAAA+B,YADU,CAEtBhH,EAAOiF,CAAAgC,WAFe,CAGtBC,EAAUjC,CAAAiC,QACVC,EAAAA,CAAQ1H,CAAAxH,WAAA,CACJ,0BADI,CAEJ,CACIwH,MAAOA,CADX,CAEI2H,SAAUpJ,CAAA,CAAUiH,CAAApD,KAAV,CAFd,CAFI,CAORkF,EAAJ,EAAiB/G,CAAjB,GACI+G,CAAAH,KAAA,CAAe,CACXC,KAAM,QADK,CAEX,eAAgBK,CAAA,CAAU,OAAV,CAAoB,MAFzB,CAAf,CAOA,CAHIC,CAGJ,EAFIJ,CAAAH,KAAA,CAAe,YAAf,CAA6BO,CAA7B,CAEJ,CAAAnH,CAAA4G,KAAA,CAAU,aAAV,CAAyB,OAAzB,CARJ,CAX0B,CAA9B,CAVJ,CAJ0C,CAA9C,CAyCAlI,EAAA,CAAS1K,CAAAyS,OAAT,CAAmB,mBAAnB,CAAwC,QAAS,CAACY,CAAD,CAAI,CAAA,IAC7CL,EAAcK,CAAApC,KAAd+B,EAAwBK,CAAApC,KAAA+B,YACxBM;CAAAA,CAAUD,CAAAH,QAAA,CAAY,OAAZ,CAAsB,MAChCF,EAAJ,GACIA,CAAAJ,KAAA,CAAiB,cAAjB,CAAiCU,CAAjC,CACA,CAAIN,CAAAO,IAAJ,EACIP,CAAAO,IAAApG,aAAA,CAA6B,cAA7B,CAA6CmG,CAA7C,CAHR,CAHiD,CAArD,CAaAtT,EAAA+D,MAAAC,UAAAwP,UAAAlQ,KAAA,CAAiC,QAAS,CAACmI,CAAD,CAAQ,CAAA,IAC1CpH,EAAUoH,CAAApH,QAGd,IAFkBA,CAAAG,cAEb8G,QAAL,CAAA,CAJ8C,IAS1CmI,EAAchI,CAAAiI,UAAAC,qBAAA,CAAqC,MAArC,CAAA,CAA6C,CAA7C,CAT4B,CAU1CC,EAAenI,CAAAiI,UAAAC,qBAAA,CAAqC,MAArC,CAV2B,CAW1CE,EAAU,mBAAVA,CAAgCpI,CAAAwC,MAXU,CAY1CqD,EAAU,wBAAVA,CAAqC7F,CAAAwC,MAZK,CAa1C6F,EAAkB,gCAAlBA,CAAqDrI,CAAAwC,MAbX,CAc1C8F,EAAa1P,CAAA0H,MAAAC,KAAb+H,EAAmCtI,CAAAxH,WAAA,CAC/B,iCAD+B,CACI,CAAEwH,MAAOA,CAAT,CADJ,CAdO,CAiB1ChG,EAAoBuE,CAAA,CAAUyB,CAAAxH,WAAA,CAC1B,iCAD0B;AACS,CAC/B8P,WAAYA,CADmB,CADT,CAAV,CAOpBtO,EAAAlE,OAAJ,GACIyS,CAMA,CANe1J,CAAA2J,gBAAA,CACX,4BADW,CAEX,OAFW,CAMf,CAFAD,CAAAE,YAEA,CAF2BzO,CAE3B,CADAuO,CAAAxE,GACA,CADkBqE,CAClB,CAAAJ,CAAA3G,WAAAwF,aAAA,CAAoC0B,CAApC,CAAkDP,CAAlD,CAPJ,CAUAhI,EAAA4G,SAAAlF,aAAA,CAA4B,MAA5B,CAAoC,QAApC,CACA1B,EAAA4G,SAAAlF,aAAA,CACI,YADJ,CAEI1B,CAAAxH,WAAA,CACI,mCADJ,CAEI,CACI8H,MAAO/B,CAAA,CAAU+J,CAAV,CADX,CAEItI,MAAOA,CAFX,CAFJ,CAFJ,CAYA,IACIA,CAAA0I,kBADJ,EAEI1I,CAAA0I,kBAAA,CAAwB,CAAxB,CAFJ,EAGI1I,CAAA0I,kBAAA,CAAwB,CAAxB,CAAAvH,QAHJ,CAIE,CAEMwH,IAAAA,EAAS3I,CAAA0I,kBAAA,CAAwB,CAAxB,CAAAvH,QAATwH,CACAC,EAAoBD,CAAApC,QAExBoC,EAAApC,QAAA,CAAiBsC,QAAS,EAAG,CACzBD,CAAAE,MAAA,CACI,IADJ,CAEIC,KAAAxQ,UAAAtD,MAAAqO,KAAA,CAA2B0F,SAA3B,CAFJ,CAIAhJ,EAAAoF,gCAAA,EACApF;CAAAiJ,oBAAA,CAA0B,CAA1B,CANyB,CAU7BN,EAAAjH,aAAA,CAAoB,MAApB,CAA4B,QAA5B,CACAiH,EAAAjH,aAAA,CACI,YADJ,CAEI1B,CAAAxH,WAAA,CACI,yCADJ,CAC+C,CAAEwH,MAAOA,CAAT,CAD/C,CAFJ,CAQAA,EAAAkJ,eAAA/H,QAAAO,aAAA,CAA0C,MAA1C,CAAkD,QAAlD,CACA1B,EAAAkJ,eAAA/H,QAAAO,aAAA,CACI,YADJ,CAEI1B,CAAAxH,WAAA,CACI,2CADJ,CACiD,CAAEwH,MAAOA,CAAT,CADjD,CAFJ,CAzBF,CAoCEA,CAAAmJ,cAAJ,EACI,CAAC,UAAD,CAAa,UAAb,CAAAnR,QAAA,CAAiC,QAAS,CAAC4L,CAAD,CAAMhO,CAAN,CAAS,CAC3CoK,CAAAmJ,cAAA,CAAoBvF,CAApB,CAAJ,GACI5D,CAAAmJ,cAAA,CAAoBvF,CAApB,CAAAlC,aAAA,CAAsC,UAAtC,CAAkD,IAAlD,CAEA,CADA1B,CAAAmJ,cAAA,CAAoBvF,CAApB,CAAAlC,aAAA,CAAsC,MAAtC,CAA8C,SAA9C,CACA;AAAA1B,CAAAmJ,cAAA,CAAoBvF,CAApB,CAAAlC,aAAA,CACI,YADJ,CAEI1B,CAAAxH,WAAA,CACI,6BADJ,EAES5C,CAAA,CAAI,UAAJ,CAAiB,UAF1B,EAEuC,CAAEoK,MAAOA,CAAT,CAFvC,CAFJ,CAHJ,CAD+C,CAAnD,CAgBJ,GAAAhI,QAAAsL,KAAA,CAAgB6E,CAAhB,CAA8B,QAAS,CAACiB,CAAD,CAAK,CACD,OAAvC,GAAIA,CAAAC,aAAA,CAAgB,aAAhB,CAAJ,EACID,CAAA1H,aAAA,CAAgB,aAAhB,CAA+B,MAA/B,CAFoC,CAA5C,CAOA1B,EAAA2F,sBAAA,CAA4B0C,CAA5B,CAA6CxC,CAA7C,CAGA5G,EAAA,CAASe,CAAT,CAAgB,eAAhB,CAAiC,QAAS,CAAC4H,CAAD,CAAI,CAC1CA,CAAAtJ,KAAA,CAASsJ,CAAAtJ,KAAA7H,QAAA,CAED,YAFC,CAGD,wBAHC,CAGoBuJ,CAAAxH,WAAA,CACjB,4BADiB,CACa,CAAEwH,MAAOA,CAAT,CADb,CAHpB,CAKG,GALH,CADiC,CAA9C,CA9GA,CAJ8C,CAAlD,CAzzBU,CAAb,CAAA,CAs7BC3L,CAt7BD,CAu7BA,UAAS,CAACE,CAAD,CAAI,CAwGV+U,QAASA,EAAa,CAAC7H,CAAD,CAAQ,CAAA,IACtBe,EAAQf,CAAAe,MADc,CAEtBvB,EAASQ,CAAA9E,OAAAsE,OAFa,CAGtBrL,EAAIqL,CAAAnL,OAER,IAAImL,CAAA,CAAOuB,CAAP,CAAJ;AAAsBf,CAAtB,CACI,IAAA,CAAO7L,CAAA,EAAP,CAAA,CACI,IAAIqL,CAAA,CAAOrL,CAAP,CAAJ,GAAkB6L,CAAlB,CACI,MAAO7L,EADX,CAFR,IAOI,OAAO4M,EAZe,CAwK9B+G,QAASA,EAAwB,CAACvJ,CAAD,CAAQpH,CAAR,CAAiB,CAC9C,IAAAoH,MAAA,CAAaA,CACb,KAAA+D,GAAA,CAAUnL,CAAAmL,GACV,KAAAyF,WAAA,CAAkB5Q,CAAA4Q,WAClB,KAAAC,SAAA,CAAgB7Q,CAAA6Q,SAChB,KAAAC,KAAA,CAAY9Q,CAAA8Q,KACZ,KAAAC,UAAA,CAAiB/Q,CAAA+Q,UAN6B,CAoGlDC,QAASA,EAAc,CAACzI,CAAD,CAAU,CAC7B,IAAI0I,CAEA1I,EAAJ,EAAeA,CAAAoF,QAAf,EAAkC1H,CAAAiL,YAAlC,GACID,CAEA,CAFYhL,CAAAiL,YAAA,CAAgB,QAAhB,CAEZ,CADAD,CAAAE,UAAA,CAAoB,OAApB,CAA6B,CAAA,CAA7B,CAAmC,CAAA,CAAnC,CACA,CAAA5I,CAAAoF,QAAA,CAAgBsD,CAAhB,CAHJ,CAH6B,CAqBjCG,QAASA,EAAY,CAACrN,CAAD,CAAS,CAC1B,IAAIoE,EAAcpE,CAAAqD,MAAApH,QAAAG,cAElB,OAAO4D,EAAA/D,QAAAqR,uBAAP,EAC2C,CAAA,CAD3C,GACItN,CAAA/D,QAAAsR,oBADJ,EAEI,CAACvN,CAAA8K,QAFL,EAKK1G,CAAAjB,0BALL,EAMIiB,CAAAjB,0BANJ;AAM6CnD,CAAAsE,OAAAnL,OATnB,CAuB9BqU,QAASA,EAAW,CAAC1I,CAAD,CAAQ,CACxB,IAAIV,EAAcU,CAAA9E,OAAAqD,MAAApH,QAAAG,cAElB,OAAO0I,EAAA2I,OAAP,EAAuBrJ,CAAAsJ,mBAAAC,eAAvB,EACsB,CAAA,CADtB,GACI7I,CAAAgG,QADJ,EAEIuC,CAAA,CAAavI,CAAA9E,OAAb,CALoB,CAhalB,IAYNmC,EAAMvK,CAAAuK,IAZA,CAaND,EAAMC,CAAAC,SAbA,CAcNE,EAAW1K,CAAA0K,SAdL,CAeNsL,EAAYhW,CAAAgW,UAfN,CAgBNrL,EAAQ3K,CAAA2K,MAhBF,CAiBN5I,EAAO/B,CAAA+B,KAMX/B,EAAAiW,OAAA,CAASjW,CAAAkW,WAAAlS,UAAT,CAAiC,CAU7BmS,eAAgBA,QAAS,CAACC,CAAD,CAAS5D,CAAT,CAAgB,CAEjC,IAAA6D,YAAJ,EACI,IAAAC,kBAAA,EAHiC,KAMjCC,EAAK,IAAAC,QAAA,EACLC,EAAAA,CAAM1U,CAAA,CAAKqU,CAAL,CAAa,CAAb,CAEVG,EAAArH,EAAA,EAAQ,IAAAwH,WAAA,CAAkB,IAAAA,WAAlB,CAAoC,CAC5CH,EAAA9G,EAAA,EAAQ,IAAAkH,WAAA,CAAkB,IAAAA,WAAlB,CAAoC,CAE5C,KAAAN,YAAA,CAAmB,IAAAO,SAAAC,KAAA,CACfN,CAAArH,EADe,CACRuH,CADQ,CAEfF,CAAA9G,EAFe,CAERgH,CAFQ,CAGfF,CAAAxL,MAHe,CAGJ,CAHI,CAGA0L,CAHA,CAIfF,CAAAvL,OAJe;AAIH,CAJG,CAICyL,CAJD,CAKfjE,CALe,EAKNA,CAAAsE,aALM,CAAAC,SAAA,CAOL,yBAPK,CAAAnE,KAAA,CAQT,CACFoE,OAAQ,EADN,CARS,CAAAC,IAAA,CAWV,IAAAC,YAXU,CAad,KAAAN,SAAAO,WAAL,EACI,IAAAd,YAAAzD,KAAA,CAAsB,CAClBwE,OAAQ5E,CAAR4E,EAAiB5E,CAAA4E,OADC,CAElB,eAAgB5E,CAAhB,EAAyBA,CAAA6E,YAFP,CAAtB,CA1BiC,CAVZ,CA+C7Bf,kBAAmBA,QAAS,EAAG,CACvB,IAAAD,YAAJ,GACI,IAAAA,YAAAiB,QAAA,EACA,CAAA,OAAO,IAAAjB,YAFX,CAD2B,CA/CF,CAAjC,CA4DArW,EAAAkL,OAAAlH,UAAAuT,qBAAA,CAA0C,CAAA,CAC1C,EAAC,QAAD,CAAW,KAAX,CAAA9T,QAAA,CAA0B,QAAS,CAACD,CAAD,CAAO,CAClCxD,CAAAqL,YAAA,CAAc7H,CAAd,CAAJ,GACIxD,CAAAqL,YAAA,CAAc7H,CAAd,CAAAQ,UAAAuT,qBADJ,CACyD,CAAA,CADzD,CADsC,CAA1C,CAsCAvX,EAAAuE,WAAA,CAAa,CAMTC,cAAe,CAOXsR,mBAAoB,CAOhBxK,QAAS,CAAA,CAPO;AAmBhB+K,YAAa,CAOT/K,QAAS,CAAA,CAPA,CAcTkM,wBAAyB,CAAA,CAdhB,CA6BThF,MAAO,CAEHiF,MAAO,SAFJ,CAIHC,UAAW,CAJR,CAMHZ,aAAc,CANX,CA7BE,CA2CTV,OAAQ,CA3CC,CAnBG,CA2FhBL,eAAgB,CAAA,CA3FA,CAPT,CANN,CAAb,CA8JAf,EAAAhR,UAAA,CAAqC,CAYjC2T,IAAKA,QAAS,CAACtE,CAAD,CAAI,CAAA,IACVuE,EAAY,IADF,CAEVC,EAAUxE,CAAAyE,MAAVD,EAAqBxE,CAAAwE,QAFX,CAGVE,EAAQ,CAAA,CAHE,CAIVC,EAAU,CAAA,CAEd,KAAA/C,WAAAxR,QAAA,CAAwB,QAAS,CAACwU,CAAD,CAAU,CACJ,EAAnC,CAAIA,CAAA,CAAQ,CAAR,CAAA5X,QAAA,CAAmBwX,CAAnB,CAAJ,GACIE,CACA,CADQ,CAAA,CACR,CAAAC,CAAA,CAAqD,CAAA,CAArD,GAAUC,CAAA,CAAQ,CAAR,CAAAlJ,KAAA,CAAgB6I,CAAhB,CAA2BC,CAA3B,CAAoCxE,CAApC,CAFd,CADuC,CAA3C,CAOK0E,EAAL,EAA0B,CAA1B,GAAcF,CAAd,GACIG,CADJ,CACc,IAAAE,KAAA,CAAU7E,CAAA8E,SAAA,CAAc,EAAd,CAAkB,CAA5B,CADd,CAGA,OAAOH,EAhBO,CAZe,CA0CjCE,KAAMA,QAAS,CAACE,CAAD,CAAY,CACvB,IAAI3M,EAAQ,IAAAA,MAER,KAAA2J,UAAJ,EACI,IAAAA,UAAA,CAAegD,CAAf,CAEJ3M,EAAA4M,8BAAA,EAAuCD,CACvC,KAAIE,EAAY7M,CAAA8M,0BAAA,CACZ9M,CAAA4M,8BADY,CAKZ5M;CAAA+M,aAAJ,EACI/M,CAAA+M,aAAAlC,kBAAA,EAIJ,IAAIgC,CAAJ,CAAe,CACX,GAAIA,CAAApD,SAAJ,EAA2B,CAAAoD,CAAApD,SAAA,EAA3B,CACI,MAAO,KAAAgD,KAAA,CAAUE,CAAV,CAEX,IAAIE,CAAAnD,KAAJ,CAEI,MADAmD,EAAAnD,KAAA,CAAeiD,CAAf,CACO,CAAA,CAAA,CANA,CAUf3M,CAAA4M,8BAAA,CAAsC,CAGtB,EAAhB,CAAID,CAAJ,EACI,IAAA3M,MAAAgN,QACA,CADqB,CAAA,CACrB,CAAA,IAAAhN,MAAAiN,cAAAtG,MAAA,EAFJ,EAII,IAAA3G,MAAA4G,SAAAD,MAAA,EAGJ,OAAO,CAAA,CArCgB,CA1CM,CAyMrCpS,EAAA0P,KAAA1L,UAAA2U,QAAA,CAA2BC,QAAS,CAACR,CAAD,CAAYS,CAAZ,CAAyB,CAAA,IACrDC,EAAOD,CAAPC,EAAsB,CACtBC,EAAAA,CAAW,IAAAC,YAAA,EAF0C,KAGrDC,GAAQF,CAAAG,IAARD,CAAuBF,CAAArX,IAAvBuX,EAAuCH,CAAvCG,CAA8Cb,CAHO,CAIrDe,EAASJ,CAAAG,IAATC,CAAwBF,CAJ6B,CAKrDG,EAASL,CAAArX,IAAT0X,CAAwBH,CAL6B,CAMrDI,EAAOF,CAAPE,CAAgBD,CAEJ,EAAhB,CAAIhB,CAAJ,EAAqBgB,CAArB,CAA8BL,CAAAO,QAA9B,EACIF,CACA,CADSL,CAAAO,QACT,CAAAH,CAAA,CAASC,CAAT,CAAkBC,CAFtB,EAGuB,CAHvB,CAGWjB,CAHX,EAG4Be,CAH5B,CAGqCJ,CAAAQ,QAHrC,GAIIJ,CACA,CADSJ,CAAAQ,QACT,CAAAH,CAAA,CAASD,CAAT,CAAkBE,CALtB,CAOA,KAAAG,YAAA,CAAiBJ,CAAjB,CAAyBD,CAAzB,CAfyD,CAiC7DnZ,EAAA+D,MAAAC,UAAAyV,kBAAA;AAAsCC,QAAS,CAACC,CAAD,CAAanB,CAAb,CAA2B,CAAA,IAClEoB,EAAqB,IAAAvV,QAAAG,cAAAsR,mBAAAO,YAErBwD,EAAAA,CAAsBrB,CAAtBqB,EAAsCF,CAItCE,EAAAjN,QADJ,EAEIiN,CAAAjN,QAAAwF,MAFJ,GAIIyH,CAAAjN,QAAAwF,MAAA,EAEA,CAAIwH,CAAApC,wBAAJ,EACIqC,CAAAC,IAAA,CAAwB,CAAEC,QAAS,MAAX,CAAxB,CAPR,CAUIH,EAAAtO,QAAJ,GAEQ,IAAAkN,aASJ,EARI,IAAAA,aAAAlC,kBAAA,EAQJ,CALAqD,CAAAxD,eAAA,CAA0ByD,CAAAxD,OAA1B,CAAqD,CACjDgB,OAAQwC,CAAApH,MAAAiF,MADyC,CAEjDJ,YAAauC,CAAApH,MAAAkF,UAFoC,CAGjDZ,aAAc8C,CAAApH,MAAAsE,aAHmC,CAArD,CAKA,CAAA,IAAA0B,aAAA,CAAoBmB,CAXxB,CAhBsE,CAyC1E3Z,EAAAoO,MAAApK,UAAAgW,UAAA,CAA8BC,QAAS,EAAG,CACtC,IAAIxO,EAAQ,IAAArD,OAAAqD,MAEZ,IAAK,IAAAoK,OAAL,CAGQpK,CAAAwD,QAAJ,EACIxD,CAAAwD,QAAAiL,KAAA,CAAmB,CAAnB,CAJR,KACI,KAAAC,YAAA,EAUA;IAAAxN,QAAJ,EACIlB,CAAAgO,kBAAA,CAAwB,IAAA9M,QAAxB,CAGJlB,EAAA2O,iBAAA,CAAyB,IACzB,OAAO,KAnB+B,CAoC1Cpa,EAAA+D,MAAAC,UAAAqW,uBAAA,CAA2CC,QAAS,CAACC,CAAD,CAAO,CAAA,IAEnDnS,EADQqD,IACCrD,OAF0C,CAGnDoS,EAFQ/O,IAEG2O,iBAHwC,CAInDK,EAAgBD,CAAhBC,EAA4B1F,CAAA,CAAcyF,CAAd,CAA5BC,EAAuD,CAJJ,CAKnDC,EAAYF,CAAZE,EAAwBF,CAAApS,OAAAsE,OAL2B,CAMnDiO,EALQlP,IAKKrD,OAAbuS,EALQlP,IAKqBrD,OAAA,CALrBqD,IAKkCrD,OAAA7G,OAAb,CAAmC,CAAnC,CANsB,CAOnDqZ,EAAYD,CAAZC,EAA0BD,CAAAjO,OAA1BkO,EACYD,CAAAjO,OAAA,CAAkBiO,CAAAjO,OAAAnL,OAAlB,CAA6C,CAA7C,CAKhB,IAAK,CAAA6G,CAAA,CAAO,CAAP,CAAL,EAAmBsE,CAAAtE,CAAA,CAAO,CAAP,CAAAsE,OAAnB,CACI,MAAO,CAAA,CAGX,IAAK8N,CAAL,CAeI,IARAK,CAQKC,CARO1S,CAAA,CAAOoS,CAAApS,OAAA6F,MAAP,EAAgCsM,CAAA,CAAO,CAAP,CAAY,EAA5C,EAQPO,CAPLA,CAOKA,CAPMJ,CAAA,CAAUD,CAAV,EAA2BF,CAAA,CAAO,CAAP,CAAY,EAAvC,EAONO,CANAA,CAAAA,CAMAA,EANYD,CAMZC,GAJDA,CAICA,CAJUD,CAAAnO,OAAA,CAAiB6N,CAAA,CAAO,CAAP,CAAWM,CAAAnO,OAAAnL,OAAX,CAAqC,CAAtD,CAIVuZ,EAAAA,CAAAA,CAAL,CACI,MAAO,CAAA,CADX,CAfJ,IAGIA,EAAA,CAAWP,CAAA,CAAOnS,CAAA,CAAO,CAAP,CAAAsE,OAAA,CAAiB,CAAjB,CAAP,CAA6BkO,CAkB5C,OAAIhF,EAAA,CAAYkF,CAAZ,CAAJ,EAGID,CAUO,CAVKC,CAAA1S,OAUL,CATHqN,CAAA,CAAaoF,CAAb,CAAJ;AAzCQpP,IA0CJ2O,iBADJ,CAC6BG,CAAA,CACrBM,CAAAnO,OAAA,CAAiBmO,CAAAnO,OAAAnL,OAAjB,CAA2C,CAA3C,CADqB,CAErBsZ,CAAAnO,OAAA,CAAiB,CAAjB,CAHR,CAzCQjB,IA+CJ2O,iBANJ,CAM6BU,CAGtB,CAlDCrP,IAkDD4O,uBAAA,CAA6BE,CAA7B,CAbX,EAiBOO,CAAAd,UAAA,EAvDgD,CAqE3Dha,EAAAkL,OAAAlH,UAAA+W,yBAAA,CAA8CC,QAAS,EAAG,CAAA,IAClDR,EAAW,IAAA/O,MAAA2O,iBADuC,CAElDa,EAAQ,CAACT,CAAD,EAAaA,CAAApS,OAAb,IAAkC,IAAlC,CACJ2M,CAAA,CAAcyF,CAAd,CADI,CAEJ,CAGR,IAFI9N,CAEJ,CAFa,IAAAA,OAEb,CAAY,CACR,IADQ,IACCrL,EAAI4Z,CADL,CACYzZ,EAAMkL,CAAAnL,OAA1B,CAAyCF,CAAzC,CAA6CG,CAA7C,CAAkD,EAAEH,CAApD,CACI,GAAK,CAAAuU,CAAA,CAAYlJ,CAAA,CAAOrL,CAAP,CAAZ,CAAL,CACI,MAAOqL,EAAA,CAAOrL,CAAP,CAAA2Y,UAAA,EAGf,KAAA,CAAyB,CAAzB,EAAoBkB,CAApB,CAA4B,EAAEA,CAA9B,CACI,GAAK,CAAAtF,CAAA,CAAYlJ,CAAA,CAAOwO,CAAP,CAAZ,CAAL,CACI,MAAOxO,EAAA,CAAOwO,CAAP,CAAAlB,UAAA,EARP,CAYZ,MAAO,CAAA,CAnB+C,CAkC1Dha,EAAA+D,MAAAC,UAAAmX,wBAAA,CAA4CC,QAAS,CAACC,CAAD,CAAO,CAAA,IAEpDR,CAFoD,CAGpDC,CAHoD,CAKpDN,EAJQ/O,IAIG2O,iBALyC,CAOpDQ,GADAD,CACAC,CANQnP,IAKKrD,OACbwS;AANQnP,IAKqBrD,OAAA,CALrBqD,IAKkCrD,OAAA7G,OAAb,CAAmC,CAAnC,CAC7BqZ,GAA0BD,CAAAjO,OAA1BkO,EACYD,CAAAjO,OAAA,CAAkBiO,CAAAjO,OAAAnL,OAAlB,CAA6C,CAA7C,CAGhB,IAAK6Y,CAVO3O,IAUP2O,iBAAL,CAII,MAHAS,EAGO,CAHKQ,CAAA,CAXJ5P,IAWYrD,OAAR,EAXJqD,IAW4BrD,OAAA,CAAa,CAAb,CAAxB,CAA2CuS,CAGhD,CAAA,CAFPG,CAEO,CAFIO,CAAA,CACNR,CADM,EACOA,CAAAnO,OADP,EAC2BmO,CAAAnO,OAAA,CAAiB,CAAjB,CAD3B,CACkDkO,CACtD,EAAWE,CAAAd,UAAA,EAAX,CAAkC,CAAA,CAG7Ca,EAAA,CAjBYpP,IAiBArD,OAAA,CAAaoS,CAAApS,OAAA6F,MAAb,EAAsCoN,CAAA,CAAQ,EAAR,CAAY,CAAlD,EAEZ,IAAKR,CAAAA,CAAL,CACI,MAAO,CAAA,CAhRPS,KAAAA,EAAcC,QAAdD,CACAE,CADAF,CAIAja,EAiRiCwZ,CAjR7BnO,OAAAnL,OAER,IAAoBxB,IAAAA,EAApB,GA+Q2Bya,CA/QvBiB,MAAJ,EAAiD1b,IAAAA,EAAjD,GA+Q2Bya,CA/QMkB,MAAjC,CACI,CAAA,CAAA,IAAA,EADJ,KAAA,CAGA,IAAA,CAAOra,CAAA,EAAP,CAAA,CACIma,CACA,CA0QiCX,CA3QxBnO,OAAA,CAAcrL,CAAd,CACT,CAAqBtB,IAAAA,EAArB,GAAIyb,CAAAC,MAAJ,EAAmD1b,IAAAA,EAAnD,GAAkCyb,CAAAE,MAAlC,GAGAC,CAIA,EAmQuBnB,CAvQXiB,MAIZ,CAJ0BD,CAAAC,MAI1B,GAmQuBjB,CAtQdiB,MAGT,CAHuBD,CAAAC,MAGvB,EAmQ4CG,CAnQ5C,EAmQuBpB,CArQdkB,MAET,CAFuBF,CAAAE,MAEvB,GAmQuBlB,CApQdkB,MACT,CADuBF,CAAAE,MACvB,EADmD,CACnD,CAAIC,CAAJ,CAAeL,CAAf,GACIA,CACA,CADcK,CACd,CAAAE,CAAA,CAAQxa,CAFZ,CAPA,CAYJ,EAAA,CAAiBtB,IAAAA,EAAjB,GAAO8b,CAAP;AA8PqChB,CA9PPnO,OAAA,CAAcmP,CAAd,CAjB9B,CAiRA,GAAKf,CAAAA,CAAL,CACI,MAAO,CAAA,CAIX,IAAIrF,CAAA,CAAaoF,CAAb,CAAJ,CAII,MAFAC,EAAAd,UAAA,EAEA,CADA8B,CACA,CApCQrQ,IAmCW0P,wBAAA,CAA8BE,CAA9B,CACnB,CAAKS,CAAL,CAMOA,CANP,EAEItB,CAAAR,UAAA,EACO,CAAA,CAAA,CAHX,CAUJc,EAAAd,UAAA,EACA,OAAOc,EAAA1S,OAAA2S,yBAAA,EAhDiD,CA8D5D/a,EAAA+D,MAAAC,UAAA+X,+BAAA,CAAmDC,QAAS,CAACX,CAAD,CAAO,CAAA,IAC3Db,EAAW,IAAAJ,iBADgD,CAE3DkB,EAAcC,QAF6C,CAG3DU,CAEJ,IAAuBlc,IAAAA,EAAvB,GAAIya,CAAAiB,MAAJ,EAAuD1b,IAAAA,EAAvD,GAAoCya,CAAAkB,MAApC,CACI,MAAO,CAAA,CAEX,KAAAtT,OAAA3E,QAAA,CAAoB,QAAS,CAAC2E,CAAD,CAAS,CAC9BqN,CAAA,CAAarN,CAAb,CAAJ,EAGAA,CAAAsE,OAAAjJ,QAAA,CAAsB,QAAS,CAACyJ,CAAD,CAAQ,CACnC,GAAoBnN,IAAAA,EAApB,GAAImN,CAAAwO,MAAJ,EAAiD3b,IAAAA,EAAjD,GAAiCmN,CAAAuO,MAAjC,EACIvO,CADJ,GACcsN,CADd,CAAA,CADmC,IAK/B0B,EAAYhP,CAAAwO,MAAZQ,CAA0B1B,CAAAkB,MALK,CAM/B3Q,EAAQtJ,IAAA0a,IAAA,CAASjP,CAAAuO,MAAT,CAAuBjB,CAAAiB,MAAvB,CANuB,CAO/BE,EAAWla,IAAA0a,IAAA,CAASD,CAAT,CAAXP,CAAiCla,IAAA0a,IAAA,CAASD,CAAT,CAAjCP;AACI5Q,CADJ4Q,CACY5Q,CADZ4Q,CACoB,CAGpBvT,EAAAiE,MAAA+P,SAAJ,GACIF,CADJ,EACkB,EADlB,CAKI,GAAY,CAAZ,CAAAA,CAAA,EAAiBb,CAAjB,EAAqC,CAArC,CAAyBa,CAAzB,EAA2Cb,CAAAA,CAA3C,EACW,CADX,CACAM,CADA,EAEA/F,CAAA,CAAY1I,CAAZ,CAFA,CADJ,EAQIyO,CARJ,CAQeL,CARf,GASIA,CACA,CADcK,CACd,CAAAM,CAAA,CAAY/O,CAVhB,CAdA,CADmC,CAAvC,CAJkC,CAAtC,CAkCA,OAAO+O,EAAA,CAAYA,CAAAjC,UAAA,EAAZ,CAAoC,CAAA,CA1CoB,CAoDnEha,EAAA+D,MAAAC,UAAAqY,eAAA,CAAmCC,QAAS,EAAG,CACvC,IAAAnI,kBAAJ,EAA8B,IAAAA,kBAAA,CAAuB,CAAvB,CAA9B,GACI,IAAAA,kBAAA,CAAuB,CAAvB,CAAAvH,QAAAoF,QAAA,EACA,CAAA,IAAA0C,oBAAA,CAAyB,CAAzB,CAFJ,CAD2C,CAc/C1U,EAAA+D,MAAAC,UAAAuY,eAAA,CAAmCC,QAAS,EAAG,CAC3C,IACIzL,EADQtF,IACKuF,kBAEbD,EAAJ,EAHYtF,IAGMgR,kBAAlB,GAEI1L,CAAAtN,QAAA,CAAmB,QAAS,CAACoR,CAAD,CAAK,CAC7B,GAAqB,sBAArB,GAAIA,CAAA6H,UAAJ,EAA+C7H,CAAA8H,WAA/C,CACI9H,CAAA8H,WAAA,EAFyB,CAAjC,CASA,CAdQlR,IAURmR,sBAIA;AAJ8B,CAI9B,CAdQnR,IAYRgR,kBAAAI,SAAA,EAEA,CAdQpR,IAcRiI,UAAAtB,MAAA,EAXJ,CAJ2C,CA8B/CpS,EAAA+D,MAAAC,UAAA0Q,oBAAA,CAAwCoI,QAAS,CAAC1a,CAAD,CAAK,CAAA,IAC9C2a,EAAW,IAAA/L,kBAAX+L,EAAqC,IAAA/L,kBAAA,CAAuB5O,CAAvB,CADS,CAE9C4a,EACI,IAAAhM,kBADJgM,EAEI,IAAAhM,kBAAA,CAAuB,IAAA4L,sBAAvB,CAJ0C,CAK9CK,CAEJ,IACIF,CADJ,EAEyB,KAFzB,GAEIA,CAAA7L,QAFJ,GAGMC,CAAA4L,CAAA5L,SAHN,EAG2B5P,CAAAwb,CAAA5L,SAAA5P,OAH3B,EAIE,CAEE0b,CAAA,CAAqB,CAAE7K,CAAAA,CACnB,IAAAC,SAAAsB,qBAAA,CAAmC,GAAnC,CAAA,CAAwC,CAAxC,CADmBvB,EAC2B,EAD3BA,OAMnB2K,EAAA3K,MAAJ,EAAsB6K,CAAtB,EACIF,CAAA3K,MAAA,EAEJ,IAAI4K,CAAJ,EAAsBA,CAAAL,WAAtB,CACIK,CAAAL,WAAA,EAEJ,IAAII,CAAAG,YAAJ,CACIH,CAAAG,YAAA,EAEJ,KAAAN,sBAAA,CAA6Bxa,CAC7B,OAAO,CAAA,CAlBT,CAXgD,CAwCtDpC,EAAA+D,MAAAC,UAAAmZ,wBAAA;AAA4CC,QAAS,EAAG,CACpD,IACI/b,CAEJ,IAHYoK,IAGRuF,kBAAJ,CAEI,IADA3P,CACA,CALQoK,IAIJuF,kBAAAzP,OACJ,CAAOF,CAAA,EAAP,EACQ,CANAoK,IAMAiJ,oBAAA,CAA0BrT,CAA1B,CADR,CAAA,EANgD,CAyBxDrB,EAAA+D,MAAAC,UAAAqZ,6BAAA,CAAiDC,QAAS,CAAClb,CAAD,CAAK,CAC3D,IAAImb,EAAU,IAAA3I,cAAA2I,QAGVA,EAAA,CAAQ,IAAAC,+BAAR,CAAJ,EACID,CAAA,CAAQ,IAAAC,+BAAR,CAAAC,SAAA,CACI,IAAAC,0BADJ,EACsC,CADtC,CAKJ,KAAAF,+BAAA,CAAsCpb,CACtC,OAAImb,EAAA,CAAQnb,CAAR,CAAJ,EACI,IAAAqX,kBAAA,CAAuB8D,CAAA,CAAQnb,CAAR,CAAA0Q,IAAvB,CAAwCyK,CAAA,CAAQnb,CAAR,CAAxC,CAGO,CAFP,IAAAsb,0BAEO,CAF0BH,CAAA,CAAQnb,CAAR,CAAAub,MAE1B,CADPJ,CAAA,CAAQnb,CAAR,CAAAqb,SAAA,CAAqB,CAArB,CACO,CAAA,CAAA,CAJX,EAMO,CAAA,CAjBoD,CA+B/Dzd,EAAA+D,MAAAC,UAAA4Z,oBAAA;AAAwCC,QAAS,CAACzb,CAAD,CAAK,CAAA,IAC9CsQ,EAAQ,IAAAoL,OAAAnL,SADsC,CAE9CoL,EAAQ,IAAAC,wBAEZ,OAAItL,EAAA,CAAMtQ,CAAN,CAAJ,EACQsQ,CAAA,CAAMqL,CAAN,CAeG,EAdH/H,CAAA,CACItD,CAAA,CAAMqL,CAAN,CAAA/K,YAAApG,QADJ,CAEI,UAFJ,CAcG,CARkB7M,IAAAA,EAQlB,GARH2S,CAAA,CAAMtQ,CAAN,CAAA6b,OAQG,EAPHvL,CAAA,CAAMtQ,CAAN,CAAA6b,OAOG,CAPgB,CAOhB,GAPsB,IAAAH,OAAAI,YAOtB,EANH,IAAAJ,OAAAK,OAAA,CAAmB,CAAnB,CAAuBzL,CAAA,CAAMtQ,CAAN,CAAA6b,OAAvB,CAA0C,IAAAH,OAAAI,YAA1C,CAMG,CAHP,IAAAF,wBAGO,CAHwB5b,CAGxB,CAFP,IAAAqX,kBAAA,CAAuB/G,CAAA,CAAMtQ,CAAN,CAAA6Q,WAAvB,CAA6CP,CAAA,CAAMtQ,CAAN,CAAA4Q,YAA7C,CAEO,CADPgD,CAAA,CAAUtD,CAAA,CAAMtQ,CAAN,CAAA4Q,YAAApG,QAAV,CAAyC,WAAzC,CACO,CAAA,CAAA,CAhBX,EAkBO,CAAA,CAtB2C,CAgCtD5M,EAAA+D,MAAAC,UAAAoa,6BAAA,CAAiDC,QAAS,EAAG,CAezDC,QAASA,EAAgB,CAAC9O,CAAD,CAAK+O,CAAL,CAAala,CAAb,CAAsB,CAC3C,MAAO,KAAI2Q,CAAJ,CAA6BvJ,CAA7B,CAAoCd,CAAA,CAAM,CAC7CsK,WAAYsJ,CADiC,CAAN,CAExC,CAAE/O,GAAIA,CAAN,CAFwC,CAE5BnL,CAF4B,CAApC,CADoC,CAfU;AACzD,IAAIoH,EAAQ,IA6BZA,EAAA8M,0BAAA,CAAkC,CAI9B+F,CAAA,CAAiB,OAAjB,CAA0B,EAA1B,CAJ8B,CAO9BA,CAAA,CAAiB,QAAjB,CAA2B,CAEvB,CAAC,CAAC,EAAD,CAAK,EAAL,CAAD,CAAW,QAAS,CAACzG,CAAD,CAAU,CACtB2G,CAAAA,CAAoB,EAApBA,GAAQ3G,CAEZ,OAAKpM,EAAA4O,uBAAA,CAA6BmE,CAA7B,CAAL,CAIO,CAAA,CAJP,CAEW,IAAArJ,KAAA,CAAUqJ,CAAA,CAAQ,CAAR,CAAa,EAAvB,CALe,CAA9B,CAFuB,CAYvB,CAAC,CAAC,EAAD,CAAK,EAAL,CAAD,CAAW,QAAS,CAAC3G,CAAD,CAAU,CACtBwD,CAAAA,CAAmB,EAAnBA,GAAOxD,CAAX,KACI4G,EAAahT,CAAApH,QAAAG,cAAAsR,mBAEjB,IAAI2I,CAAAC,KAAJ,EAA2C,WAA3C,GAAuBD,CAAAC,KAAvB,CAEI,MAAKjT,EAAA4O,uBAAA,CAA6BgB,CAA7B,CAAL,CAGO,CAAA,CAHP,CACW,IAAAlG,KAAA,CAAUkG,CAAA,CAAO,CAAP,CAAY,EAAtB,CAUf5P,EAAA,CALsBA,CAAA2O,iBAAAuE,EACdlT,CAAA2O,iBAAAhS,OAAAmP,qBADcoH,CAElB,gCAFkBA,CAGlB,yBAEJ,CAAA,CAAuBtD,CAAvB,CACA,OAAO,CAAA,CAlBmB,CAA9B,CAZuB,CAiCvB,CAAC,CAAC,EAAD,CAAK,EAAL,CAAD,CAAW,QAAS,EAAG,CACf5P,CAAA2O,iBAAJ;AACI3O,CAAA2O,iBAAAwE,eAAA,CAAsC,OAAtC,CAFe,CAAvB,CAjCuB,CAA3B,CAsCG,CAECzJ,KAAMA,QAAS,CAAC0J,CAAD,CAAM,CAAA,IACbjT,EAAYH,CAAArD,OAAA7G,OADC,CAEbF,EAAU,CAAN,CAAAwd,CAAA,CAAU,CAAV,CAAcjT,CAGtB,IAAU,CAAV,CAAIiT,CAAJ,CAGI,IAFA,OAAOpT,CAAA2O,iBAEP,CAAO/Y,CAAP,CAAWuK,CAAX,CAAA,CAAsB,CAElB,GADAkT,CACA,CADMrT,CAAArD,OAAA,CAAa/G,CAAb,CAAA0Z,yBAAA,EACN,CACI,MAAO+D,EAEX,GAAEzd,CALgB,CAH1B,IAYI,KAAA,CAAOA,CAAA,EAAP,CAAA,CAQI,GAPAoK,CAAA2O,iBAMA0E,CANyBrT,CAAArD,OAAA,CAAa/G,CAAb,CAAAqL,OAAA,CACrBjB,CAAArD,OAAA,CAAa/G,CAAb,CAAAqL,OAAAnL,OADqB,CACW,CADX,CAMzBud,CAAAA,CAAAA,CAAMrT,CAAArD,OAAA,CAAa/G,CAAb,CAAA0Z,yBAAA,EACN,CACI,MAAO+D,EA1BF,CAFtB,CAkCC1J,UAAWA,QAAS,EAAG,CACf3J,CAAAwD,QAAJ,EACIxD,CAAAwD,QAAAiL,KAAA,CAAmB,CAAnB,CAEJ,QAAOzO,CAAA2O,iBAJY,CAlCxB,CAtCH,CAP8B,CAwF9BkE,CAAA,CAAiB,WAAjB,CAA8B,CAE1B,CAAC,CAAC,CAAD,CAAI,EAAJ,CAAQ,EAAR,CAAY,EAAZ,CAAgB,EAAhB,CAAD,CAAsB,QAAS,CAACzG,CAAD,CAAUxE,CAAV,CAAa,CACxC,MAAO,KAAA6E,KAAA,CACS,CADC,GACbL,CADa,EACIxE,CAAA8E,SADJ,EAED,EAFC,GAEbN,CAFa;AAEiB,EAFjB,GAEKA,CAFL,CAGZ,EAHY,CAGR,CAHF,CADiC,CAA5C,CAF0B,CAS1B,CAAC,CAAC,EAAD,CAAK,EAAL,CAAD,CAAW,QAAS,EAAG,CACnBpM,CAAAsT,QAAA,EADmB,CAAvB,CAT0B,CAA9B,CAYG,CAEC7J,SAAUA,QAAS,EAAG,CAClB,MAAOzJ,EAAAuT,gBAAP,EAAgCvT,CAAAuT,gBAAAlM,IADd,CAFvB,CAKCqC,KAAMA,QAAS,EAAG,CACd1J,CAAAgO,kBAAA,CACIhO,CAAAuT,gBAAAlM,IADJ,CAC+BrH,CAAAuT,gBAD/B,CADc,CALnB,CAZH,CAxF8B,CAiH9BV,CAAA,CAAiB,WAAjB,CAA8B,CAE1B,CAAC,CAAC,EAAD,CAAK,EAAL,CAAD,CAAW,QAAS,EAAG,CAMnB,IANmB,IACfjd,EAAIoK,CAAAmR,sBAAJvb,EAAmC,CADpB,CAEf4d,EAAa,CAAA,CAIjB,CAAO5d,CAAA,EAAP,CAAA,CACI,GAAIoK,CAAAiJ,oBAAA,CAA0BrT,CAA1B,CAAJ,CAAkC,CAC9B4d,CAAA,CAAa,CAAA,CACb,MAF8B,CAKtC,GAAIA,CAAJ,CAEI,MADAxT,EAAA0R,wBAAA,EACO,CAAA,CAAA,CAdQ,CAAvB,CAF0B,CAoB1B,CAAC,CAAC,EAAD,CAAK,EAAL,CAAD,CAAW,QAAS,EAAG,CAMnB,IALA,IACI8B,EAAa,CAAA,CADjB,CAMQ5d,GANoBoK,CAAAmR,sBAMpBvb,EANmD,CAMnDA,EAA4B,CADpC,CAEIA,CAFJ,CAEQoK,CAAAuF,kBAAAzP,OAFR,CAGI,EAAEF,CAHN,CAKI,GAAIoK,CAAAiJ,oBAAA,CAA0BrT,CAA1B,CAAJ,CAAkC,CAC9B4d,CAAA,CAAa,CAAA,CACb,MAF8B,CAKtC,GAAIA,CAAJ,CAEI,MADAxT,EAAAiJ,oBAAA,CAA0B,CAA1B,CACO;AAAA,CAAA,CAlBQ,CAAvB,CApB0B,CA0C1B,CAAC,CAAC,EAAD,CAAK,EAAL,CAAD,CAAW,QAAS,EAAG,CACnBW,CAAA,CACI5J,CAAAuF,kBAAA,CAAwBvF,CAAAmR,sBAAxB,CADJ,CADmB,CAAvB,CA1C0B,CAA9B,CA+CG,CAGC1H,SAAUA,QAAS,EAAG,CAClB,MACIzJ,EAAAyT,YADJ,EAEI,EACIzT,CAAApH,QAAA2D,UADJ,EAEwC,CAAA,CAFxC,GAEIyD,CAAApH,QAAA2D,UAAAsD,QAFJ,CAHc,CAHvB,CAaC6J,KAAMA,QAAS,CAACiD,CAAD,CAAY,CACvB3M,CAAA2O,iBAAA,CAAyB,IACzB3O,EAAA4Q,eAAA,EAGgB,EAAhB,CAAIjE,CAAJ,EACI3M,CAAA0R,wBAAA,EANmB,CAb5B,CAuBC/H,UAAWA,QAAS,EAAG,CACnB3J,CAAA8Q,eAAA,EADmB,CAvBxB,CA/CH,CAjH8B,CA6L9B+B,CAAA,CAAiB,SAAjB,CAA4B,CAExB,CAAC,CAAC,EAAD,CAAK,EAAL,CAAS,EAAT,CAAa,EAAb,CAAD,CAAmB,QAAS,CAACzG,CAAD,CAAU,CAClCpM,CAAA,CAAkB,EAAZ,GAAAoM,CAAA,EAA8B,EAA9B,GAAkBA,CAAlB,CAAmC,OAAnC,CAA6C,OAAnD,CAAA,CAA4D,CAA5D,CAAAc,QAAA,CACuB,EAAV,CAAAd,CAAA,CAAgB,EAAhB,CAAoB,CADjC,CADkC,CAAtC,CAFwB,CAQxB,CAAC,CAAC,CAAD,CAAD,CAAM,QAAS,CAACA,CAAD,CAAUxE,CAAV,CAAa,CAIxB5H,CAAA0T,cAAA,CAAoB1T,CAAA2T,sBAApB,CAAA3B,SAAA,CAA0D,CAA1D,CACA,IACIpK,CAAA8E,SADJ,EACmBiH,CAAA3T,CAAA2T,sBADnB;AAEKjH,CAAA9E,CAAA8E,SAFL,EAEmB1M,CAAA2T,sBAFnB,CAMI,MAFA3T,EAAA4T,QAAA,EAEO,CAAA,IAAAnH,KAAA,CAAU7E,CAAA8E,SAAA,CAAc,EAAd,CAAkB,CAA5B,CAEX1M,EAAA2T,sBAAA,EAA+B/L,CAAA8E,SAAA,CAAc,EAAd,CAAkB,CACjD/D,EAAA,CAAS3I,CAAA0T,cAAA,CAAoB1T,CAAA2T,sBAApB,CACT3T,EAAAgO,kBAAA,CAAwBrF,CAAAtB,IAAxB,CAAoCsB,CAApC,CACAA,EAAAqJ,SAAA,CAAgB,CAAhB,CAhBwB,CAA5B,CARwB,CA4BxB,CAAC,CAAC,EAAD,CAAK,EAAL,CAAD,CAAW,QAAS,EAAG,CACnBpI,CAAA,CACI5J,CAAA0T,cAAA,CAAoB1T,CAAA2T,sBAApB,CAAAxS,QADJ,CADmB,CAAvB,CA5BwB,CAA5B,CAiCG,CAECsI,SAAUA,QAAS,EAAG,CAClB,MACIzJ,EAAA4T,QADJ,EAEI5T,CAAA0T,cAFJ,EAGmC,CAHnC,GAGI1T,CAAA0T,cAAA5d,OAJc,CAFvB,CAWC4T,KAAMA,QAAS,CAACiD,CAAD,CAAY,CAAA,IACnBkH,EAAS7T,CAAA0T,cAAA,CAAoB,CAApB,CADU,CAEnBJ,EAAUtT,CAAA0T,cAAA,CAAoB,CAApB,CAFS,CAGnBI,EAA4B,CAAZ,CAAAnH,CAAA,CAAgBkH,CAAhB,CAAyBP,CAE7CtT,EAAA0T,cAAA1b,QAAA,CAA4B,QAAS,CAAC2Q,CAAD,CAAS/S,CAAT,CAAY,CAC7C+S,CAAAxH,QAAAO,aAAA,CAA4B,UAA5B;AAAyC,EAAzC,CACAiH,EAAAxH,QAAAO,aAAA,CAA4B,MAA5B,CAAoC,QAApC,CACAiH,EAAAxH,QAAAO,aAAA,CACI,YADJ,CAEI1B,CAAAxH,WAAA,CACI,uBADJ,EAC+B5C,CAAA,CAAI,KAAJ,CAAY,IAD3C,EAEI,CAAEoK,MAAOA,CAAT,CAFJ,CAFJ,CAH6C,CAAjD,CAYAA,EAAAgO,kBAAA,CAAwB8F,CAAAzM,IAAxB,CAA2CyM,CAA3C,CACAA,EAAA9B,SAAA,CAAuB,CAAvB,CACAhS,EAAA2T,sBAAA,CAA0C,CAAZ,CAAAhH,CAAA,CAAgB,CAAhB,CAAoB,CAnB3B,CAX5B,CAjCH,CA7L8B,CAiQ9BkG,CAAA,CAAiB,eAAjB,CAAkC,CAE9B,CAAC,CAAC,EAAD,CAAK,EAAL,CAAS,EAAT,CAAa,EAAb,CAAD,CAAmB,QAAS,CAACzG,CAAD,CAAU,CAC9BO,CAAAA,CAAyB,EAAb,GAACP,CAAD,EAA+B,EAA/B,GAAmBA,CAAnB,CAAsC,EAAtC,CAA0C,CAG1D,IACK,CAAApM,CAAA4R,6BAAA,CACG5R,CAAA+R,+BADH,CAC0CpF,CAD1C,CADL,CAKI,MAAO,KAAAF,KAAA,CAAUE,CAAV,CATuB,CAAtC,CAF8B,CAe9B,CAAC,CAAC,EAAD,CAAK,EAAL,CAAD,CAAW,QAAS,EAAG,CAEqB,CAAxC,GAAI3M,CAAAiS,0BAAJ,EACIrI,CAAA,CACI5J,CAAAmJ,cAAA2I,QAAA,CACI9R,CAAA+R,+BADJ,CAAA5Q,QADJ,CAHe,CAAvB,CAf8B,CAAlC;AAyBG,CAECsI,SAAUA,QAAS,EAAG,CAClB,MACIzJ,EAAAmJ,cADJ,EAEInJ,CAAAmJ,cAAA2I,QAFJ,EAGI9R,CAAAmJ,cAAA2I,QAAAhc,OAJc,CAFvB,CAWC4T,KAAMA,QAAS,CAACiD,CAAD,CAAY,CACvB3M,CAAAmJ,cAAA2I,QAAA9Z,QAAA,CAAoC,QAAS,CAAC2Q,CAAD,CAAS,CAClDA,CAAAxH,QAAAO,aAAA,CAA4B,UAA5B,CAAwC,IAAxC,CACAiH,EAAAxH,QAAAO,aAAA,CAA4B,MAA5B,CAAoC,QAApC,CACAiH,EAAAxH,QAAAO,aAAA,CACI,YADJ,CAEI1B,CAAAxH,WAAA,CACI,mCADJ,CAEI,CACIwH,MAAOA,CADX,CAEI+T,WAAYpL,CAAApI,KAAZwT,EAA2BpL,CAAApI,KAAA8D,QAF/B,CAFJ,CAFJ,CAHkD,CAAtD,CAeArE,EAAA4R,6BAAA,CACgB,CAAZ,CAAAjF,CAAA,CAAgB,CAAhB,CAAoB3M,CAAAmJ,cAAA2I,QAAAhc,OAApB,CAAyD,CAD7D,CAhBuB,CAX5B,CAzBH,CAjQ8B,CA4T9B+c,CAAA,CAAiB,oBAAjB,CAAuC,CAEnC,CAAC,CAAC,CAAD,CAAI,EAAJ,CAAQ,EAAR,CAAD,CAAc,QAAS,CAACzG,CAAD,CAAUxE,CAAV,CAAa,CAC5B+E,CAAAA;AACa,CAAb,GAACP,CAAD,EAAkBxE,CAAA8E,SAAlB,EAA4C,EAA5C,GAAgCN,CAAhC,CAAmD,EAAnD,CAAuD,CAEvD4H,EAAAA,CAAQhU,CAAAiU,wBAARD,EACoCrH,CAGxC,IAAY,CAAZ,CAAIqH,CAAJ,EAAyB,CAAzB,CAAiBA,CAAjB,CACI,MAAO,KAAAvH,KAAA,CAAUE,CAAV,CAEX3M,EAAAmJ,cAAA,CAAoB6K,CAAA,CAAQ,UAAR,CAAqB,UAAzC,CAAArN,MAAA,EAXgC,CAApC,CAFmC,CAAvC,CAeG,CAEC8C,SAAUA,QAAS,EAAG,CAQlB,MANIzJ,EAAAmJ,cAMJ,EALInJ,CAAAmJ,cAAA+K,WAKJ,EAHwC,QAGxC,GAJIlU,CAAAmJ,cAAA+K,WAAA/S,QAAAkI,aAAA,CACkB,YADlB,CAIJ,EAEiD,CAAA,CAFjD,GAEIrJ,CAAApH,QAAAuQ,cAAAgL,aAFJ,EAGInU,CAAAmJ,cAAAiL,SAHJ,EAIIpU,CAAAmJ,cAAAkL,SAZc,CAFvB,CAmBC3K,KAAMA,QAAS,CAACiD,CAAD,CAAY,CACvB3M,CAAAiU,wBAAA,CAA4C,CAAZ,CAAAtH,CAAA,CAAgB,CAAhB,CAAoB,CACpD3M,EAAAmJ,cAAA,CACInJ,CAAAiU,wBAAA,CAAgC,UAAhC,CAA6C,UADjD,CAAAtN,MAAA,EAFuB,CAnB5B,CAfH,CA5T8B;AAuW9BkM,CAAA,CAAiB,QAAjB,CAA2B,CAEvB,CAAC,CAAC,EAAD,CAAK,EAAL,CAAS,EAAT,CAAa,EAAb,CAAD,CAAmB,QAAS,CAACzG,CAAD,CAAU,CAC9BO,CAAAA,CAAyB,EAAb,GAACP,CAAD,EAA+B,EAA/B,GAAmBA,CAAnB,CAAsC,EAAtC,CAA0C,CAGrD,EAAApM,CAAAmS,oBAAA,CACDnS,CAAAuS,wBADC,CAC+B5F,CAD/B,CAAL,EAEoC,CAFpC,CAEK3M,CAAAqS,OAAAnL,SAAApR,OAFL,EAII,IAAA4T,KAAA,CAAUiD,CAAV,CAR8B,CAAtC,CAFuB,CAcvB,CAAC,CAAC,EAAD,CAAK,EAAL,CAAD,CAAW,QAAS,EAAG,CACnB,IAAI2H,EAAgBtU,CAAAqS,OAAAnL,SAAA,CAChBlH,CAAAuS,wBADgB,CAAA/K,WAAArG,QAIpByI,EAAA,CACK5J,CAAAqS,OAAAzZ,QAAA2b,QAAD,CAC+BD,CAD/B,CACIA,CAAAjT,WAFR,CALmB,CAAvB,CAduB,CAA3B,CAwBG,CAICoI,SAAUA,QAAS,EAAG,CAClB,MAAOzJ,EAAAqS,OAAP,EAAuBrS,CAAAqS,OAAAnL,SAAvB,EACIlH,CAAAqS,OAAAmC,QADJ,EAEI,EAAExU,CAAAyU,UAAF,EAAqBzU,CAAAyU,UAAA3e,OAArB,CAFJ,EAKyD,CAAA,CALzD,IAGKkK,CAAApH,QAAAyZ,OAHL,EAIIrS,CAAApH,QAAAyZ,OAAAhI,mBAJJ,EAKIrK,CAAApH,QAAAyZ,OAAAhI,mBAAAxK,QALJ,CADkB,CAJvB;AAcC6J,KAAMA,QAAS,CAACiD,CAAD,CAAY,CACvB3M,CAAAqS,OAAAnL,SAAAlP,QAAA,CAA8B,QAAS,CAACwN,CAAD,CAAO,CAC1CA,CAAA+B,YAAApG,QAAAO,aAAA,CAAsC,UAAtC,CAAkD,IAAlD,CAD0C,CAA9C,CAIA1B,EAAAmS,oBAAA,CACgB,CAAZ,CAAAxF,CAAA,CAAgB,CAAhB,CAAoB3M,CAAAqS,OAAAnL,SAAApR,OAApB,CAAmD,CADvD,CALuB,CAd5B,CAxBH,CAvW8B,CA9BuB,CAqc7DvB,EAAA+D,MAAAC,UAAAmc,cAAA,CAAkCC,QAAS,EAAG,CAC1C,IAAI3U,EAAQ,IAEZA,EAAAiN,cAAA,CAAsBpO,CAAAmH,cAAA,CAAkB,KAAlB,CACtBhG,EAAAiN,cAAAvL,aAAA,CAAiC,UAAjC,CAA6C,GAA7C,CAGAxC,EAAA,CAAM,CAAA,CAAN,CAAYc,CAAAiN,cAAAlG,MAAZ,CAAuC,CACnC3H,SAAU,UADyB,CAEnCC,IAAK,QAF8B,CAGnCC,MAAO,KAH4B,CAInCC,OAAQ,KAJ2B,CAKnCC,SAAU,QALyB,CAAvC,CAQAQ,EAAA4G,SAAAhI,YAAA,CAA2BoB,CAAAiN,cAA3B,CACA,OAAOhO,EAAA,CACHe,CAAAiN,cADG,CAEH,OAFG,CAGH,QAAS,CAAC2H,CAAD,CAAK,CACNhN,CAAAA;AAAIgN,CAAJhN,EAAU9I,CAAA+V,MAIT7U,EAAAgN,QAAL,CA0BIhN,CAAAgN,QA1BJ,CA0BoB,CAAA,CA1BpB,EAGIhN,CAAA4G,SAAAD,MAAA,EAYA,CAXAiB,CAAAkN,eAAA,EAWA,CAPA9U,CAAA4M,8BAOA,CANI5M,CAAA8M,0BAAAhX,OAMJ,CAN6C,CAM7C,CALAif,CAKA,CALY/U,CAAA8M,0BAAA,CACR9M,CAAA4M,8BADQ,CAKZ,CAAImI,CAAAtL,SAAJ,EAA2B,CAAAsL,CAAAtL,SAAA,EAA3B,CAGIsL,CAAAtI,KAAA,CAAgB,EAAhB,CAHJ,CAMIsI,CAAArL,KAAA,CAAgB,EAAhB,CArBR,CALU,CAHX,CAhBmC,CA+D9CnV,EAAA+D,MAAAC,UAAAyc,wBAAA,CAA4CC,QAAS,EAAG,CACpD,IACIC,EADQlV,IAEJ8M,0BADJoI,EADQlV,IAGJ8M,0BAAA,CAHI9M,IAIA4M,8BADJ,EAC2C,CAD3C,CAKJsI,EAAJ,EAAcA,CAAAvL,UAAd,EACIuL,CAAAvL,UAAA,EATQ3J,KAWR+M,aAAJ,EAXY/M,IAYR+M,aAAAlC,kBAAA,EAZQ7K;IAcZ4M,8BAAA,CAAsC,CAd1B5M,KAeZmV,cAAA,CAAsB,CAAA,CAhB8B,CAqBxD5gB,EAAA0K,SAAA,CAAW1K,CAAAkL,OAAX,CAAqB,SAArB,CAAgC,QAAS,EAAG,CACxC,IAAIO,EAAQ,IAAAA,MAERA,EAAA2O,iBAAJ,EAA8B3O,CAAA2O,iBAAAhS,OAA9B,GAAgE,IAAhE,GACI,OAAOqD,CAAA2O,iBACP,CAAI3O,CAAA+M,aAAJ,EACI/M,CAAA+M,aAAAlC,kBAAA,EAHR,CAHwC,CAA5C,CAaAtW,EAAA+D,MAAAC,UAAAwP,UAAAlQ,KAAA,CAAiC,QAAS,CAACmI,CAAD,CAAQ,CAC9C,IAAIe,EAAcf,CAAApH,QAAAG,cAEdgI,EAAAlB,QAAJ,EAA2BkB,CAAAsJ,mBAAAxK,QAA3B,GAKIG,CAAA2S,6BAAA,EA+CA,CA9CA3S,CAAA4M,8BA8CA,CA9CsC,CA8CtC,CA1CI5M,CAAAiI,UAAAmN,aA0CJ,EAzCK,CAAApV,CAAAiI,UAAAmN,aAAA,CAA6B,UAA7B,CAyCL;AAvCIpV,CAAAiI,UAAAvG,aAAA,CAA6B,UAA7B,CAAyC,GAAzC,CAuCJ,CAnCK1B,CAAAiN,cAmCL,GAlCIjN,CAAAqV,sBAkCJ,CAlCkCrV,CAAA0U,cAAA,EAkClC,EA9BA1U,CAAAsV,qBA8BA,CA9B6BrW,CAAA,CAASe,CAAA4G,SAAT,CAAyB,SAAzB,CACzB,QAAS,CAACgO,CAAD,CAAK,CACNhN,CAAAA,CAAIgN,CAAJhN,EAAU9I,CAAA+V,MAAd,KACIU,EAAevV,CAAA8M,0BAAA,CACX9M,CAAA4M,8BADW,CAInB5M,EAAAmV,cAAA,CAAsB,CAAA,CAGlBI,EAAJ,EACQA,CAAArJ,IAAA,CAAiBtE,CAAjB,CADR,EAGQA,CAAAkN,eAAA,EAZE,CADW,CA8B7B,CAVA9U,CAAAwV,kBAUA,CAV0BvW,CAAA,CAASJ,CAAT,CAAc,SAAd,CAAyB,QAAS,EAAG,CAEtDmB,CAAAmV,cADL,EAEMnV,CAAAyV,QAFN,EAEuBzV,CAAAyV,QAAAC,cAFvB,EAII1V,CAAAgV,wBAAA,EALuD,CAArC,CAU1B,CAAA/V,CAAA,CAASe,CAAT,CAAgB,SAAhB,CAA2B,QAAS,EAAG,CACnCA,CAAAgV,wBAAA,EACIhV,EAAAqV,sBAAJ,EAAmCrV,CAAAiN,cAAnC;AACIjN,CAAAqV,sBAAA,EAEArV,EAAAsV,qBAAJ,EAAkCtV,CAAA4G,SAAlC,EACI5G,CAAAsV,qBAAA,EAEAtV,EAAAwV,kBAAJ,EACIxV,CAAAwV,kBAAA,EAT+B,CAAvC,CApDJ,CAH8C,CAAlD,CA1/CU,CAAb,CAAA,CAgkDCnhB,CAhkDD,CAp8CmB,CAXvB;","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, '&')
|
601
|
+
.replace(/</g, '<')
|
602
|
+
.replace(/>/g, '>')
|
603
|
+
.replace(/"/g, '"')
|
604
|
+
.replace(/'/g, ''')
|
605
|
+
.replace(/\//g, '/');
|
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
|
+
}));
|