highcharts 10.2.0 → 10.2.1
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/bower.json +1 -1
- package/css/highcharts.css +10 -20
- package/css/themes/dark-unica.css +10 -20
- package/css/themes/grid-light.css +10 -20
- package/css/themes/sand-signika.css +10 -20
- package/es-modules/Accessibility/Accessibility.js +6 -0
- package/es-modules/Accessibility/Components/LegendComponent.js +8 -8
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +3 -2
- package/es-modules/Accessibility/Options/A11yDefaults.js +1 -1
- package/es-modules/Core/Axis/Axis.js +3 -0
- package/es-modules/Core/Axis/Axis3D.js +1 -1
- package/es-modules/Core/Axis/AxisDefaults.js +1 -1
- package/es-modules/Core/Axis/BrokenAxis.js +1 -1
- package/es-modules/Core/Axis/Color/ColorAxisDefaults.js +4 -0
- package/es-modules/Core/Axis/NavigatorAxis.js +2 -2
- package/es-modules/Core/Axis/OrdinalAxis.js +2 -2
- package/es-modules/Core/Axis/RadialAxis.js +1 -1
- package/es-modules/Core/Axis/Stacking/StackItem.js +262 -0
- package/es-modules/Core/Axis/Stacking/StackingAxis.js +468 -0
- package/es-modules/Core/Axis/TreeGrid/TreeGridAxis.js +732 -0
- package/es-modules/Core/Axis/TreeGrid/TreeGridTick.js +313 -0
- package/es-modules/Core/Axis/WaterfallAxis.js +1 -1
- package/es-modules/Core/Axis/ZAxis.js +73 -70
- package/es-modules/Core/Chart/Chart.js +16 -2
- package/es-modules/Core/Chart/Chart3D.js +2 -2
- package/es-modules/Core/Chart/ChartDefaults.js +151 -2
- package/es-modules/Core/Chart/StockChart.js +5 -3
- package/es-modules/Core/DefaultOptions.js +2 -1
- package/es-modules/Core/Geometry/CircleUtilities.js +4 -4
- package/es-modules/Core/Globals.js +2 -1
- package/es-modules/{Extensions → Core}/Math3D.js +48 -43
- package/es-modules/Core/Navigator.js +24 -7
- package/es-modules/Core/Pointer.js +7 -9
- package/es-modules/Core/Renderer/HTML/AST.js +4 -1
- package/es-modules/Core/Renderer/SVG/SVGElement.js +103 -163
- package/es-modules/Core/Renderer/SVG/SVGLabel.js +29 -27
- package/es-modules/Core/Renderer/SVG/SVGRenderer.js +3 -3
- package/es-modules/Core/Renderer/SVG/SVGRenderer3D.js +1 -1
- package/es-modules/Core/Renderer/SVG/TextBuilder.js +5 -3
- package/es-modules/Core/Scrollbar.js +3 -1
- package/es-modules/Core/Series/DataLabel.js +8 -6
- package/es-modules/Core/Series/Point.js +2 -2
- package/es-modules/Core/Series/Series.js +36 -31
- package/es-modules/Core/Series/Series3D.js +1 -1
- package/es-modules/Core/Series/SeriesDefaults.js +8 -3
- package/es-modules/Core/Series/SeriesRegistry.js +6 -29
- package/es-modules/Core/Tooltip.js +14 -3
- package/es-modules/Core/Utilities.js +1 -3
- package/es-modules/Data/DataConverter.js +5 -0
- package/es-modules/Data/DataPromise.js +1 -1
- package/es-modules/Data/DataSeriesComposition.js +288 -0
- package/es-modules/Data/DataSeriesConverter.js +1 -1
- package/es-modules/Data/DataTable.js +2 -2
- package/es-modules/Data/Modifiers/ChainModifier.js +1 -1
- package/es-modules/Data/Modifiers/DataModifier.js +1 -1
- package/es-modules/Data/Modifiers/GroupModifier.js +1 -1
- package/es-modules/Data/Modifiers/InvertModifier.js +1 -1
- package/es-modules/Data/Modifiers/RangeModifier.js +1 -1
- package/es-modules/Data/Modifiers/SeriesPointsModifier.js +1 -1
- package/es-modules/Data/Modifiers/SortModifier.js +1 -1
- package/es-modules/Data/Parsers/DataParser.js +1 -1
- package/es-modules/Data/Stores/DataStore.js +1 -1
- package/es-modules/Extensions/Annotations/Annotation.js +347 -1156
- package/es-modules/Extensions/Annotations/AnnotationChart.js +291 -0
- package/es-modules/Extensions/Annotations/AnnotationDefaults.js +624 -0
- package/es-modules/Extensions/Annotations/ControlPoint.js +89 -64
- package/es-modules/Extensions/Annotations/{Mixins/ControllableMixin.js → Controllables/Controllable.js} +300 -241
- package/es-modules/Extensions/Annotations/Controllables/ControllableCircle.js +63 -50
- package/es-modules/Extensions/Annotations/Controllables/ControllableDefaults.js +95 -0
- package/es-modules/Extensions/Annotations/Controllables/ControllableEllipse.js +90 -61
- package/es-modules/Extensions/Annotations/Controllables/ControllableImage.js +50 -44
- package/es-modules/Extensions/Annotations/Controllables/ControllableLabel.js +95 -78
- package/es-modules/Extensions/Annotations/Controllables/ControllablePath.js +167 -51
- package/es-modules/Extensions/Annotations/Controllables/ControllableRect.js +53 -52
- package/es-modules/Extensions/Annotations/{Mixins/EventEmitterMixin.js → EventEmitter.js} +136 -116
- package/es-modules/Extensions/Annotations/MockPoint.js +210 -145
- package/es-modules/Extensions/Annotations/NavigationBindings.js +272 -674
- package/es-modules/Extensions/Annotations/NavigationBindingsDefaults.js +396 -0
- package/es-modules/Extensions/Annotations/NavigationBindingsUtilities.js +98 -0
- package/es-modules/Extensions/Annotations/Popup/Popup.js +295 -0
- package/es-modules/Extensions/Annotations/Popup/PopupAnnotations.js +177 -0
- package/es-modules/Extensions/Annotations/Popup/PopupComposition.js +81 -0
- package/es-modules/Extensions/Annotations/Popup/PopupIndicators.js +609 -0
- package/es-modules/Extensions/Annotations/Popup/PopupTabs.js +134 -0
- package/es-modules/Extensions/Annotations/Types/BasicAnnotation.js +10 -14
- package/es-modules/Extensions/Annotations/Types/CrookedLine.js +11 -19
- package/es-modules/Extensions/Annotations/Types/ElliottWave.js +10 -10
- package/es-modules/Extensions/Annotations/Types/Fibonacci.js +28 -20
- package/es-modules/Extensions/Annotations/Types/FibonacciTimeZones.js +63 -63
- package/es-modules/Extensions/Annotations/Types/InfinityLine.js +10 -19
- package/es-modules/Extensions/Annotations/Types/Measure.js +255 -249
- package/es-modules/Extensions/Annotations/Types/Pitchfork.js +11 -17
- package/es-modules/Extensions/Annotations/Types/TimeCycles.js +20 -17
- package/es-modules/Extensions/Annotations/Types/Tunnel.js +12 -13
- package/es-modules/Extensions/Annotations/Types/VerticalLine.js +11 -15
- package/es-modules/Extensions/Boost/Boost.js +320 -15
- package/es-modules/Extensions/Boost/BoostChart.js +245 -0
- package/es-modules/Extensions/Boost/BoostSeries.js +927 -0
- package/es-modules/Extensions/Boost/BoostableMap.js +21 -5
- package/es-modules/Extensions/Boost/Boostables.js +13 -2
- package/es-modules/Extensions/Boost/NamedColors.js +15 -6
- package/es-modules/Extensions/Boost/WGLDrawMode.js +36 -0
- package/es-modules/Extensions/Boost/WGLRenderer.js +288 -295
- package/es-modules/Extensions/Boost/WGLShader.js +370 -376
- package/es-modules/Extensions/Boost/WGLVertexBuffer.js +192 -0
- package/es-modules/Extensions/BoostCanvas.js +62 -46
- package/es-modules/Extensions/Breadcrumbs.js +4 -0
- package/es-modules/Extensions/DataGrouping.js +65 -27
- package/es-modules/Extensions/Debugger/Debugger.js +60 -22
- package/es-modules/Extensions/DraggablePoints.js +4 -3
- package/es-modules/Extensions/Drilldown.js +7 -8
- package/es-modules/Extensions/{ExportData.js → ExportData/ExportData.js} +341 -530
- package/es-modules/Extensions/ExportData/ExportDataDefaults.js +272 -0
- package/es-modules/Extensions/Exporting/Exporting.js +5 -1
- package/es-modules/Extensions/Exporting/ExportingDefaults.js +3 -1
- package/es-modules/Extensions/{FullScreen.js → Exporting/Fullscreen.js} +72 -27
- package/es-modules/Extensions/MarkerClusters.js +2 -0
- package/es-modules/Extensions/OfflineExporting/OfflineExportingDefaults.js +1 -1
- package/es-modules/Extensions/Oldie/Oldie.js +1 -1
- package/es-modules/Extensions/ParallelCoordinates.js +11 -7
- package/es-modules/Extensions/ScrollablePlotArea.js +1 -1
- package/es-modules/Extensions/SeriesLabel/SeriesLabel.js +2 -2
- package/es-modules/Extensions/Sonification/ChartSonify.js +1 -1
- package/es-modules/Maps/MapPointer.js +1 -1
- package/es-modules/Maps/MapView.js +2 -1
- package/es-modules/Series/{Area3DSeries.js → Area3D/Area3DSeries.js} +42 -20
- package/es-modules/Series/AreaRange/AreaRangeSeries.js +8 -2
- package/es-modules/Series/Bubble/BubbleLegendComposition.js +223 -231
- package/es-modules/Series/Bubble/BubbleLegendItem.js +46 -45
- package/es-modules/Series/Bubble/BubbleSeries.js +85 -66
- package/es-modules/Series/Column/ColumnSeries.js +2 -0
- package/es-modules/Series/Column3D/Column3DComposition.js +2 -2
- package/es-modules/Series/ColumnPyramid/ColumnPyramidSeries.js +1 -1
- package/es-modules/Series/Cylinder/CylinderComposition.js +1 -1
- package/es-modules/Series/DependencyWheel/DependencyWheelPoint.js +24 -11
- package/es-modules/Series/DependencyWheel/DependencyWheelSeries.js +16 -2
- package/es-modules/Series/DragNodesComposition.js +166 -0
- package/es-modules/Series/Funnel3D/Funnel3DSeries.js +1 -1
- package/es-modules/Series/Gantt/GanttSeries.js +1 -1
- package/es-modules/Series/GraphLayoutComposition.js +130 -0
- package/es-modules/Series/Heatmap/HeatmapSeries.js +5 -1
- package/es-modules/Series/Lollipop/LollipopPoint.js +21 -11
- package/es-modules/Series/Lollipop/LollipopSeries.js +15 -10
- package/es-modules/Series/Map/MapSeries.js +6 -1
- package/es-modules/Series/MapBubble/MapBubblePoint.js +15 -17
- package/es-modules/Series/MapBubble/MapBubbleSeries.js +19 -19
- package/es-modules/Series/Networkgraph/EulerIntegration.js +199 -0
- package/es-modules/Series/Networkgraph/NetworkgraphPoint.js +290 -0
- package/es-modules/Series/Networkgraph/NetworkgraphSeries.js +401 -0
- package/es-modules/Series/Networkgraph/NetworkgraphSeriesDefaults.js +545 -0
- package/es-modules/Series/Networkgraph/QuadTree.js +66 -272
- package/es-modules/Series/Networkgraph/QuadTreeNode.js +271 -0
- package/es-modules/Series/Networkgraph/{Layouts.js → ReingoldFruchtermanLayout.js} +240 -259
- package/es-modules/Series/Networkgraph/VerletIntegration.js +193 -0
- package/es-modules/Series/Organization/OrganizationSeries.js +9 -1
- package/es-modules/Series/PackedBubble/PackedBubbleIntegration.js +81 -0
- package/es-modules/Series/PackedBubble/{PackedBubbleComposition.js → PackedBubbleLayout.js} +114 -77
- package/es-modules/Series/PackedBubble/PackedBubblePoint.js +2 -2
- package/es-modules/Series/PackedBubble/PackedBubbleSeries.js +197 -570
- package/es-modules/Series/PackedBubble/PackedBubbleSeriesDefaults.js +394 -0
- package/es-modules/Series/Pie/PieSeries.js +3 -1
- package/es-modules/Series/PolarComposition.js +12 -12
- package/es-modules/Series/Sankey/SankeySeries.js +13 -1
- package/es-modules/Series/Scatter/ScatterSeries.js +4 -1
- package/es-modules/Series/Scatter3D/Scatter3DSeries.js +1 -1
- package/es-modules/Series/SeriesOnPointComposition.js +5 -1
- package/es-modules/Series/SolidGauge/SolidGaugeSeries.js +1 -1
- package/es-modules/Series/Sunburst/SunburstPoint.js +5 -6
- package/es-modules/Series/Sunburst/SunburstSeries.js +24 -2
- package/es-modules/Series/Timeline/TimelineSeries.js +2 -0
- package/es-modules/Series/Treemap/TreemapSeries.js +3 -3
- package/es-modules/Series/Vector/VectorSeries.js +2 -4
- package/es-modules/Series/Wordcloud/WordcloudSeries.js +1 -1
- package/es-modules/Series/Wordcloud/WordcloudUtils.js +1 -1
- package/es-modules/Series/XRange/XRangePoint.js +54 -45
- package/es-modules/Series/XRange/XRangeSeries.js +121 -273
- package/es-modules/Series/XRange/XRangeSeriesDefaults.js +211 -0
- package/es-modules/Stock/Indicators/ABands/ABandsIndicator.js +10 -2
- package/es-modules/Stock/Indicators/AD/ADIndicator.js +5 -0
- package/es-modules/Stock/Indicators/AO/AOIndicator.js +22 -11
- package/es-modules/Stock/Indicators/APO/APOIndicator.js +6 -1
- package/es-modules/Stock/Indicators/ATR/ATRIndicator.js +16 -3
- package/es-modules/Stock/Indicators/Aroon/AroonIndicator.js +15 -2
- package/es-modules/Stock/Indicators/AroonOscillator/AroonOscillatorIndicator.js +6 -2
- package/es-modules/Stock/Indicators/BB/BBIndicator.js +5 -1
- package/es-modules/Stock/Indicators/CCI/CCIIndicator.js +16 -3
- package/es-modules/Stock/Indicators/CMF/CMFIndicator.js +20 -0
- package/es-modules/Stock/Indicators/CMO/CMOIndicator.js +15 -1
- package/es-modules/Stock/Indicators/Chaikin/ChaikinIndicator.js +7 -2
- package/es-modules/Stock/Indicators/DEMA/DEMAIndicator.js +25 -0
- package/es-modules/Stock/Indicators/DMI/DMIIndicator.js +5 -0
- package/es-modules/Stock/Indicators/DPO/DPOIndicator.js +19 -8
- package/es-modules/Stock/Indicators/EMA/EMAIndicator.js +10 -0
- package/es-modules/Stock/Indicators/IKH/IKHIndicator.js +34 -15
- package/es-modules/Stock/Indicators/KeltnerChannels/KeltnerChannelsIndicator.js +25 -0
- package/es-modules/Stock/Indicators/Klinger/KlingerIndicator.js +12 -1
- package/es-modules/Stock/Indicators/LinearRegression/{LinearRegression.js → LinearRegressionIndicator.js} +11 -1
- package/es-modules/Stock/Indicators/LinearRegressionAngle/{LinearRegressionAngle.js → LinearRegressionAngleIndicator.js} +12 -7
- package/es-modules/Stock/Indicators/LinearRegressionIntercept/{LinearRegressionIntercept.js → LinearRegressionInterceptIndicator.js} +11 -1
- package/es-modules/Stock/Indicators/LinearRegressionSlopes/{LinearRegressionSlopes.js → LinearRegressionSlopesIndicator.js} +11 -1
- package/es-modules/Stock/Indicators/MACD/MACDIndicator.js +21 -10
- package/es-modules/Stock/Indicators/MFI/MFIIndicator.js +23 -10
- package/es-modules/Stock/Indicators/Momentum/MomentumIndicator.js +30 -2
- package/es-modules/Stock/Indicators/NATR/NATRIndicator.js +16 -1
- package/es-modules/Stock/Indicators/OBV/OBVIndicator.js +10 -0
- package/es-modules/Stock/Indicators/PC/PCIndicator.js +13 -8
- package/es-modules/Stock/Indicators/PPO/PPOIndicator.js +14 -4
- package/es-modules/Stock/Indicators/PSAR/PSARIndicator.js +16 -3
- package/es-modules/Stock/Indicators/PivotPoints/PivotPointsIndicator.js +16 -6
- package/es-modules/Stock/Indicators/PivotPoints/PivotPointsPoint.js +16 -12
- package/es-modules/Stock/Indicators/PriceEnvelopes/PriceEnvelopesIndicator.js +25 -0
- package/es-modules/Stock/Indicators/ROC/ROCIndicator.js +15 -2
- package/es-modules/Stock/Indicators/RSI/RSIIndicator.js +20 -2
- package/es-modules/Stock/Indicators/SMA/SMAIndicator.js +1 -1
- package/es-modules/Stock/Indicators/SlowStochastic/SlowStochasticIndicator.js +25 -0
- package/es-modules/Stock/Indicators/Stochastic/StochasticIndicator.js +15 -0
- package/es-modules/Stock/Indicators/Supertrend/SupertrendIndicator.js +17 -3
- package/es-modules/Stock/Indicators/TRIX/TRIXIndicator.js +25 -0
- package/es-modules/Stock/Indicators/TrendLine/TrendLineIndicator.js +14 -4
- package/es-modules/Stock/Indicators/VBP/VBPIndicator.js +32 -3
- package/es-modules/Stock/Indicators/VBP/VBPPoint.js +6 -6
- package/es-modules/Stock/Indicators/VWAP/VWAPIndicator.js +11 -1
- package/es-modules/Stock/Indicators/WMA/WMAIndicator.js +30 -2
- package/es-modules/Stock/Indicators/WilliamsR/WilliamsRIndicator.js +10 -0
- package/es-modules/Stock/Indicators/Zigzag/ZigzagIndicator.js +11 -1
- package/es-modules/Stock/StockToolbar.js +568 -0
- package/es-modules/Stock/StockTools.js +256 -0
- package/es-modules/Stock/StockToolsBindings.js +114 -629
- package/es-modules/Stock/StockToolsDefaults.js +1190 -0
- package/es-modules/Stock/StockToolsGui.js +150 -1771
- package/es-modules/Stock/StockToolsUtilities.js +423 -0
- package/es-modules/masters/highcharts-3d.src.js +5 -4
- package/es-modules/masters/highcharts-gantt.src.js +1 -1
- package/es-modules/masters/highcharts-more.src.js +4 -3
- package/es-modules/masters/highcharts.src.js +5 -2
- 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/ichimoku-kinko-hyo.src.js +1 -1
- package/es-modules/masters/indicators/indicators-all.src.js +5 -7
- package/es-modules/masters/indicators/indicators.src.js +1 -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 +5 -5
- 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 +1 -1
- package/es-modules/masters/modules/annotations-advanced.src.js +6 -4
- package/es-modules/masters/modules/annotations.src.js +6 -4
- package/es-modules/masters/modules/arc-diagram.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 +6 -2
- 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 +1 -1
- package/es-modules/masters/modules/datagrouping.src.js +1 -1
- package/es-modules/masters/modules/debugger.src.js +5 -3
- 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 +5 -2
- package/es-modules/masters/modules/exporting.src.js +1 -2
- package/es-modules/masters/modules/full-screen.src.js +6 -2
- 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 +3 -2
- package/es-modules/masters/modules/grid-axis.src.js +1 -1
- package/es-modules/masters/modules/heatmap.src.js +1 -1
- 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 +2 -2
- package/es-modules/masters/modules/marker-clusters.src.js +1 -1
- package/es-modules/masters/modules/networkgraph.src.js +5 -2
- 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/series-on-point.src.js +1 -1
- package/es-modules/masters/modules/solid-gauge.src.js +1 -1
- package/es-modules/masters/modules/sonification.src.js +1 -1
- package/es-modules/masters/modules/static-scale.src.js +1 -1
- package/es-modules/masters/modules/stock-tools.src.js +10 -3
- package/es-modules/masters/modules/stock.src.js +1 -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 +2 -2
- 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 +5 -2
- package/es-modules/masters/themes/avocado.src.js +1 -1
- package/es-modules/masters/themes/brand-dark.src.js +1 -1
- package/es-modules/masters/themes/brand-light.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 +98 -99
- package/highcharts-3d.js.map +1 -1
- package/highcharts-3d.src.js +232 -211
- package/highcharts-gantt.js +808 -809
- package/highcharts-gantt.js.map +1 -1
- package/highcharts-gantt.src.js +2308 -2136
- package/highcharts-more.d.ts +5 -8
- package/highcharts-more.js +201 -194
- package/highcharts-more.js.map +1 -1
- package/highcharts-more.src.d.ts +5 -8
- package/highcharts-more.src.js +3671 -3275
- package/highcharts.d.ts +1400 -885
- package/highcharts.js +593 -595
- package/highcharts.js.map +1 -1
- package/highcharts.src.d.ts +1400 -885
- package/highcharts.src.js +847 -716
- package/highmaps.js +762 -763
- package/highmaps.js.map +1 -1
- package/highmaps.src.js +1288 -1129
- package/highstock.js +796 -798
- package/highstock.js.map +1 -1
- package/highstock.src.js +953 -762
- package/indicators/acceleration-bands.js +1 -1
- package/indicators/acceleration-bands.js.map +1 -1
- package/indicators/acceleration-bands.src.js +11 -3
- package/indicators/accumulation-distribution.js +1 -1
- package/indicators/accumulation-distribution.js.map +1 -1
- package/indicators/accumulation-distribution.src.js +6 -1
- package/indicators/ao.js +6 -6
- package/indicators/ao.js.map +1 -1
- package/indicators/ao.src.js +23 -14
- package/indicators/apo.js +1 -1
- package/indicators/apo.js.map +1 -1
- package/indicators/apo.src.js +6 -1
- package/indicators/aroon-oscillator.js +10 -10
- package/indicators/aroon-oscillator.js.map +1 -1
- package/indicators/aroon-oscillator.src.js +7 -3
- package/indicators/aroon.js +1 -1
- package/indicators/aroon.js.map +1 -1
- package/indicators/aroon.src.js +16 -3
- package/indicators/atr.js +1 -1
- package/indicators/atr.js.map +1 -1
- package/indicators/atr.src.js +17 -4
- package/indicators/bollinger-bands.js +1 -1
- package/indicators/bollinger-bands.js.map +1 -1
- package/indicators/bollinger-bands.src.js +6 -2
- package/indicators/cci.js +1 -1
- package/indicators/cci.js.map +1 -1
- package/indicators/cci.src.js +17 -4
- package/indicators/chaikin.js +8 -8
- package/indicators/chaikin.js.map +1 -1
- package/indicators/chaikin.src.js +13 -5
- package/indicators/cmf.js +1 -1
- package/indicators/cmf.js.map +1 -1
- package/indicators/cmf.src.js +21 -1
- package/indicators/cmo.js +1 -1
- package/indicators/cmo.js.map +1 -1
- package/indicators/cmo.src.js +16 -2
- package/indicators/dema.js +1 -1
- package/indicators/dema.js.map +1 -1
- package/indicators/dema.src.js +26 -1
- package/indicators/disparity-index.js +1 -1
- package/indicators/disparity-index.src.js +1 -1
- package/indicators/dmi.js +1 -1
- package/indicators/dmi.js.map +1 -1
- package/indicators/dmi.src.js +6 -1
- package/indicators/dpo.js +1 -1
- package/indicators/dpo.js.map +1 -1
- package/indicators/dpo.src.js +20 -9
- package/indicators/ichimoku-kinko-hyo.js +1 -1
- package/indicators/ichimoku-kinko-hyo.js.map +1 -1
- package/indicators/ichimoku-kinko-hyo.src.js +35 -16
- package/indicators/indicators-all.js +199 -199
- package/indicators/indicators-all.js.map +1 -1
- package/indicators/indicators-all.src.js +754 -162
- package/indicators/indicators.js +1 -1
- package/indicators/indicators.js.map +1 -1
- package/indicators/indicators.src.js +12 -2
- package/indicators/keltner-channels.js +1 -1
- package/indicators/keltner-channels.js.map +1 -1
- package/indicators/keltner-channels.src.js +26 -1
- package/indicators/klinger.js +12 -12
- package/indicators/klinger.js.map +1 -1
- package/indicators/klinger.src.js +13 -4
- package/indicators/macd.js +1 -1
- package/indicators/macd.js.map +1 -1
- package/indicators/macd.src.js +22 -13
- package/indicators/mfi.js +1 -1
- package/indicators/mfi.js.map +1 -1
- package/indicators/mfi.src.js +24 -11
- package/indicators/momentum.js +1 -1
- package/indicators/momentum.js.map +1 -1
- package/indicators/momentum.src.js +31 -3
- package/indicators/natr.js +1 -1
- package/indicators/natr.js.map +1 -1
- package/indicators/natr.src.js +17 -3
- package/indicators/obv.js +1 -1
- package/indicators/obv.js.map +1 -1
- package/indicators/obv.src.js +11 -1
- package/indicators/pivot-points.js +1 -1
- package/indicators/pivot-points.js.map +1 -1
- package/indicators/pivot-points.src.js +32 -19
- package/indicators/ppo.js +1 -1
- package/indicators/ppo.js.map +1 -1
- package/indicators/ppo.src.js +15 -5
- package/indicators/price-channel.js +1 -1
- package/indicators/price-channel.js.map +1 -1
- package/indicators/price-channel.src.js +14 -9
- package/indicators/price-envelopes.js +1 -1
- package/indicators/price-envelopes.js.map +1 -1
- package/indicators/price-envelopes.src.js +26 -1
- package/indicators/psar.js +1 -1
- package/indicators/psar.js.map +1 -1
- package/indicators/psar.src.js +17 -4
- package/indicators/regressions.js +12 -11
- package/indicators/regressions.js.map +1 -1
- package/indicators/regressions.src.js +50 -15
- package/indicators/roc.js +1 -1
- package/indicators/roc.js.map +1 -1
- package/indicators/roc.src.js +16 -3
- package/indicators/rsi.js +1 -1
- package/indicators/rsi.js.map +1 -1
- package/indicators/rsi.src.js +21 -3
- package/indicators/slow-stochastic.js +1 -1
- package/indicators/slow-stochastic.js.map +1 -1
- package/indicators/slow-stochastic.src.js +26 -1
- package/indicators/stochastic.js +1 -1
- package/indicators/stochastic.js.map +1 -1
- package/indicators/stochastic.src.js +16 -1
- package/indicators/supertrend.js +7 -7
- package/indicators/supertrend.js.map +1 -1
- package/indicators/supertrend.src.js +18 -6
- package/indicators/tema.js +1 -1
- package/indicators/tema.src.js +1 -1
- package/indicators/trendline.js +1 -1
- package/indicators/trendline.js.map +1 -1
- package/indicators/trendline.src.js +15 -5
- package/indicators/trix.js +1 -1
- package/indicators/trix.js.map +1 -1
- package/indicators/trix.src.js +26 -1
- package/indicators/volume-by-price.js +17 -17
- package/indicators/volume-by-price.js.map +1 -1
- package/indicators/volume-by-price.src.js +38 -10
- package/indicators/vwap.js +1 -1
- package/indicators/vwap.js.map +1 -1
- package/indicators/vwap.src.js +12 -2
- package/indicators/williams-r.js +1 -1
- package/indicators/williams-r.js.map +1 -1
- package/indicators/williams-r.src.js +11 -1
- package/indicators/wma.js +1 -1
- package/indicators/wma.js.map +1 -1
- package/indicators/wma.src.js +31 -3
- package/indicators/zigzag.js +1 -1
- package/indicators/zigzag.js.map +1 -1
- package/indicators/zigzag.src.js +12 -2
- package/modules/accessibility.js +183 -182
- package/modules/accessibility.js.map +1 -1
- package/modules/accessibility.src.js +559 -554
- package/modules/annotations-advanced.d.ts +1 -1
- package/modules/annotations-advanced.js +193 -192
- package/modules/annotations-advanced.js.map +1 -1
- package/modules/annotations-advanced.src.d.ts +1 -1
- package/modules/annotations-advanced.src.js +9263 -8654
- package/modules/annotations.d.ts +1 -1
- package/modules/annotations.js +128 -126
- package/modules/annotations.js.map +1 -1
- package/modules/annotations.src.d.ts +1 -1
- package/modules/annotations.src.js +6699 -6063
- package/modules/arc-diagram.js +1 -1
- package/modules/arc-diagram.src.js +1 -1
- package/modules/arrow-symbols.js +1 -1
- package/modules/arrow-symbols.src.js +1 -1
- package/modules/boost-canvas.d.ts +19 -0
- package/modules/boost-canvas.js +81 -16
- package/modules/boost-canvas.js.map +1 -1
- package/modules/boost-canvas.src.d.ts +19 -0
- package/modules/boost-canvas.src.js +3334 -50
- package/modules/boost.d.ts +8 -26
- package/modules/boost.js +84 -77
- package/modules/boost.js.map +1 -1
- package/modules/boost.src.d.ts +8 -26
- package/modules/boost.src.js +2423 -1888
- package/modules/broken-axis.js +2 -2
- package/modules/broken-axis.js.map +1 -1
- package/modules/broken-axis.src.js +2 -2
- package/modules/bullet.js +1 -1
- package/modules/bullet.src.js +1 -1
- package/modules/coloraxis.js +1 -1
- package/modules/coloraxis.js.map +1 -1
- package/modules/coloraxis.src.js +5 -1
- package/modules/current-date-indicator.js +1 -1
- package/modules/current-date-indicator.src.js +1 -1
- package/modules/cylinder.js +9 -9
- package/modules/cylinder.js.map +1 -1
- package/modules/cylinder.src.js +2 -2
- package/modules/data.js +1 -1
- package/modules/data.src.js +1 -1
- package/modules/datagrouping.d.ts +22 -0
- package/modules/datagrouping.js +4 -4
- package/modules/datagrouping.js.map +1 -1
- package/modules/datagrouping.src.d.ts +22 -0
- package/modules/datagrouping.src.js +66 -28
- package/modules/debugger.js +6 -5
- package/modules/debugger.js.map +1 -1
- package/modules/debugger.src.js +81 -40
- package/modules/dependency-wheel.js +12 -12
- package/modules/dependency-wheel.js.map +1 -1
- package/modules/dependency-wheel.src.js +41 -14
- package/modules/dotplot.js +1 -1
- package/modules/dotplot.src.js +1 -1
- package/modules/drag-panes.js +1 -1
- package/modules/drag-panes.src.js +1 -1
- package/modules/draggable-points.js +5 -5
- package/modules/draggable-points.js.map +1 -1
- package/modules/draggable-points.src.js +5 -4
- package/modules/drilldown.d.ts +0 -10
- package/modules/drilldown.js +29 -29
- package/modules/drilldown.js.map +1 -1
- package/modules/drilldown.src.d.ts +0 -10
- package/modules/drilldown.src.js +12 -9
- package/modules/dumbbell.js +1 -1
- package/modules/dumbbell.src.js +1 -1
- package/modules/export-data.js +25 -24
- package/modules/export-data.js.map +1 -1
- package/modules/export-data.src.js +607 -499
- package/modules/exporting.js +38 -38
- package/modules/exporting.js.map +1 -1
- package/modules/exporting.src.js +559 -507
- package/modules/full-screen.js +8 -8
- package/modules/full-screen.js.map +1 -1
- package/modules/full-screen.src.js +76 -26
- package/modules/funnel.js +1 -1
- package/modules/funnel.src.js +1 -1
- package/modules/funnel3d.js +2 -2
- package/modules/funnel3d.js.map +1 -1
- package/modules/funnel3d.src.js +2 -2
- package/modules/gantt.js +217 -216
- package/modules/gantt.js.map +1 -1
- package/modules/gantt.src.js +1481 -1440
- package/modules/grid-axis.js +1 -1
- package/modules/grid-axis.src.js +1 -1
- package/modules/heatmap.js +1 -1
- package/modules/heatmap.js.map +1 -1
- package/modules/heatmap.src.js +10 -2
- package/modules/heikinashi.js +1 -1
- package/modules/heikinashi.src.js +1 -1
- package/modules/histogram-bellcurve.js +1 -1
- package/modules/histogram-bellcurve.src.js +1 -1
- package/modules/hollowcandlestick.js +1 -1
- package/modules/hollowcandlestick.src.js +1 -1
- package/modules/item-series.js +1 -1
- package/modules/item-series.src.js +1 -1
- package/modules/lollipop.js +6 -6
- package/modules/lollipop.js.map +1 -1
- package/modules/lollipop.src.js +37 -22
- package/modules/map.d.ts +3 -3
- package/modules/map.js +171 -171
- package/modules/map.js.map +1 -1
- package/modules/map.src.d.ts +3 -3
- package/modules/map.src.js +442 -414
- package/modules/marker-clusters.js +1 -1
- package/modules/marker-clusters.js.map +1 -1
- package/modules/marker-clusters.src.js +3 -1
- package/modules/networkgraph.js +55 -50
- package/modules/networkgraph.js.map +1 -1
- package/modules/networkgraph.src.js +2259 -1938
- package/modules/no-data-to-display.js +1 -1
- package/modules/no-data-to-display.src.js +1 -1
- package/modules/offline-exporting.js +2 -2
- package/modules/offline-exporting.src.js +2 -2
- package/modules/oldie-polyfills.js +1 -1
- package/modules/oldie-polyfills.src.js +1 -1
- package/modules/oldie.js +2 -2
- package/modules/oldie.src.js +2 -2
- package/modules/organization.js +15 -15
- package/modules/organization.js.map +1 -1
- package/modules/organization.src.js +10 -2
- package/modules/overlapping-datalabels.js +1 -1
- package/modules/overlapping-datalabels.src.js +1 -1
- package/modules/parallel-coordinates.js +11 -11
- package/modules/parallel-coordinates.js.map +1 -1
- package/modules/parallel-coordinates.src.js +13 -8
- package/modules/pareto.js +1 -1
- package/modules/pareto.src.js +1 -1
- 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.js +1 -1
- package/modules/sankey.js.map +1 -1
- package/modules/sankey.src.js +14 -2
- package/modules/series-label.js +5 -5
- package/modules/series-label.js.map +1 -1
- package/modules/series-label.src.js +3 -3
- package/modules/series-on-point.js +1 -1
- package/modules/series-on-point.js.map +1 -1
- package/modules/series-on-point.src.js +6 -2
- package/modules/solid-gauge.js +1 -1
- package/modules/solid-gauge.src.js +2 -2
- package/modules/sonification.d.ts +2 -2
- package/modules/sonification.js +1 -1
- package/modules/sonification.src.d.ts +2 -2
- package/modules/sonification.src.js +2 -2
- package/modules/static-scale.js +1 -1
- package/modules/static-scale.src.js +1 -1
- package/modules/stock-tools.d.ts +1 -23
- package/modules/stock-tools.js +109 -179
- package/modules/stock-tools.js.map +1 -1
- package/modules/stock-tools.src.d.ts +1 -23
- package/modules/stock-tools.src.js +2605 -6335
- package/modules/stock.d.ts +8 -0
- package/modules/stock.js +105 -105
- package/modules/stock.js.map +1 -1
- package/modules/stock.src.d.ts +8 -0
- package/modules/stock.src.js +105 -45
- package/modules/streamgraph.js +1 -1
- package/modules/streamgraph.src.js +1 -1
- package/modules/sunburst.js +72 -72
- package/modules/sunburst.js.map +1 -1
- package/modules/sunburst.src.js +38 -12
- package/modules/tilemap.js +1 -1
- package/modules/tilemap.src.js +1 -1
- package/modules/timeline.js +1 -1
- package/modules/timeline.js.map +1 -1
- package/modules/timeline.src.js +3 -1
- package/modules/treegrid.js +57 -57
- package/modules/treegrid.js.map +1 -1
- package/modules/treegrid.src.js +1022 -1014
- package/modules/treemap.js +1 -1
- package/modules/treemap.js.map +1 -1
- package/modules/treemap.src.js +8 -4
- 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 +2 -2
- package/modules/vector.js.map +1 -1
- package/modules/vector.src.js +3 -5
- package/modules/venn.js +1 -1
- package/modules/venn.src.js +5 -5
- package/modules/windbarb.js +1 -1
- package/modules/windbarb.src.js +1 -1
- package/modules/wordcloud.js +1 -1
- package/modules/wordcloud.src.js +3 -3
- package/modules/xrange.js +17 -17
- package/modules/xrange.js.map +1 -1
- package/modules/xrange.src.js +411 -397
- package/package.json +1 -1
- package/themes/avocado.js +1 -1
- package/themes/avocado.src.js +1 -1
- package/themes/brand-dark.js +1 -1
- package/themes/brand-dark.src.js +1 -1
- package/themes/brand-light.js +1 -1
- package/themes/brand-light.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/StackingAxis.js +0 -215
- package/es-modules/Core/Axis/TreeGridAxis.js +0 -720
- package/es-modules/Core/Axis/TreeGridTick.js +0 -317
- package/es-modules/Extensions/Annotations/AnnotationsDefaults.js +0 -0
- package/es-modules/Extensions/Annotations/Mixins/MarkerMixin.js +0 -179
- package/es-modules/Extensions/Annotations/Popup.js +0 -1123
- package/es-modules/Extensions/Boost/BoostAttach.js +0 -154
- package/es-modules/Extensions/Boost/BoostInit.js +0 -324
- package/es-modules/Extensions/Boost/BoostOptions.js +0 -245
- package/es-modules/Extensions/Boost/BoostOverrides.js +0 -386
- package/es-modules/Extensions/Boost/BoostUtils.js +0 -255
- package/es-modules/Extensions/Boost/WGLVBuffer.js +0 -153
- package/es-modules/Extensions/Stacking.js +0 -517
- package/es-modules/Series/Networkgraph/DraggableNodes.js +0 -132
- package/es-modules/Series/Networkgraph/Integrations.js +0 -348
- package/es-modules/Series/Networkgraph/Networkgraph.js +0 -1180
- package/es-modules/Series/XRange/XRangeComposition.js +0 -49
package/modules/gantt.src.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Highcharts Gantt JS v10.2.
|
|
2
|
+
* @license Highcharts Gantt JS v10.2.1 (2022-08-29)
|
|
3
3
|
*
|
|
4
4
|
* Gantt series
|
|
5
5
|
*
|
|
@@ -37,7 +37,225 @@
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
-
_registerModule(_modules, 'Series/XRange/
|
|
40
|
+
_registerModule(_modules, 'Series/XRange/XRangeSeriesDefaults.js', [_modules['Core/Utilities.js']], function (U) {
|
|
41
|
+
/* *
|
|
42
|
+
*
|
|
43
|
+
* X-range series module
|
|
44
|
+
*
|
|
45
|
+
* (c) 2010-2021 Torstein Honsi, Lars A. V. Cabrera
|
|
46
|
+
*
|
|
47
|
+
* License: www.highcharts.com/license
|
|
48
|
+
*
|
|
49
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
50
|
+
*
|
|
51
|
+
* */
|
|
52
|
+
var correctFloat = U.correctFloat,
|
|
53
|
+
isNumber = U.isNumber,
|
|
54
|
+
isObject = U.isObject;
|
|
55
|
+
/* *
|
|
56
|
+
*
|
|
57
|
+
* Constants
|
|
58
|
+
*
|
|
59
|
+
* */
|
|
60
|
+
/**
|
|
61
|
+
* The X-range series displays ranges on the X axis, typically time
|
|
62
|
+
* intervals with a start and end date.
|
|
63
|
+
*
|
|
64
|
+
* @sample {highcharts} highcharts/demo/x-range/
|
|
65
|
+
* X-range
|
|
66
|
+
* @sample {highcharts} highcharts/css/x-range/
|
|
67
|
+
* Styled mode X-range
|
|
68
|
+
* @sample {highcharts} highcharts/chart/inverted-xrange/
|
|
69
|
+
* Inverted X-range
|
|
70
|
+
*
|
|
71
|
+
* @extends plotOptions.column
|
|
72
|
+
* @since 6.0.0
|
|
73
|
+
* @product highcharts highstock gantt
|
|
74
|
+
* @excluding boostThreshold, crisp, cropThreshold, depth, edgeColor,
|
|
75
|
+
* edgeWidth, findNearestPointBy, getExtremesFromAll,
|
|
76
|
+
* negativeColor, pointInterval, pointIntervalUnit,
|
|
77
|
+
* pointPlacement, pointRange, pointStart, softThreshold,
|
|
78
|
+
* stacking, threshold, data, dataSorting, boostBlending
|
|
79
|
+
* @requires modules/xrange
|
|
80
|
+
* @optionparent plotOptions.xrange
|
|
81
|
+
*/
|
|
82
|
+
var XRangeSeriesDefaults = {
|
|
83
|
+
/**
|
|
84
|
+
* A partial fill for each point,
|
|
85
|
+
typically used to visualize how much
|
|
86
|
+
* of a task is performed. The partial fill object can be set either on
|
|
87
|
+
* series or point level.
|
|
88
|
+
*
|
|
89
|
+
* @sample {highcharts} highcharts/demo/x-range
|
|
90
|
+
* X-range with partial fill
|
|
91
|
+
*
|
|
92
|
+
* @product highcharts highstock gantt
|
|
93
|
+
* @apioption plotOptions.xrange.partialFill
|
|
94
|
+
*/
|
|
95
|
+
/**
|
|
96
|
+
* The fill color to be used for partial fills. Defaults to a darker
|
|
97
|
+
* shade of the point color.
|
|
98
|
+
*
|
|
99
|
+
* @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
|
|
100
|
+
* @product highcharts highstock gantt
|
|
101
|
+
* @apioption plotOptions.xrange.partialFill.fill
|
|
102
|
+
*/
|
|
103
|
+
/**
|
|
104
|
+
* A partial fill for each point,
|
|
105
|
+
typically used to visualize how much
|
|
106
|
+
* of a task is performed. See [completed](series.gantt.data.completed).
|
|
107
|
+
*
|
|
108
|
+
* @sample gantt/demo/progress-indicator
|
|
109
|
+
* Gantt with progress indicator
|
|
110
|
+
*
|
|
111
|
+
* @product gantt
|
|
112
|
+
* @apioption plotOptions.gantt.partialFill
|
|
113
|
+
*/
|
|
114
|
+
/**
|
|
115
|
+
* In an X-range series,
|
|
116
|
+
this option makes all points of the same Y-axis
|
|
117
|
+
* category the same color.
|
|
118
|
+
*/
|
|
119
|
+
colorByPoint: true,
|
|
120
|
+
dataLabels: {
|
|
121
|
+
formatter: function () {
|
|
122
|
+
var point = this.point,
|
|
123
|
+
amount = point.partialFill;
|
|
124
|
+
if (isObject(amount)) {
|
|
125
|
+
amount = amount.amount;
|
|
126
|
+
}
|
|
127
|
+
if (isNumber(amount) && amount > 0) {
|
|
128
|
+
return correctFloat(amount * 100) + '%';
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
inside: true,
|
|
132
|
+
verticalAlign: 'middle'
|
|
133
|
+
},
|
|
134
|
+
tooltip: {
|
|
135
|
+
headerFormat: '<span style="font-size: 10px">{point.x} - {point.x2}</span><br/>',
|
|
136
|
+
pointFormat: '<span style="color:{point.color}">\u25CF</span> {series.name}: <b>{point.yCategory}</b><br/>'
|
|
137
|
+
},
|
|
138
|
+
borderRadius: 3,
|
|
139
|
+
pointRange: 0
|
|
140
|
+
};
|
|
141
|
+
/* *
|
|
142
|
+
*
|
|
143
|
+
* Export Default
|
|
144
|
+
*
|
|
145
|
+
* */
|
|
146
|
+
/* *
|
|
147
|
+
*
|
|
148
|
+
* API Options
|
|
149
|
+
*
|
|
150
|
+
* */
|
|
151
|
+
/**
|
|
152
|
+
* An `xrange` series. If the [type](#series.xrange.type) option is not
|
|
153
|
+
* specified, it is inherited from [chart.type](#chart.type).
|
|
154
|
+
*
|
|
155
|
+
* @extends series,plotOptions.xrange
|
|
156
|
+
* @excluding boostThreshold, crisp, cropThreshold, depth, edgeColor, edgeWidth,
|
|
157
|
+
* findNearestPointBy, getExtremesFromAll, negativeColor,
|
|
158
|
+
* pointInterval, pointIntervalUnit, pointPlacement, pointRange,
|
|
159
|
+
* pointStart, softThreshold, stacking, threshold, dataSorting,
|
|
160
|
+
* boostBlending
|
|
161
|
+
* @product highcharts highstock gantt
|
|
162
|
+
* @requires modules/xrange
|
|
163
|
+
* @apioption series.xrange
|
|
164
|
+
*/
|
|
165
|
+
/**
|
|
166
|
+
* An array of data points for the series. For the `xrange` series type,
|
|
167
|
+
* points can be given in the following ways:
|
|
168
|
+
*
|
|
169
|
+
* 1. An array of objects with named values. The objects are point configuration
|
|
170
|
+
* objects as seen below.
|
|
171
|
+
* ```js
|
|
172
|
+
* data: [{
|
|
173
|
+
* x: Date.UTC(2017, 0, 1),
|
|
174
|
+
* x2: Date.UTC(2017, 0, 3),
|
|
175
|
+
* name: "Test",
|
|
176
|
+
* y: 0,
|
|
177
|
+
* color: "#00FF00"
|
|
178
|
+
* }, {
|
|
179
|
+
* x: Date.UTC(2017, 0, 4),
|
|
180
|
+
* x2: Date.UTC(2017, 0, 5),
|
|
181
|
+
* name: "Deploy",
|
|
182
|
+
* y: 1,
|
|
183
|
+
* color: "#FF0000"
|
|
184
|
+
* }]
|
|
185
|
+
* ```
|
|
186
|
+
*
|
|
187
|
+
* @sample {highcharts} highcharts/series/data-array-of-objects/
|
|
188
|
+
* Config objects
|
|
189
|
+
*
|
|
190
|
+
* @declare Highcharts.XrangePointOptionsObject
|
|
191
|
+
* @type {Array<*>}
|
|
192
|
+
* @extends series.line.data
|
|
193
|
+
* @product highcharts highstock gantt
|
|
194
|
+
* @apioption series.xrange.data
|
|
195
|
+
*/
|
|
196
|
+
/**
|
|
197
|
+
* The starting X value of the range point.
|
|
198
|
+
*
|
|
199
|
+
* @sample {highcharts} highcharts/demo/x-range
|
|
200
|
+
* X-range
|
|
201
|
+
*
|
|
202
|
+
* @type {number}
|
|
203
|
+
* @product highcharts highstock gantt
|
|
204
|
+
* @apioption series.xrange.data.x
|
|
205
|
+
*/
|
|
206
|
+
/**
|
|
207
|
+
* The ending X value of the range point.
|
|
208
|
+
*
|
|
209
|
+
* @sample {highcharts} highcharts/demo/x-range
|
|
210
|
+
* X-range
|
|
211
|
+
*
|
|
212
|
+
* @type {number}
|
|
213
|
+
* @product highcharts highstock gantt
|
|
214
|
+
* @apioption series.xrange.data.x2
|
|
215
|
+
*/
|
|
216
|
+
/**
|
|
217
|
+
* The Y value of the range point.
|
|
218
|
+
*
|
|
219
|
+
* @sample {highcharts} highcharts/demo/x-range
|
|
220
|
+
* X-range
|
|
221
|
+
*
|
|
222
|
+
* @type {number}
|
|
223
|
+
* @product highcharts highstock gantt
|
|
224
|
+
* @apioption series.xrange.data.y
|
|
225
|
+
*/
|
|
226
|
+
/**
|
|
227
|
+
* A partial fill for each point, typically used to visualize how much of
|
|
228
|
+
* a task is performed. The partial fill object can be set either on series
|
|
229
|
+
* or point level.
|
|
230
|
+
*
|
|
231
|
+
* @sample {highcharts} highcharts/demo/x-range
|
|
232
|
+
* X-range with partial fill
|
|
233
|
+
*
|
|
234
|
+
* @declare Highcharts.XrangePointPartialFillOptionsObject
|
|
235
|
+
* @product highcharts highstock gantt
|
|
236
|
+
* @apioption series.xrange.data.partialFill
|
|
237
|
+
*/
|
|
238
|
+
/**
|
|
239
|
+
* The amount of the X-range point to be filled. Values can be 0-1 and are
|
|
240
|
+
* converted to percentages in the default data label formatter.
|
|
241
|
+
*
|
|
242
|
+
* @type {number}
|
|
243
|
+
* @product highcharts highstock gantt
|
|
244
|
+
* @apioption series.xrange.data.partialFill.amount
|
|
245
|
+
*/
|
|
246
|
+
/**
|
|
247
|
+
* The fill color to be used for partial fills. Defaults to a darker shade
|
|
248
|
+
* of the point color.
|
|
249
|
+
*
|
|
250
|
+
* @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
|
|
251
|
+
* @product highcharts highstock gantt
|
|
252
|
+
* @apioption series.xrange.data.partialFill.fill
|
|
253
|
+
*/
|
|
254
|
+
(''); // adds doclets above to transpiled file
|
|
255
|
+
|
|
256
|
+
return XRangeSeriesDefaults;
|
|
257
|
+
});
|
|
258
|
+
_registerModule(_modules, 'Series/XRange/XRangePoint.js', [_modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js']], function (SeriesRegistry, U) {
|
|
41
259
|
/* *
|
|
42
260
|
*
|
|
43
261
|
* X-range series module
|
|
@@ -65,7 +283,8 @@
|
|
|
65
283
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
66
284
|
};
|
|
67
285
|
})();
|
|
68
|
-
var
|
|
286
|
+
var pointProto = SeriesRegistry.series.prototype.pointClass.prototype,
|
|
287
|
+
ColumnPoint = SeriesRegistry.seriesTypes.column.prototype.pointClass;
|
|
69
288
|
var extend = U.extend;
|
|
70
289
|
/* *
|
|
71
290
|
*
|
|
@@ -75,37 +294,36 @@
|
|
|
75
294
|
var XRangePoint = /** @class */ (function (_super) {
|
|
76
295
|
__extends(XRangePoint, _super);
|
|
77
296
|
function XRangePoint() {
|
|
297
|
+
/* *
|
|
298
|
+
*
|
|
299
|
+
* Static Functions
|
|
300
|
+
*
|
|
301
|
+
* */
|
|
78
302
|
var _this = _super !== null && _super.apply(this,
|
|
79
303
|
arguments) || this;
|
|
80
304
|
/* *
|
|
81
305
|
*
|
|
82
|
-
*
|
|
306
|
+
* Properties
|
|
83
307
|
*
|
|
84
308
|
* */
|
|
85
309
|
_this.options = void 0;
|
|
86
310
|
_this.series = void 0;
|
|
87
311
|
return _this;
|
|
88
|
-
/* eslint-enable valid-jsdoc */
|
|
89
312
|
}
|
|
90
|
-
/* *
|
|
91
|
-
*
|
|
92
|
-
* Static properties
|
|
93
|
-
*
|
|
94
|
-
* */
|
|
95
313
|
/**
|
|
96
314
|
* Return color of a point based on its category.
|
|
97
315
|
*
|
|
98
316
|
* @private
|
|
99
317
|
* @function getColorByCategory
|
|
100
318
|
*
|
|
101
|
-
* @param {
|
|
102
|
-
*
|
|
319
|
+
* @param {object} series
|
|
320
|
+
* The series which the point belongs to.
|
|
103
321
|
*
|
|
104
|
-
* @param {
|
|
105
|
-
*
|
|
322
|
+
* @param {object} point
|
|
323
|
+
* The point to calculate its color for.
|
|
106
324
|
*
|
|
107
|
-
* @return {
|
|
108
|
-
*
|
|
325
|
+
* @return {object}
|
|
326
|
+
* Returns an object containing the properties color and colorIndex.
|
|
109
327
|
*/
|
|
110
328
|
XRangePoint.getColorByCategory = function (series, point) {
|
|
111
329
|
var colors = series.options.colors || series.chart.options.colors,
|
|
@@ -121,33 +339,17 @@
|
|
|
121
339
|
};
|
|
122
340
|
/* *
|
|
123
341
|
*
|
|
124
|
-
*
|
|
342
|
+
* Functions
|
|
125
343
|
*
|
|
126
344
|
* */
|
|
127
|
-
/**
|
|
128
|
-
* The ending X value of the range point.
|
|
129
|
-
* @name Highcharts.Point#x2
|
|
130
|
-
* @type {number|undefined}
|
|
131
|
-
* @requires modules/xrange
|
|
132
|
-
*/
|
|
133
|
-
/**
|
|
134
|
-
* Extend applyOptions so that `colorByPoint` for x-range means that one
|
|
135
|
-
* color is applied per Y axis category.
|
|
136
|
-
*
|
|
137
|
-
* @private
|
|
138
|
-
* @function Highcharts.Point#applyOptions
|
|
139
|
-
*
|
|
140
|
-
* @return {Highcharts.Series}
|
|
141
|
-
*/
|
|
142
|
-
/* eslint-disable valid-jsdoc */
|
|
143
345
|
/**
|
|
144
346
|
* @private
|
|
145
347
|
*/
|
|
146
348
|
XRangePoint.prototype.resolveColor = function () {
|
|
147
|
-
var series = this.series
|
|
148
|
-
colorByPoint;
|
|
349
|
+
var series = this.series;
|
|
149
350
|
if (series.options.colorByPoint && !this.options.color) {
|
|
150
|
-
colorByPoint = XRangePoint.getColorByCategory(series,
|
|
351
|
+
var colorByPoint = XRangePoint.getColorByCategory(series,
|
|
352
|
+
this);
|
|
151
353
|
if (!series.chart.styledMode) {
|
|
152
354
|
this.color = colorByPoint.color;
|
|
153
355
|
}
|
|
@@ -163,10 +365,9 @@
|
|
|
163
365
|
* Extend init to have y default to 0.
|
|
164
366
|
*
|
|
165
367
|
* @private
|
|
166
|
-
* @function Highcharts.Point#init
|
|
167
368
|
*/
|
|
168
369
|
XRangePoint.prototype.init = function () {
|
|
169
|
-
|
|
370
|
+
pointProto.init.apply(this, arguments);
|
|
170
371
|
if (!this.y) {
|
|
171
372
|
this.y = 0;
|
|
172
373
|
}
|
|
@@ -174,35 +375,32 @@
|
|
|
174
375
|
};
|
|
175
376
|
/**
|
|
176
377
|
* @private
|
|
177
|
-
* @function Highcharts.Point#setState
|
|
178
378
|
*/
|
|
179
379
|
XRangePoint.prototype.setState = function () {
|
|
180
|
-
|
|
380
|
+
pointProto.setState.apply(this, arguments);
|
|
181
381
|
this.series.drawPoint(this, this.series.getAnimationVerb());
|
|
182
382
|
};
|
|
183
383
|
/**
|
|
384
|
+
* Add x2 and yCategory to the available properties for tooltip formats.
|
|
385
|
+
*
|
|
184
386
|
* @private
|
|
185
|
-
* @function Highcharts.Point#getLabelConfig
|
|
186
387
|
*/
|
|
187
|
-
// Add x2 and yCategory to the available properties for tooltip formats
|
|
188
388
|
XRangePoint.prototype.getLabelConfig = function () {
|
|
189
|
-
var
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
cfg.
|
|
193
|
-
cfg.yCategory = point.yCategory = yCats && yCats[point.y];
|
|
389
|
+
var cfg = pointProto.getLabelConfig.call(this),
|
|
390
|
+
yCats = this.series.yAxis.categories;
|
|
391
|
+
cfg.x2 = this.x2;
|
|
392
|
+
cfg.yCategory = this.yCategory = yCats && yCats[this.y];
|
|
194
393
|
return cfg;
|
|
195
394
|
};
|
|
196
395
|
/**
|
|
197
396
|
* @private
|
|
198
|
-
* @function Highcharts.Point#isValid
|
|
199
397
|
*/
|
|
200
398
|
XRangePoint.prototype.isValid = function () {
|
|
201
399
|
return typeof this.x === 'number' &&
|
|
202
400
|
typeof this.x2 === 'number';
|
|
203
401
|
};
|
|
204
402
|
return XRangePoint;
|
|
205
|
-
}(
|
|
403
|
+
}(ColumnPoint));
|
|
206
404
|
extend(XRangePoint.prototype, {
|
|
207
405
|
ttBelow: false,
|
|
208
406
|
tooltipDateKeys: ['x', 'x2']
|
|
@@ -212,62 +410,39 @@
|
|
|
212
410
|
* Default Export
|
|
213
411
|
*
|
|
214
412
|
* */
|
|
215
|
-
|
|
216
|
-
return XRangePoint;
|
|
217
|
-
});
|
|
218
|
-
_registerModule(_modules, 'Series/XRange/XRangeComposition.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Utilities.js']], function (Axis, U) {
|
|
219
413
|
/* *
|
|
220
414
|
*
|
|
221
|
-
*
|
|
222
|
-
*
|
|
223
|
-
* (c) 2010-2021 Torstein Honsi, Lars A. V. Cabrera
|
|
224
|
-
*
|
|
225
|
-
* License: www.highcharts.com/license
|
|
226
|
-
*
|
|
227
|
-
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
415
|
+
* API Declarations
|
|
228
416
|
*
|
|
229
417
|
* */
|
|
230
|
-
|
|
231
|
-
*
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
*
|
|
235
|
-
|
|
418
|
+
/**
|
|
419
|
+
* The ending X value of the range point.
|
|
420
|
+
* @name Highcharts.Point#x2
|
|
421
|
+
* @type {number|undefined}
|
|
422
|
+
* @requires modules/xrange
|
|
423
|
+
*/
|
|
424
|
+
/**
|
|
425
|
+
* Extend applyOptions so that `colorByPoint` for x-range means that one
|
|
426
|
+
* color is applied per Y axis category.
|
|
236
427
|
*
|
|
237
|
-
*
|
|
428
|
+
* @private
|
|
429
|
+
* @function Highcharts.Point#applyOptions
|
|
238
430
|
*
|
|
239
|
-
*
|
|
240
|
-
var addEvent = U.addEvent,
|
|
241
|
-
pick = U.pick;
|
|
242
|
-
/**
|
|
243
|
-
* Max x2 should be considered in xAxis extremes
|
|
431
|
+
* @return {Highcharts.Series}
|
|
244
432
|
*/
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
series.x2Data
|
|
255
|
-
.forEach(function (val) {
|
|
256
|
-
if (val > dataMax) {
|
|
257
|
-
dataMax = val;
|
|
258
|
-
modMax = true;
|
|
259
|
-
}
|
|
260
|
-
});
|
|
261
|
-
}
|
|
262
|
-
});
|
|
263
|
-
if (modMax) {
|
|
264
|
-
axis.dataMax = dataMax;
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
});
|
|
433
|
+
/**
|
|
434
|
+
* @interface Highcharts.PointOptionsObject in parts/Point.ts
|
|
435
|
+
*/ /**
|
|
436
|
+
* The ending X value of the range point.
|
|
437
|
+
* @name Highcharts.PointOptionsObject#x2
|
|
438
|
+
* @type {number|undefined}
|
|
439
|
+
* @requires modules/xrange
|
|
440
|
+
*/
|
|
441
|
+
(''); // keeps doclets above in JS file
|
|
268
442
|
|
|
443
|
+
return XRangePoint;
|
|
269
444
|
});
|
|
270
|
-
_registerModule(_modules, 'Series/XRange/XRangeSeries.js', [_modules['Core/Globals.js'], _modules['Core/Color/Color.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js'], _modules['Series/XRange/XRangePoint.js']], function (H, Color, SeriesRegistry, U, XRangePoint) {
|
|
445
|
+
_registerModule(_modules, 'Series/XRange/XRangeSeries.js', [_modules['Core/Globals.js'], _modules['Core/Color/Color.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js'], _modules['Series/XRange/XRangeSeriesDefaults.js'], _modules['Series/XRange/XRangePoint.js']], function (H, Color, SeriesRegistry, U, XRangeSeriesDefaults, XRangePoint) {
|
|
271
446
|
/* *
|
|
272
447
|
*
|
|
273
448
|
* X-range series module
|
|
@@ -295,12 +470,12 @@
|
|
|
295
470
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
296
471
|
};
|
|
297
472
|
})();
|
|
473
|
+
var noop = H.noop;
|
|
298
474
|
var color = Color.parse;
|
|
299
|
-
var
|
|
475
|
+
var seriesProto = SeriesRegistry.series.prototype,
|
|
300
476
|
ColumnSeries = SeriesRegistry.seriesTypes.column;
|
|
301
|
-
var
|
|
302
|
-
|
|
303
|
-
correctFloat = U.correctFloat,
|
|
477
|
+
var addEvent = U.addEvent,
|
|
478
|
+
clamp = U.clamp,
|
|
304
479
|
defined = U.defined,
|
|
305
480
|
extend = U.extend,
|
|
306
481
|
find = U.find,
|
|
@@ -309,13 +484,47 @@
|
|
|
309
484
|
merge = U.merge,
|
|
310
485
|
pick = U.pick;
|
|
311
486
|
/* *
|
|
312
|
-
*
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
*
|
|
318
|
-
|
|
487
|
+
*
|
|
488
|
+
* Constants
|
|
489
|
+
*
|
|
490
|
+
* */
|
|
491
|
+
var composedClasses = [];
|
|
492
|
+
/* *
|
|
493
|
+
*
|
|
494
|
+
* Functions
|
|
495
|
+
*
|
|
496
|
+
* */
|
|
497
|
+
/**
|
|
498
|
+
* Max x2 should be considered in xAxis extremes
|
|
499
|
+
* @private
|
|
500
|
+
*/
|
|
501
|
+
function onAxisAfterGetSeriesExtremes() {
|
|
502
|
+
var dataMax,
|
|
503
|
+
modMax;
|
|
504
|
+
if (this.isXAxis) {
|
|
505
|
+
dataMax = pick(this.dataMax, -Number.MAX_VALUE);
|
|
506
|
+
for (var _i = 0, _a = this.series; _i < _a.length; _i++) {
|
|
507
|
+
var series = _a[_i];
|
|
508
|
+
if (series.x2Data) {
|
|
509
|
+
for (var _b = 0, _c = series.x2Data; _b < _c.length; _b++) {
|
|
510
|
+
var val = _c[_b];
|
|
511
|
+
if (val && val > dataMax) {
|
|
512
|
+
dataMax = val;
|
|
513
|
+
modMax = true;
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
if (modMax) {
|
|
519
|
+
this.dataMax = dataMax;
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
/* *
|
|
524
|
+
*
|
|
525
|
+
* Class
|
|
526
|
+
*
|
|
527
|
+
* */
|
|
319
528
|
/**
|
|
320
529
|
* @private
|
|
321
530
|
* @class
|
|
@@ -326,11 +535,16 @@
|
|
|
326
535
|
var XRangeSeries = /** @class */ (function (_super) {
|
|
327
536
|
__extends(XRangeSeries, _super);
|
|
328
537
|
function XRangeSeries() {
|
|
538
|
+
/* *
|
|
539
|
+
*
|
|
540
|
+
* Static Properties
|
|
541
|
+
*
|
|
542
|
+
* */
|
|
329
543
|
var _this = _super !== null && _super.apply(this,
|
|
330
544
|
arguments) || this;
|
|
331
545
|
/* *
|
|
332
546
|
*
|
|
333
|
-
*
|
|
547
|
+
* Properties
|
|
334
548
|
*
|
|
335
549
|
* */
|
|
336
550
|
_this.data = void 0;
|
|
@@ -352,54 +566,56 @@
|
|
|
352
566
|
}
|
|
353
567
|
/* *
|
|
354
568
|
*
|
|
355
|
-
* Functions
|
|
569
|
+
* Static Functions
|
|
570
|
+
*
|
|
571
|
+
* */
|
|
572
|
+
XRangeSeries.compose = function (AxisClass) {
|
|
573
|
+
if (composedClasses.indexOf(AxisClass) === -1) {
|
|
574
|
+
composedClasses.push(AxisClass);
|
|
575
|
+
addEvent(AxisClass, 'afterGetSeriesExtremes', onAxisAfterGetSeriesExtremes);
|
|
576
|
+
}
|
|
577
|
+
};
|
|
578
|
+
/* *
|
|
579
|
+
*
|
|
580
|
+
* Functions
|
|
356
581
|
*
|
|
357
582
|
* */
|
|
358
|
-
/* eslint-disable valid-jsdoc */
|
|
359
583
|
/**
|
|
360
584
|
* @private
|
|
361
|
-
* @function Highcarts.seriesTypes.xrange#init
|
|
362
585
|
*/
|
|
363
586
|
XRangeSeries.prototype.init = function () {
|
|
364
|
-
|
|
587
|
+
_super.prototype.init.apply(this, arguments);
|
|
365
588
|
this.options.stacking = void 0; // #13161
|
|
366
589
|
};
|
|
367
590
|
/**
|
|
368
591
|
* Borrow the column series metrics, but with swapped axes. This gives
|
|
369
592
|
* free access to features like groupPadding, grouping, pointWidth etc.
|
|
370
|
-
*
|
|
371
593
|
* @private
|
|
372
|
-
* @function Highcharts.Series#getColumnMetrics
|
|
373
594
|
*/
|
|
374
595
|
XRangeSeries.prototype.getColumnMetrics = function () {
|
|
375
|
-
var
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
});
|
|
386
|
-
}
|
|
596
|
+
var _this = this;
|
|
597
|
+
var swapAxes = function () {
|
|
598
|
+
for (var _i = 0,
|
|
599
|
+
_a = _this.chart.series; _i < _a.length; _i++) {
|
|
600
|
+
var series = _a[_i];
|
|
601
|
+
var xAxis = series.xAxis;
|
|
602
|
+
series.xAxis = series.yAxis;
|
|
603
|
+
series.yAxis = xAxis;
|
|
604
|
+
}
|
|
605
|
+
};
|
|
387
606
|
swapAxes();
|
|
388
|
-
metrics =
|
|
607
|
+
var metrics = _super.prototype.getColumnMetrics.call(this);
|
|
389
608
|
swapAxes();
|
|
390
609
|
return metrics;
|
|
391
610
|
};
|
|
392
611
|
/**
|
|
393
|
-
* Override cropData to show a point where x or x2 is outside visible
|
|
394
|
-
*
|
|
395
|
-
*
|
|
612
|
+
* Override cropData to show a point where x or x2 is outside visible range,
|
|
613
|
+
* but one of them is inside.
|
|
396
614
|
* @private
|
|
397
|
-
* @function Highcharts.Series#cropData
|
|
398
615
|
*/
|
|
399
616
|
XRangeSeries.prototype.cropData = function (xData, yData, min, max) {
|
|
400
617
|
// Replace xData with x2Data to find the appropriate cropStart
|
|
401
|
-
var
|
|
402
|
-
crop = cropData.call(this,
|
|
618
|
+
var crop = seriesProto.cropData.call(this,
|
|
403
619
|
this.x2Data,
|
|
404
620
|
yData,
|
|
405
621
|
min,
|
|
@@ -413,37 +629,34 @@
|
|
|
413
629
|
* options.
|
|
414
630
|
*
|
|
415
631
|
* @private
|
|
416
|
-
*
|
|
417
|
-
* @param {
|
|
418
|
-
*
|
|
632
|
+
*
|
|
633
|
+
* @param {Highcharts.XRangePointOptions} options
|
|
634
|
+
* The options of the point.
|
|
635
|
+
*
|
|
419
636
|
* @return {number|undefined}
|
|
420
|
-
*
|
|
637
|
+
* Returns index of a matching point, or undefined if no match is
|
|
638
|
+
* found.
|
|
421
639
|
*/
|
|
422
640
|
XRangeSeries.prototype.findPointIndex = function (options) {
|
|
423
641
|
var _a = this,
|
|
424
|
-
cropped = _a.cropped,
|
|
425
642
|
cropStart = _a.cropStart,
|
|
426
643
|
points = _a.points;
|
|
427
644
|
var id = options.id;
|
|
428
645
|
var pointIndex;
|
|
429
646
|
if (id) {
|
|
430
647
|
var point = find(points,
|
|
431
|
-
function (point) {
|
|
432
|
-
return point.id === id;
|
|
433
|
-
});
|
|
648
|
+
function (point) { return point.id === id; });
|
|
434
649
|
pointIndex = point ? point.index : void 0;
|
|
435
650
|
}
|
|
436
651
|
if (typeof pointIndex === 'undefined') {
|
|
437
652
|
var point = find(points,
|
|
438
|
-
function (point) {
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
!point.touched);
|
|
442
|
-
});
|
|
653
|
+
function (point) { return (point.x === options.x &&
|
|
654
|
+
point.x2 === options.x2 &&
|
|
655
|
+
!point.touched); });
|
|
443
656
|
pointIndex = point ? point.index : void 0;
|
|
444
657
|
}
|
|
445
658
|
// Reduce pointIndex if data is cropped
|
|
446
|
-
if (cropped &&
|
|
659
|
+
if (this.cropped &&
|
|
447
660
|
isNumber(pointIndex) &&
|
|
448
661
|
isNumber(cropStart) &&
|
|
449
662
|
pointIndex >= cropStart) {
|
|
@@ -453,36 +666,31 @@
|
|
|
453
666
|
};
|
|
454
667
|
/**
|
|
455
668
|
* @private
|
|
456
|
-
* @function Highcharts.Series#translatePoint
|
|
457
|
-
*
|
|
458
|
-
* @param {Highcharts.Point} point
|
|
459
669
|
*/
|
|
460
670
|
XRangeSeries.prototype.translatePoint = function (point) {
|
|
461
|
-
var
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
options = series.options,
|
|
671
|
+
var xAxis = this.xAxis,
|
|
672
|
+
yAxis = this.yAxis,
|
|
673
|
+
metrics = this.columnMetrics,
|
|
674
|
+
options = this.options,
|
|
466
675
|
minPointLength = options.minPointLength || 0,
|
|
467
676
|
oldColWidth = (point.shapeArgs && point.shapeArgs.width || 0) / 2,
|
|
468
|
-
seriesXOffset =
|
|
469
|
-
plotX = point.plotX,
|
|
677
|
+
seriesXOffset = this.pointXOffset = metrics.offset,
|
|
470
678
|
posX = pick(point.x2,
|
|
471
|
-
point.x + (point.len || 0))
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
partialFill,
|
|
679
|
+
point.x + (point.len || 0));
|
|
680
|
+
var plotX = point.plotX,
|
|
681
|
+
plotX2 = xAxis.translate(posX, 0, 0, 0, 1);
|
|
682
|
+
var length = Math.abs(plotX2 - plotX),
|
|
476
683
|
inverted = this.chart.inverted,
|
|
477
684
|
borderWidth = pick(options.borderWidth, 1),
|
|
478
|
-
crisper = borderWidth % 2 / 2
|
|
685
|
+
crisper = borderWidth % 2 / 2;
|
|
686
|
+
var widthDifference,
|
|
687
|
+
partialFill,
|
|
479
688
|
yOffset = metrics.offset,
|
|
480
689
|
pointHeight = Math.round(metrics.width),
|
|
481
690
|
dlLeft,
|
|
482
691
|
dlRight,
|
|
483
692
|
dlWidth,
|
|
484
|
-
clipRectWidth
|
|
485
|
-
tooltipYOffset;
|
|
693
|
+
clipRectWidth;
|
|
486
694
|
if (minPointLength) {
|
|
487
695
|
widthDifference = minPointLength - length;
|
|
488
696
|
if (widthDifference < 0) {
|
|
@@ -513,7 +721,7 @@
|
|
|
513
721
|
y: Math.floor(point.plotY + yOffset) + crisper,
|
|
514
722
|
width: x2 - x,
|
|
515
723
|
height: pointHeight,
|
|
516
|
-
r:
|
|
724
|
+
r: this.options.borderRadius
|
|
517
725
|
};
|
|
518
726
|
point.shapeArgs = shapeArgs;
|
|
519
727
|
// Move tooltip to default position
|
|
@@ -546,8 +754,9 @@
|
|
|
546
754
|
var tooltipPos = point.tooltipPos;
|
|
547
755
|
var xIndex = !inverted ? 0 : 1;
|
|
548
756
|
var yIndex = !inverted ? 1 : 0;
|
|
549
|
-
tooltipYOffset =
|
|
550
|
-
|
|
757
|
+
var tooltipYOffset = (this.columnMetrics ?
|
|
758
|
+
this.columnMetrics.offset :
|
|
759
|
+
-metrics.width / 2);
|
|
551
760
|
// Centering tooltip position (#14147)
|
|
552
761
|
if (!inverted) {
|
|
553
762
|
tooltipPos[xIndex] += (xAxis.reversed ? -1 : 0) * shapeArgs.width;
|
|
@@ -568,7 +777,7 @@
|
|
|
568
777
|
partialFill = 0;
|
|
569
778
|
}
|
|
570
779
|
point.partShapeArgs = merge(shapeArgs, {
|
|
571
|
-
r:
|
|
780
|
+
r: this.options.borderRadius
|
|
572
781
|
});
|
|
573
782
|
clipRectWidth = Math.max(Math.round(length * partialFill + point.plotX -
|
|
574
783
|
plotX), 0);
|
|
@@ -584,13 +793,13 @@
|
|
|
584
793
|
};
|
|
585
794
|
/**
|
|
586
795
|
* @private
|
|
587
|
-
* @function Highcharts.Series#translate
|
|
588
796
|
*/
|
|
589
797
|
XRangeSeries.prototype.translate = function () {
|
|
590
|
-
|
|
591
|
-
this.points.
|
|
798
|
+
_super.prototype.translate.apply(this, arguments);
|
|
799
|
+
for (var _i = 0, _a = this.points; _i < _a.length; _i++) {
|
|
800
|
+
var point = _a[_i];
|
|
592
801
|
this.translatePoint(point);
|
|
593
|
-
}
|
|
802
|
+
}
|
|
594
803
|
};
|
|
595
804
|
/**
|
|
596
805
|
* Draws a single point in the series. Needed for partial fill.
|
|
@@ -599,7 +808,6 @@
|
|
|
599
808
|
* original graphic and an overlay displaying the partial fill.
|
|
600
809
|
*
|
|
601
810
|
* @private
|
|
602
|
-
* @function Highcharts.Series#drawPoint
|
|
603
811
|
*
|
|
604
812
|
* @param {Highcharts.Point} point
|
|
605
813
|
* An instance of Point in the series.
|
|
@@ -608,26 +816,24 @@
|
|
|
608
816
|
* 'animate' (animates changes) or 'attr' (sets options)
|
|
609
817
|
*/
|
|
610
818
|
XRangeSeries.prototype.drawPoint = function (point, verb) {
|
|
611
|
-
var
|
|
612
|
-
|
|
613
|
-
renderer = series.chart.renderer,
|
|
614
|
-
graphic = point.graphic,
|
|
819
|
+
var seriesOpts = this.options,
|
|
820
|
+
renderer = this.chart.renderer,
|
|
615
821
|
type = point.shapeType,
|
|
616
822
|
shapeArgs = point.shapeArgs,
|
|
617
823
|
partShapeArgs = point.partShapeArgs,
|
|
618
824
|
clipRectArgs = point.clipRectArgs,
|
|
619
|
-
pfOptions = point.partialFill,
|
|
620
825
|
cutOff = seriesOpts.stacking && !seriesOpts.borderRadius,
|
|
621
826
|
pointState = point.state,
|
|
622
827
|
stateOpts = (seriesOpts.states[pointState || 'normal'] ||
|
|
623
828
|
{}),
|
|
624
829
|
pointStateVerb = typeof pointState === 'undefined' ?
|
|
625
830
|
'attr' : verb,
|
|
626
|
-
pointAttr =
|
|
831
|
+
pointAttr = this.pointAttribs(point,
|
|
627
832
|
pointState),
|
|
628
|
-
animation = pick(
|
|
629
|
-
stateOpts.animation)
|
|
630
|
-
|
|
833
|
+
animation = pick(this.chart.options.chart.animation,
|
|
834
|
+
stateOpts.animation);
|
|
835
|
+
var graphic = point.graphic,
|
|
836
|
+
pfOptions = point.partialFill;
|
|
631
837
|
if (!point.isNull && point.visible !== false) {
|
|
632
838
|
// Original graphic
|
|
633
839
|
if (graphic) { // update
|
|
@@ -636,7 +842,7 @@
|
|
|
636
842
|
else {
|
|
637
843
|
point.graphic = graphic = renderer.g('point')
|
|
638
844
|
.addClass(point.getClassName())
|
|
639
|
-
.add(point.group ||
|
|
845
|
+
.add(point.group || this.group);
|
|
640
846
|
graphic.rect = renderer[type](merge(shapeArgs))
|
|
641
847
|
.addClass(point.getClassName())
|
|
642
848
|
.addClass('highcharts-partfill-original')
|
|
@@ -658,7 +864,7 @@
|
|
|
658
864
|
}
|
|
659
865
|
}
|
|
660
866
|
// Presentational
|
|
661
|
-
if (!
|
|
867
|
+
if (!this.chart.styledMode) {
|
|
662
868
|
graphic
|
|
663
869
|
.rect[verb](pointAttr, animation)
|
|
664
870
|
.shadow(seriesOpts.shadow, null, cutOff);
|
|
@@ -670,10 +876,10 @@
|
|
|
670
876
|
if (isObject(seriesOpts.partialFill)) {
|
|
671
877
|
pfOptions = merge(seriesOpts.partialFill, pfOptions);
|
|
672
878
|
}
|
|
673
|
-
fill = (pfOptions.fill ||
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
879
|
+
var fill = (pfOptions.fill ||
|
|
880
|
+
color(pointAttr.fill).brighten(-0.3).get() ||
|
|
881
|
+
color(point.color || this.color)
|
|
882
|
+
.brighten(-0.3).get());
|
|
677
883
|
pointAttr.fill = fill;
|
|
678
884
|
graphic
|
|
679
885
|
.partRect[pointStateVerb](pointAttr, animation)
|
|
@@ -687,22 +893,20 @@
|
|
|
687
893
|
};
|
|
688
894
|
/**
|
|
689
895
|
* @private
|
|
690
|
-
* @function Highcharts.Series#drawPoints
|
|
691
896
|
*/
|
|
692
897
|
XRangeSeries.prototype.drawPoints = function () {
|
|
693
|
-
var
|
|
694
|
-
verb = series.getAnimationVerb();
|
|
898
|
+
var verb = this.getAnimationVerb();
|
|
695
899
|
// Draw the columns
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
900
|
+
for (var _i = 0, _a = this.points; _i < _a.length; _i++) {
|
|
901
|
+
var point = _a[_i];
|
|
902
|
+
this.drawPoint(point, verb);
|
|
903
|
+
}
|
|
699
904
|
};
|
|
700
905
|
/**
|
|
701
906
|
* Returns "animate", or "attr" if the number of points is above the
|
|
702
907
|
* animation limit.
|
|
703
908
|
*
|
|
704
909
|
* @private
|
|
705
|
-
* @function Highcharts.Series#getAnimationVerb
|
|
706
910
|
*/
|
|
707
911
|
XRangeSeries.prototype.getAnimationVerb = function () {
|
|
708
912
|
return (this.chart.pointCount < (this.options.animationLimit || 250) ?
|
|
@@ -711,118 +915,35 @@
|
|
|
711
915
|
};
|
|
712
916
|
/**
|
|
713
917
|
* @private
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
plotY
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
/* *
|
|
732
|
-
*
|
|
733
|
-
* Static properties
|
|
734
|
-
*
|
|
735
|
-
* */
|
|
736
|
-
/**
|
|
737
|
-
* The X-range series displays ranges on the X axis, typically time
|
|
738
|
-
* intervals with a start and end date.
|
|
739
|
-
*
|
|
740
|
-
* @sample {highcharts} highcharts/demo/x-range/
|
|
741
|
-
* X-range
|
|
742
|
-
* @sample {highcharts} highcharts/css/x-range/
|
|
743
|
-
* Styled mode X-range
|
|
744
|
-
* @sample {highcharts} highcharts/chart/inverted-xrange/
|
|
745
|
-
* Inverted X-range
|
|
746
|
-
*
|
|
747
|
-
* @extends plotOptions.column
|
|
748
|
-
* @since 6.0.0
|
|
749
|
-
* @product highcharts highstock gantt
|
|
750
|
-
* @excluding boostThreshold, crisp, cropThreshold, depth, edgeColor,
|
|
751
|
-
* edgeWidth, findNearestPointBy, getExtremesFromAll,
|
|
752
|
-
* negativeColor, pointInterval, pointIntervalUnit,
|
|
753
|
-
* pointPlacement, pointRange, pointStart, softThreshold,
|
|
754
|
-
* stacking, threshold, data, dataSorting, boostBlending
|
|
755
|
-
* @requires modules/xrange
|
|
756
|
-
* @optionparent plotOptions.xrange
|
|
757
|
-
*/
|
|
758
|
-
XRangeSeries.defaultOptions = merge(ColumnSeries.defaultOptions, {
|
|
759
|
-
/**
|
|
760
|
-
* A partial fill for each point, typically used to visualize how much
|
|
761
|
-
* of a task is performed. The partial fill object can be set either on
|
|
762
|
-
* series or point level.
|
|
763
|
-
*
|
|
764
|
-
* @sample {highcharts} highcharts/demo/x-range
|
|
765
|
-
* X-range with partial fill
|
|
766
|
-
*
|
|
767
|
-
* @product highcharts highstock gantt
|
|
768
|
-
* @apioption plotOptions.xrange.partialFill
|
|
769
|
-
*/
|
|
770
|
-
/**
|
|
771
|
-
* The fill color to be used for partial fills. Defaults to a darker
|
|
772
|
-
* shade of the point color.
|
|
773
|
-
*
|
|
774
|
-
* @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
|
|
775
|
-
* @product highcharts highstock gantt
|
|
776
|
-
* @apioption plotOptions.xrange.partialFill.fill
|
|
777
|
-
*/
|
|
778
|
-
/**
|
|
779
|
-
* A partial fill for each point, typically used to visualize how much
|
|
780
|
-
* of a task is performed. See [completed](series.gantt.data.completed).
|
|
781
|
-
*
|
|
782
|
-
* @sample gantt/demo/progress-indicator
|
|
783
|
-
* Gantt with progress indicator
|
|
784
|
-
*
|
|
785
|
-
* @product gantt
|
|
786
|
-
* @apioption plotOptions.gantt.partialFill
|
|
787
|
-
*/
|
|
788
|
-
/**
|
|
789
|
-
* In an X-range series, this option makes all points of the same Y-axis
|
|
790
|
-
* category the same color.
|
|
791
|
-
*/
|
|
792
|
-
colorByPoint: true,
|
|
793
|
-
dataLabels: {
|
|
794
|
-
formatter: function () {
|
|
795
|
-
var point = this.point,
|
|
796
|
-
amount = point.partialFill;
|
|
797
|
-
if (isObject(amount)) {
|
|
798
|
-
amount = amount.amount;
|
|
799
|
-
}
|
|
800
|
-
if (isNumber(amount) && amount > 0) {
|
|
801
|
-
return correctFloat(amount * 100) + '%';
|
|
802
|
-
}
|
|
803
|
-
},
|
|
804
|
-
inside: true,
|
|
805
|
-
verticalAlign: 'middle'
|
|
806
|
-
},
|
|
807
|
-
tooltip: {
|
|
808
|
-
headerFormat: '<span style="font-size: 10px">{point.x} - {point.x2}</span><br/>',
|
|
809
|
-
pointFormat: '<span style="color:{point.color}">\u25CF</span> {series.name}: <b>{point.yCategory}</b><br/>'
|
|
810
|
-
},
|
|
811
|
-
borderRadius: 3,
|
|
812
|
-
pointRange: 0
|
|
813
|
-
});
|
|
918
|
+
*/
|
|
919
|
+
XRangeSeries.prototype.isPointInside = function (point) {
|
|
920
|
+
var shapeArgs = point.shapeArgs,
|
|
921
|
+
plotX = point.plotX,
|
|
922
|
+
plotY = point.plotY;
|
|
923
|
+
if (!shapeArgs) {
|
|
924
|
+
return _super.prototype.isPointInside.apply(this, arguments);
|
|
925
|
+
}
|
|
926
|
+
var isInside = typeof plotX !== 'undefined' &&
|
|
927
|
+
typeof plotY !== 'undefined' &&
|
|
928
|
+
plotY >= 0 &&
|
|
929
|
+
plotY <= this.yAxis.len &&
|
|
930
|
+
(shapeArgs.x || 0) + (shapeArgs.width || 0) >= 0 &&
|
|
931
|
+
plotX <= this.xAxis.len;
|
|
932
|
+
return isInside;
|
|
933
|
+
};
|
|
934
|
+
XRangeSeries.defaultOptions = merge(ColumnSeries.defaultOptions, XRangeSeriesDefaults);
|
|
814
935
|
return XRangeSeries;
|
|
815
936
|
}(ColumnSeries));
|
|
816
937
|
extend(XRangeSeries.prototype, {
|
|
817
|
-
|
|
818
|
-
parallelArrays: ['x', 'x2', 'y'],
|
|
819
|
-
requireSorting: false,
|
|
820
|
-
animate: Series.prototype.animate,
|
|
938
|
+
pointClass: XRangePoint,
|
|
821
939
|
cropShoulder: 1,
|
|
822
940
|
getExtremesFromAll: true,
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
941
|
+
parallelArrays: ['x', 'x2', 'y'],
|
|
942
|
+
requireSorting: false,
|
|
943
|
+
type: 'xrange',
|
|
944
|
+
animate: seriesProto.animate,
|
|
945
|
+
autoIncrement: noop,
|
|
946
|
+
buildKDTree: noop
|
|
826
947
|
});
|
|
827
948
|
SeriesRegistry.registerSeriesType('xrange', XRangeSeries);
|
|
828
949
|
/* *
|
|
@@ -830,115 +951,6 @@
|
|
|
830
951
|
* Default Export
|
|
831
952
|
*
|
|
832
953
|
* */
|
|
833
|
-
/* *
|
|
834
|
-
*
|
|
835
|
-
* API Options
|
|
836
|
-
*
|
|
837
|
-
* */
|
|
838
|
-
/**
|
|
839
|
-
* An `xrange` series. If the [type](#series.xrange.type) option is not
|
|
840
|
-
* specified, it is inherited from [chart.type](#chart.type).
|
|
841
|
-
*
|
|
842
|
-
* @extends series,plotOptions.xrange
|
|
843
|
-
* @excluding boostThreshold, crisp, cropThreshold, depth, edgeColor, edgeWidth,
|
|
844
|
-
* findNearestPointBy, getExtremesFromAll, negativeColor,
|
|
845
|
-
* pointInterval, pointIntervalUnit, pointPlacement, pointRange,
|
|
846
|
-
* pointStart, softThreshold, stacking, threshold, dataSorting,
|
|
847
|
-
* boostBlending
|
|
848
|
-
* @product highcharts highstock gantt
|
|
849
|
-
* @requires modules/xrange
|
|
850
|
-
* @apioption series.xrange
|
|
851
|
-
*/
|
|
852
|
-
/**
|
|
853
|
-
* An array of data points for the series. For the `xrange` series type,
|
|
854
|
-
* points can be given in the following ways:
|
|
855
|
-
*
|
|
856
|
-
* 1. An array of objects with named values. The objects are point configuration
|
|
857
|
-
* objects as seen below.
|
|
858
|
-
* ```js
|
|
859
|
-
* data: [{
|
|
860
|
-
* x: Date.UTC(2017, 0, 1),
|
|
861
|
-
* x2: Date.UTC(2017, 0, 3),
|
|
862
|
-
* name: "Test",
|
|
863
|
-
* y: 0,
|
|
864
|
-
* color: "#00FF00"
|
|
865
|
-
* }, {
|
|
866
|
-
* x: Date.UTC(2017, 0, 4),
|
|
867
|
-
* x2: Date.UTC(2017, 0, 5),
|
|
868
|
-
* name: "Deploy",
|
|
869
|
-
* y: 1,
|
|
870
|
-
* color: "#FF0000"
|
|
871
|
-
* }]
|
|
872
|
-
* ```
|
|
873
|
-
*
|
|
874
|
-
* @sample {highcharts} highcharts/series/data-array-of-objects/
|
|
875
|
-
* Config objects
|
|
876
|
-
*
|
|
877
|
-
* @declare Highcharts.XrangePointOptionsObject
|
|
878
|
-
* @type {Array<*>}
|
|
879
|
-
* @extends series.line.data
|
|
880
|
-
* @product highcharts highstock gantt
|
|
881
|
-
* @apioption series.xrange.data
|
|
882
|
-
*/
|
|
883
|
-
/**
|
|
884
|
-
* The starting X value of the range point.
|
|
885
|
-
*
|
|
886
|
-
* @sample {highcharts} highcharts/demo/x-range
|
|
887
|
-
* X-range
|
|
888
|
-
*
|
|
889
|
-
* @type {number}
|
|
890
|
-
* @product highcharts highstock gantt
|
|
891
|
-
* @apioption series.xrange.data.x
|
|
892
|
-
*/
|
|
893
|
-
/**
|
|
894
|
-
* The ending X value of the range point.
|
|
895
|
-
*
|
|
896
|
-
* @sample {highcharts} highcharts/demo/x-range
|
|
897
|
-
* X-range
|
|
898
|
-
*
|
|
899
|
-
* @type {number}
|
|
900
|
-
* @product highcharts highstock gantt
|
|
901
|
-
* @apioption series.xrange.data.x2
|
|
902
|
-
*/
|
|
903
|
-
/**
|
|
904
|
-
* The Y value of the range point.
|
|
905
|
-
*
|
|
906
|
-
* @sample {highcharts} highcharts/demo/x-range
|
|
907
|
-
* X-range
|
|
908
|
-
*
|
|
909
|
-
* @type {number}
|
|
910
|
-
* @product highcharts highstock gantt
|
|
911
|
-
* @apioption series.xrange.data.y
|
|
912
|
-
*/
|
|
913
|
-
/**
|
|
914
|
-
* A partial fill for each point, typically used to visualize how much of
|
|
915
|
-
* a task is performed. The partial fill object can be set either on series
|
|
916
|
-
* or point level.
|
|
917
|
-
*
|
|
918
|
-
* @sample {highcharts} highcharts/demo/x-range
|
|
919
|
-
* X-range with partial fill
|
|
920
|
-
*
|
|
921
|
-
* @declare Highcharts.XrangePointPartialFillOptionsObject
|
|
922
|
-
* @product highcharts highstock gantt
|
|
923
|
-
* @apioption series.xrange.data.partialFill
|
|
924
|
-
*/
|
|
925
|
-
/**
|
|
926
|
-
* The amount of the X-range point to be filled. Values can be 0-1 and are
|
|
927
|
-
* converted to percentages in the default data label formatter.
|
|
928
|
-
*
|
|
929
|
-
* @type {number}
|
|
930
|
-
* @product highcharts highstock gantt
|
|
931
|
-
* @apioption series.xrange.data.partialFill.amount
|
|
932
|
-
*/
|
|
933
|
-
/**
|
|
934
|
-
* The fill color to be used for partial fills. Defaults to a darker shade
|
|
935
|
-
* of the point color.
|
|
936
|
-
*
|
|
937
|
-
* @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
|
|
938
|
-
* @product highcharts highstock gantt
|
|
939
|
-
* @apioption series.xrange.data.partialFill.fill
|
|
940
|
-
*/
|
|
941
|
-
''; // adds doclets above to transpiled file
|
|
942
954
|
|
|
943
955
|
return XRangeSeries;
|
|
944
956
|
});
|
|
@@ -1056,7 +1068,7 @@
|
|
|
1056
1068
|
|
|
1057
1069
|
return GanttPoint;
|
|
1058
1070
|
});
|
|
1059
|
-
_registerModule(_modules, 'Core/Axis/BrokenAxis.js', [_modules['
|
|
1071
|
+
_registerModule(_modules, 'Core/Axis/BrokenAxis.js', [_modules['Core/Axis/Stacking/StackItem.js'], _modules['Core/Utilities.js']], function (StackItem, U) {
|
|
1060
1072
|
/* *
|
|
1061
1073
|
*
|
|
1062
1074
|
* (c) 2009-2021 Torstein Honsi
|
|
@@ -2959,7 +2971,7 @@
|
|
|
2959
2971
|
|
|
2960
2972
|
return Tree;
|
|
2961
2973
|
});
|
|
2962
|
-
_registerModule(_modules, 'Core/Axis/TreeGridTick.js', [_modules['Core/Utilities.js']], function (U) {
|
|
2974
|
+
_registerModule(_modules, 'Core/Axis/TreeGrid/TreeGridTick.js', [_modules['Core/Utilities.js']], function (U) {
|
|
2963
2975
|
/* *
|
|
2964
2976
|
*
|
|
2965
2977
|
* (c) 2016 Highsoft AS
|
|
@@ -2975,34 +2987,237 @@
|
|
|
2975
2987
|
isNumber = U.isNumber,
|
|
2976
2988
|
pick = U.pick,
|
|
2977
2989
|
wrap = U.wrap;
|
|
2978
|
-
/*
|
|
2990
|
+
/* *
|
|
2991
|
+
*
|
|
2992
|
+
* Constants
|
|
2993
|
+
*
|
|
2994
|
+
* */
|
|
2995
|
+
var composedClasses = [];
|
|
2996
|
+
/* *
|
|
2997
|
+
*
|
|
2998
|
+
* Functions
|
|
2999
|
+
*
|
|
3000
|
+
* */
|
|
2979
3001
|
/**
|
|
2980
3002
|
* @private
|
|
2981
3003
|
*/
|
|
2982
|
-
|
|
2983
|
-
|
|
2984
|
-
|
|
2985
|
-
|
|
2986
|
-
|
|
2987
|
-
|
|
2988
|
-
|
|
2989
|
-
|
|
2990
|
-
|
|
2991
|
-
|
|
2992
|
-
|
|
2993
|
-
|
|
2994
|
-
|
|
3004
|
+
function onTickInit() {
|
|
3005
|
+
var tick = this;
|
|
3006
|
+
if (!tick.treeGrid) {
|
|
3007
|
+
tick.treeGrid = new TreeGridTickAdditions(tick);
|
|
3008
|
+
}
|
|
3009
|
+
}
|
|
3010
|
+
/**
|
|
3011
|
+
* @private
|
|
3012
|
+
*/
|
|
3013
|
+
function onTickHover(label) {
|
|
3014
|
+
label.addClass('highcharts-treegrid-node-active');
|
|
3015
|
+
if (!label.renderer.styledMode) {
|
|
3016
|
+
label.css({
|
|
3017
|
+
textDecoration: 'underline'
|
|
3018
|
+
});
|
|
3019
|
+
}
|
|
3020
|
+
}
|
|
3021
|
+
/**
|
|
3022
|
+
* @private
|
|
3023
|
+
*/
|
|
3024
|
+
function onTickHoverExit(label, options) {
|
|
3025
|
+
var css = isObject(options.style) ? options.style : {};
|
|
3026
|
+
label.removeClass('highcharts-treegrid-node-active');
|
|
3027
|
+
if (!label.renderer.styledMode) {
|
|
3028
|
+
label.css({ textDecoration: css.textDecoration });
|
|
3029
|
+
}
|
|
3030
|
+
}
|
|
3031
|
+
/**
|
|
3032
|
+
* @private
|
|
3033
|
+
*/
|
|
3034
|
+
function renderLabelIcon(tick, params) {
|
|
3035
|
+
var treeGrid = tick.treeGrid,
|
|
3036
|
+
isNew = !treeGrid.labelIcon,
|
|
3037
|
+
renderer = params.renderer,
|
|
3038
|
+
labelBox = params.xy,
|
|
3039
|
+
options = params.options,
|
|
3040
|
+
width = options.width || 0,
|
|
3041
|
+
height = options.height || 0,
|
|
3042
|
+
iconCenter = {
|
|
3043
|
+
x: labelBox.x - (width / 2) - (options.padding || 0),
|
|
3044
|
+
y: labelBox.y - (height / 2)
|
|
3045
|
+
},
|
|
3046
|
+
rotation = params.collapsed ? 90 : 180,
|
|
3047
|
+
shouldRender = params.show && isNumber(iconCenter.y);
|
|
3048
|
+
var icon = treeGrid.labelIcon;
|
|
3049
|
+
if (!icon) {
|
|
3050
|
+
treeGrid.labelIcon = icon = renderer
|
|
3051
|
+
.path(renderer.symbols[options.type](options.x || 0, options.y || 0, width, height))
|
|
3052
|
+
.addClass('highcharts-label-icon')
|
|
3053
|
+
.add(params.group);
|
|
3054
|
+
}
|
|
3055
|
+
// Set the new position, and show or hide
|
|
3056
|
+
icon[shouldRender ? 'show' : 'hide'](); // #14904, #1338
|
|
3057
|
+
// Presentational attributes
|
|
3058
|
+
if (!renderer.styledMode) {
|
|
3059
|
+
icon
|
|
3060
|
+
.attr({
|
|
3061
|
+
cursor: 'pointer',
|
|
3062
|
+
'fill': pick(params.color, "#666666" /* Palette.neutralColor60 */),
|
|
3063
|
+
'stroke-width': 1,
|
|
3064
|
+
stroke: options.lineColor,
|
|
3065
|
+
strokeWidth: options.lineWidth || 0
|
|
3066
|
+
});
|
|
3067
|
+
}
|
|
3068
|
+
// Update the icon positions
|
|
3069
|
+
icon[isNew ? 'attr' : 'animate']({
|
|
3070
|
+
translateX: iconCenter.x,
|
|
3071
|
+
translateY: iconCenter.y,
|
|
3072
|
+
rotation: rotation
|
|
3073
|
+
});
|
|
3074
|
+
}
|
|
3075
|
+
/**
|
|
3076
|
+
* @private
|
|
3077
|
+
*/
|
|
3078
|
+
function wrapGetLabelPosition(proceed, x, y, label, horiz, labelOptions, tickmarkOffset, index, step) {
|
|
3079
|
+
var tick = this,
|
|
3080
|
+
lbOptions = pick(tick.options && tick.options.labels,
|
|
3081
|
+
labelOptions),
|
|
3082
|
+
pos = tick.pos,
|
|
3083
|
+
axis = tick.axis,
|
|
3084
|
+
options = axis.options,
|
|
3085
|
+
isTreeGrid = options.type === 'treegrid',
|
|
3086
|
+
result = proceed.apply(tick,
|
|
3087
|
+
[x,
|
|
3088
|
+
y,
|
|
3089
|
+
label,
|
|
3090
|
+
horiz,
|
|
3091
|
+
lbOptions,
|
|
3092
|
+
tickmarkOffset,
|
|
3093
|
+
index,
|
|
3094
|
+
step]);
|
|
3095
|
+
var symbolOptions,
|
|
3096
|
+
indentation,
|
|
3097
|
+
mapOfPosToGridNode,
|
|
3098
|
+
node,
|
|
3099
|
+
level;
|
|
3100
|
+
if (isTreeGrid) {
|
|
3101
|
+
symbolOptions = (lbOptions && isObject(lbOptions.symbol, true) ?
|
|
3102
|
+
lbOptions.symbol :
|
|
3103
|
+
{});
|
|
3104
|
+
indentation = (lbOptions && isNumber(lbOptions.indentation) ?
|
|
3105
|
+
lbOptions.indentation :
|
|
3106
|
+
0);
|
|
3107
|
+
mapOfPosToGridNode = axis.treeGrid.mapOfPosToGridNode;
|
|
3108
|
+
node = mapOfPosToGridNode && mapOfPosToGridNode[pos];
|
|
3109
|
+
level = (node && node.depth) || 1;
|
|
3110
|
+
result.x += (
|
|
3111
|
+
// Add space for symbols
|
|
3112
|
+
((symbolOptions.width || 0) +
|
|
3113
|
+
((symbolOptions.padding || 0) * 2)) +
|
|
3114
|
+
// Apply indentation
|
|
3115
|
+
((level - 1) * indentation));
|
|
3116
|
+
}
|
|
3117
|
+
return result;
|
|
3118
|
+
}
|
|
3119
|
+
/**
|
|
3120
|
+
* @private
|
|
3121
|
+
*/
|
|
3122
|
+
function wrapRenderLabel(proceed) {
|
|
3123
|
+
var tick = this, pos = tick.pos, axis = tick.axis, label = tick.label, mapOfPosToGridNode = axis.treeGrid.mapOfPosToGridNode, options = axis.options, labelOptions = pick(tick.options && tick.options.labels, options && options.labels), symbolOptions = (labelOptions && isObject(labelOptions.symbol, true) ?
|
|
3124
|
+
labelOptions.symbol :
|
|
3125
|
+
{}), node = mapOfPosToGridNode && mapOfPosToGridNode[pos], level = node && node.depth, isTreeGrid = options.type === 'treegrid', shouldRender = axis.tickPositions.indexOf(pos) > -1, prefixClassName = 'highcharts-treegrid-node-', styledMode = axis.chart.styledMode;
|
|
3126
|
+
var collapsed,
|
|
3127
|
+
addClassName,
|
|
3128
|
+
removeClassName;
|
|
3129
|
+
if (isTreeGrid && node) {
|
|
3130
|
+
// Add class name for hierarchical styling.
|
|
3131
|
+
if (label &&
|
|
3132
|
+
label.element) {
|
|
3133
|
+
label.addClass(prefixClassName + 'level-' + level);
|
|
3134
|
+
}
|
|
3135
|
+
}
|
|
3136
|
+
proceed.apply(tick, Array.prototype.slice.call(arguments, 1));
|
|
3137
|
+
if (isTreeGrid &&
|
|
3138
|
+
label &&
|
|
3139
|
+
label.element &&
|
|
3140
|
+
node &&
|
|
3141
|
+
node.descendants &&
|
|
3142
|
+
node.descendants > 0) {
|
|
3143
|
+
collapsed = axis.treeGrid.isCollapsed(node);
|
|
3144
|
+
renderLabelIcon(tick, {
|
|
3145
|
+
color: (!styledMode &&
|
|
3146
|
+
label.styles &&
|
|
3147
|
+
label.styles.color ||
|
|
3148
|
+
''),
|
|
3149
|
+
collapsed: collapsed,
|
|
3150
|
+
group: label.parentGroup,
|
|
3151
|
+
options: symbolOptions,
|
|
3152
|
+
renderer: label.renderer,
|
|
3153
|
+
show: shouldRender,
|
|
3154
|
+
xy: label.xy
|
|
3155
|
+
});
|
|
3156
|
+
// Add class name for the node.
|
|
3157
|
+
addClassName = prefixClassName +
|
|
3158
|
+
(collapsed ? 'collapsed' : 'expanded');
|
|
3159
|
+
removeClassName = prefixClassName +
|
|
3160
|
+
(collapsed ? 'expanded' : 'collapsed');
|
|
3161
|
+
label
|
|
3162
|
+
.addClass(addClassName)
|
|
3163
|
+
.removeClass(removeClassName);
|
|
3164
|
+
if (!styledMode) {
|
|
3165
|
+
label.css({
|
|
3166
|
+
cursor: 'pointer'
|
|
3167
|
+
});
|
|
3168
|
+
}
|
|
3169
|
+
// Add events to both label text and icon
|
|
3170
|
+
[label, tick.treeGrid.labelIcon].forEach(function (object) {
|
|
3171
|
+
if (object && !object.attachedTreeGridEvents) {
|
|
3172
|
+
// On hover
|
|
3173
|
+
addEvent(object.element, 'mouseover', function () {
|
|
3174
|
+
onTickHover(label);
|
|
3175
|
+
});
|
|
3176
|
+
// On hover out
|
|
3177
|
+
addEvent(object.element, 'mouseout', function () {
|
|
3178
|
+
onTickHoverExit(label, labelOptions);
|
|
3179
|
+
});
|
|
3180
|
+
addEvent(object.element, 'click', function () {
|
|
3181
|
+
tick.treeGrid.toggleCollapse();
|
|
3182
|
+
});
|
|
3183
|
+
object.attachedTreeGridEvents = true;
|
|
3184
|
+
}
|
|
3185
|
+
});
|
|
3186
|
+
}
|
|
3187
|
+
}
|
|
3188
|
+
/* *
|
|
3189
|
+
*
|
|
3190
|
+
* Classes
|
|
3191
|
+
*
|
|
3192
|
+
* */
|
|
3193
|
+
/**
|
|
3194
|
+
* @private
|
|
3195
|
+
* @class
|
|
3196
|
+
*/
|
|
3197
|
+
var TreeGridTickAdditions = /** @class */ (function () {
|
|
3198
|
+
/* *
|
|
3199
|
+
*
|
|
3200
|
+
* Constructors
|
|
3201
|
+
*
|
|
3202
|
+
* */
|
|
3203
|
+
/**
|
|
3204
|
+
* @private
|
|
3205
|
+
*/
|
|
3206
|
+
function TreeGridTickAdditions(tick) {
|
|
3207
|
+
this.tick = tick;
|
|
3208
|
+
}
|
|
2995
3209
|
/* *
|
|
2996
3210
|
*
|
|
2997
|
-
* Functions
|
|
3211
|
+
* Static Functions
|
|
2998
3212
|
*
|
|
2999
3213
|
* */
|
|
3000
3214
|
/**
|
|
3001
3215
|
* @private
|
|
3002
3216
|
*/
|
|
3003
|
-
function
|
|
3004
|
-
if (
|
|
3005
|
-
|
|
3217
|
+
TreeGridTickAdditions.compose = function (TickClass) {
|
|
3218
|
+
if (composedClasses.indexOf(TickClass) === -1) {
|
|
3219
|
+
composedClasses.push(TickClass);
|
|
3220
|
+
addEvent(TickClass, 'init', onTickInit);
|
|
3006
3221
|
wrap(TickClass.prototype, 'getLabelPosition', wrapGetLabelPosition);
|
|
3007
3222
|
wrap(TickClass.prototype, 'renderLabel', wrapRenderLabel);
|
|
3008
3223
|
// backwards compatibility
|
|
@@ -3015,313 +3230,106 @@
|
|
|
3015
3230
|
TickClass.prototype.toggleCollapse = function (redraw) {
|
|
3016
3231
|
this.treeGrid.toggleCollapse(redraw);
|
|
3017
3232
|
};
|
|
3018
|
-
applied = true;
|
|
3019
|
-
}
|
|
3020
|
-
}
|
|
3021
|
-
TreeGridTick.compose = compose;
|
|
3022
|
-
/**
|
|
3023
|
-
* @private
|
|
3024
|
-
*/
|
|
3025
|
-
function onInit() {
|
|
3026
|
-
var tick = this;
|
|
3027
|
-
if (!tick.treeGrid) {
|
|
3028
|
-
tick.treeGrid = new Additions(tick);
|
|
3029
|
-
}
|
|
3030
|
-
}
|
|
3031
|
-
/**
|
|
3032
|
-
* @private
|
|
3033
|
-
*/
|
|
3034
|
-
function onTickHover(label) {
|
|
3035
|
-
label.addClass('highcharts-treegrid-node-active');
|
|
3036
|
-
if (!label.renderer.styledMode) {
|
|
3037
|
-
label.css({
|
|
3038
|
-
textDecoration: 'underline'
|
|
3039
|
-
});
|
|
3040
|
-
}
|
|
3041
|
-
}
|
|
3042
|
-
/**
|
|
3043
|
-
* @private
|
|
3044
|
-
*/
|
|
3045
|
-
function onTickHoverExit(label, options) {
|
|
3046
|
-
var css = isObject(options.style) ? options.style : {};
|
|
3047
|
-
label.removeClass('highcharts-treegrid-node-active');
|
|
3048
|
-
if (!label.renderer.styledMode) {
|
|
3049
|
-
label.css({ textDecoration: css.textDecoration });
|
|
3050
|
-
}
|
|
3051
|
-
}
|
|
3052
|
-
/**
|
|
3053
|
-
* @private
|
|
3054
|
-
*/
|
|
3055
|
-
function renderLabelIcon(tick, params) {
|
|
3056
|
-
var treeGrid = tick.treeGrid,
|
|
3057
|
-
isNew = !treeGrid.labelIcon,
|
|
3058
|
-
renderer = params.renderer,
|
|
3059
|
-
labelBox = params.xy,
|
|
3060
|
-
options = params.options,
|
|
3061
|
-
width = options.width || 0,
|
|
3062
|
-
height = options.height || 0,
|
|
3063
|
-
iconCenter = {
|
|
3064
|
-
x: labelBox.x - (width / 2) - (options.padding || 0),
|
|
3065
|
-
y: labelBox.y - (height / 2)
|
|
3066
|
-
},
|
|
3067
|
-
rotation = params.collapsed ? 90 : 180,
|
|
3068
|
-
shouldRender = params.show && isNumber(iconCenter.y);
|
|
3069
|
-
var icon = treeGrid.labelIcon;
|
|
3070
|
-
if (!icon) {
|
|
3071
|
-
treeGrid.labelIcon = icon = renderer
|
|
3072
|
-
.path(renderer.symbols[options.type](options.x || 0, options.y || 0, width, height))
|
|
3073
|
-
.addClass('highcharts-label-icon')
|
|
3074
|
-
.add(params.group);
|
|
3075
|
-
}
|
|
3076
|
-
// Set the new position, and show or hide
|
|
3077
|
-
icon[shouldRender ? 'show' : 'hide'](); // #14904, #1338
|
|
3078
|
-
// Presentational attributes
|
|
3079
|
-
if (!renderer.styledMode) {
|
|
3080
|
-
icon
|
|
3081
|
-
.attr({
|
|
3082
|
-
cursor: 'pointer',
|
|
3083
|
-
'fill': pick(params.color, "#666666" /* Palette.neutralColor60 */),
|
|
3084
|
-
'stroke-width': 1,
|
|
3085
|
-
stroke: options.lineColor,
|
|
3086
|
-
strokeWidth: options.lineWidth || 0
|
|
3087
|
-
});
|
|
3088
3233
|
}
|
|
3089
|
-
|
|
3090
|
-
|
|
3091
|
-
|
|
3092
|
-
|
|
3093
|
-
|
|
3094
|
-
|
|
3095
|
-
}
|
|
3234
|
+
};
|
|
3235
|
+
/* *
|
|
3236
|
+
*
|
|
3237
|
+
* Functions
|
|
3238
|
+
*
|
|
3239
|
+
* */
|
|
3096
3240
|
/**
|
|
3241
|
+
* Collapse the grid cell. Used when axis is of type treegrid.
|
|
3242
|
+
*
|
|
3243
|
+
* @see gantt/treegrid-axis/collapsed-dynamically/demo.js
|
|
3244
|
+
*
|
|
3097
3245
|
* @private
|
|
3246
|
+
* @function Highcharts.Tick#collapse
|
|
3247
|
+
*
|
|
3248
|
+
* @param {boolean} [redraw=true]
|
|
3249
|
+
* Whether to redraw the chart or wait for an explicit call to
|
|
3250
|
+
* {@link Highcharts.Chart#redraw}
|
|
3098
3251
|
*/
|
|
3099
|
-
function
|
|
3100
|
-
var tick = this,
|
|
3101
|
-
lbOptions = pick(tick.options && tick.options.labels,
|
|
3102
|
-
labelOptions),
|
|
3103
|
-
pos = tick.pos,
|
|
3252
|
+
TreeGridTickAdditions.prototype.collapse = function (redraw) {
|
|
3253
|
+
var tick = this.tick,
|
|
3104
3254
|
axis = tick.axis,
|
|
3105
|
-
|
|
3106
|
-
|
|
3107
|
-
|
|
3108
|
-
|
|
3109
|
-
|
|
3110
|
-
|
|
3111
|
-
|
|
3112
|
-
|
|
3113
|
-
|
|
3114
|
-
index,
|
|
3115
|
-
step]);
|
|
3116
|
-
var symbolOptions,
|
|
3117
|
-
indentation,
|
|
3118
|
-
mapOfPosToGridNode,
|
|
3119
|
-
node,
|
|
3120
|
-
level;
|
|
3121
|
-
if (isTreeGrid) {
|
|
3122
|
-
symbolOptions = (lbOptions && isObject(lbOptions.symbol, true) ?
|
|
3123
|
-
lbOptions.symbol :
|
|
3124
|
-
{});
|
|
3125
|
-
indentation = (lbOptions && isNumber(lbOptions.indentation) ?
|
|
3126
|
-
lbOptions.indentation :
|
|
3127
|
-
0);
|
|
3128
|
-
mapOfPosToGridNode = axis.treeGrid.mapOfPosToGridNode;
|
|
3129
|
-
node = mapOfPosToGridNode && mapOfPosToGridNode[pos];
|
|
3130
|
-
level = (node && node.depth) || 1;
|
|
3131
|
-
result.x += (
|
|
3132
|
-
// Add space for symbols
|
|
3133
|
-
((symbolOptions.width || 0) +
|
|
3134
|
-
((symbolOptions.padding || 0) * 2)) +
|
|
3135
|
-
// Apply indentation
|
|
3136
|
-
((level - 1) * indentation));
|
|
3137
|
-
}
|
|
3138
|
-
return result;
|
|
3139
|
-
}
|
|
3255
|
+
brokenAxis = axis.brokenAxis;
|
|
3256
|
+
if (brokenAxis &&
|
|
3257
|
+
axis.treeGrid.mapOfPosToGridNode) {
|
|
3258
|
+
var pos = tick.pos,
|
|
3259
|
+
node = axis.treeGrid.mapOfPosToGridNode[pos],
|
|
3260
|
+
breaks = axis.treeGrid.collapse(node);
|
|
3261
|
+
brokenAxis.setBreaks(breaks, pick(redraw, true));
|
|
3262
|
+
}
|
|
3263
|
+
};
|
|
3140
3264
|
/**
|
|
3265
|
+
* Destroy remaining labelIcon if exist.
|
|
3266
|
+
*
|
|
3141
3267
|
* @private
|
|
3268
|
+
* @function Highcharts.Tick#destroy
|
|
3142
3269
|
*/
|
|
3143
|
-
function
|
|
3144
|
-
|
|
3145
|
-
|
|
3146
|
-
{}), node = mapOfPosToGridNode && mapOfPosToGridNode[pos], level = node && node.depth, isTreeGrid = options.type === 'treegrid', shouldRender = axis.tickPositions.indexOf(pos) > -1, prefixClassName = 'highcharts-treegrid-node-', styledMode = axis.chart.styledMode;
|
|
3147
|
-
var collapsed,
|
|
3148
|
-
addClassName,
|
|
3149
|
-
removeClassName;
|
|
3150
|
-
if (isTreeGrid && node) {
|
|
3151
|
-
// Add class name for hierarchical styling.
|
|
3152
|
-
if (label &&
|
|
3153
|
-
label.element) {
|
|
3154
|
-
label.addClass(prefixClassName + 'level-' + level);
|
|
3155
|
-
}
|
|
3156
|
-
}
|
|
3157
|
-
proceed.apply(tick, Array.prototype.slice.call(arguments, 1));
|
|
3158
|
-
if (isTreeGrid &&
|
|
3159
|
-
label &&
|
|
3160
|
-
label.element &&
|
|
3161
|
-
node &&
|
|
3162
|
-
node.descendants &&
|
|
3163
|
-
node.descendants > 0) {
|
|
3164
|
-
collapsed = axis.treeGrid.isCollapsed(node);
|
|
3165
|
-
renderLabelIcon(tick, {
|
|
3166
|
-
color: (!styledMode &&
|
|
3167
|
-
label.styles &&
|
|
3168
|
-
label.styles.color ||
|
|
3169
|
-
''),
|
|
3170
|
-
collapsed: collapsed,
|
|
3171
|
-
group: label.parentGroup,
|
|
3172
|
-
options: symbolOptions,
|
|
3173
|
-
renderer: label.renderer,
|
|
3174
|
-
show: shouldRender,
|
|
3175
|
-
xy: label.xy
|
|
3176
|
-
});
|
|
3177
|
-
// Add class name for the node.
|
|
3178
|
-
addClassName = prefixClassName +
|
|
3179
|
-
(collapsed ? 'collapsed' : 'expanded');
|
|
3180
|
-
removeClassName = prefixClassName +
|
|
3181
|
-
(collapsed ? 'expanded' : 'collapsed');
|
|
3182
|
-
label
|
|
3183
|
-
.addClass(addClassName)
|
|
3184
|
-
.removeClass(removeClassName);
|
|
3185
|
-
if (!styledMode) {
|
|
3186
|
-
label.css({
|
|
3187
|
-
cursor: 'pointer'
|
|
3188
|
-
});
|
|
3189
|
-
}
|
|
3190
|
-
// Add events to both label text and icon
|
|
3191
|
-
[label, tick.treeGrid.labelIcon].forEach(function (object) {
|
|
3192
|
-
if (object && !object.attachedTreeGridEvents) {
|
|
3193
|
-
// On hover
|
|
3194
|
-
addEvent(object.element, 'mouseover', function () {
|
|
3195
|
-
onTickHover(label);
|
|
3196
|
-
});
|
|
3197
|
-
// On hover out
|
|
3198
|
-
addEvent(object.element, 'mouseout', function () {
|
|
3199
|
-
onTickHoverExit(label, labelOptions);
|
|
3200
|
-
});
|
|
3201
|
-
addEvent(object.element, 'click', function () {
|
|
3202
|
-
tick.treeGrid.toggleCollapse();
|
|
3203
|
-
});
|
|
3204
|
-
object.attachedTreeGridEvents = true;
|
|
3205
|
-
}
|
|
3206
|
-
});
|
|
3270
|
+
TreeGridTickAdditions.prototype.destroy = function () {
|
|
3271
|
+
if (this.labelIcon) {
|
|
3272
|
+
this.labelIcon.destroy();
|
|
3207
3273
|
}
|
|
3208
|
-
}
|
|
3209
|
-
|
|
3274
|
+
};
|
|
3275
|
+
/**
|
|
3276
|
+
* Expand the grid cell. Used when axis is of type treegrid.
|
|
3210
3277
|
*
|
|
3211
|
-
*
|
|
3278
|
+
* @see gantt/treegrid-axis/collapsed-dynamically/demo.js
|
|
3212
3279
|
*
|
|
3213
|
-
*
|
|
3280
|
+
* @private
|
|
3281
|
+
* @function Highcharts.Tick#expand
|
|
3282
|
+
*
|
|
3283
|
+
* @param {boolean} [redraw=true]
|
|
3284
|
+
* Whether to redraw the chart or wait for an explicit call to
|
|
3285
|
+
* {@link Highcharts.Chart#redraw}
|
|
3286
|
+
*/
|
|
3287
|
+
TreeGridTickAdditions.prototype.expand = function (redraw) {
|
|
3288
|
+
var tick = this.tick,
|
|
3289
|
+
axis = tick.axis,
|
|
3290
|
+
brokenAxis = axis.brokenAxis;
|
|
3291
|
+
if (brokenAxis &&
|
|
3292
|
+
axis.treeGrid.mapOfPosToGridNode) {
|
|
3293
|
+
var pos = tick.pos,
|
|
3294
|
+
node = axis.treeGrid.mapOfPosToGridNode[pos],
|
|
3295
|
+
breaks = axis.treeGrid.expand(node);
|
|
3296
|
+
brokenAxis.setBreaks(breaks, pick(redraw, true));
|
|
3297
|
+
}
|
|
3298
|
+
};
|
|
3214
3299
|
/**
|
|
3300
|
+
* Toggle the collapse/expand state of the grid cell. Used when axis is
|
|
3301
|
+
* of type treegrid.
|
|
3302
|
+
*
|
|
3303
|
+
* @see gantt/treegrid-axis/collapsed-dynamically/demo.js
|
|
3304
|
+
*
|
|
3215
3305
|
* @private
|
|
3216
|
-
* @
|
|
3306
|
+
* @function Highcharts.Tick#toggleCollapse
|
|
3307
|
+
*
|
|
3308
|
+
* @param {boolean} [redraw=true]
|
|
3309
|
+
* Whether to redraw the chart or wait for an explicit call to
|
|
3310
|
+
* {@link Highcharts.Chart#redraw}
|
|
3217
3311
|
*/
|
|
3218
|
-
|
|
3219
|
-
|
|
3220
|
-
|
|
3221
|
-
|
|
3222
|
-
|
|
3223
|
-
|
|
3224
|
-
|
|
3225
|
-
|
|
3226
|
-
|
|
3227
|
-
|
|
3228
|
-
this.tick = tick;
|
|
3312
|
+
TreeGridTickAdditions.prototype.toggleCollapse = function (redraw) {
|
|
3313
|
+
var tick = this.tick,
|
|
3314
|
+
axis = tick.axis,
|
|
3315
|
+
brokenAxis = axis.brokenAxis;
|
|
3316
|
+
if (brokenAxis &&
|
|
3317
|
+
axis.treeGrid.mapOfPosToGridNode) {
|
|
3318
|
+
var pos = tick.pos,
|
|
3319
|
+
node = axis.treeGrid.mapOfPosToGridNode[pos],
|
|
3320
|
+
breaks = axis.treeGrid.toggleCollapse(node);
|
|
3321
|
+
brokenAxis.setBreaks(breaks, pick(redraw, true));
|
|
3229
3322
|
}
|
|
3230
|
-
|
|
3231
|
-
|
|
3232
|
-
|
|
3233
|
-
|
|
3234
|
-
|
|
3235
|
-
|
|
3236
|
-
|
|
3237
|
-
|
|
3238
|
-
* @see gantt/treegrid-axis/collapsed-dynamically/demo.js
|
|
3239
|
-
*
|
|
3240
|
-
* @private
|
|
3241
|
-
* @function Highcharts.Tick#collapse
|
|
3242
|
-
*
|
|
3243
|
-
* @param {boolean} [redraw=true]
|
|
3244
|
-
* Whether to redraw the chart or wait for an explicit call to
|
|
3245
|
-
* {@link Highcharts.Chart#redraw}
|
|
3246
|
-
*/
|
|
3247
|
-
Additions.prototype.collapse = function (redraw) {
|
|
3248
|
-
var tick = this.tick,
|
|
3249
|
-
axis = tick.axis,
|
|
3250
|
-
brokenAxis = axis.brokenAxis;
|
|
3251
|
-
if (brokenAxis &&
|
|
3252
|
-
axis.treeGrid.mapOfPosToGridNode) {
|
|
3253
|
-
var pos = tick.pos,
|
|
3254
|
-
node = axis.treeGrid.mapOfPosToGridNode[pos],
|
|
3255
|
-
breaks = axis.treeGrid.collapse(node);
|
|
3256
|
-
brokenAxis.setBreaks(breaks, pick(redraw, true));
|
|
3257
|
-
}
|
|
3258
|
-
};
|
|
3259
|
-
/**
|
|
3260
|
-
* Destroy remaining labelIcon if exist.
|
|
3261
|
-
*
|
|
3262
|
-
* @private
|
|
3263
|
-
* @function Highcharts.Tick#destroy
|
|
3264
|
-
*/
|
|
3265
|
-
Additions.prototype.destroy = function () {
|
|
3266
|
-
if (this.labelIcon) {
|
|
3267
|
-
this.labelIcon.destroy();
|
|
3268
|
-
}
|
|
3269
|
-
};
|
|
3270
|
-
/**
|
|
3271
|
-
* Expand the grid cell. Used when axis is of type treegrid.
|
|
3272
|
-
*
|
|
3273
|
-
* @see gantt/treegrid-axis/collapsed-dynamically/demo.js
|
|
3274
|
-
*
|
|
3275
|
-
* @private
|
|
3276
|
-
* @function Highcharts.Tick#expand
|
|
3277
|
-
*
|
|
3278
|
-
* @param {boolean} [redraw=true]
|
|
3279
|
-
* Whether to redraw the chart or wait for an explicit call to
|
|
3280
|
-
* {@link Highcharts.Chart#redraw}
|
|
3281
|
-
*/
|
|
3282
|
-
Additions.prototype.expand = function (redraw) {
|
|
3283
|
-
var tick = this.tick,
|
|
3284
|
-
axis = tick.axis,
|
|
3285
|
-
brokenAxis = axis.brokenAxis;
|
|
3286
|
-
if (brokenAxis &&
|
|
3287
|
-
axis.treeGrid.mapOfPosToGridNode) {
|
|
3288
|
-
var pos = tick.pos,
|
|
3289
|
-
node = axis.treeGrid.mapOfPosToGridNode[pos],
|
|
3290
|
-
breaks = axis.treeGrid.expand(node);
|
|
3291
|
-
brokenAxis.setBreaks(breaks, pick(redraw, true));
|
|
3292
|
-
}
|
|
3293
|
-
};
|
|
3294
|
-
/**
|
|
3295
|
-
* Toggle the collapse/expand state of the grid cell. Used when axis is
|
|
3296
|
-
* of type treegrid.
|
|
3297
|
-
*
|
|
3298
|
-
* @see gantt/treegrid-axis/collapsed-dynamically/demo.js
|
|
3299
|
-
*
|
|
3300
|
-
* @private
|
|
3301
|
-
* @function Highcharts.Tick#toggleCollapse
|
|
3302
|
-
*
|
|
3303
|
-
* @param {boolean} [redraw=true]
|
|
3304
|
-
* Whether to redraw the chart or wait for an explicit call to
|
|
3305
|
-
* {@link Highcharts.Chart#redraw}
|
|
3306
|
-
*/
|
|
3307
|
-
Additions.prototype.toggleCollapse = function (redraw) {
|
|
3308
|
-
var tick = this.tick,
|
|
3309
|
-
axis = tick.axis,
|
|
3310
|
-
brokenAxis = axis.brokenAxis;
|
|
3311
|
-
if (brokenAxis &&
|
|
3312
|
-
axis.treeGrid.mapOfPosToGridNode) {
|
|
3313
|
-
var pos = tick.pos,
|
|
3314
|
-
node = axis.treeGrid.mapOfPosToGridNode[pos],
|
|
3315
|
-
breaks = axis.treeGrid.toggleCollapse(node);
|
|
3316
|
-
brokenAxis.setBreaks(breaks, pick(redraw, true));
|
|
3317
|
-
}
|
|
3318
|
-
};
|
|
3319
|
-
return Additions;
|
|
3320
|
-
}());
|
|
3321
|
-
TreeGridTick.Additions = Additions;
|
|
3322
|
-
})(TreeGridTick || (TreeGridTick = {}));
|
|
3323
|
+
};
|
|
3324
|
+
return TreeGridTickAdditions;
|
|
3325
|
+
}());
|
|
3326
|
+
/* *
|
|
3327
|
+
*
|
|
3328
|
+
* Default Export
|
|
3329
|
+
*
|
|
3330
|
+
* */
|
|
3323
3331
|
|
|
3324
|
-
return
|
|
3332
|
+
return TreeGridTickAdditions;
|
|
3325
3333
|
});
|
|
3326
3334
|
_registerModule(_modules, 'Series/TreeUtilities.js', [_modules['Core/Color/Color.js'], _modules['Core/Utilities.js']], function (Color, U) {
|
|
3327
3335
|
/* *
|
|
@@ -3553,7 +3561,7 @@
|
|
|
3553
3561
|
|
|
3554
3562
|
return TreeUtilities;
|
|
3555
3563
|
});
|
|
3556
|
-
_registerModule(_modules, 'Core/Axis/TreeGridAxis.js', [_modules['Core/Axis/BrokenAxis.js'], _modules['Core/Axis/GridAxis.js'], _modules['Gantt/Tree.js'], _modules['Core/Axis/TreeGridTick.js'], _modules['Series/TreeUtilities.js'], _modules['Core/Utilities.js']], function (BrokenAxis, GridAxis, Tree, TreeGridTick, TU, U) {
|
|
3564
|
+
_registerModule(_modules, 'Core/Axis/TreeGrid/TreeGridAxis.js', [_modules['Core/Axis/BrokenAxis.js'], _modules['Core/Axis/GridAxis.js'], _modules['Gantt/Tree.js'], _modules['Core/Axis/TreeGrid/TreeGridTick.js'], _modules['Series/TreeUtilities.js'], _modules['Core/Utilities.js']], function (BrokenAxis, GridAxis, Tree, TreeGridTick, TU, U) {
|
|
3557
3565
|
/* *
|
|
3558
3566
|
*
|
|
3559
3567
|
* (c) 2016 Highsoft AS
|
|
@@ -3574,755 +3582,767 @@
|
|
|
3574
3582
|
merge = U.merge,
|
|
3575
3583
|
pick = U.pick,
|
|
3576
3584
|
wrap = U.wrap;
|
|
3585
|
+
/* *
|
|
3586
|
+
*
|
|
3587
|
+
* Constants
|
|
3588
|
+
*
|
|
3589
|
+
* */
|
|
3590
|
+
var composedClasses = [];
|
|
3591
|
+
/* *
|
|
3592
|
+
*
|
|
3593
|
+
* Variables
|
|
3594
|
+
*
|
|
3595
|
+
* */
|
|
3596
|
+
var TickConstructor;
|
|
3597
|
+
/* *
|
|
3598
|
+
*
|
|
3599
|
+
* Functions
|
|
3600
|
+
*
|
|
3601
|
+
* */
|
|
3577
3602
|
/**
|
|
3578
3603
|
* @private
|
|
3579
3604
|
*/
|
|
3580
|
-
|
|
3581
|
-
|
|
3582
|
-
|
|
3583
|
-
|
|
3584
|
-
|
|
3585
|
-
|
|
3586
|
-
|
|
3587
|
-
|
|
3588
|
-
|
|
3589
|
-
|
|
3590
|
-
|
|
3591
|
-
|
|
3592
|
-
|
|
3605
|
+
function getBreakFromNode(node, max) {
|
|
3606
|
+
var to = node.collapseEnd || 0;
|
|
3607
|
+
var from = node.collapseStart || 0;
|
|
3608
|
+
// In broken-axis, the axis.max is minimized until it is not within a
|
|
3609
|
+
// break. Therefore, if break.to is larger than axis.max, the axis.to
|
|
3610
|
+
// should not add the 0.5 axis.tickMarkOffset, to avoid adding a break
|
|
3611
|
+
// larger than axis.max.
|
|
3612
|
+
// TODO consider simplifying broken-axis and this might solve itself
|
|
3613
|
+
if (to >= max) {
|
|
3614
|
+
from -= 0.5;
|
|
3615
|
+
}
|
|
3616
|
+
return {
|
|
3617
|
+
from: from,
|
|
3618
|
+
to: to,
|
|
3619
|
+
showPoints: false
|
|
3620
|
+
};
|
|
3621
|
+
}
|
|
3622
|
+
/**
|
|
3623
|
+
* Creates a tree structure of the data, and the treegrid. Calculates
|
|
3624
|
+
* categories, and y-values of points based on the tree.
|
|
3625
|
+
*
|
|
3626
|
+
* @private
|
|
3627
|
+
* @function getTreeGridFromData
|
|
3628
|
+
*
|
|
3629
|
+
* @param {Array<Highcharts.GanttPointOptions>} data
|
|
3630
|
+
* All the data points to display in the axis.
|
|
3631
|
+
*
|
|
3632
|
+
* @param {boolean} uniqueNames
|
|
3633
|
+
* Whether or not the data node with the same name should share grid cell. If
|
|
3634
|
+
* true they do share cell. False by default.
|
|
3635
|
+
*
|
|
3636
|
+
* @param {number} numberOfSeries
|
|
3637
|
+
*
|
|
3638
|
+
* @return {Object}
|
|
3639
|
+
* Returns an object containing categories, mapOfIdToNode,
|
|
3640
|
+
* mapOfPosToGridNode, and tree.
|
|
3641
|
+
*
|
|
3642
|
+
* @todo There should be only one point per line.
|
|
3643
|
+
* @todo It should be optional to have one category per point, or merge
|
|
3644
|
+
* cells
|
|
3645
|
+
* @todo Add unit-tests.
|
|
3646
|
+
*/
|
|
3647
|
+
function getTreeGridFromData(data, uniqueNames, numberOfSeries) {
|
|
3648
|
+
var categories = [],
|
|
3649
|
+
collapsedNodes = [],
|
|
3650
|
+
mapOfIdToNode = {},
|
|
3651
|
+
uniqueNamesEnabled = typeof uniqueNames === 'boolean' ?
|
|
3652
|
+
uniqueNames : false;
|
|
3653
|
+
var mapOfPosToGridNode = {},
|
|
3654
|
+
posIterator = -1;
|
|
3655
|
+
// Build the tree from the series data.
|
|
3656
|
+
var treeParams = {
|
|
3657
|
+
// After the children has been created.
|
|
3658
|
+
after: function (node) {
|
|
3659
|
+
var gridNode = mapOfPosToGridNode[node.pos];
|
|
3660
|
+
var height = 0,
|
|
3661
|
+
descendants = 0;
|
|
3662
|
+
gridNode.children.forEach(function (child) {
|
|
3663
|
+
descendants += (child.descendants || 0) + 1;
|
|
3664
|
+
height = Math.max((child.height || 0) + 1, height);
|
|
3665
|
+
});
|
|
3666
|
+
gridNode.descendants = descendants;
|
|
3667
|
+
gridNode.height = height;
|
|
3668
|
+
if (gridNode.collapsed) {
|
|
3669
|
+
collapsedNodes.push(gridNode);
|
|
3670
|
+
}
|
|
3671
|
+
},
|
|
3672
|
+
// Before the children has been created.
|
|
3673
|
+
before: function (node) {
|
|
3674
|
+
var data = isObject(node.data,
|
|
3675
|
+
true) ?
|
|
3676
|
+
node.data :
|
|
3677
|
+
{},
|
|
3678
|
+
name = isString(data.name) ? data.name : '',
|
|
3679
|
+
parentNode = mapOfIdToNode[node.parent],
|
|
3680
|
+
parentGridNode = (isObject(parentNode,
|
|
3681
|
+
true) ?
|
|
3682
|
+
mapOfPosToGridNode[parentNode.pos] :
|
|
3683
|
+
null),
|
|
3684
|
+
hasSameName = function (x) {
|
|
3685
|
+
return x.name === name;
|
|
3686
|
+
};
|
|
3687
|
+
var gridNode,
|
|
3688
|
+
pos;
|
|
3689
|
+
// If not unique names, look for sibling node with the same name
|
|
3690
|
+
if (uniqueNamesEnabled &&
|
|
3691
|
+
isObject(parentGridNode, true) &&
|
|
3692
|
+
!!(gridNode = find(parentGridNode.children, hasSameName))) {
|
|
3693
|
+
// If there is a gridNode with the same name, reuse position
|
|
3694
|
+
pos = gridNode.pos;
|
|
3695
|
+
// Add data node to list of nodes in the grid node.
|
|
3696
|
+
gridNode.nodes.push(node);
|
|
3697
|
+
}
|
|
3698
|
+
else {
|
|
3699
|
+
// If it is a new grid node, increment position.
|
|
3700
|
+
pos = posIterator++;
|
|
3701
|
+
}
|
|
3702
|
+
// Add new grid node to map.
|
|
3703
|
+
if (!mapOfPosToGridNode[pos]) {
|
|
3704
|
+
mapOfPosToGridNode[pos] = gridNode = {
|
|
3705
|
+
depth: parentGridNode ? parentGridNode.depth + 1 : 0,
|
|
3706
|
+
name: name,
|
|
3707
|
+
id: data.id,
|
|
3708
|
+
nodes: [node],
|
|
3709
|
+
children: [],
|
|
3710
|
+
pos: pos
|
|
3711
|
+
};
|
|
3712
|
+
// If not root, then add name to categories.
|
|
3713
|
+
if (pos !== -1) {
|
|
3714
|
+
categories.push(name);
|
|
3715
|
+
}
|
|
3716
|
+
// Add name to list of children.
|
|
3717
|
+
if (isObject(parentGridNode, true)) {
|
|
3718
|
+
parentGridNode.children.push(gridNode);
|
|
3719
|
+
}
|
|
3720
|
+
}
|
|
3721
|
+
// Add data node to map
|
|
3722
|
+
if (isString(node.id)) {
|
|
3723
|
+
mapOfIdToNode[node.id] = node;
|
|
3724
|
+
}
|
|
3725
|
+
// If one of the points are collapsed, then start the grid node
|
|
3726
|
+
// in collapsed state.
|
|
3727
|
+
if (gridNode &&
|
|
3728
|
+
data.collapsed === true) {
|
|
3729
|
+
gridNode.collapsed = true;
|
|
3730
|
+
}
|
|
3731
|
+
// Assign pos to data node
|
|
3732
|
+
node.pos = pos;
|
|
3733
|
+
}
|
|
3734
|
+
};
|
|
3735
|
+
var updateYValuesAndTickPos = function (map,
|
|
3736
|
+
numberOfSeries) {
|
|
3737
|
+
var setValues = function (gridNode,
|
|
3738
|
+
start,
|
|
3739
|
+
result) {
|
|
3740
|
+
var nodes = gridNode.nodes,
|
|
3741
|
+
padding = 0.5;
|
|
3742
|
+
var end = start + (start === -1 ? 0 : numberOfSeries - 1);
|
|
3743
|
+
var diff = (end - start) / 2,
|
|
3744
|
+
pos = start + diff;
|
|
3745
|
+
nodes.forEach(function (node) {
|
|
3746
|
+
var data = node.data;
|
|
3747
|
+
if (isObject(data, true)) {
|
|
3748
|
+
// Update point
|
|
3749
|
+
data.y = start + (data.seriesIndex || 0);
|
|
3750
|
+
// Remove the property once used
|
|
3751
|
+
delete data.seriesIndex;
|
|
3752
|
+
}
|
|
3753
|
+
node.pos = pos;
|
|
3754
|
+
});
|
|
3755
|
+
result[pos] = gridNode;
|
|
3756
|
+
gridNode.pos = pos;
|
|
3757
|
+
gridNode.tickmarkOffset = diff + padding;
|
|
3758
|
+
gridNode.collapseStart = end + padding;
|
|
3759
|
+
gridNode.children.forEach(function (child) {
|
|
3760
|
+
setValues(child, end + 1, result);
|
|
3761
|
+
end = (child.collapseEnd || 0) - padding;
|
|
3762
|
+
});
|
|
3763
|
+
// Set collapseEnd to the end of the last child node.
|
|
3764
|
+
gridNode.collapseEnd = end + padding;
|
|
3765
|
+
return result;
|
|
3766
|
+
};
|
|
3767
|
+
return setValues(map['-1'], -1, {});
|
|
3768
|
+
};
|
|
3769
|
+
// Create tree from data
|
|
3770
|
+
var tree = Tree.getTree(data,
|
|
3771
|
+
treeParams);
|
|
3772
|
+
// Update y values of data, and set calculate tick positions.
|
|
3773
|
+
mapOfPosToGridNode = updateYValuesAndTickPos(mapOfPosToGridNode, numberOfSeries);
|
|
3774
|
+
// Return the resulting data.
|
|
3775
|
+
return {
|
|
3776
|
+
categories: categories,
|
|
3777
|
+
mapOfIdToNode: mapOfIdToNode,
|
|
3778
|
+
mapOfPosToGridNode: mapOfPosToGridNode,
|
|
3779
|
+
collapsedNodes: collapsedNodes,
|
|
3780
|
+
tree: tree
|
|
3781
|
+
};
|
|
3782
|
+
}
|
|
3783
|
+
/**
|
|
3784
|
+
* Builds the tree of categories and calculates its positions.
|
|
3785
|
+
* @private
|
|
3786
|
+
* @param {Object} e Event object
|
|
3787
|
+
* @param {Object} e.target The chart instance which the event was fired on.
|
|
3788
|
+
* @param {object[]} e.target.axes The axes of the chart.
|
|
3789
|
+
*/
|
|
3790
|
+
function onBeforeRender(e) {
|
|
3791
|
+
var chart = e.target,
|
|
3792
|
+
axes = chart.axes;
|
|
3793
|
+
axes.filter(function (axis) {
|
|
3794
|
+
return axis.options.type === 'treegrid';
|
|
3795
|
+
}).forEach(function (axis) {
|
|
3796
|
+
var options = axis.options || {},
|
|
3797
|
+
labelOptions = options.labels,
|
|
3798
|
+
uniqueNames = options.uniqueNames,
|
|
3799
|
+
max = options.max,
|
|
3800
|
+
// Check whether any of series is rendering for the first
|
|
3801
|
+
// time, visibility has changed, or its data is dirty, and
|
|
3802
|
+
// only then update. #10570, #10580. Also check if
|
|
3803
|
+
// mapOfPosToGridNode exists. #10887
|
|
3804
|
+
isDirty = (!axis.treeGrid.mapOfPosToGridNode ||
|
|
3805
|
+
axis.series.some(function (series) {
|
|
3806
|
+
return !series.hasRendered ||
|
|
3807
|
+
series.isDirtyData ||
|
|
3808
|
+
series.isDirty;
|
|
3809
|
+
}));
|
|
3810
|
+
var numberOfSeries = 0,
|
|
3811
|
+
data,
|
|
3812
|
+
treeGrid;
|
|
3813
|
+
if (isDirty) {
|
|
3814
|
+
// Concatenate data from all series assigned to this axis.
|
|
3815
|
+
data = axis.series.reduce(function (arr, s) {
|
|
3816
|
+
if (s.visible) {
|
|
3817
|
+
// Push all data to array
|
|
3818
|
+
(s.options.data || []).forEach(function (data) {
|
|
3819
|
+
// For using keys - rebuild the data structure
|
|
3820
|
+
if (s.options.keys && s.options.keys.length) {
|
|
3821
|
+
data = s.pointClass.prototype
|
|
3822
|
+
.optionsToObject
|
|
3823
|
+
.call({ series: s }, data);
|
|
3824
|
+
s.pointClass.setGanttPointAliases(data);
|
|
3825
|
+
}
|
|
3826
|
+
if (isObject(data, true)) {
|
|
3827
|
+
// Set series index on data. Removed again
|
|
3828
|
+
// after use.
|
|
3829
|
+
data.seriesIndex = (numberOfSeries);
|
|
3830
|
+
arr.push(data);
|
|
3831
|
+
}
|
|
3832
|
+
});
|
|
3833
|
+
// Increment series index
|
|
3834
|
+
if (uniqueNames === true) {
|
|
3835
|
+
numberOfSeries++;
|
|
3836
|
+
}
|
|
3837
|
+
}
|
|
3838
|
+
return arr;
|
|
3839
|
+
}, []);
|
|
3840
|
+
// If max is higher than set data - add a
|
|
3841
|
+
// dummy data to render categories #10779
|
|
3842
|
+
if (max && data.length < max) {
|
|
3843
|
+
for (var i = data.length; i <= max; i++) {
|
|
3844
|
+
data.push({
|
|
3845
|
+
// Use the zero-width character
|
|
3846
|
+
// to avoid conflict with uniqueNames
|
|
3847
|
+
name: i + '\u200B'
|
|
3848
|
+
});
|
|
3849
|
+
}
|
|
3850
|
+
}
|
|
3851
|
+
// setScale is fired after all the series is initialized,
|
|
3852
|
+
// which is an ideal time to update the axis.categories.
|
|
3853
|
+
treeGrid = getTreeGridFromData(data, uniqueNames || false, (uniqueNames === true) ? numberOfSeries : 1);
|
|
3854
|
+
// Assign values to the axis.
|
|
3855
|
+
axis.categories = treeGrid.categories;
|
|
3856
|
+
axis.treeGrid.mapOfPosToGridNode = (treeGrid.mapOfPosToGridNode);
|
|
3857
|
+
axis.hasNames = true;
|
|
3858
|
+
axis.treeGrid.tree = treeGrid.tree;
|
|
3859
|
+
// Update yData now that we have calculated the y values
|
|
3860
|
+
axis.series.forEach(function (series) {
|
|
3861
|
+
var axisData = (series.options.data || []).map(function (d) {
|
|
3862
|
+
if (isArray(d) &&
|
|
3863
|
+
series.options.keys &&
|
|
3864
|
+
series.options.keys.length) {
|
|
3865
|
+
// Get the axisData from the data array used to
|
|
3866
|
+
// build the treeGrid where has been modified
|
|
3867
|
+
data.forEach(function (point) {
|
|
3868
|
+
if (d.indexOf(point.x) >= 0 &&
|
|
3869
|
+
d.indexOf(point.x2) >= 0) {
|
|
3870
|
+
d = point;
|
|
3871
|
+
}
|
|
3872
|
+
});
|
|
3873
|
+
}
|
|
3874
|
+
return isObject(d, true) ? merge(d) : d;
|
|
3875
|
+
});
|
|
3876
|
+
// Avoid destroying points when series is not visible
|
|
3877
|
+
if (series.visible) {
|
|
3878
|
+
series.setData(axisData, false);
|
|
3879
|
+
}
|
|
3880
|
+
});
|
|
3881
|
+
// Calculate the label options for each level in the tree.
|
|
3882
|
+
axis.treeGrid.mapOptionsToLevel =
|
|
3883
|
+
getLevelOptions({
|
|
3884
|
+
defaults: labelOptions,
|
|
3885
|
+
from: 1,
|
|
3886
|
+
levels: labelOptions && labelOptions.levels,
|
|
3887
|
+
to: axis.treeGrid.tree && axis.treeGrid.tree.height
|
|
3888
|
+
});
|
|
3889
|
+
// Setting initial collapsed nodes
|
|
3890
|
+
if (e.type === 'beforeRender') {
|
|
3891
|
+
axis.treeGrid.collapsedNodes = treeGrid.collapsedNodes;
|
|
3892
|
+
}
|
|
3893
|
+
}
|
|
3894
|
+
});
|
|
3895
|
+
}
|
|
3896
|
+
/**
|
|
3897
|
+
* Generates a tick for initial positioning.
|
|
3898
|
+
*
|
|
3899
|
+
* @private
|
|
3900
|
+
* @function Highcharts.GridAxis#generateTick
|
|
3901
|
+
*
|
|
3902
|
+
* @param {Function} proceed
|
|
3903
|
+
* The original generateTick function.
|
|
3904
|
+
*
|
|
3905
|
+
* @param {number} pos
|
|
3906
|
+
* The tick position in axis values.
|
|
3907
|
+
*/
|
|
3908
|
+
function wrapGenerateTick(proceed, pos) {
|
|
3909
|
+
var axis = this,
|
|
3910
|
+
mapOptionsToLevel = axis.treeGrid.mapOptionsToLevel || {},
|
|
3911
|
+
isTreeGrid = axis.options.type === 'treegrid',
|
|
3912
|
+
ticks = axis.ticks;
|
|
3913
|
+
var tick = ticks[pos],
|
|
3914
|
+
levelOptions,
|
|
3915
|
+
options,
|
|
3916
|
+
gridNode;
|
|
3917
|
+
if (isTreeGrid &&
|
|
3918
|
+
axis.treeGrid.mapOfPosToGridNode) {
|
|
3919
|
+
gridNode = axis.treeGrid.mapOfPosToGridNode[pos];
|
|
3920
|
+
levelOptions = mapOptionsToLevel[gridNode.depth];
|
|
3921
|
+
if (levelOptions) {
|
|
3922
|
+
options = {
|
|
3923
|
+
labels: levelOptions
|
|
3924
|
+
};
|
|
3925
|
+
}
|
|
3926
|
+
if (!tick &&
|
|
3927
|
+
TickConstructor) {
|
|
3928
|
+
ticks[pos] = tick =
|
|
3929
|
+
new TickConstructor(axis, pos, void 0, void 0, {
|
|
3930
|
+
category: gridNode.name,
|
|
3931
|
+
tickmarkOffset: gridNode.tickmarkOffset,
|
|
3932
|
+
options: options
|
|
3933
|
+
});
|
|
3934
|
+
}
|
|
3935
|
+
else {
|
|
3936
|
+
// update labels depending on tick interval
|
|
3937
|
+
tick.parameters.category = gridNode.name;
|
|
3938
|
+
tick.options = options;
|
|
3939
|
+
tick.addLabel();
|
|
3940
|
+
}
|
|
3941
|
+
}
|
|
3942
|
+
else {
|
|
3943
|
+
proceed.apply(axis, Array.prototype.slice.call(arguments, 1));
|
|
3944
|
+
}
|
|
3945
|
+
}
|
|
3946
|
+
/**
|
|
3947
|
+
* @private
|
|
3948
|
+
*/
|
|
3949
|
+
function wrapInit(proceed, chart, userOptions) {
|
|
3950
|
+
var axis = this,
|
|
3951
|
+
isTreeGrid = userOptions.type === 'treegrid';
|
|
3952
|
+
if (!axis.treeGrid) {
|
|
3953
|
+
axis.treeGrid = new TreeGridAxisAdditions(axis);
|
|
3954
|
+
}
|
|
3955
|
+
// Set default and forced options for TreeGrid
|
|
3956
|
+
if (isTreeGrid) {
|
|
3957
|
+
// Add event for updating the categories of a treegrid.
|
|
3958
|
+
// NOTE Preferably these events should be set on the axis.
|
|
3959
|
+
addEvent(chart, 'beforeRender', onBeforeRender);
|
|
3960
|
+
addEvent(chart, 'beforeRedraw', onBeforeRender);
|
|
3961
|
+
// Add new collapsed nodes on addseries
|
|
3962
|
+
addEvent(chart, 'addSeries', function (e) {
|
|
3963
|
+
if (e.options.data) {
|
|
3964
|
+
var treeGrid = getTreeGridFromData(e.options.data,
|
|
3965
|
+
userOptions.uniqueNames || false, 1);
|
|
3966
|
+
axis.treeGrid.collapsedNodes = (axis.treeGrid.collapsedNodes || []).concat(treeGrid.collapsedNodes);
|
|
3967
|
+
}
|
|
3968
|
+
});
|
|
3969
|
+
// Collapse all nodes in axis.treegrid.collapsednodes
|
|
3970
|
+
// where collapsed equals true.
|
|
3971
|
+
addEvent(axis, 'foundExtremes', function () {
|
|
3972
|
+
if (axis.treeGrid.collapsedNodes) {
|
|
3973
|
+
axis.treeGrid.collapsedNodes.forEach(function (node) {
|
|
3974
|
+
var breaks = axis.treeGrid.collapse(node);
|
|
3975
|
+
if (axis.brokenAxis) {
|
|
3976
|
+
axis.brokenAxis.setBreaks(breaks, false);
|
|
3977
|
+
// remove the node from the axis collapsedNodes
|
|
3978
|
+
if (axis.treeGrid.collapsedNodes) {
|
|
3979
|
+
axis.treeGrid.collapsedNodes = axis.treeGrid
|
|
3980
|
+
.collapsedNodes
|
|
3981
|
+
.filter(function (n) { return ((node.collapseStart !==
|
|
3982
|
+
n.collapseStart) ||
|
|
3983
|
+
node.collapseEnd !== n.collapseEnd); });
|
|
3984
|
+
}
|
|
3985
|
+
}
|
|
3986
|
+
});
|
|
3987
|
+
}
|
|
3988
|
+
});
|
|
3989
|
+
// If staticScale is not defined on the yAxis
|
|
3990
|
+
// and chart height is set, set axis.isDirty
|
|
3991
|
+
// to ensure collapsing works (#12012)
|
|
3992
|
+
addEvent(axis, 'afterBreaks', function () {
|
|
3993
|
+
if (axis.coll === 'yAxis' &&
|
|
3994
|
+
!axis.staticScale &&
|
|
3995
|
+
axis.chart.options.chart.height) {
|
|
3996
|
+
axis.isDirty = true;
|
|
3997
|
+
}
|
|
3998
|
+
});
|
|
3999
|
+
userOptions = merge({
|
|
4000
|
+
// Default options
|
|
4001
|
+
grid: {
|
|
4002
|
+
enabled: true
|
|
4003
|
+
},
|
|
4004
|
+
// TODO: add support for align in treegrid.
|
|
4005
|
+
labels: {
|
|
4006
|
+
align: 'left',
|
|
4007
|
+
/**
|
|
4008
|
+
* Set options on specific levels in a tree grid axis. Takes
|
|
4009
|
+
* precedence over labels options.
|
|
4010
|
+
*
|
|
4011
|
+
* @sample {gantt} gantt/treegrid-axis/labels-levels
|
|
4012
|
+
* Levels on TreeGrid Labels
|
|
4013
|
+
*
|
|
4014
|
+
* @type {Array<*>}
|
|
4015
|
+
* @product gantt
|
|
4016
|
+
* @apioption yAxis.labels.levels
|
|
4017
|
+
*
|
|
4018
|
+
* @private
|
|
4019
|
+
*/
|
|
4020
|
+
levels: [{
|
|
4021
|
+
/**
|
|
4022
|
+
* Specify the level which the options within this object
|
|
4023
|
+
* applies to.
|
|
4024
|
+
*
|
|
4025
|
+
* @type {number}
|
|
4026
|
+
* @product gantt
|
|
4027
|
+
* @apioption yAxis.labels.levels.level
|
|
4028
|
+
*
|
|
4029
|
+
* @private
|
|
4030
|
+
*/
|
|
4031
|
+
level: void 0
|
|
4032
|
+
}, {
|
|
4033
|
+
level: 1,
|
|
4034
|
+
/**
|
|
4035
|
+
* @type {Highcharts.CSSObject}
|
|
4036
|
+
* @product gantt
|
|
4037
|
+
* @apioption yAxis.labels.levels.style
|
|
4038
|
+
*
|
|
4039
|
+
* @private
|
|
4040
|
+
*/
|
|
4041
|
+
style: {
|
|
4042
|
+
/** @ignore-option */
|
|
4043
|
+
fontWeight: 'bold'
|
|
4044
|
+
}
|
|
4045
|
+
}],
|
|
4046
|
+
/**
|
|
4047
|
+
* The symbol for the collapse and expand icon in a
|
|
4048
|
+
* treegrid.
|
|
4049
|
+
*
|
|
4050
|
+
* @product gantt
|
|
4051
|
+
* @optionparent yAxis.labels.symbol
|
|
4052
|
+
*
|
|
4053
|
+
* @private
|
|
4054
|
+
*/
|
|
4055
|
+
symbol: {
|
|
4056
|
+
/**
|
|
4057
|
+
* The symbol type. Points to a definition function in
|
|
4058
|
+
* the `Highcharts.Renderer.symbols` collection.
|
|
4059
|
+
*
|
|
4060
|
+
* @type {Highcharts.SymbolKeyValue}
|
|
4061
|
+
*
|
|
4062
|
+
* @private
|
|
4063
|
+
*/
|
|
4064
|
+
type: 'triangle',
|
|
4065
|
+
x: -5,
|
|
4066
|
+
y: -5,
|
|
4067
|
+
height: 10,
|
|
4068
|
+
width: 10,
|
|
4069
|
+
padding: 5
|
|
4070
|
+
}
|
|
4071
|
+
},
|
|
4072
|
+
uniqueNames: false
|
|
4073
|
+
}, userOptions, {
|
|
4074
|
+
// Forced options
|
|
4075
|
+
reversed: true,
|
|
4076
|
+
// grid.columns is not supported in treegrid
|
|
4077
|
+
grid: {
|
|
4078
|
+
columns: void 0
|
|
4079
|
+
}
|
|
4080
|
+
});
|
|
4081
|
+
}
|
|
4082
|
+
// Now apply the original function with the original arguments,
|
|
4083
|
+
// which are sliced off this function's arguments
|
|
4084
|
+
proceed.apply(axis, [chart, userOptions]);
|
|
4085
|
+
if (isTreeGrid) {
|
|
4086
|
+
axis.hasNames = true;
|
|
4087
|
+
axis.options.showLastLabel = true;
|
|
4088
|
+
}
|
|
4089
|
+
}
|
|
4090
|
+
/**
|
|
4091
|
+
* Set the tick positions, tickInterval, axis min and max.
|
|
4092
|
+
*
|
|
4093
|
+
* @private
|
|
4094
|
+
* @function Highcharts.GridAxis#setTickInterval
|
|
4095
|
+
*
|
|
4096
|
+
* @param {Function} proceed
|
|
4097
|
+
* The original setTickInterval function.
|
|
4098
|
+
*/
|
|
4099
|
+
function wrapSetTickInterval(proceed) {
|
|
4100
|
+
var axis = this,
|
|
4101
|
+
options = axis.options,
|
|
4102
|
+
isTreeGrid = options.type === 'treegrid';
|
|
4103
|
+
if (isTreeGrid) {
|
|
4104
|
+
axis.min = pick(axis.userMin, options.min, axis.dataMin);
|
|
4105
|
+
axis.max = pick(axis.userMax, options.max, axis.dataMax);
|
|
4106
|
+
fireEvent(axis, 'foundExtremes');
|
|
4107
|
+
// setAxisTranslation modifies the min and max according to
|
|
4108
|
+
// axis breaks.
|
|
4109
|
+
axis.setAxisTranslation();
|
|
4110
|
+
axis.tickmarkOffset = 0.5;
|
|
4111
|
+
axis.tickInterval = 1;
|
|
4112
|
+
axis.tickPositions = axis.treeGrid.mapOfPosToGridNode ?
|
|
4113
|
+
axis.treeGrid.getTickPositions() :
|
|
4114
|
+
[];
|
|
4115
|
+
}
|
|
4116
|
+
else {
|
|
4117
|
+
proceed.apply(axis, Array.prototype.slice.call(arguments, 1));
|
|
4118
|
+
}
|
|
4119
|
+
}
|
|
4120
|
+
/* *
|
|
4121
|
+
*
|
|
4122
|
+
* Classes
|
|
4123
|
+
*
|
|
4124
|
+
* */
|
|
4125
|
+
/**
|
|
4126
|
+
* @private
|
|
4127
|
+
* @class
|
|
4128
|
+
*/
|
|
4129
|
+
var TreeGridAxisAdditions = /** @class */ (function () {
|
|
4130
|
+
/* *
|
|
4131
|
+
*
|
|
4132
|
+
* Constructors
|
|
4133
|
+
*
|
|
4134
|
+
* */
|
|
4135
|
+
/**
|
|
4136
|
+
* @private
|
|
4137
|
+
*/
|
|
4138
|
+
function TreeGridAxisAdditions(axis) {
|
|
4139
|
+
this.axis = axis;
|
|
4140
|
+
}
|
|
3593
4141
|
/* *
|
|
3594
4142
|
*
|
|
3595
|
-
* Functions
|
|
4143
|
+
* Static Functions
|
|
3596
4144
|
*
|
|
3597
4145
|
* */
|
|
3598
4146
|
/**
|
|
3599
4147
|
* @private
|
|
3600
4148
|
*/
|
|
3601
|
-
function
|
|
3602
|
-
if (
|
|
3603
|
-
|
|
3604
|
-
|
|
3605
|
-
|
|
3606
|
-
|
|
3607
|
-
|
|
4149
|
+
TreeGridAxisAdditions.compose = function (AxisClass, ChartClass, SeriesClass, TickClass) {
|
|
4150
|
+
if (composedClasses.indexOf(AxisClass) === -1) {
|
|
4151
|
+
composedClasses.push(AxisClass);
|
|
4152
|
+
if (AxisClass.keepProps.indexOf('treeGrid') === -1) {
|
|
4153
|
+
AxisClass.keepProps.push('treeGrid');
|
|
4154
|
+
}
|
|
4155
|
+
var axisProps = AxisClass.prototype;
|
|
4156
|
+
wrap(axisProps, 'generateTick', wrapGenerateTick);
|
|
4157
|
+
wrap(axisProps, 'init', wrapInit);
|
|
4158
|
+
wrap(axisProps, 'setTickInterval', wrapSetTickInterval);
|
|
3608
4159
|
// Make utility functions available for testing.
|
|
3609
|
-
|
|
4160
|
+
axisProps.utils = {
|
|
3610
4161
|
getNode: Tree.getNode
|
|
3611
4162
|
};
|
|
3612
|
-
GridAxis.compose(AxisClass, ChartClass, TickClass);
|
|
3613
|
-
BrokenAxis.compose(AxisClass, SeriesClass);
|
|
3614
|
-
TreeGridTick.compose(TickClass);
|
|
3615
4163
|
}
|
|
4164
|
+
if (composedClasses.indexOf(TickClass) === -1) {
|
|
4165
|
+
composedClasses.push(TickClass);
|
|
4166
|
+
if (!TickConstructor) {
|
|
4167
|
+
TickConstructor = TickClass;
|
|
4168
|
+
}
|
|
4169
|
+
}
|
|
4170
|
+
GridAxis.compose(AxisClass, ChartClass, TickClass);
|
|
4171
|
+
BrokenAxis.compose(AxisClass, SeriesClass);
|
|
4172
|
+
TreeGridTick.compose(TickClass);
|
|
3616
4173
|
return AxisClass;
|
|
3617
|
-
}
|
|
3618
|
-
|
|
4174
|
+
};
|
|
4175
|
+
/* *
|
|
4176
|
+
*
|
|
4177
|
+
* Functions
|
|
4178
|
+
*
|
|
4179
|
+
* */
|
|
3619
4180
|
/**
|
|
4181
|
+
* Set the collapse status.
|
|
4182
|
+
*
|
|
3620
4183
|
* @private
|
|
4184
|
+
*
|
|
4185
|
+
* @param {Highcharts.Axis} axis
|
|
4186
|
+
* The axis to check against.
|
|
4187
|
+
*
|
|
4188
|
+
* @param {Highcharts.GridNode} node
|
|
4189
|
+
* The node to collapse.
|
|
3621
4190
|
*/
|
|
3622
|
-
function
|
|
3623
|
-
var
|
|
3624
|
-
|
|
3625
|
-
|
|
3626
|
-
|
|
3627
|
-
|
|
3628
|
-
|
|
3629
|
-
|
|
3630
|
-
|
|
3631
|
-
|
|
3632
|
-
|
|
3633
|
-
|
|
3634
|
-
|
|
3635
|
-
|
|
3636
|
-
|
|
3637
|
-
};
|
|
3638
|
-
}
|
|
4191
|
+
TreeGridAxisAdditions.prototype.setCollapsedStatus = function (node) {
|
|
4192
|
+
var axis = this.axis,
|
|
4193
|
+
chart = axis.chart;
|
|
4194
|
+
axis.series.forEach(function (series) {
|
|
4195
|
+
var data = series.options.data;
|
|
4196
|
+
if (node.id && data) {
|
|
4197
|
+
var point = chart.get(node.id),
|
|
4198
|
+
dataPoint = data[series.data.indexOf(point)];
|
|
4199
|
+
if (point && dataPoint) {
|
|
4200
|
+
point.collapsed = node.collapsed;
|
|
4201
|
+
dataPoint.collapsed = node.collapsed;
|
|
4202
|
+
}
|
|
4203
|
+
}
|
|
4204
|
+
});
|
|
4205
|
+
};
|
|
3639
4206
|
/**
|
|
3640
|
-
*
|
|
3641
|
-
* categories, and y-values of points based on the tree.
|
|
4207
|
+
* Calculates the new axis breaks to collapse a node.
|
|
3642
4208
|
*
|
|
3643
4209
|
* @private
|
|
3644
|
-
* @function getTreeGridFromData
|
|
3645
4210
|
*
|
|
3646
|
-
* @param {
|
|
3647
|
-
*
|
|
4211
|
+
* @param {Highcharts.Axis} axis
|
|
4212
|
+
* The axis to check against.
|
|
3648
4213
|
*
|
|
3649
|
-
* @param {
|
|
3650
|
-
*
|
|
3651
|
-
* true they do share cell. False by default.
|
|
4214
|
+
* @param {Highcharts.GridNode} node
|
|
4215
|
+
* The node to collapse.
|
|
3652
4216
|
*
|
|
3653
|
-
* @param {number}
|
|
4217
|
+
* @param {number} pos
|
|
4218
|
+
* The tick position to collapse.
|
|
3654
4219
|
*
|
|
3655
|
-
* @return {
|
|
3656
|
-
* Returns an
|
|
3657
|
-
|
|
3658
|
-
|
|
3659
|
-
|
|
3660
|
-
|
|
3661
|
-
|
|
3662
|
-
|
|
3663
|
-
|
|
3664
|
-
|
|
3665
|
-
|
|
3666
|
-
|
|
3667
|
-
|
|
3668
|
-
|
|
3669
|
-
uniqueNames : false;
|
|
3670
|
-
var mapOfPosToGridNode = {},
|
|
3671
|
-
posIterator = -1;
|
|
3672
|
-
// Build the tree from the series data.
|
|
3673
|
-
var treeParams = {
|
|
3674
|
-
// After the children has been created.
|
|
3675
|
-
after: function (node) {
|
|
3676
|
-
var gridNode = mapOfPosToGridNode[node.pos];
|
|
3677
|
-
var height = 0,
|
|
3678
|
-
descendants = 0;
|
|
3679
|
-
gridNode.children.forEach(function (child) {
|
|
3680
|
-
descendants += (child.descendants || 0) + 1;
|
|
3681
|
-
height = Math.max((child.height || 0) + 1, height);
|
|
3682
|
-
});
|
|
3683
|
-
gridNode.descendants = descendants;
|
|
3684
|
-
gridNode.height = height;
|
|
3685
|
-
if (gridNode.collapsed) {
|
|
3686
|
-
collapsedNodes.push(gridNode);
|
|
3687
|
-
}
|
|
3688
|
-
},
|
|
3689
|
-
// Before the children has been created.
|
|
3690
|
-
before: function (node) {
|
|
3691
|
-
var data = isObject(node.data,
|
|
3692
|
-
true) ?
|
|
3693
|
-
node.data :
|
|
3694
|
-
{},
|
|
3695
|
-
name = isString(data.name) ? data.name : '',
|
|
3696
|
-
parentNode = mapOfIdToNode[node.parent],
|
|
3697
|
-
parentGridNode = (isObject(parentNode,
|
|
3698
|
-
true) ?
|
|
3699
|
-
mapOfPosToGridNode[parentNode.pos] :
|
|
3700
|
-
null),
|
|
3701
|
-
hasSameName = function (x) {
|
|
3702
|
-
return x.name === name;
|
|
3703
|
-
};
|
|
3704
|
-
var gridNode,
|
|
3705
|
-
pos;
|
|
3706
|
-
// If not unique names, look for sibling node with the same name
|
|
3707
|
-
if (uniqueNamesEnabled &&
|
|
3708
|
-
isObject(parentGridNode, true) &&
|
|
3709
|
-
!!(gridNode = find(parentGridNode.children, hasSameName))) {
|
|
3710
|
-
// If there is a gridNode with the same name, reuse position
|
|
3711
|
-
pos = gridNode.pos;
|
|
3712
|
-
// Add data node to list of nodes in the grid node.
|
|
3713
|
-
gridNode.nodes.push(node);
|
|
3714
|
-
}
|
|
3715
|
-
else {
|
|
3716
|
-
// If it is a new grid node, increment position.
|
|
3717
|
-
pos = posIterator++;
|
|
3718
|
-
}
|
|
3719
|
-
// Add new grid node to map.
|
|
3720
|
-
if (!mapOfPosToGridNode[pos]) {
|
|
3721
|
-
mapOfPosToGridNode[pos] = gridNode = {
|
|
3722
|
-
depth: parentGridNode ? parentGridNode.depth + 1 : 0,
|
|
3723
|
-
name: name,
|
|
3724
|
-
id: data.id,
|
|
3725
|
-
nodes: [node],
|
|
3726
|
-
children: [],
|
|
3727
|
-
pos: pos
|
|
3728
|
-
};
|
|
3729
|
-
// If not root, then add name to categories.
|
|
3730
|
-
if (pos !== -1) {
|
|
3731
|
-
categories.push(name);
|
|
3732
|
-
}
|
|
3733
|
-
// Add name to list of children.
|
|
3734
|
-
if (isObject(parentGridNode, true)) {
|
|
3735
|
-
parentGridNode.children.push(gridNode);
|
|
3736
|
-
}
|
|
3737
|
-
}
|
|
3738
|
-
// Add data node to map
|
|
3739
|
-
if (isString(node.id)) {
|
|
3740
|
-
mapOfIdToNode[node.id] = node;
|
|
3741
|
-
}
|
|
3742
|
-
// If one of the points are collapsed, then start the grid node
|
|
3743
|
-
// in collapsed state.
|
|
3744
|
-
if (gridNode &&
|
|
3745
|
-
data.collapsed === true) {
|
|
3746
|
-
gridNode.collapsed = true;
|
|
3747
|
-
}
|
|
3748
|
-
// Assign pos to data node
|
|
3749
|
-
node.pos = pos;
|
|
3750
|
-
}
|
|
3751
|
-
};
|
|
3752
|
-
var updateYValuesAndTickPos = function (map,
|
|
3753
|
-
numberOfSeries) {
|
|
3754
|
-
var setValues = function (gridNode,
|
|
3755
|
-
start,
|
|
3756
|
-
result) {
|
|
3757
|
-
var nodes = gridNode.nodes,
|
|
3758
|
-
padding = 0.5;
|
|
3759
|
-
var end = start + (start === -1 ? 0 : numberOfSeries - 1);
|
|
3760
|
-
var diff = (end - start) / 2,
|
|
3761
|
-
pos = start + diff;
|
|
3762
|
-
nodes.forEach(function (node) {
|
|
3763
|
-
var data = node.data;
|
|
3764
|
-
if (isObject(data, true)) {
|
|
3765
|
-
// Update point
|
|
3766
|
-
data.y = start + (data.seriesIndex || 0);
|
|
3767
|
-
// Remove the property once used
|
|
3768
|
-
delete data.seriesIndex;
|
|
3769
|
-
}
|
|
3770
|
-
node.pos = pos;
|
|
3771
|
-
});
|
|
3772
|
-
result[pos] = gridNode;
|
|
3773
|
-
gridNode.pos = pos;
|
|
3774
|
-
gridNode.tickmarkOffset = diff + padding;
|
|
3775
|
-
gridNode.collapseStart = end + padding;
|
|
3776
|
-
gridNode.children.forEach(function (child) {
|
|
3777
|
-
setValues(child, end + 1, result);
|
|
3778
|
-
end = (child.collapseEnd || 0) - padding;
|
|
3779
|
-
});
|
|
3780
|
-
// Set collapseEnd to the end of the last child node.
|
|
3781
|
-
gridNode.collapseEnd = end + padding;
|
|
3782
|
-
return result;
|
|
3783
|
-
};
|
|
3784
|
-
return setValues(map['-1'], -1, {});
|
|
3785
|
-
};
|
|
3786
|
-
// Create tree from data
|
|
3787
|
-
var tree = Tree.getTree(data,
|
|
3788
|
-
treeParams);
|
|
3789
|
-
// Update y values of data, and set calculate tick positions.
|
|
3790
|
-
mapOfPosToGridNode = updateYValuesAndTickPos(mapOfPosToGridNode, numberOfSeries);
|
|
3791
|
-
// Return the resulting data.
|
|
3792
|
-
return {
|
|
3793
|
-
categories: categories,
|
|
3794
|
-
mapOfIdToNode: mapOfIdToNode,
|
|
3795
|
-
mapOfPosToGridNode: mapOfPosToGridNode,
|
|
3796
|
-
collapsedNodes: collapsedNodes,
|
|
3797
|
-
tree: tree
|
|
3798
|
-
};
|
|
3799
|
-
}
|
|
3800
|
-
/**
|
|
3801
|
-
* Builds the tree of categories and calculates its positions.
|
|
3802
|
-
* @private
|
|
3803
|
-
* @param {Object} e Event object
|
|
3804
|
-
* @param {Object} e.target The chart instance which the event was fired on.
|
|
3805
|
-
* @param {object[]} e.target.axes The axes of the chart.
|
|
3806
|
-
*/
|
|
3807
|
-
function onBeforeRender(e) {
|
|
3808
|
-
var chart = e.target,
|
|
3809
|
-
axes = chart.axes;
|
|
3810
|
-
axes.filter(function (axis) {
|
|
3811
|
-
return axis.options.type === 'treegrid';
|
|
3812
|
-
}).forEach(function (axis) {
|
|
3813
|
-
var options = axis.options || {},
|
|
3814
|
-
labelOptions = options.labels,
|
|
3815
|
-
uniqueNames = options.uniqueNames,
|
|
3816
|
-
max = options.max,
|
|
3817
|
-
// Check whether any of series is rendering for the first
|
|
3818
|
-
// time, visibility has changed, or its data is dirty, and
|
|
3819
|
-
// only then update. #10570, #10580. Also check if
|
|
3820
|
-
// mapOfPosToGridNode exists. #10887
|
|
3821
|
-
isDirty = (!axis.treeGrid.mapOfPosToGridNode ||
|
|
3822
|
-
axis.series.some(function (series) {
|
|
3823
|
-
return !series.hasRendered ||
|
|
3824
|
-
series.isDirtyData ||
|
|
3825
|
-
series.isDirty;
|
|
3826
|
-
}));
|
|
3827
|
-
var numberOfSeries = 0,
|
|
3828
|
-
data,
|
|
3829
|
-
treeGrid;
|
|
3830
|
-
if (isDirty) {
|
|
3831
|
-
// Concatenate data from all series assigned to this axis.
|
|
3832
|
-
data = axis.series.reduce(function (arr, s) {
|
|
3833
|
-
if (s.visible) {
|
|
3834
|
-
// Push all data to array
|
|
3835
|
-
(s.options.data || []).forEach(function (data) {
|
|
3836
|
-
// For using keys - rebuild the data structure
|
|
3837
|
-
if (s.options.keys && s.options.keys.length) {
|
|
3838
|
-
data = s.pointClass.prototype
|
|
3839
|
-
.optionsToObject
|
|
3840
|
-
.call({ series: s }, data);
|
|
3841
|
-
s.pointClass.setGanttPointAliases(data);
|
|
3842
|
-
}
|
|
3843
|
-
if (isObject(data, true)) {
|
|
3844
|
-
// Set series index on data. Removed again
|
|
3845
|
-
// after use.
|
|
3846
|
-
data.seriesIndex = (numberOfSeries);
|
|
3847
|
-
arr.push(data);
|
|
3848
|
-
}
|
|
3849
|
-
});
|
|
3850
|
-
// Increment series index
|
|
3851
|
-
if (uniqueNames === true) {
|
|
3852
|
-
numberOfSeries++;
|
|
3853
|
-
}
|
|
3854
|
-
}
|
|
3855
|
-
return arr;
|
|
3856
|
-
}, []);
|
|
3857
|
-
// If max is higher than set data - add a
|
|
3858
|
-
// dummy data to render categories #10779
|
|
3859
|
-
if (max && data.length < max) {
|
|
3860
|
-
for (var i = data.length; i <= max; i++) {
|
|
3861
|
-
data.push({
|
|
3862
|
-
// Use the zero-width character
|
|
3863
|
-
// to avoid conflict with uniqueNames
|
|
3864
|
-
name: i + '\u200B'
|
|
3865
|
-
});
|
|
3866
|
-
}
|
|
3867
|
-
}
|
|
3868
|
-
// setScale is fired after all the series is initialized,
|
|
3869
|
-
// which is an ideal time to update the axis.categories.
|
|
3870
|
-
treeGrid = getTreeGridFromData(data, uniqueNames || false, (uniqueNames === true) ? numberOfSeries : 1);
|
|
3871
|
-
// Assign values to the axis.
|
|
3872
|
-
axis.categories = treeGrid.categories;
|
|
3873
|
-
axis.treeGrid.mapOfPosToGridNode = (treeGrid.mapOfPosToGridNode);
|
|
3874
|
-
axis.hasNames = true;
|
|
3875
|
-
axis.treeGrid.tree = treeGrid.tree;
|
|
3876
|
-
// Update yData now that we have calculated the y values
|
|
3877
|
-
axis.series.forEach(function (series) {
|
|
3878
|
-
var axisData = (series.options.data || []).map(function (d) {
|
|
3879
|
-
if (isArray(d) &&
|
|
3880
|
-
series.options.keys &&
|
|
3881
|
-
series.options.keys.length) {
|
|
3882
|
-
// Get the axisData from the data array used to
|
|
3883
|
-
// build the treeGrid where has been modified
|
|
3884
|
-
data.forEach(function (point) {
|
|
3885
|
-
if (d.indexOf(point.x) >= 0 &&
|
|
3886
|
-
d.indexOf(point.x2) >= 0) {
|
|
3887
|
-
d = point;
|
|
3888
|
-
}
|
|
3889
|
-
});
|
|
3890
|
-
}
|
|
3891
|
-
return isObject(d, true) ? merge(d) : d;
|
|
3892
|
-
});
|
|
3893
|
-
// Avoid destroying points when series is not visible
|
|
3894
|
-
if (series.visible) {
|
|
3895
|
-
series.setData(axisData, false);
|
|
3896
|
-
}
|
|
3897
|
-
});
|
|
3898
|
-
// Calculate the label options for each level in the tree.
|
|
3899
|
-
axis.treeGrid.mapOptionsToLevel =
|
|
3900
|
-
getLevelOptions({
|
|
3901
|
-
defaults: labelOptions,
|
|
3902
|
-
from: 1,
|
|
3903
|
-
levels: labelOptions && labelOptions.levels,
|
|
3904
|
-
to: axis.treeGrid.tree && axis.treeGrid.tree.height
|
|
3905
|
-
});
|
|
3906
|
-
// Setting initial collapsed nodes
|
|
3907
|
-
if (e.type === 'beforeRender') {
|
|
3908
|
-
axis.treeGrid.collapsedNodes = treeGrid.collapsedNodes;
|
|
3909
|
-
}
|
|
3910
|
-
}
|
|
3911
|
-
});
|
|
3912
|
-
}
|
|
4220
|
+
* @return {Array<object>}
|
|
4221
|
+
* Returns an array of the new breaks for the axis.
|
|
4222
|
+
*/
|
|
4223
|
+
TreeGridAxisAdditions.prototype.collapse = function (node) {
|
|
4224
|
+
var axis = this.axis,
|
|
4225
|
+
breaks = (axis.options.breaks || []),
|
|
4226
|
+
obj = getBreakFromNode(node,
|
|
4227
|
+
axis.max);
|
|
4228
|
+
breaks.push(obj);
|
|
4229
|
+
// Change the collapsed flag #13838
|
|
4230
|
+
node.collapsed = true;
|
|
4231
|
+
axis.treeGrid.setCollapsedStatus(node);
|
|
4232
|
+
return breaks;
|
|
4233
|
+
};
|
|
3913
4234
|
/**
|
|
3914
|
-
*
|
|
4235
|
+
* Calculates the new axis breaks to expand a node.
|
|
3915
4236
|
*
|
|
3916
4237
|
* @private
|
|
3917
|
-
* @function Highcharts.GridAxis#generateTick
|
|
3918
4238
|
*
|
|
3919
|
-
* @param {
|
|
3920
|
-
* The
|
|
4239
|
+
* @param {Highcharts.Axis} axis
|
|
4240
|
+
* The axis to check against.
|
|
4241
|
+
*
|
|
4242
|
+
* @param {Highcharts.GridNode} node
|
|
4243
|
+
* The node to expand.
|
|
3921
4244
|
*
|
|
3922
4245
|
* @param {number} pos
|
|
3923
|
-
* The tick position
|
|
4246
|
+
* The tick position to expand.
|
|
4247
|
+
*
|
|
4248
|
+
* @return {Array<object>}
|
|
4249
|
+
* Returns an array of the new breaks for the axis.
|
|
3924
4250
|
*/
|
|
3925
|
-
function
|
|
3926
|
-
var axis = this,
|
|
3927
|
-
|
|
3928
|
-
|
|
3929
|
-
|
|
3930
|
-
|
|
3931
|
-
|
|
3932
|
-
|
|
3933
|
-
|
|
3934
|
-
|
|
3935
|
-
|
|
3936
|
-
|
|
3937
|
-
levelOptions = mapOptionsToLevel[gridNode.depth];
|
|
3938
|
-
if (levelOptions) {
|
|
3939
|
-
options = {
|
|
3940
|
-
labels: levelOptions
|
|
3941
|
-
};
|
|
3942
|
-
}
|
|
3943
|
-
if (!tick &&
|
|
3944
|
-
TickConstructor) {
|
|
3945
|
-
ticks[pos] = tick =
|
|
3946
|
-
new TickConstructor(axis, pos, void 0, void 0, {
|
|
3947
|
-
category: gridNode.name,
|
|
3948
|
-
tickmarkOffset: gridNode.tickmarkOffset,
|
|
3949
|
-
options: options
|
|
3950
|
-
});
|
|
3951
|
-
}
|
|
3952
|
-
else {
|
|
3953
|
-
// update labels depending on tick interval
|
|
3954
|
-
tick.parameters.category = gridNode.name;
|
|
3955
|
-
tick.options = options;
|
|
3956
|
-
tick.addLabel();
|
|
4251
|
+
TreeGridAxisAdditions.prototype.expand = function (node) {
|
|
4252
|
+
var axis = this.axis,
|
|
4253
|
+
breaks = (axis.options.breaks || []),
|
|
4254
|
+
obj = getBreakFromNode(node,
|
|
4255
|
+
axis.max);
|
|
4256
|
+
// Change the collapsed flag #13838
|
|
4257
|
+
node.collapsed = false;
|
|
4258
|
+
axis.treeGrid.setCollapsedStatus(node);
|
|
4259
|
+
// Remove the break from the axis breaks array.
|
|
4260
|
+
return breaks.reduce(function (arr, b) {
|
|
4261
|
+
if (b.to !== obj.to || b.from !== obj.from) {
|
|
4262
|
+
arr.push(b);
|
|
3957
4263
|
}
|
|
3958
|
-
|
|
3959
|
-
|
|
3960
|
-
|
|
3961
|
-
}
|
|
3962
|
-
}
|
|
4264
|
+
return arr;
|
|
4265
|
+
}, []);
|
|
4266
|
+
};
|
|
3963
4267
|
/**
|
|
4268
|
+
* Creates a list of positions for the ticks on the axis. Filters out
|
|
4269
|
+
* positions that are outside min and max, or is inside an axis break.
|
|
4270
|
+
*
|
|
3964
4271
|
* @private
|
|
4272
|
+
*
|
|
4273
|
+
* @return {Array<number>}
|
|
4274
|
+
* List of positions.
|
|
3965
4275
|
*/
|
|
3966
|
-
function
|
|
3967
|
-
var axis = this,
|
|
3968
|
-
|
|
3969
|
-
|
|
3970
|
-
|
|
3971
|
-
|
|
3972
|
-
|
|
3973
|
-
|
|
3974
|
-
|
|
3975
|
-
|
|
3976
|
-
|
|
3977
|
-
|
|
3978
|
-
|
|
3979
|
-
|
|
3980
|
-
if (e.options.data) {
|
|
3981
|
-
var treeGrid = getTreeGridFromData(e.options.data,
|
|
3982
|
-
userOptions.uniqueNames || false, 1);
|
|
3983
|
-
axis.treeGrid.collapsedNodes = (axis.treeGrid.collapsedNodes || []).concat(treeGrid.collapsedNodes);
|
|
3984
|
-
}
|
|
3985
|
-
});
|
|
3986
|
-
// Collapse all nodes in axis.treegrid.collapsednodes
|
|
3987
|
-
// where collapsed equals true.
|
|
3988
|
-
addEvent(axis, 'foundExtremes', function () {
|
|
3989
|
-
if (axis.treeGrid.collapsedNodes) {
|
|
3990
|
-
axis.treeGrid.collapsedNodes.forEach(function (node) {
|
|
3991
|
-
var breaks = axis.treeGrid.collapse(node);
|
|
3992
|
-
if (axis.brokenAxis) {
|
|
3993
|
-
axis.brokenAxis.setBreaks(breaks, false);
|
|
3994
|
-
// remove the node from the axis collapsedNodes
|
|
3995
|
-
if (axis.treeGrid.collapsedNodes) {
|
|
3996
|
-
axis.treeGrid.collapsedNodes = axis.treeGrid
|
|
3997
|
-
.collapsedNodes
|
|
3998
|
-
.filter(function (n) { return ((node.collapseStart !==
|
|
3999
|
-
n.collapseStart) ||
|
|
4000
|
-
node.collapseEnd !== n.collapseEnd); });
|
|
4001
|
-
}
|
|
4002
|
-
}
|
|
4003
|
-
});
|
|
4004
|
-
}
|
|
4005
|
-
});
|
|
4006
|
-
// If staticScale is not defined on the yAxis
|
|
4007
|
-
// and chart height is set, set axis.isDirty
|
|
4008
|
-
// to ensure collapsing works (#12012)
|
|
4009
|
-
addEvent(axis, 'afterBreaks', function () {
|
|
4010
|
-
if (axis.coll === 'yAxis' &&
|
|
4011
|
-
!axis.staticScale &&
|
|
4012
|
-
axis.chart.options.chart.height) {
|
|
4013
|
-
axis.isDirty = true;
|
|
4014
|
-
}
|
|
4015
|
-
});
|
|
4016
|
-
userOptions = merge({
|
|
4017
|
-
// Default options
|
|
4018
|
-
grid: {
|
|
4019
|
-
enabled: true
|
|
4020
|
-
},
|
|
4021
|
-
// TODO: add support for align in treegrid.
|
|
4022
|
-
labels: {
|
|
4023
|
-
align: 'left',
|
|
4024
|
-
/**
|
|
4025
|
-
* Set options on specific levels in a tree grid axis. Takes
|
|
4026
|
-
* precedence over labels options.
|
|
4027
|
-
*
|
|
4028
|
-
* @sample {gantt} gantt/treegrid-axis/labels-levels
|
|
4029
|
-
* Levels on TreeGrid Labels
|
|
4030
|
-
*
|
|
4031
|
-
* @type {Array<*>}
|
|
4032
|
-
* @product gantt
|
|
4033
|
-
* @apioption yAxis.labels.levels
|
|
4034
|
-
*
|
|
4035
|
-
* @private
|
|
4036
|
-
*/
|
|
4037
|
-
levels: [{
|
|
4038
|
-
/**
|
|
4039
|
-
* Specify the level which the options within this object
|
|
4040
|
-
* applies to.
|
|
4041
|
-
*
|
|
4042
|
-
* @type {number}
|
|
4043
|
-
* @product gantt
|
|
4044
|
-
* @apioption yAxis.labels.levels.level
|
|
4045
|
-
*
|
|
4046
|
-
* @private
|
|
4047
|
-
*/
|
|
4048
|
-
level: void 0
|
|
4049
|
-
}, {
|
|
4050
|
-
level: 1,
|
|
4051
|
-
/**
|
|
4052
|
-
* @type {Highcharts.CSSObject}
|
|
4053
|
-
* @product gantt
|
|
4054
|
-
* @apioption yAxis.labels.levels.style
|
|
4055
|
-
*
|
|
4056
|
-
* @private
|
|
4057
|
-
*/
|
|
4058
|
-
style: {
|
|
4059
|
-
/** @ignore-option */
|
|
4060
|
-
fontWeight: 'bold'
|
|
4061
|
-
}
|
|
4062
|
-
}],
|
|
4063
|
-
/**
|
|
4064
|
-
* The symbol for the collapse and expand icon in a
|
|
4065
|
-
* treegrid.
|
|
4066
|
-
*
|
|
4067
|
-
* @product gantt
|
|
4068
|
-
* @optionparent yAxis.labels.symbol
|
|
4069
|
-
*
|
|
4070
|
-
* @private
|
|
4071
|
-
*/
|
|
4072
|
-
symbol: {
|
|
4073
|
-
/**
|
|
4074
|
-
* The symbol type. Points to a definition function in
|
|
4075
|
-
* the `Highcharts.Renderer.symbols` collection.
|
|
4076
|
-
*
|
|
4077
|
-
* @type {Highcharts.SymbolKeyValue}
|
|
4078
|
-
*
|
|
4079
|
-
* @private
|
|
4080
|
-
*/
|
|
4081
|
-
type: 'triangle',
|
|
4082
|
-
x: -5,
|
|
4083
|
-
y: -5,
|
|
4084
|
-
height: 10,
|
|
4085
|
-
width: 10,
|
|
4086
|
-
padding: 5
|
|
4087
|
-
}
|
|
4088
|
-
},
|
|
4089
|
-
uniqueNames: false
|
|
4090
|
-
}, userOptions, {
|
|
4091
|
-
// Forced options
|
|
4092
|
-
reversed: true,
|
|
4093
|
-
// grid.columns is not supported in treegrid
|
|
4094
|
-
grid: {
|
|
4095
|
-
columns: void 0
|
|
4096
|
-
}
|
|
4097
|
-
});
|
|
4098
|
-
}
|
|
4099
|
-
// Now apply the original function with the original arguments,
|
|
4100
|
-
// which are sliced off this function's arguments
|
|
4101
|
-
proceed.apply(axis, [chart, userOptions]);
|
|
4102
|
-
if (isTreeGrid) {
|
|
4103
|
-
axis.hasNames = true;
|
|
4104
|
-
axis.options.showLastLabel = true;
|
|
4105
|
-
}
|
|
4106
|
-
}
|
|
4276
|
+
TreeGridAxisAdditions.prototype.getTickPositions = function () {
|
|
4277
|
+
var axis = this.axis,
|
|
4278
|
+
roundedMin = Math.floor(axis.min / axis.tickInterval) * axis.tickInterval,
|
|
4279
|
+
roundedMax = Math.ceil(axis.max / axis.tickInterval) * axis.tickInterval;
|
|
4280
|
+
return Object.keys(axis.treeGrid.mapOfPosToGridNode || {}).reduce(function (arr, key) {
|
|
4281
|
+
var pos = +key;
|
|
4282
|
+
if (pos >= roundedMin &&
|
|
4283
|
+
pos <= roundedMax &&
|
|
4284
|
+
!(axis.brokenAxis && axis.brokenAxis.isInAnyBreak(pos))) {
|
|
4285
|
+
arr.push(pos);
|
|
4286
|
+
}
|
|
4287
|
+
return arr;
|
|
4288
|
+
}, []);
|
|
4289
|
+
};
|
|
4107
4290
|
/**
|
|
4108
|
-
*
|
|
4291
|
+
* Check if a node is collapsed.
|
|
4109
4292
|
*
|
|
4110
4293
|
* @private
|
|
4111
|
-
* @function Highcharts.GridAxis#setTickInterval
|
|
4112
4294
|
*
|
|
4113
|
-
* @param {
|
|
4114
|
-
* The
|
|
4115
|
-
*/
|
|
4116
|
-
function wrapSetTickInterval(proceed) {
|
|
4117
|
-
var axis = this,
|
|
4118
|
-
options = axis.options,
|
|
4119
|
-
isTreeGrid = options.type === 'treegrid';
|
|
4120
|
-
if (isTreeGrid) {
|
|
4121
|
-
axis.min = pick(axis.userMin, options.min, axis.dataMin);
|
|
4122
|
-
axis.max = pick(axis.userMax, options.max, axis.dataMax);
|
|
4123
|
-
fireEvent(axis, 'foundExtremes');
|
|
4124
|
-
// setAxisTranslation modifies the min and max according to
|
|
4125
|
-
// axis breaks.
|
|
4126
|
-
axis.setAxisTranslation();
|
|
4127
|
-
axis.tickmarkOffset = 0.5;
|
|
4128
|
-
axis.tickInterval = 1;
|
|
4129
|
-
axis.tickPositions = axis.treeGrid.mapOfPosToGridNode ?
|
|
4130
|
-
axis.treeGrid.getTickPositions() :
|
|
4131
|
-
[];
|
|
4132
|
-
}
|
|
4133
|
-
else {
|
|
4134
|
-
proceed.apply(axis, Array.prototype.slice.call(arguments, 1));
|
|
4135
|
-
}
|
|
4136
|
-
}
|
|
4137
|
-
/* *
|
|
4295
|
+
* @param {Highcharts.Axis} axis
|
|
4296
|
+
* The axis to check against.
|
|
4138
4297
|
*
|
|
4139
|
-
*
|
|
4298
|
+
* @param {Object} node
|
|
4299
|
+
* The node to check if is collapsed.
|
|
4140
4300
|
*
|
|
4141
|
-
*
|
|
4301
|
+
* @param {number} pos
|
|
4302
|
+
* The tick position to collapse.
|
|
4303
|
+
*
|
|
4304
|
+
* @return {boolean}
|
|
4305
|
+
* Returns true if collapsed, false if expanded.
|
|
4306
|
+
*/
|
|
4307
|
+
TreeGridAxisAdditions.prototype.isCollapsed = function (node) {
|
|
4308
|
+
var axis = this.axis,
|
|
4309
|
+
breaks = (axis.options.breaks || []),
|
|
4310
|
+
obj = getBreakFromNode(node,
|
|
4311
|
+
axis.max);
|
|
4312
|
+
return breaks.some(function (b) {
|
|
4313
|
+
return b.from === obj.from && b.to === obj.to;
|
|
4314
|
+
});
|
|
4315
|
+
};
|
|
4142
4316
|
/**
|
|
4317
|
+
* Calculates the new axis breaks after toggling the collapse/expand
|
|
4318
|
+
* state of a node. If it is collapsed it will be expanded, and if it is
|
|
4319
|
+
* exapended it will be collapsed.
|
|
4320
|
+
*
|
|
4143
4321
|
* @private
|
|
4144
|
-
*
|
|
4322
|
+
*
|
|
4323
|
+
* @param {Highcharts.Axis} axis
|
|
4324
|
+
* The axis to check against.
|
|
4325
|
+
*
|
|
4326
|
+
* @param {Highcharts.GridNode} node
|
|
4327
|
+
* The node to toggle.
|
|
4328
|
+
*
|
|
4329
|
+
* @return {Array<object>}
|
|
4330
|
+
* Returns an array of the new breaks for the axis.
|
|
4145
4331
|
*/
|
|
4146
|
-
|
|
4147
|
-
|
|
4148
|
-
|
|
4149
|
-
|
|
4150
|
-
|
|
4151
|
-
|
|
4152
|
-
|
|
4153
|
-
|
|
4154
|
-
|
|
4155
|
-
|
|
4156
|
-
|
|
4157
|
-
|
|
4158
|
-
/* *
|
|
4159
|
-
*
|
|
4160
|
-
* Functions
|
|
4161
|
-
*
|
|
4162
|
-
* */
|
|
4163
|
-
/**
|
|
4164
|
-
* Set the collapse status.
|
|
4165
|
-
*
|
|
4166
|
-
* @private
|
|
4167
|
-
*
|
|
4168
|
-
* @param {Highcharts.Axis} axis
|
|
4169
|
-
* The axis to check against.
|
|
4170
|
-
*
|
|
4171
|
-
* @param {Highcharts.GridNode} node
|
|
4172
|
-
* The node to collapse.
|
|
4173
|
-
*/
|
|
4174
|
-
Additions.prototype.setCollapsedStatus = function (node) {
|
|
4175
|
-
var axis = this.axis,
|
|
4176
|
-
chart = axis.chart;
|
|
4177
|
-
axis.series.forEach(function (series) {
|
|
4178
|
-
var data = series.options.data;
|
|
4179
|
-
if (node.id && data) {
|
|
4180
|
-
var point = chart.get(node.id),
|
|
4181
|
-
dataPoint = data[series.data.indexOf(point)];
|
|
4182
|
-
if (point && dataPoint) {
|
|
4183
|
-
point.collapsed = node.collapsed;
|
|
4184
|
-
dataPoint.collapsed = node.collapsed;
|
|
4185
|
-
}
|
|
4186
|
-
}
|
|
4187
|
-
});
|
|
4188
|
-
};
|
|
4189
|
-
/**
|
|
4190
|
-
* Calculates the new axis breaks to collapse a node.
|
|
4191
|
-
*
|
|
4192
|
-
* @private
|
|
4193
|
-
*
|
|
4194
|
-
* @param {Highcharts.Axis} axis
|
|
4195
|
-
* The axis to check against.
|
|
4196
|
-
*
|
|
4197
|
-
* @param {Highcharts.GridNode} node
|
|
4198
|
-
* The node to collapse.
|
|
4199
|
-
*
|
|
4200
|
-
* @param {number} pos
|
|
4201
|
-
* The tick position to collapse.
|
|
4202
|
-
*
|
|
4203
|
-
* @return {Array<object>}
|
|
4204
|
-
* Returns an array of the new breaks for the axis.
|
|
4205
|
-
*/
|
|
4206
|
-
Additions.prototype.collapse = function (node) {
|
|
4207
|
-
var axis = this.axis,
|
|
4208
|
-
breaks = (axis.options.breaks || []),
|
|
4209
|
-
obj = getBreakFromNode(node,
|
|
4210
|
-
axis.max);
|
|
4211
|
-
breaks.push(obj);
|
|
4212
|
-
// Change the collapsed flag #13838
|
|
4213
|
-
node.collapsed = true;
|
|
4214
|
-
axis.treeGrid.setCollapsedStatus(node);
|
|
4215
|
-
return breaks;
|
|
4216
|
-
};
|
|
4217
|
-
/**
|
|
4218
|
-
* Calculates the new axis breaks to expand a node.
|
|
4219
|
-
*
|
|
4220
|
-
* @private
|
|
4221
|
-
*
|
|
4222
|
-
* @param {Highcharts.Axis} axis
|
|
4223
|
-
* The axis to check against.
|
|
4224
|
-
*
|
|
4225
|
-
* @param {Highcharts.GridNode} node
|
|
4226
|
-
* The node to expand.
|
|
4227
|
-
*
|
|
4228
|
-
* @param {number} pos
|
|
4229
|
-
* The tick position to expand.
|
|
4230
|
-
*
|
|
4231
|
-
* @return {Array<object>}
|
|
4232
|
-
* Returns an array of the new breaks for the axis.
|
|
4233
|
-
*/
|
|
4234
|
-
Additions.prototype.expand = function (node) {
|
|
4235
|
-
var axis = this.axis,
|
|
4236
|
-
breaks = (axis.options.breaks || []),
|
|
4237
|
-
obj = getBreakFromNode(node,
|
|
4238
|
-
axis.max);
|
|
4239
|
-
// Change the collapsed flag #13838
|
|
4240
|
-
node.collapsed = false;
|
|
4241
|
-
axis.treeGrid.setCollapsedStatus(node);
|
|
4242
|
-
// Remove the break from the axis breaks array.
|
|
4243
|
-
return breaks.reduce(function (arr, b) {
|
|
4244
|
-
if (b.to !== obj.to || b.from !== obj.from) {
|
|
4245
|
-
arr.push(b);
|
|
4246
|
-
}
|
|
4247
|
-
return arr;
|
|
4248
|
-
}, []);
|
|
4249
|
-
};
|
|
4250
|
-
/**
|
|
4251
|
-
* Creates a list of positions for the ticks on the axis. Filters out
|
|
4252
|
-
* positions that are outside min and max, or is inside an axis break.
|
|
4253
|
-
*
|
|
4254
|
-
* @private
|
|
4255
|
-
*
|
|
4256
|
-
* @return {Array<number>}
|
|
4257
|
-
* List of positions.
|
|
4258
|
-
*/
|
|
4259
|
-
Additions.prototype.getTickPositions = function () {
|
|
4260
|
-
var axis = this.axis,
|
|
4261
|
-
roundedMin = Math.floor(axis.min / axis.tickInterval) * axis.tickInterval,
|
|
4262
|
-
roundedMax = Math.ceil(axis.max / axis.tickInterval) * axis.tickInterval;
|
|
4263
|
-
return Object.keys(axis.treeGrid.mapOfPosToGridNode || {}).reduce(function (arr, key) {
|
|
4264
|
-
var pos = +key;
|
|
4265
|
-
if (pos >= roundedMin &&
|
|
4266
|
-
pos <= roundedMax &&
|
|
4267
|
-
!(axis.brokenAxis && axis.brokenAxis.isInAnyBreak(pos))) {
|
|
4268
|
-
arr.push(pos);
|
|
4269
|
-
}
|
|
4270
|
-
return arr;
|
|
4271
|
-
}, []);
|
|
4272
|
-
};
|
|
4273
|
-
/**
|
|
4274
|
-
* Check if a node is collapsed.
|
|
4275
|
-
*
|
|
4276
|
-
* @private
|
|
4277
|
-
*
|
|
4278
|
-
* @param {Highcharts.Axis} axis
|
|
4279
|
-
* The axis to check against.
|
|
4280
|
-
*
|
|
4281
|
-
* @param {Object} node
|
|
4282
|
-
* The node to check if is collapsed.
|
|
4283
|
-
*
|
|
4284
|
-
* @param {number} pos
|
|
4285
|
-
* The tick position to collapse.
|
|
4286
|
-
*
|
|
4287
|
-
* @return {boolean}
|
|
4288
|
-
* Returns true if collapsed, false if expanded.
|
|
4289
|
-
*/
|
|
4290
|
-
Additions.prototype.isCollapsed = function (node) {
|
|
4291
|
-
var axis = this.axis,
|
|
4292
|
-
breaks = (axis.options.breaks || []),
|
|
4293
|
-
obj = getBreakFromNode(node,
|
|
4294
|
-
axis.max);
|
|
4295
|
-
return breaks.some(function (b) {
|
|
4296
|
-
return b.from === obj.from && b.to === obj.to;
|
|
4297
|
-
});
|
|
4298
|
-
};
|
|
4299
|
-
/**
|
|
4300
|
-
* Calculates the new axis breaks after toggling the collapse/expand
|
|
4301
|
-
* state of a node. If it is collapsed it will be expanded, and if it is
|
|
4302
|
-
* exapended it will be collapsed.
|
|
4303
|
-
*
|
|
4304
|
-
* @private
|
|
4305
|
-
*
|
|
4306
|
-
* @param {Highcharts.Axis} axis
|
|
4307
|
-
* The axis to check against.
|
|
4308
|
-
*
|
|
4309
|
-
* @param {Highcharts.GridNode} node
|
|
4310
|
-
* The node to toggle.
|
|
4311
|
-
*
|
|
4312
|
-
* @return {Array<object>}
|
|
4313
|
-
* Returns an array of the new breaks for the axis.
|
|
4314
|
-
*/
|
|
4315
|
-
Additions.prototype.toggleCollapse = function (node) {
|
|
4316
|
-
return (this.isCollapsed(node) ?
|
|
4317
|
-
this.expand(node) :
|
|
4318
|
-
this.collapse(node));
|
|
4319
|
-
};
|
|
4320
|
-
return Additions;
|
|
4321
|
-
}());
|
|
4322
|
-
TreeGridAxis.Additions = Additions;
|
|
4323
|
-
})(TreeGridAxis || (TreeGridAxis = {}));
|
|
4332
|
+
TreeGridAxisAdditions.prototype.toggleCollapse = function (node) {
|
|
4333
|
+
return (this.isCollapsed(node) ?
|
|
4334
|
+
this.expand(node) :
|
|
4335
|
+
this.collapse(node));
|
|
4336
|
+
};
|
|
4337
|
+
return TreeGridAxisAdditions;
|
|
4338
|
+
}());
|
|
4339
|
+
/* *
|
|
4340
|
+
*
|
|
4341
|
+
* Default Export
|
|
4342
|
+
*
|
|
4343
|
+
* */
|
|
4324
4344
|
|
|
4325
|
-
return
|
|
4345
|
+
return TreeGridAxisAdditions;
|
|
4326
4346
|
});
|
|
4327
4347
|
_registerModule(_modules, 'Extensions/CurrentDateIndication.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Axis/PlotLineOrBand/PlotLineOrBand.js'], _modules['Core/Utilities.js']], function (Axis, PlotLineOrBand, U) {
|
|
4328
4348
|
/* *
|
|
@@ -7167,7 +7187,7 @@
|
|
|
7167
7187
|
|
|
7168
7188
|
return Pathfinder;
|
|
7169
7189
|
});
|
|
7170
|
-
_registerModule(_modules, 'Series/Gantt/GanttSeries.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Chart/Chart.js'], _modules['Series/Gantt/GanttPoint.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Axis/Tick.js'], _modules['Core/Utilities.js'], _modules['Core/Axis/TreeGridAxis.js']], function (Axis, Chart, GanttPoint, SeriesRegistry, Tick, U, TreeGridAxis) {
|
|
7190
|
+
_registerModule(_modules, 'Series/Gantt/GanttSeries.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Chart/Chart.js'], _modules['Series/Gantt/GanttPoint.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Axis/Tick.js'], _modules['Core/Utilities.js'], _modules['Core/Axis/TreeGrid/TreeGridAxis.js']], function (Axis, Chart, GanttPoint, SeriesRegistry, Tick, U, TreeGridAxis) {
|
|
7171
7191
|
/* *
|
|
7172
7192
|
*
|
|
7173
7193
|
* (c) 2016-2021 Highsoft AS
|
|
@@ -8777,7 +8797,9 @@
|
|
|
8777
8797
|
* @function Highcharts.Scrollbar#shouldUpdateExtremes
|
|
8778
8798
|
*/
|
|
8779
8799
|
Scrollbar.prototype.shouldUpdateExtremes = function (eventType) {
|
|
8780
|
-
return (pick(this.options.liveRedraw, H.svg &&
|
|
8800
|
+
return (pick(this.options.liveRedraw, H.svg &&
|
|
8801
|
+
!H.isTouchDevice &&
|
|
8802
|
+
!this.chart.boosted) ||
|
|
8781
8803
|
// Mouseup always should change extremes
|
|
8782
8804
|
eventType === 'mouseup' ||
|
|
8783
8805
|
eventType === 'touchend' ||
|
|
@@ -11350,9 +11372,9 @@
|
|
|
11350
11372
|
var chartOptions = chart.options;
|
|
11351
11373
|
var navigator = chartOptions.navigator;
|
|
11352
11374
|
var navigatorAxis = axis.navigatorAxis;
|
|
11353
|
-
var pinchType = chartOptions.chart.pinchType;
|
|
11375
|
+
var pinchType = chartOptions.chart.zooming.pinchType;
|
|
11354
11376
|
var rangeSelector = chartOptions.rangeSelector;
|
|
11355
|
-
var zoomType = chartOptions.chart.
|
|
11377
|
+
var zoomType = chartOptions.chart.zooming.type;
|
|
11356
11378
|
var previousZoom;
|
|
11357
11379
|
if (axis.isXAxis && ((navigator && navigator.enabled) ||
|
|
11358
11380
|
(rangeSelector && rangeSelector.enabled))) {
|
|
@@ -11796,6 +11818,18 @@
|
|
|
11796
11818
|
*/
|
|
11797
11819
|
threshold: null
|
|
11798
11820
|
},
|
|
11821
|
+
/**
|
|
11822
|
+
* Enable or disable navigator sticking to right, while adding new
|
|
11823
|
+
* points. If `undefined`, the navigator sticks to the axis maximum only
|
|
11824
|
+
* if it was already at the maximum prior to adding points.
|
|
11825
|
+
*
|
|
11826
|
+
* @type {boolean}
|
|
11827
|
+
* @default undefined
|
|
11828
|
+
* @since 10.2.1
|
|
11829
|
+
* @sample {highstock} stock/navigator/sticktomax-false/
|
|
11830
|
+
* stickToMax set to false
|
|
11831
|
+
* @apioption navigator.stickToMax
|
|
11832
|
+
*/
|
|
11799
11833
|
/**
|
|
11800
11834
|
* Options for the navigator X axis. Default series options for the
|
|
11801
11835
|
* navigator xAxis are:
|
|
@@ -12620,7 +12654,9 @@
|
|
|
12620
12654
|
pick(navigator.scrollbar.options.liveRedraw,
|
|
12621
12655
|
// By default, don't run live redraw on VML, on touch
|
|
12622
12656
|
// devices or if the chart is in boost.
|
|
12623
|
-
H.svg &&
|
|
12657
|
+
H.svg &&
|
|
12658
|
+
!isTouchDevice &&
|
|
12659
|
+
!this.chart.boosted)) {
|
|
12624
12660
|
e.DOMType = e.type; // DOMType is for IE8
|
|
12625
12661
|
setTimeout(function () {
|
|
12626
12662
|
navigator.onMouseUp(e);
|
|
@@ -13255,12 +13291,14 @@
|
|
|
13255
13291
|
Navigator.prototype.updatedDataHandler = function () {
|
|
13256
13292
|
var navigator = this.chart.navigator,
|
|
13257
13293
|
baseSeries = this,
|
|
13258
|
-
navigatorSeries = this.navigatorSeries
|
|
13294
|
+
navigatorSeries = this.navigatorSeries,
|
|
13295
|
+
shouldStickToMax = navigator.reversedExtremes ?
|
|
13296
|
+
Math.round(navigator.zoomedMin) === 0 :
|
|
13297
|
+
Math.round(navigator.zoomedMax) >= Math.round(navigator.size);
|
|
13259
13298
|
// If the scrollbar is scrolled all the way to the right, keep right as
|
|
13260
|
-
// new data
|
|
13261
|
-
navigator.stickToMax = navigator
|
|
13262
|
-
|
|
13263
|
-
Math.round(navigator.zoomedMax) >= Math.round(navigator.size);
|
|
13299
|
+
// new data comes in, unless user set navigator.stickToMax to false.
|
|
13300
|
+
navigator.stickToMax = pick(this.chart.options.navigator &&
|
|
13301
|
+
this.chart.options.navigator.stickToMax, shouldStickToMax);
|
|
13264
13302
|
navigator.stickToMin = navigator.shouldStickToMin(baseSeries, navigator);
|
|
13265
13303
|
// Set the navigator series data to the new data of the base series
|
|
13266
13304
|
if (navigatorSeries && !navigator.hasNavigatorData) {
|
|
@@ -13392,8 +13430,10 @@
|
|
|
13392
13430
|
rangeSelector = chartOptions.rangeSelector;
|
|
13393
13431
|
if (((navigator && navigator.enabled) ||
|
|
13394
13432
|
(rangeSelector && rangeSelector.enabled)) &&
|
|
13395
|
-
((!isTouchDevice &&
|
|
13396
|
-
|
|
13433
|
+
((!isTouchDevice &&
|
|
13434
|
+
chartOptions.chart.zooming.type === 'x') ||
|
|
13435
|
+
(isTouchDevice &&
|
|
13436
|
+
chartOptions.chart.zooming.pinchType === 'x'))) {
|
|
13397
13437
|
return false;
|
|
13398
13438
|
}
|
|
13399
13439
|
});
|
|
@@ -13511,7 +13551,7 @@
|
|
|
13511
13551
|
|
|
13512
13552
|
return H.Navigator;
|
|
13513
13553
|
});
|
|
13514
|
-
_registerModule(_modules, 'masters/modules/gantt.src.js', [_modules['Core/Globals.js'], _modules['Core/Chart/GanttChart.js'], _modules['Core/Scrollbar.js']], function (Highcharts, GanttChart, Scrollbar) {
|
|
13554
|
+
_registerModule(_modules, 'masters/modules/gantt.src.js', [_modules['Core/Globals.js'], _modules['Series/XRange/XRangeSeries.js'], _modules['Core/Chart/GanttChart.js'], _modules['Core/Scrollbar.js']], function (Highcharts, XRangeSeries, GanttChart, Scrollbar) {
|
|
13515
13555
|
|
|
13516
13556
|
var G = Highcharts;
|
|
13517
13557
|
// Classes
|
|
@@ -13520,6 +13560,7 @@
|
|
|
13520
13560
|
G.ganttChart = GanttChart.ganttChart;
|
|
13521
13561
|
// Compositions
|
|
13522
13562
|
Scrollbar.compose(G.Axis);
|
|
13563
|
+
XRangeSeries.compose(G.Axis);
|
|
13523
13564
|
|
|
13524
13565
|
});
|
|
13525
13566
|
}));
|