highcharts 9.2.2 → 9.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -6
- package/bower.json +1 -1
- package/css/annotations/popup.css +48 -8
- package/css/annotations/popup.scss +70 -22
- package/css/highcharts.css +45 -0
- package/css/highcharts.scss +40 -0
- package/css/themes/dark-unica.css +45 -0
- package/css/themes/grid-light.css +45 -0
- package/css/themes/sand-signika.css +45 -0
- package/es-modules/Accessibility/A11yI18n.js +273 -224
- package/es-modules/Accessibility/Accessibility.js +233 -128
- package/es-modules/Accessibility/AccessibilityComponent.js +79 -314
- package/es-modules/Accessibility/Components/AnnotationsA11y.js +10 -0
- package/es-modules/Accessibility/Components/ContainerComponent.js +52 -27
- package/es-modules/Accessibility/Components/InfoRegionsComponent.js +46 -23
- package/es-modules/Accessibility/Components/LegendComponent.js +97 -65
- package/es-modules/Accessibility/Components/MenuComponent.js +59 -40
- package/es-modules/Accessibility/Components/RangeSelectorComponent.js +5 -8
- package/es-modules/Accessibility/Components/SeriesComponent/ForcedMarkers.js +152 -115
- package/es-modules/Accessibility/Components/SeriesComponent/NewDataAnnouncer.js +133 -68
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesComponent.js +64 -27
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +38 -21
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js +380 -325
- package/es-modules/Accessibility/Components/ZoomComponent.js +28 -20
- package/es-modules/Accessibility/FocusBorder.js +192 -147
- package/es-modules/Accessibility/HighContrastMode.js +78 -66
- package/es-modules/Accessibility/HighContrastTheme.js +10 -0
- package/es-modules/Accessibility/KeyboardNavigation.js +144 -70
- package/es-modules/Accessibility/KeyboardNavigationHandler.js +71 -44
- package/es-modules/Accessibility/Options/DeprecatedOptions.js +11 -1
- package/es-modules/Accessibility/Options/LangOptions.js +1 -2
- package/es-modules/Accessibility/Options/Options.js +32 -17
- package/es-modules/Accessibility/ProxyElement.js +212 -0
- package/es-modules/Accessibility/ProxyProvider.js +305 -0
- package/es-modules/Accessibility/Utils/Announcer.js +15 -8
- package/es-modules/Accessibility/Utils/ChartUtilities.js +41 -16
- package/es-modules/Accessibility/Utils/DOMElementProvider.js +27 -15
- package/es-modules/Accessibility/Utils/EventProvider.js +27 -17
- package/es-modules/Accessibility/Utils/HTMLUtilities.js +125 -30
- package/es-modules/Core/Axis/Axis.js +37 -30
- package/es-modules/Core/Axis/AxisDefaults.js +35 -24
- package/es-modules/Core/Axis/Color/ColorAxisComposition.js +54 -4
- package/es-modules/Core/Axis/Color/ColorAxisDefaults.js +5 -5
- package/es-modules/Core/Axis/OrdinalAxis.js +8 -12
- package/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBand.js +4 -5
- package/es-modules/Core/Axis/ScrollbarAxis.js +10 -3
- package/es-modules/Core/Axis/TreeGridAxis.js +2 -2
- package/es-modules/Core/Axis/TreeGridTick.js +1 -2
- package/es-modules/Core/Chart/Chart.js +2 -3
- package/es-modules/Core/Chart/ChartDefaults.js +3 -4
- package/es-modules/Core/Chart/ChartNavigationComposition.js +92 -0
- package/es-modules/Core/Chart/MapChart.js +10 -22
- package/es-modules/Core/Chart/StockChart.js +3 -293
- package/es-modules/Core/Color/Palettes.js +22 -0
- package/es-modules/Core/DefaultOptions.js +19 -17
- package/es-modules/Core/Foundation.js +39 -31
- package/es-modules/Core/Globals.js +1 -1
- package/es-modules/Core/HttpUtilities.js +3 -3
- package/es-modules/Core/Legend/Legend.js +7 -3
- package/es-modules/Core/Navigator.js +7 -8
- package/es-modules/Core/Pointer.js +39 -36
- package/es-modules/Core/Renderer/HTML/AST.js +2 -0
- package/es-modules/Core/Renderer/HTML/HTMLElement.js +23 -18
- package/es-modules/Core/Renderer/SVG/SVGElement.js +3 -4
- package/es-modules/Core/Renderer/SVG/SVGRenderer.js +21 -18
- package/es-modules/Core/Renderer/SVG/TextBuilder.js +3 -3
- package/es-modules/Core/ScrollbarDefaults.js +10 -9
- package/es-modules/Core/Series/DataLabel.js +2 -3
- package/es-modules/Core/Series/Point.js +5 -3
- package/es-modules/Core/Series/Series.js +153 -162
- package/es-modules/Core/Series/SeriesDefaults.js +3 -4
- package/es-modules/Core/Series/SeriesRegistry.js +1 -2
- package/es-modules/Core/Tooltip.js +44 -17
- package/es-modules/Core/Utilities.js +15 -7
- package/es-modules/Data/DataConverter.js +489 -0
- package/es-modules/Data/DataPromise.js +252 -0
- package/es-modules/Data/DataSeriesConverter.js +203 -0
- package/es-modules/Data/DataTable.js +1204 -0
- package/es-modules/Data/Modifiers/ChainModifier.js +299 -0
- package/es-modules/Data/Modifiers/DataModifier.js +303 -0
- package/es-modules/Data/Modifiers/GroupModifier.js +144 -0
- package/es-modules/Data/Modifiers/InvertModifier.js +254 -0
- package/es-modules/Data/Modifiers/RangeModifier.js +143 -0
- package/es-modules/Data/Modifiers/SeriesPointsModifier.js +110 -0
- package/es-modules/Data/Modifiers/SortModifier.js +249 -0
- package/es-modules/Data/Parsers/CSVParser.js +399 -0
- package/es-modules/Data/Parsers/DataParser.js +101 -0
- package/es-modules/Data/Parsers/GoogleSheetsParser.js +220 -0
- package/es-modules/Data/Parsers/HTMLTableParser.js +213 -0
- package/es-modules/Data/Stores/CSVStore.js +317 -0
- package/es-modules/Data/Stores/DataStore.js +276 -0
- package/es-modules/Data/Stores/GoogleSheetsStore.js +167 -0
- package/es-modules/Data/Stores/HTMLTableStore.js +351 -0
- package/es-modules/Extensions/Annotations/Annotations.js +61 -11
- package/es-modules/Extensions/Annotations/ControlPoint.js +1 -1
- package/es-modules/Extensions/Annotations/Controllables/ControllableEllipse.js +199 -0
- package/es-modules/Extensions/Annotations/Mixins/ControllableMixin.js +7 -1
- package/es-modules/Extensions/Annotations/NavigationBindings.js +68 -19
- package/es-modules/Extensions/Annotations/Popup.js +479 -141
- package/es-modules/Extensions/Annotations/Types/BasicAnnotation.js +51 -2
- package/es-modules/Extensions/Annotations/Types/CrookedLine.js +1 -1
- package/es-modules/Extensions/Annotations/Types/Fibonacci.js +2 -3
- package/es-modules/Extensions/Annotations/Types/FibonacciTimeZones.js +219 -0
- package/es-modules/Extensions/Annotations/Types/InfinityLine.js +1 -1
- package/es-modules/Extensions/Annotations/Types/Measure.js +14 -8
- package/es-modules/Extensions/Annotations/Types/Pitchfork.js +5 -5
- package/es-modules/Extensions/Annotations/Types/TimeCycles.js +207 -0
- package/es-modules/Extensions/Annotations/Types/Tunnel.js +3 -5
- package/es-modules/Extensions/Annotations/Types/VerticalLine.js +1 -1
- package/es-modules/Extensions/Boost/BoostOverrides.js +3 -1
- package/es-modules/Extensions/Boost/WGLShader.js +4 -3
- package/es-modules/Extensions/BoostCanvas.js +1 -2
- package/es-modules/Extensions/CurrentDateIndication.js +2 -3
- package/es-modules/Extensions/DataGrouping.js +31 -18
- package/es-modules/Extensions/DownloadURL.js +2 -2
- package/es-modules/Extensions/DragPanes.js +1 -2
- package/es-modules/Extensions/Drilldown.js +2 -3
- package/es-modules/Extensions/Exporting/Exporting.js +8 -7
- package/es-modules/Extensions/Exporting/ExportingDefaults.js +8 -15
- package/es-modules/Extensions/GeoJSON.js +39 -63
- package/es-modules/Extensions/MarkerClusters.js +115 -97
- package/es-modules/Extensions/NoDataToDisplay.js +1 -2
- package/es-modules/Extensions/OfflineExporting/OfflineExporting.js +9 -8
- package/es-modules/Extensions/OfflineExporting/OfflineExportingDefaults.js +1 -1
- package/es-modules/Extensions/Oldie/Oldie.js +2 -3
- package/es-modules/Extensions/Pane.js +5 -6
- package/es-modules/Extensions/RangeSelector.js +3 -4
- package/es-modules/Extensions/Sonification/ChartSonify.js +247 -637
- package/es-modules/Extensions/Sonification/Earcon.js +136 -102
- package/es-modules/Extensions/Sonification/Instrument.js +496 -426
- package/es-modules/Extensions/Sonification/MusicalFrequencies.js +10 -0
- package/es-modules/Extensions/Sonification/Options.js +10 -0
- package/es-modules/Extensions/Sonification/PointSonify.js +203 -152
- package/es-modules/Extensions/Sonification/SeriesSonify.js +459 -0
- package/es-modules/Extensions/Sonification/SignalHandler.js +124 -0
- package/es-modules/Extensions/Sonification/Sonification.js +26 -52
- package/es-modules/Extensions/Sonification/{Utilities.js → SonificationUtilities.js} +62 -84
- package/es-modules/Extensions/Sonification/Timeline.js +255 -567
- package/es-modules/Extensions/Sonification/TimelineEvent.js +158 -0
- package/es-modules/Extensions/Sonification/TimelinePath.js +311 -0
- package/es-modules/Maps/MapNavigation.js +27 -64
- package/es-modules/Maps/MapNavigationOptionsDefault.js +3 -0
- package/es-modules/Maps/MapPointer.js +7 -5
- package/es-modules/Maps/MapView.js +450 -0
- package/es-modules/Maps/MapViewOptionsDefault.js +95 -0
- package/es-modules/Maps/Projection.js +433 -0
- package/es-modules/Maps/ProjectionDefinition.js +9 -0
- package/es-modules/Maps/Projections/EqualEarth.js +42 -0
- package/es-modules/Maps/Projections/Miller.js +17 -0
- package/es-modules/Maps/Projections/Orthographic.js +26 -0
- package/es-modules/Maps/Projections/ProjectionRegistry.js +17 -0
- package/es-modules/Maps/Projections/WebMercator.js +25 -0
- package/es-modules/Series/AreaRange/AreaRangeSeries.js +4 -5
- package/es-modules/Series/Bellcurve/BellcurveSeries.js +2 -8
- package/es-modules/Series/BoxPlot/BoxPlotSeries.js +1 -2
- package/es-modules/Series/Bubble/BubbleLegendDefaults.js +1 -2
- package/es-modules/Series/Bubble/BubbleLegendItem.js +3 -3
- package/es-modules/Series/Bubble/BubblePoint.js +5 -0
- package/es-modules/Series/Bubble/BubbleSeries.js +90 -50
- package/es-modules/Series/Candlestick/CandlestickSeries.js +10 -18
- package/es-modules/{Mixins/CenteredSeries.js → Series/CenteredUtilities.js} +45 -23
- package/es-modules/Series/ColorMapComposition.js +109 -0
- package/es-modules/Series/Column/ColumnDataLabel.js +5 -5
- package/es-modules/Series/Column/ColumnSeries.js +3 -4
- package/es-modules/Series/ColumnPyramid/ColumnPyramidSeries.js +6 -6
- package/es-modules/Series/DataModifyComposition.js +539 -0
- package/es-modules/Series/DependencyWheel/DependencyWheelPoint.js +2 -6
- package/es-modules/Series/DerivedComposition.js +137 -0
- package/es-modules/Series/DrawPointComposition.js +111 -0
- package/es-modules/Series/Dumbbell/DumbbellSeries.js +2 -3
- package/es-modules/Series/ErrorBar/ErrorBarSeries.js +1 -2
- package/es-modules/Series/Flags/FlagsSeries.js +18 -25
- package/es-modules/Series/Funnel/FunnelSeries.js +6 -5
- package/es-modules/Series/Gantt/GanttSeries.js +0 -2
- package/es-modules/Series/Gauge/GaugePoint.js +1 -1
- package/es-modules/Series/Gauge/GaugeSeries.js +7 -7
- package/es-modules/Series/HLC/HLCPoint.js +55 -0
- package/es-modules/Series/HLC/HLCSeries.js +383 -0
- package/es-modules/Series/Heatmap/HeatmapPoint.js +3 -4
- package/es-modules/Series/Heatmap/HeatmapSeries.js +19 -6
- package/es-modules/Series/HeikinAshi/HeikinAshiSeries.js +2 -3
- package/es-modules/Series/Histogram/HistogramSeries.js +3 -7
- package/es-modules/Series/HollowCandlestick/HollowCandlestickSeries.js +9 -10
- package/es-modules/Series/Line/LineSeries.js +1 -2
- package/es-modules/Series/Map/MapPoint.js +23 -16
- package/es-modules/Series/Map/MapSeries.js +268 -309
- package/es-modules/Series/MapBubble/MapBubblePoint.js +0 -3
- package/es-modules/Series/MapBubble/MapBubbleSeries.js +10 -1
- package/es-modules/Series/MapPoint/MapPointPoint.js +5 -1
- package/es-modules/Series/MapPoint/MapPointSeries.js +87 -4
- package/es-modules/Series/Networkgraph/Networkgraph.js +5 -5
- package/es-modules/{Mixins/Nodes.js → Series/NodesComposition.js} +76 -29
- package/es-modules/Series/OHLC/OHLCPoint.js +2 -6
- package/es-modules/Series/OHLC/OHLCSeries.js +55 -183
- package/es-modules/{Mixins/OnSeries.js → Series/OnSeriesComposition.js} +53 -21
- package/es-modules/Series/Organization/OrganizationSeries.js +2 -3
- package/es-modules/Series/PackedBubble/PackedBubbleSeries.js +46 -6
- package/es-modules/Series/ParetoSeries/ParetoSeries.js +3 -7
- package/es-modules/Series/Pie/PieDataLabel.js +1 -2
- package/es-modules/Series/Pie/PieSeries.js +6 -7
- package/es-modules/Series/Sankey/SankeyPoint.js +0 -4
- package/es-modules/Series/Sankey/SankeySeries.js +89 -20
- package/es-modules/Series/Sunburst/SunburstPoint.js +2 -3
- package/es-modules/Series/Sunburst/SunburstSeries.js +4 -4
- package/es-modules/Series/Tilemap/TilemapPoint.js +2 -3
- package/es-modules/Series/Timeline/TimelineSeries.js +3 -4
- package/es-modules/{Mixins/TreeSeries.js → Series/TreeUtilities.js} +86 -76
- package/es-modules/Series/Treemap/TreemapPoint.js +2 -2
- package/es-modules/Series/Treemap/TreemapSeries.js +8 -8
- package/es-modules/Series/Venn/VennPoint.js +16 -7
- package/es-modules/Series/Venn/VennSeries.js +5 -8
- package/es-modules/Series/Venn/VennUtils.js +550 -439
- package/es-modules/Series/Waterfall/WaterfallSeries.js +2 -3
- package/es-modules/Series/Windbarb/WindbarbSeries.js +23 -24
- package/es-modules/Series/Wordcloud/WordcloudPoint.js +8 -6
- package/es-modules/Series/Wordcloud/WordcloudSeries.js +24 -20
- package/es-modules/Series/Wordcloud/WordcloudUtils.js +673 -484
- package/es-modules/Series/XRange/XRangePoint.js +1 -0
- package/es-modules/Stock/Indicators/ABands/ABandsIndicator.js +3 -6
- package/es-modules/Stock/Indicators/AO/AOIndicator.js +2 -3
- package/es-modules/Stock/Indicators/APO/APOIndicator.js +14 -20
- package/es-modules/Stock/Indicators/Aroon/AroonIndicator.js +3 -6
- package/es-modules/Stock/Indicators/AroonOscillator/AroonOscillatorIndicator.js +11 -13
- package/es-modules/Stock/Indicators/ArrayUtilities.js +47 -0
- package/es-modules/Stock/Indicators/BB/BBIndicator.js +27 -11
- package/es-modules/Stock/Indicators/Chaikin/ChaikinIndicator.js +6 -12
- package/es-modules/Stock/Indicators/DEMA/DEMAIndicator.js +1 -11
- package/es-modules/Stock/Indicators/DMI/DMIIndicator.js +19 -11
- package/es-modules/Stock/Indicators/DisparityIndex/DisparityIndexIndicator.js +17 -11
- package/es-modules/Stock/Indicators/EMA/EMAIndicator.js +1 -3
- package/es-modules/Stock/Indicators/KeltnerChannels/KeltnerChannelsIndicator.js +11 -9
- package/es-modules/Stock/Indicators/Klinger/KlingerIndicator.js +8 -16
- package/es-modules/Stock/Indicators/LinearRegression/LinearRegression.js +2 -2
- package/es-modules/Stock/Indicators/LinearRegressionAngle/LinearRegressionAngle.js +2 -2
- package/es-modules/Stock/Indicators/LinearRegressionIntercept/LinearRegressionIntercept.js +2 -2
- package/es-modules/Stock/Indicators/LinearRegressionSlopes/LinearRegressionSlopes.js +2 -2
- package/es-modules/Stock/Indicators/MACD/MACDIndicator.js +1 -2
- package/es-modules/{Mixins/MultipleLines.js → Stock/Indicators/MultipleLinesComposition.js} +136 -87
- package/es-modules/Stock/Indicators/NATR/NATRIndicator.js +1 -3
- package/es-modules/Stock/Indicators/PC/PCIndicator.js +14 -13
- package/es-modules/Stock/Indicators/PPO/PPOIndicator.js +1 -11
- package/es-modules/Stock/Indicators/SMA/SMAComposition.js +0 -26
- package/es-modules/Stock/Indicators/SMA/SMAIndicator.js +9 -32
- package/es-modules/Stock/Indicators/SlowStochastic/SlowStochasticIndicator.js +0 -8
- package/es-modules/Stock/Indicators/Stochastic/StochasticIndicator.js +15 -8
- package/es-modules/Stock/Indicators/Supertrend/SupertrendIndicator.js +4 -6
- package/es-modules/Stock/Indicators/TEMA/TEMAIndicator.js +26 -11
- package/es-modules/Stock/Indicators/TRIX/TRIXIndicator.js +6 -12
- package/es-modules/Stock/Indicators/VBP/VBPIndicator.js +20 -3
- package/es-modules/Stock/Indicators/WilliamsR/WilliamsRIndicator.js +2 -3
- package/es-modules/Stock/StockToolsBindings.js +144 -42
- package/es-modules/Stock/StockToolsGui.js +405 -11
- package/es-modules/masters/highcharts-3d.src.js +1 -1
- package/es-modules/masters/highcharts-gantt.src.js +1 -1
- package/es-modules/masters/highcharts-more.src.js +1 -1
- package/es-modules/masters/highcharts.src.js +1 -1
- package/es-modules/masters/highmaps.src.js +1 -1
- package/es-modules/masters/highstock.src.js +1 -1
- package/es-modules/masters/indicators/acceleration-bands.src.js +1 -1
- package/es-modules/masters/indicators/accumulation-distribution.src.js +1 -1
- package/es-modules/masters/indicators/ao.src.js +1 -1
- package/es-modules/masters/indicators/apo.src.js +1 -1
- package/es-modules/masters/indicators/aroon-oscillator.src.js +1 -1
- package/es-modules/masters/indicators/aroon.src.js +1 -1
- package/es-modules/masters/indicators/atr.src.js +1 -1
- package/es-modules/masters/indicators/bollinger-bands.src.js +1 -1
- package/es-modules/masters/indicators/cci.src.js +1 -1
- package/es-modules/masters/indicators/chaikin.src.js +1 -1
- package/es-modules/masters/indicators/cmf.src.js +1 -1
- package/es-modules/masters/indicators/cmo.src.js +1 -1
- package/es-modules/masters/indicators/dema.src.js +1 -1
- package/es-modules/masters/indicators/disparity-index.src.js +1 -1
- package/es-modules/masters/indicators/dmi.src.js +1 -1
- package/es-modules/masters/indicators/dpo.src.js +1 -1
- package/es-modules/masters/indicators/ema.src.js +4 -10
- package/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +1 -1
- package/es-modules/masters/indicators/indicators-all.src.js +2 -2
- package/es-modules/masters/indicators/indicators.src.js +2 -1
- package/es-modules/masters/indicators/keltner-channels.src.js +1 -1
- package/es-modules/masters/indicators/klinger.src.js +1 -1
- package/es-modules/masters/indicators/macd.src.js +1 -1
- package/es-modules/masters/indicators/mfi.src.js +1 -1
- package/es-modules/masters/indicators/momentum.src.js +1 -1
- package/es-modules/masters/indicators/natr.src.js +1 -1
- package/es-modules/masters/indicators/obv.src.js +1 -1
- package/es-modules/masters/indicators/pivot-points.src.js +1 -1
- package/es-modules/masters/indicators/ppo.src.js +1 -1
- package/es-modules/masters/indicators/price-channel.src.js +1 -1
- package/es-modules/masters/indicators/price-envelopes.src.js +1 -1
- package/es-modules/masters/indicators/psar.src.js +1 -1
- package/es-modules/masters/indicators/regressions.src.js +1 -1
- package/es-modules/masters/indicators/roc.src.js +1 -1
- package/es-modules/masters/indicators/rsi.src.js +1 -1
- package/es-modules/masters/indicators/slow-stochastic.src.js +1 -1
- package/es-modules/masters/indicators/stochastic.src.js +1 -1
- package/es-modules/masters/indicators/supertrend.src.js +1 -1
- package/es-modules/masters/indicators/tema.src.js +1 -1
- package/es-modules/masters/indicators/trendline.src.js +1 -1
- package/es-modules/masters/indicators/trix.src.js +1 -1
- package/es-modules/masters/indicators/volume-by-price.src.js +1 -1
- package/es-modules/masters/indicators/vwap.src.js +1 -1
- package/es-modules/masters/indicators/williams-r.src.js +1 -1
- package/es-modules/masters/indicators/wma.src.js +1 -1
- package/es-modules/masters/indicators/zigzag.src.js +1 -1
- package/es-modules/masters/modules/accessibility.src.js +16 -2
- package/es-modules/masters/modules/annotations-advanced.src.js +3 -1
- package/es-modules/masters/modules/annotations.src.js +1 -1
- package/es-modules/masters/modules/arrow-symbols.src.js +1 -1
- package/es-modules/masters/modules/boost-canvas.src.js +1 -1
- package/es-modules/masters/modules/boost.src.js +1 -1
- package/es-modules/masters/modules/broken-axis.src.js +1 -1
- package/es-modules/masters/modules/bullet.src.js +1 -1
- package/es-modules/masters/modules/coloraxis.src.js +1 -1
- package/es-modules/masters/modules/current-date-indicator.src.js +1 -1
- package/es-modules/masters/modules/cylinder.src.js +1 -1
- package/es-modules/masters/modules/data.src.js +6 -3
- package/es-modules/masters/modules/datagrouping.src.js +1 -1
- package/es-modules/masters/modules/debugger.src.js +1 -1
- package/es-modules/masters/modules/dependency-wheel.src.js +1 -1
- package/es-modules/masters/modules/dotplot.src.js +1 -1
- package/es-modules/masters/modules/drag-panes.src.js +1 -1
- package/es-modules/masters/modules/draggable-points.src.js +1 -1
- package/es-modules/masters/modules/drilldown.src.js +1 -1
- package/es-modules/masters/modules/dumbbell.src.js +1 -1
- package/es-modules/masters/modules/export-data.src.js +1 -1
- package/es-modules/masters/modules/exporting.src.js +1 -1
- package/es-modules/masters/modules/full-screen.src.js +1 -1
- package/es-modules/masters/modules/funnel.src.js +1 -1
- package/es-modules/masters/modules/funnel3d.src.js +1 -1
- package/es-modules/masters/modules/gantt.src.js +1 -1
- package/es-modules/masters/modules/grid-axis.src.js +1 -1
- package/es-modules/masters/modules/heatmap.src.js +1 -2
- package/es-modules/masters/modules/heikinashi.src.js +1 -1
- package/es-modules/masters/modules/histogram-bellcurve.src.js +1 -1
- package/es-modules/masters/modules/hollowcandlestick.src.js +1 -1
- package/es-modules/masters/modules/item-series.src.js +1 -1
- package/es-modules/masters/modules/lollipop.src.js +1 -1
- package/es-modules/masters/modules/map.src.js +1 -3
- package/es-modules/masters/modules/marker-clusters.src.js +1 -1
- package/es-modules/masters/modules/networkgraph.src.js +1 -1
- package/es-modules/masters/modules/no-data-to-display.src.js +1 -1
- package/es-modules/masters/modules/offline-exporting.src.js +1 -1
- package/es-modules/masters/modules/oldie-polyfills.src.js +1 -1
- package/es-modules/masters/modules/oldie.src.js +1 -1
- package/es-modules/masters/modules/organization.src.js +1 -1
- package/es-modules/masters/modules/overlapping-datalabels.src.js +1 -1
- package/es-modules/masters/modules/parallel-coordinates.src.js +1 -1
- package/es-modules/masters/modules/pareto.src.js +1 -1
- package/es-modules/masters/modules/pathfinder.src.js +1 -1
- package/es-modules/masters/modules/pattern-fill.src.js +1 -1
- package/es-modules/masters/modules/price-indicator.src.js +1 -1
- package/es-modules/masters/modules/pyramid3d.src.js +1 -1
- package/es-modules/masters/modules/sankey.src.js +1 -1
- package/es-modules/masters/modules/series-label.src.js +1 -1
- package/es-modules/masters/modules/solid-gauge.src.js +1 -1
- package/es-modules/masters/modules/sonification.src.js +33 -2
- package/es-modules/masters/modules/static-scale.src.js +1 -1
- package/es-modules/masters/modules/stock-tools.src.js +1 -1
- package/es-modules/masters/modules/stock.src.js +4 -1
- package/es-modules/masters/modules/streamgraph.src.js +1 -1
- package/es-modules/masters/modules/sunburst.src.js +1 -1
- package/es-modules/masters/modules/tilemap.src.js +1 -1
- package/es-modules/masters/modules/timeline.src.js +1 -1
- package/es-modules/masters/modules/treegrid.src.js +1 -1
- package/es-modules/masters/modules/treemap.src.js +1 -1
- package/es-modules/masters/modules/variable-pie.src.js +1 -1
- package/es-modules/masters/modules/variwide.src.js +1 -1
- package/es-modules/masters/modules/vector.src.js +1 -1
- package/es-modules/masters/modules/venn.src.js +1 -1
- package/es-modules/masters/modules/windbarb.src.js +1 -1
- package/es-modules/masters/modules/wordcloud.src.js +1 -1
- package/es-modules/masters/modules/xrange.src.js +1 -1
- package/es-modules/masters/themes/avocado.src.js +1 -1
- package/es-modules/masters/themes/dark-blue.src.js +1 -1
- package/es-modules/masters/themes/dark-green.src.js +1 -1
- package/es-modules/masters/themes/dark-unica.src.js +1 -1
- package/es-modules/masters/themes/gray.src.js +1 -1
- package/es-modules/masters/themes/grid-light.src.js +1 -1
- package/es-modules/masters/themes/grid.src.js +1 -1
- package/es-modules/masters/themes/high-contrast-dark.src.js +1 -1
- package/es-modules/masters/themes/high-contrast-light.src.js +1 -1
- package/es-modules/masters/themes/sand-signika.src.js +1 -1
- package/es-modules/masters/themes/skies.src.js +1 -1
- package/es-modules/masters/themes/sunset.src.js +1 -1
- package/highcharts-3d.js +1 -1
- package/highcharts-3d.src.js +1 -1
- package/highcharts-gantt.js +801 -804
- package/highcharts-gantt.js.map +1 -1
- package/highcharts-gantt.src.js +775 -739
- package/highcharts-more.js +194 -193
- package/highcharts-more.js.map +1 -1
- package/highcharts-more.src.js +207 -119
- package/highcharts.d.ts +9670 -4217
- package/highcharts.js +585 -588
- package/highcharts.js.map +1 -1
- package/highcharts.src.d.ts +9670 -4217
- package/highcharts.src.js +608 -587
- package/highmaps.js +726 -708
- package/highmaps.js.map +1 -1
- package/highmaps.src.js +2708 -1587
- package/highstock.js +788 -783
- package/highstock.js.map +1 -1
- package/highstock.src.js +1896 -1267
- package/indicators/acceleration-bands.js +10 -9
- package/indicators/acceleration-bands.js.map +1 -1
- package/indicators/acceleration-bands.src.js +156 -112
- package/indicators/accumulation-distribution.js +1 -1
- package/indicators/accumulation-distribution.src.js +1 -1
- package/indicators/ao.js +6 -6
- package/indicators/ao.js.map +1 -1
- package/indicators/ao.src.js +4 -4
- package/indicators/apo.js +5 -6
- package/indicators/apo.js.map +1 -1
- package/indicators/apo.src.js +16 -84
- package/indicators/aroon-oscillator.js +9 -9
- package/indicators/aroon-oscillator.js.map +1 -1
- package/indicators/aroon-oscillator.src.js +160 -177
- package/indicators/aroon.js +9 -9
- package/indicators/aroon.js.map +1 -1
- package/indicators/aroon.src.js +156 -112
- package/indicators/atr.js +1 -1
- package/indicators/atr.src.js +1 -1
- package/indicators/bollinger-bands.js +10 -9
- package/indicators/bollinger-bands.js.map +1 -1
- package/indicators/bollinger-bands.src.js +180 -117
- package/indicators/cci.js +1 -1
- package/indicators/cci.src.js +1 -1
- package/indicators/chaikin.js +8 -9
- package/indicators/chaikin.js.map +1 -1
- package/indicators/chaikin.src.js +8 -76
- package/indicators/cmf.js +1 -1
- package/indicators/cmf.src.js +1 -1
- package/indicators/cmo.js +1 -1
- package/indicators/cmo.src.js +1 -1
- package/indicators/dema.js +5 -6
- package/indicators/dema.js.map +1 -1
- package/indicators/dema.src.js +3 -75
- package/indicators/disparity-index.js +6 -7
- package/indicators/disparity-index.js.map +1 -1
- package/indicators/disparity-index.src.js +19 -74
- package/indicators/dmi.js +11 -11
- package/indicators/dmi.js.map +1 -1
- package/indicators/dmi.src.js +173 -116
- package/indicators/dpo.js +1 -1
- package/indicators/dpo.src.js +1 -1
- package/indicators/ema.js +1 -13
- package/indicators/ema.js.map +1 -1
- package/indicators/ema.src.js +7 -188
- package/indicators/ichimoku-kinko-hyo.js +1 -1
- package/indicators/ichimoku-kinko-hyo.src.js +1 -1
- package/indicators/indicators-all.js +197 -203
- package/indicators/indicators-all.js.map +1 -1
- package/indicators/indicators-all.src.js +649 -720
- package/indicators/indicators.js +12 -12
- package/indicators/indicators.js.map +1 -1
- package/indicators/indicators.src.js +188 -124
- package/indicators/keltner-channels.js +10 -10
- package/indicators/keltner-channels.js.map +1 -1
- package/indicators/keltner-channels.src.js +164 -118
- package/indicators/klinger.js +12 -13
- package/indicators/klinger.js.map +1 -1
- package/indicators/klinger.src.js +161 -184
- package/indicators/macd.js +2 -2
- package/indicators/macd.js.map +1 -1
- package/indicators/macd.src.js +2 -3
- package/indicators/mfi.js +1 -1
- package/indicators/mfi.src.js +1 -1
- package/indicators/momentum.js +1 -1
- package/indicators/momentum.src.js +1 -1
- package/indicators/natr.js +3 -3
- package/indicators/natr.js.map +1 -1
- package/indicators/natr.src.js +2 -4
- package/indicators/obv.js +1 -1
- package/indicators/obv.src.js +1 -1
- package/indicators/pivot-points.js +1 -1
- package/indicators/pivot-points.src.js +1 -1
- package/indicators/ppo.js +5 -6
- package/indicators/ppo.js.map +1 -1
- package/indicators/ppo.src.js +3 -75
- package/indicators/price-channel.js +9 -9
- package/indicators/price-channel.js.map +1 -1
- package/indicators/price-channel.src.js +207 -168
- package/indicators/price-envelopes.js +1 -1
- package/indicators/price-envelopes.src.js +1 -1
- package/indicators/psar.js +1 -1
- package/indicators/psar.src.js +1 -1
- package/indicators/regressions.js +1 -1
- package/indicators/regressions.src.js +9 -9
- package/indicators/roc.js +1 -1
- package/indicators/roc.src.js +1 -1
- package/indicators/rsi.js +1 -1
- package/indicators/rsi.src.js +1 -1
- package/indicators/slow-stochastic.js +5 -6
- package/indicators/slow-stochastic.js.map +1 -1
- package/indicators/slow-stochastic.src.js +2 -72
- package/indicators/stochastic.js +10 -10
- package/indicators/stochastic.js.map +1 -1
- package/indicators/stochastic.src.js +209 -164
- package/indicators/supertrend.js +10 -10
- package/indicators/supertrend.js.map +1 -1
- package/indicators/supertrend.src.js +6 -7
- package/indicators/tema.js +6 -7
- package/indicators/tema.js.map +1 -1
- package/indicators/tema.src.js +28 -75
- package/indicators/trendline.js +1 -1
- package/indicators/trendline.src.js +1 -1
- package/indicators/trix.js +4 -5
- package/indicators/trix.js.map +1 -1
- package/indicators/trix.src.js +8 -76
- package/indicators/volume-by-price.js +16 -16
- package/indicators/volume-by-price.js.map +1 -1
- package/indicators/volume-by-price.src.js +21 -3
- package/indicators/vwap.js +1 -1
- package/indicators/vwap.src.js +1 -1
- package/indicators/williams-r.js +5 -6
- package/indicators/williams-r.js.map +1 -1
- package/indicators/williams-r.src.js +41 -51
- package/indicators/wma.js +1 -1
- package/indicators/wma.src.js +1 -1
- package/indicators/zigzag.js +1 -1
- package/indicators/zigzag.src.js +1 -1
- package/modules/accessibility.d.ts +5 -0
- package/modules/accessibility.js +234 -216
- package/modules/accessibility.js.map +1 -1
- package/modules/accessibility.src.d.ts +5 -0
- package/modules/accessibility.src.js +9709 -8608
- package/modules/annotations-advanced.d.ts +30 -0
- package/modules/annotations-advanced.js +191 -165
- package/modules/annotations-advanced.js.map +1 -1
- package/modules/annotations-advanced.src.d.ts +30 -0
- package/modules/annotations-advanced.src.js +1578 -320
- package/modules/annotations.js +121 -107
- package/modules/annotations.js.map +1 -1
- package/modules/annotations.src.js +958 -229
- package/modules/arrow-symbols.js +1 -1
- package/modules/arrow-symbols.src.js +1 -1
- package/modules/boost-canvas.js +15 -15
- package/modules/boost-canvas.js.map +1 -1
- package/modules/boost-canvas.src.js +3 -3
- package/modules/boost.js +79 -79
- package/modules/boost.js.map +1 -1
- package/modules/boost.src.js +10 -9
- package/modules/broken-axis.js +1 -1
- package/modules/broken-axis.src.js +1 -1
- package/modules/bullet.js +1 -1
- package/modules/bullet.src.js +1 -1
- package/modules/coloraxis.js +24 -24
- package/modules/coloraxis.js.map +1 -1
- package/modules/coloraxis.src.js +69 -98
- package/modules/current-date-indicator.js +4 -4
- package/modules/current-date-indicator.js.map +1 -1
- package/modules/current-date-indicator.src.js +4 -4
- package/modules/cylinder.js +1 -1
- package/modules/cylinder.src.js +1 -1
- package/modules/data.js +19 -19
- package/modules/data.js.map +1 -1
- package/modules/data.src.js +9 -6
- package/modules/datagrouping.js +20 -20
- package/modules/datagrouping.js.map +1 -1
- package/modules/datagrouping.src.js +33 -19
- package/modules/debugger.js +1 -1
- package/modules/debugger.src.js +1 -1
- package/modules/dependency-wheel.js +11 -11
- package/modules/dependency-wheel.js.map +1 -1
- package/modules/dependency-wheel.src.js +4 -7
- package/modules/dotplot.js +1 -1
- package/modules/dotplot.src.js +1 -1
- package/modules/drag-panes.js +8 -8
- package/modules/drag-panes.js.map +1 -1
- package/modules/drag-panes.src.js +3 -3
- package/modules/draggable-points.js +1 -1
- package/modules/draggable-points.src.js +1 -1
- package/modules/drilldown.js +24 -24
- package/modules/drilldown.js.map +1 -1
- package/modules/drilldown.src.js +4 -4
- package/modules/dumbbell.js +17 -17
- package/modules/dumbbell.js.map +1 -1
- package/modules/dumbbell.src.js +4 -4
- package/modules/export-data.js +1 -1
- package/modules/export-data.js.map +1 -1
- package/modules/export-data.src.js +3 -3
- package/modules/exporting.js +39 -38
- package/modules/exporting.js.map +1 -1
- package/modules/exporting.src.js +98 -67
- package/modules/full-screen.js +1 -1
- package/modules/full-screen.src.js +1 -1
- package/modules/funnel.js +12 -12
- package/modules/funnel.js.map +1 -1
- package/modules/funnel.src.js +9 -6
- package/modules/funnel3d.js +1 -1
- package/modules/funnel3d.src.js +1 -1
- package/modules/gantt.js +217 -218
- package/modules/gantt.js.map +1 -1
- package/modules/gantt.src.js +167 -152
- package/modules/grid-axis.js +1 -1
- package/modules/grid-axis.src.js +1 -1
- package/modules/heatmap.js +39 -39
- package/modules/heatmap.js.map +1 -1
- package/modules/heatmap.src.js +177 -162
- package/modules/heikinashi.js +1 -1
- package/modules/heikinashi.src.js +4 -4
- package/modules/histogram-bellcurve.js +13 -13
- package/modules/histogram-bellcurve.js.map +1 -1
- package/modules/histogram-bellcurve.src.js +91 -86
- package/modules/hollowcandlestick.js +9 -9
- package/modules/hollowcandlestick.js.map +1 -1
- package/modules/hollowcandlestick.src.js +11 -11
- package/modules/item-series.js +1 -1
- package/modules/item-series.src.js +1 -1
- package/modules/lollipop.js +1 -1
- package/modules/lollipop.src.js +1 -1
- package/modules/map.d.ts +136 -14
- package/modules/map.js +142 -122
- package/modules/map.js.map +1 -1
- package/modules/map.src.d.ts +136 -14
- package/modules/map.src.js +2129 -1029
- package/modules/marker-clusters.js +36 -36
- package/modules/marker-clusters.js.map +1 -1
- package/modules/marker-clusters.src.js +173 -142
- package/modules/networkgraph.d.ts +12 -1
- package/modules/networkgraph.js +49 -49
- package/modules/networkgraph.js.map +1 -1
- package/modules/networkgraph.src.d.ts +12 -1
- package/modules/networkgraph.src.js +91 -43
- package/modules/no-data-to-display.js +5 -5
- package/modules/no-data-to-display.js.map +1 -1
- package/modules/no-data-to-display.src.js +3 -3
- package/modules/offline-exporting.js +17 -17
- package/modules/offline-exporting.js.map +1 -1
- package/modules/offline-exporting.src.js +13 -13
- package/modules/oldie-polyfills.js +1 -1
- package/modules/oldie-polyfills.src.js +1 -1
- package/modules/oldie.js +26 -26
- package/modules/oldie.js.map +1 -1
- package/modules/oldie.src.js +4 -4
- package/modules/organization.js +13 -13
- package/modules/organization.js.map +1 -1
- package/modules/organization.src.js +4 -4
- package/modules/overlapping-datalabels.js +1 -1
- package/modules/overlapping-datalabels.src.js +1 -1
- package/modules/parallel-coordinates.js +1 -1
- package/modules/parallel-coordinates.src.js +1 -1
- package/modules/pareto.js +7 -7
- package/modules/pareto.js.map +1 -1
- package/modules/pareto.src.js +89 -78
- package/modules/pathfinder.js +1 -1
- package/modules/pathfinder.src.js +1 -1
- package/modules/pattern-fill.js +1 -1
- package/modules/pattern-fill.src.js +1 -1
- package/modules/price-indicator.js +1 -1
- package/modules/price-indicator.src.js +1 -1
- package/modules/pyramid3d.js +1 -1
- package/modules/pyramid3d.src.js +1 -1
- package/modules/sankey.d.ts +12 -1
- package/modules/sankey.js +29 -29
- package/modules/sankey.js.map +1 -1
- package/modules/sankey.src.d.ts +12 -1
- package/modules/sankey.src.js +300 -176
- package/modules/series-label.js +1 -1
- package/modules/series-label.src.js +1 -1
- package/modules/solid-gauge.js +1 -1
- package/modules/solid-gauge.src.js +1 -1
- package/modules/sonification.js +59 -55
- package/modules/sonification.js.map +1 -1
- package/modules/sonification.src.js +3034 -2553
- package/modules/static-scale.js +1 -1
- package/modules/static-scale.src.js +1 -1
- package/modules/stock-tools.js +177 -164
- package/modules/stock-tools.js.map +1 -1
- package/modules/stock-tools.src.js +1001 -131
- package/modules/stock.d.ts +39 -6
- package/modules/stock.js +204 -196
- package/modules/stock.js.map +1 -1
- package/modules/stock.src.d.ts +39 -6
- package/modules/stock.src.js +1689 -1081
- package/modules/streamgraph.js +1 -1
- package/modules/streamgraph.src.js +1 -1
- package/modules/sunburst.js +61 -60
- package/modules/sunburst.js.map +1 -1
- package/modules/sunburst.src.js +329 -266
- package/modules/tilemap.js +17 -17
- package/modules/tilemap.js.map +1 -1
- package/modules/tilemap.src.js +3 -4
- package/modules/timeline.js +18 -18
- package/modules/timeline.js.map +1 -1
- package/modules/timeline.src.js +5 -5
- package/modules/treegrid.js +56 -57
- package/modules/treegrid.js.map +1 -1
- package/modules/treegrid.src.js +126 -120
- package/modules/treemap.js +41 -41
- package/modules/treemap.js.map +1 -1
- package/modules/treemap.src.js +319 -254
- package/modules/variable-pie.js +1 -1
- package/modules/variable-pie.src.js +1 -1
- package/modules/variwide.js +1 -1
- package/modules/variwide.src.js +1 -1
- package/modules/vector.js +1 -1
- package/modules/vector.src.js +1 -1
- package/modules/venn.js +31 -31
- package/modules/venn.js.map +1 -1
- package/modules/venn.src.js +731 -721
- package/modules/windbarb.js +15 -15
- package/modules/windbarb.js.map +1 -1
- package/modules/windbarb.src.js +90 -62
- package/modules/wordcloud.js +23 -24
- package/modules/wordcloud.js.map +1 -1
- package/modules/wordcloud.src.js +897 -949
- package/modules/xrange.js +2 -2
- package/modules/xrange.js.map +1 -1
- package/modules/xrange.src.js +2 -1
- package/package.json +1 -1
- package/themes/avocado.js +1 -1
- package/themes/avocado.src.js +1 -1
- package/themes/dark-blue.js +1 -1
- package/themes/dark-blue.src.js +1 -1
- package/themes/dark-green.js +1 -1
- package/themes/dark-green.src.js +1 -1
- package/themes/dark-unica.js +1 -1
- package/themes/dark-unica.src.js +1 -1
- package/themes/gray.js +1 -1
- package/themes/gray.src.js +1 -1
- package/themes/grid-light.js +1 -1
- package/themes/grid-light.src.js +1 -1
- package/themes/grid.js +1 -1
- package/themes/grid.src.js +1 -1
- package/themes/high-contrast-dark.js +1 -1
- package/themes/high-contrast-dark.src.js +1 -1
- package/themes/high-contrast-light.js +1 -1
- package/themes/high-contrast-light.src.js +1 -1
- package/themes/sand-signika.js +1 -1
- package/themes/sand-signika.src.js +1 -1
- package/themes/skies.js +1 -1
- package/themes/skies.src.js +1 -1
- package/themes/sunset.js +1 -1
- package/themes/sunset.src.js +1 -1
- package/es-modules/Core/Axis/MapAxis.js +0 -157
- package/es-modules/Core/Color/Palette.js +0 -82
- package/es-modules/Extensions/Sonification/InstrumentDefinitions.js +0 -32
- package/es-modules/Mixins/ColorMapSeries.js +0 -82
- package/es-modules/Mixins/ColorSeries.js +0 -77
- package/es-modules/Mixins/DerivedSeries.js +0 -118
- package/es-modules/Mixins/DrawPoint.js +0 -81
- package/es-modules/Mixins/IndicatorRequired.js +0 -56
- package/es-modules/Mixins/Navigation.js +0 -54
- package/es-modules/Mixins/NelderMead.js +0 -132
- package/es-modules/Mixins/Polygon.js +0 -259
- package/es-modules/Mixins/ReduceArray.js +0 -54
|
@@ -9,525 +9,714 @@
|
|
|
9
9
|
*
|
|
10
10
|
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
11
11
|
* */
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
'use strict';
|
|
13
|
+
import H from '../../Core/Globals.js';
|
|
14
|
+
var deg2rad = H.deg2rad;
|
|
14
15
|
import U from '../../Core/Utilities.js';
|
|
15
16
|
var extend = U.extend, find = U.find, isNumber = U.isNumber, isObject = U.isObject, merge = U.merge;
|
|
16
17
|
/* *
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
18
|
+
*
|
|
19
|
+
* Functions
|
|
20
|
+
*
|
|
21
|
+
* */
|
|
22
|
+
/* eslint-disable valid-jsdoc */
|
|
23
|
+
/**
|
|
24
|
+
* Detects if there is a collision between two rectangles.
|
|
25
|
+
*
|
|
26
|
+
* @private
|
|
27
|
+
* @function isRectanglesIntersecting
|
|
28
|
+
*
|
|
29
|
+
* @param {Highcharts.PolygonBoxObject} r1
|
|
30
|
+
* First rectangle.
|
|
31
|
+
*
|
|
32
|
+
* @param {Highcharts.PolygonBoxObject} r2
|
|
33
|
+
* Second rectangle.
|
|
34
|
+
*
|
|
35
|
+
* @return {boolean}
|
|
36
|
+
* Returns true if the rectangles overlap.
|
|
37
|
+
*/
|
|
38
|
+
function isRectanglesIntersecting(r1, r2) {
|
|
39
|
+
return !(r2.left > r1.right ||
|
|
40
|
+
r2.right < r1.left ||
|
|
41
|
+
r2.top > r1.bottom ||
|
|
42
|
+
r2.bottom < r1.top);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Calculates the normals to a line between two points.
|
|
46
|
+
*
|
|
47
|
+
* @private
|
|
48
|
+
* @function getNormals
|
|
49
|
+
* @param {Highcharts.PolygonPointObject} p1
|
|
50
|
+
* Start point for the line. Array of x and y value.
|
|
51
|
+
* @param {Highcharts.PolygonPointObject} p2
|
|
52
|
+
* End point for the line. Array of x and y value.
|
|
53
|
+
* @return {Highcharts.PolygonObject}
|
|
54
|
+
* Returns the two normals in an array.
|
|
55
|
+
*/
|
|
56
|
+
function getNormals(p1, p2) {
|
|
57
|
+
var dx = p2[0] - p1[0], // x2 - x1
|
|
58
|
+
dy = p2[1] - p1[1]; // y2 - y1
|
|
59
|
+
return [
|
|
60
|
+
[-dy, dx],
|
|
61
|
+
[dy, -dx]
|
|
62
|
+
];
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* @private
|
|
66
|
+
*/
|
|
67
|
+
function getAxesFromPolygon(polygon) {
|
|
68
|
+
var points, axes = polygon.axes || [];
|
|
69
|
+
if (!axes.length) {
|
|
70
|
+
axes = [];
|
|
71
|
+
points = points = polygon.concat([polygon[0]]);
|
|
72
|
+
points.reduce(function findAxis(p1, p2) {
|
|
73
|
+
var normals = getNormals(p1, p2), axis = normals[0]; // Use the left normal as axis.
|
|
74
|
+
// Check that the axis is unique.
|
|
75
|
+
if (!find(axes, function (existing) {
|
|
76
|
+
return existing[0] === axis[0] &&
|
|
77
|
+
existing[1] === axis[1];
|
|
78
|
+
})) {
|
|
79
|
+
axes.push(axis);
|
|
80
|
+
}
|
|
81
|
+
// Return p2 to be used as p1 in next iteration.
|
|
82
|
+
return p2;
|
|
83
|
+
});
|
|
84
|
+
polygon.axes = axes;
|
|
48
85
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
86
|
+
return axes;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Projects a polygon onto a coordinate.
|
|
90
|
+
*
|
|
91
|
+
* @private
|
|
92
|
+
* @function project
|
|
93
|
+
* @param {Highcharts.PolygonObject} polygon
|
|
94
|
+
* Array of points in a polygon.
|
|
95
|
+
* @param {Highcharts.PolygonPointObject} target
|
|
96
|
+
* The coordinate of pr
|
|
97
|
+
* @return {Highcharts.RangeObject}
|
|
98
|
+
*/
|
|
99
|
+
function project(polygon, target) {
|
|
100
|
+
var products = polygon.map(function (point) {
|
|
101
|
+
var ax = point[0], ay = point[1], bx = target[0], by = target[1];
|
|
102
|
+
return ax * bx + ay * by;
|
|
103
|
+
});
|
|
104
|
+
return {
|
|
105
|
+
min: Math.min.apply(this, products),
|
|
106
|
+
max: Math.max.apply(this, products)
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* @private
|
|
111
|
+
*/
|
|
112
|
+
function isPolygonsOverlappingOnAxis(axis, polygon1, polygon2) {
|
|
113
|
+
var projection1 = project(polygon1, axis), projection2 = project(polygon2, axis), isOverlapping = !(projection2.min > projection1.max ||
|
|
114
|
+
projection2.max < projection1.min);
|
|
115
|
+
return !isOverlapping;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Checks wether two convex polygons are colliding by using the Separating
|
|
119
|
+
* Axis Theorem.
|
|
120
|
+
*
|
|
121
|
+
* @private
|
|
122
|
+
* @function isPolygonsColliding
|
|
123
|
+
* @param {Highcharts.PolygonObject} polygon1
|
|
124
|
+
* First polygon.
|
|
125
|
+
*
|
|
126
|
+
* @param {Highcharts.PolygonObject} polygon2
|
|
127
|
+
* Second polygon.
|
|
128
|
+
*
|
|
129
|
+
* @return {boolean}
|
|
130
|
+
* Returns true if they are colliding, otherwise false.
|
|
131
|
+
*/
|
|
132
|
+
function isPolygonsColliding(polygon1, polygon2) {
|
|
133
|
+
// Get the axis from both polygons.
|
|
134
|
+
var axes1 = getAxesFromPolygon(polygon1), axes2 = getAxesFromPolygon(polygon2), axes = axes1.concat(axes2), overlappingOnAllAxes = !find(axes, function (axis) { return isPolygonsOverlappingOnAxis(axis, polygon1, polygon2); });
|
|
135
|
+
return overlappingOnAllAxes;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Detects if a word collides with any previously placed words.
|
|
139
|
+
*
|
|
140
|
+
* @private
|
|
141
|
+
* @function intersectsAnyWord
|
|
142
|
+
*
|
|
143
|
+
* @param {Highcharts.Point} point
|
|
144
|
+
* Point which the word is connected to.
|
|
145
|
+
*
|
|
146
|
+
* @param {Array<Highcharts.Point>} points
|
|
147
|
+
* Previously placed points to check against.
|
|
148
|
+
*
|
|
149
|
+
* @return {boolean}
|
|
150
|
+
* Returns true if there is collision.
|
|
151
|
+
*/
|
|
152
|
+
function intersectsAnyWord(point, points) {
|
|
153
|
+
var intersects = false, rect = point.rect, polygon = point.polygon, lastCollidedWith = point.lastCollidedWith, isIntersecting = function (p) {
|
|
154
|
+
var result = isRectanglesIntersecting(rect, p.rect);
|
|
155
|
+
if (result &&
|
|
156
|
+
(point.rotation % 90 || p.rotation % 90)) {
|
|
157
|
+
result = isPolygonsColliding(polygon, p.polygon);
|
|
158
|
+
}
|
|
159
|
+
return result;
|
|
160
|
+
};
|
|
161
|
+
// If the point has already intersected a different point, chances are
|
|
162
|
+
// they are still intersecting. So as an enhancement we check this
|
|
163
|
+
// first.
|
|
164
|
+
if (lastCollidedWith) {
|
|
165
|
+
intersects = isIntersecting(lastCollidedWith);
|
|
166
|
+
// If they no longer intersects, remove the cache from the point.
|
|
167
|
+
if (!intersects) {
|
|
168
|
+
delete point.lastCollidedWith;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// If not already found, then check if we can find a point that is
|
|
172
|
+
// intersecting.
|
|
173
|
+
if (!intersects) {
|
|
174
|
+
intersects = !!find(points, function (p) {
|
|
175
|
+
var result = isIntersecting(p);
|
|
176
|
+
if (result) {
|
|
177
|
+
point.lastCollidedWith = p;
|
|
71
178
|
}
|
|
72
179
|
return result;
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
return intersects;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Gives a set of cordinates for an Archimedian Spiral.
|
|
186
|
+
*
|
|
187
|
+
* @private
|
|
188
|
+
* @function archimedeanSpiral
|
|
189
|
+
*
|
|
190
|
+
* @param {number} attempt
|
|
191
|
+
* How far along the spiral we have traversed.
|
|
192
|
+
*
|
|
193
|
+
* @param {Highcharts.WordcloudSpiralParamsObject} [params]
|
|
194
|
+
* Additional parameters.
|
|
195
|
+
*
|
|
196
|
+
* @return {boolean|Highcharts.PositionObject}
|
|
197
|
+
* Resulting coordinates, x and y. False if the word should be dropped from
|
|
198
|
+
* the visualization.
|
|
199
|
+
*/
|
|
200
|
+
function archimedeanSpiral(attempt, params) {
|
|
201
|
+
var field = params.field, result = false, maxDelta = (field.width * field.width) + (field.height * field.height), t = attempt * 0.8; // 0.2 * 4 = 0.8. Enlarging the spiral.
|
|
202
|
+
// Emergency brake. TODO make spiralling logic more foolproof.
|
|
203
|
+
if (attempt <= 10000) {
|
|
204
|
+
result = {
|
|
205
|
+
x: t * Math.cos(t),
|
|
206
|
+
y: t * Math.sin(t)
|
|
73
207
|
};
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
// first.
|
|
77
|
-
if (lastCollidedWith) {
|
|
78
|
-
intersects = isIntersecting(lastCollidedWith);
|
|
79
|
-
// If they no longer intersects, remove the cache from the point.
|
|
80
|
-
if (!intersects) {
|
|
81
|
-
delete point.lastCollidedWith;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
// If not already found, then check if we can find a point that is
|
|
85
|
-
// intersecting.
|
|
86
|
-
if (!intersects) {
|
|
87
|
-
intersects = !!find(points, function (p) {
|
|
88
|
-
var result = isIntersecting(p);
|
|
89
|
-
if (result) {
|
|
90
|
-
point.lastCollidedWith = p;
|
|
91
|
-
}
|
|
92
|
-
return result;
|
|
93
|
-
});
|
|
208
|
+
if (!(Math.min(Math.abs(result.x), Math.abs(result.y)) < maxDelta)) {
|
|
209
|
+
result = false;
|
|
94
210
|
}
|
|
95
|
-
return intersects;
|
|
96
211
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
212
|
+
return result;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Gives a set of cordinates for an rectangular spiral.
|
|
216
|
+
*
|
|
217
|
+
* @private
|
|
218
|
+
* @function squareSpiral
|
|
219
|
+
*
|
|
220
|
+
* @param {number} attempt
|
|
221
|
+
* How far along the spiral we have traversed.
|
|
222
|
+
*
|
|
223
|
+
* @param {Highcharts.WordcloudSpiralParamsObject} [params]
|
|
224
|
+
* Additional parameters.
|
|
225
|
+
*
|
|
226
|
+
* @return {boolean|Highcharts.PositionObject}
|
|
227
|
+
* Resulting coordinates, x and y. False if the word should be dropped from
|
|
228
|
+
* the visualization.
|
|
229
|
+
*/
|
|
230
|
+
function squareSpiral(attempt, params) {
|
|
231
|
+
var a = attempt * 4, k = Math.ceil((Math.sqrt(a) - 1) / 2), t = 2 * k + 1, m = Math.pow(t, 2), isBoolean = function (x) {
|
|
232
|
+
return typeof x === 'boolean';
|
|
233
|
+
}, result = false;
|
|
234
|
+
t -= 1;
|
|
235
|
+
if (attempt <= 10000) {
|
|
236
|
+
if (isBoolean(result) && a >= m - t) {
|
|
118
237
|
result = {
|
|
119
|
-
x:
|
|
120
|
-
y:
|
|
238
|
+
x: k - (m - a),
|
|
239
|
+
y: -k
|
|
121
240
|
};
|
|
122
|
-
if (!(Math.min(Math.abs(result.x), Math.abs(result.y)) < maxDelta)) {
|
|
123
|
-
result = false;
|
|
124
|
-
}
|
|
125
241
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
* How far along the spiral we have traversed.
|
|
137
|
-
*
|
|
138
|
-
* @param {Highcharts.WordcloudSpiralParamsObject} [params]
|
|
139
|
-
* Additional parameters.
|
|
140
|
-
*
|
|
141
|
-
* @return {boolean|Highcharts.PositionObject}
|
|
142
|
-
* Resulting coordinates, x and y. False if the word should be dropped from
|
|
143
|
-
* the visualization.
|
|
144
|
-
*/
|
|
145
|
-
function squareSpiral(attempt, params) {
|
|
146
|
-
var a = attempt * 4, k = Math.ceil((Math.sqrt(a) - 1) / 2), t = 2 * k + 1, m = Math.pow(t, 2), isBoolean = function (x) {
|
|
147
|
-
return typeof x === 'boolean';
|
|
148
|
-
}, result = false;
|
|
149
|
-
t -= 1;
|
|
150
|
-
if (attempt <= 10000) {
|
|
151
|
-
if (isBoolean(result) && a >= m - t) {
|
|
242
|
+
m -= t;
|
|
243
|
+
if (isBoolean(result) && a >= m - t) {
|
|
244
|
+
result = {
|
|
245
|
+
x: -k,
|
|
246
|
+
y: -k + (m - a)
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
m -= t;
|
|
250
|
+
if (isBoolean(result)) {
|
|
251
|
+
if (a >= m - t) {
|
|
152
252
|
result = {
|
|
153
|
-
x: k
|
|
154
|
-
y:
|
|
253
|
+
x: -k + (m - a),
|
|
254
|
+
y: k
|
|
155
255
|
};
|
|
156
256
|
}
|
|
157
|
-
|
|
158
|
-
if (isBoolean(result) && a >= m - t) {
|
|
257
|
+
else {
|
|
159
258
|
result = {
|
|
160
|
-
x:
|
|
161
|
-
y:
|
|
259
|
+
x: k,
|
|
260
|
+
y: k - (m - a - t)
|
|
162
261
|
};
|
|
163
262
|
}
|
|
164
|
-
m -= t;
|
|
165
|
-
if (isBoolean(result)) {
|
|
166
|
-
if (a >= m - t) {
|
|
167
|
-
result = {
|
|
168
|
-
x: -k + (m - a),
|
|
169
|
-
y: k
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
result = {
|
|
174
|
-
x: k,
|
|
175
|
-
y: k - (m - a - t)
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
result.x *= 5;
|
|
180
|
-
result.y *= 5;
|
|
181
263
|
}
|
|
182
|
-
|
|
264
|
+
result.x *= 5;
|
|
265
|
+
result.y *= 5;
|
|
183
266
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
return result;
|
|
208
|
-
}
|
|
209
|
-
WordcloudUtils.rectangularSpiral = rectangularSpiral;
|
|
210
|
-
/**
|
|
211
|
-
* @private
|
|
212
|
-
* @function getRandomPosition
|
|
213
|
-
*
|
|
214
|
-
* @param {number} size
|
|
215
|
-
* Random factor.
|
|
216
|
-
*
|
|
217
|
-
* @return {number}
|
|
218
|
-
* Random position.
|
|
219
|
-
*/
|
|
220
|
-
function getRandomPosition(size) {
|
|
221
|
-
return Math.round((size * (Math.random() + 0.5)) / 2);
|
|
267
|
+
return result;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Gives a set of cordinates for an rectangular spiral.
|
|
271
|
+
*
|
|
272
|
+
* @private
|
|
273
|
+
* @function rectangularSpiral
|
|
274
|
+
*
|
|
275
|
+
* @param {number} attempt
|
|
276
|
+
* How far along the spiral we have traversed.
|
|
277
|
+
*
|
|
278
|
+
* @param {Highcharts.WordcloudSpiralParamsObject} [params]
|
|
279
|
+
* Additional parameters.
|
|
280
|
+
*
|
|
281
|
+
* @return {boolean|Higcharts.PositionObject}
|
|
282
|
+
* Resulting coordinates, x and y. False if the word should be dropped from
|
|
283
|
+
* the visualization.
|
|
284
|
+
*/
|
|
285
|
+
function rectangularSpiral(attempt, params) {
|
|
286
|
+
var result = squareSpiral(attempt, params), field = params.field;
|
|
287
|
+
if (result) {
|
|
288
|
+
result.x *= field.ratioX;
|
|
289
|
+
result.y *= field.ratioY;
|
|
222
290
|
}
|
|
223
|
-
|
|
291
|
+
return result;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* @private
|
|
295
|
+
* @function getRandomPosition
|
|
296
|
+
*
|
|
297
|
+
* @param {number} size
|
|
298
|
+
* Random factor.
|
|
299
|
+
*
|
|
300
|
+
* @return {number}
|
|
301
|
+
* Random position.
|
|
302
|
+
*/
|
|
303
|
+
function getRandomPosition(size) {
|
|
304
|
+
return Math.round((size * (Math.random() + 0.5)) / 2);
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Calculates the proper scale to fit the cloud inside the plotting area.
|
|
308
|
+
*
|
|
309
|
+
* @private
|
|
310
|
+
* @function getScale
|
|
311
|
+
*
|
|
312
|
+
* @param {number} targetWidth
|
|
313
|
+
* Width of target area.
|
|
314
|
+
*
|
|
315
|
+
* @param {number} targetHeight
|
|
316
|
+
* Height of target area.
|
|
317
|
+
*
|
|
318
|
+
* @param {object} field
|
|
319
|
+
* The playing field.
|
|
320
|
+
*
|
|
321
|
+
* @param {Highcharts.Series} series
|
|
322
|
+
* Series object.
|
|
323
|
+
*
|
|
324
|
+
* @return {number}
|
|
325
|
+
* Returns the value to scale the playing field up to the size of the target
|
|
326
|
+
* area.
|
|
327
|
+
*/
|
|
328
|
+
function getScale(targetWidth, targetHeight, field) {
|
|
329
|
+
var height = Math.max(Math.abs(field.top), Math.abs(field.bottom)) * 2, width = Math.max(Math.abs(field.left), Math.abs(field.right)) * 2, scaleX = width > 0 ? 1 / width * targetWidth : 1, scaleY = height > 0 ? 1 / height * targetHeight : 1;
|
|
330
|
+
return Math.min(scaleX, scaleY);
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Calculates what is called the playing field. The field is the area which
|
|
334
|
+
* all the words are allowed to be positioned within. The area is
|
|
335
|
+
* proportioned to match the target aspect ratio.
|
|
336
|
+
*
|
|
337
|
+
* @private
|
|
338
|
+
* @function getPlayingField
|
|
339
|
+
*
|
|
340
|
+
* @param {number} targetWidth
|
|
341
|
+
* Width of the target area.
|
|
342
|
+
*
|
|
343
|
+
* @param {number} targetHeight
|
|
344
|
+
* Height of the target area.
|
|
345
|
+
*
|
|
346
|
+
* @param {Array<Highcharts.Point>} data
|
|
347
|
+
* Array of points.
|
|
348
|
+
*
|
|
349
|
+
* @param {object} data.dimensions
|
|
350
|
+
* The height and width of the word.
|
|
351
|
+
*
|
|
352
|
+
* @return {object}
|
|
353
|
+
* The width and height of the playing field.
|
|
354
|
+
*/
|
|
355
|
+
function getPlayingField(targetWidth, targetHeight, data) {
|
|
356
|
+
var info = data.reduce(function (obj, point) {
|
|
357
|
+
var dimensions = point.dimensions, x = Math.max(dimensions.width, dimensions.height);
|
|
358
|
+
// Find largest height.
|
|
359
|
+
obj.maxHeight = Math.max(obj.maxHeight, dimensions.height);
|
|
360
|
+
// Find largest width.
|
|
361
|
+
obj.maxWidth = Math.max(obj.maxWidth, dimensions.width);
|
|
362
|
+
// Sum up the total maximum area of all the words.
|
|
363
|
+
obj.area += x * x;
|
|
364
|
+
return obj;
|
|
365
|
+
}, {
|
|
366
|
+
maxHeight: 0,
|
|
367
|
+
maxWidth: 0,
|
|
368
|
+
area: 0
|
|
369
|
+
}),
|
|
224
370
|
/**
|
|
225
|
-
*
|
|
226
|
-
*
|
|
227
|
-
* @private
|
|
228
|
-
* @function getScale
|
|
229
|
-
*
|
|
230
|
-
* @param {number} targetWidth
|
|
231
|
-
* Width of target area.
|
|
232
|
-
*
|
|
233
|
-
* @param {number} targetHeight
|
|
234
|
-
* Height of target area.
|
|
235
|
-
*
|
|
236
|
-
* @param {object} field
|
|
237
|
-
* The playing field.
|
|
238
|
-
*
|
|
239
|
-
* @param {Highcharts.Series} series
|
|
240
|
-
* Series object.
|
|
241
|
-
*
|
|
242
|
-
* @return {number}
|
|
243
|
-
* Returns the value to scale the playing field up to the size of the target
|
|
244
|
-
* area.
|
|
371
|
+
* Use largest width, largest height, or root of total area to give
|
|
372
|
+
* size to the playing field.
|
|
245
373
|
*/
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
374
|
+
x = Math.max(info.maxHeight, // Have enough space for the tallest word
|
|
375
|
+
info.maxWidth, // Have enough space for the broadest word
|
|
376
|
+
// Adjust 15% to account for close packing of words
|
|
377
|
+
Math.sqrt(info.area) * 0.85), ratioX = targetWidth > targetHeight ? targetWidth / targetHeight : 1, ratioY = targetHeight > targetWidth ? targetHeight / targetWidth : 1;
|
|
378
|
+
return {
|
|
379
|
+
width: x * ratioX,
|
|
380
|
+
height: x * ratioY,
|
|
381
|
+
ratioX: ratioX,
|
|
382
|
+
ratioY: ratioY
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Calculates a number of degrees to rotate, based upon a number of
|
|
387
|
+
* orientations within a range from-to.
|
|
388
|
+
*
|
|
389
|
+
* @private
|
|
390
|
+
* @function getRotation
|
|
391
|
+
*
|
|
392
|
+
* @param {number} [orientations]
|
|
393
|
+
* Number of orientations.
|
|
394
|
+
*
|
|
395
|
+
* @param {number} [index]
|
|
396
|
+
* Index of point, used to decide orientation.
|
|
397
|
+
*
|
|
398
|
+
* @param {number} [from]
|
|
399
|
+
* The smallest degree of rotation.
|
|
400
|
+
*
|
|
401
|
+
* @param {number} [to]
|
|
402
|
+
* The largest degree of rotation.
|
|
403
|
+
*
|
|
404
|
+
* @return {boolean|number}
|
|
405
|
+
* Returns the resulting rotation for the word. Returns false if invalid
|
|
406
|
+
* input parameters.
|
|
407
|
+
*/
|
|
408
|
+
function getRotation(orientations, index, from, to) {
|
|
409
|
+
var result = false, // Default to false
|
|
410
|
+
range, intervals, orientation;
|
|
411
|
+
// Check if we have valid input parameters.
|
|
412
|
+
if (isNumber(orientations) &&
|
|
413
|
+
isNumber(index) &&
|
|
414
|
+
isNumber(from) &&
|
|
415
|
+
isNumber(to) &&
|
|
416
|
+
orientations > 0 &&
|
|
417
|
+
index > -1 &&
|
|
418
|
+
to > from) {
|
|
419
|
+
range = to - from;
|
|
420
|
+
intervals = range / (orientations - 1 || 1);
|
|
421
|
+
orientation = index % orientations;
|
|
422
|
+
result = from + (orientation * intervals);
|
|
249
423
|
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
* The width and height of the playing field.
|
|
273
|
-
*/
|
|
274
|
-
function getPlayingField(targetWidth, targetHeight, data) {
|
|
275
|
-
var info = data.reduce(function (obj, point) {
|
|
276
|
-
var dimensions = point.dimensions, x = Math.max(dimensions.width, dimensions.height);
|
|
277
|
-
// Find largest height.
|
|
278
|
-
obj.maxHeight = Math.max(obj.maxHeight, dimensions.height);
|
|
279
|
-
// Find largest width.
|
|
280
|
-
obj.maxWidth = Math.max(obj.maxWidth, dimensions.width);
|
|
281
|
-
// Sum up the total maximum area of all the words.
|
|
282
|
-
obj.area += x * x;
|
|
283
|
-
return obj;
|
|
284
|
-
}, {
|
|
285
|
-
maxHeight: 0,
|
|
286
|
-
maxWidth: 0,
|
|
287
|
-
area: 0
|
|
288
|
-
}),
|
|
289
|
-
/**
|
|
290
|
-
* Use largest width, largest height, or root of total area to give
|
|
291
|
-
* size to the playing field.
|
|
292
|
-
*/
|
|
293
|
-
x = Math.max(info.maxHeight, // Have enough space for the tallest word
|
|
294
|
-
info.maxWidth, // Have enough space for the broadest word
|
|
295
|
-
// Adjust 15% to account for close packing of words
|
|
296
|
-
Math.sqrt(info.area) * 0.85), ratioX = targetWidth > targetHeight ? targetWidth / targetHeight : 1, ratioY = targetHeight > targetWidth ? targetHeight / targetWidth : 1;
|
|
297
|
-
return {
|
|
298
|
-
width: x * ratioX,
|
|
299
|
-
height: x * ratioY,
|
|
300
|
-
ratioX: ratioX,
|
|
301
|
-
ratioY: ratioY
|
|
302
|
-
};
|
|
424
|
+
return result;
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Calculates the spiral positions and store them in scope for quick access.
|
|
428
|
+
*
|
|
429
|
+
* @private
|
|
430
|
+
* @function getSpiral
|
|
431
|
+
*
|
|
432
|
+
* @param {Function} fn
|
|
433
|
+
* The spiral function.
|
|
434
|
+
*
|
|
435
|
+
* @param {object} params
|
|
436
|
+
* Additional parameters for the spiral.
|
|
437
|
+
*
|
|
438
|
+
* @return {Function}
|
|
439
|
+
* Function with access to spiral positions.
|
|
440
|
+
*/
|
|
441
|
+
function getSpiral(fn, params) {
|
|
442
|
+
var length = 10000, i, arr = [];
|
|
443
|
+
for (i = 1; i < length; i++) {
|
|
444
|
+
// @todo unnecessary amount of precaclulation
|
|
445
|
+
arr.push(fn(i, params));
|
|
303
446
|
}
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
447
|
+
return function (attempt) {
|
|
448
|
+
return attempt <= length ? arr[attempt - 1] : false;
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Detects if a word is placed outside the playing field.
|
|
453
|
+
*
|
|
454
|
+
* @private
|
|
455
|
+
* @function outsidePlayingField
|
|
456
|
+
*
|
|
457
|
+
* @param {Highcharts.PolygonBoxObject} rect
|
|
458
|
+
* The word box.
|
|
459
|
+
*
|
|
460
|
+
* @param {Highcharts.WordcloudFieldObject} field
|
|
461
|
+
* The width and height of the playing field.
|
|
462
|
+
*
|
|
463
|
+
* @return {boolean}
|
|
464
|
+
* Returns true if the word is placed outside the field.
|
|
465
|
+
*/
|
|
466
|
+
function outsidePlayingField(rect, field) {
|
|
467
|
+
var playingField = {
|
|
468
|
+
left: -(field.width / 2),
|
|
469
|
+
right: field.width / 2,
|
|
470
|
+
top: -(field.height / 2),
|
|
471
|
+
bottom: field.height / 2
|
|
472
|
+
};
|
|
473
|
+
return !(playingField.left < rect.left &&
|
|
474
|
+
playingField.right > rect.right &&
|
|
475
|
+
playingField.top < rect.top &&
|
|
476
|
+
playingField.bottom > rect.bottom);
|
|
477
|
+
}
|
|
478
|
+
/**
|
|
479
|
+
* @private
|
|
480
|
+
*/
|
|
481
|
+
function movePolygon(deltaX, deltaY, polygon) {
|
|
482
|
+
return polygon.map(function (point) {
|
|
483
|
+
return [
|
|
484
|
+
point[0] + deltaX,
|
|
485
|
+
point[1] + deltaY
|
|
486
|
+
];
|
|
487
|
+
});
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* Check if a point intersects with previously placed words, or if it goes
|
|
491
|
+
* outside the field boundaries. If a collision, then try to adjusts the
|
|
492
|
+
* position.
|
|
493
|
+
*
|
|
494
|
+
* @private
|
|
495
|
+
* @function intersectionTesting
|
|
496
|
+
*
|
|
497
|
+
* @param {Highcharts.Point} point
|
|
498
|
+
* Point to test for intersections.
|
|
499
|
+
*
|
|
500
|
+
* @param {Highcharts.WordcloudTestOptionsObject} options
|
|
501
|
+
* Options object.
|
|
502
|
+
*
|
|
503
|
+
* @return {boolean|Highcharts.PositionObject}
|
|
504
|
+
* Returns an object with how much to correct the positions. Returns false
|
|
505
|
+
* if the word should not be placed at all.
|
|
506
|
+
*/
|
|
507
|
+
function intersectionTesting(point, options) {
|
|
508
|
+
var placed = options.placed, field = options.field, rectangle = options.rectangle, polygon = options.polygon, spiral = options.spiral, attempt = 1, delta = {
|
|
509
|
+
x: 0,
|
|
510
|
+
y: 0
|
|
511
|
+
},
|
|
512
|
+
// Make a copy to update values during intersection testing.
|
|
513
|
+
rect = point.rect = extend({}, rectangle);
|
|
514
|
+
point.polygon = polygon;
|
|
515
|
+
point.rotation = options.rotation;
|
|
516
|
+
/* while w intersects any previously placed words:
|
|
517
|
+
do {
|
|
518
|
+
move w a little bit along a spiral path
|
|
519
|
+
} while any part of w is outside the playing field and
|
|
520
|
+
the spiral radius is still smallish */
|
|
521
|
+
while (delta !== false &&
|
|
522
|
+
(intersectsAnyWord(point, placed) ||
|
|
523
|
+
outsidePlayingField(rect, field))) {
|
|
524
|
+
delta = spiral(attempt);
|
|
525
|
+
if (isObject(delta)) {
|
|
526
|
+
// Update the DOMRect with new positions.
|
|
527
|
+
rect.left = rectangle.left + delta.x;
|
|
528
|
+
rect.right = rectangle.right + delta.x;
|
|
529
|
+
rect.top = rectangle.top + delta.y;
|
|
530
|
+
rect.bottom = rectangle.bottom + delta.y;
|
|
531
|
+
point.polygon = movePolygon(delta.x, delta.y, polygon);
|
|
343
532
|
}
|
|
344
|
-
|
|
533
|
+
attempt++;
|
|
345
534
|
}
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
535
|
+
return delta;
|
|
536
|
+
}
|
|
537
|
+
/**
|
|
538
|
+
* Extends the playing field to have enough space to fit a given word.
|
|
539
|
+
*
|
|
540
|
+
* @private
|
|
541
|
+
* @function extendPlayingField
|
|
542
|
+
*
|
|
543
|
+
* @param {Highcharts.WordcloudFieldObject} field
|
|
544
|
+
* The width, height and ratios of a playing field.
|
|
545
|
+
*
|
|
546
|
+
* @param {Highcharts.PolygonBoxObject} rectangle
|
|
547
|
+
* The bounding box of the word to add space for.
|
|
548
|
+
*
|
|
549
|
+
* @return {Highcharts.WordcloudFieldObject}
|
|
550
|
+
* Returns the extended playing field with updated height and width.
|
|
551
|
+
*/
|
|
552
|
+
function extendPlayingField(field, rectangle) {
|
|
553
|
+
var height, width, ratioX, ratioY, x, extendWidth, extendHeight, result;
|
|
554
|
+
if (isObject(field) && isObject(rectangle)) {
|
|
555
|
+
height = (rectangle.bottom - rectangle.top);
|
|
556
|
+
width = (rectangle.right - rectangle.left);
|
|
557
|
+
ratioX = field.ratioX;
|
|
558
|
+
ratioY = field.ratioY;
|
|
559
|
+
// Use the same variable to extend both the height and width.
|
|
560
|
+
x = ((width * ratioX) > (height * ratioY)) ? width : height;
|
|
561
|
+
// Multiply variable with ratios to preserve aspect ratio.
|
|
562
|
+
extendWidth = x * ratioX;
|
|
563
|
+
extendHeight = x * ratioY;
|
|
564
|
+
// Calculate the size of the new field after adding
|
|
565
|
+
// space for the word.
|
|
566
|
+
result = merge(field, {
|
|
567
|
+
// Add space on the left and right.
|
|
568
|
+
width: field.width + (extendWidth * 2),
|
|
569
|
+
// Add space on the top and bottom.
|
|
570
|
+
height: field.height + (extendHeight * 2)
|
|
571
|
+
});
|
|
371
572
|
}
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
* Detects if a word is placed outside the playing field.
|
|
375
|
-
*
|
|
376
|
-
* @private
|
|
377
|
-
* @function outsidePlayingField
|
|
378
|
-
*
|
|
379
|
-
* @param {Highcharts.PolygonBoxObject} rect
|
|
380
|
-
* The word box.
|
|
381
|
-
*
|
|
382
|
-
* @param {Highcharts.WordcloudFieldObject} field
|
|
383
|
-
* The width and height of the playing field.
|
|
384
|
-
*
|
|
385
|
-
* @return {boolean}
|
|
386
|
-
* Returns true if the word is placed outside the field.
|
|
387
|
-
*/
|
|
388
|
-
function outsidePlayingField(rect, field) {
|
|
389
|
-
var playingField = {
|
|
390
|
-
left: -(field.width / 2),
|
|
391
|
-
right: field.width / 2,
|
|
392
|
-
top: -(field.height / 2),
|
|
393
|
-
bottom: field.height / 2
|
|
394
|
-
};
|
|
395
|
-
return !(playingField.left < rect.left &&
|
|
396
|
-
playingField.right > rect.right &&
|
|
397
|
-
playingField.top < rect.top &&
|
|
398
|
-
playingField.bottom > rect.bottom);
|
|
573
|
+
else {
|
|
574
|
+
result = field;
|
|
399
575
|
}
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
// Make a copy to update values during intersection testing.
|
|
425
|
-
rect = point.rect = extend({}, rectangle);
|
|
426
|
-
point.polygon = polygon;
|
|
427
|
-
point.rotation = options.rotation;
|
|
428
|
-
/* while w intersects any previously placed words:
|
|
429
|
-
do {
|
|
430
|
-
move w a little bit along a spiral path
|
|
431
|
-
} while any part of w is outside the playing field and
|
|
432
|
-
the spiral radius is still smallish */
|
|
433
|
-
while (delta !== false &&
|
|
434
|
-
(intersectsAnyWord(point, placed) ||
|
|
435
|
-
outsidePlayingField(rect, field))) {
|
|
436
|
-
delta = spiral(attempt);
|
|
437
|
-
if (isObject(delta)) {
|
|
438
|
-
// Update the DOMRect with new positions.
|
|
439
|
-
rect.left = rectangle.left + delta.x;
|
|
440
|
-
rect.right = rectangle.right + delta.x;
|
|
441
|
-
rect.top = rectangle.top + delta.y;
|
|
442
|
-
rect.bottom = rectangle.bottom + delta.y;
|
|
443
|
-
point.polygon = movePolygon(delta.x, delta.y, polygon);
|
|
444
|
-
}
|
|
445
|
-
attempt++;
|
|
446
|
-
}
|
|
447
|
-
return delta;
|
|
576
|
+
// Return the new extended field.
|
|
577
|
+
return result;
|
|
578
|
+
}
|
|
579
|
+
/**
|
|
580
|
+
* If a rectangle is outside a give field, then the boundaries of the field
|
|
581
|
+
* is adjusted accordingly. Modifies the field object which is passed as the
|
|
582
|
+
* first parameter.
|
|
583
|
+
*
|
|
584
|
+
* @private
|
|
585
|
+
* @function updateFieldBoundaries
|
|
586
|
+
*
|
|
587
|
+
* @param {Highcharts.WordcloudFieldObject} field
|
|
588
|
+
* The bounding box of a playing field.
|
|
589
|
+
*
|
|
590
|
+
* @param {Highcharts.PolygonBoxObject} rectangle
|
|
591
|
+
* The bounding box for a placed point.
|
|
592
|
+
*
|
|
593
|
+
* @return {Highcharts.WordcloudFieldObject}
|
|
594
|
+
* Returns a modified field object.
|
|
595
|
+
*/
|
|
596
|
+
function updateFieldBoundaries(field, rectangle) {
|
|
597
|
+
// @todo improve type checking.
|
|
598
|
+
if (!isNumber(field.left) || field.left > rectangle.left) {
|
|
599
|
+
field.left = rectangle.left;
|
|
448
600
|
}
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
* Extends the playing field to have enough space to fit a given word.
|
|
452
|
-
*
|
|
453
|
-
* @private
|
|
454
|
-
* @function extendPlayingField
|
|
455
|
-
*
|
|
456
|
-
* @param {Highcharts.WordcloudFieldObject} field
|
|
457
|
-
* The width, height and ratios of a playing field.
|
|
458
|
-
*
|
|
459
|
-
* @param {Highcharts.PolygonBoxObject} rectangle
|
|
460
|
-
* The bounding box of the word to add space for.
|
|
461
|
-
*
|
|
462
|
-
* @return {Highcharts.WordcloudFieldObject}
|
|
463
|
-
* Returns the extended playing field with updated height and width.
|
|
464
|
-
*/
|
|
465
|
-
function extendPlayingField(field, rectangle) {
|
|
466
|
-
var height, width, ratioX, ratioY, x, extendWidth, extendHeight, result;
|
|
467
|
-
if (isObject(field) && isObject(rectangle)) {
|
|
468
|
-
height = (rectangle.bottom - rectangle.top);
|
|
469
|
-
width = (rectangle.right - rectangle.left);
|
|
470
|
-
ratioX = field.ratioX;
|
|
471
|
-
ratioY = field.ratioY;
|
|
472
|
-
// Use the same variable to extend both the height and width.
|
|
473
|
-
x = ((width * ratioX) > (height * ratioY)) ? width : height;
|
|
474
|
-
// Multiply variable with ratios to preserve aspect ratio.
|
|
475
|
-
extendWidth = x * ratioX;
|
|
476
|
-
extendHeight = x * ratioY;
|
|
477
|
-
// Calculate the size of the new field after adding
|
|
478
|
-
// space for the word.
|
|
479
|
-
result = merge(field, {
|
|
480
|
-
// Add space on the left and right.
|
|
481
|
-
width: field.width + (extendWidth * 2),
|
|
482
|
-
// Add space on the top and bottom.
|
|
483
|
-
height: field.height + (extendHeight * 2)
|
|
484
|
-
});
|
|
485
|
-
}
|
|
486
|
-
else {
|
|
487
|
-
result = field;
|
|
488
|
-
}
|
|
489
|
-
// Return the new extended field.
|
|
490
|
-
return result;
|
|
601
|
+
if (!isNumber(field.right) || field.right < rectangle.right) {
|
|
602
|
+
field.right = rectangle.right;
|
|
491
603
|
}
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
* If a rectangle is outside a give field, then the boundaries of the field
|
|
495
|
-
* is adjusted accordingly. Modifies the field object which is passed as the
|
|
496
|
-
* first parameter.
|
|
497
|
-
*
|
|
498
|
-
* @private
|
|
499
|
-
* @function updateFieldBoundaries
|
|
500
|
-
*
|
|
501
|
-
* @param {Highcharts.WordcloudFieldObject} field
|
|
502
|
-
* The bounding box of a playing field.
|
|
503
|
-
*
|
|
504
|
-
* @param {Highcharts.PolygonBoxObject} rectangle
|
|
505
|
-
* The bounding box for a placed point.
|
|
506
|
-
*
|
|
507
|
-
* @return {Highcharts.WordcloudFieldObject}
|
|
508
|
-
* Returns a modified field object.
|
|
509
|
-
*/
|
|
510
|
-
function updateFieldBoundaries(field, rectangle) {
|
|
511
|
-
// @todo improve type checking.
|
|
512
|
-
if (!isNumber(field.left) || field.left > rectangle.left) {
|
|
513
|
-
field.left = rectangle.left;
|
|
514
|
-
}
|
|
515
|
-
if (!isNumber(field.right) || field.right < rectangle.right) {
|
|
516
|
-
field.right = rectangle.right;
|
|
517
|
-
}
|
|
518
|
-
if (!isNumber(field.top) || field.top > rectangle.top) {
|
|
519
|
-
field.top = rectangle.top;
|
|
520
|
-
}
|
|
521
|
-
if (!isNumber(field.bottom) || field.bottom < rectangle.bottom) {
|
|
522
|
-
field.bottom = rectangle.bottom;
|
|
523
|
-
}
|
|
524
|
-
return field;
|
|
604
|
+
if (!isNumber(field.top) || field.top > rectangle.top) {
|
|
605
|
+
field.top = rectangle.top;
|
|
525
606
|
}
|
|
526
|
-
|
|
527
|
-
|
|
607
|
+
if (!isNumber(field.bottom) || field.bottom < rectangle.bottom) {
|
|
608
|
+
field.bottom = rectangle.bottom;
|
|
609
|
+
}
|
|
610
|
+
return field;
|
|
611
|
+
}
|
|
612
|
+
/**
|
|
613
|
+
* Alternative solution to correctFloat.
|
|
614
|
+
* E.g Highcharts.correctFloat(123, 2) returns 120, when it should be 123.
|
|
615
|
+
*
|
|
616
|
+
* @private
|
|
617
|
+
* @function correctFloat
|
|
618
|
+
* @param {number} number
|
|
619
|
+
* @param {number} [precision]
|
|
620
|
+
* @return {number}
|
|
621
|
+
*/
|
|
622
|
+
function correctFloat(number, precision) {
|
|
623
|
+
var p = isNumber(precision) ? precision : 14, magnitude = Math.pow(10, p);
|
|
624
|
+
return Math.round(number * magnitude) / magnitude;
|
|
625
|
+
}
|
|
626
|
+
/**
|
|
627
|
+
* @private
|
|
628
|
+
*/
|
|
629
|
+
function getBoundingBoxFromPolygon(points) {
|
|
630
|
+
return points.reduce(function (obj, point) {
|
|
631
|
+
var x = point[0], y = point[1];
|
|
632
|
+
obj.left = Math.min(x, obj.left);
|
|
633
|
+
obj.right = Math.max(x, obj.right);
|
|
634
|
+
obj.bottom = Math.max(y, obj.bottom);
|
|
635
|
+
obj.top = Math.min(y, obj.top);
|
|
636
|
+
return obj;
|
|
637
|
+
}, {
|
|
638
|
+
left: Number.MAX_VALUE,
|
|
639
|
+
right: -Number.MAX_VALUE,
|
|
640
|
+
bottom: -Number.MAX_VALUE,
|
|
641
|
+
top: Number.MAX_VALUE
|
|
642
|
+
});
|
|
643
|
+
}
|
|
644
|
+
/**
|
|
645
|
+
* @private
|
|
646
|
+
*/
|
|
647
|
+
function getPolygon(x, y, width, height, rotation) {
|
|
648
|
+
var origin = [x, y], left = x - (width / 2), right = x + (width / 2), top = y - (height / 2), bottom = y + (height / 2), polygon = [
|
|
649
|
+
[left, top],
|
|
650
|
+
[right, top],
|
|
651
|
+
[right, bottom],
|
|
652
|
+
[left, bottom]
|
|
653
|
+
];
|
|
654
|
+
return polygon.map(function (point) {
|
|
655
|
+
return rotate2DToPoint(point, origin, -rotation);
|
|
656
|
+
});
|
|
657
|
+
}
|
|
658
|
+
/**
|
|
659
|
+
* Rotates a point clockwise around the origin.
|
|
660
|
+
*
|
|
661
|
+
* @private
|
|
662
|
+
* @function rotate2DToOrigin
|
|
663
|
+
* @param {Highcharts.PolygonPointObject} point
|
|
664
|
+
* The x and y coordinates for the point.
|
|
665
|
+
* @param {number} angle
|
|
666
|
+
* The angle of rotation.
|
|
667
|
+
* @return {Highcharts.PolygonPointObject}
|
|
668
|
+
* The x and y coordinate for the rotated point.
|
|
669
|
+
*/
|
|
670
|
+
function rotate2DToOrigin(point, angle) {
|
|
671
|
+
var x = point[0], y = point[1], rad = deg2rad * -angle, cosAngle = Math.cos(rad), sinAngle = Math.sin(rad);
|
|
672
|
+
return [
|
|
673
|
+
correctFloat(x * cosAngle - y * sinAngle),
|
|
674
|
+
correctFloat(x * sinAngle + y * cosAngle)
|
|
675
|
+
];
|
|
676
|
+
}
|
|
677
|
+
/**
|
|
678
|
+
* Rotate a point clockwise around another point.
|
|
679
|
+
*
|
|
680
|
+
* @private
|
|
681
|
+
* @function rotate2DToPoint
|
|
682
|
+
* @param {Highcharts.PolygonPointObject} point
|
|
683
|
+
* The x and y coordinates for the point.
|
|
684
|
+
* @param {Highcharts.PolygonPointObject} origin
|
|
685
|
+
* The point to rotate around.
|
|
686
|
+
* @param {number} angle
|
|
687
|
+
* The angle of rotation.
|
|
688
|
+
* @return {Highcharts.PolygonPointObject}
|
|
689
|
+
* The x and y coordinate for the rotated point.
|
|
690
|
+
*/
|
|
691
|
+
function rotate2DToPoint(point, origin, angle) {
|
|
692
|
+
var x = point[0] - origin[0], y = point[1] - origin[1], rotated = rotate2DToOrigin([x, y], angle);
|
|
693
|
+
return [
|
|
694
|
+
rotated[0] + origin[0],
|
|
695
|
+
rotated[1] + origin[1]
|
|
696
|
+
];
|
|
697
|
+
}
|
|
528
698
|
/* *
|
|
529
699
|
*
|
|
530
700
|
* Default export
|
|
531
701
|
*
|
|
532
702
|
* */
|
|
703
|
+
var WordcloudUtils = {
|
|
704
|
+
archimedeanSpiral: archimedeanSpiral,
|
|
705
|
+
extendPlayingField: extendPlayingField,
|
|
706
|
+
getBoundingBoxFromPolygon: getBoundingBoxFromPolygon,
|
|
707
|
+
getPlayingField: getPlayingField,
|
|
708
|
+
getPolygon: getPolygon,
|
|
709
|
+
getRandomPosition: getRandomPosition,
|
|
710
|
+
getRotation: getRotation,
|
|
711
|
+
getScale: getScale,
|
|
712
|
+
getSpiral: getSpiral,
|
|
713
|
+
intersectionTesting: intersectionTesting,
|
|
714
|
+
isPolygonsColliding: isPolygonsColliding,
|
|
715
|
+
isRectanglesIntersecting: isRectanglesIntersecting,
|
|
716
|
+
rectangularSpiral: rectangularSpiral,
|
|
717
|
+
rotate2DToOrigin: rotate2DToOrigin,
|
|
718
|
+
rotate2DToPoint: rotate2DToPoint,
|
|
719
|
+
squareSpiral: squareSpiral,
|
|
720
|
+
updateFieldBoundaries: updateFieldBoundaries
|
|
721
|
+
};
|
|
533
722
|
export default WordcloudUtils;
|