aw-highstock_rails 7.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (697) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.travis.yml +7 -0
  4. data/CODE_OF_CONDUCT.md +74 -0
  5. data/Gemfile +6 -0
  6. data/Gemfile.lock +22 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +53 -0
  9. data/Rakefile +10 -0
  10. data/aw-highstock_rails.gemspec +28 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +8 -0
  13. data/lib/aw/highstock_rails.rb +9 -0
  14. data/lib/aw/highstock_rails/version.rb +5 -0
  15. data/vendor/assets/javascripts/highstock/css/annotations/popup.css +229 -0
  16. data/vendor/assets/javascripts/highstock/css/annotations/popup.scss +235 -0
  17. data/vendor/assets/javascripts/highstock/css/highcharts.css +890 -0
  18. data/vendor/assets/javascripts/highstock/css/highcharts.scss +788 -0
  19. data/vendor/assets/javascripts/highstock/css/stocktools/gui.css +268 -0
  20. data/vendor/assets/javascripts/highstock/css/stocktools/gui.scss +270 -0
  21. data/vendor/assets/javascripts/highstock/css/themes/dark-unica.css +951 -0
  22. data/vendor/assets/javascripts/highstock/css/themes/dark-unica.scss +122 -0
  23. data/vendor/assets/javascripts/highstock/css/themes/grid-light.css +904 -0
  24. data/vendor/assets/javascripts/highstock/css/themes/grid-light.scss +33 -0
  25. data/vendor/assets/javascripts/highstock/css/themes/sand-signika.css +920 -0
  26. data/vendor/assets/javascripts/highstock/css/themes/sand-signika.scss +74 -0
  27. data/vendor/assets/javascripts/highstock/es-modules/annotations/ControlPoint.js +130 -0
  28. data/vendor/assets/javascripts/highstock/es-modules/annotations/MockPoint.js +415 -0
  29. data/vendor/assets/javascripts/highstock/es-modules/annotations/annotations.src.js +1231 -0
  30. data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/ControllableCircle.js +92 -0
  31. data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/ControllableImage.js +101 -0
  32. data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/ControllableLabel.js +452 -0
  33. data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/ControllablePath.js +175 -0
  34. data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/ControllableRect.js +93 -0
  35. data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/controllableMixin.js +411 -0
  36. data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/markerMixin.js +214 -0
  37. data/vendor/assets/javascripts/highstock/es-modules/annotations/eventEmitterMixin.js +271 -0
  38. data/vendor/assets/javascripts/highstock/es-modules/annotations/navigationBindings.js +1283 -0
  39. data/vendor/assets/javascripts/highstock/es-modules/annotations/popup.js +1069 -0
  40. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/CrookedLine.js +191 -0
  41. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/ElliottWave.js +76 -0
  42. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/Fibonacci.js +247 -0
  43. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/InfinityLine.js +185 -0
  44. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/Measure.js +928 -0
  45. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/Pitchfork.js +203 -0
  46. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/Tunnel.js +242 -0
  47. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/VerticalLine.js +157 -0
  48. data/vendor/assets/javascripts/highstock/es-modules/error-messages.js +128 -0
  49. data/vendor/assets/javascripts/highstock/es-modules/error.js +1 -0
  50. data/vendor/assets/javascripts/highstock/es-modules/indicators/acceleration-bands.src.js +199 -0
  51. data/vendor/assets/javascripts/highstock/es-modules/indicators/accumulation-distribution.src.js +129 -0
  52. data/vendor/assets/javascripts/highstock/es-modules/indicators/ao.src.js +206 -0
  53. data/vendor/assets/javascripts/highstock/es-modules/indicators/apo.src.js +148 -0
  54. data/vendor/assets/javascripts/highstock/es-modules/indicators/aroon-oscillator.src.js +128 -0
  55. data/vendor/assets/javascripts/highstock/es-modules/indicators/aroon.src.js +173 -0
  56. data/vendor/assets/javascripts/highstock/es-modules/indicators/atr.src.js +151 -0
  57. data/vendor/assets/javascripts/highstock/es-modules/indicators/bollinger-bands.src.js +209 -0
  58. data/vendor/assets/javascripts/highstock/es-modules/indicators/cci.src.js +131 -0
  59. data/vendor/assets/javascripts/highstock/es-modules/indicators/chaikin.src.js +167 -0
  60. data/vendor/assets/javascripts/highstock/es-modules/indicators/cmf.src.js +246 -0
  61. data/vendor/assets/javascripts/highstock/es-modules/indicators/dema.src.js +191 -0
  62. data/vendor/assets/javascripts/highstock/es-modules/indicators/dpo.src.js +138 -0
  63. data/vendor/assets/javascripts/highstock/es-modules/indicators/ema.src.js +166 -0
  64. data/vendor/assets/javascripts/highstock/es-modules/indicators/ichimoku-kinko-hyo.src.js +850 -0
  65. data/vendor/assets/javascripts/highstock/es-modules/indicators/indicators.src.js +425 -0
  66. data/vendor/assets/javascripts/highstock/es-modules/indicators/keltner-channels.src.js +193 -0
  67. data/vendor/assets/javascripts/highstock/es-modules/indicators/macd.src.js +417 -0
  68. data/vendor/assets/javascripts/highstock/es-modules/indicators/mfi.src.js +198 -0
  69. data/vendor/assets/javascripts/highstock/es-modules/indicators/momentum.src.js +119 -0
  70. data/vendor/assets/javascripts/highstock/es-modules/indicators/natr.src.js +74 -0
  71. data/vendor/assets/javascripts/highstock/es-modules/indicators/pivot-points.src.js +360 -0
  72. data/vendor/assets/javascripts/highstock/es-modules/indicators/ppo.src.js +152 -0
  73. data/vendor/assets/javascripts/highstock/es-modules/indicators/price-channel.src.js +149 -0
  74. data/vendor/assets/javascripts/highstock/es-modules/indicators/price-envelopes.src.js +251 -0
  75. data/vendor/assets/javascripts/highstock/es-modules/indicators/psar.src.js +307 -0
  76. data/vendor/assets/javascripts/highstock/es-modules/indicators/regressions.src.js +427 -0
  77. data/vendor/assets/javascripts/highstock/es-modules/indicators/roc.src.js +149 -0
  78. data/vendor/assets/javascripts/highstock/es-modules/indicators/rsi.src.js +163 -0
  79. data/vendor/assets/javascripts/highstock/es-modules/indicators/stochastic.src.js +193 -0
  80. data/vendor/assets/javascripts/highstock/es-modules/indicators/supertrend.src.js +544 -0
  81. data/vendor/assets/javascripts/highstock/es-modules/indicators/tema.src.js +247 -0
  82. data/vendor/assets/javascripts/highstock/es-modules/indicators/trix.src.js +96 -0
  83. data/vendor/assets/javascripts/highstock/es-modules/indicators/volume-by-price.src.js +671 -0
  84. data/vendor/assets/javascripts/highstock/es-modules/indicators/vwap.src.js +189 -0
  85. data/vendor/assets/javascripts/highstock/es-modules/indicators/williams-r.src.js +128 -0
  86. data/vendor/assets/javascripts/highstock/es-modules/indicators/wma.src.js +146 -0
  87. data/vendor/assets/javascripts/highstock/es-modules/indicators/zigzag.src.js +221 -0
  88. data/vendor/assets/javascripts/highstock/es-modules/masters/highcharts-3d.src.js +17 -0
  89. data/vendor/assets/javascripts/highstock/es-modules/masters/highcharts-more.src.js +22 -0
  90. data/vendor/assets/javascripts/highstock/es-modules/masters/highstock.src.js +11 -0
  91. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/acceleration-bands.src.js +11 -0
  92. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/accumulation-distribution.src.js +11 -0
  93. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/ao.src.js +11 -0
  94. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/apo.src.js +11 -0
  95. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/aroon-oscillator.src.js +11 -0
  96. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/aroon.src.js +11 -0
  97. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/atr.src.js +11 -0
  98. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/bollinger-bands.src.js +11 -0
  99. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/cci.src.js +11 -0
  100. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/chaikin.src.js +11 -0
  101. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/cmf.src.js +10 -0
  102. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/dema.src.js +11 -0
  103. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/dpo.src.js +11 -0
  104. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/ema.src.js +11 -0
  105. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +11 -0
  106. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/indicators-all.src.js +49 -0
  107. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/indicators.src.js +11 -0
  108. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/keltner-channels.src.js +11 -0
  109. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/macd.src.js +11 -0
  110. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/mfi.src.js +11 -0
  111. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/momentum.src.js +11 -0
  112. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/natr.src.js +11 -0
  113. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/pivot-points.src.js +11 -0
  114. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/ppo.src.js +11 -0
  115. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/price-channel.src.js +11 -0
  116. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/price-envelopes.src.js +11 -0
  117. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/psar.src.js +11 -0
  118. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/regressions.src.js +11 -0
  119. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/roc.src.js +11 -0
  120. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/rsi.src.js +11 -0
  121. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/stochastic.src.js +11 -0
  122. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/supertrend.src.js +11 -0
  123. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/tema.src.js +11 -0
  124. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/trix.src.js +11 -0
  125. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/volume-by-price.src.js +11 -0
  126. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/vwap.src.js +11 -0
  127. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/williams-r.src.js +11 -0
  128. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/wma.src.js +11 -0
  129. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/zigzag.src.js +11 -0
  130. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/accessibility.src.js +13 -0
  131. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/annotations-advanced.src.js +20 -0
  132. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/annotations.src.js +12 -0
  133. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/arrow-symbols.src.js +10 -0
  134. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/boost-canvas.src.js +11 -0
  135. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/boost.src.js +11 -0
  136. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/bullet.src.js +11 -0
  137. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/current-date-indicator.src.js +10 -0
  138. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/cylinder.src.js +10 -0
  139. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/data.src.js +10 -0
  140. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/datagrouping.src.js +12 -0
  141. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/debugger.src.js +13 -0
  142. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/dependency-wheel.src.js +10 -0
  143. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/drag-panes.src.js +11 -0
  144. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/draggable-points.src.js +9 -0
  145. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/drilldown.src.js +10 -0
  146. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/export-data.src.js +10 -0
  147. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/exporting.src.js +10 -0
  148. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/full-screen.src.js +11 -0
  149. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/funnel.src.js +10 -0
  150. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/grid-axis.src.js +10 -0
  151. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/heatmap.src.js +11 -0
  152. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/histogram-bellcurve.src.js +11 -0
  153. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/item-series.src.js +11 -0
  154. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/networkgraph.src.js +10 -0
  155. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/no-data-to-display.src.js +11 -0
  156. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/offline-exporting.src.js +10 -0
  157. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/oldie-polyfills.src.js +11 -0
  158. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/oldie.src.js +11 -0
  159. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/overlapping-datalabels.src.js +9 -0
  160. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/parallel-coordinates.src.js +11 -0
  161. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/pareto.src.js +11 -0
  162. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/pathfinder.src.js +10 -0
  163. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/pattern-fill.src.js +11 -0
  164. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/price-indicator.src.js +11 -0
  165. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/sankey.src.js +10 -0
  166. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/series-label.src.js +9 -0
  167. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/solid-gauge.src.js +10 -0
  168. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/sonification.src.js +12 -0
  169. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/static-scale.src.js +10 -0
  170. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/stock-tools.src.js +12 -0
  171. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/stock.src.js +19 -0
  172. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/streamgraph.src.js +10 -0
  173. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/sunburst.src.js +10 -0
  174. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/tilemap.src.js +10 -0
  175. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/timeline.src.js +11 -0
  176. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/treegrid.src.js +10 -0
  177. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/treemap.src.js +10 -0
  178. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/variable-pie.src.js +11 -0
  179. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/variwide.src.js +10 -0
  180. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/vector.src.js +10 -0
  181. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/venn.src.js +10 -0
  182. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/windbarb.src.js +10 -0
  183. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/wordcloud.src.js +10 -0
  184. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/xrange.src.js +10 -0
  185. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/avocado.js +9 -0
  186. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/avocado.src.js +9 -0
  187. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/dark-blue.src.js +9 -0
  188. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/dark-green.src.js +9 -0
  189. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/dark-unica.src.js +9 -0
  190. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/gray.src.js +9 -0
  191. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/grid-light.src.js +9 -0
  192. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/grid.src.js +9 -0
  193. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/sand-signika.src.js +9 -0
  194. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/skies.src.js +9 -0
  195. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/sunset.js +9 -0
  196. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/sunset.src.js +9 -0
  197. data/vendor/assets/javascripts/highstock/es-modules/mixins/ajax.js +123 -0
  198. data/vendor/assets/javascripts/highstock/es-modules/mixins/centered-series.js +116 -0
  199. data/vendor/assets/javascripts/highstock/es-modules/mixins/derived-series.js +150 -0
  200. data/vendor/assets/javascripts/highstock/es-modules/mixins/download-url.js +103 -0
  201. data/vendor/assets/javascripts/highstock/es-modules/mixins/draw-point.js +51 -0
  202. data/vendor/assets/javascripts/highstock/es-modules/mixins/geometry-circles.js +300 -0
  203. data/vendor/assets/javascripts/highstock/es-modules/mixins/geometry.js +50 -0
  204. data/vendor/assets/javascripts/highstock/es-modules/mixins/indicator-required.js +49 -0
  205. data/vendor/assets/javascripts/highstock/es-modules/mixins/multipe-lines.js +223 -0
  206. data/vendor/assets/javascripts/highstock/es-modules/mixins/navigation.js +59 -0
  207. data/vendor/assets/javascripts/highstock/es-modules/mixins/nodes.js +76 -0
  208. data/vendor/assets/javascripts/highstock/es-modules/mixins/on-series.js +167 -0
  209. data/vendor/assets/javascripts/highstock/es-modules/mixins/polygon.js +293 -0
  210. data/vendor/assets/javascripts/highstock/es-modules/mixins/reduce-array.js +53 -0
  211. data/vendor/assets/javascripts/highstock/es-modules/mixins/tree-series.js +256 -0
  212. data/vendor/assets/javascripts/highstock/es-modules/modules/a11y-i18n.src.js +524 -0
  213. data/vendor/assets/javascripts/highstock/es-modules/modules/annotations-legacy.src.js +1951 -0
  214. data/vendor/assets/javascripts/highstock/es-modules/modules/bellcurve.src.js +173 -0
  215. data/vendor/assets/javascripts/highstock/es-modules/modules/boost-canvas.src.js +732 -0
  216. data/vendor/assets/javascripts/highstock/es-modules/modules/boost.src.js +3730 -0
  217. data/vendor/assets/javascripts/highstock/es-modules/modules/bullet.src.js +361 -0
  218. data/vendor/assets/javascripts/highstock/es-modules/modules/cylinder.src.js +389 -0
  219. data/vendor/assets/javascripts/highstock/es-modules/modules/data.src.js +2417 -0
  220. data/vendor/assets/javascripts/highstock/es-modules/modules/debugger.src.js +109 -0
  221. data/vendor/assets/javascripts/highstock/es-modules/modules/dependency-wheel.src.js +199 -0
  222. data/vendor/assets/javascripts/highstock/es-modules/modules/drag-panes.src.js +624 -0
  223. data/vendor/assets/javascripts/highstock/es-modules/modules/draggable-points.src.js +2625 -0
  224. data/vendor/assets/javascripts/highstock/es-modules/modules/drilldown.src.js +1300 -0
  225. data/vendor/assets/javascripts/highstock/es-modules/modules/export-data.src.js +983 -0
  226. data/vendor/assets/javascripts/highstock/es-modules/modules/exporting.src.js +2149 -0
  227. data/vendor/assets/javascripts/highstock/es-modules/modules/full-screen.src.js +40 -0
  228. data/vendor/assets/javascripts/highstock/es-modules/modules/funnel.src.js +552 -0
  229. data/vendor/assets/javascripts/highstock/es-modules/modules/histogram.src.js +229 -0
  230. data/vendor/assets/javascripts/highstock/es-modules/modules/item-series.src.js +150 -0
  231. data/vendor/assets/javascripts/highstock/es-modules/modules/keyboard-navigation.src.js +1606 -0
  232. data/vendor/assets/javascripts/highstock/es-modules/modules/networkgraph/QuadTree.js +175 -0
  233. data/vendor/assets/javascripts/highstock/es-modules/modules/networkgraph/layouts.js +506 -0
  234. data/vendor/assets/javascripts/highstock/es-modules/modules/networkgraph/networkgraph.src.js +740 -0
  235. data/vendor/assets/javascripts/highstock/es-modules/modules/no-data-to-display.src.js +260 -0
  236. data/vendor/assets/javascripts/highstock/es-modules/modules/offline-exporting.src.js +710 -0
  237. data/vendor/assets/javascripts/highstock/es-modules/modules/oldie-polyfills.src.js +121 -0
  238. data/vendor/assets/javascripts/highstock/es-modules/modules/oldie.src.js +1556 -0
  239. data/vendor/assets/javascripts/highstock/es-modules/modules/overlapping-datalabels.src.js +250 -0
  240. data/vendor/assets/javascripts/highstock/es-modules/modules/parallel-coordinates.src.js +492 -0
  241. data/vendor/assets/javascripts/highstock/es-modules/modules/pareto.src.js +152 -0
  242. data/vendor/assets/javascripts/highstock/es-modules/modules/pattern-fill.src.js +607 -0
  243. data/vendor/assets/javascripts/highstock/es-modules/modules/price-indicator.src.js +149 -0
  244. data/vendor/assets/javascripts/highstock/es-modules/modules/sankey.src.js +809 -0
  245. data/vendor/assets/javascripts/highstock/es-modules/modules/screen-reader.src.js +954 -0
  246. data/vendor/assets/javascripts/highstock/es-modules/modules/series-label.src.js +1042 -0
  247. data/vendor/assets/javascripts/highstock/es-modules/modules/solid-gauge.src.js +486 -0
  248. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/Earcon.js +184 -0
  249. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/Instrument.js +582 -0
  250. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/Timeline.js +702 -0
  251. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/chartSonify.js +1026 -0
  252. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/instrumentDefinitions.js +37 -0
  253. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/musicalFrequencies.js +113 -0
  254. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/pointSonify.js +385 -0
  255. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/sonification.js +107 -0
  256. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/utilities.js +178 -0
  257. data/vendor/assets/javascripts/highstock/es-modules/modules/static-scale.src.js +88 -0
  258. data/vendor/assets/javascripts/highstock/es-modules/modules/stock-tools-bindings.js +1950 -0
  259. data/vendor/assets/javascripts/highstock/es-modules/modules/stock-tools-gui.js +1458 -0
  260. data/vendor/assets/javascripts/highstock/es-modules/modules/streamgraph.src.js +132 -0
  261. data/vendor/assets/javascripts/highstock/es-modules/modules/sunburst.src.js +1041 -0
  262. data/vendor/assets/javascripts/highstock/es-modules/modules/tilemap.src.js +769 -0
  263. data/vendor/assets/javascripts/highstock/es-modules/modules/timeline.src.js +750 -0
  264. data/vendor/assets/javascripts/highstock/es-modules/modules/treemap.src.js +1803 -0
  265. data/vendor/assets/javascripts/highstock/es-modules/modules/variable-pie.src.js +459 -0
  266. data/vendor/assets/javascripts/highstock/es-modules/modules/variwide.src.js +350 -0
  267. data/vendor/assets/javascripts/highstock/es-modules/modules/vector.src.js +354 -0
  268. data/vendor/assets/javascripts/highstock/es-modules/modules/venn.src.js +1192 -0
  269. data/vendor/assets/javascripts/highstock/es-modules/modules/windbarb.src.js +380 -0
  270. data/vendor/assets/javascripts/highstock/es-modules/modules/wordcloud.src.js +1103 -0
  271. data/vendor/assets/javascripts/highstock/es-modules/modules/xrange.src.js +761 -0
  272. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Axis.js +669 -0
  273. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Chart.js +1753 -0
  274. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Column.js +437 -0
  275. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Math.js +206 -0
  276. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Pie.js +207 -0
  277. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/SVGRenderer.js +1002 -0
  278. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Scatter.js +154 -0
  279. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Series.js +73 -0
  280. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/VMLRenderer.js +62 -0
  281. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/ArrowSymbols.js +198 -0
  282. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/CurrentDateIndicator.js +100 -0
  283. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/GanttChart.js +140 -0
  284. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/GanttSeries.js +415 -0
  285. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/GridAxis.js +961 -0
  286. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/Pathfinder.js +1298 -0
  287. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/PathfinderAlgorithms.js +816 -0
  288. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/Tree.js +158 -0
  289. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/TreeGrid.js +1003 -0
  290. data/vendor/assets/javascripts/highstock/es-modules/parts-map/ColorAxis.js +1103 -0
  291. data/vendor/assets/javascripts/highstock/es-modules/parts-map/ColorSeriesMixin.js +138 -0
  292. data/vendor/assets/javascripts/highstock/es-modules/parts-map/GeoJSON.js +435 -0
  293. data/vendor/assets/javascripts/highstock/es-modules/parts-map/HeatmapSeries.js +474 -0
  294. data/vendor/assets/javascripts/highstock/es-modules/parts-map/Map.js +477 -0
  295. data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapAxis.js +124 -0
  296. data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapBubbleSeries.js +274 -0
  297. data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapLineSeries.js +143 -0
  298. data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapNavigation.js +357 -0
  299. data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapPointSeries.js +187 -0
  300. data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapPointer.js +132 -0
  301. data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapSeries.js +1294 -0
  302. data/vendor/assets/javascripts/highstock/es-modules/parts-more/AreaRangeSeries.js +725 -0
  303. data/vendor/assets/javascripts/highstock/es-modules/parts-more/AreaSplineRangeSeries.js +98 -0
  304. data/vendor/assets/javascripts/highstock/es-modules/parts-more/BoxPlotSeries.js +617 -0
  305. data/vendor/assets/javascripts/highstock/es-modules/parts-more/BubbleLegend.js +1167 -0
  306. data/vendor/assets/javascripts/highstock/es-modules/parts-more/BubbleSeries.js +661 -0
  307. data/vendor/assets/javascripts/highstock/es-modules/parts-more/ColumnPyramidSeries.js +288 -0
  308. data/vendor/assets/javascripts/highstock/es-modules/parts-more/ColumnRangeSeries.js +278 -0
  309. data/vendor/assets/javascripts/highstock/es-modules/parts-more/ErrorBarSeries.js +172 -0
  310. data/vendor/assets/javascripts/highstock/es-modules/parts-more/GaugeSeries.js +618 -0
  311. data/vendor/assets/javascripts/highstock/es-modules/parts-more/PackedBubbleSeries.js +567 -0
  312. data/vendor/assets/javascripts/highstock/es-modules/parts-more/Pane.js +399 -0
  313. data/vendor/assets/javascripts/highstock/es-modules/parts-more/Polar.js +634 -0
  314. data/vendor/assets/javascripts/highstock/es-modules/parts-more/PolygonSeries.js +151 -0
  315. data/vendor/assets/javascripts/highstock/es-modules/parts-more/RadialAxis.js +685 -0
  316. data/vendor/assets/javascripts/highstock/es-modules/parts-more/WaterfallSeries.js +765 -0
  317. data/vendor/assets/javascripts/highstock/es-modules/parts.js +684 -0
  318. data/vendor/assets/javascripts/highstock/es-modules/parts/AreaSeries.js +578 -0
  319. data/vendor/assets/javascripts/highstock/es-modules/parts/AreaSplineSeries.js +122 -0
  320. data/vendor/assets/javascripts/highstock/es-modules/parts/Axis.js +6453 -0
  321. data/vendor/assets/javascripts/highstock/es-modules/parts/BarSeries.js +153 -0
  322. data/vendor/assets/javascripts/highstock/es-modules/parts/CandlestickSeries.js +358 -0
  323. data/vendor/assets/javascripts/highstock/es-modules/parts/Chart.js +2307 -0
  324. data/vendor/assets/javascripts/highstock/es-modules/parts/Color.js +301 -0
  325. data/vendor/assets/javascripts/highstock/es-modules/parts/ColumnSeries.js +1125 -0
  326. data/vendor/assets/javascripts/highstock/es-modules/parts/DataGrouping.js +1115 -0
  327. data/vendor/assets/javascripts/highstock/es-modules/parts/DataLabels.js +1431 -0
  328. data/vendor/assets/javascripts/highstock/es-modules/parts/DateTimeAxis.js +134 -0
  329. data/vendor/assets/javascripts/highstock/es-modules/parts/Dynamics.js +1301 -0
  330. data/vendor/assets/javascripts/highstock/es-modules/parts/FlagsSeries.js +739 -0
  331. data/vendor/assets/javascripts/highstock/es-modules/parts/Globals.js +75 -0
  332. data/vendor/assets/javascripts/highstock/es-modules/parts/Html.js +539 -0
  333. data/vendor/assets/javascripts/highstock/es-modules/parts/Interaction.js +1299 -0
  334. data/vendor/assets/javascripts/highstock/es-modules/parts/Legend.js +1411 -0
  335. data/vendor/assets/javascripts/highstock/es-modules/parts/LogarithmicAxis.js +168 -0
  336. data/vendor/assets/javascripts/highstock/es-modules/parts/MSPointer.js +176 -0
  337. data/vendor/assets/javascripts/highstock/es-modules/parts/Navigator.js +2486 -0
  338. data/vendor/assets/javascripts/highstock/es-modules/parts/OHLCSeries.js +412 -0
  339. data/vendor/assets/javascripts/highstock/es-modules/parts/Options.js +3732 -0
  340. data/vendor/assets/javascripts/highstock/es-modules/parts/OrdinalAxis.js +962 -0
  341. data/vendor/assets/javascripts/highstock/es-modules/parts/PieSeries.js +1328 -0
  342. data/vendor/assets/javascripts/highstock/es-modules/parts/PlotBandSeries.experimental.js +74 -0
  343. data/vendor/assets/javascripts/highstock/es-modules/parts/PlotLineOrBand.js +1061 -0
  344. data/vendor/assets/javascripts/highstock/es-modules/parts/Point.js +681 -0
  345. data/vendor/assets/javascripts/highstock/es-modules/parts/Pointer.js +1332 -0
  346. data/vendor/assets/javascripts/highstock/es-modules/parts/RangeSelector.js +2063 -0
  347. data/vendor/assets/javascripts/highstock/es-modules/parts/Responsive.js +295 -0
  348. data/vendor/assets/javascripts/highstock/es-modules/parts/ScatterSeries.js +278 -0
  349. data/vendor/assets/javascripts/highstock/es-modules/parts/ScrollablePlotArea.js +266 -0
  350. data/vendor/assets/javascripts/highstock/es-modules/parts/Scrollbar.js +1134 -0
  351. data/vendor/assets/javascripts/highstock/es-modules/parts/Series.js +5864 -0
  352. data/vendor/assets/javascripts/highstock/es-modules/parts/SplineSeries.js +267 -0
  353. data/vendor/assets/javascripts/highstock/es-modules/parts/Stacking.js +604 -0
  354. data/vendor/assets/javascripts/highstock/es-modules/parts/StockChart.js +951 -0
  355. data/vendor/assets/javascripts/highstock/es-modules/parts/SvgRenderer.js +5109 -0
  356. data/vendor/assets/javascripts/highstock/es-modules/parts/Tick.js +746 -0
  357. data/vendor/assets/javascripts/highstock/es-modules/parts/Time.js +881 -0
  358. data/vendor/assets/javascripts/highstock/es-modules/parts/Tooltip.js +1318 -0
  359. data/vendor/assets/javascripts/highstock/es-modules/parts/TouchPointer.js +404 -0
  360. data/vendor/assets/javascripts/highstock/es-modules/parts/Utilities.js +2751 -0
  361. data/vendor/assets/javascripts/highstock/es-modules/themes/avocado.js +37 -0
  362. data/vendor/assets/javascripts/highstock/es-modules/themes/dark-blue.js +259 -0
  363. data/vendor/assets/javascripts/highstock/es-modules/themes/dark-green.js +261 -0
  364. data/vendor/assets/javascripts/highstock/es-modules/themes/dark-unica.js +220 -0
  365. data/vendor/assets/javascripts/highstock/es-modules/themes/gray.js +267 -0
  366. data/vendor/assets/javascripts/highstock/es-modules/themes/grid-light.js +81 -0
  367. data/vendor/assets/javascripts/highstock/es-modules/themes/grid.js +110 -0
  368. data/vendor/assets/javascripts/highstock/es-modules/themes/sand-signika.js +111 -0
  369. data/vendor/assets/javascripts/highstock/es-modules/themes/skies.js +100 -0
  370. data/vendor/assets/javascripts/highstock/es-modules/themes/sunset.js +36 -0
  371. data/vendor/assets/javascripts/highstock/highcharts-3d.js +85 -0
  372. data/vendor/assets/javascripts/highstock/highcharts-3d.js.map +1 -0
  373. data/vendor/assets/javascripts/highstock/highcharts-more.js +101 -0
  374. data/vendor/assets/javascripts/highstock/highcharts-more.js.map +1 -0
  375. data/vendor/assets/javascripts/highstock/highstock.js +583 -0
  376. data/vendor/assets/javascripts/highstock/highstock.js.map +1 -0
  377. data/vendor/assets/javascripts/highstock/indicators/acceleration-bands.js +16 -0
  378. data/vendor/assets/javascripts/highstock/indicators/acceleration-bands.js.map +1 -0
  379. data/vendor/assets/javascripts/highstock/indicators/acceleration-bands.src.js +448 -0
  380. data/vendor/assets/javascripts/highstock/indicators/accumulation-distribution.js +12 -0
  381. data/vendor/assets/javascripts/highstock/indicators/accumulation-distribution.js.map +1 -0
  382. data/vendor/assets/javascripts/highstock/indicators/accumulation-distribution.src.js +156 -0
  383. data/vendor/assets/javascripts/highstock/indicators/ao.js +13 -0
  384. data/vendor/assets/javascripts/highstock/indicators/ao.js.map +1 -0
  385. data/vendor/assets/javascripts/highstock/indicators/ao.src.js +233 -0
  386. data/vendor/assets/javascripts/highstock/indicators/apo.js +13 -0
  387. data/vendor/assets/javascripts/highstock/indicators/apo.js.map +1 -0
  388. data/vendor/assets/javascripts/highstock/indicators/apo.src.js +223 -0
  389. data/vendor/assets/javascripts/highstock/indicators/aroon-oscillator.js +15 -0
  390. data/vendor/assets/javascripts/highstock/indicators/aroon-oscillator.js.map +1 -0
  391. data/vendor/assets/javascripts/highstock/indicators/aroon-oscillator.src.js +426 -0
  392. data/vendor/assets/javascripts/highstock/indicators/aroon.js +16 -0
  393. data/vendor/assets/javascripts/highstock/indicators/aroon.js.map +1 -0
  394. data/vendor/assets/javascripts/highstock/indicators/aroon.src.js +423 -0
  395. data/vendor/assets/javascripts/highstock/indicators/atr.js +12 -0
  396. data/vendor/assets/javascripts/highstock/indicators/atr.js.map +1 -0
  397. data/vendor/assets/javascripts/highstock/indicators/atr.src.js +178 -0
  398. data/vendor/assets/javascripts/highstock/indicators/bollinger-bands.js +16 -0
  399. data/vendor/assets/javascripts/highstock/indicators/bollinger-bands.js.map +1 -0
  400. data/vendor/assets/javascripts/highstock/indicators/bollinger-bands.src.js +458 -0
  401. data/vendor/assets/javascripts/highstock/indicators/cci.js +12 -0
  402. data/vendor/assets/javascripts/highstock/indicators/cci.js.map +1 -0
  403. data/vendor/assets/javascripts/highstock/indicators/cci.src.js +158 -0
  404. data/vendor/assets/javascripts/highstock/indicators/chaikin.js +15 -0
  405. data/vendor/assets/javascripts/highstock/indicators/chaikin.js.map +1 -0
  406. data/vendor/assets/javascripts/highstock/indicators/chaikin.src.js +370 -0
  407. data/vendor/assets/javascripts/highstock/indicators/cmf.js +12 -0
  408. data/vendor/assets/javascripts/highstock/indicators/cmf.js.map +1 -0
  409. data/vendor/assets/javascripts/highstock/indicators/cmf.src.js +273 -0
  410. data/vendor/assets/javascripts/highstock/indicators/dema.js +13 -0
  411. data/vendor/assets/javascripts/highstock/indicators/dema.js.map +1 -0
  412. data/vendor/assets/javascripts/highstock/indicators/dema.src.js +266 -0
  413. data/vendor/assets/javascripts/highstock/indicators/dpo.js +12 -0
  414. data/vendor/assets/javascripts/highstock/indicators/dpo.js.map +1 -0
  415. data/vendor/assets/javascripts/highstock/indicators/dpo.src.js +166 -0
  416. data/vendor/assets/javascripts/highstock/indicators/ema.js +12 -0
  417. data/vendor/assets/javascripts/highstock/indicators/ema.js.map +1 -0
  418. data/vendor/assets/javascripts/highstock/indicators/ema.src.js +193 -0
  419. data/vendor/assets/javascripts/highstock/indicators/ichimoku-kinko-hyo.js +22 -0
  420. data/vendor/assets/javascripts/highstock/indicators/ichimoku-kinko-hyo.js.map +1 -0
  421. data/vendor/assets/javascripts/highstock/indicators/ichimoku-kinko-hyo.src.js +877 -0
  422. data/vendor/assets/javascripts/highstock/indicators/indicators-all.js +117 -0
  423. data/vendor/assets/javascripts/highstock/indicators/indicators-all.js.map +1 -0
  424. data/vendor/assets/javascripts/highstock/indicators/indicators-all.src.js +9389 -0
  425. data/vendor/assets/javascripts/highstock/indicators/indicators.js +17 -0
  426. data/vendor/assets/javascripts/highstock/indicators/indicators.js.map +1 -0
  427. data/vendor/assets/javascripts/highstock/indicators/indicators.src.js +500 -0
  428. data/vendor/assets/javascripts/highstock/indicators/keltner-channels.js +16 -0
  429. data/vendor/assets/javascripts/highstock/indicators/keltner-channels.js.map +1 -0
  430. data/vendor/assets/javascripts/highstock/indicators/keltner-channels.src.js +442 -0
  431. data/vendor/assets/javascripts/highstock/indicators/macd.js +18 -0
  432. data/vendor/assets/javascripts/highstock/indicators/macd.js.map +1 -0
  433. data/vendor/assets/javascripts/highstock/indicators/macd.src.js +444 -0
  434. data/vendor/assets/javascripts/highstock/indicators/mfi.js +13 -0
  435. data/vendor/assets/javascripts/highstock/indicators/mfi.js.map +1 -0
  436. data/vendor/assets/javascripts/highstock/indicators/mfi.src.js +225 -0
  437. data/vendor/assets/javascripts/highstock/indicators/momentum.js +12 -0
  438. data/vendor/assets/javascripts/highstock/indicators/momentum.js.map +1 -0
  439. data/vendor/assets/javascripts/highstock/indicators/momentum.src.js +146 -0
  440. data/vendor/assets/javascripts/highstock/indicators/natr.js +12 -0
  441. data/vendor/assets/javascripts/highstock/indicators/natr.js.map +1 -0
  442. data/vendor/assets/javascripts/highstock/indicators/natr.src.js +101 -0
  443. data/vendor/assets/javascripts/highstock/indicators/pivot-points.js +16 -0
  444. data/vendor/assets/javascripts/highstock/indicators/pivot-points.js.map +1 -0
  445. data/vendor/assets/javascripts/highstock/indicators/pivot-points.src.js +387 -0
  446. data/vendor/assets/javascripts/highstock/indicators/ppo.js +13 -0
  447. data/vendor/assets/javascripts/highstock/indicators/ppo.js.map +1 -0
  448. data/vendor/assets/javascripts/highstock/indicators/ppo.src.js +227 -0
  449. data/vendor/assets/javascripts/highstock/indicators/price-channel.js +16 -0
  450. data/vendor/assets/javascripts/highstock/indicators/price-channel.js.map +1 -0
  451. data/vendor/assets/javascripts/highstock/indicators/price-channel.src.js +450 -0
  452. data/vendor/assets/javascripts/highstock/indicators/price-envelopes.js +15 -0
  453. data/vendor/assets/javascripts/highstock/indicators/price-envelopes.js.map +1 -0
  454. data/vendor/assets/javascripts/highstock/indicators/price-envelopes.src.js +278 -0
  455. data/vendor/assets/javascripts/highstock/indicators/psar.js +13 -0
  456. data/vendor/assets/javascripts/highstock/indicators/psar.js.map +1 -0
  457. data/vendor/assets/javascripts/highstock/indicators/psar.src.js +334 -0
  458. data/vendor/assets/javascripts/highstock/indicators/regressions.js +14 -0
  459. data/vendor/assets/javascripts/highstock/indicators/regressions.js.map +1 -0
  460. data/vendor/assets/javascripts/highstock/indicators/regressions.src.js +454 -0
  461. data/vendor/assets/javascripts/highstock/indicators/roc.js +12 -0
  462. data/vendor/assets/javascripts/highstock/indicators/roc.js.map +1 -0
  463. data/vendor/assets/javascripts/highstock/indicators/roc.src.js +176 -0
  464. data/vendor/assets/javascripts/highstock/indicators/rsi.js +12 -0
  465. data/vendor/assets/javascripts/highstock/indicators/rsi.js.map +1 -0
  466. data/vendor/assets/javascripts/highstock/indicators/rsi.src.js +190 -0
  467. data/vendor/assets/javascripts/highstock/indicators/stochastic.js +17 -0
  468. data/vendor/assets/javascripts/highstock/indicators/stochastic.js.map +1 -0
  469. data/vendor/assets/javascripts/highstock/indicators/stochastic.src.js +494 -0
  470. data/vendor/assets/javascripts/highstock/indicators/supertrend.js +17 -0
  471. data/vendor/assets/javascripts/highstock/indicators/supertrend.js.map +1 -0
  472. data/vendor/assets/javascripts/highstock/indicators/supertrend.src.js +571 -0
  473. data/vendor/assets/javascripts/highstock/indicators/tema.js +14 -0
  474. data/vendor/assets/javascripts/highstock/indicators/tema.js.map +1 -0
  475. data/vendor/assets/javascripts/highstock/indicators/tema.src.js +322 -0
  476. data/vendor/assets/javascripts/highstock/indicators/trix.js +12 -0
  477. data/vendor/assets/javascripts/highstock/indicators/trix.js.map +1 -0
  478. data/vendor/assets/javascripts/highstock/indicators/trix.src.js +171 -0
  479. data/vendor/assets/javascripts/highstock/indicators/volume-by-price.js +21 -0
  480. data/vendor/assets/javascripts/highstock/indicators/volume-by-price.js.map +1 -0
  481. data/vendor/assets/javascripts/highstock/indicators/volume-by-price.src.js +698 -0
  482. data/vendor/assets/javascripts/highstock/indicators/vwap.js +12 -0
  483. data/vendor/assets/javascripts/highstock/indicators/vwap.js.map +1 -0
  484. data/vendor/assets/javascripts/highstock/indicators/vwap.src.js +216 -0
  485. data/vendor/assets/javascripts/highstock/indicators/williams-r.js +13 -0
  486. data/vendor/assets/javascripts/highstock/indicators/williams-r.js.map +1 -0
  487. data/vendor/assets/javascripts/highstock/indicators/williams-r.src.js +207 -0
  488. data/vendor/assets/javascripts/highstock/indicators/wma.js +12 -0
  489. data/vendor/assets/javascripts/highstock/indicators/wma.js.map +1 -0
  490. data/vendor/assets/javascripts/highstock/indicators/wma.src.js +173 -0
  491. data/vendor/assets/javascripts/highstock/indicators/zigzag.js +13 -0
  492. data/vendor/assets/javascripts/highstock/indicators/zigzag.js.map +1 -0
  493. data/vendor/assets/javascripts/highstock/indicators/zigzag.src.js +248 -0
  494. data/vendor/assets/javascripts/highstock/lib/canvg.js +130 -0
  495. data/vendor/assets/javascripts/highstock/lib/canvg.src.js +3073 -0
  496. data/vendor/assets/javascripts/highstock/lib/jspdf.js +283 -0
  497. data/vendor/assets/javascripts/highstock/lib/jspdf.src.js +21627 -0
  498. data/vendor/assets/javascripts/highstock/lib/rgbcolor.js +17 -0
  499. data/vendor/assets/javascripts/highstock/lib/rgbcolor.src.js +299 -0
  500. data/vendor/assets/javascripts/highstock/lib/svg2pdf.js +38 -0
  501. data/vendor/assets/javascripts/highstock/lib/svg2pdf.src.js +4390 -0
  502. data/vendor/assets/javascripts/highstock/modules/accessibility.js +73 -0
  503. data/vendor/assets/javascripts/highstock/modules/accessibility.js.map +1 -0
  504. data/vendor/assets/javascripts/highstock/modules/accessibility.src.js +3103 -0
  505. data/vendor/assets/javascripts/highstock/modules/annotations-advanced.js +132 -0
  506. data/vendor/assets/javascripts/highstock/modules/annotations-advanced.js.map +1 -0
  507. data/vendor/assets/javascripts/highstock/modules/annotations-advanced.src.js +8230 -0
  508. data/vendor/assets/javascripts/highstock/modules/annotations.js +94 -0
  509. data/vendor/assets/javascripts/highstock/modules/annotations.js.map +1 -0
  510. data/vendor/assets/javascripts/highstock/modules/annotations.src.js +6001 -0
  511. data/vendor/assets/javascripts/highstock/modules/arrow-symbols.js +11 -0
  512. data/vendor/assets/javascripts/highstock/modules/arrow-symbols.js.map +1 -0
  513. data/vendor/assets/javascripts/highstock/modules/arrow-symbols.src.js +225 -0
  514. data/vendor/assets/javascripts/highstock/modules/boost-canvas.js +23 -0
  515. data/vendor/assets/javascripts/highstock/modules/boost-canvas.js.map +1 -0
  516. data/vendor/assets/javascripts/highstock/modules/boost-canvas.src.js +756 -0
  517. data/vendor/assets/javascripts/highstock/modules/boost.js +65 -0
  518. data/vendor/assets/javascripts/highstock/modules/boost.js.map +1 -0
  519. data/vendor/assets/javascripts/highstock/modules/boost.src.js +3752 -0
  520. data/vendor/assets/javascripts/highstock/modules/bullet.js +14 -0
  521. data/vendor/assets/javascripts/highstock/modules/bullet.js.map +1 -0
  522. data/vendor/assets/javascripts/highstock/modules/bullet.src.js +388 -0
  523. data/vendor/assets/javascripts/highstock/modules/current-date-indicator.js +11 -0
  524. data/vendor/assets/javascripts/highstock/modules/current-date-indicator.js.map +1 -0
  525. data/vendor/assets/javascripts/highstock/modules/current-date-indicator.src.js +127 -0
  526. data/vendor/assets/javascripts/highstock/modules/cylinder.js +14 -0
  527. data/vendor/assets/javascripts/highstock/modules/cylinder.js.map +1 -0
  528. data/vendor/assets/javascripts/highstock/modules/cylinder.src.js +413 -0
  529. data/vendor/assets/javascripts/highstock/modules/data.js +37 -0
  530. data/vendor/assets/javascripts/highstock/modules/data.js.map +1 -0
  531. data/vendor/assets/javascripts/highstock/modules/data.src.js +2565 -0
  532. data/vendor/assets/javascripts/highstock/modules/datagrouping.js +25 -0
  533. data/vendor/assets/javascripts/highstock/modules/datagrouping.js.map +1 -0
  534. data/vendor/assets/javascripts/highstock/modules/datagrouping.src.js +1140 -0
  535. data/vendor/assets/javascripts/highstock/modules/debugger.js +28 -0
  536. data/vendor/assets/javascripts/highstock/modules/debugger.js.map +1 -0
  537. data/vendor/assets/javascripts/highstock/modules/debugger.src.js +267 -0
  538. data/vendor/assets/javascripts/highstock/modules/dependency-wheel.js +15 -0
  539. data/vendor/assets/javascripts/highstock/modules/dependency-wheel.js.map +1 -0
  540. data/vendor/assets/javascripts/highstock/modules/dependency-wheel.src.js +301 -0
  541. data/vendor/assets/javascripts/highstock/modules/drag-panes.js +18 -0
  542. data/vendor/assets/javascripts/highstock/modules/drag-panes.js.map +1 -0
  543. data/vendor/assets/javascripts/highstock/modules/drag-panes.src.js +649 -0
  544. data/vendor/assets/javascripts/highstock/modules/draggable-points.js +40 -0
  545. data/vendor/assets/javascripts/highstock/modules/draggable-points.js.map +1 -0
  546. data/vendor/assets/javascripts/highstock/modules/draggable-points.src.js +2650 -0
  547. data/vendor/assets/javascripts/highstock/modules/drilldown.js +29 -0
  548. data/vendor/assets/javascripts/highstock/modules/drilldown.js.map +1 -0
  549. data/vendor/assets/javascripts/highstock/modules/drilldown.src.js +1321 -0
  550. data/vendor/assets/javascripts/highstock/modules/export-data.js +27 -0
  551. data/vendor/assets/javascripts/highstock/modules/export-data.js.map +1 -0
  552. data/vendor/assets/javascripts/highstock/modules/export-data.src.js +1234 -0
  553. data/vendor/assets/javascripts/highstock/modules/exporting.js +35 -0
  554. data/vendor/assets/javascripts/highstock/modules/exporting.js.map +1 -0
  555. data/vendor/assets/javascripts/highstock/modules/exporting.src.js +2233 -0
  556. data/vendor/assets/javascripts/highstock/modules/full-screen.js +11 -0
  557. data/vendor/assets/javascripts/highstock/modules/full-screen.js.map +1 -0
  558. data/vendor/assets/javascripts/highstock/modules/full-screen.src.js +68 -0
  559. data/vendor/assets/javascripts/highstock/modules/funnel.js +14 -0
  560. data/vendor/assets/javascripts/highstock/modules/funnel.js.map +1 -0
  561. data/vendor/assets/javascripts/highstock/modules/funnel.src.js +576 -0
  562. data/vendor/assets/javascripts/highstock/modules/grid-axis.js +23 -0
  563. data/vendor/assets/javascripts/highstock/modules/grid-axis.js.map +1 -0
  564. data/vendor/assets/javascripts/highstock/modules/grid-axis.src.js +988 -0
  565. data/vendor/assets/javascripts/highstock/modules/heatmap.js +28 -0
  566. data/vendor/assets/javascripts/highstock/modules/heatmap.js.map +1 -0
  567. data/vendor/assets/javascripts/highstock/modules/heatmap.src.js +1731 -0
  568. data/vendor/assets/javascripts/highstock/modules/histogram-bellcurve.js +16 -0
  569. data/vendor/assets/javascripts/highstock/modules/histogram-bellcurve.js.map +1 -0
  570. data/vendor/assets/javascripts/highstock/modules/histogram-bellcurve.src.js +570 -0
  571. data/vendor/assets/javascripts/highstock/modules/item-series.js +13 -0
  572. data/vendor/assets/javascripts/highstock/modules/item-series.js.map +1 -0
  573. data/vendor/assets/javascripts/highstock/modules/item-series.src.js +176 -0
  574. data/vendor/assets/javascripts/highstock/modules/networkgraph.js +31 -0
  575. data/vendor/assets/javascripts/highstock/modules/networkgraph.js.map +1 -0
  576. data/vendor/assets/javascripts/highstock/modules/networkgraph.src.js +1348 -0
  577. data/vendor/assets/javascripts/highstock/modules/no-data-to-display.js +13 -0
  578. data/vendor/assets/javascripts/highstock/modules/no-data-to-display.js.map +1 -0
  579. data/vendor/assets/javascripts/highstock/modules/no-data-to-display.src.js +285 -0
  580. data/vendor/assets/javascripts/highstock/modules/offline-exporting.js +22 -0
  581. data/vendor/assets/javascripts/highstock/modules/offline-exporting.js.map +1 -0
  582. data/vendor/assets/javascripts/highstock/modules/offline-exporting.src.js +838 -0
  583. data/vendor/assets/javascripts/highstock/modules/oldie-polyfills.js +13 -0
  584. data/vendor/assets/javascripts/highstock/modules/oldie-polyfills.js.map +1 -0
  585. data/vendor/assets/javascripts/highstock/modules/oldie-polyfills.src.js +150 -0
  586. data/vendor/assets/javascripts/highstock/modules/oldie.js +35 -0
  587. data/vendor/assets/javascripts/highstock/modules/oldie.js.map +1 -0
  588. data/vendor/assets/javascripts/highstock/modules/oldie.src.js +1582 -0
  589. data/vendor/assets/javascripts/highstock/modules/overlapping-datalabels.js +9 -0
  590. data/vendor/assets/javascripts/highstock/modules/overlapping-datalabels.js.map +1 -0
  591. data/vendor/assets/javascripts/highstock/modules/overlapping-datalabels.src.js +22 -0
  592. data/vendor/assets/javascripts/highstock/modules/parallel-coordinates.js +18 -0
  593. data/vendor/assets/javascripts/highstock/modules/parallel-coordinates.js.map +1 -0
  594. data/vendor/assets/javascripts/highstock/modules/parallel-coordinates.src.js +517 -0
  595. data/vendor/assets/javascripts/highstock/modules/pareto.js +14 -0
  596. data/vendor/assets/javascripts/highstock/modules/pareto.js.map +1 -0
  597. data/vendor/assets/javascripts/highstock/modules/pareto.src.js +327 -0
  598. data/vendor/assets/javascripts/highstock/modules/pathfinder.js +34 -0
  599. data/vendor/assets/javascripts/highstock/modules/pathfinder.js.map +1 -0
  600. data/vendor/assets/javascripts/highstock/modules/pathfinder.src.js +2336 -0
  601. data/vendor/assets/javascripts/highstock/modules/pattern-fill.js +21 -0
  602. data/vendor/assets/javascripts/highstock/modules/pattern-fill.js.map +1 -0
  603. data/vendor/assets/javascripts/highstock/modules/pattern-fill.src.js +634 -0
  604. data/vendor/assets/javascripts/highstock/modules/price-indicator.js +13 -0
  605. data/vendor/assets/javascripts/highstock/modules/price-indicator.js.map +1 -0
  606. data/vendor/assets/javascripts/highstock/modules/price-indicator.src.js +176 -0
  607. data/vendor/assets/javascripts/highstock/modules/sankey.js +22 -0
  608. data/vendor/assets/javascripts/highstock/modules/sankey.js.map +1 -0
  609. data/vendor/assets/javascripts/highstock/modules/sankey.src.js +911 -0
  610. data/vendor/assets/javascripts/highstock/modules/series-label.js +23 -0
  611. data/vendor/assets/javascripts/highstock/modules/series-label.js.map +1 -0
  612. data/vendor/assets/javascripts/highstock/modules/series-label.src.js +1065 -0
  613. data/vendor/assets/javascripts/highstock/modules/solid-gauge.js +15 -0
  614. data/vendor/assets/javascripts/highstock/modules/solid-gauge.js.map +1 -0
  615. data/vendor/assets/javascripts/highstock/modules/solid-gauge.src.js +510 -0
  616. data/vendor/assets/javascripts/highstock/modules/sonification.js +53 -0
  617. data/vendor/assets/javascripts/highstock/modules/sonification.js.map +1 -0
  618. data/vendor/assets/javascripts/highstock/modules/sonification.src.js +3341 -0
  619. data/vendor/assets/javascripts/highstock/modules/static-scale.js +12 -0
  620. data/vendor/assets/javascripts/highstock/modules/static-scale.js.map +1 -0
  621. data/vendor/assets/javascripts/highstock/modules/static-scale.src.js +114 -0
  622. data/vendor/assets/javascripts/highstock/modules/stock-tools.js +65 -0
  623. data/vendor/assets/javascripts/highstock/modules/stock-tools.js.map +1 -0
  624. data/vendor/assets/javascripts/highstock/modules/stock-tools.src.js +3437 -0
  625. data/vendor/assets/javascripts/highstock/modules/stock.js +151 -0
  626. data/vendor/assets/javascripts/highstock/modules/stock.js.map +1 -0
  627. data/vendor/assets/javascripts/highstock/modules/stock.src.js +10907 -0
  628. data/vendor/assets/javascripts/highstock/modules/streamgraph.js +10 -0
  629. data/vendor/assets/javascripts/highstock/modules/streamgraph.js.map +1 -0
  630. data/vendor/assets/javascripts/highstock/modules/streamgraph.src.js +158 -0
  631. data/vendor/assets/javascripts/highstock/modules/sunburst.js +52 -0
  632. data/vendor/assets/javascripts/highstock/modules/sunburst.js.map +1 -0
  633. data/vendor/assets/javascripts/highstock/modules/sunburst.src.js +3174 -0
  634. data/vendor/assets/javascripts/highstock/modules/tilemap.js +26 -0
  635. data/vendor/assets/javascripts/highstock/modules/tilemap.js.map +1 -0
  636. data/vendor/assets/javascripts/highstock/modules/tilemap.src.js +1402 -0
  637. data/vendor/assets/javascripts/highstock/modules/timeline.js +23 -0
  638. data/vendor/assets/javascripts/highstock/modules/timeline.js.map +1 -0
  639. data/vendor/assets/javascripts/highstock/modules/timeline.src.js +778 -0
  640. data/vendor/assets/javascripts/highstock/modules/treegrid.js +50 -0
  641. data/vendor/assets/javascripts/highstock/modules/treegrid.js.map +1 -0
  642. data/vendor/assets/javascripts/highstock/modules/treegrid.src.js +2917 -0
  643. data/vendor/assets/javascripts/highstock/modules/treemap.js +39 -0
  644. data/vendor/assets/javascripts/highstock/modules/treemap.js.map +1 -0
  645. data/vendor/assets/javascripts/highstock/modules/treemap.src.js +2083 -0
  646. data/vendor/assets/javascripts/highstock/modules/variable-pie.js +16 -0
  647. data/vendor/assets/javascripts/highstock/modules/variable-pie.js.map +1 -0
  648. data/vendor/assets/javascripts/highstock/modules/variable-pie.src.js +485 -0
  649. data/vendor/assets/javascripts/highstock/modules/variwide.js +15 -0
  650. data/vendor/assets/javascripts/highstock/modules/variwide.js.map +1 -0
  651. data/vendor/assets/javascripts/highstock/modules/variwide.src.js +376 -0
  652. data/vendor/assets/javascripts/highstock/modules/vector.js +13 -0
  653. data/vendor/assets/javascripts/highstock/modules/vector.js.map +1 -0
  654. data/vendor/assets/javascripts/highstock/modules/vector.src.js +381 -0
  655. data/vendor/assets/javascripts/highstock/modules/venn.js +30 -0
  656. data/vendor/assets/javascripts/highstock/modules/venn.js.map +1 -0
  657. data/vendor/assets/javascripts/highstock/modules/venn.src.js +1624 -0
  658. data/vendor/assets/javascripts/highstock/modules/windbarb.js +17 -0
  659. data/vendor/assets/javascripts/highstock/modules/windbarb.js.map +1 -0
  660. data/vendor/assets/javascripts/highstock/modules/windbarb.src.js +574 -0
  661. data/vendor/assets/javascripts/highstock/modules/wordcloud.js +25 -0
  662. data/vendor/assets/javascripts/highstock/modules/wordcloud.js.map +1 -0
  663. data/vendor/assets/javascripts/highstock/modules/wordcloud.src.js +1475 -0
  664. data/vendor/assets/javascripts/highstock/modules/xrange.js +20 -0
  665. data/vendor/assets/javascripts/highstock/modules/xrange.js.map +1 -0
  666. data/vendor/assets/javascripts/highstock/modules/xrange.src.js +788 -0
  667. data/vendor/assets/javascripts/highstock/themes/avocado.js +9 -0
  668. data/vendor/assets/javascripts/highstock/themes/avocado.js.map +1 -0
  669. data/vendor/assets/javascripts/highstock/themes/avocado.src.js +63 -0
  670. data/vendor/assets/javascripts/highstock/themes/dark-blue.js +15 -0
  671. data/vendor/assets/javascripts/highstock/themes/dark-blue.js.map +1 -0
  672. data/vendor/assets/javascripts/highstock/themes/dark-blue.src.js +285 -0
  673. data/vendor/assets/javascripts/highstock/themes/dark-green.js +15 -0
  674. data/vendor/assets/javascripts/highstock/themes/dark-green.js.map +1 -0
  675. data/vendor/assets/javascripts/highstock/themes/dark-green.src.js +287 -0
  676. data/vendor/assets/javascripts/highstock/themes/dark-unica.js +14 -0
  677. data/vendor/assets/javascripts/highstock/themes/dark-unica.js.map +1 -0
  678. data/vendor/assets/javascripts/highstock/themes/dark-unica.src.js +246 -0
  679. data/vendor/assets/javascripts/highstock/themes/gray.js +15 -0
  680. data/vendor/assets/javascripts/highstock/themes/gray.js.map +1 -0
  681. data/vendor/assets/javascripts/highstock/themes/gray.src.js +293 -0
  682. data/vendor/assets/javascripts/highstock/themes/grid-light.js +11 -0
  683. data/vendor/assets/javascripts/highstock/themes/grid-light.js.map +1 -0
  684. data/vendor/assets/javascripts/highstock/themes/grid-light.src.js +107 -0
  685. data/vendor/assets/javascripts/highstock/themes/grid.js +11 -0
  686. data/vendor/assets/javascripts/highstock/themes/grid.js.map +1 -0
  687. data/vendor/assets/javascripts/highstock/themes/grid.src.js +136 -0
  688. data/vendor/assets/javascripts/highstock/themes/sand-signika.js +11 -0
  689. data/vendor/assets/javascripts/highstock/themes/sand-signika.js.map +1 -0
  690. data/vendor/assets/javascripts/highstock/themes/sand-signika.src.js +137 -0
  691. data/vendor/assets/javascripts/highstock/themes/skies.js +11 -0
  692. data/vendor/assets/javascripts/highstock/themes/skies.js.map +1 -0
  693. data/vendor/assets/javascripts/highstock/themes/skies.src.js +126 -0
  694. data/vendor/assets/javascripts/highstock/themes/sunset.js +9 -0
  695. data/vendor/assets/javascripts/highstock/themes/sunset.js.map +1 -0
  696. data/vendor/assets/javascripts/highstock/themes/sunset.src.js +62 -0
  697. metadata +781 -0
@@ -0,0 +1,65 @@
1
+ /*
2
+ Highcharts JS v7.0.3 (2019-02-06)
3
+ Boost module
4
+
5
+ (c) 2010-2019 Highsoft AS
6
+ Author: Torstein Honsi
7
+
8
+ License: www.highcharts.com/license
9
+ */
10
+ (function(u){"object"===typeof module&&module.exports?(u["default"]=u,module.exports=u):"function"===typeof define&&define.amd?define(function(){return u}):u("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(u){(function(l){function u(){var a=Array.prototype.slice.call(arguments),c=-Number.MAX_VALUE;a.forEach(function(a){if("undefined"!==typeof a&&null!==a&&"undefined"!==typeof a.length&&0<a.length)return c=a.length,!0});return c}function V(a){var c=0,d=0,f=G(a.options.boost&&a.options.boost.allowForce,
11
+ !0),b;if("undefined"!==typeof a.boostForceChartBoost)return a.boostForceChartBoost;if(1<a.series.length)for(var l=0;l<a.series.length;l++)b=a.series[l],0!==b.options.boostThreshold&&!1!==b.visible&&"heatmap"!==b.type&&(H[b.type]&&++d,u(b.processedXData,b.options.data,b.points)>=(b.options.boostThreshold||Number.MAX_VALUE)&&++c);a.boostForceChartBoost=f&&(d===a.series.length&&0<c||5<c);return a.boostForceChartBoost}function P(a){return G(a&&a.options&&a.options.boost&&a.options.boost.enabled,!0)}function pa(a){function c(){k.length&&
12
+ l.error("[highcharts boost] shader error - "+k.join("\n"))}function d(b,e){var c=a.createShader("vertex"===e?a.VERTEX_SHADER:a.FRAGMENT_SHADER);a.shaderSource(c,b);a.compileShader(c);return a.getShaderParameter(c,a.COMPILE_STATUS)?c:(k.push("when compiling "+e+" shader:\n"+a.getShaderInfoLog(c)),!1)}function f(){function b(b){return a.getUniformLocation(h,b)}var f=d("#version 100\nprecision highp float;\nattribute vec4 aVertexPosition;\nattribute vec4 aColor;\nvarying highp vec2 position;\nvarying highp vec4 vColor;\nuniform mat4 uPMatrix;\nuniform float pSize;\nuniform float translatedThreshold;\nuniform bool hasThreshold;\nuniform bool skipTranslation;\nuniform float plotHeight;\nuniform float xAxisTrans;\nuniform float xAxisMin;\nuniform float xAxisMinPad;\nuniform float xAxisPointRange;\nuniform float xAxisLen;\nuniform bool xAxisPostTranslate;\nuniform float xAxisOrdinalSlope;\nuniform float xAxisOrdinalOffset;\nuniform float xAxisPos;\nuniform bool xAxisCVSCoord;\nuniform float yAxisTrans;\nuniform float yAxisMin;\nuniform float yAxisMinPad;\nuniform float yAxisPointRange;\nuniform float yAxisLen;\nuniform bool yAxisPostTranslate;\nuniform float yAxisOrdinalSlope;\nuniform float yAxisOrdinalOffset;\nuniform float yAxisPos;\nuniform bool yAxisCVSCoord;\nuniform bool isBubble;\nuniform bool bubbleSizeByArea;\nuniform float bubbleZMin;\nuniform float bubbleZMax;\nuniform float bubbleZThreshold;\nuniform float bubbleMinSize;\nuniform float bubbleMaxSize;\nuniform bool bubbleSizeAbs;\nuniform bool isInverted;\nfloat bubbleRadius(){\nfloat value \x3d aVertexPosition.w;\nfloat zMax \x3d bubbleZMax;\nfloat zMin \x3d bubbleZMin;\nfloat radius \x3d 0.0;\nfloat pos \x3d 0.0;\nfloat zRange \x3d zMax - zMin;\nif (bubbleSizeAbs){\nvalue \x3d value - bubbleZThreshold;\nzMax \x3d max(zMax - bubbleZThreshold, zMin - bubbleZThreshold);\nzMin \x3d 0.0;\n}\nif (value \x3c zMin){\nradius \x3d bubbleZMin / 2.0 - 1.0;\n} else {\npos \x3d zRange \x3e 0.0 ? (value - zMin) / zRange : 0.5;\nif (bubbleSizeByArea \x26\x26 pos \x3e 0.0){\npos \x3d sqrt(pos);\n}\nradius \x3d ceil(bubbleMinSize + pos * (bubbleMaxSize - bubbleMinSize)) / 2.0;\n}\nreturn radius * 2.0;\n}\nfloat translate(float val,\nfloat pointPlacement,\nfloat localA,\nfloat localMin,\nfloat minPixelPadding,\nfloat pointRange,\nfloat len,\nbool cvsCoord\n){\nfloat sign \x3d 1.0;\nfloat cvsOffset \x3d 0.0;\nif (cvsCoord) {\nsign *\x3d -1.0;\ncvsOffset \x3d len;\n}\nreturn sign * (val - localMin) * localA + cvsOffset + \n(sign * minPixelPadding);\n}\nfloat xToPixels(float value){\nif (skipTranslation){\nreturn value;// + xAxisPos;\n}\nreturn translate(value, 0.0, xAxisTrans, xAxisMin, xAxisMinPad, xAxisPointRange, xAxisLen, xAxisCVSCoord);// + xAxisPos;\n}\nfloat yToPixels(float value, float checkTreshold){\nfloat v;\nif (skipTranslation){\nv \x3d value;// + yAxisPos;\n} else {\nv \x3d translate(value, 0.0, yAxisTrans, yAxisMin, yAxisMinPad, yAxisPointRange, yAxisLen, yAxisCVSCoord);// + yAxisPos;\nif (v \x3e plotHeight) {\nv \x3d plotHeight;\n}\n}\nif (checkTreshold \x3e 0.0 \x26\x26 hasThreshold) {\nv \x3d min(v, translatedThreshold);\n}\nreturn v;\n}\nvoid main(void) {\nif (isBubble){\ngl_PointSize \x3d bubbleRadius();\n} else {\ngl_PointSize \x3d pSize;\n}\nvColor \x3d aColor;\nif (isInverted) {\ngl_Position \x3d uPMatrix * vec4(xToPixels(aVertexPosition.y) + yAxisPos, yToPixels(aVertexPosition.x, aVertexPosition.z) + xAxisPos, 0.0, 1.0);\n} else {\ngl_Position \x3d uPMatrix * vec4(xToPixels(aVertexPosition.x) + xAxisPos, yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, 0.0, 1.0);\n}\n}",
13
+ "vertex"),l=d("precision highp float;\nuniform vec4 fillColor;\nvarying highp vec2 position;\nvarying highp vec4 vColor;\nuniform sampler2D uSampler;\nuniform bool isCircle;\nuniform bool hasColor;\nvoid main(void) {\nvec4 col \x3d fillColor;\nvec4 tcol;\nif (hasColor) {\ncol \x3d vColor;\n}\nif (isCircle) {\ntcol \x3d texture2D(uSampler, gl_PointCoord.st);\ncol *\x3d tcol;\nif (tcol.r \x3c 0.0) {\ndiscard;\n} else {\ngl_FragColor \x3d col;\n}\n} else {\ngl_FragColor \x3d col;\n}\n}","fragment");
14
+ if(!f||!l)return h=!1,c(),!1;h=a.createProgram();a.attachShader(h,f);a.attachShader(h,l);a.linkProgram(h);if(!a.getProgramParameter(h,a.LINK_STATUS))return k.push(a.getProgramInfoLog(h)),c(),h=!1;a.useProgram(h);a.bindAttribLocation(h,0,"aVertexPosition");m=b("uPMatrix");Q=b("pSize");n=b("fillColor");g=b("isBubble");D=b("bubbleSizeAbs");e=b("bubbleSizeByArea");I=b("uSampler");z=b("skipTranslation");A=b("isCircle");B=b("isInverted");p=b("plotHeight");return!0}function b(b,e){a&&h&&(b=N[b]=N[b]||a.getUniformLocation(h,
15
+ b),a.uniform1f(b,e))}var N={},h,m,Q,n,g,D,e,z,A,B,p,k=[],I;return a&&!f()?!1:{psUniform:function(){return Q},pUniform:function(){return m},fillColorUniform:function(){return n},setPlotHeight:function(b){a&&h&&a.uniform1f(p,b)},setBubbleUniforms:function(c,d,f){var l=c.options,v=Number.MAX_VALUE,w=-Number.MAX_VALUE;a&&h&&"bubble"===c.type&&(v=G(l.zMin,Math.min(v,Math.max(d,!1===l.displayNegative?l.zThreshold:-Number.MAX_VALUE))),w=G(l.zMax,Math.max(w,f)),a.uniform1i(g,1),a.uniform1i(A,1),a.uniform1i(e,
16
+ "width"!==c.options.sizeBy),a.uniform1i(D,c.options.sizeByAbsoluteValue),b("bubbleZMin",v),b("bubbleZMax",w),b("bubbleZThreshold",c.options.zThreshold),b("bubbleMinSize",c.minPxSize),b("bubbleMaxSize",c.maxPxSize))},bind:function(){a&&h&&a.useProgram(h)},program:function(){return h},create:f,setUniform:b,setPMatrix:function(b){a&&h&&a.uniformMatrix4fv(m,!1,b)},setColor:function(b){a&&h&&a.uniform4f(n,b[0]/255,b[1]/255,b[2]/255,b[3])},setPointSize:function(b){a&&h&&a.uniform1f(Q,b)},setSkipTranslation:function(b){a&&
17
+ h&&a.uniform1i(z,!0===b?1:0)},setTexture:function(b){a&&h&&a.uniform1i(I,b)},setDrawAsCircle:function(b){a&&h&&a.uniform1i(A,b?1:0)},reset:function(){a&&h&&(a.uniform1i(g,0),a.uniform1i(A,0))},setInverted:function(b){a&&h&&a.uniform1i(B,b)},destroy:function(){a&&h&&(a.deleteProgram(h),h=!1)}}}function R(a,c,d){function f(){b&&(a.deleteBuffer(b),l=b=!1);k=0;h=d||2;n=[]}var b=!1,l=!1,h=d||2,m=!1,k=0,n;return{destroy:f,bind:function(){if(!b)return!1;a.vertexAttribPointer(l,h,a.FLOAT,!1,0,0)},data:n,
18
+ build:function(d,D,e){var g;n=d||[];if(!(n&&0!==n.length||m))return f(),!1;h=e||h;b&&a.deleteBuffer(b);m||(g=new Float32Array(n));b=a.createBuffer();a.bindBuffer(a.ARRAY_BUFFER,b);a.bufferData(a.ARRAY_BUFFER,m||g,a.STATIC_DRAW);l=a.getAttribLocation(c.program(),D);a.enableVertexAttribArray(l);return!0},render:function(c,d,e){var g=m?m.length:n.length;if(!b||!g)return!1;if(!c||c>g||0>c)c=0;if(!d||d>g)d=g;a.drawArrays(a[(e||"points").toUpperCase()],c/h,(d-c)/h);return!0},allocate:function(a){k=-1;m=
19
+ new Float32Array(4*a)},push:function(a,b,c,d){m&&(m[++k]=a,m[++k]=b,m[++k]=c,m[++k]=d)}}}function qa(a){function c(a){var b,c;return a.isSeriesBoosting?(b=!!a.options.stacking,c=a.xData||a.options.xData||a.processedXData,b=(b?a.data:c||a.options.data).length,"treemap"===a.type?b*=12:"heatmap"===a.type?b*=6:fa[a.type]&&(b*=2),b):0}function d(){e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)}function f(a,b){function c(a){a&&(b.colorData.push(a[0]),b.colorData.push(a[1]),b.colorData.push(a[2]),b.colorData.push(a[3]))}
20
+ function e(a,b,e,d,w){c(w);q.usePreallocated?D.push(a,b,e?1:0,d||1):(B.push(a),B.push(b),B.push(e?1:0),B.push(d||1))}function d(){b.segments.length&&(b.segments[b.segments.length-1].to=B.length)}function w(){b.segments.length&&b.segments[b.segments.length-1].from===B.length||(d(),b.segments.push({from:B.length}))}function g(a,b,d,w,g){c(g);e(a+d,b);c(g);e(a,b);c(g);e(a,b+w);c(g);e(a,b+w);c(g);e(a+d,b+w);c(g);e(a+d,b)}function f(a,c){q.useGPUTranslations||(b.skipTranslation=!0,a.x=y.toPixels(a.x,!0),
21
+ a.y=z.toPixels(a.y,!0));c?B=[a.x,a.y,0,2].concat(B):e(a.x,a.y,0,2)}var ha=a.pointArrayMap&&"low,high"===a.pointArrayMap.join(","),h=a.chart,O=a.options,m=!!O.stacking,k=O.data,S=a.xAxis.getExtremes(),N=S.min,S=S.max,p=a.yAxis.getExtremes(),v=p.min,p=p.max,n=a.xData||O.xData||a.processedXData,A=a.yData||O.yData||a.processedYData,u=a.zData||O.zData||a.processedZData,z=a.yAxis,y=a.xAxis,F=a.chart.plotHeight,I=a.chart.plotWidth,G=!n||0===n.length,H=O.connectNulls,r=a.points||!1,Q=!1,J=!1,x,T,U,k=m?a.data:
22
+ n||k,n={x:Number.MAX_VALUE,y:0},K={x:-Number.MAX_VALUE,y:0},L=0,M=!1,t,ca,E=-1,Z=!1,aa=!1,ba,W="undefined"===typeof h.index,X=!1,da=!1,V=fa[a.type],ea=!1,P=!0,ga=!0,R=O.threshold;if(!(O.boostData&&0<O.boostData.length)){h.inverted&&(F=a.chart.plotWidth,I=a.chart.plotHeight);a.closestPointRangePx=Number.MAX_VALUE;w();if(r&&0<r.length)b.skipTranslation=!0,b.drawMode="triangles",r[0].node&&r[0].node.levelDynamic&&r.sort(function(a,b){if(a.node){if(a.node.levelDynamic>b.node.levelDynamic)return 1;if(a.node.levelDynamic<
23
+ b.node.levelDynamic)return-1}return 0}),r.forEach(function(b){var c=b.plotY,e;"undefined"===typeof c||isNaN(c)||null===b.y||(c=b.shapeArgs,e=h.styledMode?b.series.colorAttribs(b):e=b.series.pointAttribs(b),b=e["stroke-width"]||0,T=l.color(e.fill).rgba,T[0]/=255,T[1]/=255,T[2]/=255,"treemap"===a.type&&(b=b||1,U=l.color(e.stroke).rgba,U[0]/=255,U[1]/=255,U[2]/=255,g(c.x,c.y,c.width,c.height,U),b/=2),"heatmap"===a.type&&h.inverted&&(c.x=y.len-c.x,c.y=z.len-c.y,c.width=-c.width,c.height=-c.height),g(c.x+
24
+ b,c.y+b,c.width-2*b,c.height-2*b,T))});else{for(;E<k.length-1;){x=k[++E];if(W)break;G?(r=x[0],t=x[1],k[E+1]&&(aa=k[E+1][0]),k[E-1]&&(Z=k[E-1][0]),3<=x.length&&(ca=x[2],x[2]>b.zMax&&(b.zMax=x[2]),x[2]<b.zMin&&(b.zMin=x[2]))):(r=x,t=A[E],k[E+1]&&(aa=k[E+1]),k[E-1]&&(Z=k[E-1]),u&&u.length&&(ca=u[E],u[E]>b.zMax&&(b.zMax=u[E]),u[E]<b.zMin&&(b.zMin=u[E])));if(H||null!==r&&null!==t){if(aa&&aa>=N&&aa<=S&&(X=!0),Z&&Z>=N&&Z<=S&&(da=!0),ha?(G&&(t=x.slice(1,3)),ba=t[0],t=t[1]):m&&(r=x.x,t=x.stackY,ba=t-x.y),
25
+ null!==v&&"undefined"!==typeof v&&null!==p&&"undefined"!==typeof p&&(P=t>=v&&t<=p),r>S&&K.x<S&&(K.x=r,K.y=t),r<N&&n.x>N&&(n.x=r,n.y=t),null!==t||!H)if(null!==t&&(P||X||da)){if(r>=N&&r<=S&&(ea=!0),ea||X||da){if(!q.useGPUTranslations&&(b.skipTranslation=!0,r=y.toPixels(r,!0),t=z.toPixels(t,!0),t>F&&(t=F),r>I&&"points"===b.drawMode))continue;if(V){x=ba;if(!1===ba||"undefined"===typeof ba)x=0>t?t:0;ha||m||(x=Math.max(R,v));q.useGPUTranslations||(x=z.toPixels(x,!0));e(r,x,0,0,!1)}b.hasMarkers&&ea&&!1!==
26
+ Q&&(a.closestPointRangePx=Math.min(a.closestPointRangePx,Math.abs(r-Q)));!q.useGPUTranslations&&!q.usePreallocated&&Q&&1>Math.abs(r-Q)&&J&&1>Math.abs(t-J)?q.debug.showSkipSummary&&++L:(O.step&&!ga&&e(r,J,0,2,!1),e(r,t,0,"bubble"===a.type?ca||1:2,!1),Q=r,J=t,M=!0,ga=!1)}}else w()}else w()}q.debug.showSkipSummary&&console.log("skipped points:",L);M||!1===H||"line_strip"!==a.drawMode||(n.x<Number.MAX_VALUE&&f(n,!0),K.x>-Number.MAX_VALUE&&f(K))}d()}}function b(){v=[];y.data=B=[];u=[];D&&D.destroy()}function k(a){g&&
27
+ (g.setUniform("xAxisTrans",a.transA),g.setUniform("xAxisMin",a.min),g.setUniform("xAxisMinPad",a.minPixelPadding),g.setUniform("xAxisPointRange",a.pointRange),g.setUniform("xAxisLen",a.len),g.setUniform("xAxisPos",a.pos),g.setUniform("xAxisCVSCoord",!a.horiz))}function h(a){g&&(g.setUniform("yAxisTrans",a.transA),g.setUniform("yAxisMin",a.min),g.setUniform("yAxisMinPad",a.minPixelPadding),g.setUniform("yAxisPointRange",a.pointRange),g.setUniform("yAxisLen",a.len),g.setUniform("yAxisPos",a.pos),g.setUniform("yAxisCVSCoord",
28
+ !a.horiz))}function m(a,b){g.setUniform("hasThreshold",a);g.setUniform("translatedThreshold",b)}function p(c){if(c)z=c.chartWidth||800,A=c.chartHeight||400;else return!1;if(!(e&&z&&A&&g))return!1;q.debug.timeRendering&&console.time("gl rendering");e.canvas.width=z;e.canvas.height=A;g.bind();e.viewport(0,0,z,A);g.setPMatrix([2/z,0,0,0,0,-(2/A),0,0,0,0,-2,0,-1,1,-1,1]);g.setPlotHeight(c.plotHeight);1<q.lineWidth&&!l.isMS&&e.lineWidth(q.lineWidth);D.build(y.data,"aVertexPosition",4);D.bind();g.setInverted(c.inverted);
29
+ v.forEach(function(a,b){var d=a.series.options,f=d.marker,C;C="undefined"!==typeof d.lineWidth?d.lineWidth:1;var w=d.threshold,n=J(w),N=a.series.yAxis.getThreshold(w),w=G(d.marker?d.marker.enabled:null,a.series.xAxis.isRadial?!0:null,a.series.closestPointRangePx>2*((d.marker?d.marker.radius:10)||10)),f=F[f&&f.symbol||a.series.symbol]||F.circle;if(!(0===a.segments.length||a.segmentslength&&a.segments[0].from===a.segments[0].to)){f.isReady&&(e.bindTexture(e.TEXTURE_2D,f.handle),g.setTexture(f.handle));
30
+ c.styledMode?f=a.series.markerGroup&&a.series.markerGroup.getStyle("fill"):(f=a.series.pointAttribs&&a.series.pointAttribs().fill||a.series.color,d.colorByPoint&&(f=a.series.chart.options.colors[b]));a.series.fillOpacity&&d.fillOpacity&&(f=(new ia(f)).setOpacity(G(d.fillOpacity,1)).get());f=l.color(f).rgba;q.useAlpha||(f[3]=1);"lines"===a.drawMode&&q.useAlpha&&1>f[3]&&(f[3]/=10);"add"===d.boostBlending?(e.blendFunc(e.SRC_ALPHA,e.ONE),e.blendEquation(e.FUNC_ADD)):"mult"===d.boostBlending||"multiply"===
31
+ d.boostBlending?e.blendFunc(e.DST_COLOR,e.ZERO):"darken"===d.boostBlending?(e.blendFunc(e.ONE,e.ONE),e.blendEquation(e.FUNC_MIN)):e.blendFuncSeparate(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA,e.ONE,e.ONE_MINUS_SRC_ALPHA);g.reset();0<a.colorData.length&&(g.setUniform("hasColor",1),b=R(e,g),b.build(a.colorData,"aColor",4),b.bind());g.setColor(f);k(a.series.xAxis);h(a.series.yAxis);m(n,N);"points"===a.drawMode&&(d.marker&&d.marker.radius?g.setPointSize(2*d.marker.radius):g.setPointSize(1));g.setSkipTranslation(a.skipTranslation);
32
+ "bubble"===a.series.type&&g.setBubbleUniforms(a.series,a.zMin,a.zMax);g.setDrawAsCircle(H[a.series.type]||!1);if(0<C||"line_strip"!==a.drawMode)for(C=0;C<a.segments.length;C++)D.render(a.segments[C].from,a.segments[C].to,a.drawMode);if(a.hasMarkers&&w)for(d.marker&&d.marker.radius?g.setPointSize(2*d.marker.radius):g.setPointSize(10),g.setDrawAsCircle(!0),C=0;C<a.segments.length;C++)D.render(a.segments[C].from,a.segments[C].to,"POINTS")}});q.debug.timeRendering&&console.timeEnd("gl rendering");a&&
33
+ a();b()}function n(a){d();if(a.renderer.forExport)return p(a);I?p(a):setTimeout(function(){n(a)},1)}var g=!1,D=!1,e=!1,z=0,A=0,B=!1,u=!1,y={},I=!1,v=[],F={},fa={column:!0,columnrange:!0,bar:!0,area:!0,arearange:!0},H={scatter:!0,bubble:!0},q={pointSize:1,lineWidth:1,fillColor:"#AA00AA",useAlpha:!0,usePreallocated:!1,useGPUTranslations:!1,debug:{timeRendering:!1,timeSeriesProcessing:!1,timeSetup:!1,timeBufferCopy:!1,timeKDTree:!1,showSkipSummary:!1}};return y={allocateBufferForSingleSeries:function(a){var b=
34
+ 0;q.usePreallocated&&(a.isSeriesBoosting&&(b=c(a)),D.allocate(b))},pushSeries:function(a){0<v.length&&v[v.length-1].hasMarkers&&(v[v.length-1].markerTo=u.length);q.debug.timeSeriesProcessing&&console.time("building "+a.type+" series");v.push({segments:[],markerFrom:u.length,colorData:[],series:a,zMin:Number.MAX_VALUE,zMax:-Number.MAX_VALUE,hasMarkers:a.options.marker?!1!==a.options.marker.enabled:!1,showMarkers:!0,drawMode:{area:"lines",arearange:"lines",areaspline:"line_strip",column:"lines",columnrange:"lines",
35
+ bar:"lines",line:"line_strip",scatter:"points",heatmap:"triangles",treemap:"triangles",bubble:"points"}[a.type]||"line_strip"});f(a,v[v.length-1]);q.debug.timeSeriesProcessing&&console.timeEnd("building "+a.type+" series")},setSize:function(a,b){z===a&&A===b||!g||(z=a,A=b,g.bind(),g.setPMatrix([2/z,0,0,0,0,-(2/A),0,0,0,0,-2,0,-1,1,-1,1]))},inited:function(){return I},setThreshold:m,init:function(a,c){function d(a,b){var c={isReady:!1,texture:K.createElement("canvas"),handle:e.createTexture()},d=c.texture.getContext("2d");
36
+ F[a]=c;c.texture.width=512;c.texture.height=512;d.mozImageSmoothingEnabled=!1;d.webkitImageSmoothingEnabled=!1;d.msImageSmoothingEnabled=!1;d.imageSmoothingEnabled=!1;d.strokeStyle="rgba(255, 255, 255, 0)";d.fillStyle="#FFF";b(d);try{e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,c.handle),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,c.texture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,
37
+ e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.bindTexture(e.TEXTURE_2D,null),c.isReady=!0}catch(xa){}}var f=0,h=["webgl","experimental-webgl","moz-webgl","webkit-3d"];I=!1;if(!a)return!1;for(q.debug.timeSetup&&console.time("gl setup");f<h.length&&!(e=a.getContext(h[f],{}));f++);if(e)c||b();else return!1;e.enable(e.BLEND);e.blendFunc(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA);e.disable(e.DEPTH_TEST);e.depthFunc(e.LESS);g=pa(e);if(!g)return!1;D=R(e,g);d("circle",
38
+ function(a){a.beginPath();a.arc(256,256,256,0,2*Math.PI);a.stroke();a.fill()});d("square",function(a){a.fillRect(0,0,512,512)});d("diamond",function(a){a.beginPath();a.moveTo(256,0);a.lineTo(512,256);a.lineTo(256,512);a.lineTo(0,256);a.lineTo(256,0);a.fill()});d("triangle",function(a){a.beginPath();a.moveTo(0,512);a.lineTo(256,0);a.lineTo(512,512);a.lineTo(0,512);a.fill()});d("triangle-down",function(a){a.beginPath();a.moveTo(0,0);a.lineTo(256,512);a.lineTo(512,0);a.lineTo(0,0);a.fill()});I=!0;q.debug.timeSetup&&
39
+ console.timeEnd("gl setup");return!0},render:n,settings:q,valid:function(){return!1!==e},clear:d,flush:b,setXAxis:k,setYAxis:h,data:B,gl:function(){return e},allocateBuffer:function(a){var b=0;q.usePreallocated&&(a.series.forEach(function(a){a.isSeriesBoosting&&(b+=c(a))}),D.allocate(b))},destroy:function(){b();D.destroy();g.destroy();e&&(ra(F,function(a){F[a].handle&&e.deleteTexture(F[a].handle)}),e.canvas.width=1,e.canvas.height=1)},setOptions:function(a){sa(!0,q,a)}}}function ja(a,c){var d=a.chartWidth,
40
+ f=a.chartHeight,b=a,k=a.seriesGroup||c.group,h=K.implementation.hasFeature("www.http://w3.org/TR/SVG11/feature#Extensibility","1.1"),b=a.isChartSeriesBoosting()?a:c,h=!1;b.renderTarget||(b.canvas=ta,a.renderer.forExport||!h?(b.renderTarget=a.renderer.image("",0,0,d,f).addClass("highcharts-boost-canvas").add(k),b.boostClear=function(){b.renderTarget.attr({href:""})},b.boostCopy=function(){b.boostResizeTarget();b.renderTarget.attr({href:b.canvas.toDataURL("image/png")})}):(b.renderTargetFo=a.renderer.createElement("foreignObject").add(k),
41
+ b.renderTarget=K.createElement("canvas"),b.renderTargetCtx=b.renderTarget.getContext("2d"),b.renderTargetFo.element.appendChild(b.renderTarget),b.boostClear=function(){b.renderTarget.width=b.canvas.width;b.renderTarget.height=b.canvas.height},b.boostCopy=function(){b.renderTarget.width=b.canvas.width;b.renderTarget.height=b.canvas.height;b.renderTargetCtx.drawImage(b.canvas,0,0)}),b.boostResizeTarget=function(){d=a.chartWidth;f=a.chartHeight;(b.renderTargetFo||b.renderTarget).attr({x:0,y:0,width:d,
42
+ height:f}).css({pointerEvents:"none",mixedBlendMode:"normal",opacity:1});b instanceof l.Chart&&b.markerGroup.translate(a.plotLeft,a.plotTop)},b.boostClipRect=a.renderer.clipRect(),(b.renderTargetFo||b.renderTarget).clip(b.boostClipRect),b instanceof l.Chart&&(b.markerGroup=b.renderer.g().add(k),b.markerGroup.translate(c.xAxis.pos,c.yAxis.pos)));b.canvas.width=d;b.canvas.height=f;b.boostClipRect.attr(a.getBoostClipRect(b));b.boostResizeTarget();b.boostClear();b.ogl||(b.ogl=qa(function(){b.ogl.settings.debug.timeBufferCopy&&
43
+ console.time("buffer copy");b.boostCopy();b.ogl.settings.debug.timeBufferCopy&&console.timeEnd("buffer copy")}),b.ogl.init(b.canvas)||l.error("[highcharts boost] - unable to init WebGL renderer"),b.ogl.setOptions(a.options.boost||{}),b instanceof l.Chart&&b.ogl.allocateBuffer(a));b.ogl.setSize(d,f);return b.ogl}function ka(a,c,d){a&&c.renderTarget&&c.canvas&&!(d||c.chart).isChartSeriesBoosting()&&a.render(d||c.chart)}function la(a,c){a&&c.renderTarget&&c.canvas&&!c.chart.isChartSeriesBoosting()&&
44
+ a.allocateBufferForSingleSeries(c)}function ua(a){var c=!0;this.chart.options&&this.chart.options.boost&&(c="undefined"===typeof this.chart.options.boost.enabled?!0:this.chart.options.boost.enabled);if(!c||!this.isSeriesBoosting)return a.call(this);this.chart.isBoosting=!0;if(a=ja(this.chart,this))la(a,this),a.pushSeries(this);ka(a,this)}var L=l.win,K=L.document,va=function(){},ma=l.Chart,ia=l.Color,p=l.Series,k=l.seriesTypes,ra=l.objectEach,na=l.extend,M=l.addEvent,wa=l.fireEvent,J=l.isNumber,sa=
45
+ l.merge,G=l.pick,y=l.wrap,W=l.getOptions().plotOptions,ta=K.createElement("canvas"),X,oa="area arearange column columnrange bar line scatter heatmap bubble treemap".split(" "),H={};oa.forEach(function(a){H[a]=1});ia.prototype.names={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",
46
+ chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",
47
+ dimgray:"#696969",dodgerblue:"#1e90ff",feldspar:"#d19275",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",
48
+ lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslateblue:"#8470ff",lightslategray:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",
49
+ mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",
50
+ purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",violetred:"#d02090",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",
51
+ yellowgreen:"#9acd32"};ma.prototype.isChartSeriesBoosting=function(){return G(this.options.boost&&this.options.boost.seriesThreshold,50)<=this.series.length||V(this)};ma.prototype.getBoostClipRect=function(a){var c={x:this.plotLeft,y:this.plotTop,width:this.plotWidth,height:this.plotHeight};a===this&&this.yAxis.forEach(function(a){c.y=Math.min(a.pos,c.y);c.height=Math.max(a.pos-this.plotTop+a.len,c.height)},this);return c};l.eachAsync=function(a,c,d,f,b,k){b=b||0;f=f||3E4;for(var h=b+f,m=!0;m&&b<
52
+ h&&b<a.length;)m=c(a[b],b),++b;m&&(b<a.length?k?l.eachAsync(a,c,d,f,b,k):L.requestAnimationFrame?L.requestAnimationFrame(function(){l.eachAsync(a,c,d,f,b)}):setTimeout(function(){l.eachAsync(a,c,d,f,b)}):d&&d())};p.prototype.getPoint=function(a){var c=a,d=this.xData||this.options.xData||this.processedXData||!1;!a||a instanceof this.pointClass||(c=(new this.pointClass).init(this,this.options.data[a.i],d?d[a.i]:void 0),c.category=c.x,c.dist=a.dist,c.distX=a.distX,c.plotX=a.plotX,c.plotY=a.plotY,c.index=
53
+ a.i);return c};y(p.prototype,"searchPoint",function(a){return this.getPoint(a.apply(this,[].slice.call(arguments,1)))});M(p,"destroy",function(){var a=this,c=a.chart;c.markerGroup===a.markerGroup&&(a.markerGroup=null);c.hoverPoints&&(c.hoverPoints=c.hoverPoints.filter(function(c){return c.series===a}));c.hoverPoint&&c.hoverPoint.series===a&&(c.hoverPoint=null)});y(p.prototype,"getExtremes",function(a){if(!this.isSeriesBoosting||!this.hasExtremes||!this.hasExtremes())return a.apply(this,Array.prototype.slice.call(arguments,
54
+ 1))});oa.forEach(function(a){W[a]&&(W[a].boostThreshold=5E3,W[a].boostData=[],k[a].prototype.fillOpacity=!0)});["translate","generatePoints","drawTracker","drawPoints","render"].forEach(function(a){function c(c){var d=this.options.stacking&&("translate"===a||"generatePoints"===a);if(!this.isSeriesBoosting||d||!P(this.chart)||"heatmap"===this.type||"treemap"===this.type||!H[this.type]||0===this.options.boostThreshold)c.call(this);else if(this[a+"Canvas"])this[a+"Canvas"]()}y(p.prototype,a,c);"translate"===
55
+ a&&"column bar arearange columnrange heatmap treemap".split(" ").forEach(function(d){k[d]&&y(k[d].prototype,a,c)})});y(p.prototype,"processData",function(a){function c(a){return d.chart.isChartSeriesBoosting()||(a?a.length:0)>=(d.options.boostThreshold||Number.MAX_VALUE)}var d=this,f=this.options.data;P(this.chart)&&H[this.type]?(c(f)&&"heatmap"!==this.type&&"treemap"!==this.type&&!this.options.stacking&&this.hasExtremes&&this.hasExtremes(!0)||(a.apply(this,Array.prototype.slice.call(arguments,1)),
56
+ f=this.processedXData),(this.isSeriesBoosting=c(f))?this.enterBoost():this.exitBoost&&this.exitBoost()):a.apply(this,Array.prototype.slice.call(arguments,1))});M(p,"hide",function(){this.canvas&&this.renderTarget&&(this.ogl&&this.ogl.clear(),this.boostClear())});p.prototype.enterBoost=function(){this.alteredByBoost=[];["allowDG","directTouch","stickyTracking"].forEach(function(a){this.alteredByBoost.push({prop:a,val:this[a],own:this.hasOwnProperty(a)})},this);this.directTouch=this.allowDG=!1;this.stickyTracking=
57
+ !0;this.animate=null;this.labelBySeries&&(this.labelBySeries=this.labelBySeries.destroy())};p.prototype.exitBoost=function(){(this.alteredByBoost||[]).forEach(function(a){a.own?this[a.prop]=a.val:delete this[a.prop]},this);this.boostClear&&this.boostClear()};p.prototype.hasExtremes=function(a){var c=this.options,d=this.xAxis&&this.xAxis.options,f=this.yAxis&&this.yAxis.options;return c.data.length>(c.boostThreshold||Number.MAX_VALUE)&&J(f.min)&&J(f.max)&&(!a||J(d.min)&&J(d.max))};p.prototype.destroyGraphics=
58
+ function(){var a=this,c=this.points,d,f;if(c)for(f=0;f<c.length;f+=1)(d=c[f])&&d.destroyElements&&d.destroyElements();["graph","area","tracker"].forEach(function(b){a[b]&&(a[b]=a[b].destroy())})};l.hasWebGLSupport=function(){var a=0,c,d=["webgl","experimental-webgl","moz-webgl","webkit-3d"],f=!1;if("undefined"!==typeof L.WebGLRenderingContext)for(c=K.createElement("canvas");a<d.length;a++)try{if(f=c.getContext(d[a]),"undefined"!==typeof f&&null!==f)return!0}catch(b){}return!1};l.hasWebGLSupport()?
59
+ (l.extend(p.prototype,{renderCanvas:function(){function a(a,b){var c,d,f=!1,g="undefined"===typeof k.index,l=!0;if(!g&&(J?(c=a[0],d=a[1]):(c=a,d=n[b]),G?(J&&(d=a.slice(1,3)),f=d[0],d=d[1]):H&&(c=a.x,d=a.stackY,f=d-a.y),w||(l=d>=z&&d<=A),null!==d&&c>=u&&c<=e&&l))if(a=h.toPixels(c,!0),K){if(void 0===Y||a===y){G||(f=d);if(void 0===C||d>M)M=d,C=b;if(void 0===Y||f<L)L=f,Y=b}a!==y&&(void 0!==Y&&(d=m.toPixels(M,!0),F=m.toPixels(L,!0),R(a,d,C),F!==d&&R(a,F,Y)),Y=C=void 0,y=a)}else d=Math.ceil(m.toPixels(d,
60
+ !0)),R(a,d,b);return!g}function c(){wa(d,"renderedCanvas");delete d.buildKDTree;d.buildKDTree();P.debug.timeKDTree&&console.timeEnd("kd tree building")}var d=this,f=d.options||{},b=!1,k=d.chart,h=this.xAxis,m=this.yAxis,p=f.xData||d.processedXData,n=f.yData||d.processedYData,g=f.data,b=h.getExtremes(),u=b.min,e=b.max,b=m.getExtremes(),z=b.min,A=b.max,B={},y,K=!!d.sampling,I,v=!1!==f.enableMouseTracking,F=m.getThreshold(f.threshold),G=d.pointArrayMap&&"low,high"===d.pointArrayMap.join(","),H=!!f.stacking,
61
+ q=d.cropStart||0,w=d.requireSorting,J=!p,L,M,Y,C,P,W="x"===f.findNearestPointBy,V=this.xData||this.options.xData||this.processedXData||!1,R=function(a,b,c){a=Math.ceil(a);X=W?a:a+","+b;v&&!B[X]&&(B[X]=!0,k.inverted&&(a=h.len-a,b=m.len-b),I.push({x:V?V[q+c]:!1,clientX:a,plotX:a,plotY:b,i:q+c}))},b=ja(k,d);k.isBoosting=!0;P=b.settings;if(this.visible){if(this.points||this.graph)this.animate=null,this.destroyGraphics();k.isChartSeriesBoosting()?(this.markerGroup=k.markerGroup,this.renderTarget&&(this.renderTarget=
62
+ this.renderTarget.destroy())):this.markerGroup=d.plotGroup("markerGroup","markers",!0,1,k.seriesGroup);I=this.points=[];d.buildKDTree=va;b&&(la(b,this),b.pushSeries(d),ka(b,this,k));k.renderer.forExport||(P.debug.timeKDTree&&console.time("kd tree building"),l.eachAsync(H?d.data:p||g,a,c))}}}),["heatmap","treemap"].forEach(function(a){k[a]&&y(k[a].prototype,"drawPoints",ua)}),k.bubble&&(delete k.bubble.prototype.buildKDTree,y(k.bubble.prototype,"markerAttribs",function(a){return this.isSeriesBoosting?
63
+ !1:a.apply(this,[].slice.call(arguments,1))})),k.scatter.prototype.fill=!0,na(k.area.prototype,{fill:!0,fillOpacity:!0,sampling:!0}),na(k.column.prototype,{fill:!0,sampling:!0}),l.Chart.prototype.callbacks.push(function(a){M(a,"predraw",function(){a.boostForceChartBoost=void 0;a.boostForceChartBoost=V(a);a.isBoosting=!1;!a.isChartSeriesBoosting()&&a.didBoost&&(a.didBoost=!1);a.boostClear&&a.boostClear();a.canvas&&a.ogl&&a.isChartSeriesBoosting()&&(a.didBoost=!0,a.ogl.allocateBuffer(a));a.markerGroup&&
64
+ a.xAxis&&0<a.xAxis.length&&a.yAxis&&0<a.yAxis.length&&a.markerGroup.translate(a.xAxis[0].pos,a.yAxis[0].pos)});M(a,"render",function(){a.ogl&&a.isChartSeriesBoosting()&&a.ogl.render(a)})})):"undefined"!==typeof l.initCanvasBoost?l.initCanvasBoost():l.error(26)})(u)});
65
+ //# sourceMappingURL=boost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boost.js.map","lineCount":64,"mappings":"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","sources":["boost.src.js"],"names":["factory","module","exports","define","amd","Highcharts","undefined","H","patientMax","args","Array","prototype","slice","call","arguments","r","Number","MAX_VALUE","forEach","t","length","shouldForceChartSeriesBoosting","chart","sboostCount","canBoostCount","allowBoostForce","pick","options","boost","allowForce","series","boostForceChartBoost","i","boostThreshold","visible","type","boostableMap","processedXData","data","points","boostEnabled","enabled","GLShader","gl","handleErrors","errors","error","join","stringToProgram","str","shader","createShader","VERTEX_SHADER","FRAGMENT_SHADER","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","push","getShaderInfoLog","uloc","n","getUniformLocation","shaderProgram","v","vertShade","f","fragShade","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","useProgram","bindAttribLocation","pUniform","psUniform","fillColorUniform","isBubbleUniform","bubbleSizeAbsUniform","bubbleSizeAreaUniform","uSamplerUniform","skipTranslationUniform","isCircleUniform","isInverted","plotHeightUniform","setUniform","name","val","u","uLocations","uniform1f","setPlotHeight","setBubbleUniforms","zCalcMin","zCalcMax","seriesOptions","zMin","zMax","Math","min","max","displayNegative","zThreshold","uniform1i","sizeBy","sizeByAbsoluteValue","minPxSize","maxPxSize","bind","program","getProgram","create","setPMatrix","m","uniformMatrix4fv","setColor","color","uniform4f","setPointSize","p","setSkipTranslation","flag","setTexture","texture","setDrawAsCircle","reset","setInverted","destroy","deleteProgram","GLVertexBuffer","dataComponents","buffer","deleteBuffer","vertAttribute","iterator","components","preAllocated","vertexAttribPointer","FLOAT","build","dataIn","attrib","farray","Float32Array","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","STATIC_DRAW","getAttribLocation","enableVertexAttribArray","render","from","to","drawMode","drawArrays","toUpperCase","allocate","size","x","y","a","b","GLRenderer","postRenderCallback","seriesPointCount","isStacked","xData","isSeriesBoosting","s","stacking","asBar","clear","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","pushSeriesData","inst","pushColor","colorData","vertice","checkTreshold","pointSize","settings","usePreallocated","vbuffer","closeSegment","segments","beginSegment","pushRect","w","h","pushSupplementPoint","point","atStart","useGPUTranslations","skipTranslation","xAxis","toPixels","yAxis","concat","isRange","pointArrayMap","rawData","xExtremes","getExtremes","xMin","xMax","yExtremes","yMin","yMax","yData","processedYData","zData","processedZData","plotHeight","plotWidth","useRaw","connectNulls","lastX","lastY","minVal","scolor","sdata","closestLeft","closestRight","skipped","hadPoints","z","px","nx","low","chartDestroyed","index","nextInside","prevInside","drawAsBar","isXInside","isYInside","firstPoint","threshold","boostData","inverted","closestPointRangePx","node","levelDynamic","sort","plotY","pointAttr","isNaN","shapeArgs","styledMode","colorAttribs","pointAttribs","swidth","fill","rgba","stroke","width","height","len","d","stackY","pcolor","hasMarkers","abs","cullXThreshold","cullYThreshold","debug","showSkipSummary","step","console","log","flush","markerData","setXAxis","axis","transA","minPixelPadding","pointRange","pos","horiz","setYAxis","setThreshold","has","translation","chartWidth","chartHeight","timeRendering","time","canvas","viewport","lineWidth","isMS","si","shapeOptions","marker","sindex","hasThreshold","isNumber","translatedThreshold","getThreshold","yBottom","showMarkers","isRadial","radius","shapeTexture","textureHandles","symbol","circle","segmentslength","isReady","bindTexture","TEXTURE_2D","handle","fillColor","markerGroup","getStyle","colorByPoint","colors","fillOpacity","setOpacity","Color","get","useAlpha","boostBlending","blendFunc","SRC_ALPHA","ONE","blendEquation","FUNC_ADD","DST_COLOR","ZERO","FUNC_MIN","blendFuncSeparate","ONE_MINUS_SRC_ALPHA","cbuffer","asCircle","timeEnd","renderWhenReady","renderer","forExport","isInited","setTimeout","timeSeriesProcessing","timeSetup","timeBufferCopy","timeKDTree","allocateBufferForSingleSeries","pushSeries","markerTo","markerFrom","setSize","inited","init","noFlush","createTexture","fn","props","doc","createElement","ctx","getContext","mozImageSmoothingEnabled","webkitImageSmoothingEnabled","msImageSmoothingEnabled","imageSmoothingEnabled","strokeStyle","fillStyle","activeTexture","TEXTURE0","texImage2D","RGBA","UNSIGNED_BYTE","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MAG_FILTER","LINEAR","TEXTURE_MIN_FILTER","e","contexts","enable","BLEND","disable","DEPTH_TEST","depthFunc","LESS","beginPath","arc","PI","fillRect","moveTo","lineTo","valid","getGL","allocateBuffer","objEach","key","deleteTexture","setOptions","merge","createAndAttachRenderer","target","targetGroup","seriesGroup","group","foSupported","implementation","hasFeature","isChartSeriesBoosting","renderTarget","mainCanvas","image","addClass","add","boostClear","target.boostClear","attr","href","boostCopy","target.boostCopy","boostResizeTarget","toDataURL","renderTargetFo","renderTargetCtx","element","appendChild","drawImage","target.boostResizeTarget","css","pointerEvents","mixedBlendMode","opacity","alpha","Chart","translate","plotLeft","plotTop","boostClipRect","clipRect","clip","g","getBoostClipRect","ogl","renderIfNotSeriesBoosting","allocateIfNotSeriesBoosting","pointDrawHandler","proceed","isBoosting","win","document","noop","Series","seriesTypes","objectEach","extend","addEvent","fireEvent","wrap","plotOptions","getOptions","boostable","item","names","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","feldspar","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslateblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","violetred","wheat","white","whitesmoke","yellow","yellowgreen","Chart.prototype.isChartSeriesBoosting","seriesThreshold","Chart.prototype.getBoostClipRect","clipBox","eachAsync","H.eachAsync","arr","finalFunc","chunkSize","noTimeout","CHUNK_SIZE","requestAnimationFrame","getPoint","Series.prototype.getPoint","boostPoint","pointClass","category","dist","distX","plotX","apply","hoverPoints","filter","hoverPoint","hasExtremes","method","branch","letItPass","getSeriesBoosting","dataToMeasure","enterBoost","exitBoost","Series.prototype.enterBoost","alteredByBoost","prop","own","hasOwnProperty","directTouch","allowDG","stickyTracking","animate","labelBySeries","Series.prototype.exitBoost","setting","Series.prototype.hasExtremes","checkX","destroyGraphics","Series.prototype.destroyGraphics","destroyElements","hasWebGLSupport","H.hasWebGLSupport","context","WebGLRenderingContext","renderCanvas","processPoint","requireSorting","clientX","sampling","minI","lastClientX","maxI","maxVal","addKDPoint","ceil","doneProcessing","buildKDTree","boostOptions","pointTaken","enableMouseTracking","cropStart","compareX","findNearestPointBy","xDataFull","graph","plotGroup","bubble","scatter","area","column","callbacks","preRender","didBoost","canvasToSVG","initCanvasBoost"]}
@@ -0,0 +1,3752 @@
1
+ /**
2
+ * @license Highcharts JS v7.0.3 (2019-02-06)
3
+ * Boost module
4
+ *
5
+ * (c) 2010-2019 Highsoft AS
6
+ * Author: Torstein Honsi
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
+ * License: www.highcharts.com/license
26
+ * Author: Christer Vasseng, Torstein Honsi
27
+ *
28
+ * This is a Highcharts module that draws long data series on a cannvas in order
29
+ * to increase performance of the initial load time and tooltip responsiveness.
30
+ *
31
+ * Compatible with WebGL compatible browsers (not IE < 11).
32
+ *
33
+ * If this module is taken in as part of the core
34
+ * - All the loading logic should be merged with core. Update styles in the
35
+ * core.
36
+ * - Most of the method wraps should probably be added directly in parent
37
+ * methods.
38
+ *
39
+ * Notes for boost mode
40
+ * - Area lines are not drawn
41
+ * - Lines are not drawn on scatter charts
42
+ * - Zones and negativeColor don't work
43
+ * - Dash styles are not rendered on lines.
44
+ * - Columns are always one pixel wide. Don't set the threshold too low.
45
+ * - Disable animations
46
+ * - Marker shapes are not supported: markers will always be circles
47
+ *
48
+ * Optimizing tips for users
49
+ * - Set extremes (min, max) explicitly on the axes in order for Highcharts to
50
+ * avoid computing extremes.
51
+ * - Set enableMouseTracking to false on the series to improve total rendering
52
+ * time.
53
+ * - The default threshold is set based on one series. If you have multiple,
54
+ * dense series, the combined number of points drawn gets higher, and you may
55
+ * want to set the threshold lower in order to use optimizations.
56
+ * - If drawing large scatter charts, it's beneficial to set the marker radius
57
+ * to a value less than 1. This is to add additional spacing to make the chart
58
+ * more readable.
59
+ * - If the value increments on both the X and Y axis aren't small, consider
60
+ * setting useGPUTranslations to true on the boost settings object. If you do
61
+ * this and the increments are small (e.g. datetime axis with small time
62
+ * increments) it may cause rendering issues due to floating point rounding
63
+ * errors, so your millage may vary.
64
+ *
65
+ * Settings
66
+ * There are two ways of setting the boost threshold:
67
+ * - Per series: boost based on number of points in individual series
68
+ * - Per chart: boost based on the number of series
69
+ *
70
+ * To set the series boost threshold, set seriesBoostThreshold on the chart
71
+ * object.
72
+ * To set the series-specific threshold, set boostThreshold on the series
73
+ * object.
74
+ *
75
+ * In addition, the following can be set in the boost object:
76
+ * {
77
+ * //Wether or not to use alpha blending
78
+ * useAlpha: boolean - default: true
79
+ * //Set to true to perform translations on the GPU.
80
+ * //Much faster, but may cause rendering issues
81
+ * //when using values far from 0 due to floating point
82
+ * //rounding issues
83
+ * useGPUTranslations: boolean - default: false
84
+ * //Use pre-allocated buffers, much faster,
85
+ * //but may cause rendering issues with some data sets
86
+ * usePreallocated: boolean - default: false
87
+ * }
88
+ */
89
+
90
+ /**
91
+ * Options for the Boost module. The Boost module allows certain series types
92
+ * to be rendered by WebGL instead of the default SVG. This allows hundreds of
93
+ * thousands of data points to be rendered in milliseconds. In addition to the
94
+ * WebGL rendering it saves time by skipping processing and inspection of the
95
+ * data wherever possible. This introduces some limitations to what features are
96
+ * available in Boost mode. See [the docs](
97
+ * https://www.highcharts.com/docs/advanced-chart-features/boost-module) for
98
+ * details.
99
+ *
100
+ * In addition to the global `boost` option, each series has a
101
+ * [boostThreshold](#plotOptions.series.boostThreshold) that defines when the
102
+ * boost should kick in.
103
+ *
104
+ * Requires the `modules/boost.js` module.
105
+ *
106
+ * @sample {highstock} highcharts/boost/line-series-heavy-stock
107
+ * Stock chart
108
+ * @sample {highstock} highcharts/boost/line-series-heavy-dynamic
109
+ * Dynamic stock chart
110
+ * @sample highcharts/boost/line
111
+ * Line chart
112
+ * @sample highcharts/boost/line-series-heavy
113
+ * Line chart with hundreds of series
114
+ * @sample highcharts/boost/scatter
115
+ * Scatter chart
116
+ * @sample highcharts/boost/area
117
+ * Area chart
118
+ * @sample highcharts/boost/arearange
119
+ * Area range chart
120
+ * @sample highcharts/boost/column
121
+ * Column chart
122
+ * @sample highcharts/boost/columnrange
123
+ * Column range chart
124
+ * @sample highcharts/boost/bubble
125
+ * Bubble chart
126
+ * @sample highcharts/boost/heatmap
127
+ * Heat map
128
+ * @sample highcharts/boost/treemap
129
+ * Tree map
130
+ *
131
+ * @product highcharts highstock
132
+ * @apioption boost
133
+ */
134
+
135
+ /**
136
+ * Set the series threshold for when the boost should kick in globally.
137
+ *
138
+ * Setting to e.g. 20 will cause the whole chart to enter boost mode
139
+ * if there are 20 or more series active. When the chart is in boost mode,
140
+ * every series in it will be rendered to a common canvas. This offers
141
+ * a significant speed improvment in charts with a very high
142
+ * amount of series.
143
+ *
144
+ * @type {number|null}
145
+ * @default null
146
+ * @apioption boost.seriesThreshold
147
+ */
148
+
149
+ /**
150
+ * Enable or disable boost on a chart.
151
+ *
152
+ * @type {boolean}
153
+ * @default true
154
+ * @apioption boost.enabled
155
+ */
156
+
157
+ /**
158
+ * Debugging options for boost.
159
+ * Useful for benchmarking, and general timing.
160
+ *
161
+ * @apioption boost.debug
162
+ */
163
+
164
+ /**
165
+ * Time the series rendering.
166
+ *
167
+ * This outputs the time spent on actual rendering in the console when
168
+ * set to true.
169
+ *
170
+ * @type {boolean}
171
+ * @default false
172
+ * @apioption boost.debug.timeRendering
173
+ */
174
+
175
+ /**
176
+ * Time the series processing.
177
+ *
178
+ * This outputs the time spent on transforming the series data to
179
+ * vertex buffers when set to true.
180
+ *
181
+ * @type {boolean}
182
+ * @default false
183
+ * @apioption boost.debug.timeSeriesProcessing
184
+ */
185
+
186
+ /**
187
+ * Time the the WebGL setup.
188
+ *
189
+ * This outputs the time spent on setting up the WebGL context,
190
+ * creating shaders, and textures.
191
+ *
192
+ * @type {boolean}
193
+ * @default false
194
+ * @apioption boost.debug.timeSetup
195
+ */
196
+
197
+ /**
198
+ * Time the building of the k-d tree.
199
+ *
200
+ * This outputs the time spent building the k-d tree used for
201
+ * markers etc.
202
+ *
203
+ * Note that the k-d tree is built async, and runs post-rendering.
204
+ * Following, it does not affect the performance of the rendering itself.
205
+ *
206
+ * @type {boolean}
207
+ * @default false
208
+ * @apioption boost.debug.timeKDTree
209
+ */
210
+
211
+ /**
212
+ * Show the number of points skipped through culling.
213
+ *
214
+ * When set to true, the number of points skipped in series processing
215
+ * is outputted. Points are skipped if they are closer than 1 pixel from
216
+ * each other.
217
+ *
218
+ * @type {boolean}
219
+ * @default false
220
+ * @apioption boost.debug.showSkipSummary
221
+ */
222
+
223
+ /**
224
+ * Time the WebGL to SVG buffer copy
225
+ *
226
+ * After rendering, the result is copied to an image which is injected
227
+ * into the SVG.
228
+ *
229
+ * If this property is set to true, the time it takes for the buffer copy
230
+ * to complete is outputted.
231
+ *
232
+ * @type {boolean}
233
+ * @default false
234
+ * @apioption boost.debug.timeBufferCopy
235
+ */
236
+
237
+ /**
238
+ * Enable or disable GPU translations. GPU translations are faster than doing
239
+ * the translation in JavaScript.
240
+ *
241
+ * This option may cause rendering issues with certain datasets.
242
+ * Namely, if your dataset has large numbers with small increments (such as
243
+ * timestamps), it won't work correctly. This is due to floating point
244
+ * precission.
245
+ *
246
+ * @type {boolean}
247
+ * @default false
248
+ * @apioption boost.useGPUTranslations
249
+ */
250
+
251
+ /**
252
+ * Enable or disable pre-allocation of vertex buffers.
253
+ *
254
+ * Enabling this will make it so that the binary data arrays required for
255
+ * storing the series data will be allocated prior to transforming the data
256
+ * to a WebGL-compatible format.
257
+ *
258
+ * This saves a copy operation on the order of O(n) and so is significantly more
259
+ * performant. However, this is currently an experimental option, and may cause
260
+ * visual artifacts with some datasets.
261
+ *
262
+ * As such, care should be taken when using this setting to make sure that
263
+ * it doesn't cause any rendering glitches with the given use-case.
264
+ *
265
+ * @type {boolean}
266
+ * @default false
267
+ * @apioption boost.usePreallocated
268
+ */
269
+
270
+ /**
271
+ * Set the point threshold for when a series should enter boost mode.
272
+ *
273
+ * Setting it to e.g. 2000 will cause the series to enter boost mode when there
274
+ * are 2000 or more points in the series.
275
+ *
276
+ * To disable boosting on the series, set the `boostThreshold` to 0. Setting it
277
+ * to 1 will force boosting.
278
+ *
279
+ * Note that the [cropThreshold](plotOptions.series.cropThreshold) also affects
280
+ * this setting. When zooming in on a series that has fewer points than the
281
+ * `cropThreshold`, all points are rendered although outside the visible plot
282
+ * area, and the `boostThreshold` won't take effect.
283
+ *
284
+ * Requires `modules/boost.js`.
285
+ *
286
+ * @type {number}
287
+ * @default 5000
288
+ * @apioption plotOptions.series.boostThreshold
289
+ */
290
+
291
+ /**
292
+ * If set to true, the whole chart will be boosted if one of the series
293
+ * crosses its threshold, and all the series can be boosted.
294
+ *
295
+ * @type {boolean}
296
+ * @default true
297
+ * @apioption boost.allowForce
298
+ */
299
+
300
+ /**
301
+ * Sets the color blending in the boost module.
302
+ *
303
+ * @type {string}
304
+ * @default undefined
305
+ * @validvalue ["add", "multiply", "darken"]
306
+ * @apioption plotOptions.series.boostBlending
307
+ */
308
+
309
+ /* global Float32Array */
310
+
311
+
312
+
313
+ var win = H.win,
314
+ doc = win.document,
315
+ noop = function () {},
316
+ Chart = H.Chart,
317
+ Color = H.Color,
318
+ Series = H.Series,
319
+ seriesTypes = H.seriesTypes,
320
+ objEach = H.objectEach,
321
+ extend = H.extend,
322
+ addEvent = H.addEvent,
323
+ fireEvent = H.fireEvent,
324
+ isNumber = H.isNumber,
325
+ merge = H.merge,
326
+ pick = H.pick,
327
+ wrap = H.wrap,
328
+ plotOptions = H.getOptions().plotOptions,
329
+ CHUNK_SIZE = 30000,
330
+ mainCanvas = doc.createElement('canvas'),
331
+ index,
332
+ boostable = [
333
+ 'area',
334
+ 'arearange',
335
+ 'column',
336
+ 'columnrange',
337
+ 'bar',
338
+ 'line',
339
+ 'scatter',
340
+ 'heatmap',
341
+ 'bubble',
342
+ 'treemap'
343
+ ],
344
+ boostableMap = {};
345
+
346
+ boostable.forEach(function (item) {
347
+ boostableMap[item] = 1;
348
+ });
349
+
350
+ // Register color names since GL can't render those directly.
351
+ Color.prototype.names = {
352
+ aliceblue: '#f0f8ff',
353
+ antiquewhite: '#faebd7',
354
+ aqua: '#00ffff',
355
+ aquamarine: '#7fffd4',
356
+ azure: '#f0ffff',
357
+ beige: '#f5f5dc',
358
+ bisque: '#ffe4c4',
359
+ black: '#000000',
360
+ blanchedalmond: '#ffebcd',
361
+ blue: '#0000ff',
362
+ blueviolet: '#8a2be2',
363
+ brown: '#a52a2a',
364
+ burlywood: '#deb887',
365
+ cadetblue: '#5f9ea0',
366
+ chartreuse: '#7fff00',
367
+ chocolate: '#d2691e',
368
+ coral: '#ff7f50',
369
+ cornflowerblue: '#6495ed',
370
+ cornsilk: '#fff8dc',
371
+ crimson: '#dc143c',
372
+ cyan: '#00ffff',
373
+ darkblue: '#00008b',
374
+ darkcyan: '#008b8b',
375
+ darkgoldenrod: '#b8860b',
376
+ darkgray: '#a9a9a9',
377
+ darkgreen: '#006400',
378
+ darkkhaki: '#bdb76b',
379
+ darkmagenta: '#8b008b',
380
+ darkolivegreen: '#556b2f',
381
+ darkorange: '#ff8c00',
382
+ darkorchid: '#9932cc',
383
+ darkred: '#8b0000',
384
+ darksalmon: '#e9967a',
385
+ darkseagreen: '#8fbc8f',
386
+ darkslateblue: '#483d8b',
387
+ darkslategray: '#2f4f4f',
388
+ darkturquoise: '#00ced1',
389
+ darkviolet: '#9400d3',
390
+ deeppink: '#ff1493',
391
+ deepskyblue: '#00bfff',
392
+ dimgray: '#696969',
393
+ dodgerblue: '#1e90ff',
394
+ feldspar: '#d19275',
395
+ firebrick: '#b22222',
396
+ floralwhite: '#fffaf0',
397
+ forestgreen: '#228b22',
398
+ fuchsia: '#ff00ff',
399
+ gainsboro: '#dcdcdc',
400
+ ghostwhite: '#f8f8ff',
401
+ gold: '#ffd700',
402
+ goldenrod: '#daa520',
403
+ gray: '#808080',
404
+ green: '#008000',
405
+ greenyellow: '#adff2f',
406
+ honeydew: '#f0fff0',
407
+ hotpink: '#ff69b4',
408
+ indianred: '#cd5c5c',
409
+ indigo: '#4b0082',
410
+ ivory: '#fffff0',
411
+ khaki: '#f0e68c',
412
+ lavender: '#e6e6fa',
413
+ lavenderblush: '#fff0f5',
414
+ lawngreen: '#7cfc00',
415
+ lemonchiffon: '#fffacd',
416
+ lightblue: '#add8e6',
417
+ lightcoral: '#f08080',
418
+ lightcyan: '#e0ffff',
419
+ lightgoldenrodyellow: '#fafad2',
420
+ lightgrey: '#d3d3d3',
421
+ lightgreen: '#90ee90',
422
+ lightpink: '#ffb6c1',
423
+ lightsalmon: '#ffa07a',
424
+ lightseagreen: '#20b2aa',
425
+ lightskyblue: '#87cefa',
426
+ lightslateblue: '#8470ff',
427
+ lightslategray: '#778899',
428
+ lightsteelblue: '#b0c4de',
429
+ lightyellow: '#ffffe0',
430
+ lime: '#00ff00',
431
+ limegreen: '#32cd32',
432
+ linen: '#faf0e6',
433
+ magenta: '#ff00ff',
434
+ maroon: '#800000',
435
+ mediumaquamarine: '#66cdaa',
436
+ mediumblue: '#0000cd',
437
+ mediumorchid: '#ba55d3',
438
+ mediumpurple: '#9370d8',
439
+ mediumseagreen: '#3cb371',
440
+ mediumslateblue: '#7b68ee',
441
+ mediumspringgreen: '#00fa9a',
442
+ mediumturquoise: '#48d1cc',
443
+ mediumvioletred: '#c71585',
444
+ midnightblue: '#191970',
445
+ mintcream: '#f5fffa',
446
+ mistyrose: '#ffe4e1',
447
+ moccasin: '#ffe4b5',
448
+ navajowhite: '#ffdead',
449
+ navy: '#000080',
450
+ oldlace: '#fdf5e6',
451
+ olive: '#808000',
452
+ olivedrab: '#6b8e23',
453
+ orange: '#ffa500',
454
+ orangered: '#ff4500',
455
+ orchid: '#da70d6',
456
+ palegoldenrod: '#eee8aa',
457
+ palegreen: '#98fb98',
458
+ paleturquoise: '#afeeee',
459
+ palevioletred: '#d87093',
460
+ papayawhip: '#ffefd5',
461
+ peachpuff: '#ffdab9',
462
+ peru: '#cd853f',
463
+ pink: '#ffc0cb',
464
+ plum: '#dda0dd',
465
+ powderblue: '#b0e0e6',
466
+ purple: '#800080',
467
+ red: '#ff0000',
468
+ rosybrown: '#bc8f8f',
469
+ royalblue: '#4169e1',
470
+ saddlebrown: '#8b4513',
471
+ salmon: '#fa8072',
472
+ sandybrown: '#f4a460',
473
+ seagreen: '#2e8b57',
474
+ seashell: '#fff5ee',
475
+ sienna: '#a0522d',
476
+ silver: '#c0c0c0',
477
+ skyblue: '#87ceeb',
478
+ slateblue: '#6a5acd',
479
+ slategray: '#708090',
480
+ snow: '#fffafa',
481
+ springgreen: '#00ff7f',
482
+ steelblue: '#4682b4',
483
+ tan: '#d2b48c',
484
+ teal: '#008080',
485
+ thistle: '#d8bfd8',
486
+ tomato: '#ff6347',
487
+ turquoise: '#40e0d0',
488
+ violet: '#ee82ee',
489
+ violetred: '#d02090',
490
+ wheat: '#f5deb3',
491
+ white: '#ffffff',
492
+ whitesmoke: '#f5f5f5',
493
+ yellow: '#ffff00',
494
+ yellowgreen: '#9acd32'
495
+ };
496
+
497
+ /**
498
+ * Tolerant max() function.
499
+ *
500
+ * @private
501
+ * @function patientMax
502
+ *
503
+ * @return {number}
504
+ * max value
505
+ */
506
+ function patientMax() {
507
+ var args = Array.prototype.slice.call(arguments),
508
+ r = -Number.MAX_VALUE;
509
+
510
+ args.forEach(function (t) {
511
+ if (
512
+ typeof t !== 'undefined' &&
513
+ t !== null &&
514
+ typeof t.length !== 'undefined'
515
+ ) {
516
+ // r = r < t.length ? t.length : r;
517
+ if (t.length > 0) {
518
+ r = t.length;
519
+ return true;
520
+ }
521
+ }
522
+ });
523
+
524
+ return r;
525
+ }
526
+
527
+ /**
528
+ * Returns true if we should force chart series boosting
529
+ * The result of this is cached in chart.boostForceChartBoost.
530
+ * It's re-fetched on redraw.
531
+ *
532
+ * We do this because there's a lot of overhead involved when dealing
533
+ * with a lot of series.
534
+ *
535
+ * @private
536
+ * @function shouldForceChartSeriesBoosting
537
+ *
538
+ * @param {Highcharts.Chart} chart
539
+ *
540
+ * @return {boolean}
541
+ */
542
+ function shouldForceChartSeriesBoosting(chart) {
543
+ // If there are more than five series currently boosting,
544
+ // we should boost the whole chart to avoid running out of webgl contexts.
545
+ var sboostCount = 0,
546
+ canBoostCount = 0,
547
+ allowBoostForce = pick(
548
+ chart.options.boost && chart.options.boost.allowForce,
549
+ true
550
+ ),
551
+ series;
552
+
553
+ if (typeof chart.boostForceChartBoost !== 'undefined') {
554
+ return chart.boostForceChartBoost;
555
+ }
556
+
557
+ if (chart.series.length > 1) {
558
+ for (var i = 0; i < chart.series.length; i++) {
559
+
560
+ series = chart.series[i];
561
+
562
+ // Don't count series with boostThreshold set to 0
563
+ // See #8950
564
+ // Also don't count if the series is hidden.
565
+ // See #9046
566
+ if (series.options.boostThreshold === 0 ||
567
+ series.visible === false) {
568
+ continue;
569
+ }
570
+
571
+ // Don't count heatmap series as they are handled differently.
572
+ // In the future we should make the heatmap/treemap path compatible
573
+ // with forcing. See #9636.
574
+ if (series.type === 'heatmap') {
575
+ continue;
576
+ }
577
+
578
+ if (boostableMap[series.type]) {
579
+ ++canBoostCount;
580
+ }
581
+
582
+ if (patientMax(
583
+ series.processedXData,
584
+ series.options.data,
585
+ // series.xData,
586
+ series.points
587
+ ) >= (series.options.boostThreshold || Number.MAX_VALUE)) {
588
+ ++sboostCount;
589
+ }
590
+ }
591
+ }
592
+
593
+ chart.boostForceChartBoost = allowBoostForce && (
594
+ (
595
+ canBoostCount === chart.series.length &&
596
+ sboostCount > 0
597
+ ) ||
598
+ sboostCount > 5
599
+ );
600
+
601
+ return chart.boostForceChartBoost;
602
+ }
603
+
604
+ /**
605
+ * Return true if ths boost.enabled option is true
606
+ *
607
+ * @private
608
+ * @function boostEnabled
609
+ *
610
+ * @param {Highcharts.Chart} chart
611
+ * The chart
612
+ *
613
+ * @return {boolean}
614
+ */
615
+ function boostEnabled(chart) {
616
+ return pick(
617
+ (
618
+ chart &&
619
+ chart.options &&
620
+ chart.options.boost &&
621
+ chart.options.boost.enabled
622
+ ),
623
+ true
624
+ );
625
+ }
626
+
627
+ /**
628
+ * Returns true if the chart is in series boost mode.
629
+ *
630
+ * @function Highcharts.Chart#isChartSeriesBoosting
631
+ *
632
+ * @param {Highcharts.Chart} chart
633
+ * the chart to check
634
+ *
635
+ * @return {boolean}
636
+ * true if the chart is in series boost mode
637
+ */
638
+ Chart.prototype.isChartSeriesBoosting = function () {
639
+ var isSeriesBoosting,
640
+ threshold = pick(
641
+ this.options.boost && this.options.boost.seriesThreshold,
642
+ 50
643
+ );
644
+
645
+ isSeriesBoosting = threshold <= this.series.length ||
646
+ shouldForceChartSeriesBoosting(this);
647
+
648
+ return isSeriesBoosting;
649
+ };
650
+
651
+ /**
652
+ * Get the clip rectangle for a target, either a series or the chart. For the
653
+ * chart, we need to consider the maximum extent of its Y axes, in case of
654
+ * Highstock panes and navigator.
655
+ *
656
+ * @private
657
+ * @function Highcharts.Chart#getBoostClipRect
658
+ *
659
+ * @param {Highcharts.Chart} target
660
+ *
661
+ * @return {Highcharts.BBoxObject}
662
+ */
663
+ Chart.prototype.getBoostClipRect = function (target) {
664
+ var clipBox = {
665
+ x: this.plotLeft,
666
+ y: this.plotTop,
667
+ width: this.plotWidth,
668
+ height: this.plotHeight
669
+ };
670
+
671
+ if (target === this) {
672
+ this.yAxis.forEach(function (yAxis) {
673
+ clipBox.y = Math.min(yAxis.pos, clipBox.y);
674
+ clipBox.height = Math.max(
675
+ yAxis.pos - this.plotTop + yAxis.len,
676
+ clipBox.height
677
+ );
678
+ }, this);
679
+ }
680
+
681
+ return clipBox;
682
+ };
683
+
684
+ /*
685
+ * Returns true if the series is in boost mode
686
+ * @param series {Highchart.Series} - the series to check
687
+ * @returns {boolean} - true if the series is in boost mode
688
+ */
689
+ /*
690
+ function isSeriesBoosting(series, overrideThreshold) {
691
+ return isChartSeriesBoosting(series.chart) ||
692
+ patientMax(
693
+ series.processedXData,
694
+ series.options.data,
695
+ series.points
696
+ ) >= (
697
+ overrideThreshold ||
698
+ series.options.boostThreshold ||
699
+ Number.MAX_VALUE
700
+ );
701
+ }
702
+ */
703
+
704
+ // START OF WEBGL ABSTRACTIONS
705
+
706
+ /**
707
+ * A static shader mimicing axis translation functions found in parts/Axis
708
+ *
709
+ * @private
710
+ * @function GLShader
711
+ *
712
+ * @param {WebGLContext} gl
713
+ * the context in which the shader is active
714
+ *
715
+ * @return {*}
716
+ */
717
+ function GLShader(gl) {
718
+ var vertShade = [
719
+ /* eslint-disable */
720
+ '#version 100',
721
+ 'precision highp float;',
722
+
723
+ 'attribute vec4 aVertexPosition;',
724
+ 'attribute vec4 aColor;',
725
+
726
+ 'varying highp vec2 position;',
727
+ 'varying highp vec4 vColor;',
728
+
729
+ 'uniform mat4 uPMatrix;',
730
+ 'uniform float pSize;',
731
+
732
+ 'uniform float translatedThreshold;',
733
+ 'uniform bool hasThreshold;',
734
+
735
+ 'uniform bool skipTranslation;',
736
+
737
+ 'uniform float plotHeight;',
738
+
739
+ 'uniform float xAxisTrans;',
740
+ 'uniform float xAxisMin;',
741
+ 'uniform float xAxisMinPad;',
742
+ 'uniform float xAxisPointRange;',
743
+ 'uniform float xAxisLen;',
744
+ 'uniform bool xAxisPostTranslate;',
745
+ 'uniform float xAxisOrdinalSlope;',
746
+ 'uniform float xAxisOrdinalOffset;',
747
+ 'uniform float xAxisPos;',
748
+ 'uniform bool xAxisCVSCoord;',
749
+
750
+ 'uniform float yAxisTrans;',
751
+ 'uniform float yAxisMin;',
752
+ 'uniform float yAxisMinPad;',
753
+ 'uniform float yAxisPointRange;',
754
+ 'uniform float yAxisLen;',
755
+ 'uniform bool yAxisPostTranslate;',
756
+ 'uniform float yAxisOrdinalSlope;',
757
+ 'uniform float yAxisOrdinalOffset;',
758
+ 'uniform float yAxisPos;',
759
+ 'uniform bool yAxisCVSCoord;',
760
+
761
+ 'uniform bool isBubble;',
762
+ 'uniform bool bubbleSizeByArea;',
763
+ 'uniform float bubbleZMin;',
764
+ 'uniform float bubbleZMax;',
765
+ 'uniform float bubbleZThreshold;',
766
+ 'uniform float bubbleMinSize;',
767
+ 'uniform float bubbleMaxSize;',
768
+ 'uniform bool bubbleSizeAbs;',
769
+ 'uniform bool isInverted;',
770
+
771
+ 'float bubbleRadius(){',
772
+ 'float value = aVertexPosition.w;',
773
+ 'float zMax = bubbleZMax;',
774
+ 'float zMin = bubbleZMin;',
775
+ 'float radius = 0.0;',
776
+ 'float pos = 0.0;',
777
+ 'float zRange = zMax - zMin;',
778
+
779
+ 'if (bubbleSizeAbs){',
780
+ 'value = value - bubbleZThreshold;',
781
+ 'zMax = max(zMax - bubbleZThreshold, zMin - bubbleZThreshold);',
782
+ 'zMin = 0.0;',
783
+ '}',
784
+
785
+ 'if (value < zMin){',
786
+ 'radius = bubbleZMin / 2.0 - 1.0;',
787
+ '} else {',
788
+ 'pos = zRange > 0.0 ? (value - zMin) / zRange : 0.5;',
789
+ 'if (bubbleSizeByArea && pos > 0.0){',
790
+ 'pos = sqrt(pos);',
791
+ '}',
792
+ 'radius = ceil(bubbleMinSize + pos * (bubbleMaxSize - bubbleMinSize)) / 2.0;',
793
+ '}',
794
+
795
+ 'return radius * 2.0;',
796
+ '}',
797
+
798
+ 'float translate(float val,',
799
+ 'float pointPlacement,',
800
+ 'float localA,',
801
+ 'float localMin,',
802
+ 'float minPixelPadding,',
803
+ 'float pointRange,',
804
+ 'float len,',
805
+ 'bool cvsCoord',
806
+ '){',
807
+
808
+ 'float sign = 1.0;',
809
+ 'float cvsOffset = 0.0;',
810
+
811
+ 'if (cvsCoord) {',
812
+ 'sign *= -1.0;',
813
+ 'cvsOffset = len;',
814
+ '}',
815
+
816
+ 'return sign * (val - localMin) * localA + cvsOffset + ',
817
+ '(sign * minPixelPadding);',//' + localA * pointPlacement * pointRange;',
818
+ '}',
819
+
820
+ 'float xToPixels(float value){',
821
+ 'if (skipTranslation){',
822
+ 'return value;// + xAxisPos;',
823
+ '}',
824
+
825
+ 'return translate(value, 0.0, xAxisTrans, xAxisMin, xAxisMinPad, xAxisPointRange, xAxisLen, xAxisCVSCoord);// + xAxisPos;',
826
+ '}',
827
+
828
+ 'float yToPixels(float value, float checkTreshold){',
829
+ 'float v;',
830
+ 'if (skipTranslation){',
831
+ 'v = value;// + yAxisPos;',
832
+ '} else {',
833
+ 'v = translate(value, 0.0, yAxisTrans, yAxisMin, yAxisMinPad, yAxisPointRange, yAxisLen, yAxisCVSCoord);// + yAxisPos;',
834
+ 'if (v > plotHeight) {',
835
+ 'v = plotHeight;',
836
+ '}',
837
+ '}',
838
+ 'if (checkTreshold > 0.0 && hasThreshold) {',
839
+ 'v = min(v, translatedThreshold);',
840
+ '}',
841
+ 'return v;',
842
+ '}',
843
+
844
+ 'void main(void) {',
845
+ 'if (isBubble){',
846
+ 'gl_PointSize = bubbleRadius();',
847
+ '} else {',
848
+ 'gl_PointSize = pSize;',
849
+ '}',
850
+ //'gl_PointSize = 10.0;',
851
+ 'vColor = aColor;',
852
+
853
+ 'if (isInverted) {',
854
+ 'gl_Position = uPMatrix * vec4(xToPixels(aVertexPosition.y) + yAxisPos, yToPixels(aVertexPosition.x, aVertexPosition.z) + xAxisPos, 0.0, 1.0);',
855
+ '} else {',
856
+ 'gl_Position = uPMatrix * vec4(xToPixels(aVertexPosition.x) + xAxisPos, yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, 0.0, 1.0);',
857
+ '}',
858
+ //'gl_Position = uPMatrix * vec4(aVertexPosition.x, aVertexPosition.y, 0.0, 1.0);',
859
+ '}'
860
+ /* eslint-enable */
861
+ ].join('\n'),
862
+ // Fragment shader source
863
+ fragShade = [
864
+ /* eslint-disable */
865
+ 'precision highp float;',
866
+ 'uniform vec4 fillColor;',
867
+ 'varying highp vec2 position;',
868
+ 'varying highp vec4 vColor;',
869
+ 'uniform sampler2D uSampler;',
870
+ 'uniform bool isCircle;',
871
+ 'uniform bool hasColor;',
872
+
873
+ // 'vec4 toColor(float value, vec2 point) {',
874
+ // 'return vec4(0.0, 0.0, 0.0, 0.0);',
875
+ // '}',
876
+
877
+ 'void main(void) {',
878
+ 'vec4 col = fillColor;',
879
+ 'vec4 tcol;',
880
+
881
+ 'if (hasColor) {',
882
+ 'col = vColor;',
883
+ '}',
884
+
885
+ 'if (isCircle) {',
886
+ 'tcol = texture2D(uSampler, gl_PointCoord.st);',
887
+ 'col *= tcol;',
888
+ 'if (tcol.r < 0.0) {',
889
+ 'discard;',
890
+ '} else {',
891
+ 'gl_FragColor = col;',
892
+ '}',
893
+ '} else {',
894
+ 'gl_FragColor = col;',
895
+ '}',
896
+ '}'
897
+ /* eslint-enable */
898
+ ].join('\n'),
899
+ uLocations = {},
900
+ // The shader program
901
+ shaderProgram,
902
+ // Uniform handle to the perspective matrix
903
+ pUniform,
904
+ // Uniform for point size
905
+ psUniform,
906
+ // Uniform for fill color
907
+ fillColorUniform,
908
+ // Uniform for isBubble
909
+ isBubbleUniform,
910
+ // Uniform for bubble abs sizing
911
+ bubbleSizeAbsUniform,
912
+ bubbleSizeAreaUniform,
913
+ // Skip translation uniform
914
+ skipTranslationUniform,
915
+ // Set to 1 if circle
916
+ isCircleUniform,
917
+ // Uniform for invertion
918
+ isInverted,
919
+ plotHeightUniform,
920
+ // Error stack
921
+ errors = [],
922
+ // Texture uniform
923
+ uSamplerUniform;
924
+
925
+ /*
926
+ * Handle errors accumulated in errors stack
927
+ */
928
+ function handleErrors() {
929
+ if (errors.length) {
930
+ H.error('[highcharts boost] shader error - ' + errors.join('\n'));
931
+ }
932
+ }
933
+
934
+ /* String to shader program
935
+ * @param {string} str - the program source
936
+ * @param {string} type - the program type: either `vertex` or `fragment`
937
+ * @returns {bool|shader}
938
+ */
939
+ function stringToProgram(str, type) {
940
+ var t = type === 'vertex' ? gl.VERTEX_SHADER : gl.FRAGMENT_SHADER,
941
+ shader = gl.createShader(t);
942
+
943
+ gl.shaderSource(shader, str);
944
+ gl.compileShader(shader);
945
+
946
+ if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
947
+ errors.push(
948
+ 'when compiling ' +
949
+ type +
950
+ ' shader:\n' +
951
+ gl.getShaderInfoLog(shader)
952
+ );
953
+
954
+ return false;
955
+ }
956
+ return shader;
957
+ }
958
+
959
+ /*
960
+ * Create the shader.
961
+ * Loads the shader program statically defined above
962
+ */
963
+ function createShader() {
964
+ var v = stringToProgram(vertShade, 'vertex'),
965
+ f = stringToProgram(fragShade, 'fragment');
966
+
967
+ if (!v || !f) {
968
+ shaderProgram = false;
969
+ handleErrors();
970
+ return false;
971
+ }
972
+
973
+ function uloc(n) {
974
+ return gl.getUniformLocation(shaderProgram, n);
975
+ }
976
+
977
+ shaderProgram = gl.createProgram();
978
+
979
+ gl.attachShader(shaderProgram, v);
980
+ gl.attachShader(shaderProgram, f);
981
+
982
+ gl.linkProgram(shaderProgram);
983
+
984
+ if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {
985
+ errors.push(gl.getProgramInfoLog(shaderProgram));
986
+ handleErrors();
987
+ shaderProgram = false;
988
+ return false;
989
+ }
990
+
991
+ gl.useProgram(shaderProgram);
992
+
993
+ gl.bindAttribLocation(shaderProgram, 0, 'aVertexPosition');
994
+
995
+ pUniform = uloc('uPMatrix');
996
+ psUniform = uloc('pSize');
997
+ fillColorUniform = uloc('fillColor');
998
+ isBubbleUniform = uloc('isBubble');
999
+ bubbleSizeAbsUniform = uloc('bubbleSizeAbs');
1000
+ bubbleSizeAreaUniform = uloc('bubbleSizeByArea');
1001
+ uSamplerUniform = uloc('uSampler');
1002
+ skipTranslationUniform = uloc('skipTranslation');
1003
+ isCircleUniform = uloc('isCircle');
1004
+ isInverted = uloc('isInverted');
1005
+ plotHeightUniform = uloc('plotHeight');
1006
+
1007
+ return true;
1008
+ }
1009
+
1010
+ /*
1011
+ * Destroy the shader
1012
+ */
1013
+ function destroy() {
1014
+ if (gl && shaderProgram) {
1015
+ gl.deleteProgram(shaderProgram);
1016
+ shaderProgram = false;
1017
+ }
1018
+ }
1019
+
1020
+ /*
1021
+ * Bind the shader.
1022
+ * This makes the shader the active one until another one is bound,
1023
+ * or until 0 is bound.
1024
+ */
1025
+ function bind() {
1026
+ if (gl && shaderProgram) {
1027
+ gl.useProgram(shaderProgram);
1028
+ }
1029
+ }
1030
+
1031
+ /*
1032
+ * Set a uniform value.
1033
+ * This uses a hash map to cache uniform locations.
1034
+ * @param name {string} - the name of the uniform to set
1035
+ * @param val {float} - the value to set
1036
+ */
1037
+ function setUniform(name, val) {
1038
+ if (gl && shaderProgram) {
1039
+ var u = uLocations[name] = uLocations[name] ||
1040
+ gl.getUniformLocation(
1041
+ shaderProgram,
1042
+ name
1043
+ );
1044
+
1045
+ gl.uniform1f(u, val);
1046
+ }
1047
+ }
1048
+
1049
+ /*
1050
+ * Set the active texture
1051
+ * @param texture - the texture
1052
+ */
1053
+ function setTexture(texture) {
1054
+ if (gl && shaderProgram) {
1055
+ gl.uniform1i(uSamplerUniform, texture);
1056
+ }
1057
+ }
1058
+
1059
+ /*
1060
+ * Set if inversion state
1061
+ * @flag is the state
1062
+ */
1063
+ function setInverted(flag) {
1064
+ if (gl && shaderProgram) {
1065
+ gl.uniform1i(isInverted, flag);
1066
+ }
1067
+ }
1068
+
1069
+ /*
1070
+ * Enable/disable circle drawing
1071
+ */
1072
+ function setDrawAsCircle(flag) {
1073
+ if (gl && shaderProgram) {
1074
+ gl.uniform1i(isCircleUniform, flag ? 1 : 0);
1075
+ }
1076
+ }
1077
+
1078
+ function setPlotHeight(n) {
1079
+ if (gl && shaderProgram) {
1080
+ gl.uniform1f(plotHeightUniform, n);
1081
+ }
1082
+ }
1083
+
1084
+ /*
1085
+ * Flush
1086
+ */
1087
+ function reset() {
1088
+ if (gl && shaderProgram) {
1089
+ gl.uniform1i(isBubbleUniform, 0);
1090
+ gl.uniform1i(isCircleUniform, 0);
1091
+ }
1092
+ }
1093
+
1094
+ /*
1095
+ * Set bubble uniforms
1096
+ * @param series {Highcharts.Series} - the series to use
1097
+ */
1098
+ function setBubbleUniforms(series, zCalcMin, zCalcMax) {
1099
+ var seriesOptions = series.options,
1100
+ zMin = Number.MAX_VALUE,
1101
+ zMax = -Number.MAX_VALUE;
1102
+
1103
+ if (gl && shaderProgram && series.type === 'bubble') {
1104
+ zMin = pick(seriesOptions.zMin, Math.min(
1105
+ zMin,
1106
+ Math.max(
1107
+ zCalcMin,
1108
+ seriesOptions.displayNegative === false ?
1109
+ seriesOptions.zThreshold : -Number.MAX_VALUE
1110
+ )
1111
+ ));
1112
+
1113
+ zMax = pick(seriesOptions.zMax, Math.max(zMax, zCalcMax));
1114
+
1115
+ gl.uniform1i(isBubbleUniform, 1);
1116
+ gl.uniform1i(isCircleUniform, 1);
1117
+ gl.uniform1i(
1118
+ bubbleSizeAreaUniform,
1119
+ series.options.sizeBy !== 'width'
1120
+ );
1121
+ gl.uniform1i(
1122
+ bubbleSizeAbsUniform,
1123
+ series.options.sizeByAbsoluteValue
1124
+ );
1125
+
1126
+ setUniform('bubbleZMin', zMin);
1127
+ setUniform('bubbleZMax', zMax);
1128
+ setUniform('bubbleZThreshold', series.options.zThreshold);
1129
+ setUniform('bubbleMinSize', series.minPxSize);
1130
+ setUniform('bubbleMaxSize', series.maxPxSize);
1131
+ }
1132
+ }
1133
+
1134
+ /*
1135
+ * Set the Color uniform.
1136
+ * @param color {Array<float>} - an array with RGBA values
1137
+ */
1138
+ function setColor(color) {
1139
+ if (gl && shaderProgram) {
1140
+ gl.uniform4f(
1141
+ fillColorUniform,
1142
+ color[0] / 255.0,
1143
+ color[1] / 255.0,
1144
+ color[2] / 255.0,
1145
+ color[3]
1146
+ );
1147
+ }
1148
+ }
1149
+
1150
+ /*
1151
+ * Set skip translation
1152
+ */
1153
+ function setSkipTranslation(flag) {
1154
+ if (gl && shaderProgram) {
1155
+ gl.uniform1i(skipTranslationUniform, flag === true ? 1 : 0);
1156
+ }
1157
+ }
1158
+
1159
+ /*
1160
+ * Set the perspective matrix
1161
+ * @param m {Matrix4x4} - the matrix
1162
+ */
1163
+ function setPMatrix(m) {
1164
+ if (gl && shaderProgram) {
1165
+ gl.uniformMatrix4fv(pUniform, false, m);
1166
+ }
1167
+ }
1168
+
1169
+ /*
1170
+ * Set the point size.
1171
+ * @param p {float} - point size
1172
+ */
1173
+ function setPointSize(p) {
1174
+ if (gl && shaderProgram) {
1175
+ gl.uniform1f(psUniform, p);
1176
+ }
1177
+ }
1178
+
1179
+ /*
1180
+ * Get the shader program handle
1181
+ * @returns {GLInt} - the handle for the program
1182
+ */
1183
+ function getProgram() {
1184
+ return shaderProgram;
1185
+ }
1186
+
1187
+ if (gl) {
1188
+ if (!createShader()) {
1189
+ return false;
1190
+ }
1191
+ }
1192
+
1193
+ return {
1194
+ psUniform: function () {
1195
+ return psUniform;
1196
+ },
1197
+ pUniform: function () {
1198
+ return pUniform;
1199
+ },
1200
+ fillColorUniform: function () {
1201
+ return fillColorUniform;
1202
+ },
1203
+ setPlotHeight: setPlotHeight,
1204
+ setBubbleUniforms: setBubbleUniforms,
1205
+ bind: bind,
1206
+ program: getProgram,
1207
+ create: createShader,
1208
+ setUniform: setUniform,
1209
+ setPMatrix: setPMatrix,
1210
+ setColor: setColor,
1211
+ setPointSize: setPointSize,
1212
+ setSkipTranslation: setSkipTranslation,
1213
+ setTexture: setTexture,
1214
+ setDrawAsCircle: setDrawAsCircle,
1215
+ reset: reset,
1216
+ setInverted: setInverted,
1217
+ destroy: destroy
1218
+ };
1219
+ }
1220
+
1221
+ /**
1222
+ * Vertex Buffer abstraction.
1223
+ * A vertex buffer is a set of vertices which are passed to the GPU
1224
+ * in a single call.
1225
+ *
1226
+ * @private
1227
+ * @function GLVertexBuffer
1228
+ *
1229
+ * @param {WebGLContext} gl
1230
+ * the context in which to create the buffer
1231
+ *
1232
+ * @param {GLShader} shader
1233
+ * the shader to use
1234
+ *
1235
+ * @return {*}
1236
+ */
1237
+ function GLVertexBuffer(gl, shader, dataComponents /* , type */) {
1238
+ var buffer = false,
1239
+ vertAttribute = false,
1240
+ components = dataComponents || 2,
1241
+ preAllocated = false,
1242
+ iterator = 0,
1243
+ // farray = false,
1244
+ data;
1245
+
1246
+ // type = type || 'float';
1247
+
1248
+ function destroy() {
1249
+ if (buffer) {
1250
+ gl.deleteBuffer(buffer);
1251
+ buffer = false;
1252
+ vertAttribute = false;
1253
+ }
1254
+
1255
+ iterator = 0;
1256
+ components = dataComponents || 2;
1257
+ data = [];
1258
+ }
1259
+
1260
+ /*
1261
+ * Build the buffer
1262
+ * @param dataIn {Array<float>} - a 0 padded array of indices
1263
+ * @param attrib {String} - the name of the Attribute to bind the buffer to
1264
+ * @param dataComponents {Integer} - the number of components per. indice
1265
+ */
1266
+ function build(dataIn, attrib, dataComponents) {
1267
+ var farray;
1268
+
1269
+ data = dataIn || [];
1270
+
1271
+ if ((!data || data.length === 0) && !preAllocated) {
1272
+ // console.error('trying to render empty vbuffer');
1273
+ destroy();
1274
+ return false;
1275
+ }
1276
+
1277
+ components = dataComponents || components;
1278
+
1279
+ if (buffer) {
1280
+ gl.deleteBuffer(buffer);
1281
+ }
1282
+
1283
+ if (!preAllocated) {
1284
+ farray = new Float32Array(data);
1285
+ }
1286
+
1287
+ buffer = gl.createBuffer();
1288
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
1289
+ gl.bufferData(
1290
+ gl.ARRAY_BUFFER,
1291
+ preAllocated || farray,
1292
+ gl.STATIC_DRAW
1293
+ );
1294
+
1295
+ // gl.bindAttribLocation(shader.program(), 0, 'aVertexPosition');
1296
+ vertAttribute = gl.getAttribLocation(shader.program(), attrib);
1297
+ gl.enableVertexAttribArray(vertAttribute);
1298
+
1299
+ // Trigger cleanup
1300
+ farray = false;
1301
+
1302
+ return true;
1303
+ }
1304
+
1305
+ /*
1306
+ * Bind the buffer
1307
+ */
1308
+ function bind() {
1309
+ if (!buffer) {
1310
+ return false;
1311
+ }
1312
+
1313
+ // gl.bindAttribLocation(shader.program(), 0, 'aVertexPosition');
1314
+ // gl.enableVertexAttribArray(vertAttribute);
1315
+ // gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
1316
+ gl.vertexAttribPointer(
1317
+ vertAttribute, components, gl.FLOAT, false, 0, 0
1318
+ );
1319
+ // gl.enableVertexAttribArray(vertAttribute);
1320
+ }
1321
+
1322
+ /*
1323
+ * Render the buffer
1324
+ * @param from {Integer} - the start indice
1325
+ * @param to {Integer} - the end indice
1326
+ * @param drawMode {String} - the draw mode
1327
+ */
1328
+ function render(from, to, drawMode) {
1329
+ var length = preAllocated ? preAllocated.length : data.length;
1330
+
1331
+ if (!buffer) {
1332
+ return false;
1333
+ }
1334
+
1335
+ if (!length) {
1336
+ return false;
1337
+ }
1338
+
1339
+ if (!from || from > length || from < 0) {
1340
+ from = 0;
1341
+ }
1342
+
1343
+ if (!to || to > length) {
1344
+ to = length;
1345
+ }
1346
+
1347
+ drawMode = drawMode || 'points';
1348
+
1349
+ gl.drawArrays(
1350
+ gl[drawMode.toUpperCase()],
1351
+ from / components,
1352
+ (to - from) / components
1353
+ );
1354
+
1355
+ return true;
1356
+ }
1357
+
1358
+ function push(x, y, a, b) {
1359
+ if (preAllocated) { // && iterator <= preAllocated.length - 4) {
1360
+ preAllocated[++iterator] = x;
1361
+ preAllocated[++iterator] = y;
1362
+ preAllocated[++iterator] = a;
1363
+ preAllocated[++iterator] = b;
1364
+ }
1365
+ }
1366
+
1367
+ /*
1368
+ * Note about pre-allocated buffers:
1369
+ * - This is slower for charts with many series
1370
+ */
1371
+ function allocate(size) {
1372
+ size *= 4;
1373
+ iterator = -1;
1374
+
1375
+ preAllocated = new Float32Array(size);
1376
+ }
1377
+
1378
+ // /////////////////////////////////////////////////////////////////////////
1379
+ return {
1380
+ destroy: destroy,
1381
+ bind: bind,
1382
+ data: data,
1383
+ build: build,
1384
+ render: render,
1385
+ allocate: allocate,
1386
+ push: push
1387
+ };
1388
+ }
1389
+
1390
+ /**
1391
+ * Main renderer. Used to render series.
1392
+ *
1393
+ * Notes to self:
1394
+ * - May be able to build a point map by rendering to a separate canvas and
1395
+ * encoding values in the color data.
1396
+ * - Need to figure out a way to transform the data quicker
1397
+ *
1398
+ * @private
1399
+ * @function GLRenderer
1400
+ *
1401
+ * @param {Function} postRenderCallback
1402
+ *
1403
+ * @return {*}
1404
+ */
1405
+ function GLRenderer(postRenderCallback) {
1406
+ var // Shader
1407
+ shader = false,
1408
+ // Vertex buffers - keyed on shader attribute name
1409
+ vbuffer = false,
1410
+ // Opengl context
1411
+ gl = false,
1412
+ // Width of our viewport in pixels
1413
+ width = 0,
1414
+ // Height of our viewport in pixels
1415
+ height = 0,
1416
+ // The data to render - array of coordinates
1417
+ data = false,
1418
+ // The marker data
1419
+ markerData = false,
1420
+ // Exports
1421
+ exports = {},
1422
+ // Is it inited?
1423
+ isInited = false,
1424
+ // The series stack
1425
+ series = [],
1426
+
1427
+ // Texture handles
1428
+ textureHandles = {},
1429
+
1430
+ // Things to draw as "rectangles" (i.e lines)
1431
+ asBar = {
1432
+ 'column': true,
1433
+ 'columnrange': true,
1434
+ 'bar': true,
1435
+ 'area': true,
1436
+ 'arearange': true
1437
+ },
1438
+ asCircle = {
1439
+ 'scatter': true,
1440
+ 'bubble': true
1441
+ },
1442
+ // Render settings
1443
+ settings = {
1444
+ pointSize: 1,
1445
+ lineWidth: 1,
1446
+ fillColor: '#AA00AA',
1447
+ useAlpha: true,
1448
+ usePreallocated: false,
1449
+ useGPUTranslations: false,
1450
+ debug: {
1451
+ timeRendering: false,
1452
+ timeSeriesProcessing: false,
1453
+ timeSetup: false,
1454
+ timeBufferCopy: false,
1455
+ timeKDTree: false,
1456
+ showSkipSummary: false
1457
+ }
1458
+ };
1459
+
1460
+ // /////////////////////////////////////////////////////////////////////////
1461
+
1462
+ function setOptions(options) {
1463
+ merge(true, settings, options);
1464
+ }
1465
+
1466
+ function seriesPointCount(series) {
1467
+ var isStacked,
1468
+ xData,
1469
+ s;
1470
+
1471
+ if (series.isSeriesBoosting) {
1472
+ isStacked = !!series.options.stacking;
1473
+ xData = (
1474
+ series.xData ||
1475
+ series.options.xData ||
1476
+ series.processedXData
1477
+ );
1478
+ s = (isStacked ? series.data : (xData || series.options.data))
1479
+ .length;
1480
+
1481
+ if (series.type === 'treemap') {
1482
+ s *= 12;
1483
+ } else if (series.type === 'heatmap') {
1484
+ s *= 6;
1485
+ } else if (asBar[series.type]) {
1486
+ s *= 2;
1487
+ }
1488
+
1489
+ return s;
1490
+ }
1491
+
1492
+ return 0;
1493
+ }
1494
+
1495
+ /* Allocate a float buffer to fit all series */
1496
+ function allocateBuffer(chart) {
1497
+ var s = 0;
1498
+
1499
+ if (!settings.usePreallocated) {
1500
+ return;
1501
+ }
1502
+
1503
+ chart.series.forEach(function (series) {
1504
+ if (series.isSeriesBoosting) {
1505
+ s += seriesPointCount(series);
1506
+ }
1507
+ });
1508
+
1509
+ vbuffer.allocate(s);
1510
+ }
1511
+
1512
+ function allocateBufferForSingleSeries(series) {
1513
+ var s = 0;
1514
+
1515
+ if (!settings.usePreallocated) {
1516
+ return;
1517
+ }
1518
+
1519
+ if (series.isSeriesBoosting) {
1520
+ s = seriesPointCount(series);
1521
+ }
1522
+
1523
+ vbuffer.allocate(s);
1524
+ }
1525
+
1526
+ /*
1527
+ * Returns an orthographic perspective matrix
1528
+ * @param {number} width - the width of the viewport in pixels
1529
+ * @param {number} height - the height of the viewport in pixels
1530
+ */
1531
+ function orthoMatrix(width, height) {
1532
+ var near = 0,
1533
+ far = 1;
1534
+
1535
+ return [
1536
+ 2 / width, 0, 0, 0,
1537
+ 0, -(2 / height), 0, 0,
1538
+ 0, 0, -2 / (far - near), 0,
1539
+ -1, 1, -(far + near) / (far - near), 1
1540
+ ];
1541
+ }
1542
+
1543
+ /*
1544
+ * Clear the depth and color buffer
1545
+ */
1546
+ function clear() {
1547
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
1548
+ }
1549
+
1550
+ /*
1551
+ * Get the WebGL context
1552
+ * @returns {WebGLContext} - the context
1553
+ */
1554
+ function getGL() {
1555
+ return gl;
1556
+ }
1557
+
1558
+ /*
1559
+ * Push data for a single series
1560
+ * This calculates additional vertices and transforms the data to be
1561
+ * aligned correctly in memory
1562
+ */
1563
+ function pushSeriesData(series, inst) {
1564
+ var isRange = series.pointArrayMap &&
1565
+ series.pointArrayMap.join(',') === 'low,high',
1566
+ chart = series.chart,
1567
+ options = series.options,
1568
+ isStacked = !!options.stacking,
1569
+ rawData = options.data,
1570
+ xExtremes = series.xAxis.getExtremes(),
1571
+ xMin = xExtremes.min,
1572
+ xMax = xExtremes.max,
1573
+ yExtremes = series.yAxis.getExtremes(),
1574
+ yMin = yExtremes.min,
1575
+ yMax = yExtremes.max,
1576
+ xData = series.xData || options.xData || series.processedXData,
1577
+ yData = series.yData || options.yData || series.processedYData,
1578
+ zData = series.zData || options.zData || series.processedZData,
1579
+ yAxis = series.yAxis,
1580
+ xAxis = series.xAxis,
1581
+ plotHeight = series.chart.plotHeight,
1582
+ plotWidth = series.chart.plotWidth,
1583
+ useRaw = !xData || xData.length === 0,
1584
+ // threshold = options.threshold,
1585
+ // yBottom = chart.yAxis[0].getThreshold(threshold),
1586
+ // hasThreshold = isNumber(threshold),
1587
+ // colorByPoint = series.options.colorByPoint,
1588
+ // This is required for color by point, so make sure this is
1589
+ // uncommented if enabling that
1590
+ // colorIndex = 0,
1591
+ // Required for color axis support
1592
+ // caxis,
1593
+ connectNulls = options.connectNulls,
1594
+ // For some reason eslint doesn't pick up that this is actually used
1595
+ maxVal, // eslint-disable-line no-unused-vars
1596
+ points = series.points || false,
1597
+ lastX = false,
1598
+ lastY = false,
1599
+ minVal,
1600
+ color,
1601
+ scolor,
1602
+ sdata = isStacked ? series.data : (xData || rawData),
1603
+ closestLeft = { x: Number.MAX_VALUE, y: 0 },
1604
+ closestRight = { x: -Number.MAX_VALUE, y: 0 },
1605
+
1606
+ skipped = 0,
1607
+ hadPoints = false,
1608
+
1609
+ cullXThreshold = 1,
1610
+ cullYThreshold = 1,
1611
+
1612
+ // The following are used in the builder while loop
1613
+ x,
1614
+ y,
1615
+ d,
1616
+ z,
1617
+ i = -1,
1618
+ px = false,
1619
+ nx = false,
1620
+ // This is in fact used.
1621
+ low, // eslint-disable-line no-unused-vars
1622
+ chartDestroyed = typeof chart.index === 'undefined',
1623
+ nextInside = false,
1624
+ prevInside = false,
1625
+ pcolor = false,
1626
+ drawAsBar = asBar[series.type],
1627
+ isXInside = false,
1628
+ isYInside = true,
1629
+ firstPoint = true,
1630
+ threshold = options.threshold;
1631
+
1632
+ if (options.boostData && options.boostData.length > 0) {
1633
+ return;
1634
+ }
1635
+
1636
+ if (chart.inverted) {
1637
+ plotHeight = series.chart.plotWidth;
1638
+ plotWidth = series.chart.plotHeight;
1639
+ }
1640
+
1641
+ series.closestPointRangePx = Number.MAX_VALUE;
1642
+
1643
+ // Push color to color buffer - need to do this per. vertex
1644
+ function pushColor(color) {
1645
+ if (color) {
1646
+ inst.colorData.push(color[0]);
1647
+ inst.colorData.push(color[1]);
1648
+ inst.colorData.push(color[2]);
1649
+ inst.colorData.push(color[3]);
1650
+ }
1651
+ }
1652
+
1653
+ // Push a vertice to the data buffer
1654
+ function vertice(x, y, checkTreshold, pointSize, color) {
1655
+ pushColor(color);
1656
+ if (settings.usePreallocated) {
1657
+ vbuffer.push(x, y, checkTreshold ? 1 : 0, pointSize || 1);
1658
+ } else {
1659
+ data.push(x);
1660
+ data.push(y);
1661
+ data.push(checkTreshold ? 1 : 0);
1662
+ data.push(pointSize || 1);
1663
+ }
1664
+ }
1665
+
1666
+ function closeSegment() {
1667
+ if (inst.segments.length) {
1668
+ inst.segments[inst.segments.length - 1].to = data.length;
1669
+ }
1670
+ }
1671
+
1672
+ // Create a new segment for the current set
1673
+ function beginSegment() {
1674
+ // Insert a segment on the series.
1675
+ // A segment is just a start indice.
1676
+ // When adding a segment, if one exists from before, it should
1677
+ // set the previous segment's end
1678
+
1679
+ if (inst.segments.length &&
1680
+ inst.segments[inst.segments.length - 1].from === data.length
1681
+ ) {
1682
+ return;
1683
+ }
1684
+
1685
+ closeSegment();
1686
+
1687
+ inst.segments.push({
1688
+ from: data.length
1689
+ });
1690
+
1691
+ }
1692
+
1693
+ // Push a rectangle to the data buffer
1694
+ function pushRect(x, y, w, h, color) {
1695
+ pushColor(color);
1696
+ vertice(x + w, y);
1697
+ pushColor(color);
1698
+ vertice(x, y);
1699
+ pushColor(color);
1700
+ vertice(x, y + h);
1701
+
1702
+ pushColor(color);
1703
+ vertice(x, y + h);
1704
+ pushColor(color);
1705
+ vertice(x + w, y + h);
1706
+ pushColor(color);
1707
+ vertice(x + w, y);
1708
+ }
1709
+
1710
+ // Create the first segment
1711
+ beginSegment();
1712
+
1713
+ // Special case for point shapes
1714
+ if (points && points.length > 0) {
1715
+
1716
+ // If we're doing points, we assume that the points are already
1717
+ // translated, so we skip the shader translation.
1718
+ inst.skipTranslation = true;
1719
+ // Force triangle draw mode
1720
+ inst.drawMode = 'triangles';
1721
+
1722
+ // We don't have a z component in the shader, so we need to sort.
1723
+ if (points[0].node && points[0].node.levelDynamic) {
1724
+ points.sort(function (a, b) {
1725
+ if (a.node) {
1726
+ if (a.node.levelDynamic > b.node.levelDynamic) {
1727
+ return 1;
1728
+ }
1729
+ if (a.node.levelDynamic < b.node.levelDynamic) {
1730
+ return -1;
1731
+ }
1732
+ }
1733
+ return 0;
1734
+ });
1735
+ }
1736
+
1737
+ points.forEach(function (point) {
1738
+ var plotY = point.plotY,
1739
+ shapeArgs,
1740
+ swidth,
1741
+ pointAttr;
1742
+
1743
+ if (
1744
+ typeof plotY !== 'undefined' &&
1745
+ !isNaN(plotY) &&
1746
+ point.y !== null
1747
+ ) {
1748
+ shapeArgs = point.shapeArgs;
1749
+
1750
+ pointAttr = chart.styledMode ?
1751
+ point.series.colorAttribs(point) :
1752
+ pointAttr = point.series.pointAttribs(point);
1753
+
1754
+ swidth = pointAttr['stroke-width'] || 0;
1755
+
1756
+ // Handle point colors
1757
+ color = H.color(pointAttr.fill).rgba;
1758
+ color[0] /= 255.0;
1759
+ color[1] /= 255.0;
1760
+ color[2] /= 255.0;
1761
+
1762
+ // So there are two ways of doing this. Either we can
1763
+ // create a rectangle of two triangles, or we can do a
1764
+ // point and use point size. Latter is faster, but
1765
+ // only supports squares. So we're doing triangles.
1766
+ // We could also use one color per. vertice to get
1767
+ // better color interpolation.
1768
+
1769
+ // If there's stroking, we do an additional rect
1770
+ if (series.type === 'treemap') {
1771
+ swidth = swidth || 1;
1772
+ scolor = H.color(pointAttr.stroke).rgba;
1773
+
1774
+ scolor[0] /= 255.0;
1775
+ scolor[1] /= 255.0;
1776
+ scolor[2] /= 255.0;
1777
+
1778
+ pushRect(
1779
+ shapeArgs.x,
1780
+ shapeArgs.y,
1781
+ shapeArgs.width,
1782
+ shapeArgs.height,
1783
+ scolor
1784
+ );
1785
+
1786
+ swidth /= 2;
1787
+ }
1788
+ // } else {
1789
+ // swidth = 0;
1790
+ // }
1791
+
1792
+ // Fixes issues with inverted heatmaps (see #6981)
1793
+ // The root cause is that the coordinate system is flipped.
1794
+ // In other words, instead of [0,0] being top-left, it's
1795
+ // bottom-right. This causes a vertical and horizontal flip
1796
+ // in the resulting image, making it rotated 180 degrees.
1797
+ if (series.type === 'heatmap' && chart.inverted) {
1798
+ shapeArgs.x = xAxis.len - shapeArgs.x;
1799
+ shapeArgs.y = yAxis.len - shapeArgs.y;
1800
+ shapeArgs.width = -shapeArgs.width;
1801
+ shapeArgs.height = -shapeArgs.height;
1802
+ }
1803
+
1804
+ pushRect(
1805
+ shapeArgs.x + swidth,
1806
+ shapeArgs.y + swidth,
1807
+ shapeArgs.width - (swidth * 2),
1808
+ shapeArgs.height - (swidth * 2),
1809
+ color
1810
+ );
1811
+ }
1812
+ });
1813
+
1814
+ closeSegment();
1815
+
1816
+ return;
1817
+ }
1818
+
1819
+ // Extract color axis
1820
+ // (chart.axes || []).forEach(function (a) {
1821
+ // if (H.ColorAxis && a instanceof H.ColorAxis) {
1822
+ // caxis = a;
1823
+ // }
1824
+ // });
1825
+
1826
+ while (i < sdata.length - 1) {
1827
+ d = sdata[++i];
1828
+
1829
+ // px = x = y = z = nx = low = false;
1830
+ // chartDestroyed = typeof chart.index === 'undefined';
1831
+ // nextInside = prevInside = pcolor = isXInside = isYInside = false;
1832
+ // drawAsBar = asBar[series.type];
1833
+
1834
+ if (chartDestroyed) {
1835
+ break;
1836
+ }
1837
+
1838
+ // Uncomment this to enable color by point.
1839
+ // This currently left disabled as the charts look really ugly
1840
+ // when enabled and there's a lot of points.
1841
+ // Leaving in for the future (tm).
1842
+ // if (colorByPoint) {
1843
+ // colorIndex = ++colorIndex %
1844
+ // series.chart.options.colors.length;
1845
+ // pcolor = toRGBAFast(series.chart.options.colors[colorIndex]);
1846
+ // pcolor[0] /= 255.0;
1847
+ // pcolor[1] /= 255.0;
1848
+ // pcolor[2] /= 255.0;
1849
+ // }
1850
+
1851
+ if (useRaw) {
1852
+ x = d[0];
1853
+ y = d[1];
1854
+
1855
+ if (sdata[i + 1]) {
1856
+ nx = sdata[i + 1][0];
1857
+ }
1858
+
1859
+ if (sdata[i - 1]) {
1860
+ px = sdata[i - 1][0];
1861
+ }
1862
+
1863
+ if (d.length >= 3) {
1864
+ z = d[2];
1865
+
1866
+ if (d[2] > inst.zMax) {
1867
+ inst.zMax = d[2];
1868
+ }
1869
+
1870
+ if (d[2] < inst.zMin) {
1871
+ inst.zMin = d[2];
1872
+ }
1873
+ }
1874
+
1875
+ } else {
1876
+ x = d;
1877
+ y = yData[i];
1878
+
1879
+ if (sdata[i + 1]) {
1880
+ nx = sdata[i + 1];
1881
+ }
1882
+
1883
+ if (sdata[i - 1]) {
1884
+ px = sdata[i - 1];
1885
+ }
1886
+
1887
+ if (zData && zData.length) {
1888
+ z = zData[i];
1889
+
1890
+ if (zData[i] > inst.zMax) {
1891
+ inst.zMax = zData[i];
1892
+ }
1893
+
1894
+ if (zData[i] < inst.zMin) {
1895
+ inst.zMin = zData[i];
1896
+ }
1897
+ }
1898
+ }
1899
+
1900
+ if (!connectNulls && (x === null || y === null)) {
1901
+ beginSegment();
1902
+ continue;
1903
+ }
1904
+
1905
+ if (nx && nx >= xMin && nx <= xMax) {
1906
+ nextInside = true;
1907
+ }
1908
+
1909
+ if (px && px >= xMin && px <= xMax) {
1910
+ prevInside = true;
1911
+ }
1912
+
1913
+ if (isRange) {
1914
+ if (useRaw) {
1915
+ y = d.slice(1, 3);
1916
+ }
1917
+
1918
+ low = y[0];
1919
+ y = y[1];
1920
+
1921
+ } else if (isStacked) {
1922
+ x = d.x;
1923
+ y = d.stackY;
1924
+ low = y - d.y;
1925
+ }
1926
+
1927
+ if (yMin !== null &&
1928
+ typeof yMin !== 'undefined' &&
1929
+ yMax !== null &&
1930
+ typeof yMax !== 'undefined'
1931
+ ) {
1932
+ isYInside = y >= yMin && y <= yMax;
1933
+ }
1934
+
1935
+ if (x > xMax && closestRight.x < xMax) {
1936
+ closestRight.x = x;
1937
+ closestRight.y = y;
1938
+ }
1939
+
1940
+ if (x < xMin && closestLeft.x > xMin) {
1941
+ closestLeft.x = x;
1942
+ closestLeft.y = y;
1943
+ }
1944
+
1945
+ if (y === null && connectNulls) {
1946
+ continue;
1947
+ }
1948
+
1949
+ // Cull points outside the extremes
1950
+ if (y === null || (!isYInside && !nextInside && !prevInside)) {
1951
+ beginSegment();
1952
+ continue;
1953
+ }
1954
+
1955
+ if (x >= xMin && x <= xMax) {
1956
+ isXInside = true;
1957
+ }
1958
+
1959
+ if (!isXInside && !nextInside && !prevInside) {
1960
+ continue;
1961
+ }
1962
+
1963
+ // Skip translations - temporary floating point fix
1964
+ if (!settings.useGPUTranslations) {
1965
+ inst.skipTranslation = true;
1966
+ x = xAxis.toPixels(x, true);
1967
+ y = yAxis.toPixels(y, true);
1968
+
1969
+ // Make sure we're not drawing outside of the chart area.
1970
+ // See #6594.
1971
+ if (y > plotHeight) {
1972
+ y = plotHeight;
1973
+ }
1974
+
1975
+ if (x > plotWidth) {
1976
+ // If this is rendered as a point, just skip drawing it
1977
+ // entirely, as we're not dependandt on lineTo'ing to it.
1978
+ // See #8197
1979
+ if (inst.drawMode === 'points') {
1980
+ continue;
1981
+ }
1982
+
1983
+ // Having this here will clamp markers and make the angle
1984
+ // of the last line wrong. See 9166.
1985
+ // x = plotWidth;
1986
+
1987
+ }
1988
+
1989
+ }
1990
+
1991
+ if (drawAsBar) {
1992
+
1993
+ maxVal = y;
1994
+ minVal = low;
1995
+
1996
+ if (low === false || typeof low === 'undefined') {
1997
+ if (y < 0) {
1998
+ minVal = y;
1999
+ } else {
2000
+ minVal = 0;
2001
+ }
2002
+ }
2003
+
2004
+ if (!isRange && !isStacked) {
2005
+ minVal = Math.max(threshold, yMin); // #8731
2006
+ }
2007
+ if (!settings.useGPUTranslations) {
2008
+ minVal = yAxis.toPixels(minVal, true);
2009
+ }
2010
+
2011
+ // Need to add an extra point here
2012
+ vertice(x, minVal, 0, 0, pcolor);
2013
+ }
2014
+
2015
+ // No markers on out of bounds things.
2016
+ // Out of bound things are shown if and only if the next
2017
+ // or previous point is inside the rect.
2018
+ if (inst.hasMarkers && isXInside) {
2019
+ // x = H.correctFloat(
2020
+ // Math.min(Math.max(-1e5, xAxis.translate(
2021
+ // x,
2022
+ // 0,
2023
+ // 0,
2024
+ // 0,
2025
+ // 1,
2026
+ // 0.5,
2027
+ // false
2028
+ // )), 1e5)
2029
+ // );
2030
+
2031
+ if (lastX !== false) {
2032
+ series.closestPointRangePx = Math.min(
2033
+ series.closestPointRangePx,
2034
+ Math.abs(x - lastX)
2035
+ );
2036
+ }
2037
+ }
2038
+
2039
+ // If the last _drawn_ point is closer to this point than the
2040
+ // threshold, skip it. Shaves off 20-100ms in processing.
2041
+
2042
+ if (!settings.useGPUTranslations &&
2043
+ !settings.usePreallocated &&
2044
+ (lastX && Math.abs(x - lastX) < cullXThreshold) &&
2045
+ (lastY && Math.abs(y - lastY) < cullYThreshold)
2046
+ ) {
2047
+ if (settings.debug.showSkipSummary) {
2048
+ ++skipped;
2049
+ }
2050
+
2051
+ continue;
2052
+ }
2053
+
2054
+ // Do step line if enabled.
2055
+ // Draws an additional point at the old Y at the new X.
2056
+ // See #6976.
2057
+
2058
+ if (options.step && !firstPoint) {
2059
+ vertice(
2060
+ x,
2061
+ lastY,
2062
+ 0,
2063
+ 2,
2064
+ pcolor
2065
+ );
2066
+ }
2067
+
2068
+ vertice(
2069
+ x,
2070
+ y,
2071
+ 0,
2072
+ series.type === 'bubble' ? (z || 1) : 2,
2073
+ pcolor
2074
+ );
2075
+
2076
+ // Uncomment this to support color axis.
2077
+ // if (caxis) {
2078
+ // color = H.color(caxis.toColor(y)).rgba;
2079
+
2080
+ // inst.colorData.push(color[0] / 255.0);
2081
+ // inst.colorData.push(color[1] / 255.0);
2082
+ // inst.colorData.push(color[2] / 255.0);
2083
+ // inst.colorData.push(color[3]);
2084
+ // }
2085
+
2086
+ lastX = x;
2087
+ lastY = y;
2088
+
2089
+ hadPoints = true;
2090
+ firstPoint = false;
2091
+ }
2092
+
2093
+ if (settings.debug.showSkipSummary) {
2094
+ console.log('skipped points:', skipped); // eslint-disable-line no-console
2095
+ }
2096
+
2097
+ function pushSupplementPoint(point, atStart) {
2098
+ if (!settings.useGPUTranslations) {
2099
+ inst.skipTranslation = true;
2100
+ point.x = xAxis.toPixels(point.x, true);
2101
+ point.y = yAxis.toPixels(point.y, true);
2102
+ }
2103
+
2104
+ // We should only do this for lines, and we should ignore markers
2105
+ // since there's no point here that would have a marker.
2106
+
2107
+ if (atStart) {
2108
+ data = [point.x, point.y, 0, 2].concat(data);
2109
+ return;
2110
+ }
2111
+
2112
+ vertice(
2113
+ point.x,
2114
+ point.y,
2115
+ 0,
2116
+ 2
2117
+ );
2118
+ }
2119
+
2120
+ if (
2121
+ !hadPoints &&
2122
+ connectNulls !== false &&
2123
+ series.drawMode === 'line_strip'
2124
+ ) {
2125
+ if (closestLeft.x < Number.MAX_VALUE) {
2126
+ // We actually need to push this *before* the complete buffer.
2127
+ pushSupplementPoint(closestLeft, true);
2128
+ }
2129
+
2130
+ if (closestRight.x > -Number.MAX_VALUE) {
2131
+ pushSupplementPoint(closestRight);
2132
+ }
2133
+ }
2134
+
2135
+ closeSegment();
2136
+ }
2137
+
2138
+ /*
2139
+ * Push a series to the renderer
2140
+ * If we render the series immediatly, we don't have to loop later
2141
+ * @param s {Highchart.Series} - the series to push
2142
+ */
2143
+ function pushSeries(s) {
2144
+ if (series.length > 0) {
2145
+ // series[series.length - 1].to = data.length;
2146
+ if (series[series.length - 1].hasMarkers) {
2147
+ series[series.length - 1].markerTo = markerData.length;
2148
+ }
2149
+ }
2150
+
2151
+ if (settings.debug.timeSeriesProcessing) {
2152
+ console.time('building ' + s.type + ' series'); // eslint-disable-line no-console
2153
+ }
2154
+
2155
+ series.push({
2156
+ segments: [],
2157
+ // from: data.length,
2158
+ markerFrom: markerData.length,
2159
+ // Push RGBA values to this array to use per. point coloring.
2160
+ // It should be 0-padded, so each component should be pushed in
2161
+ // succession.
2162
+ colorData: [],
2163
+ series: s,
2164
+ zMin: Number.MAX_VALUE,
2165
+ zMax: -Number.MAX_VALUE,
2166
+ hasMarkers: s.options.marker ?
2167
+ s.options.marker.enabled !== false :
2168
+ false,
2169
+ showMarkers: true,
2170
+ drawMode: ({
2171
+ 'area': 'lines',
2172
+ 'arearange': 'lines',
2173
+ 'areaspline': 'line_strip',
2174
+ 'column': 'lines',
2175
+ 'columnrange': 'lines',
2176
+ 'bar': 'lines',
2177
+ 'line': 'line_strip',
2178
+ 'scatter': 'points',
2179
+ 'heatmap': 'triangles',
2180
+ 'treemap': 'triangles',
2181
+ 'bubble': 'points'
2182
+ })[s.type] || 'line_strip'
2183
+ });
2184
+
2185
+ // Add the series data to our buffer(s)
2186
+ pushSeriesData(s, series[series.length - 1]);
2187
+
2188
+ if (settings.debug.timeSeriesProcessing) {
2189
+ console.timeEnd('building ' + s.type + ' series'); // eslint-disable-line no-console
2190
+ }
2191
+ }
2192
+
2193
+ /*
2194
+ * Flush the renderer.
2195
+ * This removes pushed series and vertices.
2196
+ * Should be called after clearing and before rendering
2197
+ */
2198
+ function flush() {
2199
+ series = [];
2200
+ exports.data = data = [];
2201
+ markerData = [];
2202
+
2203
+ if (vbuffer) {
2204
+ vbuffer.destroy();
2205
+ }
2206
+ }
2207
+
2208
+ /*
2209
+ * Pass x-axis to shader
2210
+ * @param axis {Highcharts.Axis} - the x-axis
2211
+ */
2212
+ function setXAxis(axis) {
2213
+ if (!shader) {
2214
+ return;
2215
+ }
2216
+
2217
+ shader.setUniform('xAxisTrans', axis.transA);
2218
+ shader.setUniform('xAxisMin', axis.min);
2219
+ shader.setUniform('xAxisMinPad', axis.minPixelPadding);
2220
+ shader.setUniform('xAxisPointRange', axis.pointRange);
2221
+ shader.setUniform('xAxisLen', axis.len);
2222
+ shader.setUniform('xAxisPos', axis.pos);
2223
+ shader.setUniform('xAxisCVSCoord', !axis.horiz);
2224
+ }
2225
+
2226
+ /*
2227
+ * Pass y-axis to shader
2228
+ * @param axis {Highcharts.Axis} - the y-axis
2229
+ */
2230
+ function setYAxis(axis) {
2231
+ if (!shader) {
2232
+ return;
2233
+ }
2234
+
2235
+ shader.setUniform('yAxisTrans', axis.transA);
2236
+ shader.setUniform('yAxisMin', axis.min);
2237
+ shader.setUniform('yAxisMinPad', axis.minPixelPadding);
2238
+ shader.setUniform('yAxisPointRange', axis.pointRange);
2239
+ shader.setUniform('yAxisLen', axis.len);
2240
+ shader.setUniform('yAxisPos', axis.pos);
2241
+ shader.setUniform('yAxisCVSCoord', !axis.horiz);
2242
+ }
2243
+
2244
+ /*
2245
+ * Set the translation threshold
2246
+ * @param has {boolean} - has threshold flag
2247
+ * @param translation {Float} - the threshold
2248
+ */
2249
+ function setThreshold(has, translation) {
2250
+ shader.setUniform('hasThreshold', has);
2251
+ shader.setUniform('translatedThreshold', translation);
2252
+ }
2253
+
2254
+ /*
2255
+ * Render the data
2256
+ * This renders all pushed series.
2257
+ */
2258
+ function render(chart) {
2259
+
2260
+ if (chart) {
2261
+ if (!chart.chartHeight || !chart.chartWidth) {
2262
+ // chart.setChartSize();
2263
+ }
2264
+
2265
+ width = chart.chartWidth || 800;
2266
+ height = chart.chartHeight || 400;
2267
+ } else {
2268
+ return false;
2269
+ }
2270
+
2271
+ if (!gl || !width || !height || !shader) {
2272
+ return false;
2273
+ }
2274
+
2275
+ if (settings.debug.timeRendering) {
2276
+ console.time('gl rendering'); // eslint-disable-line no-console
2277
+ }
2278
+
2279
+ gl.canvas.width = width;
2280
+ gl.canvas.height = height;
2281
+
2282
+ shader.bind();
2283
+
2284
+ gl.viewport(0, 0, width, height);
2285
+ shader.setPMatrix(orthoMatrix(width, height));
2286
+ shader.setPlotHeight(chart.plotHeight);
2287
+
2288
+ if (settings.lineWidth > 1 && !H.isMS) {
2289
+ gl.lineWidth(settings.lineWidth);
2290
+ }
2291
+
2292
+ vbuffer.build(exports.data, 'aVertexPosition', 4);
2293
+ vbuffer.bind();
2294
+
2295
+ shader.setInverted(chart.inverted);
2296
+
2297
+ // Render the series
2298
+ series.forEach(function (s, si) {
2299
+ var options = s.series.options,
2300
+ shapeOptions = options.marker,
2301
+ sindex,
2302
+ lineWidth = typeof options.lineWidth !== 'undefined' ?
2303
+ options.lineWidth :
2304
+ 1,
2305
+ threshold = options.threshold,
2306
+ hasThreshold = isNumber(threshold),
2307
+ yBottom = s.series.yAxis.getThreshold(threshold),
2308
+ translatedThreshold = yBottom,
2309
+ cbuffer,
2310
+ showMarkers = pick(
2311
+ options.marker ? options.marker.enabled : null,
2312
+ s.series.xAxis.isRadial ? true : null,
2313
+ s.series.closestPointRangePx >
2314
+ 2 * ((
2315
+ options.marker ?
2316
+ options.marker.radius :
2317
+ 10
2318
+ ) || 10)
2319
+ ),
2320
+ fillColor,
2321
+ shapeTexture = textureHandles[
2322
+ (shapeOptions && shapeOptions.symbol) || s.series.symbol
2323
+ ] || textureHandles.circle,
2324
+ color;
2325
+
2326
+ if (
2327
+ s.segments.length === 0 ||
2328
+ (s.segmentslength && s.segments[0].from === s.segments[0].to)
2329
+ ) {
2330
+ return;
2331
+ }
2332
+
2333
+ if (shapeTexture.isReady) {
2334
+ gl.bindTexture(gl.TEXTURE_2D, shapeTexture.handle);
2335
+ shader.setTexture(shapeTexture.handle);
2336
+ }
2337
+
2338
+ if (chart.styledMode) {
2339
+ fillColor = (
2340
+ s.series.markerGroup &&
2341
+ s.series.markerGroup.getStyle('fill')
2342
+ );
2343
+
2344
+ } else {
2345
+ fillColor =
2346
+ (s.series.pointAttribs && s.series.pointAttribs().fill) ||
2347
+ s.series.color;
2348
+
2349
+ if (options.colorByPoint) {
2350
+ fillColor = s.series.chart.options.colors[si];
2351
+ }
2352
+ }
2353
+
2354
+ if (s.series.fillOpacity && options.fillOpacity) {
2355
+ fillColor = new Color(fillColor).setOpacity(
2356
+ pick(options.fillOpacity, 1.0)
2357
+ ).get();
2358
+ }
2359
+
2360
+ color = H.color(fillColor).rgba;
2361
+
2362
+ if (!settings.useAlpha) {
2363
+ color[3] = 1.0;
2364
+ }
2365
+
2366
+ // This is very much temporary
2367
+ if (s.drawMode === 'lines' && settings.useAlpha && color[3] < 1) {
2368
+ color[3] /= 10;
2369
+ }
2370
+
2371
+ // Blending
2372
+ if (options.boostBlending === 'add') {
2373
+ gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
2374
+ gl.blendEquation(gl.FUNC_ADD);
2375
+
2376
+ } else if (options.boostBlending === 'mult' ||
2377
+ options.boostBlending === 'multiply'
2378
+ ) {
2379
+ gl.blendFunc(gl.DST_COLOR, gl.ZERO);
2380
+
2381
+ } else if (options.boostBlending === 'darken') {
2382
+ gl.blendFunc(gl.ONE, gl.ONE);
2383
+ gl.blendEquation(gl.FUNC_MIN);
2384
+
2385
+ } else {
2386
+ // gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
2387
+ // gl.blendEquation(gl.FUNC_ADD);
2388
+ gl.blendFuncSeparate(
2389
+ gl.SRC_ALPHA,
2390
+ gl.ONE_MINUS_SRC_ALPHA,
2391
+ gl.ONE,
2392
+ gl.ONE_MINUS_SRC_ALPHA
2393
+ );
2394
+ }
2395
+
2396
+ shader.reset();
2397
+
2398
+ // If there are entries in the colorData buffer, build and bind it.
2399
+ if (s.colorData.length > 0) {
2400
+ shader.setUniform('hasColor', 1.0);
2401
+ cbuffer = GLVertexBuffer(gl, shader); // eslint-disable-line new-cap
2402
+ cbuffer.build(s.colorData, 'aColor', 4);
2403
+ cbuffer.bind();
2404
+ }
2405
+
2406
+ // Set series specific uniforms
2407
+ shader.setColor(color);
2408
+ setXAxis(s.series.xAxis);
2409
+ setYAxis(s.series.yAxis);
2410
+ setThreshold(hasThreshold, translatedThreshold);
2411
+
2412
+ if (s.drawMode === 'points') {
2413
+ if (options.marker && options.marker.radius) {
2414
+ shader.setPointSize(options.marker.radius * 2.0);
2415
+ } else {
2416
+ shader.setPointSize(1);
2417
+ }
2418
+ }
2419
+
2420
+ // If set to true, the toPixels translations in the shader
2421
+ // is skipped, i.e it's assumed that the value is a pixel coord.
2422
+ shader.setSkipTranslation(s.skipTranslation);
2423
+
2424
+ if (s.series.type === 'bubble') {
2425
+ shader.setBubbleUniforms(s.series, s.zMin, s.zMax);
2426
+ }
2427
+
2428
+ shader.setDrawAsCircle(
2429
+ asCircle[s.series.type] || false
2430
+ );
2431
+
2432
+ // Do the actual rendering
2433
+ // If the line width is < 0, skip rendering of the lines. See #7833.
2434
+ if (lineWidth > 0 || s.drawMode !== 'line_strip') {
2435
+ for (sindex = 0; sindex < s.segments.length; sindex++) {
2436
+ // if (s.segments[sindex].from < s.segments[sindex].to) {
2437
+ vbuffer.render(
2438
+ s.segments[sindex].from,
2439
+ s.segments[sindex].to,
2440
+ s.drawMode
2441
+ );
2442
+ // }
2443
+ }
2444
+ }
2445
+
2446
+ if (s.hasMarkers && showMarkers) {
2447
+ if (options.marker && options.marker.radius) {
2448
+ shader.setPointSize(options.marker.radius * 2.0);
2449
+ } else {
2450
+ shader.setPointSize(10);
2451
+ }
2452
+ shader.setDrawAsCircle(true);
2453
+ for (sindex = 0; sindex < s.segments.length; sindex++) {
2454
+ // if (s.segments[sindex].from < s.segments[sindex].to) {
2455
+ vbuffer.render(
2456
+ s.segments[sindex].from,
2457
+ s.segments[sindex].to,
2458
+ 'POINTS'
2459
+ );
2460
+ // }
2461
+ }
2462
+ }
2463
+ });
2464
+
2465
+ if (settings.debug.timeRendering) {
2466
+ console.timeEnd('gl rendering'); // eslint-disable-line no-console
2467
+ }
2468
+
2469
+ if (postRenderCallback) {
2470
+ postRenderCallback();
2471
+ }
2472
+
2473
+ flush();
2474
+ }
2475
+
2476
+ /*
2477
+ * Render the data when ready
2478
+ */
2479
+ function renderWhenReady(chart) {
2480
+ clear();
2481
+
2482
+ if (chart.renderer.forExport) {
2483
+ return render(chart);
2484
+ }
2485
+
2486
+ if (isInited) {
2487
+ render(chart);
2488
+ } else {
2489
+ setTimeout(function () {
2490
+ renderWhenReady(chart);
2491
+ }, 1);
2492
+ }
2493
+ }
2494
+
2495
+ /*
2496
+ * Set the viewport size in pixels
2497
+ * Creates an orthographic perspective matrix and applies it.
2498
+ * @param w {Integer} - the width of the viewport
2499
+ * @param h {Integer} - the height of the viewport
2500
+ */
2501
+ function setSize(w, h) {
2502
+ // Skip if there's no change, or if we have no valid shader
2503
+ if ((width === w && height === h) || !shader) {
2504
+ return;
2505
+ }
2506
+
2507
+ width = w;
2508
+ height = h;
2509
+
2510
+ shader.bind();
2511
+ shader.setPMatrix(orthoMatrix(width, height));
2512
+ }
2513
+
2514
+ /*
2515
+ * Init OpenGL
2516
+ * @param canvas {HTMLCanvas} - the canvas to render to
2517
+ */
2518
+ function init(canvas, noFlush) {
2519
+ var i = 0,
2520
+ contexts = [
2521
+ 'webgl',
2522
+ 'experimental-webgl',
2523
+ 'moz-webgl',
2524
+ 'webkit-3d'
2525
+ ];
2526
+
2527
+ isInited = false;
2528
+
2529
+ if (!canvas) {
2530
+ return false;
2531
+ }
2532
+
2533
+ if (settings.debug.timeSetup) {
2534
+ console.time('gl setup'); // eslint-disable-line no-console
2535
+ }
2536
+
2537
+ for (; i < contexts.length; i++) {
2538
+ gl = canvas.getContext(contexts[i], {
2539
+ // premultipliedAlpha: false
2540
+ });
2541
+ if (gl) {
2542
+ break;
2543
+ }
2544
+ }
2545
+
2546
+ if (gl) {
2547
+ if (!noFlush) {
2548
+ flush();
2549
+ }
2550
+ } else {
2551
+ return false;
2552
+ }
2553
+
2554
+ gl.enable(gl.BLEND);
2555
+ // gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
2556
+ gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
2557
+ gl.disable(gl.DEPTH_TEST);
2558
+ // gl.depthMask(gl.FALSE);
2559
+ gl.depthFunc(gl.LESS);
2560
+
2561
+ shader = GLShader(gl); // eslint-disable-line new-cap
2562
+
2563
+ if (!shader) {
2564
+ // We need to abort, there's no shader context
2565
+ return false;
2566
+ }
2567
+
2568
+ vbuffer = GLVertexBuffer(gl, shader); // eslint-disable-line new-cap
2569
+
2570
+ function createTexture(name, fn) {
2571
+ var props = {
2572
+ isReady: false,
2573
+ texture: doc.createElement('canvas'),
2574
+ handle: gl.createTexture()
2575
+ },
2576
+ ctx = props.texture.getContext('2d');
2577
+
2578
+ textureHandles[name] = props;
2579
+
2580
+ props.texture.width = 512;
2581
+ props.texture.height = 512;
2582
+
2583
+ ctx.mozImageSmoothingEnabled = false;
2584
+ ctx.webkitImageSmoothingEnabled = false;
2585
+ ctx.msImageSmoothingEnabled = false;
2586
+ ctx.imageSmoothingEnabled = false;
2587
+
2588
+ ctx.strokeStyle = 'rgba(255, 255, 255, 0)';
2589
+ ctx.fillStyle = '#FFF';
2590
+
2591
+ fn(ctx);
2592
+
2593
+ try {
2594
+
2595
+ gl.activeTexture(gl.TEXTURE0);
2596
+ gl.bindTexture(gl.TEXTURE_2D, props.handle);
2597
+ // gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
2598
+
2599
+ gl.texImage2D(
2600
+ gl.TEXTURE_2D,
2601
+ 0,
2602
+ gl.RGBA,
2603
+ gl.RGBA,
2604
+ gl.UNSIGNED_BYTE,
2605
+ props.texture
2606
+ );
2607
+
2608
+ gl.texParameteri(
2609
+ gl.TEXTURE_2D,
2610
+ gl.TEXTURE_WRAP_S,
2611
+ gl.CLAMP_TO_EDGE
2612
+ );
2613
+
2614
+ gl.texParameteri(
2615
+ gl.TEXTURE_2D,
2616
+ gl.TEXTURE_WRAP_T,
2617
+ gl.CLAMP_TO_EDGE
2618
+ );
2619
+
2620
+ gl.texParameteri(
2621
+ gl.TEXTURE_2D,
2622
+ gl.TEXTURE_MAG_FILTER,
2623
+ gl.LINEAR
2624
+ );
2625
+
2626
+ gl.texParameteri(
2627
+ gl.TEXTURE_2D,
2628
+ gl.TEXTURE_MIN_FILTER,
2629
+ gl.LINEAR
2630
+ );
2631
+
2632
+ // gl.generateMipmap(gl.TEXTURE_2D);
2633
+
2634
+ gl.bindTexture(gl.TEXTURE_2D, null);
2635
+
2636
+ props.isReady = true;
2637
+ } catch (e) {}
2638
+ }
2639
+
2640
+ // Circle shape
2641
+ createTexture('circle', function (ctx) {
2642
+ ctx.beginPath();
2643
+ ctx.arc(256, 256, 256, 0, 2 * Math.PI);
2644
+ ctx.stroke();
2645
+ ctx.fill();
2646
+ });
2647
+
2648
+ // Square shape
2649
+ createTexture('square', function (ctx) {
2650
+ ctx.fillRect(0, 0, 512, 512);
2651
+ });
2652
+
2653
+ // Diamond shape
2654
+ createTexture('diamond', function (ctx) {
2655
+ ctx.beginPath();
2656
+ ctx.moveTo(256, 0);
2657
+ ctx.lineTo(512, 256);
2658
+ ctx.lineTo(256, 512);
2659
+ ctx.lineTo(0, 256);
2660
+ ctx.lineTo(256, 0);
2661
+ ctx.fill();
2662
+ });
2663
+
2664
+ // Triangle shape
2665
+ createTexture('triangle', function (ctx) {
2666
+ ctx.beginPath();
2667
+ ctx.moveTo(0, 512);
2668
+ ctx.lineTo(256, 0);
2669
+ ctx.lineTo(512, 512);
2670
+ ctx.lineTo(0, 512);
2671
+ ctx.fill();
2672
+ });
2673
+
2674
+ // Triangle shape (rotated)
2675
+ createTexture('triangle-down', function (ctx) {
2676
+ ctx.beginPath();
2677
+ ctx.moveTo(0, 0);
2678
+ ctx.lineTo(256, 512);
2679
+ ctx.lineTo(512, 0);
2680
+ ctx.lineTo(0, 0);
2681
+ ctx.fill();
2682
+ });
2683
+
2684
+ isInited = true;
2685
+
2686
+ if (settings.debug.timeSetup) {
2687
+ console.timeEnd('gl setup'); // eslint-disable-line no-console
2688
+ }
2689
+
2690
+ return true;
2691
+ }
2692
+
2693
+ /*
2694
+ * Check if we have a valid OGL context
2695
+ * @returns {Boolean} - true if the context is valid
2696
+ */
2697
+ function valid() {
2698
+ return gl !== false;
2699
+ }
2700
+
2701
+ /*
2702
+ * Check if the renderer has been initialized
2703
+ * @returns {Boolean} - true if it has, false if not
2704
+ */
2705
+ function inited() {
2706
+ return isInited;
2707
+ }
2708
+
2709
+ function destroy() {
2710
+ flush();
2711
+ vbuffer.destroy();
2712
+ shader.destroy();
2713
+ if (gl) {
2714
+
2715
+ objEach(textureHandles, function (key) {
2716
+ if (textureHandles[key].handle) {
2717
+ gl.deleteTexture(textureHandles[key].handle);
2718
+ }
2719
+ });
2720
+
2721
+ gl.canvas.width = 1;
2722
+ gl.canvas.height = 1;
2723
+ }
2724
+ }
2725
+
2726
+ // /////////////////////////////////////////////////////////////////////////
2727
+ exports = {
2728
+ allocateBufferForSingleSeries: allocateBufferForSingleSeries,
2729
+ pushSeries: pushSeries,
2730
+ setSize: setSize,
2731
+ inited: inited,
2732
+ setThreshold: setThreshold,
2733
+ init: init,
2734
+ render: renderWhenReady,
2735
+ settings: settings,
2736
+ valid: valid,
2737
+ clear: clear,
2738
+ flush: flush,
2739
+ setXAxis: setXAxis,
2740
+ setYAxis: setYAxis,
2741
+ data: data,
2742
+ gl: getGL,
2743
+ allocateBuffer: allocateBuffer,
2744
+ destroy: destroy,
2745
+ setOptions: setOptions
2746
+ };
2747
+
2748
+ return exports;
2749
+ }
2750
+
2751
+ // END OF WEBGL ABSTRACTIONS
2752
+ // /////////////////////////////////////////////////////////////////////////////
2753
+
2754
+ /**
2755
+ * Create a canvas + context and attach it to the target
2756
+ *
2757
+ * @private
2758
+ * @function createAndAttachRenderer
2759
+ *
2760
+ * @param {Highcharts.Chart|Highcharts.Series} target
2761
+ * the canvas target
2762
+ *
2763
+ * @param {Highcharts.Chart} chart
2764
+ * the chart
2765
+ *
2766
+ * @return {*}
2767
+ */
2768
+ function createAndAttachRenderer(chart, series) {
2769
+ var width = chart.chartWidth,
2770
+ height = chart.chartHeight,
2771
+ target = chart,
2772
+ targetGroup = chart.seriesGroup || series.group,
2773
+ alpha = 1,
2774
+ foSupported = doc.implementation.hasFeature(
2775
+ 'www.http://w3.org/TR/SVG11/feature#Extensibility',
2776
+ '1.1'
2777
+ );
2778
+
2779
+ if (chart.isChartSeriesBoosting()) {
2780
+ target = chart;
2781
+ } else {
2782
+ target = series;
2783
+ }
2784
+
2785
+ // Support for foreignObject is flimsy as best.
2786
+ // IE does not support it, and Chrome has a bug which messes up
2787
+ // the canvas draw order.
2788
+ // As such, we force the Image fallback for now, but leaving the
2789
+ // actual Canvas path in-place in case this changes in the future.
2790
+ foSupported = false;
2791
+
2792
+ if (!target.renderTarget) {
2793
+ target.canvas = mainCanvas;
2794
+
2795
+ // Fall back to image tag if foreignObject isn't supported,
2796
+ // or if we're exporting.
2797
+ if (chart.renderer.forExport || !foSupported) {
2798
+ target.renderTarget = chart.renderer.image(
2799
+ '',
2800
+ 0,
2801
+ 0,
2802
+ width,
2803
+ height
2804
+ )
2805
+ .addClass('highcharts-boost-canvas')
2806
+ .add(targetGroup);
2807
+
2808
+ target.boostClear = function () {
2809
+ target.renderTarget.attr({ href: '' });
2810
+ };
2811
+
2812
+ target.boostCopy = function () {
2813
+ target.boostResizeTarget();
2814
+ target.renderTarget.attr({
2815
+ href: target.canvas.toDataURL('image/png')
2816
+ });
2817
+ };
2818
+
2819
+ } else {
2820
+ target.renderTargetFo = chart.renderer
2821
+ .createElement('foreignObject')
2822
+ .add(targetGroup);
2823
+
2824
+ target.renderTarget = doc.createElement('canvas');
2825
+ target.renderTargetCtx = target.renderTarget.getContext('2d');
2826
+
2827
+ target.renderTargetFo.element.appendChild(target.renderTarget);
2828
+
2829
+ target.boostClear = function () {
2830
+ target.renderTarget.width = target.canvas.width;
2831
+ target.renderTarget.height = target.canvas.height;
2832
+ };
2833
+
2834
+ target.boostCopy = function () {
2835
+ target.renderTarget.width = target.canvas.width;
2836
+ target.renderTarget.height = target.canvas.height;
2837
+
2838
+ target.renderTargetCtx.drawImage(target.canvas, 0, 0);
2839
+ };
2840
+ }
2841
+
2842
+ target.boostResizeTarget = function () {
2843
+ width = chart.chartWidth;
2844
+ height = chart.chartHeight;
2845
+
2846
+ (target.renderTargetFo || target.renderTarget)
2847
+ .attr({
2848
+ x: 0,
2849
+ y: 0,
2850
+ width: width,
2851
+ height: height
2852
+ })
2853
+ .css({
2854
+ pointerEvents: 'none',
2855
+ mixedBlendMode: 'normal',
2856
+ opacity: alpha
2857
+ });
2858
+
2859
+ if (target instanceof H.Chart) {
2860
+ target.markerGroup.translate(
2861
+ chart.plotLeft,
2862
+ chart.plotTop
2863
+ );
2864
+ }
2865
+ };
2866
+
2867
+ target.boostClipRect = chart.renderer.clipRect();
2868
+
2869
+ (target.renderTargetFo || target.renderTarget)
2870
+ .clip(target.boostClipRect);
2871
+
2872
+ if (target instanceof H.Chart) {
2873
+ target.markerGroup = target.renderer.g().add(targetGroup);
2874
+
2875
+ target.markerGroup.translate(series.xAxis.pos, series.yAxis.pos);
2876
+ }
2877
+ }
2878
+
2879
+ target.canvas.width = width;
2880
+ target.canvas.height = height;
2881
+
2882
+ target.boostClipRect.attr(chart.getBoostClipRect(target));
2883
+
2884
+ target.boostResizeTarget();
2885
+ target.boostClear();
2886
+
2887
+ if (!target.ogl) {
2888
+ target.ogl = GLRenderer(function () { // eslint-disable-line new-cap
2889
+ if (target.ogl.settings.debug.timeBufferCopy) {
2890
+ console.time('buffer copy'); // eslint-disable-line no-console
2891
+ }
2892
+
2893
+ target.boostCopy();
2894
+
2895
+ if (target.ogl.settings.debug.timeBufferCopy) {
2896
+ console.timeEnd('buffer copy'); // eslint-disable-line no-console
2897
+ }
2898
+
2899
+ }); // eslint-disable-line new-cap
2900
+
2901
+ if (!target.ogl.init(target.canvas)) {
2902
+ // The OGL renderer couldn't be inited.
2903
+ // This likely means a shader error as we wouldn't get to this point
2904
+ // if there was no WebGL support.
2905
+ H.error('[highcharts boost] - unable to init WebGL renderer');
2906
+ }
2907
+
2908
+ // target.ogl.clear();
2909
+ target.ogl.setOptions(chart.options.boost || {});
2910
+
2911
+ if (target instanceof H.Chart) {
2912
+ target.ogl.allocateBuffer(chart);
2913
+ }
2914
+ }
2915
+
2916
+ target.ogl.setSize(width, height);
2917
+
2918
+ return target.ogl;
2919
+ }
2920
+
2921
+ /*
2922
+ * Performs the actual render if the renderer is
2923
+ * attached to the series.
2924
+ * @param renderer {OGLRenderer} - the renderer
2925
+ * @param series {Highcharts.Series} - the series
2926
+ */
2927
+ function renderIfNotSeriesBoosting(renderer, series, chart) {
2928
+ if (renderer &&
2929
+ series.renderTarget &&
2930
+ series.canvas &&
2931
+ !(chart || series.chart).isChartSeriesBoosting()
2932
+ ) {
2933
+ renderer.render(chart || series.chart);
2934
+ }
2935
+ }
2936
+
2937
+ function allocateIfNotSeriesBoosting(renderer, series) {
2938
+ if (renderer &&
2939
+ series.renderTarget &&
2940
+ series.canvas &&
2941
+ !series.chart.isChartSeriesBoosting()
2942
+ ) {
2943
+ renderer.allocateBufferForSingleSeries(series);
2944
+ }
2945
+ }
2946
+
2947
+ /*
2948
+ * An "async" foreach loop. Uses a setTimeout to keep the loop from blocking the
2949
+ * UI thread.
2950
+ *
2951
+ * @param arr {Array} - the array to loop through
2952
+ * @param fn {Function} - the callback to call for each item
2953
+ * @param finalFunc {Function} - the callback to call when done
2954
+ * @param chunkSize {Number} - the number of iterations per timeout
2955
+ * @param i {Number} - the current index
2956
+ * @param noTimeout {Boolean} - set to true to skip timeouts
2957
+ */
2958
+ H.eachAsync = function (arr, fn, finalFunc, chunkSize, i, noTimeout) {
2959
+ i = i || 0;
2960
+ chunkSize = chunkSize || CHUNK_SIZE;
2961
+
2962
+ var threshold = i + chunkSize,
2963
+ proceed = true;
2964
+
2965
+ while (proceed && i < threshold && i < arr.length) {
2966
+ proceed = fn(arr[i], i);
2967
+ ++i;
2968
+ }
2969
+
2970
+ if (proceed) {
2971
+ if (i < arr.length) {
2972
+
2973
+ if (noTimeout) {
2974
+ H.eachAsync(arr, fn, finalFunc, chunkSize, i, noTimeout);
2975
+ } else if (win.requestAnimationFrame) {
2976
+ // If available, do requestAnimationFrame - shaves off a few ms
2977
+ win.requestAnimationFrame(function () {
2978
+ H.eachAsync(arr, fn, finalFunc, chunkSize, i);
2979
+ });
2980
+ } else {
2981
+ setTimeout(function () {
2982
+ H.eachAsync(arr, fn, finalFunc, chunkSize, i);
2983
+ });
2984
+ }
2985
+
2986
+ } else if (finalFunc) {
2987
+ finalFunc();
2988
+ }
2989
+ }
2990
+ };
2991
+
2992
+ // /////////////////////////////////////////////////////////////////////////////
2993
+ // Following is the parts of the boost that's common between OGL/Legacy
2994
+
2995
+ /**
2996
+ * Return a full Point object based on the index.
2997
+ * The boost module uses stripped point objects for performance reasons.
2998
+ *
2999
+ * @function Highcharts.Series#getPoint
3000
+ *
3001
+ * @param {object|Highcharts.Point} boostPoint
3002
+ * A stripped-down point object
3003
+ *
3004
+ * @return {object}
3005
+ * A Point object as per http://api.highcharts.com/highcharts#Point
3006
+ */
3007
+ Series.prototype.getPoint = function (boostPoint) {
3008
+ var point = boostPoint,
3009
+ xData = (
3010
+ this.xData || this.options.xData || this.processedXData || false
3011
+ );
3012
+
3013
+ if (boostPoint && !(boostPoint instanceof this.pointClass)) {
3014
+ point = (new this.pointClass()).init( // eslint-disable-line new-cap
3015
+ this,
3016
+ this.options.data[boostPoint.i],
3017
+ xData ? xData[boostPoint.i] : undefined
3018
+ );
3019
+
3020
+ point.category = point.x;
3021
+
3022
+ point.dist = boostPoint.dist;
3023
+ point.distX = boostPoint.distX;
3024
+ point.plotX = boostPoint.plotX;
3025
+ point.plotY = boostPoint.plotY;
3026
+ point.index = boostPoint.i;
3027
+ }
3028
+
3029
+ return point;
3030
+ };
3031
+
3032
+ /**
3033
+ * Return a point instance from the k-d-tree
3034
+ */
3035
+ wrap(Series.prototype, 'searchPoint', function (proceed) {
3036
+ return this.getPoint(
3037
+ proceed.apply(this, [].slice.call(arguments, 1))
3038
+ );
3039
+ });
3040
+
3041
+ /**
3042
+ * Extend series.destroy to also remove the fake k-d-tree points (#5137).
3043
+ * Normally this is handled by Series.destroy that calls Point.destroy,
3044
+ * but the fake search points are not registered like that.
3045
+ */
3046
+ addEvent(Series, 'destroy', function () {
3047
+ var series = this,
3048
+ chart = series.chart;
3049
+
3050
+ if (chart.markerGroup === series.markerGroup) {
3051
+ series.markerGroup = null;
3052
+ }
3053
+
3054
+ if (chart.hoverPoints) {
3055
+ chart.hoverPoints = chart.hoverPoints.filter(function (point) {
3056
+ return point.series === series;
3057
+ });
3058
+ }
3059
+
3060
+ if (chart.hoverPoint && chart.hoverPoint.series === series) {
3061
+ chart.hoverPoint = null;
3062
+ }
3063
+ });
3064
+
3065
+ /**
3066
+ * Do not compute extremes when min and max are set.
3067
+ * If we use this in the core, we can add the hook
3068
+ * to hasExtremes to the methods directly.
3069
+ */
3070
+ wrap(Series.prototype, 'getExtremes', function (proceed) {
3071
+ if (!this.isSeriesBoosting || (!this.hasExtremes || !this.hasExtremes())) {
3072
+ return proceed.apply(this, Array.prototype.slice.call(arguments, 1));
3073
+ }
3074
+ });
3075
+
3076
+ // Set default options
3077
+ boostable.forEach(
3078
+ function (type) {
3079
+ if (plotOptions[type]) {
3080
+ plotOptions[type].boostThreshold = 5000;
3081
+ plotOptions[type].boostData = [];
3082
+
3083
+ seriesTypes[type].prototype.fillOpacity = true;
3084
+ }
3085
+ }
3086
+ );
3087
+
3088
+ /**
3089
+ * Override a bunch of methods the same way. If the number of points is
3090
+ * below the threshold, run the original method. If not, check for a
3091
+ * canvas version or do nothing.
3092
+ *
3093
+ * Note that we're not overriding any of these for heatmaps.
3094
+ */
3095
+ [
3096
+ 'translate',
3097
+ 'generatePoints',
3098
+ 'drawTracker',
3099
+ 'drawPoints',
3100
+ 'render'
3101
+ ].forEach(function (method) {
3102
+ function branch(proceed) {
3103
+ var letItPass = this.options.stacking &&
3104
+ (method === 'translate' || method === 'generatePoints');
3105
+
3106
+ if (
3107
+ !this.isSeriesBoosting ||
3108
+ letItPass ||
3109
+ !boostEnabled(this.chart) ||
3110
+ this.type === 'heatmap' ||
3111
+ this.type === 'treemap' ||
3112
+ !boostableMap[this.type] ||
3113
+ this.options.boostThreshold === 0
3114
+ ) {
3115
+
3116
+ proceed.call(this);
3117
+
3118
+ // If a canvas version of the method exists, like renderCanvas(), run
3119
+ } else if (this[method + 'Canvas']) {
3120
+ this[method + 'Canvas']();
3121
+ }
3122
+ }
3123
+
3124
+ wrap(Series.prototype, method, branch);
3125
+
3126
+ // A special case for some types - their translate method is already wrapped
3127
+ if (method === 'translate') {
3128
+ [
3129
+ 'column',
3130
+ 'bar',
3131
+ 'arearange',
3132
+ 'columnrange',
3133
+ 'heatmap',
3134
+ 'treemap'
3135
+ ].forEach(
3136
+ function (type) {
3137
+ if (seriesTypes[type]) {
3138
+ wrap(seriesTypes[type].prototype, method, branch);
3139
+ }
3140
+ }
3141
+ );
3142
+ }
3143
+ });
3144
+
3145
+ /** If the series is a heatmap or treemap, or if the series is not boosting
3146
+ * do the default behaviour. Otherwise, process if the series has no
3147
+ * extremes.
3148
+ */
3149
+ wrap(Series.prototype, 'processData', function (proceed) {
3150
+
3151
+ var series = this,
3152
+ dataToMeasure = this.options.data;
3153
+
3154
+ // Used twice in this function, first on this.options.data, the second
3155
+ // time it runs the check again after processedXData is built.
3156
+ // @todo Check what happens with data grouping
3157
+ function getSeriesBoosting(data) {
3158
+ return series.chart.isChartSeriesBoosting() || (
3159
+ (data ? data.length : 0) >=
3160
+ (series.options.boostThreshold || Number.MAX_VALUE)
3161
+ );
3162
+ }
3163
+
3164
+ if (boostEnabled(this.chart) && boostableMap[this.type]) {
3165
+
3166
+ // If there are no extremes given in the options, we also need to
3167
+ // process the data to read the data extremes. If this is a heatmap, do
3168
+ // default behaviour.
3169
+ if (
3170
+ !getSeriesBoosting(dataToMeasure) || // First pass with options.data
3171
+ this.type === 'heatmap' ||
3172
+ this.type === 'treemap' ||
3173
+ this.options.stacking || // processedYData for the stack (#7481)
3174
+ !this.hasExtremes ||
3175
+ !this.hasExtremes(true)
3176
+ ) {
3177
+ proceed.apply(this, Array.prototype.slice.call(arguments, 1));
3178
+ dataToMeasure = this.processedXData;
3179
+ }
3180
+
3181
+ // Set the isBoosting flag, second pass with processedXData to see if we
3182
+ // have zoomed.
3183
+ this.isSeriesBoosting = getSeriesBoosting(dataToMeasure);
3184
+
3185
+ // Enter or exit boost mode
3186
+ if (this.isSeriesBoosting) {
3187
+ this.enterBoost();
3188
+ } else if (this.exitBoost) {
3189
+ this.exitBoost();
3190
+ }
3191
+
3192
+ // The series type is not boostable
3193
+ } else {
3194
+ proceed.apply(this, Array.prototype.slice.call(arguments, 1));
3195
+ }
3196
+ });
3197
+
3198
+ addEvent(Series, 'hide', function () {
3199
+ if (this.canvas && this.renderTarget) {
3200
+ if (this.ogl) {
3201
+ this.ogl.clear();
3202
+ }
3203
+ this.boostClear();
3204
+ }
3205
+
3206
+ });
3207
+
3208
+ /**
3209
+ * Enter boost mode and apply boost-specific properties.
3210
+ *
3211
+ * @function Highcharts.Series#enterBoost
3212
+ */
3213
+ Series.prototype.enterBoost = function () {
3214
+
3215
+ this.alteredByBoost = [];
3216
+
3217
+ // Save the original values, including whether it was an own property or
3218
+ // inherited from the prototype.
3219
+ ['allowDG', 'directTouch', 'stickyTracking'].forEach(function (prop) {
3220
+ this.alteredByBoost.push({
3221
+ prop: prop,
3222
+ val: this[prop],
3223
+ own: this.hasOwnProperty(prop)
3224
+ });
3225
+ }, this);
3226
+
3227
+ this.allowDG = false;
3228
+ this.directTouch = false;
3229
+ this.stickyTracking = true;
3230
+
3231
+ // Once we've been in boost mode, we don't want animation when returning to
3232
+ // vanilla mode.
3233
+ this.animate = null;
3234
+
3235
+ // Hide series label if any
3236
+ if (this.labelBySeries) {
3237
+ this.labelBySeries = this.labelBySeries.destroy();
3238
+ }
3239
+ };
3240
+
3241
+ /**
3242
+ * Exit from boost mode and restore non-boost properties.
3243
+ *
3244
+ * @function Highcharts.Series#exitBoost
3245
+ */
3246
+ Series.prototype.exitBoost = function () {
3247
+ // Reset instance properties and/or delete instance properties and go back
3248
+ // to prototype
3249
+ (this.alteredByBoost || []).forEach(function (setting) {
3250
+ if (setting.own) {
3251
+ this[setting.prop] = setting.val;
3252
+ } else {
3253
+ // Revert to prototype
3254
+ delete this[setting.prop];
3255
+ }
3256
+ }, this);
3257
+
3258
+ // Clear previous run
3259
+ if (this.boostClear) {
3260
+ this.boostClear();
3261
+ }
3262
+
3263
+ };
3264
+
3265
+ /**
3266
+ * @private
3267
+ * @function Highcharts.Series#hasExtremes
3268
+ *
3269
+ * @param {boolean} checkX
3270
+ *
3271
+ * @return {boolean}
3272
+ */
3273
+ Series.prototype.hasExtremes = function (checkX) {
3274
+ var options = this.options,
3275
+ data = options.data,
3276
+ xAxis = this.xAxis && this.xAxis.options,
3277
+ yAxis = this.yAxis && this.yAxis.options;
3278
+
3279
+ return data.length > (options.boostThreshold || Number.MAX_VALUE) &&
3280
+ isNumber(yAxis.min) && isNumber(yAxis.max) &&
3281
+ (!checkX || (isNumber(xAxis.min) && isNumber(xAxis.max)));
3282
+ };
3283
+
3284
+ /**
3285
+ * If implemented in the core, parts of this can probably be
3286
+ * shared with other similar methods in Highcharts.
3287
+ *
3288
+ * @function Highcharts.Series#destroyGraphics
3289
+ */
3290
+ Series.prototype.destroyGraphics = function () {
3291
+ var series = this,
3292
+ points = this.points,
3293
+ point,
3294
+ i;
3295
+
3296
+ if (points) {
3297
+ for (i = 0; i < points.length; i = i + 1) {
3298
+ point = points[i];
3299
+ if (point && point.destroyElements) {
3300
+ point.destroyElements(); // #7557
3301
+ }
3302
+ }
3303
+ }
3304
+
3305
+ ['graph', 'area', 'tracker'].forEach(function (prop) {
3306
+ if (series[prop]) {
3307
+ series[prop] = series[prop].destroy();
3308
+ }
3309
+ });
3310
+ };
3311
+
3312
+
3313
+ /**
3314
+ * Returns true if the current browser supports webgl
3315
+ *
3316
+ * @private
3317
+ * @function Highcharts.hasWebGLSupport
3318
+ *
3319
+ * @return {boolean}
3320
+ */
3321
+ H.hasWebGLSupport = function () {
3322
+ var i = 0,
3323
+ canvas,
3324
+ contexts = ['webgl', 'experimental-webgl', 'moz-webgl', 'webkit-3d'],
3325
+ context = false;
3326
+
3327
+ if (typeof win.WebGLRenderingContext !== 'undefined') {
3328
+ canvas = doc.createElement('canvas');
3329
+
3330
+ for (; i < contexts.length; i++) {
3331
+ try {
3332
+ context = canvas.getContext(contexts[i]);
3333
+ if (typeof context !== 'undefined' && context !== null) {
3334
+ return true;
3335
+ }
3336
+ } catch (e) {
3337
+
3338
+ }
3339
+ }
3340
+ }
3341
+
3342
+ return false;
3343
+ };
3344
+
3345
+ /**
3346
+ * Used for treemap|heatmap.drawPoints
3347
+ *
3348
+ * @private
3349
+ * @function pointDrawHandler
3350
+ *
3351
+ * @param {Function} proceed
3352
+ *
3353
+ * @return {*}
3354
+ */
3355
+ function pointDrawHandler(proceed) {
3356
+ var enabled = true,
3357
+ renderer;
3358
+
3359
+ if (this.chart.options && this.chart.options.boost) {
3360
+ enabled = typeof this.chart.options.boost.enabled === 'undefined' ?
3361
+ true :
3362
+ this.chart.options.boost.enabled;
3363
+ }
3364
+
3365
+ if (!enabled || !this.isSeriesBoosting) {
3366
+ return proceed.call(this);
3367
+ }
3368
+
3369
+ this.chart.isBoosting = true;
3370
+
3371
+ // Make sure we have a valid OGL context
3372
+ renderer = createAndAttachRenderer(this.chart, this);
3373
+
3374
+ if (renderer) {
3375
+ allocateIfNotSeriesBoosting(renderer, this);
3376
+ renderer.pushSeries(this);
3377
+ }
3378
+
3379
+ renderIfNotSeriesBoosting(renderer, this);
3380
+ }
3381
+
3382
+ // /////////////////////////////////////////////////////////////////////////////
3383
+ // We're wrapped in a closure, so just return if there's no webgl support
3384
+
3385
+ if (!H.hasWebGLSupport()) {
3386
+ if (typeof H.initCanvasBoost !== 'undefined') {
3387
+ // Fallback to canvas boost
3388
+ H.initCanvasBoost();
3389
+ } else {
3390
+ H.error(26);
3391
+ }
3392
+ } else {
3393
+
3394
+ // /////////////////////////////////////////////////////////////////////////
3395
+ // GL-SPECIFIC WRAPPINGS FOLLOWS
3396
+
3397
+
3398
+ H.extend(Series.prototype, {
3399
+
3400
+ /**
3401
+ * @private
3402
+ * @function Highcharts.Series#renderCanvas
3403
+ */
3404
+ renderCanvas: function () {
3405
+ var series = this,
3406
+ options = series.options || {},
3407
+ renderer = false,
3408
+ chart = series.chart,
3409
+ xAxis = this.xAxis,
3410
+ yAxis = this.yAxis,
3411
+ xData = options.xData || series.processedXData,
3412
+ yData = options.yData || series.processedYData,
3413
+ rawData = options.data,
3414
+ xExtremes = xAxis.getExtremes(),
3415
+ xMin = xExtremes.min,
3416
+ xMax = xExtremes.max,
3417
+ yExtremes = yAxis.getExtremes(),
3418
+ yMin = yExtremes.min,
3419
+ yMax = yExtremes.max,
3420
+ pointTaken = {},
3421
+ lastClientX,
3422
+ sampling = !!series.sampling,
3423
+ points,
3424
+ enableMouseTracking = options.enableMouseTracking !== false,
3425
+ threshold = options.threshold,
3426
+ yBottom = yAxis.getThreshold(threshold),
3427
+ isRange = series.pointArrayMap &&
3428
+ series.pointArrayMap.join(',') === 'low,high',
3429
+ isStacked = !!options.stacking,
3430
+ cropStart = series.cropStart || 0,
3431
+ requireSorting = series.requireSorting,
3432
+ useRaw = !xData,
3433
+ minVal,
3434
+ maxVal,
3435
+ minI,
3436
+ maxI,
3437
+ boostOptions,
3438
+ compareX = options.findNearestPointBy === 'x',
3439
+
3440
+ xDataFull = (
3441
+ this.xData ||
3442
+ this.options.xData ||
3443
+ this.processedXData ||
3444
+ false
3445
+ ),
3446
+
3447
+ addKDPoint = function (clientX, plotY, i) {
3448
+
3449
+ // We need to do ceil on the clientX to make things
3450
+ // snap to pixel values. The renderer will frequently
3451
+ // draw stuff on "sub-pixels".
3452
+ clientX = Math.ceil(clientX);
3453
+
3454
+ // Shaves off about 60ms compared to repeated concatenation
3455
+ index = compareX ? clientX : clientX + ',' + plotY;
3456
+
3457
+ // The k-d tree requires series points.
3458
+ // Reduce the amount of points, since the time to build the
3459
+ // tree increases exponentially.
3460
+ if (enableMouseTracking && !pointTaken[index]) {
3461
+ pointTaken[index] = true;
3462
+
3463
+ if (chart.inverted) {
3464
+ clientX = xAxis.len - clientX;
3465
+ plotY = yAxis.len - plotY;
3466
+ }
3467
+
3468
+ points.push({
3469
+ x: xDataFull ? xDataFull[cropStart + i] : false,
3470
+ clientX: clientX,
3471
+ plotX: clientX,
3472
+ plotY: plotY,
3473
+ i: cropStart + i
3474
+ });
3475
+ }
3476
+ };
3477
+
3478
+ // Get or create the renderer
3479
+ renderer = createAndAttachRenderer(chart, series);
3480
+
3481
+ chart.isBoosting = true;
3482
+
3483
+ boostOptions = renderer.settings;
3484
+
3485
+ if (!this.visible) {
3486
+ return;
3487
+ }
3488
+
3489
+ // If we are zooming out from SVG mode, destroy the graphics
3490
+ if (this.points || this.graph) {
3491
+
3492
+ this.animate = null;
3493
+ this.destroyGraphics();
3494
+ }
3495
+
3496
+ // If we're rendering per. series we should create the marker groups
3497
+ // as usual.
3498
+ if (!chart.isChartSeriesBoosting()) {
3499
+ this.markerGroup = series.plotGroup(
3500
+ 'markerGroup',
3501
+ 'markers',
3502
+ true,
3503
+ 1,
3504
+ chart.seriesGroup
3505
+ );
3506
+ } else {
3507
+ // Use a single group for the markers
3508
+ this.markerGroup = chart.markerGroup;
3509
+
3510
+ // When switching from chart boosting mode, destroy redundant
3511
+ // series boosting targets
3512
+ if (this.renderTarget) {
3513
+ this.renderTarget = this.renderTarget.destroy();
3514
+ }
3515
+ }
3516
+
3517
+ points = this.points = [];
3518
+
3519
+ // Do not start building while drawing
3520
+ series.buildKDTree = noop;
3521
+
3522
+ if (renderer) {
3523
+ allocateIfNotSeriesBoosting(renderer, this);
3524
+ renderer.pushSeries(series);
3525
+ // Perform the actual renderer if we're on series level
3526
+ renderIfNotSeriesBoosting(renderer, this, chart);
3527
+ }
3528
+
3529
+ /* This builds the KD-tree */
3530
+ function processPoint(d, i) {
3531
+ var x,
3532
+ y,
3533
+ clientX,
3534
+ plotY,
3535
+ isNull,
3536
+ low = false,
3537
+ chartDestroyed = typeof chart.index === 'undefined',
3538
+ isYInside = true;
3539
+
3540
+ if (!chartDestroyed) {
3541
+ if (useRaw) {
3542
+ x = d[0];
3543
+ y = d[1];
3544
+ } else {
3545
+ x = d;
3546
+ y = yData[i];
3547
+ }
3548
+
3549
+ // Resolve low and high for range series
3550
+ if (isRange) {
3551
+ if (useRaw) {
3552
+ y = d.slice(1, 3);
3553
+ }
3554
+ low = y[0];
3555
+ y = y[1];
3556
+ } else if (isStacked) {
3557
+ x = d.x;
3558
+ y = d.stackY;
3559
+ low = y - d.y;
3560
+ }
3561
+
3562
+ isNull = y === null;
3563
+
3564
+ // Optimize for scatter zooming
3565
+ if (!requireSorting) {
3566
+ isYInside = y >= yMin && y <= yMax;
3567
+ }
3568
+
3569
+ if (!isNull && x >= xMin && x <= xMax && isYInside) {
3570
+
3571
+ clientX = xAxis.toPixels(x, true);
3572
+
3573
+ if (sampling) {
3574
+ if (minI === undefined || clientX === lastClientX) {
3575
+ if (!isRange) {
3576
+ low = y;
3577
+ }
3578
+ if (maxI === undefined || y > maxVal) {
3579
+ maxVal = y;
3580
+ maxI = i;
3581
+ }
3582
+ if (minI === undefined || low < minVal) {
3583
+ minVal = low;
3584
+ minI = i;
3585
+ }
3586
+
3587
+ }
3588
+ // Add points and reset
3589
+ if (clientX !== lastClientX) {
3590
+ if (minI !== undefined) { // maxI is number too
3591
+ plotY = yAxis.toPixels(maxVal, true);
3592
+ yBottom = yAxis.toPixels(minVal, true);
3593
+
3594
+ addKDPoint(clientX, plotY, maxI);
3595
+ if (yBottom !== plotY) {
3596
+ addKDPoint(clientX, yBottom, minI);
3597
+ }
3598
+ }
3599
+
3600
+ minI = maxI = undefined;
3601
+ lastClientX = clientX;
3602
+ }
3603
+ } else {
3604
+ plotY = Math.ceil(yAxis.toPixels(y, true));
3605
+ addKDPoint(clientX, plotY, i);
3606
+ }
3607
+ }
3608
+ }
3609
+
3610
+ return !chartDestroyed;
3611
+ }
3612
+
3613
+ function doneProcessing() {
3614
+ fireEvent(series, 'renderedCanvas');
3615
+
3616
+ // Go back to prototype, ready to build
3617
+ delete series.buildKDTree;
3618
+ series.buildKDTree();
3619
+
3620
+ if (boostOptions.debug.timeKDTree) {
3621
+ console.timeEnd('kd tree building'); // eslint-disable-line no-console
3622
+ }
3623
+ }
3624
+
3625
+ // Loop over the points to build the k-d tree - skip this if
3626
+ // exporting
3627
+ if (!chart.renderer.forExport) {
3628
+ if (boostOptions.debug.timeKDTree) {
3629
+ console.time('kd tree building'); // eslint-disable-line no-console
3630
+ }
3631
+
3632
+ H.eachAsync(
3633
+ isStacked ? series.data : (xData || rawData),
3634
+ processPoint,
3635
+ doneProcessing
3636
+ );
3637
+ }
3638
+ }
3639
+ });
3640
+
3641
+ /* *
3642
+ * We need to handle heatmaps separatly, since we can't perform the
3643
+ * size/color calculations in the shader easily.
3644
+ *
3645
+ * This likely needs future optimization.
3646
+ */
3647
+ ['heatmap', 'treemap'].forEach(
3648
+ function (t) {
3649
+ if (seriesTypes[t]) {
3650
+ wrap(seriesTypes[t].prototype, 'drawPoints', pointDrawHandler);
3651
+ }
3652
+ }
3653
+ );
3654
+
3655
+ if (seriesTypes.bubble) {
3656
+ // By default, the bubble series does not use the KD-tree, so force it
3657
+ // to.
3658
+ delete seriesTypes.bubble.prototype.buildKDTree;
3659
+ // seriesTypes.bubble.prototype.directTouch = false;
3660
+
3661
+ // Needed for markers to work correctly
3662
+ wrap(
3663
+ seriesTypes.bubble.prototype,
3664
+ 'markerAttribs',
3665
+ function (proceed) {
3666
+ if (this.isSeriesBoosting) {
3667
+ return false;
3668
+ }
3669
+ return proceed.apply(this, [].slice.call(arguments, 1));
3670
+ }
3671
+ );
3672
+ }
3673
+
3674
+ seriesTypes.scatter.prototype.fill = true;
3675
+
3676
+ extend(seriesTypes.area.prototype, {
3677
+ fill: true,
3678
+ fillOpacity: true,
3679
+ sampling: true
3680
+ });
3681
+
3682
+
3683
+ extend(seriesTypes.column.prototype, {
3684
+ fill: true,
3685
+ sampling: true
3686
+ });
3687
+
3688
+ // Take care of the canvas blitting
3689
+ H.Chart.prototype.callbacks.push(function (chart) {
3690
+
3691
+ /* Convert chart-level canvas to image */
3692
+ function canvasToSVG() {
3693
+ if (chart.ogl && chart.isChartSeriesBoosting()) {
3694
+ chart.ogl.render(chart);
3695
+ }
3696
+ }
3697
+
3698
+ /* Clear chart-level canvas */
3699
+ function preRender() {
3700
+ // Reset force state
3701
+ chart.boostForceChartBoost = undefined;
3702
+ chart.boostForceChartBoost = shouldForceChartSeriesBoosting(chart);
3703
+ chart.isBoosting = false;
3704
+
3705
+ if (!chart.isChartSeriesBoosting() && chart.didBoost) {
3706
+ chart.didBoost = false;
3707
+ }
3708
+
3709
+ // Clear the canvas
3710
+ if (chart.boostClear) {
3711
+ chart.boostClear();
3712
+ }
3713
+
3714
+ if (chart.canvas && chart.ogl && chart.isChartSeriesBoosting()) {
3715
+ chart.didBoost = true;
3716
+
3717
+ // Allocate
3718
+ chart.ogl.allocateBuffer(chart);
3719
+ }
3720
+
3721
+ // see #6518 + #6739
3722
+ if (
3723
+ chart.markerGroup &&
3724
+ chart.xAxis &&
3725
+ chart.xAxis.length > 0 &&
3726
+ chart.yAxis &&
3727
+ chart.yAxis.length > 0
3728
+ ) {
3729
+ chart.markerGroup.translate(
3730
+ chart.xAxis[0].pos,
3731
+ chart.yAxis[0].pos
3732
+ );
3733
+ }
3734
+ }
3735
+
3736
+ addEvent(chart, 'predraw', preRender);
3737
+ addEvent(chart, 'render', canvasToSVG);
3738
+
3739
+ // addEvent(chart, 'zoom', function () {
3740
+ // chart.boostForceChartBoost =
3741
+ // shouldForceChartSeriesBoosting(chart);
3742
+ // });
3743
+
3744
+ });
3745
+ } // if hasCanvasSupport
3746
+
3747
+ }(Highcharts));
3748
+ return (function () {
3749
+
3750
+
3751
+ }());
3752
+ }));