{"version":3,"sources":["webpack:///./node_modules/echarts/lib/chart/parallel/ParallelSeries.js","webpack:///./node_modules/echarts/lib/component/visualMap/PiecewiseView.js","webpack:///./node_modules/echarts/lib/component/tooltip.js","webpack:///./node_modules/echarts/lib/chart/funnel/FunnelSeries.js","webpack:///./node_modules/echarts/lib/coord/geo/prepareCustom.js","webpack:///./node_modules/echarts/lib/coord/geo/Geo.js","webpack:///./node_modules/echarts/lib/component/gridSimple.js","webpack:///./node_modules/echarts/lib/component/helper/roamHelper.js","webpack:///./node_modules/zrender/lib/core/timsort.js","webpack:///./node_modules/zrender/lib/contain/polygon.js","webpack:///./node_modules/zrender/lib/animation/Animator.js","webpack:///./node_modules/echarts/lib/data/Tree.js","webpack:///./node_modules/echarts/lib/component/visualMap/PiecewiseModel.js","webpack:///./node_modules/echarts/lib/component/tooltip/TooltipContent.js","webpack:///./node_modules/echarts/lib/chart/gauge.js","webpack:///./node_modules/echarts/lib/chart/parallel.js","webpack:///./node_modules/echarts/lib/chart/candlestick.js","webpack:///./node_modules/echarts/lib/component/timeline/TimelineAxis.js","webpack:///./node_modules/echarts/lib/chart/candlestick/candlestickLayout.js","webpack:///./node_modules/echarts/lib/component/dataZoom.js","webpack:///./node_modules/echarts/lib/chart/tree/radialLayout.js","webpack:///./node_modules/zrender/lib/core/GestureMgr.js","webpack:///./node_modules/echarts/lib/component/legendScroll.js","webpack:///./node_modules/zrender/lib/core/arrayDiff2.js","webpack:///./node_modules/echarts/lib/component/helper/MapDraw.js","webpack:///./node_modules/zrender/lib/mixin/Transformable.js","webpack:///./node_modules/zrender/lib/graphic/Image.js","webpack:///./node_modules/echarts/lib/chart/sankey/sankeyVisual.js","webpack:///./node_modules/echarts/lib/component/legend/ScrollableLegendView.js","webpack:///./node_modules/echarts/lib/coord/parallel/ParallelAxis.js","webpack:///./node_modules/echarts/lib/chart/helper/EffectLine.js","webpack:///./node_modules/echarts/lib/component/brush/visualEncoding.js","webpack:///./node_modules/echarts/lib/chart/effectScatter.js","webpack:///./node_modules/echarts/lib/component/axisPointer/findPointFromSeries.js","webpack:///./node_modules/echarts/lib/chart/helper/Symbol.js","webpack:///./node_modules/echarts/lib/chart/radar/RadarView.js","webpack:///./node_modules/echarts/lib/component/axis/RadiusAxisView.js","webpack:///./node_modules/echarts/lib/helper.js","webpack:///./node_modules/echarts/lib/chart/scatter.js","webpack:///./node_modules/zrender/lib/core/matrix.js","webpack:///./node_modules/echarts/lib/coord/radar/RadarModel.js","webpack:///./node_modules/echarts/lib/coord/geo/fix/textCoord.js","webpack:///./node_modules/echarts/lib/chart/bar/BarSeries.js","webpack:///./node_modules/echarts/lib/component/axisPointer/globalListener.js","webpack:///./node_modules/echarts/lib/scale/Ordinal.js","webpack:///./node_modules/echarts/lib/component/marker/MarkLineModel.js","webpack:///./node_modules/echarts/lib/chart/candlestick/CandlestickView.js","webpack:///./node_modules/zrender/lib/graphic/Displayable.js","webpack:///./node_modules/echarts/lib/component/axis/cartesianAxisHelper.js","webpack:///./node_modules/echarts/lib/chart/pie/PieView.js","webpack:///./node_modules/echarts/lib/chart/graph/simpleLayoutHelper.js","webpack:///./node_modules/echarts/lib/coord/polar/polarCreator.js","webpack:///./src/assets/About_item_2.png","webpack:///./node_modules/echarts/lib/layout/barPolar.js","webpack:///./node_modules/echarts/lib/chart/gauge/PointerPath.js","webpack:///./node_modules/echarts/lib/coord/geo/GeoModel.js","webpack:///./node_modules/zrender/lib/mixin/Eventful.js","webpack:///./node_modules/echarts/lib/coord/axisModelCommonMixin.js","webpack:///./node_modules/echarts/lib/CoordinateSystem.js","webpack:///./node_modules/zrender/lib/core/PathProxy.js","webpack:///./node_modules/echarts/lib/component/toolbox/featureManager.js","webpack:///./node_modules/echarts/lib/chart/tree/TreeSeries.js","webpack:///./node_modules/echarts/lib/scale/Time.js","webpack:///./node_modules/echarts/lib/chart/line/LineSeries.js","webpack:///./node_modules/echarts/lib/coord/parallel/ParallelModel.js","webpack:///./node_modules/zrender/lib/core/env.js","webpack:///./node_modules/echarts/lib/chart/tree/layoutHelper.js","webpack:///./node_modules/echarts/lib/util/graphic.js","webpack:///./node_modules/echarts/lib/component/dataZoom/SliderZoomView.js","webpack:///./node_modules/echarts/lib/chart/helper/createGraphFromNodeEdge.js","webpack:///./node_modules/echarts/lib/coord/radar/Radar.js","webpack:///./node_modules/echarts/lib/chart/graph.js","webpack:///./node_modules/echarts/lib/component/marker/MarkerModel.js","webpack:///./node_modules/echarts/lib/chart/funnel/funnelLayout.js","webpack:///./node_modules/echarts/lib/chart/themeRiver/ThemeRiverView.js","webpack:///./node_modules/echarts/lib/preprocessor/helper/compatStyle.js","webpack:///./node_modules/echarts/lib/model/mixin/makeStyleMapper.js","webpack:///./node_modules/echarts/lib/chart/pie/pieLayout.js","webpack:///./node_modules/echarts/lib/chart/graph/categoryVisual.js","webpack:///./node_modules/echarts/lib/lang.js","webpack:///./node_modules/echarts/lib/component/visualMapPiecewise.js","webpack:///./node_modules/zrender/lib/graphic/Style.js","webpack:///./node_modules/echarts/lib/visual/visualSolution.js","webpack:///./node_modules/echarts/lib/component/dataZoom/dataZoomProcessor.js","webpack:///./node_modules/zrender/lib/config.js","webpack:///./node_modules/echarts/lib/component/singleAxis.js","webpack:///./node_modules/echarts/lib/component/brush.js","webpack:///./node_modules/echarts/lib/component/polar.js","webpack:///./node_modules/echarts/lib/chart/boxplot/boxplotVisual.js","webpack:///./node_modules/echarts/lib/chart/bar/BaseBarSeries.js","webpack:///./node_modules/echarts/lib/component/visualMap/ContinuousModel.js","webpack:///./node_modules/echarts/lib/coord/single/prepareCustom.js","webpack:///./node_modules/echarts/lib/component/marker/MarkLineView.js","webpack:///./node_modules/zrender/lib/animation/Animation.js","webpack:///./node_modules/echarts/lib/chart/sankey.js","webpack:///./node_modules/echarts/index.js","webpack:///./node_modules/echarts/lib/data/helper/linkList.js","webpack:///./node_modules/echarts/lib/coord/geo/fix/nanhai.js","webpack:///./node_modules/echarts/lib/component/dataZoom/InsideZoomView.js","webpack:///./node_modules/echarts/lib/chart/helper/createListFromArray.js","webpack:///./node_modules/echarts/lib/chart/bar/PictorialBarView.js","webpack:///./node_modules/zrender/lib/tool/path.js","webpack:///./node_modules/echarts/lib/component/timeline/SliderTimelineView.js","webpack:///./node_modules/echarts/lib/component/dataZoom/SliderZoomModel.js","webpack:///./node_modules/echarts/lib/util/number.js","webpack:///./node_modules/echarts/lib/model/mixin/lineStyle.js","webpack:///./node_modules/echarts/lib/component/timeline/timelineAction.js","webpack:///./node_modules/echarts/lib/chart/heatmap/HeatmapSeries.js","webpack:///./node_modules/echarts/lib/component/dataZoom/DataZoomModel.js","webpack:///./node_modules/echarts/lib/component/visualMap/ContinuousView.js","webpack:///./node_modules/echarts/lib/echarts.js","webpack:///./node_modules/zrender/lib/svg/graphic.js","webpack:///./node_modules/zrender/lib/core/vector.js","webpack:///./node_modules/echarts/lib/component/dataZoom/SelectZoomModel.js","webpack:///./node_modules/zrender/lib/tool/color.js","webpack:///./node_modules/echarts/lib/chart/helper/WhiskerBoxDraw.js","webpack:///./node_modules/zrender/lib/graphic/Gradient.js","webpack:///./node_modules/echarts/lib/component/tooltip/TooltipView.js","webpack:///./node_modules/echarts/lib/model/Model.js","webpack:///./node_modules/echarts/lib/coord/single/singleCreator.js","webpack:///./node_modules/echarts/lib/component/marker/MarkAreaModel.js","webpack:///./node_modules/echarts/lib/chart/treemap/treemapAction.js","webpack:///./node_modules/zrender/lib/animation/Clip.js","webpack:///./node_modules/echarts/lib/chart/helper/Polyline.js","webpack:///./node_modules/zrender/lib/graphic/shape/Ring.js","webpack:///./node_modules/echarts/lib/component/legend/legendAction.js","webpack:///./node_modules/echarts/lib/coord/calendar/prepareCustom.js","webpack:///./node_modules/echarts/lib/chart/effectScatter/EffectScatterView.js","webpack:///./node_modules/echarts/lib/chart/heatmap/HeatmapView.js","webpack:///./node_modules/echarts/lib/chart/graph/adjustEdge.js","webpack:///./node_modules/zrender/lib/graphic/LinearGradient.js","webpack:///./node_modules/echarts/lib/component/axisPointer/AxisPointerModel.js","webpack:///./node_modules/echarts/lib/coord/cartesian/AxisModel.js","webpack:///./node_modules/zrender/lib/core/log.js","webpack:///./node_modules/echarts/lib/action/geoRoam.js","webpack:///./node_modules/echarts/lib/component/helper/RoamController.js","webpack:///./node_modules/zrender/lib/core/curve.js","webpack:///./node_modules/echarts/lib/component/axisPointer/CartesianAxisPointer.js","webpack:///./node_modules/zrender/lib/graphic/shape/Sector.js","webpack:///./node_modules/zrender/lib/svg/helper/Definable.js","webpack:///./node_modules/echarts/lib/component/dataZoom/SelectZoomView.js","webpack:///./node_modules/echarts/lib/coord/single/Single.js","webpack:///./node_modules/echarts/lib/chart/candlestick/candlestickVisual.js","webpack:///./node_modules/echarts/lib/chart/funnel/FunnelView.js","webpack:///./node_modules/echarts/lib/chart/gauge/GaugeSeries.js","webpack:///./node_modules/echarts/lib/config.js","webpack:///./node_modules/echarts/lib/chart/map/MapSeries.js","webpack:///./node_modules/echarts/lib/component/toolbox/feature/SaveAsImage.js","webpack:///./node_modules/echarts/lib/model/Series.js","webpack:///./node_modules/zrender/lib/graphic/helper/poly.js","webpack:///./node_modules/echarts/lib/component/dataZoom/helper.js","webpack:///./node_modules/echarts/lib/chart/themeRiver/themeRiverLayout.js","webpack:///./node_modules/echarts/lib/component/visualMap.js","webpack:///./node_modules/echarts/lib/chart/map/mapVisual.js","webpack:///./node_modules/echarts/lib/model/mixin/itemStyle.js","webpack:///./node_modules/echarts/lib/component/radar.js","webpack:///./node_modules/echarts/lib/component/dataZoom/roams.js","webpack:///./node_modules/zrender/lib/graphic/helper/roundRect.js","webpack:///./node_modules/echarts/lib/chart/graph/forceLayout.js","webpack:///./node_modules/echarts/lib/coord/cartesian/Grid.js","webpack:///./node_modules/echarts/lib/chart/sankey/SankeyView.js","webpack:///./node_modules/echarts/lib/chart/heatmap.js","webpack:///./node_modules/zrender/lib/Layer.js","webpack:///./node_modules/zrender/lib/graphic/helper/image.js","webpack:///./node_modules/echarts/lib/component/legend/LegendView.js","webpack:///./node_modules/echarts/lib/visual/VisualMapping.js","webpack:///./node_modules/zrender/lib/core/event.js","webpack:///./node_modules/echarts/lib/chart/parallel/ParallelView.js","webpack:///./node_modules/echarts/lib/visual/visualDefault.js","webpack:///./node_modules/echarts/lib/data/List.js","webpack:///./node_modules/zrender/lib/graphic/helper/smoothSpline.js","webpack:///./node_modules/echarts/lib/util/clazz.js","webpack:///./node_modules/echarts/lib/component/title.js","webpack:///./node_modules/echarts/lib/coord/parallel/parallelPreprocessor.js","webpack:///./node_modules/echarts/lib/chart/lines/linesLayout.js","webpack:///./node_modules/echarts/lib/component/axis/AxisView.js","webpack:///./node_modules/echarts/lib/component/timeline/preprocessor.js","webpack:///./node_modules/echarts/lib/coord/single/SingleAxis.js","webpack:///./node_modules/echarts/lib/chart/graph/categoryFilter.js","webpack:///./node_modules/echarts/lib/chart/map.js","webpack:///./node_modules/echarts/lib/chart/effectScatter/EffectScatterSeries.js","webpack:///./node_modules/echarts/lib/chart/bar/BarView.js","webpack:///./node_modules/zrender/lib/contain/quadratic.js","webpack:///./node_modules/echarts/lib/component/dataZoom/typeDefaulter.js","webpack:///./node_modules/echarts/lib/coord/axisHelper.js","webpack:///./node_modules/zrender/lib/zrender.js","webpack:///./node_modules/echarts/lib/chart/helper/EffectPolyline.js","webpack:///./node_modules/echarts/lib/component/axisPointer/PolarAxisPointer.js","webpack:///./node_modules/echarts/lib/coord/geo/fix/geoCoord.js","webpack:///./node_modules/echarts/lib/component/radar/RadarView.js","webpack:///./node_modules/echarts/lib/chart/themeRiver.js","webpack:///./node_modules/echarts/lib/model/Component.js","webpack:///./node_modules/echarts/lib/coord/View.js","webpack:///./node_modules/echarts/lib/chart/tree/TreeView.js","webpack:///./src/assets/js/china.js","webpack:///./node_modules/zrender/lib/core/util.js","webpack:///./node_modules/echarts/lib/chart/tree/traversalHelper.js","webpack:///./node_modules/echarts/lib/component/dataZoom/history.js","webpack:///./node_modules/echarts/lib/component/helper/selectableMixin.js","webpack:///./node_modules/echarts/lib/coord/axisDefault.js","webpack:///./node_modules/echarts/lib/chart/themeRiver/themeRiverVisual.js","webpack:///./node_modules/echarts/lib/chart/lines/LinesSeries.js","webpack:///./node_modules/echarts/lib/component/visualMap/VisualMapView.js","webpack:///./node_modules/echarts/lib/data/Graph.js","webpack:///./node_modules/echarts/lib/chart/helper/LineDraw.js","webpack:///./node_modules/echarts/lib/component/visualMapContinuous.js","webpack:///./node_modules/zrender/lib/animation/easing.js","webpack:///./node_modules/echarts/lib/component/geo/GeoView.js","webpack:///./node_modules/echarts/lib/component/toolbox/feature/DataView.js","webpack:///./node_modules/zrender/lib/graphic/Text.js","webpack:///./node_modules/echarts/lib/action/createDataSelectAction.js","webpack:///./node_modules/echarts/lib/coord/radar/IndicatorAxis.js","webpack:///./node_modules/echarts/lib/chart/radar/backwardCompat.js","webpack:///./node_modules/echarts/lib/coord/polar/PolarModel.js","webpack:///./node_modules/echarts/lib/component/helper/listComponent.js","webpack:///./node_modules/echarts/lib/component/radiusAxis.js","webpack:///./node_modules/echarts/lib/chart/graph/createView.js","webpack:///./node_modules/echarts/lib/component/toolbox/feature/DataZoom.js","webpack:///./node_modules/echarts/lib/component/dataZoom/DataZoomView.js","webpack:///./node_modules/echarts/lib/component/markArea.js","webpack:///./node_modules/echarts/lib/chart/helper/Line.js","webpack:///./node_modules/echarts/lib/model/Global.js","webpack:///./node_modules/echarts/lib/component/graphic.js","webpack:///./node_modules/echarts/lib/chart/helper/LinePath.js","webpack:///./node_modules/echarts/lib/visual/symbol.js","webpack:///./node_modules/echarts/lib/data/DataDiffer.js","webpack:///./node_modules/echarts/lib/chart/sankey/sankeyLayout.js","webpack:///./node_modules/echarts/lib/component/marker/MarkPointView.js","webpack:///./node_modules/echarts/lib/coord/calendar/CalendarModel.js","webpack:///./node_modules/echarts/lib/ExtensionAPI.js","webpack:///./node_modules/echarts/lib/component/axis/parallelAxisAction.js","webpack:///./node_modules/echarts/lib/coord/parallel/parallelCreator.js","webpack:///./node_modules/echarts/lib/coord/Axis.js","webpack:///./node_modules/echarts/lib/component/legend/LegendModel.js","webpack:///./node_modules/zrender/lib/contain/util.js","webpack:///./node_modules/echarts/lib/data/helper/completeDimensions.js","webpack:///./node_modules/echarts/lib/chart/radar/radarLayout.js","webpack:///./node_modules/zrender/lib/svg/core.js","webpack:///./node_modules/zrender/lib/contain/windingLine.js","webpack:///./node_modules/echarts/lib/chart/treemap/helper.js","webpack:///./node_modules/echarts/lib/chart/graph/GraphSeries.js","webpack:///./node_modules/zrender/lib/graphic/shape/Polygon.js","webpack:///./node_modules/echarts/lib/layout/points.js","webpack:///./node_modules/echarts/lib/util/throttle.js","webpack:///./node_modules/echarts/lib/component/marker/MarkerView.js","webpack:///./node_modules/echarts/lib/util/component.js","webpack:///./node_modules/echarts/lib/model/globalDefault.js","webpack:///./node_modules/zrender/lib/graphic/helper/fixClipWithShadow.js","webpack:///./node_modules/echarts/lib/scale/Interval.js","webpack:///./node_modules/echarts/lib/scale/Log.js","webpack:///./node_modules/zrender/lib/graphic/shape/Arc.js","webpack:///./node_modules/echarts/lib/chart/radar.js","webpack:///./node_modules/echarts/lib/component/marker/MarkAreaView.js","webpack:///./node_modules/echarts/lib/component/toolbox/ToolboxModel.js","webpack:///./node_modules/echarts/lib/coord/cartesian/GridModel.js","webpack:///./node_modules/zrender/lib/svg/svg.js","webpack:///./node_modules/echarts/lib/component/legend/legendFilter.js","webpack:///./node_modules/echarts/lib/chart/treemap/treemapVisual.js","webpack:///./node_modules/echarts/lib/component/marker/markerHelper.js","webpack:///./node_modules/echarts/lib/coord/polar/RadiusAxis.js","webpack:///./node_modules/echarts/lib/chart/treemap/TreemapSeries.js","webpack:///./node_modules/echarts/lib/component/timeline/TimelineView.js","webpack:///./node_modules/echarts/lib/component/calendar.js","webpack:///./node_modules/echarts/lib/chart/map/backwardCompat.js","webpack:///./node_modules/echarts/lib/scale/helper.js","webpack:///./node_modules/echarts/lib/chart/bar.js","webpack:///./node_modules/echarts/lib/chart/graph/circularLayoutHelper.js","webpack:///./node_modules/echarts/lib/component/markLine.js","webpack:///./node_modules/zrender/lib/contain/line.js","webpack:///./node_modules/echarts/lib/chart/graph/GraphView.js","webpack:///./node_modules/zrender/lib/core/BoundingRect.js","webpack:///./node_modules/zrender/lib/animation/requestAnimationFrame.js","webpack:///./node_modules/echarts/lib/visual/dataColor.js","webpack:///./node_modules/echarts/lib/loading/default.js","webpack:///./node_modules/echarts/lib/model/mixin/areaStyle.js","webpack:///./node_modules/zrender/lib/graphic/helper/smoothBezier.js","webpack:///./node_modules/echarts/lib/chart/treemap/treemapLayout.js","webpack:///./node_modules/echarts/lib/layout/barGrid.js","webpack:///./node_modules/zrender/lib/graphic/mixin/RectText.js","webpack:///./node_modules/echarts/lib/coord/axisModelCreator.js","webpack:///./node_modules/echarts/lib/component/dataZoom/dataZoomAction.js","webpack:///./node_modules/zrender/lib/contain/arc.js","webpack:///./node_modules/zrender/lib/svg/helper/ClippathManager.js","webpack:///./node_modules/echarts/lib/chart/radar/RadarSeries.js","webpack:///./node_modules/echarts/lib/component/timeline/typeDefaulter.js","webpack:///./node_modules/echarts/lib/chart/tree/orthogonalLayout.js","webpack:///./node_modules/echarts/lib/util/symbol.js","webpack:///./node_modules/echarts/lib/component/dataZoom/InsideZoomModel.js","webpack:///./node_modules/echarts/lib/chart/helper/LargeLineDraw.js","webpack:///./node_modules/echarts/lib/chart/funnel.js","webpack:///./node_modules/echarts/lib/component/helper/interactionMutex.js","webpack:///./node_modules/echarts/lib/chart/map/MapView.js","webpack:///./node_modules/zrender/lib/graphic/helper/text.js","webpack:///./node_modules/echarts/lib/chart/gauge/GaugeView.js","webpack:///./node_modules/echarts/lib/chart/lines.js","webpack:///./node_modules/echarts/lib/coord/geo/fix/diaoyuIsland.js","webpack:///./node_modules/zrender/lib/vml/graphic.js","webpack:///./node_modules/echarts/lib/component/brush/selector.js","webpack:///./node_modules/echarts/lib/component/marker/MarkPointModel.js","webpack:///./node_modules/echarts/lib/component/tooltip/TooltipModel.js","webpack:///./node_modules/echarts/lib/coord/polar/AngleAxis.js","webpack:///./node_modules/echarts/lib/coord/cartesian/prepareCustom.js","webpack:///./node_modules/echarts/lib/chart/pictorialBar.js","webpack:///./node_modules/echarts/lib/component/visualMap/visualEncoding.js","webpack:///./node_modules/echarts/lib/chart/parallel/parallelVisual.js","webpack:///./node_modules/echarts/lib/chart/scatter/ScatterView.js","webpack:///./node_modules/zrender/lib/graphic/shape/BezierCurve.js","webpack:///./node_modules/echarts/lib/chart/graph/circularLayout.js","webpack:///./node_modules/echarts/lib/chart/themeRiver/ThemeRiverSeries.js","webpack:///./node_modules/echarts/lib/chart/lines/LinesView.js","webpack:///./node_modules/echarts/lib/component/brush/preprocessor.js","webpack:///./node_modules/echarts/lib/component/axis.js","webpack:///./node_modules/zrender/lib/Storage.js","webpack:///./node_modules/echarts/lib/component/axis/ParallelAxisView.js","webpack:///./node_modules/echarts/lib/component/toolbox.js","webpack:///./node_modules/echarts/lib/view/Component.js","webpack:///./node_modules/zrender/lib/svg/helper/GradientManager.js","webpack:///./node_modules/echarts/lib/component/visualMap/preprocessor.js","webpack:///./node_modules/echarts/lib/chart/treemap/TreemapView.js","webpack:///./node_modules/echarts/lib/component/axis/AngleAxisView.js","webpack:///./node_modules/echarts/lib/chart/bar/barItemStyle.js","webpack:///./node_modules/echarts/lib/export.js","webpack:///./node_modules/echarts/lib/component/brush/brushAction.js","webpack:///./node_modules/echarts/lib/chart/pie/labelLayout.js","webpack:///./node_modules/echarts/lib/component/visualMap/typeDefaulter.js","webpack:///./node_modules/echarts/lib/component/axis/SingleAxisView.js","webpack:///./node_modules/zrender/lib/mixin/Animatable.js","webpack:///./node_modules/echarts/lib/chart/candlestick/CandlestickSeries.js","webpack:///./node_modules/echarts/lib/component/helper/BrushTargetManager.js","webpack:///./node_modules/echarts/lib/coord/geo/parseGeoJson.js","webpack:///./node_modules/echarts/lib/chart/tree/treeAction.js","webpack:///./node_modules/echarts/lib/chart/pie.js","webpack:///./node_modules/echarts/lib/component/brush/BrushView.js","webpack:///./node_modules/echarts/lib/component/parallelAxis.js","webpack:///./node_modules/echarts/lib/component/helper/cursorHelper.js","webpack:///./node_modules/echarts/lib/coord/single/AxisModel.js","webpack:///./node_modules/echarts/lib/chart/helper/labelHelper.js","webpack:///./node_modules/zrender/lib/graphic/shape/Rect.js","webpack:///./node_modules/echarts/lib/chart/helper/EffectSymbol.js","webpack:///./node_modules/echarts/lib/chart/helper/LargeSymbolDraw.js","webpack:///./node_modules/echarts/lib/model/OptionManager.js","webpack:///./node_modules/zrender/lib/graphic/shape/Line.js","webpack:///./node_modules/echarts/lib/chart/scatter/ScatterSeries.js","webpack:///./node_modules/zrender/lib/mixin/Draggable.js","webpack:///./node_modules/echarts/lib/component/axisPointer.js","webpack:///./node_modules/echarts/lib/component/visualMap/helper.js","webpack:///./node_modules/zrender/lib/graphic/Path.js","webpack:///./node_modules/echarts/lib/coord/cartesian/Cartesian2D.js","webpack:///./node_modules/echarts/lib/component/dataZoom/AxisProxy.js","webpack:///./node_modules/echarts/lib/component/grid.js","webpack:///./node_modules/echarts/lib/component/axisPointer/modelHelper.js","webpack:///./node_modules/echarts/lib/chart/heatmap/HeatmapLayer.js","webpack:///./node_modules/zrender/lib/dom/HandlerProxy.js","webpack:///./node_modules/echarts/lib/chart/map/mapSymbolLayout.js","webpack:///./src/assets/About_item_5.jpg","webpack:///./node_modules/echarts/lib/coord/cartesian/Cartesian.js","webpack:///./src/assets/About_item_4.jpg","webpack:///./node_modules/echarts/lib/chart/sankey/SankeySeries.js","webpack:///./node_modules/echarts/lib/component/geo.js","webpack:///./node_modules/echarts/lib/coord/calendar/Calendar.js","webpack:///./node_modules/echarts/lib/component/legend.js","webpack:///./node_modules/zrender/lib/Handler.js","webpack:///./node_modules/echarts/lib/chart/graph/simpleLayout.js","webpack:///./node_modules/echarts/lib/component/toolbox/feature/MagicType.js","webpack:///./node_modules/zrender/lib/vml/core.js","webpack:///./node_modules/echarts/lib/processor/dataFilter.js","webpack:///./node_modules/zrender/lib/graphic/shape/Polyline.js","webpack:///./node_modules/echarts/lib/component/axisPointer/AxisPointerView.js","webpack:///./node_modules/zrender/lib/graphic/CompoundPath.js","webpack:///./node_modules/echarts/lib/chart/line/poly.js","webpack:///./node_modules/zrender/lib/core/LRU.js","webpack:///./node_modules/zrender/lib/Element.js","webpack:///./node_modules/echarts/lib/chart/bar/PictorialBarSeries.js","webpack:///./node_modules/echarts/lib/component/visualMap/visualMapAction.js","webpack:///./node_modules/echarts/lib/chart/graph/graphAction.js","webpack:///./node_modules/echarts/lib/action/roamHelper.js","webpack:///./node_modules/zrender/lib/contain/path.js","webpack:///./node_modules/echarts/lib/coord/parallel/Parallel.js","webpack:///./node_modules/echarts/lib/coord/polar/AxisModel.js","webpack:///./node_modules/zrender/lib/graphic/shape/Circle.js","webpack:///./node_modules/echarts/lib/chart/treemap.js","webpack:///./node_modules/echarts/lib/component/markPoint.js","webpack:///./src/assets/About_item_3.jpg","webpack:///./node_modules/echarts/lib/component/toolbox/ToolboxView.js","webpack:///./node_modules/zrender/lib/svg/Painter.js","webpack:///./node_modules/zrender/lib/graphic/Pattern.js","webpack:///./src/views/About/GSJJ.vue","webpack:///./src/views/About/GSJJ.vue?80aa","webpack:///./node_modules/echarts/lib/component/axisPointer/BaseAxisPointer.js","webpack:///./node_modules/echarts/lib/chart/boxplot/BoxplotView.js","webpack:///./src/assets/About_item_1.jpg","webpack:///./node_modules/echarts/lib/component/dataZoomSelect.js","webpack:///./node_modules/echarts/lib/component/timeline/SliderTimelineModel.js","webpack:///./node_modules/zrender/lib/graphic/RadialGradient.js","webpack:///./node_modules/zrender/lib/core/guid.js","webpack:///./node_modules/echarts/lib/model/mixin/boxLayout.js","webpack:///./node_modules/echarts/lib/chart/graph/edgeVisual.js","webpack:///./node_modules/echarts/lib/coord/parallel/AxisModel.js","webpack:///./node_modules/echarts/lib/component/toolbox/feature/Restore.js","webpack:///./node_modules/echarts/lib/chart/custom.js","webpack:///./node_modules/echarts/lib/util/model.js","webpack:///./node_modules/echarts/lib/scale/Scale.js","webpack:///./node_modules/zrender/lib/container/Group.js","webpack:///./node_modules/zrender/lib/core/bbox.js","webpack:///./node_modules/echarts/lib/chart/helper/whiskerBoxCommon.js","webpack:///./node_modules/echarts/lib/model/mixin/colorPalette.js","webpack:///./node_modules/echarts/lib/util/animation.js","webpack:///./node_modules/echarts/lib/chart/bar/helper.js","webpack:///./node_modules/zrender/lib/contain/cubic.js","webpack:///./node_modules/zrender/lib/contain/text.js","webpack:///./node_modules/echarts/lib/view/Chart.js","webpack:///./node_modules/zrender/lib/vml/Painter.js","webpack:///./node_modules/echarts/lib/chart/candlestick/preprocessor.js","webpack:///./node_modules/echarts/lib/component/visualMap/VisualMapModel.js","webpack:///./node_modules/echarts/lib/coord/polar/prepareCustom.js","webpack:///./node_modules/echarts/lib/component/axis/singleAxisHelper.js","webpack:///./node_modules/echarts/lib/component/axisPointer/axisTrigger.js","webpack:///./node_modules/echarts/lib/component/legend/scrollableLegendAction.js","webpack:///./node_modules/echarts/lib/coord/cartesian/Axis2D.js","webpack:///./node_modules/echarts/lib/chart/boxplot/boxplotLayout.js","webpack:///./node_modules/zrender/lib/Painter.js","webpack:///./node_modules/echarts/lib/util/format.js","webpack:///./node_modules/echarts/lib/component/timeline/TimelineModel.js","webpack:///./node_modules/echarts/lib/component/calendar/CalendarView.js","webpack:///./node_modules/echarts/lib/util/array/nest.js","webpack:///./node_modules/zrender/lib/tool/transformPath.js","webpack:///./node_modules/echarts/lib/component/timeline.js","webpack:///./node_modules/echarts/lib/chart/lines/linesVisual.js","webpack:///./node_modules/echarts/lib/coord/geo/geoCreator.js","webpack:///./node_modules/echarts/lib/chart/graph/forceHelper.js","webpack:///./node_modules/echarts/lib/component/helper/sliderMove.js","webpack:///./node_modules/echarts/lib/chart/line.js","webpack:///./node_modules/echarts/lib/chart/tree.js","webpack:///./node_modules/echarts/lib/chart/line/lineAnimationDiff.js","webpack:///./node_modules/echarts/lib/component/axisPointer/SingleAxisPointer.js","webpack:///./node_modules/echarts/lib/component/legend/ScrollableLegendModel.js","webpack:///./node_modules/zrender/lib/vml/vml.js","webpack:///./node_modules/echarts/lib/chart/line/LineView.js","webpack:///./node_modules/echarts/lib/component/axis/CartesianAxisView.js","webpack:///./node_modules/echarts/lib/coord/geo/Region.js","webpack:///./node_modules/echarts/lib/component/parallel.js","webpack:///./node_modules/echarts/lib/component/brush/BrushModel.js","webpack:///./node_modules/echarts/lib/component/helper/brushHelper.js","webpack:///./node_modules/echarts/lib/component/angleAxis.js","webpack:///./node_modules/echarts/lib/chart/treemap/Breadcrumb.js","webpack:///./node_modules/echarts/lib/chart/map/mapDataStatistic.js","webpack:///./node_modules/echarts/lib/chart/helper/SymbolDraw.js","webpack:///./node_modules/echarts/lib/chart/pie/PieSeries.js","webpack:///./node_modules/echarts/lib/util/layout.js","webpack:///./node_modules/echarts/lib/chart/boxplot.js","webpack:///./node_modules/echarts/lib/component/axis/AxisBuilder.js","webpack:///./node_modules/echarts/lib/chart/tree/commonLayout.js","webpack:///./node_modules/echarts/lib/preprocessor/backwardCompat.js","webpack:///./src/views/About/GSJJ.vue?278c","webpack:///./node_modules/echarts/lib/component/helper/BrushController.js","webpack:///./node_modules/echarts/lib/coord/polar/Polar.js","webpack:///./node_modules/echarts/lib/visual/seriesColor.js","webpack:///./node_modules/echarts/lib/processor/dataSample.js","webpack:///./node_modules/echarts/lib/model/mixin/textStyle.js","webpack:///./node_modules/echarts/lib/chart/boxplot/BoxplotSeries.js","webpack:///./node_modules/echarts/lib/component/toolbox/feature/Brush.js","webpack:///./node_modules/echarts/lib/component/axisPointer/viewHelper.js"],"names":["List","zrUtil","SeriesModel","completeDimensions","_default","extend","type","dependencies","visualColorAccessPath","getInitialData","option","ecModel","parallelModel","getComponent","this","get","parallelAxisIndices","parallelAxisIndex","rawData","data","modelDims","dimensions","dataDims","generateDataDims","dataDimsInfo","map","dim","dimIndex","modelDimsIndex","indexOf","axisModel","translateCategoryValue","name","guessOrdinal","list","initData","progressive","animation","getRawIndicesByActiveState","activeState","coordSys","coordinateSystem","getData","indices","eachActiveState","theActiveState","dataIndex","push","getRawIndex","defaultOption","zlevel","z","parallelIndex","label","normal","show","emphasis","inactiveOpacity","activeOpacity","lineStyle","width","opacity","smooth","animationEasing","axisData","numberDim","convertDimNameToNumber","length","each","dataItem","index","NaN","dimName","replace","maxDimNum","firstItem","i","module","exports","VisualMapView","graphic","_symbol","createSymbol","layout","helper","PiecewiseVisualMapView","doRender","thisGroup","group","removeAll","visualMapModel","textGap","textStyleModel","textFont","getFont","textFill","getTextColor","itemAlign","_getItemAlign","itemSize","viewData","_getViewData","endsText","showLabel","retrieve","renderItem","item","piece","itemGroup","Group","onclick","bind","_onItemClick","_enableHoverLink","indexInModelPieceList","representValue","getRepresentValue","_createItemSymbol","visualState","getValueState","add","Text","style","x","y","text","textVerticalAlign","textAlign","_renderEndsText","viewPieceList","box","renderBackground","positionGroup","pieceIndex","onHoverLink","method","hoverLink","api","dispatchAction","batch","convertDataIndex","findTargetDataIndices","on","modelOption","orient","getItemAlign","align","getPieceList","inverse","reverse","slice","shapeParam","getControllerVisual","selected","clone","newKey","getSelectedMapKey","selectedMode","o","key","from","uid","visualMapId","id","echarts","registerAction","event","update","_model","defaultEmphasis","FunnelSeries","extendSeriesModel","init","superApply","arguments","legendDataProvider","getRawData","_defaultLabelLine","labelLine","labelLineNormalOpt","labelLineEmphasisOpt","getDataParams","params","superCall","sum","getSum","percent","toFixed","$vars","legendHoverLink","left","top","right","bottom","minSize","maxSize","sort","gap","funnelAlign","position","itemStyle","borderColor","borderWidth","dataToCoordSize","dataSize","dimIdx","val","halfSize","p1","p2","Math","abs","dataToPoint","rect","getBoundingRect","height","coord","size","BoundingRect","parseGeoJson","View","fixNanhai","fixTextCoord","fixGeoCoord","fixDiaoyuIsland","geoFixFuncs","Geo","geoJson","specialAreas","nameMap","call","_nameCoordMap","createHashMap","loadGeoJson","doConvert","methodName","finder","value","geoModel","seriesModel","getReferringComponents","prototype","constructor","containCoord","regions","contain","e","message","regionsMap","regionName","hasOwnProperty","set","addGeoCoord","center","specialArea","transformTo","_regionsMap","_rect","fixFunc","viewTransform","_viewTransform","transform","calculateTransform","decomposeTransform","scale","updateTransform","_updateTransform","getRegion","getRegionByCoord","geoCoord","getGeoCoord","regionRect","union","convertToPixel","curry","convertFromPixel","mixin","extendComponentView","render","gridModel","Rect","shape","getRect","defaults","fill","getItemStyle","silent","z2","registerPreprocessor","xAxis","yAxis","grid","updateViewOnPan","controllerHost","dx","dy","target","pos","dirty","updateViewOnZoom","zoomDelta","zoomX","zoomY","zoomLimit","newZoom","zoom","zoomMin","min","zoomMax","max","Infinity","zoomScale","DEFAULT_MIN_MERGE","DEFAULT_MIN_GALLOPING","minRunLength","n","r","makeAscendingRun","array","lo","hi","compare","runHi","reverseRun","t","binaryInsertionSort","start","mid","pivot","gallopLeft","hint","lastOffset","maxOffset","offset","tmp","m","gallopRight","TimSort","runStart","runLength","minGallop","stackSize","pushRun","_runStart","_runLength","mergeRuns","mergeAt","forceMergeRuns","start1","length1","start2","length2","k","mergeLow","mergeHigh","cursor1","cursor2","dest","count1","count2","exit","_minGallop","Error","customCursor","customDest","remaining","ts","minRun","force","windingLine","EPSILON","isAroundEqual","a","b","points","w","p","p0","Clip","color","_util","isArrayLike","arraySlice","Array","defaultGetter","defaultSetter","interpolateNumber","interpolateString","interpolateArray","out","arrDim","len","len2","j","fillArr","arr0","arr1","arr0Len","arr1Len","isPreviousLarger","isNaN","isArraySame","catmullRomInterpolateArray","p3","t2","t3","catmullRomInterpolate","v0","v1","cloneValue","ret","rgba2String","rgba","floor","join","getArrayDim","keyframes","lastValue","createTrackClip","animator","easing","oneTrackDone","propName","forceAnimate","getter","_getter","setter","_setter","useSpline","trackLen","trackMaxTime","firstVal","isValueArray","isValueColor","isValueString","time","kfPercents","kfValues","prevValue","isAllValueEqual","colorArray","parse","_target","lastFrame","lastFramePercent","onframe","frame","range","clip","life","loop","_loop","delay","_delay","ondestroy","Animator","_tracks","_clipCount","_doneList","_onframeList","_clipList","when","props","tracks","during","callback","pause","_paused","resume","isPaused","_doneCallback","doneList","lastClip","self","clipCount","addClip","oldOnFrame","stop","forwardToLast","clipList","removeClip","done","cb","getClips","Model","linkList","TreeNode","hostTree","depth","parentNode","children","viewChildren","Tree","hostModel","levelOptions","leavesOption","root","_nodes","levelModels","levelDefine","leavesModel","addChild","child","node","isRemoved","eachNode","options","context","isString","order","suppressVisitSub","attr","updateDepthAndHeight","getNodeById","getId","res","contains","getAncestors","includeSelf","ancestors","getValue","dimension","getDimension","setLayout","merge","setItemLayout","getLayout","getItemLayout","getModel","path","itemModel","getItemModel","levelModel","getLevelModel","isExpand","getLeavesModel","setVisual","setItemVisual","getVisual","ignoreParent","getItemVisual","getNodeByDataIndex","rawIndex","getNodeByName","nodes","count","clearLayouts","clearItemLayouts","createTree","dataRoot","treeOptions","tree","levels","leaves","listData","dimMax","buildHierarchy","dataNode","isArray","dimCount","mainData","struct","structAttr","_config","__DEV__","VisualMapModel","VisualMapping","visualDefault","_number","reformIntervals","PiecewiseModel","minOpen","maxOpen","itemWidth","itemHeight","itemSymbol","pieceList","categories","splitNumber","itemGap","optionUpdated","newOption","isInit","_pieceList","resetExtent","mode","_mode","_determineMode","resetMethods","_resetSelected","resetVisual","mappingOption","state","mappingMethod","dataExtent","getExtent","visual","completeVisualOption","visualTypesInPieces","visualTypes","listVisualTypes","isCategory","has","obj","visualType","isObject","pieces","v","exists","stateList","apply","thisOption","hasSel","setSelected","findPieceIndex","result","eachTargetSeries","dataIndices","getDataDimension","pIdx","seriesId","pieceInterval","interval","getVisualMeta","getColorVisual","stops","outerColors","edge","unshift","curr","setStop","valueState","precision","parseInt","splitStep","close","formatValueText","cate","normalizeReverse","pieceListItem","closeList","infinityList","useMinMax","lg","names","retrieveVisuals","edgeSymbols","zrColor","eventUtil","env","formatUtil","toCamelCase","vendors","gCssText","assembleTransition","duration","transitionCurve","transitionText","vendorPrefix","assembleFont","cssText","fontSize","round","assembleCssText","tooltipModel","transitionDuration","backgroundColor","padding","canvasSupported","toHex","borderName","camelCase","normalizeCssArray","TooltipContent","container","el","document","createElement","zr","_zr","getZr","_x","getWidth","_y","getHeight","appendChild","_container","_show","_hideTimeout","onmouseenter","_enterable","clearTimeout","_inContent","onmousemove","window","handler","normalizeEvent","dispatch","onmouseleave","hideLater","_hideDelay","stl","currentStyle","defaultView","getComputedStyle","domStyle","display","innerHTML","setContent","content","setEnterable","enterable","getSize","clientWidth","clientHeight","moveTo","viewportRootOffset","painter","getViewportRootOffset","offsetLeft","offsetTop","hide","setTimeout","isShow","parallelVisual","registerVisual","preprocessor","candlestickVisual","candlestickLayout","registerLayout","Axis","axisHelper","TimelineAxis","coordExtent","axisType","_autoLabelInterval","model","getLabelInterval","timelineModel","labelModel","labelInterval","getAxisLabelInterval","getTicks","dataToCoord","getFormattedLabels","isLabelIgnored","idx","getLabel","inherits","parsePercent","_graphic","subPixelOptimize","retrieve2","eachSeriesByType","cDim","candleWidth","calculateCandleWidth","chartLayout","variableDim","constDim","coordDims","vDims","dimInfo","getDimensionInfo","coordDim","concat","sign","args","axisDimVal","openVal","closeVal","lowestVal","highestVal","ocLow","ocHigh","ocLowPoint","getPoint","ocHighPoint","lowestPoint","highestPoint","whiskerEnds","subPixelOptimizePoint","bodyEnds","addBodyEnd","point","point1","point2","makeBrushRect","pmin","pmax","initBaseline","brushRect","extent","baseAxis","getBaseAxis","bandWidth","getBandWidth","barMaxWidth","barMinWidth","barWidth","commonLayout","GestureMgr","_track","dist","pointPair","sqrt","recognize","_doTrack","_recognize","clear","touches","trackItem","touch","clientToLocal","zrX","zrY","eventName","recognizers","gestureInfo","pinch","track","pinchEnd","pinchPre","pinchScale","isFinite","pinchCenter","pinchX","pinchY","Diff","buildValues","diff","components","newArr","oldArr","componentPos","componentLen","newPos","oldPos","component","removed","added","clonePath","equals","newLen","oldLen","editLength","maxEditLength","bestPath","extractCommon","execEditLength","diagonalPath","basePath","addPath","removePath","undefined","canAdd","canRemove","pushComponent","last","commonCount","tokenize","arrayDiff","RoamController","roamHelper","_cursorHelper","onIrrelevantElement","getFixedItemStyle","areaColor","updateMapSelectHandler","mapDraw","mapOrGeoModel","fromView","off","_mouseDownFlag","__regions","parent","action","mainType","region","updateMapSelected","eachChild","otherRegionEl","trigger","isSelected","MapDraw","updateGroup","_controller","_controllerHost","_updateGroup","draw","payload","isGeo","eachComponent","subType","mapSeries","getHostGeoModel","geo","groupNewProp","childAt","updateProps","itemStyleAccessPath","hoverItemStyleAccessPath","labelAccessPath","hoverLabelAccessPath","regionGroup","compoundPath","CompoundPath","paths","dataIdx","regionModel","getRegionModel","itemStyleModel","hoverItemStyleModel","hoverItemStyle","hoverLabelModel","indexOfName","visualColor","geometries","geometry","Polygon","exterior","interiors","setStyle","strokeNoScale","culling","hoverShowLabel","isDataNaN","itemLayout","labelFetcher","query","textEl","setLabelStyle","hoverStyle","labelDataIndex","defaultText","useInsideStyle","setItemGraphicEl","eventData","componentType","geoIndex","componentIndex","groupRegions","setHoverStyle","hoverSilentOnTouch","_updateController","remove","dispose","controller","getZoom","enable","makeActionBase","mouseX","mouseY","originX","originY","traverse","setPointerChecker","getViewRectAfterRoam","matrix","vector","mIdentity","identity","isNotAroundZero","Transformable","opts","rotation","origin","transformableProto","needLocalTransform","parentHasTransform","create","getLocalTransform","mul","copy","invTransform","invert","setTransform","ctx","dpr","restoreTransform","tmpTransform","sx","sy","atan2","getGlobalScale","transformCoordToLocal","v2","applyTransform","transformCoordToGlobal","rotate","Displayable","imageHelper","ZImage","brush","prevEl","src","image","_image","createOrUpdateImage","onload","isImageReady","aspect","sWidth","sHeight","drawImage","drawRectText","graph","getGraph","minValue","maxValue","mapping","mapValueToColor","mapValueToVisual","customColor","layoutUtil","LegendView","WH","XY","ScrollableLegendView","newlineDisabled","_currentIndex","_containerGroup","getContentGroup","_controllerGroup","_showController","resetInner","removeClipPath","__rectSize","renderInner","legendModel","me","controllerGroup","pageIconSize","createPageButton","pageTextStyleModel","iconIdx","pageDataIndexName","icon","createIcon","getOrient","_pageGo","font","layoutInner","contentGroup","containerGroup","orientIdx","wh","hw","yx","contentRect","controllerRect","showController","contentPos","containerPos","controllerPos","pageButtonGap","pageButtonPosition","mainRect","clipShape","setClipPath","invisible","pageInfo","_getPageInfo","pageIndex","contentPosition","_updatePageInfoView","to","scrollDataIndex","legendId","canJump","childOfName","cursor","pageText","pageFormatter","current","total","pageCount","pagePrevDataIndex","pageNextDataIndex","targetItemGroup","currDataIndex","containerRectSize","xy","__legendDataIndex","ceil","itemRect","itemLoc","startIdx","winRect","getItemRect","intersect","startItem","startRect","ParallelAxis","axisIndex","isHorizontal","Line","vec2","curveUtil","EffectLine","lineData","seriesScope","createLine","_updateEffectSymbol","effectLineProto","effectModel","symbolType","symbol","_symbolType","setColor","_updateEffectAnimation","period","constantSpeed","delayExpr","isDelayFunc","ignore","updateAnimationPoints","getLineLength","_period","stopAnimation","__t","animate","updateSymbolPosition","__p1","__cp1","__p2","updateData","cp1","quadraticAt","quadraticDerivativeAt","tx","ty","PI","updateLayout","visualSolution","selector","throttleUtil","BrushTargetManager","STATE_LIST","DISPATCH_METHOD","DISPATCH_FLAG","PRIORITY_BRUSH","PRIORITY","VISUAL","BRUSH","throttleType","throttleDelay","brushSelected","doDispatch","fn","createOrUpdate","isDisposed","checkInRange","selectorsByBrushType","rangeInfoList","area","brushType","selectors","getSelectorsByBrushType","brushSelector","sels","selectorsByElementType","isFunction","bSelector","sel","brushModelNotControll","brushModel","seriesIndex","seriesIndices","bindSelector","selFn","elType","setBrushOption","brushOption","brushTargetManager","setInputRanges","areas","brushIndex","thisBrushSelected","brushId","brushName","brushLink","linkedSeriesMap","selectedDataIndexForLink","rangeInfoBySeries","hasBrushExists","boundingRect","boundingRectBuilders","visualMappings","createVisualMappings","linkOthers","brushed","stepAParallel","hasAxisBrushed","stepAOthers","controlSeries","eachSeries","seriesBrushSelected","seriesName","applyVisual","lineX","noop","lineY","getBoundingRectFromMinMax","polygon","minMax","rg","visualSymbol","layoutPoints","modelUtil","getSeriesByIndex","queryDataIndex","getItemGraphicEl","getTooltipPosition","getValues","coordDimToDataDim","_labelHelper","findLabelValueDim","getSymbolSize","symbolSize","getScale","SymbolClz","symbolProto","driftSymbol","drift","_createSymbol","symbolPath","stopSymbolAnimation","toLastFrame","getSymbolPath","highlight","downplay","setZ","setDraggable","draggable","_updateCommon","fadeIn","initProps","_seriesModel","normalStyleAccessPath","emphasisStyleAccessPath","normalLabelAccessPath","emphasisLabelAccessPath","useStyle","symbolRotate","symbolOffset","hoverAnimation","cursorStyle","hasItemOption","getShallow","elStyle","symbolInnerColor","useNameLabel","valueDim","getName","isRectText","autoColor","isAnimationEnabled","onEmphasis","ratio","animateTo","onNormal","fadeOut","opt","keepLabel","symbolUtil","normalizeSymbolSize","extendChartView","polar","oldData","_data","updateSymbols","oldPoints","newPoints","symbolGroup","__dimIdx","getInitialPoints","pt","cx","cy","polyline","Polyline","newIdx","oldIdx","execute","eachItemGraphicEl","getLineStyle","stroke","areaStyleModel","hoverAreaStyleModel","polygonIgnore","isEmpty","parentModel","hoverPolygonIgnore","getAreaStyle","itemHoverStyle","labelHoverModel","labelDimIndex","AxisBuilder","AxisView","axisBuilderAttrs","selfBuilderAttrs","axisPointerClass","radiusAxisModel","radiusAxis","axis","angleAxis","getAngleAxis","ticksCoords","getTicksCoords","axisAngle","radiusExtent","layoutAxis","axisBuilder","getGroup","isBlank","_splitLine","splitLineModel","lineStyleModel","lineColors","lineCount","splitLines","colorIndex","Circle","mergePath","_splitArea","splitAreaModel","areaColors","splitAreas","prevRadius","Sector","r0","startAngle","endAngle","labelDirection","tickDirection","nameDirection","labelRotate","createListFromArray","axisModelCommonMixin","_completeDimensions","createList","createScale","createScaleByModel","setExtent","niceScaleExtent","mixinAxisModelCommonMethods","ArrayCtor","Float32Array","m1","m2","out0","out1","out2","out3","out4","out5","translate","rad","aa","ac","atx","ab","ad","aty","st","sin","ct","cos","vx","vy","det","axisDefault","valueAxisDefault","valueAxis","defaultsShow","RadarModel","extendComponentModel","boundaryGap","axisLine","axisTick","axisLabel","nameTextStyle","showName","nameFormatter","nameGap","triggerEvent","indicatorModels","indicatorOpt","iNameTextStyle","nameLocation","indName","getIndicatorModels","radius","splitLine","splitArea","indicator","coordsOffsetMap","coordFix","cp","BaseBarSeries","makeGetter","register","records","initGlobalListeners","record","useHandler","eventType","dis","makeDispatchAction","dispatchTooltipFinally","pendings","initialized","doEnter","onLeave","actuallyPayload","showLen","showTip","hideLen","hideTip","currTrigger","pendingList","unregister","Scale","scaleProto","OrdinalScale","_extent","rank","normalize","ticks","unionExtentFromData","unionExtent","getDataExtent","niceTicks","niceExtent","MarkerModel","tooltip","ChartView","_whiskerBoxCommon","viewMixin","CandlestickView","getStyleUpdater","updateStyle","normalItemStyleModel","whiskerEl","whiskerIndex","bodyEl","bodyIndex","Style","Element","RectText","__clipPaths","__dirty","dragging","rectHover","beforeBrush","afterBrush","rectContain","__zr","refresh","animateStyle","attrKV","rawAxisPosition","axisPosition","onZero","axisDim","rectBound","axisOffset","posBound","otherAxis","getAxis","onZeroAxisIndex","onZeroCoord","toGlobalCoord","dirMap","labelOffset","labelInside","updateDataSelected","hasAnimation","selectedOffset","toggleItemSelected","midAngle","PiePiece","sector","hoverIgnore","normalIgnore","piePieceProto","firstCreate","sectorShape","setShape","animationType","lineJoin","_updateLabel","labelText","labelLayout","linePoints","labelLineModel","labelLineHoverModel","inside","verticalAlign","PieView","sectorGroup","_sectorGroup","isFirstRender","onSectorClick","piePiece","_createClipPath","clockwise","clipPath","containPoint","simpleLayout","simpleLayoutEdge","eachEdge","curveness","node1","node2","Polar","_axisHelper","CoordinateSystem","resizePolar","polarModel","getRadiusAxis","updatePolarScale","onBand","setAxis","polarCreator","polarList","findAxisModel","angleAxisModel","queryComponents","getSeriesStackId","getAxisKey","barLayoutPolar","seriesType","lastStackCoords","lastStackCoordsOrigin","barWidthAndOffset","calRadialBar","filter","getSeriesByType","isSeriesFiltered","stackId","columnLayoutInfo","columnOffset","columnWidth","getOtherAxis","barMinHeight","barMinAngle","valueAxisStart","valueMax","valueMin","coords","mapArray","angle","pointToCoord","lastCoordOrigin","dataToAngle","stackCoord","barSeries","columnsMap","axisExtent","columnsOnAxis","remainedWidth","autoWidthCount","categoryGap","stacks","maxWidth","barGap","barCategoryGap","coordSysName","barGapPercent","autoWidth","column","stack","lastColumn","widthSum","Path","buildPath","mathCos","mathSin","lineTo","ComponentModel","selectableMixin","geoCreator","GeoModel","layoutMode","getFilledRegions","_optionModelMap","reduce","optionModelMap","regionOpt","updateSelectedMap","aspectScale","boundingCoords","scaleLimit","getFormattedLabel","status","formatter","setZoom","setCenter","arrySlice","Eventful","_$handlers","one","_h","h","isSilent","newList","l","argLen","splice","triggerWithContext","getCategories","getMin","rangeStart","eqNaN","getMax","rangeEnd","getNeedCrossZero","getCoordSysModel","setRange","resetRange","coordinateSystemCreators","CoordinateSystemManager","_coordinateSystems","coordinateSystems","creater","getCoordinateSystems","coordinateSystemCreator","curve","bbox","devicePixelRatio","CMD","M","L","C","Q","A","Z","R","min2","max2","mathMin","mathMax","mathSqrt","mathAbs","hasTypedArray","PathProxy","notSaveData","_saveData","_ctx","_xi","_yi","_x0","_y0","_ux","_uy","_len","_lineDash","_dashOffset","_dashIdx","_dashSum","setScale","getContext","beginPath","addData","exceedUnit","_needsDash","_dashedLineTo","bezierCurveTo","x1","y1","x2","y2","x3","y3","_dashedBezierTo","quadraticCurveTo","_dashedQuadraticTo","arc","anticlockwise","arcTo","closePath","x0","y0","toStatic","setLineDash","lineDash","lineDashSum","setLineDashOffset","setData","appendPath","appendSize","appendPathData","cmd","_expandData","_prevCmd","newData","dash","dashSum","nDash","cubicAt","bezierLen","tmpLen","Number","MAX_VALUE","xi","yi","fromLine","fromCubic","fromQuadratic","rx","ry","fromArc","rebuildPath","d","ux","uy","theta","dTheta","psi","fs","scaleX","scaleY","isEllipse","features","ctor","_format","encodeHTML","layoutInfo","treeOption","treeDepth","expandAndCollapse","expandTreeDepth","initialTreeDepth","getRawDataItem","collapsed","formatTooltip","realRoot","animationDuration","animationDurationUpdate","numberUtil","scaleHelper","IntervalScale","intervalScaleProto","mathCeil","mathFloor","ONE_SECOND","ONE_MINUTE","ONE_HOUR","ONE_DAY","bisect","TimeScale","stepLvl","_stepLvl","date","Date","formatTime","getSetting","getFullYear","getMonth","getDate","minInterval","maxInterval","_interval","fixMin","fixMax","approxTickNum","span","approxInterval","scaleLevelsLen","scaleLevels","level","yearSpan","yearStep","nice","timezoneOffset","getTimezoneOffset","fixExtent","_niceExtent","parseDate","useUTC","clipOverflow","step","smoothMonotone","showSymbol","showAllSymbol","connectNulls","sampling","hoverLayerThreshold","Component","axisExpandable","axisExpandCenter","axisExpandCount","axisExpandWidth","axisExpandRate","axisExpandDebounce","axisExpandSlideTriggerArea","axisExpandTriggerOn","parallelAxisDefault","mergeOption","_initDimensions","setAxisExpand","axisModels","dependentModels","parallelAxis","navigator","browser","os","svgSupported","detect","userAgent","ua","firefox","match","ie","weChat","test","version","SVGRect","touchEventsSupported","pointerEventsSupported","hierNode","defaultAncestor","ancestor","prelim","modifier","change","shift","thread","pop","firstWalk","separation","siblings","subtreeW","executeShifts","midPoint","apportion","secondWalk","nodeX","defaultSeparation","radialCoordinate","radialCoor","getViewRect","getLayoutRect","getBoxLayoutParams","subtreeV","nodeOutRight","nodeInRight","nodeOutLeft","nodeInLeft","sumOutRight","sumInRight","sumOutLeft","sumInLeft","nextRight","nextLeft","moveSubtree","nextAncestor","wl","wr","pathTool","colorTool","Image","Ring","BezierCurve","Arc","LinearGradient","RadialGradient","EMPTY_OBJ","extendShape","extendPath","pathData","extendFromString","makePath","createFromString","centerGraphic","resizePath","makeImage","imageUrl","img","pathRect","subPixelOptimizeLine","param","lineWidth","subPixelOptimizeRect","originWidth","originHeight","positiveOrNegative","doubledPosition","hasFillOrStroke","fillOrStroke","liftColor","lift","cacheElementStl","__hoverStlDirty","__hoverStl","normalStyle","__normalStl","doSingleEnterHover","__isHover","useHoverLayer","addHover","insideRollbackOpt","rollbackInsideStyle","extendFrom","applyInsideStyle","insideOriginalTextPosition","doSingleLeaveHover","normalStl","removeHover","doEnterHover","doLeaveHover","setElementHoverStl","hoverStl","onElementMouseOver","__hoverSilentOnTouch","zrByTouch","__isEmphasis","onElementMouseOut","enterEmphasis","leaveEmphasis","emphasisStyle","normalModel","emphasisModel","normalSpecified","emphasisSpecified","showNormal","showEmphasis","baseText","normalStyleText","emphasisStyleText","setTextStyle","textStyle","specifiedTextStyle","isEmphasis","setTextStyleCommon","host","setText","defaultColor","textPosition","textOffset","textRotation","textDistance","richResult","globalTextStyle","richItemNames","getRichItemNames","richTextStyle","setTokenTextStyle","rich","forceRich","richItemNameMap","isBlock","getAutoColor","textStroke","textBorderColor","textStrokeWidth","textBorderWidth","originalTextPosition","insideRollback","fontStyle","fontWeight","fontFamily","textLineHeight","textWidth","textHeight","textTag","disableBox","textBackgroundColor","textPadding","textBorderRadius","textBoxShadowColor","textBoxShadowBlur","textBoxShadowOffsetX","textBoxShadowOffsetY","textShadowColor","textShadowBlur","textShadowOffsetX","textShadowOffsetY","gTextStyleModel","animateOrSetProps","isUpdate","animatableModel","animationEnabled","postfix","animationDelay","getAnimationDelayParams","getTransform","mat","transformDirection","direction","hBase","vBase","vertex","groupTransition","g1","g2","elMap1","getElMap","isGroup","anid","oldEl","newProp","getAnimatableProps","g","elMap","clipPointsByRect","clipRectByRect","targetRect","iconStr","eventTool","throttle","DataZoomView","sliderMove","linearMap","asc","DEFAULT_LOCATION_EDGE_GAP","DEFAULT_FRAME_BORDER_WIDTH","DEFAULT_FILLER_SIZE","HORIZONTAL","VERTICAL","LABEL_GAP","SHOW_DATA_SHADOW_SERIES_TYPE","SliderZoomView","_displayables","_orient","_range","_handleEnds","_size","_handleWidth","_handleHeight","_location","_dragging","_dataShadowInfo","dataZoomModel","_buildView","_updateView","_resetLocation","_resetInterval","barGroup","_renderBackground","_renderHandle","_renderDataShadow","_positionGroup","coordRect","_findCoordRect","ecSize","positionInfo","layoutParams","getLayoutParams","layoutRect","location","targetAxisModel","getFirstTargetAxisModel","otherAxisInverse","_getViewExtent","_onClickPanelClick","info","_prepareDataShadowInfo","series","otherDim","getShadowDim","otherDataExtent","otherOffset","lastIsEmpty","otherShadowExtent","thisShadowExtent","areaPoints","thisCoord","stride","otherCoord","showDataShadow","eachTargetAxis","dimNames","seriesModels","getAxisProxy","getTargetSeriesModels","thisAxis","getOtherDim","thisDim","displaybles","handles","handleLabels","filler","getCursor","_onDragMove","ondragstart","_showDataInfo","ondragend","_onDragEnd","onmouseover","onmouseout","handleIndex","bRect","handleColor","getPercentRange","viewExtent","_updateInterval","delta","handleEnds","viewExtend","minMaxSpan","findRepresentativeAxisProxy","getMinMaxSpan","percentExtent","minSpan","maxSpan","nonRealtime","handleInterval","handle","handleHeight","_updateDataInfo","labelTexts","axisProxy","getAxisModel","dataInterval","calculateDataWindow","end","valueWindow","getDataValueWindow","_formatLabel","orderedHandleEnds","setLabel","barTransform","textPoint","labelFormatter","labelPrecision","getPixelPrecision","valueStr","showOrHide","realtime","_dispatchZoomAction","localPoint","offsetX","offsetY","dataZoomId","getTargetCoordInfo","coordInfoList","Graph","edges","directed","beforeLink","addNode","linkNameList","validEdges","linkCount","link","source","addEdge","nodeData","coordSysCtor","dimensionNames","edgeData","datas","datasAttr","IndicatorAxis","getScaleExtent","Radar","radarModel","_indicatorAxes","indicatorModel","indicatorAxis","resize","getIndicatorAxes","indicatorIndex","coordToPoint","pointToData","closestAxis","radian","minRadianDiff","closestAxisIdx","coodToData","viewWidth","viewHeight","viewSize","indicatorAxes","radarSeries","increaseInterval","exp10","pow","log","LN10","f","rawExtent","fixedMin","fixedMax","getInterval","setInterval","nicedSplitNumber","halfSplitNumber","radarList","radar","categoryFilter","categoryVisual","edgeVisual","circularLayout","forceLayout","createView","registerProcessor","registerCoordinateSystem","addCommas","fillLabel","extraOpt","mergeDefaultAndTheme","createdBySelf","hostSeries","__hostSeries","newOpt","modelPropName","markerOpt","markerModel","getRawValue","formattedValue","html","dataFormatMixin","getSortedIndices","valueArr","isAscending","textX","textY","labelPosition","isLabelInside","labelLineLen","viewRect","sizeExtent","getLinePoints","offY","nextIdx","_poly","DataDiffer","_layers","layerSeries","getLayerSeries","keyGetter","dataDiffer","_layersSeries","newLayersGroups","process","oldLayersGroups","points0","points1","textLayout","margin","layerGroup","stackedOnPoints","stackedOnSmooth","smoothConstraint","createGridClipShape","rectEl","POSSIBLE_STYLES","compatItemStyle","itemStyleOpt","styleName","normalItemStyleOpt","emphasisItemStyleOpt","compatTextStyle","labelOptSingle","TEXT_STYLE_OPTIONS","compatLabelTextStyle","labelOpt","processSeries","seriesOpt","upperLabel","edgeLabel","markPoint","markLine","markArea","mpData","mlData","toArr","toObj","isTheme","axes","axisName","axisOpt","axisPointer","parallel","parallelOpt","calendar","calendarOpt","radarOpt","geoOpt","regionObj","timeline","properties","excludes","includes","PI2","RADIAN","minAngle","validDataCount","unitRadian","roseType","stillShowZeroSum","restAngle","valueSumLargerThanMinAngle","currentAngle","dir","paletteScope","categoriesData","getCategoriesData","categoryNameIdxMap","getColorFromPalette","category","toolbox","title","keep","dataView","lang","dataZoom","back","magicType","line","bar","tiled","restore","saveAsImage","STYLE_COMMON_PROPS","createLinearGradient","global","canvasGradient","createRadialGradient","lineDashOffset","shadowBlur","shadowOffsetX","shadowOffsetY","textRect","transformText","textOrigin","truncate","blend","prevStyle","firstDraw","prop","fillStyle","strokeStyle","globalAlpha","globalCompositeOperation","hasStroke","getLineScale","hasFill","otherStyle","overwrite","newStyle","getGradient","colorStops","addColorStop","styleProto","hasKeys","supplementVisualOption","mappings","createMappings","visualData","isValidType","__hidden","__alphaForOpacity","Creater","replaceVisualOption","keys","scope","visualTypesMap","eachItem","valueOrIndex","rawDataItem","visualMap","prepareVisualTypes","resetSingleAxis","reset","filterSingleAxis","filterData","percentRange","getDataPercentWindow","valueRange","setRawRange","startValue","endValue","debugMode","barPolar","borderColorQuery","globalColors","eachRawSeriesByType","defaulColor","legendSymbol","getMarkerPosition","offsetIndex","DEFAULT_BAR_BOUND","ContinuousModel","calculable","hoverLinkDataSize","hoverLinkOnHandle","_resetRange","resetItemSize","auto","getSelected","oVals","getColorStopValues","iVals","iIdx","oIdx","iLen","oLen","first","stopsLen","stopValues","markerHelper","LineDraw","MarkerView","markLineTransform","mlModel","mlType","valueDataDim","axisInfo","getAxisInfo","numCalculate","valueIndex","baseIndex","mlFrom","mlTo","dataTransform","isInifinity","ifMarkLineHasOnlyDim","fromCoord","toCoord","otherDimIndex","containData","markLineFilter","dataFilter","updateSingleMarkerEndLayout","isFrom","xPx","yPx","dims","markLineModel","fromData","__from","toData","__to","markerGroupMap","renderSeries","seriesData","lineDrawMap","lineDraw","updateDataVisualAndLayout","lineColor","dataModel","__keep","coordDimsInfos","optData","dimValueGetter","util","_event","Dispatcher","requestAnimationFrame","Animation","stage","_clips","_running","_time","_pausedTime","_pauseStart","addAnimator","clips","removeAnimator","_update","getTime","deferredEvents","deferredClips","_needsRemove","fire","_startLoop","sankeyLayout","sankeyVisual","_echarts","_export","DATAS","MAIN_DATA","main","linkAll","TRANSFERABLE_METHODS","wrapMethod","transferInjection","cloneShallowInjection","CHANGABLE_METHODS","changeInjection","assert","dataType","isMainData","linkSingle","cloneShallow","getLinkedData","Region","roams","InsideZoomView","shouldRecordRange","allCoordIds","coordInfo","generateCoordId","coordModel","dataZoomOption","coordId","containsPoint","throttleRate","panGetRange","_onPan","zoomGetRange","_onZoom","zoomLock","disabled","roamControllerOpt","zoomOnMouseWheel","moveOnMouseMove","preventDefaultMouseMove","oldX","oldY","newX","newY","directionInfo","getDirectionInfo","percentDelta","signal","pixel","pixelLength","percentPoint","pixelStart","oldPoint","newPoint","angleExtent","singleAxis","getDataItemValue","converDataValue","isDataItemOption","firstDataNotNull","ifNeedCompleteOrdinalData","sampleItem","creator","creators","registeredCoordSys","completeDimOpt","encodeDef","dimsDef","axesInfo","getDimensionsInfo","categoryIndex","nameList","createNameList","itemOpt","categoryAxesModels","isStackable","getDimTypeByAxis","cartesian2d","axesModels","xAxisModel","yAxisModel","xAxisType","yAxisType","stackable","isXAxisCateogry","isYAxisCategory","singleAxisModel","singleAxisType","single","radiusAxisType","angleAxisType","isAngleAxisCateogry","isRadiusAxisCateogry","categoryAxisModel","categoryDim","dataLen","isNumeric","_helper","BAR_BORDER_WIDTH_QUERY","LAYOUT_ATTRS","posDesc","pathForLineWidth","BarView","cartesian","coordSysRect","coordSysExtent","hasValue","symbolMeta","getSymbolMeta","createBar","updateCommon","newIndex","oldIndex","pictorialShapeStr","getShapeStr","__pictorialShapeStr","updateBar","__pictorialSymbolMeta","removeBar","animationModel","symbolRepeat","symbolClip","symbolPosition","symbolPatternSize","symbolRepeatDirection","prepareBarLength","prepareSymbolSize","boundingLength","pxSign","prepareLineWidth","symbolScale","prepareLayoutInfo","valueLineWidth","repeatCutLength","output","symbolBoundingData","zeroPx","pxSignIdx","symbolBoundingExtent","convertToCoordOnAxis","categorySize","unitLength","pathLen","absBoundingLength","symbolMargin","hasEndGap","lastIndexOf","uLenWithMargin","endFix","repeatSpecified","repeatTimes","toIntTimes","mDiff","sizeFix","pathPosition","bundlePosition","barRectShape","createPath","createOrUpdateRepeatSymbols","bundle","__pictorialBundle","unit","eachPath","__pictorialAnimationIndex","__pictorialRepeatTimes","updateAttr","makeTarget","updateHoverAnimation","onMouseOver","onMouseOut","createOrUpdateSingleSymbol","mainPath","__pictorialMainPath","createOrUpdateBarRect","rectShape","barRect","__pictorialBarRect","createOrUpdateClip","__pictorialClipPath","labelRect","pathes","immediateAttrs","animationAttrs","barRectHoverStyle","barPositionOutside","times","roundedTimes","transformPath","cc","vMag","vRatio","u","vAngle","acos","processArc","fa","psiDeg","xp","yp","lambda","cxp","cyp","createPathProxyFromString","cs","RegExp","prevCmd","arr","split","cpx","cpy","str","c","charAt","parseFloat","ctlPtx","ctlPty","createPathOptions","pathProxy","pathEls","pathList","pathEl","createPathProxy","__dirtyPath","pathBundle","TimelineView","_axis","_viewRect","_timer","_currentPointer","_mainGroup","_labelGroup","_layout","mainGroup","_createGroup","labelGroup","_createAxis","_renderAxisLabel","_position","_doPlayStop","_clearTimer","labelPosOpt","horizontal","vertical","playPosition","prevBtnPosition","nextBtnPosition","labelAlignMap","labelBaselineMap","rotationMap","mainLength","controlModel","showControl","controlSize","controlGap","sizePlusGap","labelRotation","controlPosition","showPlayBtn","showPrevBtn","showNextBtn","xLeft","xRight","labelAlign","labelBaseline","rotateOriginX","rotateOriginY","viewBound","getBound","mainBound","labelBound","mainPosition","labelsPosition","mainBoundIdx","toBound","setOrigin","targetGroup","fromPos","boundIdx","_customizeScale","getTicksLabels","newGroup","_renderAxisLine","lineCap","_renderAxisTick","tickCoord","hoverStyleModel","symbolOpt","_changeTimeline","giveSymbol","labels","tick","normalLabelModel","_renderControl","playState","getPlayState","makeBtn","iconPath","willRotate","btn","makeIcon","_handlePlayClick","_renderCurrentPointer","currentIndex","getCurrentIndex","pointerModel","onCreate","pointer","_handlePointerDrag","_handlePointerDragend","pointerMoveTo","onUpdate","nextState","_pointerChangeTimeline","mousePos","_toAxisCoord","targetDataIndex","_findNearestTick","handleFrame","trans","axisCoord","nextIndex","objPath","noAnimation","DataZoomModel","SliderZoomModel","dataBackground","areaStyle","fillerColor","handleIcon","handleSize","handleStyle","showDetail","RADIAN_EPSILON","_trim","domain","clamp","subDomain","subRange","all","returnStr","getPrecision","getPrecisionSafe","toString","eIndex","dotIndex","pixelExtent","dataQuantity","sizeQuantity","getPercentWithPrecision","valueList","acc","digits","votesPerQuota","targetSeats","seats","votes","currentSum","remainder","NEGATIVE_INFINITY","maxId","MAX_SAFE_INTEGER","remRadian","pi2","isRadianAroundZero","TIME_REG","exec","hour","toUpperCase","UTC","quantity","quantityExponent","nf","exponent","littleThan","currClose","makeStyleMapper","getLineDash","lineType","dotSize","dashSize","setCurrentIndex","isIndexMax","setPlayState","resetOption","blurSize","pointSize","maxOpacity","minOpacity","AxisProxy","eachAxisDim","xAxisIndex","yAxisIndex","filterMode","minValueSpan","maxValueSpan","rangeMode","_dataIntervalByAxis","_dataInfo","_axisProxies","_autoThrottle","_rangePropMode","rawOption","retrieveRaw","doInit","_setDefaultThrottle","updateRangeUse","_resetTarget","_giveAxisProxies","axisProxies","__dzAxisProxy","autoMode","_judgeAutoMode","axisIndexName","normalizeToArray","_autoSetAxisIndex","_autoSetOrient","hasIndexSpecified","autoAxisIndex","singleAxisIndex","axisIndices","_isSeriesHasAllAxesTypeOf","axisId","is","seriesAxisIndex","globalOption","firstAxisModel","ignoreUpdateRangeUsg","getValueRange","axisDimName","hostedBy","getRangePropMode","rangePropMode","rangeModeInOption","percentSpecified","valueSpecified","HOVER_LINK_SIZE","HOVER_LINK_OUT","ContinuousView","_shapes","_dataInterval","_useHandle","_hoverLinkDataIndices","_hovering","_renderBar","dataRangeText","_enableHoverLinkToSeries","_enableHoverLinkFromSeries","endsIndex","_applyTransform","shapes","useHandle","_createBarGroup","outOfRange","createPolygon","inRange","_dragHandle","getTextRect","textSize","handleThumbs","handleLabelPoints","_createHandle","_createIndicator","onDrift","onDragEnd","handleThumb","createHandlePoints","handleLabel","handleLabelPoint","indicatorLabel","indicatorLabelPoint","isEnd","_clearHoverLinkToSeries","useHoverLinkOnHandle","_doHoverLinkToSeries","forSketch","outOfRangeHandleEnds","inRangeHandleEnds","visualInRange","_createBarVisual","visualOutOfRange","barColor","barPoints","_updateHandle","forceState","convertOpacityToAlpha","_makeColorGradient","symbolSizes","_createBarPoints","handlesColor","sampleNumber","currValue","_showIndicator","cursorValue","textValue","rangeSymbol","halfHoverLinkSize","createIndicatorPoints","_hoverLinkFromSeriesMouseOver","_hideIndicator","_clearHoverLinkFromSeries","cursorPos","hoverOnBar","getHalfHoverLinkSize","hoverRange","oldBatch","newBatch","resultBatches","compressBatches","_dispatchHighDown","isTargetSeries","element","isRange","extentMax","zrender","timsort","GlobalModel","ExtensionAPI","OptionManager","backwardCompat","ComponentView","_throttle","seriesColor","loadingDefault","parseClassType","PRIORITY_PROCESSOR_FILTER","PRIORITY_PROCESSOR_STATISTIC","PRIORITY_VISUAL_LAYOUT","PRIORITY_VISUAL_GLOBAL","PRIORITY_VISUAL_CHART","PRIORITY_VISUAL_COMPONENT","PRIORITY_VISUAL_BRUSH","PROCESSOR","FILTER","STATISTIC","LAYOUT","GLOBAL","CHART","COMPONENT","IN_MAIN_PROCESS","HAS_GRADIENT_OR_PATTERN_BG","OPTION_UPDATED","ACTION_REG","createRegisterEventWithLowercaseName","toLowerCase","MessageCenter","ECharts","dom","theme","themeStorage","_dom","defaultRenderer","renderer","_throttledZrFlush","flush","prioritySortFunc","prio","_theme","_chartsViews","_chartsMap","_componentsViews","_componentsMap","_coordSysMgr","_api","createExtensionAPI","_messageCenter","_initEvents","_pendingActions","visualFuncs","dataProcessorFuncs","_onframe","setAsPrimitive","echartsProto","doConvertPixel","coordSysList","parseFinder","updateMethods","prepareAndUpdate","flushPendingActions","triggerUpdatedEvent","getDom","setOption","notMerge","lazyUpdate","optionManager","optionPreprocessorFuncs","setTheme","console","getOption","getDevicePixelRatio","getRenderedCanvas","pixelRatio","storage","getDisplayList","getSvgDataUrl","pathToSvg","getDataURL","excludeComponents","excludesComponentViews","view","__viewId","url","getType","toDataURL","getConnectedDataURL","groupId","MAX_NUMBER","connectedGroups","canvasList","instances","chart","canvas","getBoundingClientRect","targetCanvas","createCanvas","refreshImmediately","containPixel","models","defaultMainType","dataIndexInside","indexOfRawIndex","getViewOfComponentModel","componentModel","getViewOfSeriesModel","coordSysMgr","restoreData","processData","stackSeriesData","doVisualEncoding","isSingleCanvas","configLayer","clearColor","colorArr","stringify","background","postUpdateFuncs","func","updateView","clearAllVisual","invokeUpdateMethod","updateVisual","doLayout","prepareView","updateDirectly","ecIns","condition","callView","__alive","__model","doDispatchAction","payloadType","escapeConnect","actionWrap","actions","actionInfo","cptType","updateMethod","payloads","batched","eventObj","eventObjBatch","isHighDown","batchItem","sub","pendingActions","updateZ","updateProgressiveAndBlend","updateHoverLayerStatus","isComponent","viewList","viewMap","viewId","classType","Clazz","getClass","__id","__ecComponentInfo","stackedDataMap","previousStack","stackedOn","isLayout","excludesLayout","clearColorPalette","componentView","chartView","optionChanged","_loadingFX","showLoading","cfg","hideLoading","loadingEffects","makeActionFromEvent","eventActionMap","MOUSE_EVENT_NAMES","elCount","frameDrawNum","needProgressive","blendMode","ecInstance","getComponentByElement","modelInfo","eveName","actionType","_disposed","idBase","groupIdBase","DOM_ATTRIBUTE_KEY","mapDataStores","enableConnect","STATUS_PENDING","STATUS_UPDATING","STATUS_UPDATED","STATUS_KEY","updateConnectedChartsStatus","charts","otherChart","otherCharts","existInstance","getInstanceByDom","setAttribute","connect","disConnect","disconnect","getAttribute","getInstanceById","registerTheme","preprocessorFunc","priority","processorFunc","registerPostUpdate","postUpdateFunc","getCoordinateSystemDimensions","coordSysCreator","layoutFunc","visualFunc","registerLoading","loadingFx","setCanvasCreator","$override","registerMap","mapName","JSON","Function","getMap","dataTool","___ec_export","_core","textContain","textHelper","arrayJoin","NONE","mathRound","degree","round4","isAroundZero","pathHasFill","isText","pathHasStroke","svgEl","attrXLink","setAttributeNS","bindStyle","strokeWidth","strokeScale","miterLimit","pathDataToString","dataLength","cmdStr","nData","dThetaPositive","isCircle","large","svgPath","__svgEl","pathStr","svgTextDrawRectText","svgImage","HTMLImageElement","dw","dh","__imageSrc","svgText","tmpRect","normalizeTextStyle","textSvgEl","__textSvgEl","distance","DEFAULT_FONT","getVerticalAlignForSvg","lineHeight","adjustTextPositionOnRect","textLines","nTextLines","textAnchor","__text","__textFont","tspanList","__tspanList","tspan","createTextNode","removeChild","scaleAndAdd","lenSquare","lengthSquare","div","dot","s","distanceSquare","distSquare","negate","lerp","LRU","kCSSColorTable","clampCssByte","clampCssAngle","clampCssFloat","parseCssInt","parseCssFloat","cssHueToRgb","lerpNumber","setRgba","copyRgba","colorCache","lastRemovedArr","putToCache","colorStr","rgbaArr","put","cached","op","ep","fname","substr","alpha","hsla2rgba","iv","hsla","rgba2hsla","H","S","G","B","vMin","vMax","deltaR","deltaG","deltaB","fastLerp","normalizedValue","colors","leftIndex","rightIndex","leftColor","rightColor","dv","fastMapToColor","fullOutput","mapToColor","modifyHSL","modifyAlpha","arrColor","WhiskerPath","pts","WhiskerBox","styleUpdater","_createContent","whiskerBoxProto","transInit","makeWhiskerEndsShape","ends","WhiskerBoxDraw","whiskerBoxDrawProto","symbolEl","Gradient","findPointFromSeries","globalListener","axisPointerViewHelper","proxyRect","tooltipContent","_tooltipContent","_tooltipModel","_ecModel","_lastDataByCoordSys","_alwaysShowContent","_initGlobalListener","_keepShow","triggerOn","_tryShow","_hide","_lastX","_lastY","_refreshUpdateTimeout","manuallyShowTip","_ticket","dataByCoordSys","tooltipOption","_manuallyAxisShowTip","pointInfo","findHover","manuallyHideTip","coordSysAxesInfo","buildTooltipModel","_showAxisTooltip","_showSeriesItemTooltip","_showComponentItemTooltip","_showOrMove","_showTimout","globalTooltipModel","singleDefaultHTML","singleParamsList","singleTooltipModel","itemCoordSys","dataByAxis","axisValue","seriesDefaultHTML","valueLabel","getValueLabel","seriesDataIndices","valueLabelOpt","idxItem","dataParams","getAxisRawValue","axisValueLabel","firstLine","positionExpr","_updateContentNotChangedOnAxis","_updatePosition","_showTooltipContent","random","tooltipTrigger","defaultHtml","asyncTicket","tooltipOpt","subTooltipModel","formatTpl","cbTicket","contentSize","vAlign","calcTooltipPosition","refixTooltipPosition","isCenterAlign","confineTooltipPosition","lastCoordSys","contentNotChanged","lastItemCoordSys","indexCoordSys","lastDataByAxis","thisItemCoordSys","thisDataByAxis","lastItem","indexAxis","thisItem","lastIndices","newIndices","lastIdxItem","newIdxItem","modelCascade","resultModel","gapH","gapV","getOuterSize","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","paddingTop","paddingBottom","borderTopWidth","borderBottomWidth","domWidth","domHeight","rectWidth","rectHeight","clazzUtil","lineStyleMixin","areaStyleMixin","textStyleMixin","itemStyleMixin","doGet","pathArr","getParent","getParentMethod","parsePath","thisParentModel","Ctor","setReadOnly","customizeGetParent","enableClassExtend","Single","singles","actionTypes","handleRootToNode","targetInfo","retrieveTargetInfo","originViewRoot","getViewRoot","aboveViewRoot","resetViewRoot","easingFuncs","_life","_initialized","onrestart","globalTime","deltaTime","_startTime","easingFunc","schedule","restart","arg","_createPolyline","polylineProto","_updateCommonStl","hoverLineStyle","legendSelectActionHandler","selectedMap","isToggleSelect","legendData","isItemSelected","rangeInfo","getRangeInfo","cellWidth","getCellWidth","cellHeight","getCellHeight","weeks","dayCount","allDay","SymbolDraw","EffectSymbol","_symbolDraw","effectSymbolDraw","HeatmapLayer","getIsInPiecewiseRange","dataSpan","lastIndex","getIsInContinuousRange","isGeoCoordSys","visualMapOfThisSeries","targetSeries","_renderOnCartesianAndCalendar","_renderOnGeo","itemStyleQuery","hoverItemStyleQuery","labelQuery","hoverLabelQuery","coordSysType","dataToRect","contentShape","rawValue","inRangeVisuals","targetVisuals","outOfRangeVisuals","hmLayer","_hmLayer","roamTransform","getRoamTransform","lng","lat","isInRange","getNormalizer","getColorMapper","curveTool","v3","v2DistSquare","intersectCurveCircle","curvePoints","radiusSquare","_t","next","nextDiff","tmp0","quadraticSubdivide","pts2","fromSymbol","toSymbol","__original","originalPoints","globalCoord","AxisPointerModel","snap","triggerTooltip","shadowStyle","shadowColor","axisModelCreator","AxisModel","gridIndex","gridId","getAxisType","extraOption","_roamHelper","updateCenterAndZoom","seriesGroup","interactionMutex","pointerChecker","_opt","mousedownHandler","mousedown","mousemoveHandler","mousemove","mouseupHandler","mouseup","mousewheelHandler","mousewheel","pinchHandler","controlType","disable","isDragging","isPinching","_pinching","notLeftMouse","checkKeyBinding","gestureEvent","isTaken","wheelDelta","roamController","setting","_vector","v2Create","mathPow","EPSILON_NUMERIC","THREE_SQRT","ONE_THIRD","_v0","_v1","_v2","onet","cubicDerivativeAt","cubicRootAt","roots","t1","disc","K","discSqrt","Y1","Y2","T","ASqrt","cubicExtrema","extrema","cubicSubdivide","p01","p12","p23","p012","p123","p0123","cubicProjectPoint","prev","d1","d2","quadraticRootAt","quadraticExtremum","divider","quadraticProjectPoint","BaseAxisPointer","viewHelper","cartesianAxisHelper","CartesianAxisPointer","makeElOption","elOption","axisPointerModel","axisPointerType","otherExtent","getCartesian","getGlobalExtent","pixelValue","buildElStyle","pointerOption","pointerShapeBuilder","graphicKey","buildCartesianSingleLabelElOption","getHandleTransform","labelMargin","getTransformedPosition","updateHandleTransform","currPosition","cursorOtherValue","cursorPoint","tooltipOptions","targetShape","makeLineShape","getAxisDimIndex","shadow","makeRectShape","registerAxisPointerClass","fixClipWithShadow","unitX","unitY","ZText","MARK_UNUSED","MARK_USED","Definable","svgRoot","tagNames","markLabel","_svgRoot","_tagNames","_markLabel","nextId","getDefs","isForceCreating","defs","getElementsByTagName","insertBefore","firstChild","addDom","removeDom","getDoms","doms","tagName","tags","markAllUnused","that","markUsed","removeUnused","getSvgProxy","displayable","getTextSvgElement","getSvgElement","SingleAxis","_init","axisPointerEnabled","_adjustAxis","_updateAxisTransform","coordBase","extentSum","toLocalCoord","getAxes","getTooltipAxes","baseAxes","coordToData","positiveBorderColorQuery","negativeBorderColorQuery","positiveColorQuery","negativeColorQuery","FunnelPiece","funnelPieceProto","opacityAccessPath","FunnelView","funnelPiece","GaugeSeries","dataOpt","offsetCenter","detail","dev","dataSelectableMixin","MapSeries","needsDrawMap","_fillOption","getMapType","seriesNames","otherIndex","originalData","showLegendSymbol","dataRangeHoverLink","featureManager","saveAsImageLang","SaveAsImage","unusable","proto","$a","download","href","MouseEvent","msSaveOrOpenBlob","bstr","atob","u8arr","Uint8Array","charCodeAt","blob","Blob","tab","open","write","evt","bubbles","cancelable","dispatchEvent","getTooltipMarker","_clazz","colorPaletteMixin","mergeLayoutParam","inputPositionParams","themeSubType","hasClass","getTheme","getDefaultOption","fillDataTextStyle","newSeriesOption","dataDimToCoordDim","dataDim","multipleSeries","formatArrayValue","vertially","dimItem","tooltipName","tooltipDims","otherDimToDataDim","setEachItem","otherDims","dimType","valStr","colorEl","getAxisTooltipData","smoothSpline","smoothBezier","controlPoints","cp2","AXIS_DIMS","COORDS","isCoordSupported","coordType","createNameEach","attrs","capitalNames","capitalFirst","capitalAttrs","nameObj","capital","createLinkedNodesFinder","forEachNode","forEachEdgeType","edgeIdGetter","sourceNode","existsLink","edgeType","absorb","processSingleNode","isNodeAbsorded","isLinked","hasLink","edgeId","themeRiverLayout","baseY0","layerPoints","singleLayer","base","computeBaseline","baseLine","ky","layerIndex","layerNum","pointNum","sums","temp","colorList","getBorderLineDash","ATTR","dataZoomInfo","store","giveStore","theDataZoomId","theCoordId","dataZoomInfos","cleanStore","createController","controllerParams","mergeControllerParams","newRecord","onPan","onZoom","wrapAndDispatch","getRange","typePriority","oneType","r1","r2","r3","r4","_forceHelper","_simpleLayoutHelper","_circularLayoutHelper","graphSeries","preservedPoints","forceModel","initLayout","nodeDataExtent","edgeDataExtent","repulsion","edgeLength","rep","fixed","getEdgeByIndex","n1","n2","forceInstance","gravity","oldStep","getNodeByIndex","stopped","Cartesian2D","Axis2D","ifAxisCrossZero","isAxisUsedInTheGrid","rotateTextRect","rotateRadians","boundingBox","plain","beforeWidth","beforeHeight","afterWidth","afterHeight","rotatedRect","getLabelUnionRect","axisLabelModel","labelCount","unrotatedSingleRect","singleRect","Grid","_coordsMap","_coordsList","_axesMap","_axesList","_initCartesian","gridProto","fixAxisOnZero","axesMap","otherAxisDim","canNotOnZeroToAxis","updateAxisTransfrom","axisExtentSum","_updateScale","ignoreContainLabel","gridRect","axesList","adjustAxes","labelUnionRect","axesMapOnDim","coordList","getCartesians","_findConvertTarget","coordsList","axisPositionUsed","axesCount","createAxisCreator","addAxis","isCartesian2D","findAxesModels","otherAxes","axesTypes","grids","SankeyShape","cpx1","cpy1","cpx2","cpy2","halfExtent","curvature","n1Layout","n2Layout","edgeLayout","Pattern","returnFalse","createDom","newDom","newDomStyle","Layer","onselectstart","domBack","ctxBack","config","motionBlur","lastFrameAlpha","initContext","__currentValues","createBackBuffer","clearAll","clearColorGradientOrPattern","haveMotionBLur","clearRect","__canvasGradient","getCanvasPattern","save","fillRect","globalImageCache","findExistImage","newImageOrSrc","cachedImgObj","hostEl","cbPayload","__zrImageSrc","pendingWrap","pending","imageOnLoad","__cachedImgObj","_listComponent","makeBackground","_contentGroup","_backgroundEl","viewportSize","legendDrawnMap","selectMode","getSeriesByName","legendSymbolType","_createItem","dispatchSelectAction","dispatchHighlightAction","dispatchDownplayAction","eachRawSeries","newline","inactiveColor","itemIcon","legendGlobalTooltipModel","hitRect","formatterParams","legendIndex","dataName","CATEGORY_DEFAULT_VISUAL_INDEX","_normalizeData","normalizers","visualHandler","visualHandlers","_doMap","normalizeVisualRange","preprocessForPiecewise","preprocessForSpecifiedCategory","normalized","makeApplyVisual","isNormalized","doMapCategory","returnRGBArray","parsedVisual","linear","piecewise","getSpecifiedVisual","doMapFixed","colorHue","makePartialColorVisualHandler","colorSaturation","colorLightness","colorAlpha","makeDoMap","symbolCfg","doMapToArray","hasSpecialVisual","originIndex","categoryMap","visualArr","setVisualToOption","doNotNeedPair","applyValue","sourceExtent","addVisualHandler","eachVisual","mapVisual","isPrimary","newVisual","newVal","hasVisual","types","type1","type2","dependsOn","visualType1","visualType2","findClosestWhenOutside","possibleI","pieceValue","updatePossible","newAbs","isDomLevel2","addEventListener","MOUSE_EVENT_REG","calculate","defaultGetZrXY","layerX","layerY","clientX","clientY","isTouch","targetTouches","changedTouches","zrDelta","button","which","attachEvent","removeEventListener","detachEvent","preventDefault","stopPropagation","cancelBubble","returnValue","SMOOTH","ParallelView","_dataGroup","_renderForNormal","dataGroup","updateElCommon","newDataIndex","addEl","oldDataIndex","createLinePoints","isEmptyValue","seriesStyleModel","active","inactive","UNDEFINED","globalObj","dataCtors","Float64Array","Int32Array","TRANSFERABLE_PROPERTIES","transferProperties","__wrappedMethods","DefaultDataProvider","dataArray","_array","pure","getItem","dimensionInfos","dimensionName","dimensionInfo","coordDimIndex","_dimensionInfos","_storage","_nameList","_idList","_optionModels","_visual","_itemVisuals","_itemLayouts","_graphicEls","_rawData","listProto","normalizeDimensions","cloneListForMapAndSample","original","excludeDimensions","allDimensions","originalStorage","dimStore","isDataArray","nameDimIdx","dimensionInfoMap","idList","nameRepeatCount","itemName","DataCtor","dimStorage","stackedValue","values","dimData","dimExtent","rawDataIndex","indicesOfNearest","maxDistance","nearestIndices","minDist","minDiff","rawIdx","dimSize","filterSelf","tmpRetValue","retValue","downSample","rate","sampleValue","sampleIndex","targetStorage","originalIndices","frameValues","frameIndices","frameSize","otherList","otherIdList","prefix","itemVisual","setItemDataAndSeriesIndex","dimensionInfoList","injectFunction","originalMethod","v2Distance","interpolate","isLoop","segs","w2","w3","TYPE_DELIMITER","IS_CONTAINER","MEMBER_PRIFIX","hasOwn","checkClassType","RootClass","mandatoryMethods","$constructor","superClass","ExtendedClass","enableClassManagement","entity","makeContainer","registerClass","componentMainType","throwWhenNotFound","getClassesByMainType","getAllClassMainTypes","hasSubTypes","registerWhenExtend","originalExtend","ignoreSize","subtext","subtarget","subtextStyle","titleModel","subtextStyleModel","textBaseline","subText","subTextEl","sublink","groupRect","layoutOption","alignStyle","createParallelIfNeeded","mergeAxisOptionFromParallel","hasParallelSeries","axisOption","parallelOption","axisPointerModelHelper","_axisPointer","fixValue","updateAxisPointer","disposeAxisPointer","axisView","forceRender","getAxisPointerClass","getAxisPointerModel","axisPointerClazz","clazz","timelineOpt","compatibleEC2","ec2Types","transferItem","controlStyle","itemStyleEmphasis","labelNormal","excludeLabelAttr","_labelInterval","legendModels","findComponents","categoryNames","mapSymbolLayout","mapDataStatistic","createDataSelectAction","effectType","showEffectOn","rippleEffect","barItemStyle","coordinateSystemType","_render","isHorizontalOrRadial","elementCreator","removeRect","removeSector","animateProperty","animateTarget","isRadial","fixedLineWidth","getLineWidth","signX","signY","isPolar","getBarItemStyle","labelPositionOutside","rawLayout","_curve","containStroke","_l","registerSubTypeDefaulter","axisDataLen","scaleType","originalExtent","setBlank","tickCoords","axisRotate","textSpaceTakenRect","autoLabelInterval","accumulatedLabelInterval","tpl","guid","Handler","Storage","Painter","HandlerProxy","useVML","painterCtors","ZRender","getInstance","registerPainter","delInstance","rendererType","vml","handerProxy","getViewportRoot","_needsRefresh","oldDelFromStorage","delFromStorage","oldAddToStorage","addToStorage","removeSelfFromZr","addSelfToZr","addRoot","delRoot","zLevel","_needsRefreshHover","refreshHoverImmediately","refreshHover","clearHover","clearAnimation","pathToImage","setCursorStyle","eventHandler","EffectPolyline","_lastFrame","_lastFramePercent","effectPolylineProto","_points","accLenArr","_offsets","_length","offsets","PolarAxisPointer","animationThreshold","coordValue","labelPos","getLabelPosition","buildLabelElOption","innerTextLayout","makeSectorShape","geoCoordMap","_buildAxes","_buildSplitLineAndArea","axisBuilders","showSplitLine","showSplitArea","splitLineColors","splitAreaColors","ticksRadius","getColorIndex","realSplitNumber","axesTicksPoints","prevPoints","areaOrLine","areaOrLineColorList","themeRiverVisual","componentUtil","boxLayoutMixin","arrayPush","getUID","themeModel","newCptOption","optList","Class","getDependencies","deps","enableSubTypeDefaulter","enableTopologicalTravel","v2ApplyTransform","TransformDummy","_roamTransform","_center","_zoom","setBoundingRect","setViewRect","centerCoord","_updateCenterAndZoom","getDefaultCenter","rawRect","getCenter","viewTransformMatrix","defaultCenter","_layoutHelper","_oldTree","symbolNeedsDraw","updateNode","removeNode","getTreeNodeStyle","virtualRoot","sourceSymbolEl","sourceLayout","sourceOldLayout","rawX","__radialOldRawX","rawY","__radialOldRawY","targetLayout","__radialRawX","__radialRawY","isLeft","rootLayout","__edge","getEdgeShape","radialCoor1","radialCoor2","radialCoor3","radialCoor4","define","BUILTIN_OBJECT","TYPED_ARRAY","objToString","Object","arrayProto","nativeForEach","forEach","nativeFilter","nativeSlice","nativeMap","nativeReduce","methods","typeStr","isPrimitive","isDom","targetProp","sourceProp","isBuiltInObject","mergeAll","targetAndSources","overlay","baseClazz","clazzPrototype","F","memo","find","nodeType","ownerDocument","value0","value1","retrieve3","value2","primitiveKey","HashMap","HASH_MAP_PREFIX","HASH_MAP_PREFIX_LENGTH","prefixedKey","removeKey","eachAfter","eachBefore","newSnapshot","snapshot","head","targetList","_targetList","_selectTargetMap","targetMap","select","unSelect","toggleSelected","nameRotate","nameTruncate","ellipsis","placeholder","showMinLabel","showMaxLabel","categoryAxis","alignWithLabel","timeAxis","logAxis","logBase","idxMap","preprocessOption","fromName","toName","LinesSeries","effect","trailLength","largeThreshold","autoPositionValues","targetValue","visualCluster","visualObj","controllerVisuals","visualMapping","positionElement","generateNodeKey","_directed","_nodesMap","_edgesMap","graphProto","Node","inEdges","outEdges","hostGraph","Edge","isDirected","nodesMap","edgesMap","getEdge","breadthFirstTraverse","startNode","__visited","queue","currentNode","otherNode","inDegree","outDegree","createGraphDataProxyMixin","hostName","getGraphicEl","LineGroup","isPointNaN","lineNeedsDraw","_ctor","lineDrawProto","oldLineData","_lineData","LineCtor","lineGroup","quadraticIn","quadraticOut","quadraticInOut","cubicIn","cubicOut","cubicInOut","quarticIn","quarticOut","quarticInOut","quinticIn","quinticOut","quinticInOut","sinusoidalIn","sinusoidalOut","sinusoidalInOut","exponentialIn","exponentialOut","exponentialInOut","circularIn","circularOut","circularInOut","elasticIn","asin","elasticOut","elasticInOut","backIn","backOut","backInOut","bounceIn","bounceOut","bounceInOut","_mapDraw","dataViewLang","BLOCK_SPLITER","ITEM_SPLITER","groupSeries","seriesGroupByCategoryAxis","otherSeries","meta","other","assembleSeriesWithCategoryAxis","tables","valueAxisDim","headers","columns","lines","items","assembleOtherSeries","vals","getContentFromModel","trim","isTSVFormat","block","itemSplitRegex","parseTSVContents","tsv","tsvLines","header","parseListContents","hasName","parseContents","blockMetaList","blocks","blockMeta","axisKey","DataView","tryMergeDataOption","readOnly","optionToContent","contentToOption","textColor","textareaColor","textareaBorderColor","buttonColor","buttonTextColor","viewMain","textarea","htmlOrDom","buttonContainer","buttonStyle","closeButton","refreshButton","keyCode","selectionStart","selectionEnd","substring","newSeriesOptList","needDrawText","renderText","getStroke","actionInfos","polarOptArr","polarNotRadar","polarOpt","polarIndex","radarIndex","foundAxisModel","layoutBox","boxLayoutParams","positions","fromPoints","bbWidth","bbHeight","viewCoordSys","BrushController","history","dataZoomLang","DATA_ZOOM_ID_BASE","DataZoom","_brushController","_onBrush","mount","_isZoomActive","featureModel","updateZoomBtnStatus","updateBackBtnStatus","handlers","unmount","nextActive","dataZoomSelectActive","retrieveAxisSetting","setIconStatus","zoomActive","include","setPanels","makePanelOpts","xAxisDeclared","yAxisDeclared","enableBrush","brushStyle","updateCovers","matchOutputRanges","coordRange","setBatch","findDataZoom","found","dzModel","dataZoomOpts","toolboxOpt","feature","dataZoomOpt","addForAxis","axisIndicesName","givenAxisIndices","forEachComponent","$fromToolbox","coordSysLists","coordIndex","LinePath","SYMBOL_CATEGORIES","makeSymbolTypeKey","symbolCategory","setLinePoints","updateSymbolAndLabelBeforeLineUpdate","symbolFrom","symbolTo","invScale","pointAt","toPos","tangent","tangentAt","__position","halfPercent","__verticalAlign","__textAlign","_createLine","lineProto","beforeUpdate","visualOpacity","defaultLabelColor","normalText","emphasisText","rawVal","labelStyle","linePath","globalDefault","colorPaletteMinin","OPTION_INNER_KEY","_optionManager","baseOption","mountOption","initBase","timelineOption","getTimelineOption","mediaOptions","getMediaOption","mediaOption","componentsMap","newCptTypes","visitComponent","newCptOptionList","mapResult","mappingToExists","makeIdAndName","keyInfo","determineSubType","exist","getComponentsByTypes","resultItem","ComponentModelClass","_seriesIndices","createSeriesIndices","componentOption","topologicalTravel","isIdInner","cpts","isIdArray","cpt","isNameArray","filterBySubType","queryCond","getQueryCond","doFilter","q","indexAttr","idAttr","nameAttr","queryResult","oneSeries","getSeries","assertSeriesInitialized","rawSeriesIndex","getCurrentSeriesIndices","filterSeries","filteredSeries","componentTypes","mergeTheme","themeItem","existComponent","graphicUtil","graphicOption","elements","GraphicModel","parentId","_elOptionsToUpdate","existList","flattenedList","_flatten","mappingResult","elOptionsToUpdate","newElOption","setKeyInfoToNewElOption","mergeNewElOptionToExist","setLayoutInfoToExist","$action","optionList","parentOption","useElOptionsToUpdate","els","createEl","targetElParent","graphicType","Clz","__ecGraphicId","removeEl","existEl","existElParent","getCleanedElOption","LOCATION_PARAMS","isSetLoc","isSet","existElOption","newElParentOption","newElOptCopy","copyLayoutParams","existItem","hv","_elMap","_lastGraphicModel","graphicModel","_clear","_updateElements","_relocate","rootGroup","elOptionStyle","elOptionCleaned","__ecGraphicWidth","__ecGraphicHeight","elOptions","parentEl","containerInfo","boundingMode","bounding","straightLineProto","bezierCurveProto","isLine","defaultSymbolType","itemSymbolType","itemSymbolSize","defaultKeyGetter","oldKeyGetter","newKeyGetter","_old","_new","_oldKeyGetter","_newKeyGetter","initIndexMap","keyArr","keyGetterName","existence","_add","_remove","oldDataIndexMap","newDataIndexMap","oldDataKeyArr","newDataKeyArr","nest","nodeWidth","nodeGap","computeNodeValues","filteredNodes","iterations","layoutSankey","computeNodeBreadths","computeNodeDepths","computeEdgeDepths","getEdgeValue","remainNodes","nextNode","kx","lenj","moveSinksRight","scaleNodeBreadths","nodesByBreadth","sortKeys","ascending","entries","initializeNodeDepth","resolveCollisions","relaxRightToLeft","relaxLeftToRight","kyArray","ky0","nodeDy","edgeDy","ascendingDepth","nodeY","weightedTarget","weightedSource","ascendingTargetDepth","ascendingSourceDepth","updateMarkerLayout","markPointModel","mpModel","symbolDrawMap","symbolDraw","sizeCalculable","CalendarModel","cellSize","dayLabel","firstDay","monthLabel","yearLabel","mergeAndNormalizeLayoutParams","raw","hvIdx","echartsAPIList","chartInstance","parallelAxisModel","setActiveIntervals","intervals","Parallel","fixExtentWithBands","nTick","normalizedExtent","bands","getBands","getLabelsCoords","getRotate","LegendModel","_updateData","hasSelected","availableNames","_availableNames","borderRadius","normalizeRadian","OTHER_DIMS","sysDims","dataDimNameMap","coordDimNameMap","retrieveValue","sysDimItem","sysDimItemDimsDef","dimDefItem","userDimName","resultDimIdx","applyDim","availDimIdx","sysDimIndex","sysDimItemOtherDims","extra","extraPrefix","genName","extraFromZero","isExtraCoord","fromZero","pointsConverter","svgURI","createElementNS","x_","targetNode","targetNodeId","getPathToRoot","viewRoot","viewPath","wrapTreePathInfo","treePathInfo","nodeDataIndex","createGraphFromNodeEdge","GraphSeries","_categoriesData","links","_updateCategoriesData","categoriesModels","_categoriesModels","categoryIdx","categoryModel","edgeLabelModel","fakeSeriesModel","edgeGetParent","getEdgeData","sourceName","targetName","focusNodeAdjacency","circular","rotateLabel","layoutAnimation","edgeSymbol","edgeSymbolSize","roam","nodeScaleRatio","polyHelper","ORIGIN_METHOD","RATE","THROTTLE_TYPE","debounce","currCall","debounceNextCall","lastCall","lastExec","timer","thisDelay","thisDebounce","debounceDelay","fnAttr","originFn","lastThrottleType","lastRate","markerModelKey","DELIMITER","subTypeDefaulters","defaulter","componentTypeMain","dependencyGetter","makeDepndencyGraph","fullNameList","noEntryList","createDependencyGraphItem","originalDeps","availableDeps","getAvailableDependencies","entryCount","dependentName","predecessor","thatItem","successor","dep","targetNameList","targetNameSet","currComponentType","currVertex","isInTargetNameSet","removeEdgeAndAdd","removeEdge","succComponentType","platform","animationEasingUpdate","progressiveThreshold","shadowTemp","orignalBrush","modified","clipPaths","roundNumber","_intervalPrecision","thisExtent","getIntervalPrecision","intervalScaleGetTicks","intervalScaleNiceTicks","intervalPrecision","niceTickExtent","expandSize","roundingErrorFix","mathLog","LogScale","_originalScale","originalScale","powVal","__fixMin","fixRoundingError","__fixMax","err","originalVal","dataColor","radarLayout","colorUtil","markAreaTransform","maModel","lt","rb","ltCoord","rbCoord","markAreaFilter","getSingleMarkerEndPoint","dimPermutations","areaData","markAreaModel","areaGroupMap","polygonGroup","__data","ToolboxModel","featureOpt","featureName","Feature","showTitle","iconStyle","containLabel","_zrender","ITEM_STYLE_NORMAL","seriesItemStyleModel","levelItemStyles","travelTree","designatedVisual","viewRootAncestors","nodeModel","nodeLayout","isInView","thisNodeColor","nodeItemStyleModel","levelItemStyle","visuals","buildVisuals","borderColorSaturation","calculateColor","calculateBorderColor","buildVisualMapping","childVisual","visualName","getValueVisualDefine","rangeVisual","getRangeVisual","visualMin","visualMax","colorMappingBy","__drColorMappingBy","childVisuals","mappingType","mapIdToIndex","hasXOrY","hasXAndY","markerTypeCalculatorWithExtent","otherDataDim","targetDataDim","otherCoordIndex","targetCoordIndex","coordArr","markerTypeCalculator","average","baseDataDim","RadiusAxis","dataToRadius","radiusToData","_viewRoot","clipWindow","squareRatio","leafDepth","drillDownIcon","zoomToNodeRatio","nodeClick","breadcrumb","emptyItemWidth","gapWidth","visualDimension","visibleMin","childrenVisibleMin","completeTreeValue","setDefault","setLayoutInfo","idIndexMap","_idIndexMap","_idIndexMapCount","childValue","thisValue","globalColorList","hasColorDefine","modelColor","level0","mapType","mapLocation","safeLimit","barLayoutGrid","unitAngle","x12","y12","_a","_b","_s","adjustEdge","nodeOpacityPath","lineOpacityPath","getItemOpacity","opacityPath","fadeOutItem","opacityRatio","fadeInItem","_lineDraw","_firstRender","_nodeScaleRatio","_getNodeGlobalScale","_updateNodeAndLinkScale","_layoutTimeout","_startForceLayoutIteration","warmUp","_layouting","setFixed","setUnfixed","__focusNodeAdjacency","__unfocusNodeAdjacency","edgeDataIndex","circularRotateLabel","adjacentEdge","unfocusNodeAdjacency","nodeScale","groupScale","groupZoom","roamZoom","lb","rt","maxX","maxY","ax0","ax1","ay0","ay1","bx0","bx1","by0","by1","msRequestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","dataAll","filteredIdx","singleDataColor","maskColor","mask","animateShape","v2Min","v2Max","v2Scale","v2Add","v2Clone","v2Sub","constraint","prevPoint","nextPoint","cps","d0","cp0","PATH_BORDER_WIDTH","PATH_GAP_WIDTH","PATH_UPPER_LABEL_SHOW","PATH_UPPER_LABEL_HEIGHT","ecWidth","ecHeight","seriesOption","containerWidth","containerHeight","rootRect","viewAbovePath","rootSize","estimateRootSize","viewRootLayout","squarify","upperHeight","treeRoot","calculateRootPosition","prunning","hideChildren","thisLayout","halfGapWidth","upperLabelHeight","getUpperLabelHeight","layoutOffset","layoutOffsetUpper","totalArea","initChildren","rowFixedLength","best","row","score","worst","orderBy","overLeafDepth","statistic","filterByThreshold","isLeafRoot","orderedChildren","deletePoint","areaMax","areaMin","squareArea","idx0WhenH","idx1WhenH","rowOtherLength","rowLen","wh1","remain","modWH","wh0","currNode","defaultSize","viewArea","currNodeValue","defaultPosition","targetCenter","clipRect","nodeInViewAbovePath","isAboveViewRoot","childClipRect","STACK_PREFIX","getLayoutOnAxis","widthAndOffsets","doCalBarWidthAndOffset","calBarWidthAndOffset","seriesInfoList","seriesInfo","lastCoord","AXIS_TYPES","BaseAxisModelClass","axisTypeDefaulter","extraDefaultOption","linkedNodesFinder","effectedModels","ClippathManager","updateDom","clipPathEl","svgProxy","cloneNode","_textDom","RadarSeries","Triangle","Diamond","Pin","tanX","tanY","cpLen","cpLen2","Arrow","symbolCtors","roundRect","square","circle","diamond","pin","arrow","triangle","symbolShapeMakers","symbolBuildProxies","inBundle","proxySymbol","symbolPathSetColor","innerColor","symbolStyle","symbolShape","__isEmptyBrush","keepAspect","lineContain","quadraticContain","LargeLineShape","isPolyline","seg","findDataIndex","LargeLineDraw","_lineEl","largeLineProto","lineEl","funnelLayout","take","resourceKey","userKey","getStore","release","uKey","mapModel","_renderSymbols","fullData","mainSeries","fullIndex","polygonGroups","__mapOriginalZ2","roundRectHelper","VALID_TEXT_ALIGN","VALID_TEXT_VERTICAL_ALIGN","middle","normalizeStyle","makeFont","renderRichText","renderPlainText","setCtx","contentBlock","__textCotentBlock","parsePlainText","outerHeight","boxPos","getBoxPosition","baseX","baseY","applyTextRotation","boxY","adjustTextY","needDrawBg","needDrawBackground","outerWidth","boxX","adjustTextX","drawBackground","getTextXForPadding","getFill","strokeText","fillText","parseRichText","drawRichText","contentWidth","lineTop","token","tokens","tokenCount","usedWidth","lineXLeft","lineXRight","placeToken","tokenStyle","isLineHolder","isPlainBg","onBgImageLoaded","blockHeiht","PointerPath","parsePosition","formatLabel","GaugeView","posInfo","_renderMain","axisLineModel","angleRangeSpan","prevEndAngle","axisLineWidth","getColor","_renderTicks","_renderPointer","_renderTitle","_renderDetail","minVal","maxVal","tickModel","subSplitNumber","splitLineLen","tickLen","subStep","splitLineStyle","tickLineStyle","tickLine","valueExtent","detailModel","linesLayout","linesVisual","vmlCore","comma","imageTransformPrefix","Z2","ZLEVEL_BASE","Z_BASE","initRootElStyle","coordsize","coordorigin","encodeHtmlAttribute","String","rgb2Str","append","getZIndex","setColorAndOpacity","getColorAndAlpha","updateFillNode","zrEl","gradientType","focus","expansion","cs1","cs2","colorAndAlphaList","colorAndAlpha","color1","color2","opacity1","opacity2","focusposition","updateStrokeNode","dashstyle","updateFillAndStroke","vmlEl","isFill","createNode","nPoint","brushVML","vmlRoot","_vmlEl","needTransform","strokeEl","weight","zIndex","removeRectText","onRemove","onAdd","appendRectText","isImage","ow","oh","_imageSrc","_imageWidth","_imageHeight","imageRuntimeStyle","runtimeStyle","oldRuntimeWidth","oldRuntimeHeight","sw","sh","hasCrop","doc","vmlElStyle","hasRotation","transformFilter","imageEl","_imageEl","cropEl","_cropEl","imageELStyle","tmpImage","overflow","cropElStyle","filterStr","textMeasureEl","DEFAULT_STYLE_NORMAL","fontStyleCache","fontStyleCacheCount","MAX_FONT_CACHE_SIZE","fontEl","getFontStyle","fontString","variant","fontVariant","family","body","ex","offsetWidth","fromTextEl","textLine","textPathEl","skewEl","textVmlEl","_textVmlEl","nextSibling","textpathok","textVmlElStyle","string","polygonContain","getLineSelectors","lineIntersectPolygon","xyIndex","inLineRange","layoutRange","lx","ly","l2x","l2y","lineIntersect","a1x","a1y","a2x","a2y","b1x","b1y","b2x","b2y","determinant","nearZero","namenda","miu","v4","showContent","alwaysShowContent","displayMode","confine","showDelay","hideDelay","extraCssText","crossStyle","AngleAxis","angleToData","processSingleVisualMap","prepareVisualMeta","visualMetaList","visualMeta","resultVisual","opacityMap","itemOpacity","LargeSymbolDraw","_normalSymbolDraw","_largeSymbolDraw","largeSymbolDraw","normalSymbolDraw","someVectorAt","isTangent","DATA_NAME_INDEX","ThemeRiverSeries","fixData","rawDataLength","dataByName","layData","dataList","largestLayer","timeValue","keyIndex","lenCount","indexArr","comparer","index1","index2","nestestValue","nearestIdx","theValue","htmlName","htmlValue","hasEffect","isLarge","_hasEffet","_isPolyline","_isLarge","isSvg","getLayer","_lastZlevel","DEFAULT_TOOLBOX_BTNS","isNew","brushComponents","brushComponentSpecifiedBtns","brushOpt","tbs","toolboxFeature","toolboxBrush","brushTypes","removeDuplicate","flag","shapeCompareFunc","_roots","_displayList","_displayListLen","includeIgnore","updateDisplayList","displayList","_updateAndAddDisplayable","afterUpdate","userSetClipPath","currentClipPath","parentClipPath","_children","__storage","addChildrenToStorage","delChildrenFromStorage","_renderList","displayableSortFunc","brushHelper","elementList","fromAxisAreaSelect","oldAxisGroup","_axisGroup","coordSysModel","areaSelectStyle","getAreaSelectStyle","areaWidth","axisLayout","getAxisLayout","builderOpt","strokeContainThreshold","_refreshBrushController","getCoverInfoList","extentLen","enableGlobalPan","panelId","makeRectPanelClipPath","isTargetByCursor","makeRectIsTargetByCursor","getLinearBrushOtherExtent","makeLinearBrushOtherExtent","removeOnClick","coverInfoList","coverInfo","parallelAxisId","activeIntervals","componentProto","zrLog","GradientManager","addWithoutUpdate","svgElement","gradient","splitList","Breadcrumb","animationUtil","DRAG_THRESHOLD","PATH_LABEL_NOAMAL","PATH_LABEL_EMPHASIS","PATH_UPPERLABEL_NORMAL","PATH_UPPERLABEL_EMPHASIS","Z_BG","Z_CONTENT","getItemStyleEmphasis","getItemStyleNormal","createStorage","_breadcrumb","_state","thisStorage","reRoot","rootNodeGroup","nodeGroup","_giveContainerGroup","renderResult","_doRender","renderFinally","_doAnimation","_resetController","_renderBreadcrumb","thisTree","oldTree","lastsForAnimation","oldStorage","willInvisibleEls","doRenderNode","renderNode","dualTravel","willDeleteEls","clearStorage","thisViewChildren","oldViewChildren","parentGroup","sameTree","getKey","processNode","thisNode","oldNode","storageName","delEls","__tmWillDelete","animationWrap","createWrap","__tmNodeWidth","__tmNodeHeight","targetX","targetY","old","fadein","_clearController","findTarget","_rootToNode","_zoomToNode","linkTarget","onSelect","bgEl","thisWidth","thisHeight","thisInvisible","thisRawIndex","oldRawIndex","isParent","itemStyleNormalModel","itemStyleEmphasisModel","giveGraphic","bg","renderContent","useUpperLabel","visualBorderColor","emphasisBorderColor","upperLabelWidth","prepareText","contentHeight","__tmWillVisible","upperLabelRect","iconChar","emphasisLabelModel","minChar","lasts","prepareAnimationWhenHasOld","calculateZ","__tmDepth","__tmStorageName","prepareAnimationWhenNoOld","lastCfg","parentOldX","parentOldY","parentOldBg","zInLevel","zb","getAxisLineShape","rExtent","getRadiusIdx","ticksAngles","_axisLine","_axisTick","tickAngle","_axisLabel","categoryData","labelsAngles","labelTextAlign","labelTextVerticalAlign","prevAngle","number","format","ecHelper","_List","_Model","_Axis","_env","_parseGeoJson","ecUtil","setAreas","adjustSingleSide","shiftDown","shiftUp","changeX","isDownList","lastDeltaX","deltaY","deltaX","lastY","upList","downList","avoidOverlap","labelLayoutList","leftList","rightList","hasLabelRotate","labelLineLen2","singleAxisHelper","ifIgnoreOnTick","selfBuilderAttr","SingleAxisView","lineInterval","Animatable","animators","animatingShape","pathSplitted","_animateToShallow","objShallow","propertyCount","seriesModelMixin","CandlestickSeries","defaultValueDimensions","color0","borderColor0","animationUpdate","COORD_CONVERTS","INCLUDE_FINDER_MAIN_TYPES","targetInfoList","_targetInfoList","foundCpts","targetInfoBuilders","builder","formatMinMax","includeMainTypes","setOutputRanges","coordRanges","coordConvert","__rangeOffset","diffProcessor","xyMinMax","findTargetInfo","coordSyses","rangeOffset","getScales","getDefaultBrushType","getPanelRect","defaultBrushType","areaPanelId","targetInfoMatchers","xAxisModels","yAxisModels","gridModels","gridModelMap","xAxesHas","yAxesHas","cartesians","panelRectBuilder","geoModels","axisConvert","rangeOrCoordRange","xminymin","xmaxymax","axisNameIndex","axisDiffProcessor","refer","scales","xyMinMaxCurr","xyMinMaxOrigin","sizeCurr","sizeOrigin","decode","json","UTF8Encoding","encodeScale","UTF8Scale","coordinates","encodeOffsets","coordinate","decodePolygon","c2","prevX","prevY","featureObj","pieLayout","updateController","modelId","$from","IRRELEVANT_EXCLUDES","targetCoordSysModel","topTarget","labelDims","EFFECT_RIPPLE_NUMBER","updateRipplePath","rippleGroup","effectCfg","ripplePath","effectSymbolProto","stopEffectAnimation","startEffectAnimation","effectOffset","rippleScale","updateEffectAnimation","oldEffectCfg","_effectCfg","DIFFICULT_PROPS","LargeSymbolPath","sizes","symbolProxy","symbolProxyShape","_symbolEl","largeSymbolProto","QUERY_REG","_timelineOptions","_mediaList","_mediaDefault","_currentMediaIndices","_optionBackup","_newBaseOption","parseRawOption","mediaDefault","timelineOptions","mediaList","media","singleMedia","preProcess","applyMediaQuery","realMap","aspectratio","applicatable","matched","operator","realAttr","real","expect","indicesEquals","indices1","indices2","oldOption","newCptOpt","oldCptOpt","oldOptionBackup","newParsedOption","isRecreate","optionBackup","Draggable","_dragStart","_drag","_dragEnd","draggingTarget","_draggingTarget","dispatchToElement","dropTarget","lastDropTarget","_dropTarget","axisTrigger","collect","realIndex","paramsSet","reals","fakeValue","layoutInput","rParam","pathContain","pathProxyForDraw","hasFillGradient","hasStrokeGradient","hasFillPattern","hasStrokePattern","_fillGradient","_strokeGradient","ctxLineDash","shapeCfg","needsUpdateRect","rectWithStroke","_rectWithStroke","lineScale","localPos","dirtyPath","__clipTarget","Sub","defaultShape","thisShape","Cartesian","getAxesByScale","axisX","axisY","_dimName","_axisIndex","_valueWindow","_percentWindow","_dataExtent","_minMaxSpan","_dataZoomModel","calculateDataExtent","seriesExtent","fixExtentByAxis","isCategoryAxis","setAxisModel","isRestore","percentWindow","useOrigin","setMinMaxSpan","valueSpan","getOtherAxisModel","coordSysIndexName","foundOtherAxisModel","isCartesian","otherAxisModel","boundValue","boundPercent","dataWindow","leftOut","rightOut","thisHasValue","thisLeftOut","thisRightOut","isInWindow","seriesInvolved","coordSysMap","collectAxesInfo","collectSeriesInfo","globalAxisPointerModel","linksOption","linkGroups","coordSysKey","makeKey","axesInfoInCoordSys","baseTooltipModel","saveTooltipAxisInfo","triggerAxis","cross","tooltipAxes","fromTooltip","axisPointerShow","isHandleTrigger","makeAxisPointerModel","involveSeries","groupIndex","getLinkGroupIndex","linkGroup","mapper","tooltipAxisPointerModel","volatileOption","field","labelOption","seriesTooltipTrigger","seriesTooltipShow","seriesDataCount","linkOption","checkPropInLink","linkPropValue","axisPropValue","GRADIENT_LEVELS","Heatmap","_gradientPixels","colorFunc","_getBrush","gradientInRange","_getGradient","gradientOutOfRange","imageData","getImageData","pixels","pixelLen","diffOpacity","gradientOffset","putImageData","brushCanvas","_brushCanvas","gradientPixels","pixelsSingleState","Uint8ClampedArray","TOUCH_CLICK_DELAY","mouseHandlerNames","touchHandlerNames","pointerEventNames","pointerdown","pointerup","pointermove","pointerout","pointerHandlerNames","nm","eventNameFix","processGesture","proxy","gestureMgr","_gestureMgr","setTouchTimer","instance","_touching","_touchTimer","domHandlers","mouseout","toElement","relatedTarget","touchstart","_lastTouchMoment","touchmove","touchend","click","isPointerFromTouch","pointerType","initDomHandler","makeMouseHandler","_handlers","HandlerDomProxy","mountHandlers","handlerNames","handlerDomProxyProto","setCursor","processedMapType","mapSymbolOffsets","subMapSeries","dimAxisMapper","_axes","_dimList","_dataCoordConvert","input","dimList","SankeySeries","rawDataOpt","layoutIterations","makeAction","PROXIMATE_ONE_DAY","Calendar","calendarModel","_rangeInfo","_sw","_sh","getFirstDayOfWeek","_firstDayOfWeek","getDateInfo","day","getDay","formatedDate","getNextNDay","setDate","_lineWidth","_getRangeInfo","_initRangeOption","whNames","cellNumbers","cellSizeSpecified","whGlobal","calendarRect","dayInfo","week","nthWeek","pointToDate","tl","tr","br","bl","nthX","nthY","_getDateByWeeksAndDay","setMonth","reversed","startDateNum","endDateNum","fweek","lweek","nthDay","calendarList","calendarSeries","legendFilter","SILENT","makeEventPacket","eveType","EmptyProxy","painterRoot","_hovered","isHover","lastHovered","lastHoveredTarget","hovered","hoveredTarget","innerDom","eventArgs","eventPacket","eachOtherLayer","layer","exclude","hoverCheckResult","_downEl","_downPoint","_upEl","magicTypeLang","MagicType","getIcons","availableIcons","icons","seriesOptGenreator","radioTypes","generateNewSeriesTypes","newSeriesOpt","radio","currentType","doCreateNode","urn","win","vmlInited","namespaces","zrvml","initVML","styleSheets","createStyleSheet","addRule","AxisPointerView","_updatePathDirty","vec2Min","vec2Max","v2Copy","isPointNull","drawSegment","segLen","allLen","smoothMin","smoothMax","prevIdx","nextP","ratioNextSeg","prevP","lenPrevSeg","lenNextSeg","getBoundingBox","ptMin","ptMax","stackedOnBBox","LinkedList","tail","linkedListProto","insert","entry","Entry","insertEntry","_list","_map","_maxSize","_lastRemovedEntry","LRUProto","leastUsedEntry","PictorialBarSeries","previousZoom","fixX","fixY","cubic","quadratic","swapExtrema","windingCubic","nRoots","y0_","y1_","nExtrema","windingQuadratic","y_","windingArc","containPath","isStroke","_axesLayout","restrict","layoutAxisWithoutExpand","layoutLength","axisCount","axisNameAvailableWidth","axisLabelShow","layoutAxisWithExpand","nameTruncateMaxWidth","axisCollapseWidth","winInnerIndices","axisExpandWindow0Pos","axisExpandWindow","_updateAxesFromSeries","_makeLayoutInfo","axisBase","layoutBase","pixelDimIndex","pAxis","pLayout","axisLength","_layoutAxes","winSize","layoutExtent","positionTable","rotationTable","axisCoordToPoint","hasActiveSet","getActiveState","getSlidedAxisExpandWindow","behavior","pointCoord","triggerArea","useJump","PolarAxisModel","polarId","polarAxisDefaultExtendedOption","treemapVisual","treemapLayout","listComponentHelper","toolboxModel","featureOpts","_features","featureNames","_featureNames","processFeature","titleText","__title","needPutOnTop","topOffset","oldName","isUserFeatureName","createIconPaths","iconName","iconPaths","iconStatus","iconStyleModel","titles","parseInt10","checkParentAvailable","insertAfter","prevSibling","prepend","SVGPainter","_opts","gradientManager","clipPathManager","viewport","_viewport","_visibleList","createMethodNotSupport","viewportRoot","_paintList","visibleList","listLen","newVisibleList","prevSvgElement","textSvgElement","_getDefs","_getSize","_width","_height","viewportStyle","whIdx","cwh","plt","prb","outerHTML","unescape","repeat","createPattern","class","ref","positionY1","load","fit","china","mounted","handleScroll","onWindowResize","$nextTick","initMap","unmounted","$refs","dataMap","dataMine","dataOther","border","ff","getCoords","dataLines","hoverSymbolSize","encode","dealWithData","pic1","getElementById","$store","mobile","scrollTop","pageYOffset","documentElement","__exports__","moveAnimation","propsEqual","lastProp","lastProps","newProps","updateLabelShowHide","labelEl","getHandleTransProps","updateMandatoryProps","_group","_lastGraphicKey","_handle","_lastValue","_lastStatus","_payloadInfo","_axisModel","_axisPointerModel","_moveAnimation","determineAnimation","doUpdateProps","updatePointerEl","updateLabelEl","createPointerEl","createLabelEl","useSnap","pointerEl","handleModel","onmousedown","_onHandleDragMove","_onHandleDragEnd","includeStyles","_moveHandleToValue","_doDispatchAxisPointer","payloadInfo","doClear","buildLabel","xDimIndex","BoxplotView","TimelineModel","SliderTimelineModel","checkpointStyle","playIcon","stopIcon","nextIcon","prevIcon","idStart","colorQuery","opacityQuery","restoreLang","Restore","barGrid","prepareCartesian2d","prepareGeo","prepareSingleAxis","preparePolar","prepareCalendar","ITEM_STYLE_NORMAL_PATH","ITEM_STYLE_EMPHASIS_PATH","LABEL_NORMAL","LABEL_EMPHASIS","GROUP_DIFF_PREFIX","prepareCustoms","__customPathData","__customImagePath","__customText","__customGraphicType","updateEl","targetProps","targetStyle","prepareStyleTransition","targetOpacity","styleEmphasis","oldElStyle","makeRenderItem","customSeries","prepareResult","currDataIndexInside","currItemModel","currLabelNormalModel","currLabelEmphasisModel","currLabelValueDim","currVisualColor","userAPI","barLayout","currentSeriesIndices","userParams","dataInsideLength","wrapEncodeDef","currDirty","updateCache","dataDimIndex","doCreateOrUpdate","elOptionType","oldChildren","newChildren","diffChildrenByName","diffGroupChildren","processAddUpdate","processRemove","childOption","nubmerUtil","subOpts","emphasisOpt","normalOpt","subOptName","createDataFormatModel","componentSubType","marker","labelProp","newCptOptions","cptOption","idMap","existCpt","idNum","batchA","batchB","mapA","mapB","makeMap","mapToArray","sourceBatch","otherMap","otherDataIndices","isData","hostObj","parsedKey","queryType","queryParam","_setting","_isBlank","childCount","_doAdd","addBefore","includeChildren","tmpMat","childRect","extremity","xDim","yDim","_baseAxisDim","addOrdinal","baseAxisDimIndex","baseAxisDim","whiskerBoxDraw","_whiskerBoxDraw","colorIdx","colorNameMap","colorPalette","doneCallback","elExistsMap","fixPosition","textWidthCache","textWidthCacheCounter","TEXT_CACHE_MAX","STYLE_REG","measureText","getRichTextRect","getPlainTextRect","halfHeight","truncateText","prepareTruncateOptions","truncateSingleLine","maxIterations","cnCharWidth","ascCharWidth","ellipsisWidth","subLength","estimateLength","charCode","getLineHeight","truncOuterHeight","truncOuterWidth","matchedIndex","pushTokens","stlPadding","truncateWidth","truncateHeight","tokenHeight","tokenWidth","tokenWidthNotSpecified","percentWidth","bgImg","paddingW","remianTruncWidth","isEmptyStr","strs","tokensLen","Chart","toggleHighlight","chartProto","elSetState","VMLPainter","vmlViewport","_vmlRoot","_vmlViewport","_firstPaint","__alreadyNotVisible","_getWidth","_getHeight","vmlViewportStyle","seriesItem","DEFAULT_COLOR","replacableOptionKeys","dataBound","contentColor","getTargetSeriesIndices","optionSeriesIndex","isMinMax","optDim","completeSingle","defa","completeInactive","stateExist","stateAbsent","optExist","optAbsent","completeController","symbolExists","symbolSizeExists","positionMap","directionMap","modelHelper","illegalPoint","isIllegalPoint","inputAxesInfo","shouldHide","outputFinder","showValueMap","updaters","showPointer","showTooltip","coordSysContainsPoint","inputAxisInfo","findInputAxisInfo","processOnAxis","linkTriggers","tarAxisInfo","tarKey","srcAxisInfo","srcKey","srcValItem","makeMapperParam","updateModelActually","dispatchTooltipActually","dispatchHighDownActually","newValue","dontSnap","buildPayloadsBySeries","payloadBatch","snapToValue","seriesNestestValue","coordSysItem","coordSysId","coordSysIndex","coordSysMainType","outputAxesInfo","valItem","highDownKey","lastHighlights","newHighlights","toHighlight","toDownplay","setScrollDataIndex","groupResult","groupSeriesByAxis","groupItem","calculateBase","layoutSingleSeries","boxOffsetList","boxWidthList","axisList","seriesCount","boundList","maxDataCount","boxWidthBound","availableWidth","boxGap","boxWidth","halfWidth","median","end1","end5","layEndLine","endCenter","MAX_PROGRESSIVE_LAYER_NUMBER","isLayerValid","__builtin__","preProcessLayer","__unusedCount","postProcessLayer","isDisplayableCulled","isClipPathChanged","prevClipPaths","doClip","createRoot","domRoot","singleCanvas","nodeName","_singleCanvas","rootStyle","zlevelList","_zlevelList","layers","_layerConfig","mainLayer","_domRoot","_progressiveLayers","_hoverlayer","_hoverElements","paintAll","_startProgessive","__hoverMir","elMirror","hoverElements","hoverLayer","originalEl","_doPaintEl","_furtherProgressive","_progressiveToken","_progress","_doPaintList","_clearProgressive","_updateLayerStatus","eachBuiltinLayer","currentLayer","currentZLevel","currentProgressiveLayer","layerProgress","progressiveLayerIdx","flushProgressiveLayer","elZLevel","elFrame","__frame","renderScope","__progress","__maxProgress","__nextIdxNotProg","forcePaint","prevClipLayer","prevElClipPaths","insertLayer","layersMap","prevLayer","virtual","prevDom","eachLayer","getLayers","progressiveLayers","elCountsLastFrame","progressiveElCountsLastFrame","lastProgressiveKey","progressiveLayerCount","frameCount","elProgress","_clearLayer","layerConfig","delLayer","clearLayer","imageLayer","findAndDrawOtherLayer","smaller","larger","intermediateLayer","renderToCanvas","shadowBlurSize","leftMargin","rightMargin","topMargin","bottomMargin","pathTransform","ImageShape","imgShape","upperCaseFirst","group1","TPL_VAR_ALIAS","wrapVar","varName","seriesIdx","paramsList","seriesLen","alias","formatTplSimple","s2d","isUTC","utc","autoPlay","rewind","playInterval","_names","_initData","dataArr","idxArr","newItem","MONTH_TEXT","EN","CN","WEEK_TEXT","_tlpoints","_blpoints","_firstDayOfMonth","_firstDayPoints","rangeData","_renderDayRect","_renderLines","_renderYearText","_renderMonthText","_renderWeekText","itemRectStyleModel","addPoints","_getLinePointsOfOneWeek","_drawSplitline","_getEdgesPoints","rs","poyline","tmpD","_formatterLabel","_yearTextPositionControl","aligns","xc","yc","posPoints","yearText","_monthTextPositionControl","isCenter","termPoints","firstDayPoints","yyyy","yy","MM","monthText","_weekTextPositionControl","isStart","firstDayOfWeek","weekText","keysFunction","sortKeysFunction","keyFunction","mapObject","valuesByKey","keyValue","entriesMap","sortKeyFunction","mathAtan2","resizeGeo","leftTop","rightBottom","boxLayoutOption","useCenterAndSize","setGeoCoords","geoList","mapData","mapModelGroupBySeries","nameMapList","singleMapSeries","originRegionArr","regionsArr","dataNameMap","pp","friction","v12","nLen","repFact","extentSpan","originalDistSign","getSpanSign","extentMinSpan","realExtent","currDistSign","dataSample","orthogonalLayout","radialLayout","getStackedOnPoint","stackedOnSameSign","valueStart","baseDataOffset","stackedData","diffData","diffResult","idx1","oldStackedOnPoints","newStackedOnPoints","oldCoordSys","newCoordSys","currPoints","nextPoints","currStackedPoints","nextStackedPoints","sortedIndices","rawIndices","diffItem","pointAdded","currentPt","nextPt","sortedCurrPoints","sortedNextPoints","sortedCurrStackedPoints","sortedNextStackedPoints","sortedStatus","stackedOnCurrent","stackedOnNext","SingleAxisPointer","getPointDimIndex","ScrollableLegendModel","pageButtonItemGap","pageIcons","pageIconColor","pageIconInactiveColor","pageTextStyle","lineAnimationDiff","isPointsSame","points2","getSmooth","getAxisExtentWithGap","halfBandWidth","getStackedOnPoints","xExtent","yExtent","createPolarClipShape","createClipShape","turnPointsIntoStep","stepTurnAt","stepPoints","stepPt","stepPt2","getVisualGradient","stopLen","tinyExtent","minCoord","maxCoord","coordSpan","_lineGroup","isCoordSysPolar","prevCoordSys","_coordSys","_polyline","_polygon","isAreaChart","isSymbolIgnore","_getSymbolIgnoreFunc","__temp","_step","_newPolygon","_stackedOnPoints","_updateAnimation","_newPolyline","stackedOnSeries","__points","updatedDataInfo","diffStatus","ptIdx","CartesianAxisView","areaInterval","loopGeo","parallelPreprocessor","CLICK_THRESHOLD","_throttledDispatchExpand","_dispatchExpand","checkTrigger","_mouseDownPoint","mouseDownPoint","DEFAULT_OUT_OF_BRUSH_COLOR","BrushModel","brushMode","transformable","inBrush","outOfBrush","generateBrushOption","normalizeRect","localPoints","specifiedXYIndex","brushWidth","targetModel","localCursorPoint","TEXT_PADDING","ITEM_GAP","ARRAY_LENGTH","makeItemPoints","packEventData","itemNode","selfType","normalStyleModel","layoutParam","totalWidth","renderList","_prepare","_renderContent","lastX","availableSize","getAvailableSize","dataStatistics","statisticType","mapKey","seriesGroups","hostGeoModel","seriesList","symbolCtor","_symbolCtor","symbolDrawProto","isIgnore","SymbolCtor","enableAnimation","PieSeries","hoverOffset","avoidLabelOverlap","percentPrecision","HV_NAMES","boxLayout","maxHeight","currentLineMaxSize","nextX","nextY","nextChild","nextChildRect","moveX","moveY","vbox","hbox","containerRect","verticalMargin","horizontalMargin","elPos","targetOption","hResult","vResult","newParams","newValueCount","merged","mergedValueCount","enoughParamNumber","hasProp","boxplotVisual","boxplotLayout","matrixUtil","makeAxisEventDataBase","dumbGroup","_transform","_dumbGroup","hasBuilder","builders","pt1","pt2","arrows","arrowSize","symbolWidth","symbolHeight","axisTickLabel","tickEls","buildAxisTick","labelEls","buildAxisLabel","fixMinMaxLabelShow","gapSignal","isNameLocationCenter","nameRotation","endTextLayout","truncateOpt","truncatedText","__fullText","__truncatedText","targetType","axisRotation","rotationDiff","textRotate","onLeft","firstLabel","nextLabel","lastLabel","prevLabel","firstTick","nextTick","lastTick","prevTick","ignoreEl","isTwoLabelOverlapped","firstRect","nextRect","mRotationBack","ticksCnt","rawTick","tickInterval","tickEl","tickVal","itemLabelModel","labelStr","_traversalHelper","sep","coorX","coorY","finalCoor","compatStyle","compatLayoutProperties","LAYOUT_PROPERTIES","COMPATITABLE_COMPONENTS","COMPATITABLE_SERIES","clockWise","pointerColor","dataRange","componentName","COVER_Z","UNSELECT_THRESHOLD","MIN_RESIZE_LINE_WIDTH","MUTEX_RESOURCE_KEY","DIRECTION_MAP","CURSOR_MAP","ne","nw","se","DEFAULT_BRUSH_OPT","baseUID","_brushType","_brushOption","_panels","_covers","_creatingCover","_creatingPanel","_enableGlobalPan","_uid","mouseHandlers","doEnableBrush","doDisableBrush","createCover","cover","coverRenderers","__brushOption","endCreating","creatingCover","coverRenderer","getCoverRenderer","updateCoverShape","updateCoverAfterCreation","getPanelByPoint","panel","panels","pn","getPanelByCover","clearCovers","covers","originalLength","shouldShowCover","getTrackEnds","createBaseRectCover","doDrift","edgeNames","makeStyle","updateBaseRect","localRange","xa","ya","x2a","y2a","widtha","heighta","updateRectShape","mainEl","globalDir","getGlobalDirection","pointsToRect","clipByPanel","formatRectRange","localDirection","inverseMap","driftRect","toRectRange","fromRectRange","rectRange","localDelta","toLocalDelta","namePart","ind","driftPolygon","localD","localZero","xmin","ymin","xmax","ymax","resetCursor","currPanel","rawE","mainShapeContain","updateCoverByMouse","eventParams","thisBrushOption","determineBrushType","coverBrushOption","getCreatingRange","panelOpts","eachCover","brushOptionList","tmpIdPrefix","oldCovers","newCovers","oldGetKey","addOrUpdate","newBrushOption","handleDragEnd","getLineRenderer","localTrack","_radiusAxis","_angleAxis","maxAngle","encodeColor","colorAccessPath","samplers","nearest","indexSampler","sampler","PATH_COLOR","BoxplotSeries","brushLang","Brush","_brushMode","isBrushed","command","styleModel","paddings","confineInContainer","bgColor"],"mappings":"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","file":"js/chunk-43a99820.1700529706612.js","sourcesContent":["var List = require(\"../../data/List\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar SeriesModel = require(\"../../model/Series\");\n\nvar completeDimensions = require(\"../../data/helper/completeDimensions\");\n\nvar _default = SeriesModel.extend({\n type: 'series.parallel',\n dependencies: ['parallel'],\n visualColorAccessPath: 'lineStyle.normal.color',\n getInitialData: function (option, ecModel) {\n var parallelModel = ecModel.getComponent('parallel', this.get('parallelIndex'));\n var parallelAxisIndices = parallelModel.parallelAxisIndex;\n var rawData = option.data;\n var modelDims = parallelModel.dimensions;\n var dataDims = generateDataDims(modelDims, rawData);\n var dataDimsInfo = zrUtil.map(dataDims, function (dim, dimIndex) {\n var modelDimsIndex = zrUtil.indexOf(modelDims, dim);\n var axisModel = modelDimsIndex >= 0 && ecModel.getComponent('parallelAxis', parallelAxisIndices[modelDimsIndex]);\n\n if (axisModel && axisModel.get('type') === 'category') {\n translateCategoryValue(axisModel, dim, rawData);\n return {\n name: dim,\n type: 'ordinal'\n };\n } else if (modelDimsIndex < 0) {\n return completeDimensions.guessOrdinal(rawData, dimIndex) ? {\n name: dim,\n type: 'ordinal'\n } : dim;\n } else {\n return dim;\n }\n });\n var list = new List(dataDimsInfo, this);\n list.initData(rawData); // Anication is forbiden in progressive data mode.\n\n if (this.option.progressive) {\n this.option.animation = false;\n }\n\n return list;\n },\n\n /**\n * User can get data raw indices on 'axisAreaSelected' event received.\n *\n * @public\n * @param {string} activeState 'active' or 'inactive' or 'normal'\n * @return {Array.} Raw indices\n */\n getRawIndicesByActiveState: function (activeState) {\n var coordSys = this.coordinateSystem;\n var data = this.getData();\n var indices = [];\n coordSys.eachActiveState(data, function (theActiveState, dataIndex) {\n if (activeState === theActiveState) {\n indices.push(data.getRawIndex(dataIndex));\n }\n });\n return indices;\n },\n defaultOption: {\n zlevel: 0,\n // 一级层叠\n z: 2,\n // 二级层叠\n coordinateSystem: 'parallel',\n parallelIndex: 0,\n label: {\n normal: {\n show: false\n },\n emphasis: {\n show: false\n }\n },\n inactiveOpacity: 0.05,\n activeOpacity: 1,\n lineStyle: {\n normal: {\n width: 1,\n opacity: 0.45,\n type: 'solid'\n }\n },\n progressive: false,\n // 100\n smooth: false,\n animationEasing: 'linear'\n }\n});\n\nfunction translateCategoryValue(axisModel, dim, rawData) {\n var axisData = axisModel.get('data');\n var numberDim = convertDimNameToNumber(dim);\n\n if (axisData && axisData.length) {\n zrUtil.each(rawData, function (dataItem) {\n if (!dataItem) {\n return;\n } // FIXME\n // time consuming, should use hash?\n\n\n var index = zrUtil.indexOf(axisData, dataItem[numberDim]);\n dataItem[numberDim] = index >= 0 ? index : NaN;\n });\n } // FIXME\n // 如果没有设置axis data, 应自动算出,或者提示。\n\n}\n\nfunction convertDimNameToNumber(dimName) {\n return +dimName.replace('dim', '');\n}\n\nfunction generateDataDims(modelDims, rawData) {\n // parallelModel.dimension should not be regarded as data\n // dimensions. Consider dimensions = ['dim4', 'dim2', 'dim6'];\n // We detect max dim by parallelModel.dimensions and fist\n // item in rawData arbitrarily.\n var maxDimNum = 0;\n zrUtil.each(modelDims, function (dimName) {\n var numberDim = convertDimNameToNumber(dimName);\n numberDim > maxDimNum && (maxDimNum = numberDim);\n });\n var firstItem = rawData[0];\n\n if (firstItem && firstItem.length - 1 > maxDimNum) {\n maxDimNum = firstItem.length - 1;\n }\n\n var dataDims = [];\n\n for (var i = 0; i <= maxDimNum; i++) {\n dataDims.push('dim' + i);\n }\n\n return dataDims;\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar VisualMapView = require(\"./VisualMapView\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar _symbol = require(\"../../util/symbol\");\n\nvar createSymbol = _symbol.createSymbol;\n\nvar layout = require(\"../../util/layout\");\n\nvar helper = require(\"./helper\");\n\nvar PiecewiseVisualMapView = VisualMapView.extend({\n type: 'visualMap.piecewise',\n\n /**\n * @protected\n * @override\n */\n doRender: function () {\n var thisGroup = this.group;\n thisGroup.removeAll();\n var visualMapModel = this.visualMapModel;\n var textGap = visualMapModel.get('textGap');\n var textStyleModel = visualMapModel.textStyleModel;\n var textFont = textStyleModel.getFont();\n var textFill = textStyleModel.getTextColor();\n\n var itemAlign = this._getItemAlign();\n\n var itemSize = visualMapModel.itemSize;\n\n var viewData = this._getViewData();\n\n var endsText = viewData.endsText;\n var showLabel = zrUtil.retrieve(visualMapModel.get('showLabel', true), !endsText);\n endsText && this._renderEndsText(thisGroup, endsText[0], itemSize, showLabel, itemAlign);\n zrUtil.each(viewData.viewPieceList, renderItem, this);\n endsText && this._renderEndsText(thisGroup, endsText[1], itemSize, showLabel, itemAlign);\n layout.box(visualMapModel.get('orient'), thisGroup, visualMapModel.get('itemGap'));\n this.renderBackground(thisGroup);\n this.positionGroup(thisGroup);\n\n function renderItem(item) {\n var piece = item.piece;\n var itemGroup = new graphic.Group();\n itemGroup.onclick = zrUtil.bind(this._onItemClick, this, piece);\n\n this._enableHoverLink(itemGroup, item.indexInModelPieceList);\n\n var representValue = visualMapModel.getRepresentValue(piece);\n\n this._createItemSymbol(itemGroup, representValue, [0, 0, itemSize[0], itemSize[1]]);\n\n if (showLabel) {\n var visualState = this.visualMapModel.getValueState(representValue);\n itemGroup.add(new graphic.Text({\n style: {\n x: itemAlign === 'right' ? -textGap : itemSize[0] + textGap,\n y: itemSize[1] / 2,\n text: piece.text,\n textVerticalAlign: 'middle',\n textAlign: itemAlign,\n textFont: textFont,\n textFill: textFill,\n opacity: visualState === 'outOfRange' ? 0.5 : 1\n }\n }));\n }\n\n thisGroup.add(itemGroup);\n }\n },\n\n /**\n * @private\n */\n _enableHoverLink: function (itemGroup, pieceIndex) {\n itemGroup.on('mouseover', zrUtil.bind(onHoverLink, this, 'highlight')).on('mouseout', zrUtil.bind(onHoverLink, this, 'downplay'));\n\n function onHoverLink(method) {\n var visualMapModel = this.visualMapModel;\n visualMapModel.option.hoverLink && this.api.dispatchAction({\n type: method,\n batch: helper.convertDataIndex(visualMapModel.findTargetDataIndices(pieceIndex))\n });\n }\n },\n\n /**\n * @private\n */\n _getItemAlign: function () {\n var visualMapModel = this.visualMapModel;\n var modelOption = visualMapModel.option;\n\n if (modelOption.orient === 'vertical') {\n return helper.getItemAlign(visualMapModel, this.api, visualMapModel.itemSize);\n } else {\n // horizontal, most case left unless specifying right.\n var align = modelOption.align;\n\n if (!align || align === 'auto') {\n align = 'left';\n }\n\n return align;\n }\n },\n\n /**\n * @private\n */\n _renderEndsText: function (group, text, itemSize, showLabel, itemAlign) {\n if (!text) {\n return;\n }\n\n var itemGroup = new graphic.Group();\n var textStyleModel = this.visualMapModel.textStyleModel;\n itemGroup.add(new graphic.Text({\n style: {\n x: showLabel ? itemAlign === 'right' ? itemSize[0] : 0 : itemSize[0] / 2,\n y: itemSize[1] / 2,\n textVerticalAlign: 'middle',\n textAlign: showLabel ? itemAlign : 'center',\n text: text,\n textFont: textStyleModel.getFont(),\n textFill: textStyleModel.getTextColor()\n }\n }));\n group.add(itemGroup);\n },\n\n /**\n * @private\n * @return {Object} {peiceList, endsText} The order is the same as screen pixel order.\n */\n _getViewData: function () {\n var visualMapModel = this.visualMapModel;\n var viewPieceList = zrUtil.map(visualMapModel.getPieceList(), function (piece, index) {\n return {\n piece: piece,\n indexInModelPieceList: index\n };\n });\n var endsText = visualMapModel.get('text'); // Consider orient and inverse.\n\n var orient = visualMapModel.get('orient');\n var inverse = visualMapModel.get('inverse'); // Order of model pieceList is always [low, ..., high]\n\n if (orient === 'horizontal' ? inverse : !inverse) {\n viewPieceList.reverse();\n } // Origin order of endsText is [high, low]\n else if (endsText) {\n endsText = endsText.slice().reverse();\n }\n\n return {\n viewPieceList: viewPieceList,\n endsText: endsText\n };\n },\n\n /**\n * @private\n */\n _createItemSymbol: function (group, representValue, shapeParam) {\n group.add(createSymbol(this.getControllerVisual(representValue, 'symbol'), shapeParam[0], shapeParam[1], shapeParam[2], shapeParam[3], this.getControllerVisual(representValue, 'color')));\n },\n\n /**\n * @private\n */\n _onItemClick: function (piece) {\n var visualMapModel = this.visualMapModel;\n var option = visualMapModel.option;\n var selected = zrUtil.clone(option.selected);\n var newKey = visualMapModel.getSelectedMapKey(piece);\n\n if (option.selectedMode === 'single') {\n selected[newKey] = true;\n zrUtil.each(selected, function (o, key) {\n selected[key] = key === newKey;\n });\n } else {\n selected[newKey] = !selected[newKey];\n }\n\n this.api.dispatchAction({\n type: 'selectDataRange',\n from: this.uid,\n visualMapId: this.visualMapModel.id,\n selected: selected\n });\n }\n});\nvar _default = PiecewiseVisualMapView;\nmodule.exports = _default;","var echarts = require(\"../echarts\");\n\nrequire(\"./axisPointer\");\n\nrequire(\"./tooltip/TooltipModel\");\n\nrequire(\"./tooltip/TooltipView\");\n\n// FIXME Better way to pack data in graphic element\n\n/**\n * @action\n * @property {string} type\n * @property {number} seriesIndex\n * @property {number} dataIndex\n * @property {number} [x]\n * @property {number} [y]\n */\necharts.registerAction({\n type: 'showTip',\n event: 'showTip',\n update: 'tooltip:manuallyShowTip'\n}, // noop\nfunction () {});\necharts.registerAction({\n type: 'hideTip',\n event: 'hideTip',\n update: 'tooltip:manuallyHideTip'\n}, // noop\nfunction () {});","var echarts = require(\"../../echarts\");\n\nvar List = require(\"../../data/List\");\n\nvar _model = require(\"../../util/model\");\n\nvar defaultEmphasis = _model.defaultEmphasis;\n\nvar completeDimensions = require(\"../../data/helper/completeDimensions\");\n\nvar FunnelSeries = echarts.extendSeriesModel({\n type: 'series.funnel',\n init: function (option) {\n FunnelSeries.superApply(this, 'init', arguments); // Enable legend selection for each data item\n // Use a function instead of direct access because data reference may changed\n\n this.legendDataProvider = function () {\n return this.getRawData();\n }; // Extend labelLine emphasis\n\n\n this._defaultLabelLine(option);\n },\n getInitialData: function (option, ecModel) {\n var dimensions = completeDimensions(['value'], option.data);\n var list = new List(dimensions, this);\n list.initData(option.data);\n return list;\n },\n _defaultLabelLine: function (option) {\n // Extend labelLine emphasis\n defaultEmphasis(option.labelLine, ['show']);\n var labelLineNormalOpt = option.labelLine.normal;\n var labelLineEmphasisOpt = option.labelLine.emphasis; // Not show label line if `label.normal.show = false`\n\n labelLineNormalOpt.show = labelLineNormalOpt.show && option.label.normal.show;\n labelLineEmphasisOpt.show = labelLineEmphasisOpt.show && option.label.emphasis.show;\n },\n // Overwrite\n getDataParams: function (dataIndex) {\n var data = this.getData();\n var params = FunnelSeries.superCall(this, 'getDataParams', dataIndex);\n var sum = data.getSum('value'); // Percent is 0 if sum is 0\n\n params.percent = !sum ? 0 : +(data.get('value', dataIndex) / sum * 100).toFixed(2);\n params.$vars.push('percent');\n return params;\n },\n defaultOption: {\n zlevel: 0,\n // 一级层叠\n z: 2,\n // 二级层叠\n legendHoverLink: true,\n left: 80,\n top: 60,\n right: 80,\n bottom: 60,\n // width: {totalWidth} - left - right,\n // height: {totalHeight} - top - bottom,\n // 默认取数据最小最大值\n // min: 0,\n // max: 100,\n minSize: '0%',\n maxSize: '100%',\n sort: 'descending',\n // 'ascending', 'descending'\n gap: 0,\n funnelAlign: 'center',\n label: {\n normal: {\n show: true,\n position: 'outer' // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调\n\n },\n emphasis: {\n show: true\n }\n },\n labelLine: {\n normal: {\n show: true,\n length: 20,\n lineStyle: {\n // color: 各异,\n width: 1,\n type: 'solid'\n }\n },\n emphasis: {}\n },\n itemStyle: {\n normal: {\n // color: 各异,\n borderColor: '#fff',\n borderWidth: 1\n },\n emphasis: {// color: 各异,\n }\n }\n }\n});\nvar _default = FunnelSeries;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nfunction dataToCoordSize(dataSize, dataItem) {\n dataItem = dataItem || [0, 0];\n return zrUtil.map([0, 1], function (dimIdx) {\n var val = dataItem[dimIdx];\n var halfSize = dataSize[dimIdx] / 2;\n var p1 = [];\n var p2 = [];\n p1[dimIdx] = val - halfSize;\n p2[dimIdx] = val + halfSize;\n p1[1 - dimIdx] = p2[1 - dimIdx] = dataItem[1 - dimIdx];\n return Math.abs(this.dataToPoint(p1)[dimIdx] - this.dataToPoint(p2)[dimIdx]);\n }, this);\n}\n\nfunction _default(coordSys) {\n var rect = coordSys.getBoundingRect();\n return {\n coordSys: {\n type: 'geo',\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height\n },\n api: {\n coord: zrUtil.bind(coordSys.dataToPoint, coordSys),\n size: zrUtil.bind(dataToCoordSize, coordSys)\n }\n };\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nvar parseGeoJson = require(\"./parseGeoJson\");\n\nvar View = require(\"../View\");\n\nvar fixNanhai = require(\"./fix/nanhai\");\n\nvar fixTextCoord = require(\"./fix/textCoord\");\n\nvar fixGeoCoord = require(\"./fix/geoCoord\");\n\nvar fixDiaoyuIsland = require(\"./fix/diaoyuIsland\");\n\n// Geo fix functions\nvar geoFixFuncs = [fixNanhai, fixTextCoord, fixGeoCoord, fixDiaoyuIsland];\n/**\n * [Geo description]\n * @param {string} name Geo name\n * @param {string} map Map type\n * @param {Object} geoJson\n * @param {Object} [specialAreas]\n * Specify the positioned areas by left, top, width, height\n * @param {Object.} [nameMap]\n * Specify name alias\n */\n\nfunction Geo(name, map, geoJson, specialAreas, nameMap) {\n View.call(this, name);\n /**\n * Map type\n * @type {string}\n */\n\n this.map = map;\n this._nameCoordMap = zrUtil.createHashMap();\n this.loadGeoJson(geoJson, specialAreas, nameMap);\n}\n\nGeo.prototype = {\n constructor: Geo,\n type: 'geo',\n\n /**\n * @param {Array.}\n * @readOnly\n */\n dimensions: ['lng', 'lat'],\n\n /**\n * If contain given lng,lat coord\n * @param {Array.}\n * @readOnly\n */\n containCoord: function (coord) {\n var regions = this.regions;\n\n for (var i = 0; i < regions.length; i++) {\n if (regions[i].contain(coord)) {\n return true;\n }\n }\n\n return false;\n },\n\n /**\n * @param {Object} geoJson\n * @param {Object} [specialAreas]\n * Specify the positioned areas by left, top, width, height\n * @param {Object.} [nameMap]\n * Specify name alias\n */\n loadGeoJson: function (geoJson, specialAreas, nameMap) {\n // https://jsperf.com/try-catch-performance-overhead\n try {\n this.regions = geoJson ? parseGeoJson(geoJson) : [];\n } catch (e) {\n throw 'Invalid geoJson format\\n' + e.message;\n }\n\n specialAreas = specialAreas || {};\n nameMap = nameMap || {};\n var regions = this.regions;\n var regionsMap = zrUtil.createHashMap();\n\n for (var i = 0; i < regions.length; i++) {\n var regionName = regions[i].name; // Try use the alias in nameMap\n\n regionName = nameMap.hasOwnProperty(regionName) ? nameMap[regionName] : regionName;\n regions[i].name = regionName;\n regionsMap.set(regionName, regions[i]); // Add geoJson\n\n this.addGeoCoord(regionName, regions[i].center); // Some area like Alaska in USA map needs to be tansformed\n // to look better\n\n var specialArea = specialAreas[regionName];\n\n if (specialArea) {\n regions[i].transformTo(specialArea.left, specialArea.top, specialArea.width, specialArea.height);\n }\n }\n\n this._regionsMap = regionsMap;\n this._rect = null;\n zrUtil.each(geoFixFuncs, function (fixFunc) {\n fixFunc(this);\n }, this);\n },\n // Overwrite\n transformTo: function (x, y, width, height) {\n var rect = this.getBoundingRect();\n rect = rect.clone(); // Longitute is inverted\n\n rect.y = -rect.y - rect.height;\n var viewTransform = this._viewTransform;\n viewTransform.transform = rect.calculateTransform(new BoundingRect(x, y, width, height));\n viewTransform.decomposeTransform();\n var scale = viewTransform.scale;\n scale[1] = -scale[1];\n viewTransform.updateTransform();\n\n this._updateTransform();\n },\n\n /**\n * @param {string} name\n * @return {module:echarts/coord/geo/Region}\n */\n getRegion: function (name) {\n return this._regionsMap.get(name);\n },\n getRegionByCoord: function (coord) {\n var regions = this.regions;\n\n for (var i = 0; i < regions.length; i++) {\n if (regions[i].contain(coord)) {\n return regions[i];\n }\n }\n },\n\n /**\n * Add geoCoord for indexing by name\n * @param {string} name\n * @param {Array.} geoCoord\n */\n addGeoCoord: function (name, geoCoord) {\n this._nameCoordMap.set(name, geoCoord);\n },\n\n /**\n * Get geoCoord by name\n * @param {string} name\n * @return {Array.}\n */\n getGeoCoord: function (name) {\n return this._nameCoordMap.get(name);\n },\n // Overwrite\n getBoundingRect: function () {\n if (this._rect) {\n return this._rect;\n }\n\n var rect;\n var regions = this.regions;\n\n for (var i = 0; i < regions.length; i++) {\n var regionRect = regions[i].getBoundingRect();\n rect = rect || regionRect.clone();\n rect.union(regionRect);\n } // FIXME Always return new ?\n\n\n return this._rect = rect || new BoundingRect(0, 0, 0, 0);\n },\n\n /**\n * @param {string|Array.} data\n * @return {Array.}\n */\n dataToPoint: function (data) {\n if (typeof data === 'string') {\n // Map area name to geoCoord\n data = this.getGeoCoord(data);\n }\n\n if (data) {\n return View.prototype.dataToPoint.call(this, data);\n }\n },\n\n /**\n * @inheritDoc\n */\n convertToPixel: zrUtil.curry(doConvert, 'dataToPoint'),\n\n /**\n * @inheritDoc\n */\n convertFromPixel: zrUtil.curry(doConvert, 'pointToData')\n};\nzrUtil.mixin(Geo, View);\n\nfunction doConvert(methodName, ecModel, finder, value) {\n var geoModel = finder.geoModel;\n var seriesModel = finder.seriesModel;\n var coordSys = geoModel ? geoModel.coordinateSystem : seriesModel ? seriesModel.coordinateSystem // For map.\n || (seriesModel.getReferringComponents('geo')[0] || {}).coordinateSystem : null;\n return coordSys === this ? coordSys[methodName](value) : null;\n}\n\nvar _default = Geo;\nmodule.exports = _default;","var echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../util/graphic\");\n\nrequire(\"../coord/cartesian/Grid\");\n\nrequire(\"./axis\");\n\n// Grid view\necharts.extendComponentView({\n type: 'grid',\n render: function (gridModel, ecModel) {\n this.group.removeAll();\n\n if (gridModel.get('show')) {\n this.group.add(new graphic.Rect({\n shape: gridModel.coordinateSystem.getRect(),\n style: zrUtil.defaults({\n fill: gridModel.get('backgroundColor')\n }, gridModel.getItemStyle()),\n silent: true,\n z2: -1\n }));\n }\n }\n});\necharts.registerPreprocessor(function (option) {\n // Only create grid when need\n if (option.xAxis && option.yAxis && !option.grid) {\n option.grid = {};\n }\n});","/**\n * For geo and graph.\n *\n * @param {Object} controllerHost\n * @param {module:zrender/Element} controllerHost.target\n */\nfunction updateViewOnPan(controllerHost, dx, dy) {\n var target = controllerHost.target;\n var pos = target.position;\n pos[0] += dx;\n pos[1] += dy;\n target.dirty();\n}\n/**\n * For geo and graph.\n *\n * @param {Object} controllerHost\n * @param {module:zrender/Element} controllerHost.target\n * @param {number} controllerHost.zoom\n * @param {number} controllerHost.zoomLimit like: {min: 1, max: 2}\n */\n\n\nfunction updateViewOnZoom(controllerHost, zoomDelta, zoomX, zoomY) {\n var target = controllerHost.target;\n var zoomLimit = controllerHost.zoomLimit;\n var pos = target.position;\n var scale = target.scale;\n var newZoom = controllerHost.zoom = controllerHost.zoom || 1;\n newZoom *= zoomDelta;\n\n if (zoomLimit) {\n var zoomMin = zoomLimit.min || 0;\n var zoomMax = zoomLimit.max || Infinity;\n newZoom = Math.max(Math.min(zoomMax, newZoom), zoomMin);\n }\n\n var zoomScale = newZoom / controllerHost.zoom;\n controllerHost.zoom = newZoom; // Keep the mouse center when scaling\n\n pos[0] -= (zoomX - pos[0]) * (zoomScale - 1);\n pos[1] -= (zoomY - pos[1]) * (zoomScale - 1);\n scale[0] *= zoomScale;\n scale[1] *= zoomScale;\n target.dirty();\n}\n\nexports.updateViewOnPan = updateViewOnPan;\nexports.updateViewOnZoom = updateViewOnZoom;","// https://github.com/mziccard/node-timsort\nvar DEFAULT_MIN_MERGE = 32;\nvar DEFAULT_MIN_GALLOPING = 7;\nvar DEFAULT_TMP_STORAGE_LENGTH = 256;\n\nfunction minRunLength(n) {\n var r = 0;\n\n while (n >= DEFAULT_MIN_MERGE) {\n r |= n & 1;\n n >>= 1;\n }\n\n return n + r;\n}\n\nfunction makeAscendingRun(array, lo, hi, compare) {\n var runHi = lo + 1;\n\n if (runHi === hi) {\n return 1;\n }\n\n if (compare(array[runHi++], array[lo]) < 0) {\n while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) {\n runHi++;\n }\n\n reverseRun(array, lo, runHi);\n } else {\n while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) {\n runHi++;\n }\n }\n\n return runHi - lo;\n}\n\nfunction reverseRun(array, lo, hi) {\n hi--;\n\n while (lo < hi) {\n var t = array[lo];\n array[lo++] = array[hi];\n array[hi--] = t;\n }\n}\n\nfunction binaryInsertionSort(array, lo, hi, start, compare) {\n if (start === lo) {\n start++;\n }\n\n for (; start < hi; start++) {\n var pivot = array[start];\n var left = lo;\n var right = start;\n var mid;\n\n while (left < right) {\n mid = left + right >>> 1;\n\n if (compare(pivot, array[mid]) < 0) {\n right = mid;\n } else {\n left = mid + 1;\n }\n }\n\n var n = start - left;\n\n switch (n) {\n case 3:\n array[left + 3] = array[left + 2];\n\n case 2:\n array[left + 2] = array[left + 1];\n\n case 1:\n array[left + 1] = array[left];\n break;\n\n default:\n while (n > 0) {\n array[left + n] = array[left + n - 1];\n n--;\n }\n\n }\n\n array[left] = pivot;\n }\n}\n\nfunction gallopLeft(value, array, start, length, hint, compare) {\n var lastOffset = 0;\n var maxOffset = 0;\n var offset = 1;\n\n if (compare(value, array[start + hint]) > 0) {\n maxOffset = length - hint;\n\n while (offset < maxOffset && compare(value, array[start + hint + offset]) > 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n lastOffset += hint;\n offset += hint;\n } else {\n maxOffset = hint + 1;\n\n while (offset < maxOffset && compare(value, array[start + hint - offset]) <= 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n var tmp = lastOffset;\n lastOffset = hint - offset;\n offset = hint - tmp;\n }\n\n lastOffset++;\n\n while (lastOffset < offset) {\n var m = lastOffset + (offset - lastOffset >>> 1);\n\n if (compare(value, array[start + m]) > 0) {\n lastOffset = m + 1;\n } else {\n offset = m;\n }\n }\n\n return offset;\n}\n\nfunction gallopRight(value, array, start, length, hint, compare) {\n var lastOffset = 0;\n var maxOffset = 0;\n var offset = 1;\n\n if (compare(value, array[start + hint]) < 0) {\n maxOffset = hint + 1;\n\n while (offset < maxOffset && compare(value, array[start + hint - offset]) < 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n var tmp = lastOffset;\n lastOffset = hint - offset;\n offset = hint - tmp;\n } else {\n maxOffset = length - hint;\n\n while (offset < maxOffset && compare(value, array[start + hint + offset]) >= 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n lastOffset += hint;\n offset += hint;\n }\n\n lastOffset++;\n\n while (lastOffset < offset) {\n var m = lastOffset + (offset - lastOffset >>> 1);\n\n if (compare(value, array[start + m]) < 0) {\n offset = m;\n } else {\n lastOffset = m + 1;\n }\n }\n\n return offset;\n}\n\nfunction TimSort(array, compare) {\n var minGallop = DEFAULT_MIN_GALLOPING;\n var length = 0;\n var tmpStorageLength = DEFAULT_TMP_STORAGE_LENGTH;\n var stackLength = 0;\n var runStart;\n var runLength;\n var stackSize = 0;\n length = array.length;\n\n if (length < 2 * DEFAULT_TMP_STORAGE_LENGTH) {\n tmpStorageLength = length >>> 1;\n }\n\n var tmp = [];\n stackLength = length < 120 ? 5 : length < 1542 ? 10 : length < 119151 ? 19 : 40;\n runStart = [];\n runLength = [];\n\n function pushRun(_runStart, _runLength) {\n runStart[stackSize] = _runStart;\n runLength[stackSize] = _runLength;\n stackSize += 1;\n }\n\n function mergeRuns() {\n while (stackSize > 1) {\n var n = stackSize - 2;\n\n if (n >= 1 && runLength[n - 1] <= runLength[n] + runLength[n + 1] || n >= 2 && runLength[n - 2] <= runLength[n] + runLength[n - 1]) {\n if (runLength[n - 1] < runLength[n + 1]) {\n n--;\n }\n } else if (runLength[n] > runLength[n + 1]) {\n break;\n }\n\n mergeAt(n);\n }\n }\n\n function forceMergeRuns() {\n while (stackSize > 1) {\n var n = stackSize - 2;\n\n if (n > 0 && runLength[n - 1] < runLength[n + 1]) {\n n--;\n }\n\n mergeAt(n);\n }\n }\n\n function mergeAt(i) {\n var start1 = runStart[i];\n var length1 = runLength[i];\n var start2 = runStart[i + 1];\n var length2 = runLength[i + 1];\n runLength[i] = length1 + length2;\n\n if (i === stackSize - 3) {\n runStart[i + 1] = runStart[i + 2];\n runLength[i + 1] = runLength[i + 2];\n }\n\n stackSize--;\n var k = gallopRight(array[start2], array, start1, length1, 0, compare);\n start1 += k;\n length1 -= k;\n\n if (length1 === 0) {\n return;\n }\n\n length2 = gallopLeft(array[start1 + length1 - 1], array, start2, length2, length2 - 1, compare);\n\n if (length2 === 0) {\n return;\n }\n\n if (length1 <= length2) {\n mergeLow(start1, length1, start2, length2);\n } else {\n mergeHigh(start1, length1, start2, length2);\n }\n }\n\n function mergeLow(start1, length1, start2, length2) {\n var i = 0;\n\n for (i = 0; i < length1; i++) {\n tmp[i] = array[start1 + i];\n }\n\n var cursor1 = 0;\n var cursor2 = start2;\n var dest = start1;\n array[dest++] = array[cursor2++];\n\n if (--length2 === 0) {\n for (i = 0; i < length1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n\n return;\n }\n\n if (length1 === 1) {\n for (i = 0; i < length2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n\n array[dest + length2] = tmp[cursor1];\n return;\n }\n\n var _minGallop = minGallop;\n var count1, count2, exit;\n\n while (1) {\n count1 = 0;\n count2 = 0;\n exit = false;\n\n do {\n if (compare(array[cursor2], tmp[cursor1]) < 0) {\n array[dest++] = array[cursor2++];\n count2++;\n count1 = 0;\n\n if (--length2 === 0) {\n exit = true;\n break;\n }\n } else {\n array[dest++] = tmp[cursor1++];\n count1++;\n count2 = 0;\n\n if (--length1 === 1) {\n exit = true;\n break;\n }\n }\n } while ((count1 | count2) < _minGallop);\n\n if (exit) {\n break;\n }\n\n do {\n count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare);\n\n if (count1 !== 0) {\n for (i = 0; i < count1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n\n dest += count1;\n cursor1 += count1;\n length1 -= count1;\n\n if (length1 <= 1) {\n exit = true;\n break;\n }\n }\n\n array[dest++] = array[cursor2++];\n\n if (--length2 === 0) {\n exit = true;\n break;\n }\n\n count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare);\n\n if (count2 !== 0) {\n for (i = 0; i < count2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n\n dest += count2;\n cursor2 += count2;\n length2 -= count2;\n\n if (length2 === 0) {\n exit = true;\n break;\n }\n }\n\n array[dest++] = tmp[cursor1++];\n\n if (--length1 === 1) {\n exit = true;\n break;\n }\n\n _minGallop--;\n } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n\n if (exit) {\n break;\n }\n\n if (_minGallop < 0) {\n _minGallop = 0;\n }\n\n _minGallop += 2;\n }\n\n minGallop = _minGallop;\n minGallop < 1 && (minGallop = 1);\n\n if (length1 === 1) {\n for (i = 0; i < length2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n\n array[dest + length2] = tmp[cursor1];\n } else if (length1 === 0) {\n throw new Error(); // throw new Error('mergeLow preconditions were not respected');\n } else {\n for (i = 0; i < length1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n }\n }\n\n function mergeHigh(start1, length1, start2, length2) {\n var i = 0;\n\n for (i = 0; i < length2; i++) {\n tmp[i] = array[start2 + i];\n }\n\n var cursor1 = start1 + length1 - 1;\n var cursor2 = length2 - 1;\n var dest = start2 + length2 - 1;\n var customCursor = 0;\n var customDest = 0;\n array[dest--] = array[cursor1--];\n\n if (--length1 === 0) {\n customCursor = dest - (length2 - 1);\n\n for (i = 0; i < length2; i++) {\n array[customCursor + i] = tmp[i];\n }\n\n return;\n }\n\n if (length2 === 1) {\n dest -= length1;\n cursor1 -= length1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n\n for (i = length1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n\n array[dest] = tmp[cursor2];\n return;\n }\n\n var _minGallop = minGallop;\n\n while (true) {\n var count1 = 0;\n var count2 = 0;\n var exit = false;\n\n do {\n if (compare(tmp[cursor2], array[cursor1]) < 0) {\n array[dest--] = array[cursor1--];\n count1++;\n count2 = 0;\n\n if (--length1 === 0) {\n exit = true;\n break;\n }\n } else {\n array[dest--] = tmp[cursor2--];\n count2++;\n count1 = 0;\n\n if (--length2 === 1) {\n exit = true;\n break;\n }\n }\n } while ((count1 | count2) < _minGallop);\n\n if (exit) {\n break;\n }\n\n do {\n count1 = length1 - gallopRight(tmp[cursor2], array, start1, length1, length1 - 1, compare);\n\n if (count1 !== 0) {\n dest -= count1;\n cursor1 -= count1;\n length1 -= count1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n\n for (i = count1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n\n if (length1 === 0) {\n exit = true;\n break;\n }\n }\n\n array[dest--] = tmp[cursor2--];\n\n if (--length2 === 1) {\n exit = true;\n break;\n }\n\n count2 = length2 - gallopLeft(array[cursor1], tmp, 0, length2, length2 - 1, compare);\n\n if (count2 !== 0) {\n dest -= count2;\n cursor2 -= count2;\n length2 -= count2;\n customDest = dest + 1;\n customCursor = cursor2 + 1;\n\n for (i = 0; i < count2; i++) {\n array[customDest + i] = tmp[customCursor + i];\n }\n\n if (length2 <= 1) {\n exit = true;\n break;\n }\n }\n\n array[dest--] = array[cursor1--];\n\n if (--length1 === 0) {\n exit = true;\n break;\n }\n\n _minGallop--;\n } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n\n if (exit) {\n break;\n }\n\n if (_minGallop < 0) {\n _minGallop = 0;\n }\n\n _minGallop += 2;\n }\n\n minGallop = _minGallop;\n\n if (minGallop < 1) {\n minGallop = 1;\n }\n\n if (length2 === 1) {\n dest -= length1;\n cursor1 -= length1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n\n for (i = length1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n\n array[dest] = tmp[cursor2];\n } else if (length2 === 0) {\n throw new Error(); // throw new Error('mergeHigh preconditions were not respected');\n } else {\n customCursor = dest - (length2 - 1);\n\n for (i = 0; i < length2; i++) {\n array[customCursor + i] = tmp[i];\n }\n }\n }\n\n this.mergeRuns = mergeRuns;\n this.forceMergeRuns = forceMergeRuns;\n this.pushRun = pushRun;\n}\n\nfunction sort(array, compare, lo, hi) {\n if (!lo) {\n lo = 0;\n }\n\n if (!hi) {\n hi = array.length;\n }\n\n var remaining = hi - lo;\n\n if (remaining < 2) {\n return;\n }\n\n var runLength = 0;\n\n if (remaining < DEFAULT_MIN_MERGE) {\n runLength = makeAscendingRun(array, lo, hi, compare);\n binaryInsertionSort(array, lo, hi, lo + runLength, compare);\n return;\n }\n\n var ts = new TimSort(array, compare);\n var minRun = minRunLength(remaining);\n\n do {\n runLength = makeAscendingRun(array, lo, hi, compare);\n\n if (runLength < minRun) {\n var force = remaining;\n\n if (force > minRun) {\n force = minRun;\n }\n\n binaryInsertionSort(array, lo, lo + force, lo + runLength, compare);\n runLength = force;\n }\n\n ts.pushRun(lo, runLength);\n ts.mergeRuns();\n remaining -= runLength;\n lo += runLength;\n } while (remaining !== 0);\n\n ts.forceMergeRuns();\n}\n\nmodule.exports = sort;","var windingLine = require(\"./windingLine\");\n\nvar EPSILON = 1e-8;\n\nfunction isAroundEqual(a, b) {\n return Math.abs(a - b) < EPSILON;\n}\n\nfunction contain(points, x, y) {\n var w = 0;\n var p = points[0];\n\n if (!p) {\n return false;\n }\n\n for (var i = 1; i < points.length; i++) {\n var p2 = points[i];\n w += windingLine(p[0], p[1], p2[0], p2[1], x, y);\n p = p2;\n } // Close polygon\n\n\n var p0 = points[0];\n\n if (!isAroundEqual(p[0], p0[0]) || !isAroundEqual(p[1], p0[1])) {\n w += windingLine(p[0], p[1], p0[0], p0[1], x, y);\n }\n\n return w !== 0;\n}\n\nexports.contain = contain;","var Clip = require(\"./Clip\");\n\nvar color = require(\"../tool/color\");\n\nvar _util = require(\"../core/util\");\n\nvar isArrayLike = _util.isArrayLike;\n\n/**\n * @module echarts/animation/Animator\n */\nvar arraySlice = Array.prototype.slice;\n\nfunction defaultGetter(target, key) {\n return target[key];\n}\n\nfunction defaultSetter(target, key, value) {\n target[key] = value;\n}\n/**\n * @param {number} p0\n * @param {number} p1\n * @param {number} percent\n * @return {number}\n */\n\n\nfunction interpolateNumber(p0, p1, percent) {\n return (p1 - p0) * percent + p0;\n}\n/**\n * @param {string} p0\n * @param {string} p1\n * @param {number} percent\n * @return {string}\n */\n\n\nfunction interpolateString(p0, p1, percent) {\n return percent > 0.5 ? p1 : p0;\n}\n/**\n * @param {Array} p0\n * @param {Array} p1\n * @param {number} percent\n * @param {Array} out\n * @param {number} arrDim\n */\n\n\nfunction interpolateArray(p0, p1, percent, out, arrDim) {\n var len = p0.length;\n\n if (arrDim == 1) {\n for (var i = 0; i < len; i++) {\n out[i] = interpolateNumber(p0[i], p1[i], percent);\n }\n } else {\n var len2 = len && p0[0].length;\n\n for (var i = 0; i < len; i++) {\n for (var j = 0; j < len2; j++) {\n out[i][j] = interpolateNumber(p0[i][j], p1[i][j], percent);\n }\n }\n }\n} // arr0 is source array, arr1 is target array.\n// Do some preprocess to avoid error happened when interpolating from arr0 to arr1\n\n\nfunction fillArr(arr0, arr1, arrDim) {\n var arr0Len = arr0.length;\n var arr1Len = arr1.length;\n\n if (arr0Len !== arr1Len) {\n // FIXME Not work for TypedArray\n var isPreviousLarger = arr0Len > arr1Len;\n\n if (isPreviousLarger) {\n // Cut the previous\n arr0.length = arr1Len;\n } else {\n // Fill the previous\n for (var i = arr0Len; i < arr1Len; i++) {\n arr0.push(arrDim === 1 ? arr1[i] : arraySlice.call(arr1[i]));\n }\n }\n } // Handling NaN value\n\n\n var len2 = arr0[0] && arr0[0].length;\n\n for (var i = 0; i < arr0.length; i++) {\n if (arrDim === 1) {\n if (isNaN(arr0[i])) {\n arr0[i] = arr1[i];\n }\n } else {\n for (var j = 0; j < len2; j++) {\n if (isNaN(arr0[i][j])) {\n arr0[i][j] = arr1[i][j];\n }\n }\n }\n }\n}\n/**\n * @param {Array} arr0\n * @param {Array} arr1\n * @param {number} arrDim\n * @return {boolean}\n */\n\n\nfunction isArraySame(arr0, arr1, arrDim) {\n if (arr0 === arr1) {\n return true;\n }\n\n var len = arr0.length;\n\n if (len !== arr1.length) {\n return false;\n }\n\n if (arrDim === 1) {\n for (var i = 0; i < len; i++) {\n if (arr0[i] !== arr1[i]) {\n return false;\n }\n }\n } else {\n var len2 = arr0[0].length;\n\n for (var i = 0; i < len; i++) {\n for (var j = 0; j < len2; j++) {\n if (arr0[i][j] !== arr1[i][j]) {\n return false;\n }\n }\n }\n }\n\n return true;\n}\n/**\n * Catmull Rom interpolate array\n * @param {Array} p0\n * @param {Array} p1\n * @param {Array} p2\n * @param {Array} p3\n * @param {number} t\n * @param {number} t2\n * @param {number} t3\n * @param {Array} out\n * @param {number} arrDim\n */\n\n\nfunction catmullRomInterpolateArray(p0, p1, p2, p3, t, t2, t3, out, arrDim) {\n var len = p0.length;\n\n if (arrDim == 1) {\n for (var i = 0; i < len; i++) {\n out[i] = catmullRomInterpolate(p0[i], p1[i], p2[i], p3[i], t, t2, t3);\n }\n } else {\n var len2 = p0[0].length;\n\n for (var i = 0; i < len; i++) {\n for (var j = 0; j < len2; j++) {\n out[i][j] = catmullRomInterpolate(p0[i][j], p1[i][j], p2[i][j], p3[i][j], t, t2, t3);\n }\n }\n }\n}\n/**\n * Catmull Rom interpolate number\n * @param {number} p0\n * @param {number} p1\n * @param {number} p2\n * @param {number} p3\n * @param {number} t\n * @param {number} t2\n * @param {number} t3\n * @return {number}\n */\n\n\nfunction catmullRomInterpolate(p0, p1, p2, p3, t, t2, t3) {\n var v0 = (p2 - p0) * 0.5;\n var v1 = (p3 - p1) * 0.5;\n return (2 * (p1 - p2) + v0 + v1) * t3 + (-3 * (p1 - p2) - 2 * v0 - v1) * t2 + v0 * t + p1;\n}\n\nfunction cloneValue(value) {\n if (isArrayLike(value)) {\n var len = value.length;\n\n if (isArrayLike(value[0])) {\n var ret = [];\n\n for (var i = 0; i < len; i++) {\n ret.push(arraySlice.call(value[i]));\n }\n\n return ret;\n }\n\n return arraySlice.call(value);\n }\n\n return value;\n}\n\nfunction rgba2String(rgba) {\n rgba[0] = Math.floor(rgba[0]);\n rgba[1] = Math.floor(rgba[1]);\n rgba[2] = Math.floor(rgba[2]);\n return 'rgba(' + rgba.join(',') + ')';\n}\n\nfunction getArrayDim(keyframes) {\n var lastValue = keyframes[keyframes.length - 1].value;\n return isArrayLike(lastValue && lastValue[0]) ? 2 : 1;\n}\n\nfunction createTrackClip(animator, easing, oneTrackDone, keyframes, propName, forceAnimate) {\n var getter = animator._getter;\n var setter = animator._setter;\n var useSpline = easing === 'spline';\n var trackLen = keyframes.length;\n\n if (!trackLen) {\n return;\n } // Guess data type\n\n\n var firstVal = keyframes[0].value;\n var isValueArray = isArrayLike(firstVal);\n var isValueColor = false;\n var isValueString = false; // For vertices morphing\n\n var arrDim = isValueArray ? getArrayDim(keyframes) : 0;\n var trackMaxTime; // Sort keyframe as ascending\n\n keyframes.sort(function (a, b) {\n return a.time - b.time;\n });\n trackMaxTime = keyframes[trackLen - 1].time; // Percents of each keyframe\n\n var kfPercents = []; // Value of each keyframe\n\n var kfValues = [];\n var prevValue = keyframes[0].value;\n var isAllValueEqual = true;\n\n for (var i = 0; i < trackLen; i++) {\n kfPercents.push(keyframes[i].time / trackMaxTime); // Assume value is a color when it is a string\n\n var value = keyframes[i].value; // Check if value is equal, deep check if value is array\n\n if (!(isValueArray && isArraySame(value, prevValue, arrDim) || !isValueArray && value === prevValue)) {\n isAllValueEqual = false;\n }\n\n prevValue = value; // Try converting a string to a color array\n\n if (typeof value == 'string') {\n var colorArray = color.parse(value);\n\n if (colorArray) {\n value = colorArray;\n isValueColor = true;\n } else {\n isValueString = true;\n }\n }\n\n kfValues.push(value);\n }\n\n if (!forceAnimate && isAllValueEqual) {\n return;\n }\n\n var lastValue = kfValues[trackLen - 1]; // Polyfill array and NaN value\n\n for (var i = 0; i < trackLen - 1; i++) {\n if (isValueArray) {\n fillArr(kfValues[i], lastValue, arrDim);\n } else {\n if (isNaN(kfValues[i]) && !isNaN(lastValue) && !isValueString && !isValueColor) {\n kfValues[i] = lastValue;\n }\n }\n }\n\n isValueArray && fillArr(getter(animator._target, propName), lastValue, arrDim); // Cache the key of last frame to speed up when\n // animation playback is sequency\n\n var lastFrame = 0;\n var lastFramePercent = 0;\n var start;\n var w;\n var p0;\n var p1;\n var p2;\n var p3;\n\n if (isValueColor) {\n var rgba = [0, 0, 0, 0];\n }\n\n var onframe = function (target, percent) {\n // Find the range keyframes\n // kf1-----kf2---------current--------kf3\n // find kf2 and kf3 and do interpolation\n var frame; // In the easing function like elasticOut, percent may less than 0\n\n if (percent < 0) {\n frame = 0;\n } else if (percent < lastFramePercent) {\n // Start from next key\n // PENDING start from lastFrame ?\n start = Math.min(lastFrame + 1, trackLen - 1);\n\n for (frame = start; frame >= 0; frame--) {\n if (kfPercents[frame] <= percent) {\n break;\n }\n } // PENDING really need to do this ?\n\n\n frame = Math.min(frame, trackLen - 2);\n } else {\n for (frame = lastFrame; frame < trackLen; frame++) {\n if (kfPercents[frame] > percent) {\n break;\n }\n }\n\n frame = Math.min(frame - 1, trackLen - 2);\n }\n\n lastFrame = frame;\n lastFramePercent = percent;\n var range = kfPercents[frame + 1] - kfPercents[frame];\n\n if (range === 0) {\n return;\n } else {\n w = (percent - kfPercents[frame]) / range;\n }\n\n if (useSpline) {\n p1 = kfValues[frame];\n p0 = kfValues[frame === 0 ? frame : frame - 1];\n p2 = kfValues[frame > trackLen - 2 ? trackLen - 1 : frame + 1];\n p3 = kfValues[frame > trackLen - 3 ? trackLen - 1 : frame + 2];\n\n if (isValueArray) {\n catmullRomInterpolateArray(p0, p1, p2, p3, w, w * w, w * w * w, getter(target, propName), arrDim);\n } else {\n var value;\n\n if (isValueColor) {\n value = catmullRomInterpolateArray(p0, p1, p2, p3, w, w * w, w * w * w, rgba, 1);\n value = rgba2String(rgba);\n } else if (isValueString) {\n // String is step(0.5)\n return interpolateString(p1, p2, w);\n } else {\n value = catmullRomInterpolate(p0, p1, p2, p3, w, w * w, w * w * w);\n }\n\n setter(target, propName, value);\n }\n } else {\n if (isValueArray) {\n interpolateArray(kfValues[frame], kfValues[frame + 1], w, getter(target, propName), arrDim);\n } else {\n var value;\n\n if (isValueColor) {\n interpolateArray(kfValues[frame], kfValues[frame + 1], w, rgba, 1);\n value = rgba2String(rgba);\n } else if (isValueString) {\n // String is step(0.5)\n return interpolateString(kfValues[frame], kfValues[frame + 1], w);\n } else {\n value = interpolateNumber(kfValues[frame], kfValues[frame + 1], w);\n }\n\n setter(target, propName, value);\n }\n }\n };\n\n var clip = new Clip({\n target: animator._target,\n life: trackMaxTime,\n loop: animator._loop,\n delay: animator._delay,\n onframe: onframe,\n ondestroy: oneTrackDone\n });\n\n if (easing && easing !== 'spline') {\n clip.easing = easing;\n }\n\n return clip;\n}\n/**\n * @alias module:zrender/animation/Animator\n * @constructor\n * @param {Object} target\n * @param {boolean} loop\n * @param {Function} getter\n * @param {Function} setter\n */\n\n\nvar Animator = function (target, loop, getter, setter) {\n this._tracks = {};\n this._target = target;\n this._loop = loop || false;\n this._getter = getter || defaultGetter;\n this._setter = setter || defaultSetter;\n this._clipCount = 0;\n this._delay = 0;\n this._doneList = [];\n this._onframeList = [];\n this._clipList = [];\n};\n\nAnimator.prototype = {\n /**\n * 设置动画关键帧\n * @param {number} time 关键帧时间,单位是ms\n * @param {Object} props 关键帧的属性值,key-value表示\n * @return {module:zrender/animation/Animator}\n */\n when: function (time\n /* ms */\n , props) {\n var tracks = this._tracks;\n\n for (var propName in props) {\n if (!props.hasOwnProperty(propName)) {\n continue;\n }\n\n if (!tracks[propName]) {\n tracks[propName] = []; // Invalid value\n\n var value = this._getter(this._target, propName);\n\n if (value == null) {\n // zrLog('Invalid property ' + propName);\n continue;\n } // If time is 0\n // Then props is given initialize value\n // Else\n // Initialize value from current prop value\n\n\n if (time !== 0) {\n tracks[propName].push({\n time: 0,\n value: cloneValue(value)\n });\n }\n }\n\n tracks[propName].push({\n time: time,\n value: props[propName]\n });\n }\n\n return this;\n },\n\n /**\n * 添加动画每一帧的回调函数\n * @param {Function} callback\n * @return {module:zrender/animation/Animator}\n */\n during: function (callback) {\n this._onframeList.push(callback);\n\n return this;\n },\n pause: function () {\n for (var i = 0; i < this._clipList.length; i++) {\n this._clipList[i].pause();\n }\n\n this._paused = true;\n },\n resume: function () {\n for (var i = 0; i < this._clipList.length; i++) {\n this._clipList[i].resume();\n }\n\n this._paused = false;\n },\n isPaused: function () {\n return !!this._paused;\n },\n _doneCallback: function () {\n // Clear all tracks\n this._tracks = {}; // Clear all clips\n\n this._clipList.length = 0;\n var doneList = this._doneList;\n var len = doneList.length;\n\n for (var i = 0; i < len; i++) {\n doneList[i].call(this);\n }\n },\n\n /**\n * 开始执行动画\n * @param {string|Function} [easing]\n * 动画缓动函数,详见{@link module:zrender/animation/easing}\n * @param {boolean} forceAnimate\n * @return {module:zrender/animation/Animator}\n */\n start: function (easing, forceAnimate) {\n var self = this;\n var clipCount = 0;\n\n var oneTrackDone = function () {\n clipCount--;\n\n if (!clipCount) {\n self._doneCallback();\n }\n };\n\n var lastClip;\n\n for (var propName in this._tracks) {\n if (!this._tracks.hasOwnProperty(propName)) {\n continue;\n }\n\n var clip = createTrackClip(this, easing, oneTrackDone, this._tracks[propName], propName, forceAnimate);\n\n if (clip) {\n this._clipList.push(clip);\n\n clipCount++; // If start after added to animation\n\n if (this.animation) {\n this.animation.addClip(clip);\n }\n\n lastClip = clip;\n }\n } // Add during callback on the last clip\n\n\n if (lastClip) {\n var oldOnFrame = lastClip.onframe;\n\n lastClip.onframe = function (target, percent) {\n oldOnFrame(target, percent);\n\n for (var i = 0; i < self._onframeList.length; i++) {\n self._onframeList[i](target, percent);\n }\n };\n } // This optimization will help the case that in the upper application\n // the view may be refreshed frequently, where animation will be\n // called repeatly but nothing changed.\n\n\n if (!clipCount) {\n this._doneCallback();\n }\n\n return this;\n },\n\n /**\n * 停止动画\n * @param {boolean} forwardToLast If move to last frame before stop\n */\n stop: function (forwardToLast) {\n var clipList = this._clipList;\n var animation = this.animation;\n\n for (var i = 0; i < clipList.length; i++) {\n var clip = clipList[i];\n\n if (forwardToLast) {\n // Move to last frame before stop\n clip.onframe(this._target, 1);\n }\n\n animation && animation.removeClip(clip);\n }\n\n clipList.length = 0;\n },\n\n /**\n * 设置动画延迟开始的时间\n * @param {number} time 单位ms\n * @return {module:zrender/animation/Animator}\n */\n delay: function (time) {\n this._delay = time;\n return this;\n },\n\n /**\n * 添加动画结束的回调\n * @param {Function} cb\n * @return {module:zrender/animation/Animator}\n */\n done: function (cb) {\n if (cb) {\n this._doneList.push(cb);\n }\n\n return this;\n },\n\n /**\n * @return {Array.}\n */\n getClips: function () {\n return this._clipList;\n }\n};\nvar _default = Animator;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar Model = require(\"../model/Model\");\n\nvar List = require(\"./List\");\n\nvar linkList = require(\"./helper/linkList\");\n\nvar completeDimensions = require(\"./helper/completeDimensions\");\n\n/**\n * Tree data structure\n *\n * @module echarts/data/Tree\n */\n\n/**\n * @constructor module:echarts/data/Tree~TreeNode\n * @param {string} name\n * @param {module:echarts/data/Tree} hostTree\n */\nvar TreeNode = function (name, hostTree) {\n /**\n * @type {string}\n */\n this.name = name || '';\n /**\n * Depth of node\n *\n * @type {number}\n * @readOnly\n */\n\n this.depth = 0;\n /**\n * Height of the subtree rooted at this node.\n * @type {number}\n * @readOnly\n */\n\n this.height = 0;\n /**\n * @type {module:echarts/data/Tree~TreeNode}\n * @readOnly\n */\n\n this.parentNode = null;\n /**\n * Reference to list item.\n * Do not persistent dataIndex outside,\n * besause it may be changed by list.\n * If dataIndex -1,\n * this node is logical deleted (filtered) in list.\n *\n * @type {Object}\n * @readOnly\n */\n\n this.dataIndex = -1;\n /**\n * @type {Array.}\n * @readOnly\n */\n\n this.children = [];\n /**\n * @type {Array.}\n * @pubilc\n */\n\n this.viewChildren = [];\n /**\n * @type {moduel:echarts/data/Tree}\n * @readOnly\n */\n\n this.hostTree = hostTree;\n};\n\nTreeNode.prototype = {\n constructor: TreeNode,\n\n /**\n * The node is removed.\n * @return {boolean} is removed.\n */\n isRemoved: function () {\n return this.dataIndex < 0;\n },\n\n /**\n * Travel this subtree (include this node).\n * Usage:\n * node.eachNode(function () { ... }); // preorder\n * node.eachNode('preorder', function () { ... }); // preorder\n * node.eachNode('postorder', function () { ... }); // postorder\n * node.eachNode(\n * {order: 'postorder', attr: 'viewChildren'},\n * function () { ... }\n * ); // postorder\n *\n * @param {(Object|string)} options If string, means order.\n * @param {string=} options.order 'preorder' or 'postorder'\n * @param {string=} options.attr 'children' or 'viewChildren'\n * @param {Function} cb If in preorder and return false,\n * its subtree will not be visited.\n * @param {Object} [context]\n */\n eachNode: function (options, cb, context) {\n if (typeof options === 'function') {\n context = cb;\n cb = options;\n options = null;\n }\n\n options = options || {};\n\n if (zrUtil.isString(options)) {\n options = {\n order: options\n };\n }\n\n var order = options.order || 'preorder';\n var children = this[options.attr || 'children'];\n var suppressVisitSub;\n order === 'preorder' && (suppressVisitSub = cb.call(context, this));\n\n for (var i = 0; !suppressVisitSub && i < children.length; i++) {\n children[i].eachNode(options, cb, context);\n }\n\n order === 'postorder' && cb.call(context, this);\n },\n\n /**\n * Update depth and height of this subtree.\n *\n * @param {number} depth\n */\n updateDepthAndHeight: function (depth) {\n var height = 0;\n this.depth = depth;\n\n for (var i = 0; i < this.children.length; i++) {\n var child = this.children[i];\n child.updateDepthAndHeight(depth + 1);\n\n if (child.height > height) {\n height = child.height;\n }\n }\n\n this.height = height + 1;\n },\n\n /**\n * @param {string} id\n * @return {module:echarts/data/Tree~TreeNode}\n */\n getNodeById: function (id) {\n if (this.getId() === id) {\n return this;\n }\n\n for (var i = 0, children = this.children, len = children.length; i < len; i++) {\n var res = children[i].getNodeById(id);\n\n if (res) {\n return res;\n }\n }\n },\n\n /**\n * @param {module:echarts/data/Tree~TreeNode} node\n * @return {boolean}\n */\n contains: function (node) {\n if (node === this) {\n return true;\n }\n\n for (var i = 0, children = this.children, len = children.length; i < len; i++) {\n var res = children[i].contains(node);\n\n if (res) {\n return res;\n }\n }\n },\n\n /**\n * @param {boolean} includeSelf Default false.\n * @return {Array.} order: [root, child, grandchild, ...]\n */\n getAncestors: function (includeSelf) {\n var ancestors = [];\n var node = includeSelf ? this : this.parentNode;\n\n while (node) {\n ancestors.push(node);\n node = node.parentNode;\n }\n\n ancestors.reverse();\n return ancestors;\n },\n\n /**\n * @param {string|Array=} [dimension='value'] Default 'value'. can be 0, 1, 2, 3\n * @return {number} Value.\n */\n getValue: function (dimension) {\n var data = this.hostTree.data;\n return data.get(data.getDimension(dimension || 'value'), this.dataIndex);\n },\n\n /**\n * @param {Object} layout\n * @param {boolean=} [merge=false]\n */\n setLayout: function (layout, merge) {\n this.dataIndex >= 0 && this.hostTree.data.setItemLayout(this.dataIndex, layout, merge);\n },\n\n /**\n * @return {Object} layout\n */\n getLayout: function () {\n return this.hostTree.data.getItemLayout(this.dataIndex);\n },\n\n /**\n * @param {string} [path]\n * @return {module:echarts/model/Model}\n */\n getModel: function (path) {\n if (this.dataIndex < 0) {\n return;\n }\n\n var hostTree = this.hostTree;\n var itemModel = hostTree.data.getItemModel(this.dataIndex);\n var levelModel = this.getLevelModel();\n var leavesModel;\n\n if (!levelModel && (this.children.length === 0 || this.children.length !== 0 && this.isExpand === false)) {\n leavesModel = this.getLeavesModel();\n }\n\n return itemModel.getModel(path, (levelModel || leavesModel || hostTree.hostModel).getModel(path));\n },\n\n /**\n * @return {module:echarts/model/Model}\n */\n getLevelModel: function () {\n return (this.hostTree.levelModels || [])[this.depth];\n },\n\n /**\n * @return {module:echarts/model/Model}\n */\n getLeavesModel: function () {\n return this.hostTree.leavesModel;\n },\n\n /**\n * @example\n * setItemVisual('color', color);\n * setItemVisual({\n * 'color': color\n * });\n */\n setVisual: function (key, value) {\n this.dataIndex >= 0 && this.hostTree.data.setItemVisual(this.dataIndex, key, value);\n },\n\n /**\n * Get item visual\n */\n getVisual: function (key, ignoreParent) {\n return this.hostTree.data.getItemVisual(this.dataIndex, key, ignoreParent);\n },\n\n /**\n * @public\n * @return {number}\n */\n getRawIndex: function () {\n return this.hostTree.data.getRawIndex(this.dataIndex);\n },\n\n /**\n * @public\n * @return {string}\n */\n getId: function () {\n return this.hostTree.data.getId(this.dataIndex);\n }\n};\n/**\n * @constructor\n * @alias module:echarts/data/Tree\n * @param {module:echarts/model/Model} hostModel\n * @param {Array.} levelOptions\n * @param {Object} leavesOption\n */\n\nfunction Tree(hostModel, levelOptions, leavesOption) {\n /**\n * @type {module:echarts/data/Tree~TreeNode}\n * @readOnly\n */\n this.root;\n /**\n * @type {module:echarts/data/List}\n * @readOnly\n */\n\n this.data;\n /**\n * Index of each item is the same as the raw index of coresponding list item.\n * @private\n * @type {Array.} treeOptions.levels\n * @param {Array.} treeOptions.leaves\n * @return module:echarts/data/Tree\n */\n\nTree.createTree = function (dataRoot, hostModel, treeOptions) {\n var tree = new Tree(hostModel, treeOptions.levels, treeOptions.leaves);\n var listData = [];\n var dimMax = 1;\n buildHierarchy(dataRoot);\n\n function buildHierarchy(dataNode, parentNode) {\n var value = dataNode.value;\n dimMax = Math.max(dimMax, zrUtil.isArray(value) ? value.length : 1);\n listData.push(dataNode);\n var node = new TreeNode(dataNode.name, tree);\n parentNode ? addChild(node, parentNode) : tree.root = node;\n\n tree._nodes.push(node);\n\n var children = dataNode.children;\n\n if (children) {\n for (var i = 0; i < children.length; i++) {\n buildHierarchy(children[i], node);\n }\n }\n }\n\n tree.root.updateDepthAndHeight(0);\n var dimensions = completeDimensions([{\n name: 'value'\n }], listData, {\n dimCount: dimMax\n });\n var list = new List(dimensions, hostModel);\n list.initData(listData);\n linkList({\n mainData: list,\n struct: tree,\n structAttr: 'tree'\n });\n tree.update();\n return tree;\n};\n/**\n * It is needed to consider the mess of 'list', 'hostModel' when creating a TreeNote,\n * so this function is not ready and not necessary to be public.\n *\n * @param {(module:echarts/data/Tree~TreeNode|Object)} child\n */\n\n\nfunction addChild(child, node) {\n var children = node.children;\n\n if (child.parentNode === node) {\n return;\n }\n\n children.push(child);\n child.parentNode = node;\n}\n\nvar _default = Tree;\nmodule.exports = _default;","var _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar VisualMapModel = require(\"./VisualMapModel\");\n\nvar VisualMapping = require(\"../../visual/VisualMapping\");\n\nvar visualDefault = require(\"../../visual/visualDefault\");\n\nvar _number = require(\"../../util/number\");\n\nvar reformIntervals = _number.reformIntervals;\nvar PiecewiseModel = VisualMapModel.extend({\n type: 'visualMap.piecewise',\n\n /**\n * Order Rule:\n *\n * option.categories / option.pieces / option.text / option.selected:\n * If !option.inverse,\n * Order when vertical: ['top', ..., 'bottom'].\n * Order when horizontal: ['left', ..., 'right'].\n * If option.inverse, the meaning of\n * the order should be reversed.\n *\n * this._pieceList:\n * The order is always [low, ..., high].\n *\n * Mapping from location to low-high:\n * If !option.inverse\n * When vertical, top is high.\n * When horizontal, right is high.\n * If option.inverse, reverse.\n */\n\n /**\n * @protected\n */\n defaultOption: {\n selected: null,\n // Object. If not specified, means selected.\n // When pieces and splitNumber: {'0': true, '5': true}\n // When categories: {'cate1': false, 'cate3': true}\n // When selected === false, means all unselected.\n minOpen: false,\n // Whether include values that smaller than `min`.\n maxOpen: false,\n // Whether include values that bigger than `max`.\n align: 'auto',\n // 'auto', 'left', 'right'\n itemWidth: 20,\n // When put the controller vertically, it is the length of\n // horizontal side of each item. Otherwise, vertical side.\n itemHeight: 14,\n // When put the controller vertically, it is the length of\n // vertical side of each item. Otherwise, horizontal side.\n itemSymbol: 'roundRect',\n pieceList: null,\n // Each item is Object, with some of those attrs:\n // {min, max, lt, gt, lte, gte, value,\n // color, colorSaturation, colorAlpha, opacity,\n // symbol, symbolSize}, which customize the range or visual\n // coding of the certain piece. Besides, see \"Order Rule\".\n categories: null,\n // category names, like: ['some1', 'some2', 'some3'].\n // Attr min/max are ignored when categories set. See \"Order Rule\"\n splitNumber: 5,\n // If set to 5, auto split five pieces equally.\n // If set to 0 and component type not set, component type will be\n // determined as \"continuous\". (It is less reasonable but for ec2\n // compatibility, see echarts/component/visualMap/typeDefaulter)\n selectedMode: 'multiple',\n // Can be 'multiple' or 'single'.\n itemGap: 10,\n // The gap between two items, in px.\n hoverLink: true,\n // Enable hover highlight.\n showLabel: null // By default, when text is used, label will hide (the logic\n // is remained for compatibility reason)\n\n },\n\n /**\n * @override\n */\n optionUpdated: function (newOption, isInit) {\n PiecewiseModel.superApply(this, 'optionUpdated', arguments);\n /**\n * The order is always [low, ..., high].\n * [{text: string, interval: Array.}, ...]\n * @private\n * @type {Array.}\n */\n\n this._pieceList = [];\n this.resetExtent();\n /**\n * 'pieces', 'categories', 'splitNumber'\n * @type {string}\n */\n\n var mode = this._mode = this._determineMode();\n\n resetMethods[this._mode].call(this);\n\n this._resetSelected(newOption, isInit);\n\n var categories = this.option.categories;\n this.resetVisual(function (mappingOption, state) {\n if (mode === 'categories') {\n mappingOption.mappingMethod = 'category';\n mappingOption.categories = zrUtil.clone(categories);\n } else {\n mappingOption.dataExtent = this.getExtent();\n mappingOption.mappingMethod = 'piecewise';\n mappingOption.pieceList = zrUtil.map(this._pieceList, function (piece) {\n var piece = zrUtil.clone(piece);\n\n if (state !== 'inRange') {\n // FIXME\n // outOfRange do not support special visual in pieces.\n piece.visual = null;\n }\n\n return piece;\n });\n }\n });\n },\n\n /**\n * @protected\n * @override\n */\n completeVisualOption: function () {\n // Consider this case:\n // visualMap: {\n // pieces: [{symbol: 'circle', lt: 0}, {symbol: 'rect', gte: 0}]\n // }\n // where no inRange/outOfRange set but only pieces. So we should make\n // default inRange/outOfRange for this case, otherwise visuals that only\n // appear in `pieces` will not be taken into account in visual encoding.\n var option = this.option;\n var visualTypesInPieces = {};\n var visualTypes = VisualMapping.listVisualTypes();\n var isCategory = this.isCategory();\n zrUtil.each(option.pieces, function (piece) {\n zrUtil.each(visualTypes, function (visualType) {\n if (piece.hasOwnProperty(visualType)) {\n visualTypesInPieces[visualType] = 1;\n }\n });\n });\n zrUtil.each(visualTypesInPieces, function (v, visualType) {\n var exists = 0;\n zrUtil.each(this.stateList, function (state) {\n exists |= has(option, state, visualType) || has(option.target, state, visualType);\n }, this);\n !exists && zrUtil.each(this.stateList, function (state) {\n (option[state] || (option[state] = {}))[visualType] = visualDefault.get(visualType, state === 'inRange' ? 'active' : 'inactive', isCategory);\n });\n }, this);\n\n function has(obj, state, visualType) {\n return obj && obj[state] && (zrUtil.isObject(obj[state]) ? obj[state].hasOwnProperty(visualType) : obj[state] === visualType // e.g., inRange: 'symbol'\n );\n }\n\n VisualMapModel.prototype.completeVisualOption.apply(this, arguments);\n },\n _resetSelected: function (newOption, isInit) {\n var thisOption = this.option;\n var pieceList = this._pieceList; // Selected do not merge but all override.\n\n var selected = (isInit ? thisOption : newOption).selected || {};\n thisOption.selected = selected; // Consider 'not specified' means true.\n\n zrUtil.each(pieceList, function (piece, index) {\n var key = this.getSelectedMapKey(piece);\n\n if (!selected.hasOwnProperty(key)) {\n selected[key] = true;\n }\n }, this);\n\n if (thisOption.selectedMode === 'single') {\n // Ensure there is only one selected.\n var hasSel = false;\n zrUtil.each(pieceList, function (piece, index) {\n var key = this.getSelectedMapKey(piece);\n\n if (selected[key]) {\n hasSel ? selected[key] = false : hasSel = true;\n }\n }, this);\n } // thisOption.selectedMode === 'multiple', default: all selected.\n\n },\n\n /**\n * @public\n */\n getSelectedMapKey: function (piece) {\n return this._mode === 'categories' ? piece.value + '' : piece.index + '';\n },\n\n /**\n * @public\n */\n getPieceList: function () {\n return this._pieceList;\n },\n\n /**\n * @private\n * @return {string}\n */\n _determineMode: function () {\n var option = this.option;\n return option.pieces && option.pieces.length > 0 ? 'pieces' : this.option.categories ? 'categories' : 'splitNumber';\n },\n\n /**\n * @public\n * @override\n */\n setSelected: function (selected) {\n this.option.selected = zrUtil.clone(selected);\n },\n\n /**\n * @public\n * @override\n */\n getValueState: function (value) {\n var index = VisualMapping.findPieceIndex(value, this._pieceList);\n return index != null ? this.option.selected[this.getSelectedMapKey(this._pieceList[index])] ? 'inRange' : 'outOfRange' : 'outOfRange';\n },\n\n /**\n * @public\n * @params {number} pieceIndex piece index in visualMapModel.getPieceList()\n * @return {Array.} [{seriesId, dataIndices: >}, ...]\n */\n findTargetDataIndices: function (pieceIndex) {\n var result = [];\n this.eachTargetSeries(function (seriesModel) {\n var dataIndices = [];\n var data = seriesModel.getData();\n data.each(this.getDataDimension(data), function (value, dataIndex) {\n // Should always base on model pieceList, because it is order sensitive.\n var pIdx = VisualMapping.findPieceIndex(value, this._pieceList);\n pIdx === pieceIndex && dataIndices.push(dataIndex);\n }, true, this);\n result.push({\n seriesId: seriesModel.id,\n dataIndex: dataIndices\n });\n }, this);\n return result;\n },\n\n /**\n * @private\n * @param {Object} piece piece.value or piece.interval is required.\n * @return {number} Can be Infinity or -Infinity\n */\n getRepresentValue: function (piece) {\n var representValue;\n\n if (this.isCategory()) {\n representValue = piece.value;\n } else {\n if (piece.value != null) {\n representValue = piece.value;\n } else {\n var pieceInterval = piece.interval || [];\n representValue = pieceInterval[0] === -Infinity && pieceInterval[1] === Infinity ? 0 : (pieceInterval[0] + pieceInterval[1]) / 2;\n }\n }\n\n return representValue;\n },\n getVisualMeta: function (getColorVisual) {\n // Do not support category. (category axis is ordinal, numerical)\n if (this.isCategory()) {\n return;\n }\n\n var stops = [];\n var outerColors = [];\n var visualMapModel = this;\n\n function setStop(interval, valueState) {\n var representValue = visualMapModel.getRepresentValue({\n interval: interval\n });\n\n if (!valueState) {\n valueState = visualMapModel.getValueState(representValue);\n }\n\n var color = getColorVisual(representValue, valueState);\n\n if (interval[0] === -Infinity) {\n outerColors[0] = color;\n } else if (interval[1] === Infinity) {\n outerColors[1] = color;\n } else {\n stops.push({\n value: interval[0],\n color: color\n }, {\n value: interval[1],\n color: color\n });\n }\n } // Suplement\n\n\n var pieceList = this._pieceList.slice();\n\n if (!pieceList.length) {\n pieceList.push({\n interval: [-Infinity, Infinity]\n });\n } else {\n var edge = pieceList[0].interval[0];\n edge !== -Infinity && pieceList.unshift({\n interval: [-Infinity, edge]\n });\n edge = pieceList[pieceList.length - 1].interval[1];\n edge !== Infinity && pieceList.push({\n interval: [edge, Infinity]\n });\n }\n\n var curr = -Infinity;\n zrUtil.each(pieceList, function (piece) {\n var interval = piece.interval;\n\n if (interval) {\n // Fulfill gap.\n interval[0] > curr && setStop([curr, interval[0]], 'outOfRange');\n setStop(interval.slice());\n curr = interval[1];\n }\n }, this);\n return {\n stops: stops,\n outerColors: outerColors\n };\n }\n});\n/**\n * Key is this._mode\n * @type {Object}\n * @this {module:echarts/component/viusalMap/PiecewiseMode}\n */\n\nvar resetMethods = {\n splitNumber: function () {\n var thisOption = this.option;\n var pieceList = this._pieceList;\n var precision = Math.min(thisOption.precision, 20);\n var dataExtent = this.getExtent();\n var splitNumber = thisOption.splitNumber;\n splitNumber = Math.max(parseInt(splitNumber, 10), 1);\n thisOption.splitNumber = splitNumber;\n var splitStep = (dataExtent[1] - dataExtent[0]) / splitNumber; // Precision auto-adaption\n\n while (+splitStep.toFixed(precision) !== splitStep && precision < 5) {\n precision++;\n }\n\n thisOption.precision = precision;\n splitStep = +splitStep.toFixed(precision);\n var index = 0;\n\n if (thisOption.minOpen) {\n pieceList.push({\n index: index++,\n interval: [-Infinity, dataExtent[0]],\n close: [0, 0]\n });\n }\n\n for (var curr = dataExtent[0], len = index + splitNumber; index < len; curr += splitStep) {\n var max = index === splitNumber - 1 ? dataExtent[1] : curr + splitStep;\n pieceList.push({\n index: index++,\n interval: [curr, max],\n close: [1, 1]\n });\n }\n\n if (thisOption.maxOpen) {\n pieceList.push({\n index: index++,\n interval: [dataExtent[1], Infinity],\n close: [0, 0]\n });\n }\n\n reformIntervals(pieceList);\n zrUtil.each(pieceList, function (piece) {\n piece.text = this.formatValueText(piece.interval);\n }, this);\n },\n categories: function () {\n var thisOption = this.option;\n zrUtil.each(thisOption.categories, function (cate) {\n // FIXME category模式也使用pieceList,但在visualMapping中不是使用pieceList。\n // 是否改一致。\n this._pieceList.push({\n text: this.formatValueText(cate, true),\n value: cate\n });\n }, this); // See \"Order Rule\".\n\n normalizeReverse(thisOption, this._pieceList);\n },\n pieces: function () {\n var thisOption = this.option;\n var pieceList = this._pieceList;\n zrUtil.each(thisOption.pieces, function (pieceListItem, index) {\n if (!zrUtil.isObject(pieceListItem)) {\n pieceListItem = {\n value: pieceListItem\n };\n }\n\n var item = {\n text: '',\n index: index\n };\n\n if (pieceListItem.label != null) {\n item.text = pieceListItem.label;\n }\n\n if (pieceListItem.hasOwnProperty('value')) {\n var value = item.value = pieceListItem.value;\n item.interval = [value, value];\n item.close = [1, 1];\n } else {\n // `min` `max` is legacy option.\n // `lt` `gt` `lte` `gte` is recommanded.\n var interval = item.interval = [];\n var close = item.close = [0, 0];\n var closeList = [1, 0, 1];\n var infinityList = [-Infinity, Infinity];\n var useMinMax = [];\n\n for (var lg = 0; lg < 2; lg++) {\n var names = [['gte', 'gt', 'min'], ['lte', 'lt', 'max']][lg];\n\n for (var i = 0; i < 3 && interval[lg] == null; i++) {\n interval[lg] = pieceListItem[names[i]];\n close[lg] = closeList[i];\n useMinMax[lg] = i === 2;\n }\n\n interval[lg] == null && (interval[lg] = infinityList[lg]);\n }\n\n useMinMax[0] && interval[1] === Infinity && (close[0] = 0);\n useMinMax[1] && interval[0] === -Infinity && (close[1] = 0);\n\n if (interval[0] === interval[1] && close[0] && close[1]) {\n // Consider: [{min: 5, max: 5, visual: {...}}, {min: 0, max: 5}],\n // we use value to lift the priority when min === max\n item.value = interval[0];\n }\n }\n\n item.visual = VisualMapping.retrieveVisuals(pieceListItem);\n pieceList.push(item);\n }, this); // See \"Order Rule\".\n\n normalizeReverse(thisOption, pieceList); // Only pieces\n\n reformIntervals(pieceList);\n zrUtil.each(pieceList, function (piece) {\n var close = piece.close;\n var edgeSymbols = [['<', '≤'][close[1]], ['>', '≥'][close[0]]];\n piece.text = piece.text || this.formatValueText(piece.value != null ? piece.value : piece.interval, false, edgeSymbols);\n }, this);\n }\n};\n\nfunction normalizeReverse(thisOption, pieceList) {\n var inverse = thisOption.inverse;\n\n if (thisOption.orient === 'vertical' ? !inverse : inverse) {\n pieceList.reverse();\n }\n}\n\nvar _default = PiecewiseModel;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar zrColor = require(\"zrender/lib/tool/color\");\n\nvar eventUtil = require(\"zrender/lib/core/event\");\n\nvar env = require(\"zrender/lib/core/env\");\n\nvar formatUtil = require(\"../../util/format\");\n\nvar each = zrUtil.each;\nvar toCamelCase = formatUtil.toCamelCase;\nvar vendors = ['', '-webkit-', '-moz-', '-o-'];\nvar gCssText = 'position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;';\n/**\n * @param {number} duration\n * @return {string}\n * @inner\n */\n\nfunction assembleTransition(duration) {\n var transitionCurve = 'cubic-bezier(0.23, 1, 0.32, 1)';\n var transitionText = 'left ' + duration + 's ' + transitionCurve + ',' + 'top ' + duration + 's ' + transitionCurve;\n return zrUtil.map(vendors, function (vendorPrefix) {\n return vendorPrefix + 'transition:' + transitionText;\n }).join(';');\n}\n/**\n * @param {Object} textStyle\n * @return {string}\n * @inner\n */\n\n\nfunction assembleFont(textStyleModel) {\n var cssText = [];\n var fontSize = textStyleModel.get('fontSize');\n var color = textStyleModel.getTextColor();\n color && cssText.push('color:' + color);\n cssText.push('font:' + textStyleModel.getFont());\n fontSize && cssText.push('line-height:' + Math.round(fontSize * 3 / 2) + 'px');\n each(['decoration', 'align'], function (name) {\n var val = textStyleModel.get(name);\n val && cssText.push('text-' + name + ':' + val);\n });\n return cssText.join(';');\n}\n/**\n * @param {Object} tooltipModel\n * @return {string}\n * @inner\n */\n\n\nfunction assembleCssText(tooltipModel) {\n var cssText = [];\n var transitionDuration = tooltipModel.get('transitionDuration');\n var backgroundColor = tooltipModel.get('backgroundColor');\n var textStyleModel = tooltipModel.getModel('textStyle');\n var padding = tooltipModel.get('padding'); // Animation transition. Do not animate when transitionDuration is 0.\n\n transitionDuration && cssText.push(assembleTransition(transitionDuration));\n\n if (backgroundColor) {\n if (env.canvasSupported) {\n cssText.push('background-Color:' + backgroundColor);\n } else {\n // for ie\n cssText.push('background-Color:#' + zrColor.toHex(backgroundColor));\n cssText.push('filter:alpha(opacity=70)');\n }\n } // Border style\n\n\n each(['width', 'color', 'radius'], function (name) {\n var borderName = 'border-' + name;\n var camelCase = toCamelCase(borderName);\n var val = tooltipModel.get(camelCase);\n val != null && cssText.push(borderName + ':' + val + (name === 'color' ? '' : 'px'));\n }); // Text style\n\n cssText.push(assembleFont(textStyleModel)); // Padding\n\n if (padding != null) {\n cssText.push('padding:' + formatUtil.normalizeCssArray(padding).join('px ') + 'px');\n }\n\n return cssText.join(';') + ';';\n}\n/**\n * @alias module:echarts/component/tooltip/TooltipContent\n * @constructor\n */\n\n\nfunction TooltipContent(container, api) {\n var el = document.createElement('div');\n var zr = this._zr = api.getZr();\n this.el = el;\n this._x = api.getWidth() / 2;\n this._y = api.getHeight() / 2;\n container.appendChild(el);\n this._container = container;\n this._show = false;\n /**\n * @private\n */\n\n this._hideTimeout;\n var self = this;\n\n el.onmouseenter = function () {\n // clear the timeout in hideLater and keep showing tooltip\n if (self._enterable) {\n clearTimeout(self._hideTimeout);\n self._show = true;\n }\n\n self._inContent = true;\n };\n\n el.onmousemove = function (e) {\n e = e || window.event;\n\n if (!self._enterable) {\n // Try trigger zrender event to avoid mouse\n // in and out shape too frequently\n var handler = zr.handler;\n eventUtil.normalizeEvent(container, e, true);\n handler.dispatch('mousemove', e);\n }\n };\n\n el.onmouseleave = function () {\n if (self._enterable) {\n if (self._show) {\n self.hideLater(self._hideDelay);\n }\n }\n\n self._inContent = false;\n };\n}\n\nTooltipContent.prototype = {\n constructor: TooltipContent,\n\n /**\n * @private\n * @type {boolean}\n */\n _enterable: true,\n\n /**\n * Update when tooltip is rendered\n */\n update: function () {\n // FIXME\n // Move this logic to ec main?\n var container = this._container;\n var stl = container.currentStyle || document.defaultView.getComputedStyle(container);\n var domStyle = container.style;\n\n if (domStyle.position !== 'absolute' && stl.position !== 'absolute') {\n domStyle.position = 'relative';\n } // Hide the tooltip\n // PENDING\n // this.hide();\n\n },\n show: function (tooltipModel) {\n clearTimeout(this._hideTimeout);\n var el = this.el;\n el.style.cssText = gCssText + assembleCssText(tooltipModel) // http://stackoverflow.com/questions/21125587/css3-transition-not-working-in-chrome-anymore\n + ';left:' + this._x + 'px;top:' + this._y + 'px;' + (tooltipModel.get('extraCssText') || '');\n el.style.display = el.innerHTML ? 'block' : 'none';\n this._show = true;\n },\n setContent: function (content) {\n this.el.innerHTML = content == null ? '' : content;\n },\n setEnterable: function (enterable) {\n this._enterable = enterable;\n },\n getSize: function () {\n var el = this.el;\n return [el.clientWidth, el.clientHeight];\n },\n moveTo: function (x, y) {\n // xy should be based on canvas root. But tooltipContent is\n // the sibling of canvas root. So padding of ec container\n // should be considered here.\n var zr = this._zr;\n var viewportRootOffset;\n\n if (zr && zr.painter && (viewportRootOffset = zr.painter.getViewportRootOffset())) {\n x += viewportRootOffset.offsetLeft;\n y += viewportRootOffset.offsetTop;\n }\n\n var style = this.el.style;\n style.left = x + 'px';\n style.top = y + 'px';\n this._x = x;\n this._y = y;\n },\n hide: function () {\n this.el.style.display = 'none';\n this._show = false;\n },\n hideLater: function (time) {\n if (this._show && !(this._inContent && this._enterable)) {\n if (time) {\n this._hideDelay = time; // Set show false to avoid invoke hideLater mutiple times\n\n this._show = false;\n this._hideTimeout = setTimeout(zrUtil.bind(this.hide, this), time);\n } else {\n this.hide();\n }\n }\n },\n isShow: function () {\n return this._show;\n }\n};\nvar _default = TooltipContent;\nmodule.exports = _default;","require(\"./gauge/GaugeSeries\");\n\nrequire(\"./gauge/GaugeView\");","var echarts = require(\"../echarts\");\n\nrequire(\"../component/parallel\");\n\nrequire(\"./parallel/ParallelSeries\");\n\nrequire(\"./parallel/ParallelView\");\n\nvar parallelVisual = require(\"./parallel/parallelVisual\");\n\necharts.registerVisual(parallelVisual);","var echarts = require(\"../echarts\");\n\nrequire(\"./candlestick/CandlestickSeries\");\n\nrequire(\"./candlestick/CandlestickView\");\n\nvar preprocessor = require(\"./candlestick/preprocessor\");\n\nvar candlestickVisual = require(\"./candlestick/candlestickVisual\");\n\nvar candlestickLayout = require(\"./candlestick/candlestickLayout\");\n\necharts.registerPreprocessor(preprocessor);\necharts.registerVisual(candlestickVisual);\necharts.registerLayout(candlestickLayout);","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar Axis = require(\"../../coord/Axis\");\n\nvar axisHelper = require(\"../../coord/axisHelper\");\n\n/**\n * Extend axis 2d\n * @constructor module:echarts/coord/cartesian/Axis2D\n * @extends {module:echarts/coord/cartesian/Axis}\n * @param {string} dim\n * @param {*} scale\n * @param {Array.} coordExtent\n * @param {string} axisType\n * @param {string} position\n */\nvar TimelineAxis = function (dim, scale, coordExtent, axisType) {\n Axis.call(this, dim, scale, coordExtent);\n /**\n * Axis type\n * - 'category'\n * - 'value'\n * - 'time'\n * - 'log'\n * @type {string}\n */\n\n this.type = axisType || 'value';\n /**\n * @private\n * @type {number}\n */\n\n this._autoLabelInterval;\n /**\n * Axis model\n * @param {module:echarts/component/TimelineModel}\n */\n\n this.model = null;\n};\n\nTimelineAxis.prototype = {\n constructor: TimelineAxis,\n\n /**\n * @public\n * @return {number}\n */\n getLabelInterval: function () {\n var timelineModel = this.model;\n var labelModel = timelineModel.getModel('label.normal');\n var labelInterval = labelModel.get('interval');\n\n if (labelInterval != null && labelInterval != 'auto') {\n return labelInterval;\n }\n\n var labelInterval = this._autoLabelInterval;\n\n if (!labelInterval) {\n labelInterval = this._autoLabelInterval = axisHelper.getAxisLabelInterval(zrUtil.map(this.scale.getTicks(), this.dataToCoord, this), axisHelper.getFormattedLabels(this, labelModel.get('formatter')), labelModel.getFont(), timelineModel.get('orient') === 'horizontal' ? 0 : 90, labelModel.get('rotate'));\n }\n\n return labelInterval;\n },\n\n /**\n * If label is ignored.\n * Automatically used when axis is category and label can not be all shown\n * @public\n * @param {number} idx\n * @return {boolean}\n */\n isLabelIgnored: function (idx) {\n if (this.type === 'category') {\n var labelInterval = this.getLabelInterval();\n return typeof labelInterval === 'function' && !labelInterval(idx, this.scale.getLabel(idx)) || idx % (labelInterval + 1);\n }\n }\n};\nzrUtil.inherits(TimelineAxis, Axis);\nvar _default = TimelineAxis;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar _number = require(\"../../util/number\");\n\nvar parsePercent = _number.parsePercent;\n\nvar _graphic = require(\"../../util/graphic\");\n\nvar subPixelOptimize = _graphic.subPixelOptimize;\nvar retrieve2 = zrUtil.retrieve2;\n\nfunction _default(ecModel) {\n ecModel.eachSeriesByType('candlestick', function (seriesModel) {\n var coordSys = seriesModel.coordinateSystem;\n var data = seriesModel.getData();\n var candleWidth = calculateCandleWidth(seriesModel, data);\n var chartLayout = seriesModel.get('layout');\n var variableDim = chartLayout === 'horizontal' ? 0 : 1;\n var constDim = 1 - variableDim;\n var coordDims = ['x', 'y'];\n var vDims = [];\n var cDim;\n zrUtil.each(data.dimensions, function (dimName) {\n var dimInfo = data.getDimensionInfo(dimName);\n var coordDim = dimInfo.coordDim;\n\n if (coordDim === coordDims[constDim]) {\n vDims.push(dimName);\n } else if (coordDim === coordDims[variableDim]) {\n cDim = dimName;\n }\n });\n\n if (cDim == null || vDims.length < 4) {\n return;\n }\n\n var dataIndex = 0;\n data.each([cDim].concat(vDims), function () {\n var args = arguments;\n var axisDimVal = args[0];\n var idx = args[vDims.length + 1];\n var openVal = args[1];\n var closeVal = args[2];\n var lowestVal = args[3];\n var highestVal = args[4];\n var ocLow = Math.min(openVal, closeVal);\n var ocHigh = Math.max(openVal, closeVal);\n var ocLowPoint = getPoint(ocLow);\n var ocHighPoint = getPoint(ocHigh);\n var lowestPoint = getPoint(lowestVal);\n var highestPoint = getPoint(highestVal);\n var whiskerEnds = [[subPixelOptimizePoint(highestPoint), subPixelOptimizePoint(ocHighPoint)], [subPixelOptimizePoint(lowestPoint), subPixelOptimizePoint(ocLowPoint)]];\n var bodyEnds = [];\n addBodyEnd(ocHighPoint, 0);\n addBodyEnd(ocLowPoint, 1);\n var sign;\n\n if (openVal > closeVal) {\n sign = -1;\n } else if (openVal < closeVal) {\n sign = 1;\n } else {\n // If close === open, compare with close of last record\n if (dataIndex > 0) {\n sign = data.getItemModel(dataIndex - 1).get()[2] <= closeVal ? 1 : -1;\n } else {\n // No record of previous, set to be positive\n sign = 1;\n }\n }\n\n data.setItemLayout(idx, {\n chartLayout: chartLayout,\n sign: sign,\n initBaseline: openVal > closeVal ? ocHighPoint[constDim] : ocLowPoint[constDim],\n // open point.\n bodyEnds: bodyEnds,\n whiskerEnds: whiskerEnds,\n brushRect: makeBrushRect()\n });\n ++dataIndex;\n\n function getPoint(val) {\n var p = [];\n p[variableDim] = axisDimVal;\n p[constDim] = val;\n return isNaN(axisDimVal) || isNaN(val) ? [NaN, NaN] : coordSys.dataToPoint(p);\n }\n\n function addBodyEnd(point, start) {\n var point1 = point.slice();\n var point2 = point.slice();\n point1[variableDim] = subPixelOptimize(point1[variableDim] + candleWidth / 2, 1, false);\n point2[variableDim] = subPixelOptimize(point2[variableDim] - candleWidth / 2, 1, true);\n start ? bodyEnds.push(point1, point2) : bodyEnds.push(point2, point1);\n }\n\n function makeBrushRect() {\n var pmin = getPoint(Math.min(openVal, closeVal, lowestVal, highestVal));\n var pmax = getPoint(Math.max(openVal, closeVal, lowestVal, highestVal));\n pmin[variableDim] -= candleWidth / 2;\n pmax[variableDim] -= candleWidth / 2;\n return {\n x: pmin[0],\n y: pmin[1],\n width: constDim ? candleWidth : pmax[0] - pmin[0],\n height: constDim ? pmax[1] - pmin[1] : candleWidth\n };\n }\n\n function subPixelOptimizePoint(point) {\n point[variableDim] = subPixelOptimize(point[variableDim], 1);\n return point;\n }\n }, true);\n });\n}\n\nfunction calculateCandleWidth(seriesModel, data) {\n var baseAxis = seriesModel.getBaseAxis();\n var extent;\n var bandWidth = baseAxis.type === 'category' ? baseAxis.getBandWidth() : (extent = baseAxis.getExtent(), Math.abs(extent[1] - extent[0]) / data.count());\n var barMaxWidth = parsePercent(retrieve2(seriesModel.get('barMaxWidth'), bandWidth), bandWidth);\n var barMinWidth = parsePercent(retrieve2(seriesModel.get('barMinWidth'), 1), bandWidth);\n var barWidth = seriesModel.get('barWidth');\n return barWidth != null ? parsePercent(barWidth, bandWidth) // Put max outer to ensure bar visible in spite of overlap.\n : Math.max(Math.min(bandWidth / 2, barMaxWidth), barMinWidth);\n}\n\nmodule.exports = _default;","require(\"./dataZoom/typeDefaulter\");\n\nrequire(\"./dataZoom/DataZoomModel\");\n\nrequire(\"./dataZoom/DataZoomView\");\n\nrequire(\"./dataZoom/SliderZoomModel\");\n\nrequire(\"./dataZoom/SliderZoomView\");\n\nrequire(\"./dataZoom/InsideZoomModel\");\n\nrequire(\"./dataZoom/InsideZoomView\");\n\nrequire(\"./dataZoom/dataZoomProcessor\");\n\nrequire(\"./dataZoom/dataZoomAction\");","var commonLayout = require(\"./commonLayout\");\n\nfunction _default(ecModel, api) {\n ecModel.eachSeriesByType('tree', function (seriesModel) {\n commonLayout(seriesModel, api);\n });\n}\n\nmodule.exports = _default;","var eventUtil = require(\"./event\");\n\n/**\n * Only implements needed gestures for mobile.\n */\nvar GestureMgr = function () {\n /**\n * @private\n * @type {Array.}\n */\n this._track = [];\n};\n\nGestureMgr.prototype = {\n constructor: GestureMgr,\n recognize: function (event, target, root) {\n this._doTrack(event, target, root);\n\n return this._recognize(event);\n },\n clear: function () {\n this._track.length = 0;\n return this;\n },\n _doTrack: function (event, target, root) {\n var touches = event.touches;\n\n if (!touches) {\n return;\n }\n\n var trackItem = {\n points: [],\n touches: [],\n target: target,\n event: event\n };\n\n for (var i = 0, len = touches.length; i < len; i++) {\n var touch = touches[i];\n var pos = eventUtil.clientToLocal(root, touch, {});\n trackItem.points.push([pos.zrX, pos.zrY]);\n trackItem.touches.push(touch);\n }\n\n this._track.push(trackItem);\n },\n _recognize: function (event) {\n for (var eventName in recognizers) {\n if (recognizers.hasOwnProperty(eventName)) {\n var gestureInfo = recognizers[eventName](this._track, event);\n\n if (gestureInfo) {\n return gestureInfo;\n }\n }\n }\n }\n};\n\nfunction dist(pointPair) {\n var dx = pointPair[1][0] - pointPair[0][0];\n var dy = pointPair[1][1] - pointPair[0][1];\n return Math.sqrt(dx * dx + dy * dy);\n}\n\nfunction center(pointPair) {\n return [(pointPair[0][0] + pointPair[1][0]) / 2, (pointPair[0][1] + pointPair[1][1]) / 2];\n}\n\nvar recognizers = {\n pinch: function (track, event) {\n var trackLen = track.length;\n\n if (!trackLen) {\n return;\n }\n\n var pinchEnd = (track[trackLen - 1] || {}).points;\n var pinchPre = (track[trackLen - 2] || {}).points || pinchEnd;\n\n if (pinchPre && pinchPre.length > 1 && pinchEnd && pinchEnd.length > 1) {\n var pinchScale = dist(pinchEnd) / dist(pinchPre);\n !isFinite(pinchScale) && (pinchScale = 1);\n event.pinchScale = pinchScale;\n var pinchCenter = center(pinchEnd);\n event.pinchX = pinchCenter[0];\n event.pinchY = pinchCenter[1];\n return {\n type: 'pinch',\n target: track[0].target,\n event: event\n };\n }\n } // Only pinch currently.\n\n};\nvar _default = GestureMgr;\nmodule.exports = _default;","require(\"./legend\");\n\nrequire(\"./legend/ScrollableLegendModel\");\n\nrequire(\"./legend/ScrollableLegendView\");\n\nrequire(\"./legend/scrollableLegendAction\");","// Myers' Diff Algorithm\n// Modified from https://github.com/kpdecker/jsdiff/blob/master/src/diff/base.js\nfunction Diff() {}\n\nDiff.prototype = {\n diff: function (oldArr, newArr, equals) {\n if (!equals) {\n equals = function (a, b) {\n return a === b;\n };\n }\n\n this.equals = equals;\n var self = this;\n oldArr = oldArr.slice();\n newArr = newArr.slice(); // Allow subclasses to massage the input prior to running\n\n var newLen = newArr.length;\n var oldLen = oldArr.length;\n var editLength = 1;\n var maxEditLength = newLen + oldLen;\n var bestPath = [{\n newPos: -1,\n components: []\n }]; // Seed editLength = 0, i.e. the content starts with the same values\n\n var oldPos = this.extractCommon(bestPath[0], newArr, oldArr, 0);\n\n if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n var indices = [];\n\n for (var i = 0; i < newArr.length; i++) {\n indices.push(i);\n } // Identity per the equality and tokenizer\n\n\n return [{\n indices: indices,\n count: newArr.length\n }];\n } // Main worker method. checks all permutations of a given edit length for acceptance.\n\n\n function execEditLength() {\n for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {\n var basePath;\n var addPath = bestPath[diagonalPath - 1];\n var removePath = bestPath[diagonalPath + 1];\n var oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;\n\n if (addPath) {\n // No one else is going to attempt to use this value, clear it\n bestPath[diagonalPath - 1] = undefined;\n }\n\n var canAdd = addPath && addPath.newPos + 1 < newLen;\n var canRemove = removePath && 0 <= oldPos && oldPos < oldLen;\n\n if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n bestPath[diagonalPath] = undefined;\n continue;\n } // Select the diagonal that we want to branch from. We select the prior\n // path whose position in the new string is the farthest from the origin\n // and does not pass the bounds of the diff graph\n\n\n if (!canAdd || canRemove && addPath.newPos < removePath.newPos) {\n basePath = clonePath(removePath);\n self.pushComponent(basePath.components, undefined, true);\n } else {\n basePath = addPath; // No need to clone, we've pulled it from the list\n\n basePath.newPos++;\n self.pushComponent(basePath.components, true, undefined);\n }\n\n oldPos = self.extractCommon(basePath, newArr, oldArr, diagonalPath); // If we have hit the end of both strings, then we are done\n\n if (basePath.newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n return buildValues(self, basePath.components, newArr, oldArr);\n } else {\n // Otherwise track this path as a potential candidate and continue.\n bestPath[diagonalPath] = basePath;\n }\n }\n\n editLength++;\n }\n\n while (editLength <= maxEditLength) {\n var ret = execEditLength();\n\n if (ret) {\n return ret;\n }\n }\n },\n pushComponent: function (components, added, removed) {\n var last = components[components.length - 1];\n\n if (last && last.added === added && last.removed === removed) {\n // We need to clone here as the component clone operation is just\n // as shallow array clone\n components[components.length - 1] = {\n count: last.count + 1,\n added: added,\n removed: removed\n };\n } else {\n components.push({\n count: 1,\n added: added,\n removed: removed\n });\n }\n },\n extractCommon: function (basePath, newArr, oldArr, diagonalPath) {\n var newLen = newArr.length;\n var oldLen = oldArr.length;\n var newPos = basePath.newPos;\n var oldPos = newPos - diagonalPath;\n var commonCount = 0;\n\n while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newArr[newPos + 1], oldArr[oldPos + 1])) {\n newPos++;\n oldPos++;\n commonCount++;\n }\n\n if (commonCount) {\n basePath.components.push({\n count: commonCount\n });\n }\n\n basePath.newPos = newPos;\n return oldPos;\n },\n tokenize: function (value) {\n return value.slice();\n },\n join: function (value) {\n return value.slice();\n }\n};\n\nfunction buildValues(diff, components, newArr, oldArr) {\n var componentPos = 0;\n var componentLen = components.length;\n var newPos = 0;\n var oldPos = 0;\n\n for (; componentPos < componentLen; componentPos++) {\n var component = components[componentPos];\n\n if (!component.removed) {\n var indices = [];\n\n for (var i = newPos; i < newPos + component.count; i++) {\n indices.push(i);\n }\n\n component.indices = indices;\n newPos += component.count; // Common case\n\n if (!component.added) {\n oldPos += component.count;\n }\n } else {\n var indices = [];\n\n for (var i = oldPos; i < oldPos + component.count; i++) {\n indices.push(i);\n }\n\n component.indices = indices;\n oldPos += component.count;\n }\n }\n\n return components;\n}\n\nfunction clonePath(path) {\n return {\n newPos: path.newPos,\n components: path.components.slice(0)\n };\n}\n\nvar arrayDiff = new Diff();\n\nfunction _default(oldArr, newArr, callback) {\n return arrayDiff.diff(oldArr, newArr, callback);\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar RoamController = require(\"./RoamController\");\n\nvar roamHelper = require(\"../../component/helper/roamHelper\");\n\nvar _cursorHelper = require(\"../../component/helper/cursorHelper\");\n\nvar onIrrelevantElement = _cursorHelper.onIrrelevantElement;\n\nvar graphic = require(\"../../util/graphic\");\n\nfunction getFixedItemStyle(model, scale) {\n var itemStyle = model.getItemStyle();\n var areaColor = model.get('areaColor'); // If user want the color not to be changed when hover,\n // they should both set areaColor and color to be null.\n\n if (areaColor != null) {\n itemStyle.fill = areaColor;\n }\n\n return itemStyle;\n}\n\nfunction updateMapSelectHandler(mapDraw, mapOrGeoModel, group, api, fromView) {\n group.off('click');\n group.off('mousedown');\n\n if (mapOrGeoModel.get('selectedMode')) {\n group.on('mousedown', function () {\n mapDraw._mouseDownFlag = true;\n });\n group.on('click', function (e) {\n if (!mapDraw._mouseDownFlag) {\n return;\n }\n\n mapDraw._mouseDownFlag = false;\n var el = e.target;\n\n while (!el.__regions) {\n el = el.parent;\n }\n\n if (!el) {\n return;\n }\n\n var action = {\n type: (mapOrGeoModel.mainType === 'geo' ? 'geo' : 'map') + 'ToggleSelect',\n batch: zrUtil.map(el.__regions, function (region) {\n return {\n name: region.name,\n from: fromView.uid\n };\n })\n };\n action[mapOrGeoModel.mainType + 'Id'] = mapOrGeoModel.id;\n api.dispatchAction(action);\n updateMapSelected(mapOrGeoModel, group);\n });\n }\n}\n\nfunction updateMapSelected(mapOrGeoModel, group) {\n // FIXME\n group.eachChild(function (otherRegionEl) {\n zrUtil.each(otherRegionEl.__regions, function (region) {\n otherRegionEl.trigger(mapOrGeoModel.isSelected(region.name) ? 'emphasis' : 'normal');\n });\n });\n}\n/**\n * @alias module:echarts/component/helper/MapDraw\n * @param {module:echarts/ExtensionAPI} api\n * @param {boolean} updateGroup\n */\n\n\nfunction MapDraw(api, updateGroup) {\n var group = new graphic.Group();\n /**\n * @type {module:echarts/component/helper/RoamController}\n * @private\n */\n\n this._controller = new RoamController(api.getZr());\n /**\n * @type {Object} {target, zoom, zoomLimit}\n * @private\n */\n\n this._controllerHost = {\n target: updateGroup ? group : null\n };\n /**\n * @type {module:zrender/container/Group}\n * @readOnly\n */\n\n this.group = group;\n /**\n * @type {boolean}\n * @private\n */\n\n this._updateGroup = updateGroup;\n /**\n * This flag is used to make sure that only one among\n * `pan`, `zoom`, `click` can occurs, otherwise 'selected'\n * action may be triggered when `pan`, which is unexpected.\n * @type {booelan}\n */\n\n this._mouseDownFlag;\n}\n\nMapDraw.prototype = {\n constructor: MapDraw,\n draw: function (mapOrGeoModel, ecModel, api, fromView, payload) {\n var isGeo = mapOrGeoModel.mainType === 'geo'; // Map series has data. GEO model that controlled by map series\n // will be assigned with map data. Other GEO model has no data.\n\n var data = mapOrGeoModel.getData && mapOrGeoModel.getData();\n isGeo && ecModel.eachComponent({\n mainType: 'series',\n subType: 'map'\n }, function (mapSeries) {\n if (!data && mapSeries.getHostGeoModel() === mapOrGeoModel) {\n data = mapSeries.getData();\n }\n });\n var geo = mapOrGeoModel.coordinateSystem;\n var group = this.group;\n var scale = geo.scale;\n var groupNewProp = {\n position: geo.position,\n scale: scale\n }; // No animation when first draw or in action\n\n if (!group.childAt(0) || payload) {\n group.attr(groupNewProp);\n } else {\n graphic.updateProps(group, groupNewProp, mapOrGeoModel);\n }\n\n group.removeAll();\n var itemStyleAccessPath = ['itemStyle', 'normal'];\n var hoverItemStyleAccessPath = ['itemStyle', 'emphasis'];\n var labelAccessPath = ['label', 'normal'];\n var hoverLabelAccessPath = ['label', 'emphasis'];\n var nameMap = zrUtil.createHashMap();\n zrUtil.each(geo.regions, function (region) {\n // Consider in GeoJson properties.name may be duplicated, for example,\n // there is multiple region named \"United Kindom\" or \"France\" (so many\n // colonies). And it is not appropriate to merge them in geo, which\n // will make them share the same label and bring trouble in label\n // location calculation.\n var regionGroup = nameMap.get(region.name) || nameMap.set(region.name, new graphic.Group());\n var compoundPath = new graphic.CompoundPath({\n shape: {\n paths: []\n }\n });\n regionGroup.add(compoundPath);\n var regionModel = mapOrGeoModel.getRegionModel(region.name) || mapOrGeoModel;\n var itemStyleModel = regionModel.getModel(itemStyleAccessPath);\n var hoverItemStyleModel = regionModel.getModel(hoverItemStyleAccessPath);\n var itemStyle = getFixedItemStyle(itemStyleModel, scale);\n var hoverItemStyle = getFixedItemStyle(hoverItemStyleModel, scale);\n var labelModel = regionModel.getModel(labelAccessPath);\n var hoverLabelModel = regionModel.getModel(hoverLabelAccessPath);\n var dataIdx; // Use the itemStyle in data if has data\n\n if (data) {\n dataIdx = data.indexOfName(region.name); // Only visual color of each item will be used. It can be encoded by dataRange\n // But visual color of series is used in symbol drawing\n //\n // Visual color for each series is for the symbol draw\n\n var visualColor = data.getItemVisual(dataIdx, 'color', true);\n\n if (visualColor) {\n itemStyle.fill = visualColor;\n }\n }\n\n zrUtil.each(region.geometries, function (geometry) {\n if (geometry.type !== 'polygon') {\n return;\n }\n\n compoundPath.shape.paths.push(new graphic.Polygon({\n shape: {\n points: geometry.exterior\n }\n }));\n\n for (var i = 0; i < (geometry.interiors ? geometry.interiors.length : 0); i++) {\n compoundPath.shape.paths.push(new graphic.Polygon({\n shape: {\n points: geometry.interiors[i]\n }\n }));\n }\n });\n compoundPath.setStyle(itemStyle);\n compoundPath.style.strokeNoScale = true;\n compoundPath.culling = true; // Label\n\n var showLabel = labelModel.get('show');\n var hoverShowLabel = hoverLabelModel.get('show');\n var isDataNaN = data && isNaN(data.get('value', dataIdx));\n var itemLayout = data && data.getItemLayout(dataIdx); // In the following cases label will be drawn\n // 1. In map series and data value is NaN\n // 2. In geo component\n // 4. Region has no series legendSymbol, which will be add a showLabel flag in mapSymbolLayout\n\n if (isGeo || isDataNaN && (showLabel || hoverShowLabel) || itemLayout && itemLayout.showLabel) {\n var query = !isGeo ? dataIdx : region.name;\n var labelFetcher; // Consider dataIdx not found.\n\n if (!data || dataIdx >= 0) {\n labelFetcher = mapOrGeoModel;\n }\n\n var textEl = new graphic.Text({\n position: region.center.slice(),\n scale: [1 / scale[0], 1 / scale[1]],\n z2: 10,\n silent: true\n });\n graphic.setLabelStyle(textEl.style, textEl.hoverStyle = {}, labelModel, hoverLabelModel, {\n labelFetcher: labelFetcher,\n labelDataIndex: query,\n defaultText: region.name,\n useInsideStyle: false\n }, {\n textAlign: 'center',\n textVerticalAlign: 'middle'\n });\n regionGroup.add(textEl);\n } // setItemGraphicEl, setHoverStyle after all polygons and labels\n // are added to the rigionGroup\n\n\n if (data) {\n data.setItemGraphicEl(dataIdx, regionGroup);\n } else {\n var regionModel = mapOrGeoModel.getRegionModel(region.name); // Package custom mouse event for geo component\n\n compoundPath.eventData = {\n componentType: 'geo',\n geoIndex: mapOrGeoModel.componentIndex,\n name: region.name,\n region: regionModel && regionModel.option || {}\n };\n }\n\n var groupRegions = regionGroup.__regions || (regionGroup.__regions = []);\n groupRegions.push(region);\n graphic.setHoverStyle(regionGroup, hoverItemStyle, {\n hoverSilentOnTouch: !!mapOrGeoModel.get('selectedMode')\n });\n group.add(regionGroup);\n });\n\n this._updateController(mapOrGeoModel, ecModel, api);\n\n updateMapSelectHandler(this, mapOrGeoModel, group, api, fromView);\n updateMapSelected(mapOrGeoModel, group);\n },\n remove: function () {\n this.group.removeAll();\n\n this._controller.dispose();\n\n this._controllerHost = {};\n },\n _updateController: function (mapOrGeoModel, ecModel, api) {\n var geo = mapOrGeoModel.coordinateSystem;\n var controller = this._controller;\n var controllerHost = this._controllerHost;\n controllerHost.zoomLimit = mapOrGeoModel.get('scaleLimit');\n controllerHost.zoom = geo.getZoom(); // roamType is will be set default true if it is null\n\n controller.enable(mapOrGeoModel.get('roam') || false);\n var mainType = mapOrGeoModel.mainType;\n\n function makeActionBase() {\n var action = {\n type: 'geoRoam',\n componentType: mainType\n };\n action[mainType + 'Id'] = mapOrGeoModel.id;\n return action;\n }\n\n controller.off('pan').on('pan', function (dx, dy) {\n this._mouseDownFlag = false;\n roamHelper.updateViewOnPan(controllerHost, dx, dy);\n api.dispatchAction(zrUtil.extend(makeActionBase(), {\n dx: dx,\n dy: dy\n }));\n }, this);\n controller.off('zoom').on('zoom', function (zoom, mouseX, mouseY) {\n this._mouseDownFlag = false;\n roamHelper.updateViewOnZoom(controllerHost, zoom, mouseX, mouseY);\n api.dispatchAction(zrUtil.extend(makeActionBase(), {\n zoom: zoom,\n originX: mouseX,\n originY: mouseY\n }));\n\n if (this._updateGroup) {\n var group = this.group;\n var scale = group.scale;\n group.traverse(function (el) {\n if (el.type === 'text') {\n el.attr('scale', [1 / scale[0], 1 / scale[1]]);\n }\n });\n }\n }, this);\n controller.setPointerChecker(function (e, x, y) {\n return geo.getViewRectAfterRoam().contain(x, y) && !onIrrelevantElement(e, api, mapOrGeoModel);\n });\n }\n};\nvar _default = MapDraw;\nmodule.exports = _default;","var matrix = require(\"../core/matrix\");\n\nvar vector = require(\"../core/vector\");\n\n/**\n * 提供变换扩展\n * @module zrender/mixin/Transformable\n * @author pissang (https://www.github.com/pissang)\n */\nvar mIdentity = matrix.identity;\nvar EPSILON = 5e-5;\n\nfunction isNotAroundZero(val) {\n return val > EPSILON || val < -EPSILON;\n}\n/**\n * @alias module:zrender/mixin/Transformable\n * @constructor\n */\n\n\nvar Transformable = function (opts) {\n opts = opts || {}; // If there are no given position, rotation, scale\n\n if (!opts.position) {\n /**\n * 平移\n * @type {Array.}\n * @default [0, 0]\n */\n this.position = [0, 0];\n }\n\n if (opts.rotation == null) {\n /**\n * 旋转\n * @type {Array.}\n * @default 0\n */\n this.rotation = 0;\n }\n\n if (!opts.scale) {\n /**\n * 缩放\n * @type {Array.}\n * @default [1, 1]\n */\n this.scale = [1, 1];\n }\n /**\n * 旋转和缩放的原点\n * @type {Array.}\n * @default null\n */\n\n\n this.origin = this.origin || null;\n};\n\nvar transformableProto = Transformable.prototype;\ntransformableProto.transform = null;\n/**\n * 判断是否需要有坐标变换\n * 如果有坐标变换, 则从position, rotation, scale以及父节点的transform计算出自身的transform矩阵\n */\n\ntransformableProto.needLocalTransform = function () {\n return isNotAroundZero(this.rotation) || isNotAroundZero(this.position[0]) || isNotAroundZero(this.position[1]) || isNotAroundZero(this.scale[0] - 1) || isNotAroundZero(this.scale[1] - 1);\n};\n\ntransformableProto.updateTransform = function () {\n var parent = this.parent;\n var parentHasTransform = parent && parent.transform;\n var needLocalTransform = this.needLocalTransform();\n var m = this.transform;\n\n if (!(needLocalTransform || parentHasTransform)) {\n m && mIdentity(m);\n return;\n }\n\n m = m || matrix.create();\n\n if (needLocalTransform) {\n this.getLocalTransform(m);\n } else {\n mIdentity(m);\n } // 应用父节点变换\n\n\n if (parentHasTransform) {\n if (needLocalTransform) {\n matrix.mul(m, parent.transform, m);\n } else {\n matrix.copy(m, parent.transform);\n }\n } // 保存这个变换矩阵\n\n\n this.transform = m;\n this.invTransform = this.invTransform || matrix.create();\n matrix.invert(this.invTransform, m);\n};\n\ntransformableProto.getLocalTransform = function (m) {\n return Transformable.getLocalTransform(this, m);\n};\n/**\n * 将自己的transform应用到context上\n * @param {CanvasRenderingContext2D} ctx\n */\n\n\ntransformableProto.setTransform = function (ctx) {\n var m = this.transform;\n var dpr = ctx.dpr || 1;\n\n if (m) {\n ctx.setTransform(dpr * m[0], dpr * m[1], dpr * m[2], dpr * m[3], dpr * m[4], dpr * m[5]);\n } else {\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n }\n};\n\ntransformableProto.restoreTransform = function (ctx) {\n var dpr = ctx.dpr || 1;\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n};\n\nvar tmpTransform = [];\n/**\n * 分解`transform`矩阵到`position`, `rotation`, `scale`\n */\n\ntransformableProto.decomposeTransform = function () {\n if (!this.transform) {\n return;\n }\n\n var parent = this.parent;\n var m = this.transform;\n\n if (parent && parent.transform) {\n // Get local transform and decompose them to position, scale, rotation\n matrix.mul(tmpTransform, parent.invTransform, m);\n m = tmpTransform;\n }\n\n var sx = m[0] * m[0] + m[1] * m[1];\n var sy = m[2] * m[2] + m[3] * m[3];\n var position = this.position;\n var scale = this.scale;\n\n if (isNotAroundZero(sx - 1)) {\n sx = Math.sqrt(sx);\n }\n\n if (isNotAroundZero(sy - 1)) {\n sy = Math.sqrt(sy);\n }\n\n if (m[0] < 0) {\n sx = -sx;\n }\n\n if (m[3] < 0) {\n sy = -sy;\n }\n\n position[0] = m[4];\n position[1] = m[5];\n scale[0] = sx;\n scale[1] = sy;\n this.rotation = Math.atan2(-m[1] / sy, m[0] / sx);\n};\n/**\n * Get global scale\n * @return {Array.}\n */\n\n\ntransformableProto.getGlobalScale = function () {\n var m = this.transform;\n\n if (!m) {\n return [1, 1];\n }\n\n var sx = Math.sqrt(m[0] * m[0] + m[1] * m[1]);\n var sy = Math.sqrt(m[2] * m[2] + m[3] * m[3]);\n\n if (m[0] < 0) {\n sx = -sx;\n }\n\n if (m[3] < 0) {\n sy = -sy;\n }\n\n return [sx, sy];\n};\n/**\n * 变换坐标位置到 shape 的局部坐标空间\n * @method\n * @param {number} x\n * @param {number} y\n * @return {Array.}\n */\n\n\ntransformableProto.transformCoordToLocal = function (x, y) {\n var v2 = [x, y];\n var invTransform = this.invTransform;\n\n if (invTransform) {\n vector.applyTransform(v2, v2, invTransform);\n }\n\n return v2;\n};\n/**\n * 变换局部坐标位置到全局坐标空间\n * @method\n * @param {number} x\n * @param {number} y\n * @return {Array.}\n */\n\n\ntransformableProto.transformCoordToGlobal = function (x, y) {\n var v2 = [x, y];\n var transform = this.transform;\n\n if (transform) {\n vector.applyTransform(v2, v2, transform);\n }\n\n return v2;\n};\n/**\n * @static\n * @param {Object} target\n * @param {Array.} target.origin\n * @param {number} target.rotation\n * @param {Array.} target.position\n * @param {Array.} [m]\n */\n\n\nTransformable.getLocalTransform = function (target, m) {\n m = m || [];\n mIdentity(m);\n var origin = target.origin;\n var scale = target.scale || [1, 1];\n var rotation = target.rotation || 0;\n var position = target.position || [0, 0];\n\n if (origin) {\n // Translate to origin\n m[4] -= origin[0];\n m[5] -= origin[1];\n }\n\n matrix.scale(m, m, scale);\n\n if (rotation) {\n matrix.rotate(m, m, rotation);\n }\n\n if (origin) {\n // Translate back from origin\n m[4] += origin[0];\n m[5] += origin[1];\n }\n\n m[4] += position[0];\n m[5] += position[1];\n return m;\n};\n\nvar _default = Transformable;\nmodule.exports = _default;","var Displayable = require(\"./Displayable\");\n\nvar BoundingRect = require(\"../core/BoundingRect\");\n\nvar zrUtil = require(\"../core/util\");\n\nvar imageHelper = require(\"./helper/image\");\n\n/**\n * @alias zrender/graphic/Image\n * @extends module:zrender/graphic/Displayable\n * @constructor\n * @param {Object} opts\n */\nfunction ZImage(opts) {\n Displayable.call(this, opts);\n}\n\nZImage.prototype = {\n constructor: ZImage,\n type: 'image',\n brush: function (ctx, prevEl) {\n var style = this.style;\n var src = style.image; // Must bind each time\n\n style.bind(ctx, this, prevEl);\n var image = this._image = imageHelper.createOrUpdateImage(src, this._image, this, this.onload);\n\n if (!image || !imageHelper.isImageReady(image)) {\n return;\n } // 图片已经加载完成\n // if (image.nodeName.toUpperCase() == 'IMG') {\n // if (!image.complete) {\n // return;\n // }\n // }\n // Else is canvas\n\n\n var x = style.x || 0;\n var y = style.y || 0;\n var width = style.width;\n var height = style.height;\n var aspect = image.width / image.height;\n\n if (width == null && height != null) {\n // Keep image/height ratio\n width = height * aspect;\n } else if (height == null && width != null) {\n height = width / aspect;\n } else if (width == null && height == null) {\n width = image.width;\n height = image.height;\n } // 设置transform\n\n\n this.setTransform(ctx);\n\n if (style.sWidth && style.sHeight) {\n var sx = style.sx || 0;\n var sy = style.sy || 0;\n ctx.drawImage(image, sx, sy, style.sWidth, style.sHeight, x, y, width, height);\n } else if (style.sx && style.sy) {\n var sx = style.sx;\n var sy = style.sy;\n var sWidth = width - sx;\n var sHeight = height - sy;\n ctx.drawImage(image, sx, sy, sWidth, sHeight, x, y, width, height);\n } else {\n ctx.drawImage(image, x, y, width, height);\n }\n\n this.restoreTransform(ctx); // Draw rect text\n\n if (style.text != null) {\n this.drawRectText(ctx, this.getBoundingRect());\n }\n },\n getBoundingRect: function () {\n var style = this.style;\n\n if (!this._rect) {\n this._rect = new BoundingRect(style.x || 0, style.y || 0, style.width || 0, style.height || 0);\n }\n\n return this._rect;\n }\n};\nzrUtil.inherits(ZImage, Displayable);\nvar _default = ZImage;\nmodule.exports = _default;","var VisualMapping = require(\"../../visual/VisualMapping\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/**\n * @file Visual encoding for sankey view\n * @author Deqing Li(annong035@gmail.com)\n */\nfunction _default(ecModel, payload) {\n ecModel.eachSeriesByType('sankey', function (seriesModel) {\n var graph = seriesModel.getGraph();\n var nodes = graph.nodes;\n nodes.sort(function (a, b) {\n return a.getLayout().value - b.getLayout().value;\n });\n var minValue = nodes[0].getLayout().value;\n var maxValue = nodes[nodes.length - 1].getLayout().value;\n zrUtil.each(nodes, function (node) {\n var mapping = new VisualMapping({\n type: 'color',\n mappingMethod: 'linear',\n dataExtent: [minValue, maxValue],\n visual: seriesModel.get('color')\n });\n var mapValueToColor = mapping.mapValueToVisual(node.getLayout().value);\n node.setVisual('color', mapValueToColor); // If set itemStyle.normal.color\n\n var itemModel = node.getModel();\n var customColor = itemModel.get('itemStyle.normal.color');\n\n if (customColor != null) {\n node.setVisual('color', customColor);\n }\n });\n });\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar layoutUtil = require(\"../../util/layout\");\n\nvar LegendView = require(\"./LegendView\");\n\n/**\n * Separate legend and scrollable legend to reduce package size.\n */\nvar Group = graphic.Group;\nvar WH = ['width', 'height'];\nvar XY = ['x', 'y'];\nvar ScrollableLegendView = LegendView.extend({\n type: 'legend.scroll',\n newlineDisabled: true,\n init: function () {\n ScrollableLegendView.superCall(this, 'init');\n /**\n * @private\n * @type {number} For `scroll`.\n */\n\n this._currentIndex = 0;\n /**\n * @private\n * @type {module:zrender/container/Group}\n */\n\n this.group.add(this._containerGroup = new Group());\n\n this._containerGroup.add(this.getContentGroup());\n /**\n * @private\n * @type {module:zrender/container/Group}\n */\n\n\n this.group.add(this._controllerGroup = new Group());\n /**\n *\n * @private\n */\n\n this._showController;\n },\n\n /**\n * @override\n */\n resetInner: function () {\n ScrollableLegendView.superCall(this, 'resetInner');\n\n this._controllerGroup.removeAll();\n\n this._containerGroup.removeClipPath();\n\n this._containerGroup.__rectSize = null;\n },\n\n /**\n * @override\n */\n renderInner: function (itemAlign, legendModel, ecModel, api) {\n var me = this; // Render content items.\n\n ScrollableLegendView.superCall(this, 'renderInner', itemAlign, legendModel, ecModel, api);\n var controllerGroup = this._controllerGroup;\n var pageIconSize = legendModel.get('pageIconSize', true);\n\n if (!zrUtil.isArray(pageIconSize)) {\n pageIconSize = [pageIconSize, pageIconSize];\n }\n\n createPageButton('pagePrev', 0);\n var pageTextStyleModel = legendModel.getModel('pageTextStyle');\n controllerGroup.add(new graphic.Text({\n name: 'pageText',\n style: {\n textFill: pageTextStyleModel.getTextColor(),\n font: pageTextStyleModel.getFont(),\n textVerticalAlign: 'middle',\n textAlign: 'center'\n },\n silent: true\n }));\n createPageButton('pageNext', 1);\n\n function createPageButton(name, iconIdx) {\n var pageDataIndexName = name + 'DataIndex';\n var icon = graphic.createIcon(legendModel.get('pageIcons', true)[legendModel.getOrient().name][iconIdx], {\n // Buttons will be created in each render, so we do not need\n // to worry about avoiding using legendModel kept in scope.\n onclick: zrUtil.bind(me._pageGo, me, pageDataIndexName, legendModel, api)\n }, {\n x: -pageIconSize[0] / 2,\n y: -pageIconSize[1] / 2,\n width: pageIconSize[0],\n height: pageIconSize[1]\n });\n icon.name = name;\n controllerGroup.add(icon);\n }\n },\n\n /**\n * @override\n */\n layoutInner: function (legendModel, itemAlign, maxSize) {\n var contentGroup = this.getContentGroup();\n var containerGroup = this._containerGroup;\n var controllerGroup = this._controllerGroup;\n var orientIdx = legendModel.getOrient().index;\n var wh = WH[orientIdx];\n var hw = WH[1 - orientIdx];\n var yx = XY[1 - orientIdx]; // Place items in contentGroup.\n\n layoutUtil.box(legendModel.get('orient'), contentGroup, legendModel.get('itemGap'), !orientIdx ? null : maxSize.width, orientIdx ? null : maxSize.height);\n layoutUtil.box( // Buttons in controller are layout always horizontally.\n 'horizontal', controllerGroup, legendModel.get('pageButtonItemGap', true));\n var contentRect = contentGroup.getBoundingRect();\n var controllerRect = controllerGroup.getBoundingRect();\n var showController = this._showController = contentRect[wh] > maxSize[wh];\n var contentPos = [-contentRect.x, -contentRect.y]; // Remain contentPos when scroll animation perfroming.\n\n contentPos[orientIdx] = contentGroup.position[orientIdx]; // Layout container group based on 0.\n\n var containerPos = [0, 0];\n var controllerPos = [-controllerRect.x, -controllerRect.y];\n var pageButtonGap = zrUtil.retrieve2(legendModel.get('pageButtonGap', true), legendModel.get('itemGap', true)); // Place containerGroup and controllerGroup and contentGroup.\n\n if (showController) {\n var pageButtonPosition = legendModel.get('pageButtonPosition', true); // controller is on the right / bottom.\n\n if (pageButtonPosition === 'end') {\n controllerPos[orientIdx] += maxSize[wh] - controllerRect[wh];\n } // controller is on the left / top.\n else {\n containerPos[orientIdx] += controllerRect[wh] + pageButtonGap;\n }\n } // Always align controller to content as 'middle'.\n\n\n controllerPos[1 - orientIdx] += contentRect[hw] / 2 - controllerRect[hw] / 2;\n contentGroup.attr('position', contentPos);\n containerGroup.attr('position', containerPos);\n controllerGroup.attr('position', controllerPos); // Calculate `mainRect` and set `clipPath`.\n // mainRect should not be calculated by `this.group.getBoundingRect()`\n // for sake of the overflow.\n\n var mainRect = this.group.getBoundingRect();\n var mainRect = {\n x: 0,\n y: 0\n }; // Consider content may be overflow (should be clipped).\n\n mainRect[wh] = showController ? maxSize[wh] : contentRect[wh];\n mainRect[hw] = Math.max(contentRect[hw], controllerRect[hw]); // `containerRect[yx] + containerPos[1 - orientIdx]` is 0.\n\n mainRect[yx] = Math.min(0, controllerRect[yx] + controllerPos[1 - orientIdx]);\n containerGroup.__rectSize = maxSize[wh];\n\n if (showController) {\n var clipShape = {\n x: 0,\n y: 0\n };\n clipShape[wh] = Math.max(maxSize[wh] - controllerRect[wh] - pageButtonGap, 0);\n clipShape[hw] = mainRect[hw];\n containerGroup.setClipPath(new graphic.Rect({\n shape: clipShape\n })); // Consider content may be larger than container, container rect\n // can not be obtained from `containerGroup.getBoundingRect()`.\n\n containerGroup.__rectSize = clipShape[wh];\n } else {\n // Do not remove or ignore controller. Keep them set as place holders.\n controllerGroup.eachChild(function (child) {\n child.attr({\n invisible: true,\n silent: true\n });\n });\n } // Content translate animation.\n\n\n var pageInfo = this._getPageInfo(legendModel);\n\n pageInfo.pageIndex != null && graphic.updateProps(contentGroup, {\n position: pageInfo.contentPosition\n }, // When switch from \"show controller\" to \"not show controller\", view should be\n // updated immediately without animation, otherwise causes weird efffect.\n showController ? legendModel : false);\n\n this._updatePageInfoView(legendModel, pageInfo);\n\n return mainRect;\n },\n _pageGo: function (to, legendModel, api) {\n var scrollDataIndex = this._getPageInfo(legendModel)[to];\n\n scrollDataIndex != null && api.dispatchAction({\n type: 'legendScroll',\n scrollDataIndex: scrollDataIndex,\n legendId: legendModel.id\n });\n },\n _updatePageInfoView: function (legendModel, pageInfo) {\n var controllerGroup = this._controllerGroup;\n zrUtil.each(['pagePrev', 'pageNext'], function (name) {\n var canJump = pageInfo[name + 'DataIndex'] != null;\n var icon = controllerGroup.childOfName(name);\n\n if (icon) {\n icon.setStyle('fill', canJump ? legendModel.get('pageIconColor', true) : legendModel.get('pageIconInactiveColor', true));\n icon.cursor = canJump ? 'pointer' : 'default';\n }\n });\n var pageText = controllerGroup.childOfName('pageText');\n var pageFormatter = legendModel.get('pageFormatter');\n var pageIndex = pageInfo.pageIndex;\n var current = pageIndex != null ? pageIndex + 1 : 0;\n var total = pageInfo.pageCount;\n pageText && pageFormatter && pageText.setStyle('text', zrUtil.isString(pageFormatter) ? pageFormatter.replace('{current}', current).replace('{total}', total) : pageFormatter({\n current: current,\n total: total\n }));\n },\n\n /**\n * @param {module:echarts/model/Model} legendModel\n * @return {Object} {\n * contentPosition: Array., null when data item not found.\n * pageIndex: number, null when data item not found.\n * pageCount: number, always be a number, can be 0.\n * pagePrevDataIndex: number, null when no next page.\n * pageNextDataIndex: number, null when no previous page.\n * }\n */\n _getPageInfo: function (legendModel) {\n // Align left or top by the current dataIndex.\n var currDataIndex = legendModel.get('scrollDataIndex', true);\n var contentGroup = this.getContentGroup();\n var contentRect = contentGroup.getBoundingRect();\n var containerRectSize = this._containerGroup.__rectSize;\n var orientIdx = legendModel.getOrient().index;\n var wh = WH[orientIdx];\n var hw = WH[1 - orientIdx];\n var xy = XY[orientIdx];\n var contentPos = contentGroup.position.slice();\n var pageIndex;\n var pagePrevDataIndex;\n var pageNextDataIndex;\n var targetItemGroup;\n\n if (this._showController) {\n contentGroup.eachChild(function (child) {\n if (child.__legendDataIndex === currDataIndex) {\n targetItemGroup = child;\n }\n });\n } else {\n targetItemGroup = contentGroup.childAt(0);\n }\n\n var pageCount = containerRectSize ? Math.ceil(contentRect[wh] / containerRectSize) : 0;\n\n if (targetItemGroup) {\n var itemRect = targetItemGroup.getBoundingRect();\n var itemLoc = targetItemGroup.position[orientIdx] + itemRect[xy];\n contentPos[orientIdx] = -itemLoc - contentRect[xy];\n pageIndex = Math.floor(pageCount * (itemLoc + itemRect[xy] + containerRectSize / 2) / contentRect[wh]);\n pageIndex = contentRect[wh] && pageCount ? Math.max(0, Math.min(pageCount - 1, pageIndex)) : -1;\n var winRect = {\n x: 0,\n y: 0\n };\n winRect[wh] = containerRectSize;\n winRect[hw] = contentRect[hw];\n winRect[xy] = -contentPos[orientIdx] - contentRect[xy];\n var startIdx;\n var children = contentGroup.children();\n contentGroup.eachChild(function (child, index) {\n var itemRect = getItemRect(child);\n\n if (itemRect.intersect(winRect)) {\n startIdx == null && (startIdx = index); // It is user-friendly that the last item shown in the\n // current window is shown at the begining of next window.\n\n pageNextDataIndex = child.__legendDataIndex;\n } // If the last item is shown entirely, no next page.\n\n\n if (index === children.length - 1 && itemRect[xy] + itemRect[wh] <= winRect[xy] + winRect[wh]) {\n pageNextDataIndex = null;\n }\n }); // Always align based on the left/top most item, so the left/top most\n // item in the previous window is needed to be found here.\n\n if (startIdx != null) {\n var startItem = children[startIdx];\n var startRect = getItemRect(startItem);\n winRect[xy] = startRect[xy] + startRect[wh] - winRect[wh]; // If the first item is shown entirely, no previous page.\n\n if (startIdx <= 0 && startRect[xy] >= winRect[xy]) {\n pagePrevDataIndex = null;\n } else {\n while (startIdx > 0 && getItemRect(children[startIdx - 1]).intersect(winRect)) {\n startIdx--;\n }\n\n pagePrevDataIndex = children[startIdx].__legendDataIndex;\n }\n }\n }\n\n return {\n contentPosition: contentPos,\n pageIndex: pageIndex,\n pageCount: pageCount,\n pagePrevDataIndex: pagePrevDataIndex,\n pageNextDataIndex: pageNextDataIndex\n };\n\n function getItemRect(el) {\n var itemRect = el.getBoundingRect().clone();\n itemRect[xy] += el.position[orientIdx];\n return itemRect;\n }\n }\n});\nvar _default = ScrollableLegendView;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar Axis = require(\"../Axis\");\n\n/**\n * @constructor module:echarts/coord/parallel/ParallelAxis\n * @extends {module:echarts/coord/Axis}\n * @param {string} dim\n * @param {*} scale\n * @param {Array.} coordExtent\n * @param {string} axisType\n */\nvar ParallelAxis = function (dim, scale, coordExtent, axisType, axisIndex) {\n Axis.call(this, dim, scale, coordExtent);\n /**\n * Axis type\n * - 'category'\n * - 'value'\n * - 'time'\n * - 'log'\n * @type {string}\n */\n\n this.type = axisType || 'value';\n /**\n * @type {number}\n * @readOnly\n */\n\n this.axisIndex = axisIndex;\n};\n\nParallelAxis.prototype = {\n constructor: ParallelAxis,\n\n /**\n * Axis model\n * @param {module:echarts/coord/parallel/AxisModel}\n */\n model: null,\n\n /**\n * @override\n */\n isHorizontal: function () {\n return this.coordinateSystem.getModel().get('layout') !== 'horizontal';\n }\n};\nzrUtil.inherits(ParallelAxis, Axis);\nvar _default = ParallelAxis;\nmodule.exports = _default;","var graphic = require(\"../../util/graphic\");\n\nvar Line = require(\"./Line\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _symbol = require(\"../../util/symbol\");\n\nvar createSymbol = _symbol.createSymbol;\n\nvar vec2 = require(\"zrender/lib/core/vector\");\n\nvar curveUtil = require(\"zrender/lib/core/curve\");\n\n/**\n * Provide effect for line\n * @module echarts/chart/helper/EffectLine\n */\n\n/**\n * @constructor\n * @extends {module:zrender/graphic/Group}\n * @alias {module:echarts/chart/helper/Line}\n */\nfunction EffectLine(lineData, idx, seriesScope) {\n graphic.Group.call(this);\n this.add(this.createLine(lineData, idx, seriesScope));\n\n this._updateEffectSymbol(lineData, idx);\n}\n\nvar effectLineProto = EffectLine.prototype;\n\neffectLineProto.createLine = function (lineData, idx, seriesScope) {\n return new Line(lineData, idx, seriesScope);\n};\n\neffectLineProto._updateEffectSymbol = function (lineData, idx) {\n var itemModel = lineData.getItemModel(idx);\n var effectModel = itemModel.getModel('effect');\n var size = effectModel.get('symbolSize');\n var symbolType = effectModel.get('symbol');\n\n if (!zrUtil.isArray(size)) {\n size = [size, size];\n }\n\n var color = effectModel.get('color') || lineData.getItemVisual(idx, 'color');\n var symbol = this.childAt(1);\n\n if (this._symbolType !== symbolType) {\n // Remove previous\n this.remove(symbol);\n symbol = createSymbol(symbolType, -0.5, -0.5, 1, 1, color);\n symbol.z2 = 100;\n symbol.culling = true;\n this.add(symbol);\n } // Symbol may be removed if loop is false\n\n\n if (!symbol) {\n return;\n } // Shadow color is same with color in default\n\n\n symbol.setStyle('shadowColor', color);\n symbol.setStyle(effectModel.getItemStyle(['color']));\n symbol.attr('scale', size);\n symbol.setColor(color);\n symbol.attr('scale', size);\n this._symbolType = symbolType;\n\n this._updateEffectAnimation(lineData, effectModel, idx);\n};\n\neffectLineProto._updateEffectAnimation = function (lineData, effectModel, idx) {\n var symbol = this.childAt(1);\n\n if (!symbol) {\n return;\n }\n\n var self = this;\n var points = lineData.getItemLayout(idx);\n var period = effectModel.get('period') * 1000;\n var loop = effectModel.get('loop');\n var constantSpeed = effectModel.get('constantSpeed');\n var delayExpr = zrUtil.retrieve(effectModel.get('delay'), function (idx) {\n return idx / lineData.count() * period / 3;\n });\n var isDelayFunc = typeof delayExpr === 'function'; // Ignore when updating\n\n symbol.ignore = true;\n this.updateAnimationPoints(symbol, points);\n\n if (constantSpeed > 0) {\n period = this.getLineLength(symbol) / constantSpeed * 1000;\n }\n\n if (period !== this._period || loop !== this._loop) {\n symbol.stopAnimation();\n var delay = delayExpr;\n\n if (isDelayFunc) {\n delay = delayExpr(idx);\n }\n\n if (symbol.__t > 0) {\n delay = -period * symbol.__t;\n }\n\n symbol.__t = 0;\n var animator = symbol.animate('', loop).when(period, {\n __t: 1\n }).delay(delay).during(function () {\n self.updateSymbolPosition(symbol);\n });\n\n if (!loop) {\n animator.done(function () {\n self.remove(symbol);\n });\n }\n\n animator.start();\n }\n\n this._period = period;\n this._loop = loop;\n};\n\neffectLineProto.getLineLength = function (symbol) {\n // Not so accurate\n return vec2.dist(symbol.__p1, symbol.__cp1) + vec2.dist(symbol.__cp1, symbol.__p2);\n};\n\neffectLineProto.updateAnimationPoints = function (symbol, points) {\n symbol.__p1 = points[0];\n symbol.__p2 = points[1];\n symbol.__cp1 = points[2] || [(points[0][0] + points[1][0]) / 2, (points[0][1] + points[1][1]) / 2];\n};\n\neffectLineProto.updateData = function (lineData, idx, seriesScope) {\n this.childAt(0).updateData(lineData, idx, seriesScope);\n\n this._updateEffectSymbol(lineData, idx);\n};\n\neffectLineProto.updateSymbolPosition = function (symbol) {\n var p1 = symbol.__p1;\n var p2 = symbol.__p2;\n var cp1 = symbol.__cp1;\n var t = symbol.__t;\n var pos = symbol.position;\n var quadraticAt = curveUtil.quadraticAt;\n var quadraticDerivativeAt = curveUtil.quadraticDerivativeAt;\n pos[0] = quadraticAt(p1[0], cp1[0], p2[0], t);\n pos[1] = quadraticAt(p1[1], cp1[1], p2[1], t); // Tangent\n\n var tx = quadraticDerivativeAt(p1[0], cp1[0], p2[0], t);\n var ty = quadraticDerivativeAt(p1[1], cp1[1], p2[1], t);\n symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2;\n symbol.ignore = false;\n};\n\neffectLineProto.updateLayout = function (lineData, idx) {\n this.childAt(0).updateLayout(lineData, idx);\n var effectModel = lineData.getItemModel(idx).getModel('effect');\n\n this._updateEffectAnimation(lineData, effectModel, idx);\n};\n\nzrUtil.inherits(EffectLine, graphic.Group);\nvar _default = EffectLine;\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nvar visualSolution = require(\"../../visual/visualSolution\");\n\nvar selector = require(\"./selector\");\n\nvar throttleUtil = require(\"../../util/throttle\");\n\nvar BrushTargetManager = require(\"../helper/BrushTargetManager\");\n\nvar STATE_LIST = ['inBrush', 'outOfBrush'];\nvar DISPATCH_METHOD = '__ecBrushSelect';\nvar DISPATCH_FLAG = '__ecInBrushSelectEvent';\nvar PRIORITY_BRUSH = echarts.PRIORITY.VISUAL.BRUSH;\n/**\n * Layout for visual, the priority higher than other layout, and before brush visual.\n */\n\necharts.registerLayout(PRIORITY_BRUSH, function (ecModel, api, payload) {\n ecModel.eachComponent({\n mainType: 'brush'\n }, function (brushModel) {\n payload && payload.type === 'takeGlobalCursor' && brushModel.setBrushOption(payload.key === 'brush' ? payload.brushOption : {\n brushType: false\n });\n var brushTargetManager = brushModel.brushTargetManager = new BrushTargetManager(brushModel.option, ecModel);\n brushTargetManager.setInputRanges(brushModel.areas, ecModel);\n });\n});\n/**\n * Register the visual encoding if this modules required.\n */\n\necharts.registerVisual(PRIORITY_BRUSH, function (ecModel, api, payload) {\n var brushSelected = [];\n var throttleType;\n var throttleDelay;\n ecModel.eachComponent({\n mainType: 'brush'\n }, function (brushModel, brushIndex) {\n var thisBrushSelected = {\n brushId: brushModel.id,\n brushIndex: brushIndex,\n brushName: brushModel.name,\n areas: zrUtil.clone(brushModel.areas),\n selected: []\n }; // Every brush component exists in event params, convenient\n // for user to find by index.\n\n brushSelected.push(thisBrushSelected);\n var brushOption = brushModel.option;\n var brushLink = brushOption.brushLink;\n var linkedSeriesMap = [];\n var selectedDataIndexForLink = [];\n var rangeInfoBySeries = [];\n var hasBrushExists = 0;\n\n if (!brushIndex) {\n // Only the first throttle setting works.\n throttleType = brushOption.throttleType;\n throttleDelay = brushOption.throttleDelay;\n } // Add boundingRect and selectors to range.\n\n\n var areas = zrUtil.map(brushModel.areas, function (area) {\n return bindSelector(zrUtil.defaults({\n boundingRect: boundingRectBuilders[area.brushType](area)\n }, area));\n });\n var visualMappings = visualSolution.createVisualMappings(brushModel.option, STATE_LIST, function (mappingOption) {\n mappingOption.mappingMethod = 'fixed';\n });\n zrUtil.isArray(brushLink) && zrUtil.each(brushLink, function (seriesIndex) {\n linkedSeriesMap[seriesIndex] = 1;\n });\n\n function linkOthers(seriesIndex) {\n return brushLink === 'all' || linkedSeriesMap[seriesIndex];\n } // If no supported brush or no brush on the series,\n // all visuals should be in original state.\n\n\n function brushed(rangeInfoList) {\n return !!rangeInfoList.length;\n }\n /**\n * Logic for each series: (If the logic has to be modified one day, do it carefully!)\n *\n * ( brushed ┬ && ┬hasBrushExist ┬ && linkOthers ) => StepA: ┬record, ┬ StepB: ┬visualByRecord.\n * !brushed┘ ├hasBrushExist ┤ └nothing,┘ ├visualByRecord.\n * └!hasBrushExist┘ └nothing.\n * ( !brushed && ┬hasBrushExist ┬ && linkOthers ) => StepA: nothing, StepB: ┬visualByRecord.\n * └!hasBrushExist┘ └nothing.\n * ( brushed ┬ && !linkOthers ) => StepA: nothing, StepB: ┬visualByCheck.\n * !brushed┘ └nothing.\n * ( !brushed && !linkOthers ) => StepA: nothing, StepB: nothing.\n */\n // Step A\n\n\n ecModel.eachSeries(function (seriesModel, seriesIndex) {\n var rangeInfoList = rangeInfoBySeries[seriesIndex] = [];\n seriesModel.subType === 'parallel' ? stepAParallel(seriesModel, seriesIndex, rangeInfoList) : stepAOthers(seriesModel, seriesIndex, rangeInfoList);\n });\n\n function stepAParallel(seriesModel, seriesIndex) {\n var coordSys = seriesModel.coordinateSystem;\n hasBrushExists |= coordSys.hasAxisBrushed();\n linkOthers(seriesIndex) && coordSys.eachActiveState(seriesModel.getData(), function (activeState, dataIndex) {\n activeState === 'active' && (selectedDataIndexForLink[dataIndex] = 1);\n });\n }\n\n function stepAOthers(seriesModel, seriesIndex, rangeInfoList) {\n var selectorsByBrushType = getSelectorsByBrushType(seriesModel);\n\n if (!selectorsByBrushType || brushModelNotControll(brushModel, seriesIndex)) {\n return;\n }\n\n zrUtil.each(areas, function (area) {\n selectorsByBrushType[area.brushType] && brushModel.brushTargetManager.controlSeries(area, seriesModel, ecModel) && rangeInfoList.push(area);\n hasBrushExists |= brushed(rangeInfoList);\n });\n\n if (linkOthers(seriesIndex) && brushed(rangeInfoList)) {\n var data = seriesModel.getData();\n data.each(function (dataIndex) {\n if (checkInRange(selectorsByBrushType, rangeInfoList, data, dataIndex)) {\n selectedDataIndexForLink[dataIndex] = 1;\n }\n });\n }\n } // Step B\n\n\n ecModel.eachSeries(function (seriesModel, seriesIndex) {\n var seriesBrushSelected = {\n seriesId: seriesModel.id,\n seriesIndex: seriesIndex,\n seriesName: seriesModel.name,\n dataIndex: []\n }; // Every series exists in event params, convenient\n // for user to find series by seriesIndex.\n\n thisBrushSelected.selected.push(seriesBrushSelected);\n var selectorsByBrushType = getSelectorsByBrushType(seriesModel);\n var rangeInfoList = rangeInfoBySeries[seriesIndex];\n var data = seriesModel.getData();\n var getValueState = linkOthers(seriesIndex) ? function (dataIndex) {\n return selectedDataIndexForLink[dataIndex] ? (seriesBrushSelected.dataIndex.push(data.getRawIndex(dataIndex)), 'inBrush') : 'outOfBrush';\n } : function (dataIndex) {\n return checkInRange(selectorsByBrushType, rangeInfoList, data, dataIndex) ? (seriesBrushSelected.dataIndex.push(data.getRawIndex(dataIndex)), 'inBrush') : 'outOfBrush';\n }; // If no supported brush or no brush, all visuals are in original state.\n\n (linkOthers(seriesIndex) ? hasBrushExists : brushed(rangeInfoList)) && visualSolution.applyVisual(STATE_LIST, visualMappings, data, getValueState);\n });\n });\n dispatchAction(api, throttleType, throttleDelay, brushSelected, payload);\n});\n\nfunction dispatchAction(api, throttleType, throttleDelay, brushSelected, payload) {\n // This event will not be triggered when `setOpion`, otherwise dead lock may\n // triggered when do `setOption` in event listener, which we do not find\n // satisfactory way to solve yet. Some considered resolutions:\n // (a) Diff with prevoius selected data ant only trigger event when changed.\n // But store previous data and diff precisely (i.e., not only by dataIndex, but\n // also detect value changes in selected data) might bring complexity or fragility.\n // (b) Use spectial param like `silent` to suppress event triggering.\n // But such kind of volatile param may be weird in `setOption`.\n if (!payload) {\n return;\n }\n\n var zr = api.getZr();\n\n if (zr[DISPATCH_FLAG]) {\n return;\n }\n\n if (!zr[DISPATCH_METHOD]) {\n zr[DISPATCH_METHOD] = doDispatch;\n }\n\n var fn = throttleUtil.createOrUpdate(zr, DISPATCH_METHOD, throttleDelay, throttleType);\n fn(api, brushSelected);\n}\n\nfunction doDispatch(api, brushSelected) {\n if (!api.isDisposed()) {\n var zr = api.getZr();\n zr[DISPATCH_FLAG] = true;\n api.dispatchAction({\n type: 'brushSelect',\n batch: brushSelected\n });\n zr[DISPATCH_FLAG] = false;\n }\n}\n\nfunction checkInRange(selectorsByBrushType, rangeInfoList, data, dataIndex) {\n for (var i = 0, len = rangeInfoList.length; i < len; i++) {\n var area = rangeInfoList[i];\n\n if (selectorsByBrushType[area.brushType](dataIndex, data, area.selectors, area)) {\n return true;\n }\n }\n}\n\nfunction getSelectorsByBrushType(seriesModel) {\n var brushSelector = seriesModel.brushSelector;\n\n if (zrUtil.isString(brushSelector)) {\n var sels = [];\n zrUtil.each(selector, function (selectorsByElementType, brushType) {\n sels[brushType] = function (dataIndex, data, selectors, area) {\n var itemLayout = data.getItemLayout(dataIndex);\n return selectorsByElementType[brushSelector](itemLayout, selectors, area);\n };\n });\n return sels;\n } else if (zrUtil.isFunction(brushSelector)) {\n var bSelector = {};\n zrUtil.each(selector, function (sel, brushType) {\n bSelector[brushType] = brushSelector;\n });\n return bSelector;\n }\n\n return brushSelector;\n}\n\nfunction brushModelNotControll(brushModel, seriesIndex) {\n var seriesIndices = brushModel.option.seriesIndex;\n return seriesIndices != null && seriesIndices !== 'all' && (zrUtil.isArray(seriesIndices) ? zrUtil.indexOf(seriesIndices, seriesIndex) < 0 : seriesIndex !== seriesIndices);\n}\n\nfunction bindSelector(area) {\n var selectors = area.selectors = {};\n zrUtil.each(selector[area.brushType], function (selFn, elType) {\n // Do not use function binding or curry for performance.\n selectors[elType] = function (itemLayout) {\n return selFn(itemLayout, selectors, area);\n };\n });\n return area;\n}\n\nvar boundingRectBuilders = {\n lineX: zrUtil.noop,\n lineY: zrUtil.noop,\n rect: function (area) {\n return getBoundingRectFromMinMax(area.range);\n },\n polygon: function (area) {\n var minMax;\n var range = area.range;\n\n for (var i = 0, len = range.length; i < len; i++) {\n minMax = minMax || [[Infinity, -Infinity], [Infinity, -Infinity]];\n var rg = range[i];\n rg[0] < minMax[0][0] && (minMax[0][0] = rg[0]);\n rg[0] > minMax[0][1] && (minMax[0][1] = rg[0]);\n rg[1] < minMax[1][0] && (minMax[1][0] = rg[1]);\n rg[1] > minMax[1][1] && (minMax[1][1] = rg[1]);\n }\n\n return minMax && getBoundingRectFromMinMax(minMax);\n }\n};\n\nfunction getBoundingRectFromMinMax(minMax) {\n return new BoundingRect(minMax[0][0], minMax[1][0], minMax[0][1] - minMax[0][0], minMax[1][1] - minMax[1][0]);\n}","var echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nrequire(\"./effectScatter/EffectScatterSeries\");\n\nrequire(\"./effectScatter/EffectScatterView\");\n\nvar visualSymbol = require(\"../visual/symbol\");\n\nvar layoutPoints = require(\"../layout/points\");\n\necharts.registerVisual(zrUtil.curry(visualSymbol, 'effectScatter', 'circle', null));\necharts.registerLayout(zrUtil.curry(layoutPoints, 'effectScatter'));","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar modelUtil = require(\"../../util/model\");\n\n/**\n * @param {Object} finder contains {seriesIndex, dataIndex, dataIndexInside}\n * @param {module:echarts/model/Global} ecModel\n * @return {Object} {point: [x, y], el: ...} point Will not be null.\n */\nfunction _default(finder, ecModel) {\n var point = [];\n var seriesIndex = finder.seriesIndex;\n var seriesModel;\n\n if (seriesIndex == null || !(seriesModel = ecModel.getSeriesByIndex(seriesIndex))) {\n return {\n point: []\n };\n }\n\n var data = seriesModel.getData();\n var dataIndex = modelUtil.queryDataIndex(data, finder);\n\n if (dataIndex == null || zrUtil.isArray(dataIndex)) {\n return {\n point: []\n };\n }\n\n var el = data.getItemGraphicEl(dataIndex);\n var coordSys = seriesModel.coordinateSystem;\n\n if (seriesModel.getTooltipPosition) {\n point = seriesModel.getTooltipPosition(dataIndex) || [];\n } else if (coordSys && coordSys.dataToPoint) {\n point = coordSys.dataToPoint(data.getValues(zrUtil.map(coordSys.dimensions, function (dim) {\n return seriesModel.coordDimToDataDim(dim)[0];\n }), dataIndex, true)) || [];\n } else if (el) {\n // Use graphic bounding rect\n var rect = el.getBoundingRect().clone();\n rect.applyTransform(el.transform);\n point = [rect.x + rect.width / 2, rect.y + rect.height / 2];\n }\n\n return {\n point: point,\n el: el\n };\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar _symbol = require(\"../../util/symbol\");\n\nvar createSymbol = _symbol.createSymbol;\n\nvar graphic = require(\"../../util/graphic\");\n\nvar _number = require(\"../../util/number\");\n\nvar parsePercent = _number.parsePercent;\n\nvar _labelHelper = require(\"./labelHelper\");\n\nvar findLabelValueDim = _labelHelper.findLabelValueDim;\n\n/**\n * @module echarts/chart/helper/Symbol\n */\nfunction getSymbolSize(data, idx) {\n var symbolSize = data.getItemVisual(idx, 'symbolSize');\n return symbolSize instanceof Array ? symbolSize.slice() : [+symbolSize, +symbolSize];\n}\n\nfunction getScale(symbolSize) {\n return [symbolSize[0] / 2, symbolSize[1] / 2];\n}\n/**\n * @constructor\n * @alias {module:echarts/chart/helper/Symbol}\n * @param {module:echarts/data/List} data\n * @param {number} idx\n * @extends {module:zrender/graphic/Group}\n */\n\n\nfunction SymbolClz(data, idx, seriesScope) {\n graphic.Group.call(this);\n this.updateData(data, idx, seriesScope);\n}\n\nvar symbolProto = SymbolClz.prototype;\n\nfunction driftSymbol(dx, dy) {\n this.parent.drift(dx, dy);\n}\n\nsymbolProto._createSymbol = function (symbolType, data, idx, symbolSize) {\n // Remove paths created before\n this.removeAll();\n var color = data.getItemVisual(idx, 'color'); // var symbolPath = createSymbol(\n // symbolType, -0.5, -0.5, 1, 1, color\n // );\n // If width/height are set too small (e.g., set to 1) on ios10\n // and macOS Sierra, a circle stroke become a rect, no matter what\n // the scale is set. So we set width/height as 2. See #4150.\n\n var symbolPath = createSymbol(symbolType, -1, -1, 2, 2, color);\n symbolPath.attr({\n z2: 100,\n culling: true,\n scale: getScale(symbolSize)\n }); // Rewrite drift method\n\n symbolPath.drift = driftSymbol;\n this._symbolType = symbolType;\n this.add(symbolPath);\n};\n/**\n * Stop animation\n * @param {boolean} toLastFrame\n */\n\n\nsymbolProto.stopSymbolAnimation = function (toLastFrame) {\n this.childAt(0).stopAnimation(toLastFrame);\n};\n/**\n * FIXME:\n * Caution: This method breaks the encapsulation of this module,\n * but it indeed brings convenience. So do not use the method\n * unless you detailedly know all the implements of `Symbol`,\n * especially animation.\n *\n * Get symbol path element.\n */\n\n\nsymbolProto.getSymbolPath = function () {\n return this.childAt(0);\n};\n/**\n * Get scale(aka, current symbol size).\n * Including the change caused by animation\n */\n\n\nsymbolProto.getScale = function () {\n return this.childAt(0).scale;\n};\n/**\n * Highlight symbol\n */\n\n\nsymbolProto.highlight = function () {\n this.childAt(0).trigger('emphasis');\n};\n/**\n * Downplay symbol\n */\n\n\nsymbolProto.downplay = function () {\n this.childAt(0).trigger('normal');\n};\n/**\n * @param {number} zlevel\n * @param {number} z\n */\n\n\nsymbolProto.setZ = function (zlevel, z) {\n var symbolPath = this.childAt(0);\n symbolPath.zlevel = zlevel;\n symbolPath.z = z;\n};\n\nsymbolProto.setDraggable = function (draggable) {\n var symbolPath = this.childAt(0);\n symbolPath.draggable = draggable;\n symbolPath.cursor = draggable ? 'move' : 'pointer';\n};\n/**\n * Update symbol properties\n * @param {module:echarts/data/List} data\n * @param {number} idx\n * @param {Object} [seriesScope]\n * @param {Object} [seriesScope.itemStyle]\n * @param {Object} [seriesScope.hoverItemStyle]\n * @param {Object} [seriesScope.symbolRotate]\n * @param {Object} [seriesScope.symbolOffset]\n * @param {module:echarts/model/Model} [seriesScope.labelModel]\n * @param {module:echarts/model/Model} [seriesScope.hoverLabelModel]\n * @param {boolean} [seriesScope.hoverAnimation]\n * @param {Object} [seriesScope.cursorStyle]\n * @param {module:echarts/model/Model} [seriesScope.itemModel]\n * @param {string} [seriesScope.symbolInnerColor]\n * @param {Object} [seriesScope.fadeIn=false]\n */\n\n\nsymbolProto.updateData = function (data, idx, seriesScope) {\n this.silent = false;\n var symbolType = data.getItemVisual(idx, 'symbol') || 'circle';\n var seriesModel = data.hostModel;\n var symbolSize = getSymbolSize(data, idx);\n var isInit = symbolType !== this._symbolType;\n\n if (isInit) {\n this._createSymbol(symbolType, data, idx, symbolSize);\n } else {\n var symbolPath = this.childAt(0);\n symbolPath.silent = false;\n graphic.updateProps(symbolPath, {\n scale: getScale(symbolSize)\n }, seriesModel, idx);\n }\n\n this._updateCommon(data, idx, symbolSize, seriesScope);\n\n if (isInit) {\n var symbolPath = this.childAt(0);\n var fadeIn = seriesScope && seriesScope.fadeIn;\n var target = {\n scale: symbolPath.scale.slice()\n };\n fadeIn && (target.style = {\n opacity: symbolPath.style.opacity\n });\n symbolPath.scale = [0, 0];\n fadeIn && (symbolPath.style.opacity = 0);\n graphic.initProps(symbolPath, target, seriesModel, idx);\n }\n\n this._seriesModel = seriesModel;\n}; // Update common properties\n\n\nvar normalStyleAccessPath = ['itemStyle', 'normal'];\nvar emphasisStyleAccessPath = ['itemStyle', 'emphasis'];\nvar normalLabelAccessPath = ['label', 'normal'];\nvar emphasisLabelAccessPath = ['label', 'emphasis'];\n/**\n * @param {module:echarts/data/List} data\n * @param {number} idx\n * @param {Array.} symbolSize\n * @param {Object} [seriesScope]\n */\n\nsymbolProto._updateCommon = function (data, idx, symbolSize, seriesScope) {\n var symbolPath = this.childAt(0);\n var seriesModel = data.hostModel;\n var color = data.getItemVisual(idx, 'color'); // Reset style\n\n if (symbolPath.type !== 'image') {\n symbolPath.useStyle({\n strokeNoScale: true\n });\n }\n\n var itemStyle = seriesScope && seriesScope.itemStyle;\n var hoverItemStyle = seriesScope && seriesScope.hoverItemStyle;\n var symbolRotate = seriesScope && seriesScope.symbolRotate;\n var symbolOffset = seriesScope && seriesScope.symbolOffset;\n var labelModel = seriesScope && seriesScope.labelModel;\n var hoverLabelModel = seriesScope && seriesScope.hoverLabelModel;\n var hoverAnimation = seriesScope && seriesScope.hoverAnimation;\n var cursorStyle = seriesScope && seriesScope.cursorStyle;\n\n if (!seriesScope || data.hasItemOption) {\n var itemModel = seriesScope && seriesScope.itemModel ? seriesScope.itemModel : data.getItemModel(idx); // Color must be excluded.\n // Because symbol provide setColor individually to set fill and stroke\n\n itemStyle = itemModel.getModel(normalStyleAccessPath).getItemStyle(['color']);\n hoverItemStyle = itemModel.getModel(emphasisStyleAccessPath).getItemStyle();\n symbolRotate = itemModel.getShallow('symbolRotate');\n symbolOffset = itemModel.getShallow('symbolOffset');\n labelModel = itemModel.getModel(normalLabelAccessPath);\n hoverLabelModel = itemModel.getModel(emphasisLabelAccessPath);\n hoverAnimation = itemModel.getShallow('hoverAnimation');\n cursorStyle = itemModel.getShallow('cursor');\n } else {\n hoverItemStyle = zrUtil.extend({}, hoverItemStyle);\n }\n\n var elStyle = symbolPath.style;\n symbolPath.attr('rotation', (symbolRotate || 0) * Math.PI / 180 || 0);\n\n if (symbolOffset) {\n symbolPath.attr('position', [parsePercent(symbolOffset[0], symbolSize[0]), parsePercent(symbolOffset[1], symbolSize[1])]);\n }\n\n cursorStyle && symbolPath.attr('cursor', cursorStyle); // PENDING setColor before setStyle!!!\n\n symbolPath.setColor(color, seriesScope && seriesScope.symbolInnerColor);\n symbolPath.setStyle(itemStyle);\n var opacity = data.getItemVisual(idx, 'opacity');\n\n if (opacity != null) {\n elStyle.opacity = opacity;\n }\n\n var useNameLabel = seriesScope && seriesScope.useNameLabel;\n var valueDim = !useNameLabel && findLabelValueDim(data);\n\n if (useNameLabel || valueDim != null) {\n graphic.setLabelStyle(elStyle, hoverItemStyle, labelModel, hoverLabelModel, {\n labelFetcher: seriesModel,\n labelDataIndex: idx,\n defaultText: useNameLabel ? data.getName(idx) : data.get(valueDim, idx),\n isRectText: true,\n autoColor: color\n });\n }\n\n symbolPath.off('mouseover').off('mouseout').off('emphasis').off('normal');\n symbolPath.hoverStyle = hoverItemStyle; // FIXME\n // Do not use symbol.trigger('emphasis'), but use symbol.highlight() instead.\n\n graphic.setHoverStyle(symbolPath);\n var scale = getScale(symbolSize);\n\n if (hoverAnimation && seriesModel.isAnimationEnabled()) {\n var onEmphasis = function () {\n var ratio = scale[1] / scale[0];\n this.animateTo({\n scale: [Math.max(scale[0] * 1.1, scale[0] + 3), Math.max(scale[1] * 1.1, scale[1] + 3 * ratio)]\n }, 400, 'elasticOut');\n };\n\n var onNormal = function () {\n this.animateTo({\n scale: scale\n }, 400, 'elasticOut');\n };\n\n symbolPath.on('mouseover', onEmphasis).on('mouseout', onNormal).on('emphasis', onEmphasis).on('normal', onNormal);\n }\n};\n/**\n * @param {Function} cb\n * @param {Object} [opt]\n * @param {Object} [opt.keepLabel=true]\n */\n\n\nsymbolProto.fadeOut = function (cb, opt) {\n var symbolPath = this.childAt(0); // Avoid mistaken hover when fading out\n\n this.silent = symbolPath.silent = true; // Not show text when animating\n\n !(opt && opt.keepLabel) && (symbolPath.style.text = null);\n graphic.updateProps(symbolPath, {\n style: {\n opacity: 0\n },\n scale: [0, 0]\n }, this._seriesModel, this.dataIndex, cb);\n};\n\nzrUtil.inherits(SymbolClz, graphic.Group);\nvar _default = SymbolClz;\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar symbolUtil = require(\"../../util/symbol\");\n\nfunction normalizeSymbolSize(symbolSize) {\n if (!zrUtil.isArray(symbolSize)) {\n symbolSize = [+symbolSize, +symbolSize];\n }\n\n return symbolSize;\n}\n\nvar _default = echarts.extendChartView({\n type: 'radar',\n render: function (seriesModel, ecModel, api) {\n var polar = seriesModel.coordinateSystem;\n var group = this.group;\n var data = seriesModel.getData();\n var oldData = this._data;\n\n function createSymbol(data, idx) {\n var symbolType = data.getItemVisual(idx, 'symbol') || 'circle';\n var color = data.getItemVisual(idx, 'color');\n\n if (symbolType === 'none') {\n return;\n }\n\n var symbolSize = normalizeSymbolSize(data.getItemVisual(idx, 'symbolSize'));\n var symbolPath = symbolUtil.createSymbol(symbolType, -1, -1, 2, 2, color);\n symbolPath.attr({\n style: {\n strokeNoScale: true\n },\n z2: 100,\n scale: [symbolSize[0] / 2, symbolSize[1] / 2]\n });\n return symbolPath;\n }\n\n function updateSymbols(oldPoints, newPoints, symbolGroup, data, idx, isInit) {\n // Simply rerender all\n symbolGroup.removeAll();\n\n for (var i = 0; i < newPoints.length - 1; i++) {\n var symbolPath = createSymbol(data, idx);\n\n if (symbolPath) {\n symbolPath.__dimIdx = i;\n\n if (oldPoints[i]) {\n symbolPath.attr('position', oldPoints[i]);\n graphic[isInit ? 'initProps' : 'updateProps'](symbolPath, {\n position: newPoints[i]\n }, seriesModel, idx);\n } else {\n symbolPath.attr('position', newPoints[i]);\n }\n\n symbolGroup.add(symbolPath);\n }\n }\n }\n\n function getInitialPoints(points) {\n return zrUtil.map(points, function (pt) {\n return [polar.cx, polar.cy];\n });\n }\n\n data.diff(oldData).add(function (idx) {\n var points = data.getItemLayout(idx);\n\n if (!points) {\n return;\n }\n\n var polygon = new graphic.Polygon();\n var polyline = new graphic.Polyline();\n var target = {\n shape: {\n points: points\n }\n };\n polygon.shape.points = getInitialPoints(points);\n polyline.shape.points = getInitialPoints(points);\n graphic.initProps(polygon, target, seriesModel, idx);\n graphic.initProps(polyline, target, seriesModel, idx);\n var itemGroup = new graphic.Group();\n var symbolGroup = new graphic.Group();\n itemGroup.add(polyline);\n itemGroup.add(polygon);\n itemGroup.add(symbolGroup);\n updateSymbols(polyline.shape.points, points, symbolGroup, data, idx, true);\n data.setItemGraphicEl(idx, itemGroup);\n }).update(function (newIdx, oldIdx) {\n var itemGroup = oldData.getItemGraphicEl(oldIdx);\n var polyline = itemGroup.childAt(0);\n var polygon = itemGroup.childAt(1);\n var symbolGroup = itemGroup.childAt(2);\n var target = {\n shape: {\n points: data.getItemLayout(newIdx)\n }\n };\n\n if (!target.shape.points) {\n return;\n }\n\n updateSymbols(polyline.shape.points, target.shape.points, symbolGroup, data, newIdx, false);\n graphic.updateProps(polyline, target, seriesModel);\n graphic.updateProps(polygon, target, seriesModel);\n data.setItemGraphicEl(newIdx, itemGroup);\n }).remove(function (idx) {\n group.remove(oldData.getItemGraphicEl(idx));\n }).execute();\n data.eachItemGraphicEl(function (itemGroup, idx) {\n var itemModel = data.getItemModel(idx);\n var polyline = itemGroup.childAt(0);\n var polygon = itemGroup.childAt(1);\n var symbolGroup = itemGroup.childAt(2);\n var color = data.getItemVisual(idx, 'color');\n group.add(itemGroup);\n polyline.useStyle(zrUtil.defaults(itemModel.getModel('lineStyle.normal').getLineStyle(), {\n fill: 'none',\n stroke: color\n }));\n polyline.hoverStyle = itemModel.getModel('lineStyle.emphasis').getLineStyle();\n var areaStyleModel = itemModel.getModel('areaStyle.normal');\n var hoverAreaStyleModel = itemModel.getModel('areaStyle.emphasis');\n var polygonIgnore = areaStyleModel.isEmpty() && areaStyleModel.parentModel.isEmpty();\n var hoverPolygonIgnore = hoverAreaStyleModel.isEmpty() && hoverAreaStyleModel.parentModel.isEmpty();\n hoverPolygonIgnore = hoverPolygonIgnore && polygonIgnore;\n polygon.ignore = polygonIgnore;\n polygon.useStyle(zrUtil.defaults(areaStyleModel.getAreaStyle(), {\n fill: color,\n opacity: 0.7\n }));\n polygon.hoverStyle = hoverAreaStyleModel.getAreaStyle();\n var itemStyle = itemModel.getModel('itemStyle.normal').getItemStyle(['color']);\n var itemHoverStyle = itemModel.getModel('itemStyle.emphasis').getItemStyle();\n var labelModel = itemModel.getModel('label.normal');\n var labelHoverModel = itemModel.getModel('label.emphasis');\n symbolGroup.eachChild(function (symbolPath) {\n symbolPath.setStyle(itemStyle);\n symbolPath.hoverStyle = zrUtil.clone(itemHoverStyle);\n graphic.setLabelStyle(symbolPath.style, symbolPath.hoverStyle, labelModel, labelHoverModel, {\n labelFetcher: data.hostModel,\n labelDataIndex: idx,\n labelDimIndex: symbolPath.__dimIdx,\n defaultText: data.get(data.dimensions[symbolPath.__dimIdx], idx),\n autoColor: color,\n isRectText: true\n });\n });\n\n function onEmphasis() {\n polygon.attr('ignore', hoverPolygonIgnore);\n }\n\n function onNormal() {\n polygon.attr('ignore', polygonIgnore);\n }\n\n itemGroup.off('mouseover').off('mouseout').off('normal').off('emphasis');\n itemGroup.on('emphasis', onEmphasis).on('mouseover', onEmphasis).on('normal', onNormal).on('mouseout', onNormal);\n graphic.setHoverStyle(itemGroup);\n });\n this._data = data;\n },\n remove: function () {\n this.group.removeAll();\n this._data = null;\n },\n dispose: function () {}\n});\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar AxisBuilder = require(\"./AxisBuilder\");\n\nvar AxisView = require(\"./AxisView\");\n\nvar axisBuilderAttrs = ['axisLine', 'axisTickLabel', 'axisName'];\nvar selfBuilderAttrs = ['splitLine', 'splitArea'];\n\nvar _default = AxisView.extend({\n type: 'radiusAxis',\n axisPointerClass: 'PolarAxisPointer',\n render: function (radiusAxisModel, ecModel) {\n this.group.removeAll();\n\n if (!radiusAxisModel.get('show')) {\n return;\n }\n\n var radiusAxis = radiusAxisModel.axis;\n var polar = radiusAxis.polar;\n var angleAxis = polar.getAngleAxis();\n var ticksCoords = radiusAxis.getTicksCoords();\n var axisAngle = angleAxis.getExtent()[0];\n var radiusExtent = radiusAxis.getExtent();\n var layout = layoutAxis(polar, radiusAxisModel, axisAngle);\n var axisBuilder = new AxisBuilder(radiusAxisModel, layout);\n zrUtil.each(axisBuilderAttrs, axisBuilder.add, axisBuilder);\n this.group.add(axisBuilder.getGroup());\n zrUtil.each(selfBuilderAttrs, function (name) {\n if (radiusAxisModel.get(name + '.show') && !radiusAxis.scale.isBlank()) {\n this['_' + name](radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords);\n }\n }, this);\n },\n\n /**\n * @private\n */\n _splitLine: function (radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords) {\n var splitLineModel = radiusAxisModel.getModel('splitLine');\n var lineStyleModel = splitLineModel.getModel('lineStyle');\n var lineColors = lineStyleModel.get('color');\n var lineCount = 0;\n lineColors = lineColors instanceof Array ? lineColors : [lineColors];\n var splitLines = [];\n\n for (var i = 0; i < ticksCoords.length; i++) {\n var colorIndex = lineCount++ % lineColors.length;\n splitLines[colorIndex] = splitLines[colorIndex] || [];\n splitLines[colorIndex].push(new graphic.Circle({\n shape: {\n cx: polar.cx,\n cy: polar.cy,\n r: ticksCoords[i]\n },\n silent: true\n }));\n } // Simple optimization\n // Batching the lines if color are the same\n\n\n for (var i = 0; i < splitLines.length; i++) {\n this.group.add(graphic.mergePath(splitLines[i], {\n style: zrUtil.defaults({\n stroke: lineColors[i % lineColors.length],\n fill: null\n }, lineStyleModel.getLineStyle()),\n silent: true\n }));\n }\n },\n\n /**\n * @private\n */\n _splitArea: function (radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords) {\n var splitAreaModel = radiusAxisModel.getModel('splitArea');\n var areaStyleModel = splitAreaModel.getModel('areaStyle');\n var areaColors = areaStyleModel.get('color');\n var lineCount = 0;\n areaColors = areaColors instanceof Array ? areaColors : [areaColors];\n var splitAreas = [];\n var prevRadius = ticksCoords[0];\n\n for (var i = 1; i < ticksCoords.length; i++) {\n var colorIndex = lineCount++ % areaColors.length;\n splitAreas[colorIndex] = splitAreas[colorIndex] || [];\n splitAreas[colorIndex].push(new graphic.Sector({\n shape: {\n cx: polar.cx,\n cy: polar.cy,\n r0: prevRadius,\n r: ticksCoords[i],\n startAngle: 0,\n endAngle: Math.PI * 2\n },\n silent: true\n }));\n prevRadius = ticksCoords[i];\n } // Simple optimization\n // Batching the lines if color are the same\n\n\n for (var i = 0; i < splitAreas.length; i++) {\n this.group.add(graphic.mergePath(splitAreas[i], {\n style: zrUtil.defaults({\n fill: areaColors[i % areaColors.length]\n }, areaStyleModel.getAreaStyle()),\n silent: true\n }));\n }\n }\n});\n/**\n * @inner\n */\n\n\nfunction layoutAxis(polar, radiusAxisModel, axisAngle) {\n return {\n position: [polar.cx, polar.cy],\n rotation: axisAngle / 180 * Math.PI,\n labelDirection: -1,\n tickDirection: -1,\n nameDirection: 1,\n labelRotate: radiusAxisModel.getModel('axisLabel').get('rotate'),\n // Over splitLine and splitArea\n z2: 1\n };\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar createListFromArray = require(\"./chart/helper/createListFromArray\");\n\nvar axisHelper = require(\"./coord/axisHelper\");\n\nvar axisModelCommonMixin = require(\"./coord/axisModelCommonMixin\");\n\nvar Model = require(\"./model/Model\");\n\nvar _completeDimensions = require(\"./data/helper/completeDimensions\");\n\nexports.completeDimensions = _completeDimensions;\n\nvar _symbol = require(\"./util/symbol\");\n\nexports.createSymbol = _symbol.createSymbol;\n\n/**\n * Create a muti dimension List structure from seriesModel.\n * @param {module:echarts/model/Model} seriesModel\n * @return {module:echarts/data/List} list\n */\nfunction createList(seriesModel) {\n var data = seriesModel.get('data');\n return createListFromArray(data, seriesModel, seriesModel.ecModel);\n}\n/**\n * @see {module:echarts/data/helper/completeDimensions}\n */\n\n\n/**\n * Create scale\n * @param {Array.} dataExtent\n * @param {Object|module:echarts/Model} option\n */\nfunction createScale(dataExtent, option) {\n var axisModel = option;\n\n if (!(option instanceof Model)) {\n axisModel = new Model(option);\n zrUtil.mixin(axisModel, axisModelCommonMixin);\n }\n\n var scale = axisHelper.createScaleByModel(axisModel);\n scale.setExtent(dataExtent[0], dataExtent[1]);\n axisHelper.niceScaleExtent(scale, axisModel);\n return scale;\n}\n/**\n * Mixin common methods to axis model,\n *\n * Inlcude methods\n * `getFormattedLabels() => Array.`\n * `getCategories() => Array.`\n * `getMin(origin: boolean) => number`\n * `getMax(origin: boolean) => number`\n * `getNeedCrossZero() => boolean`\n * `setRange(start: number, end: number)`\n * `resetRange()`\n */\n\n\nfunction mixinAxisModelCommonMethods(Model) {\n zrUtil.mixin(Model, axisModelCommonMixin);\n}\n\nexports.createList = createList;\nexports.createScale = createScale;\nexports.mixinAxisModelCommonMethods = mixinAxisModelCommonMethods;","var echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nrequire(\"./scatter/ScatterSeries\");\n\nrequire(\"./scatter/ScatterView\");\n\nvar visualSymbol = require(\"../visual/symbol\");\n\nvar layoutPoints = require(\"../layout/points\");\n\nrequire(\"../component/gridSimple\");\n\n// In case developer forget to include grid component\necharts.registerVisual(zrUtil.curry(visualSymbol, 'scatter', 'circle', null));\necharts.registerLayout(zrUtil.curry(layoutPoints, 'scatter'));","/**\n * 3x2矩阵操作类\n * @exports zrender/tool/matrix\n */\nvar ArrayCtor = typeof Float32Array === 'undefined' ? Array : Float32Array;\n/**\n * 创建一个单位矩阵\n * @return {Float32Array|Array.}\n */\n\nfunction create() {\n var out = new ArrayCtor(6);\n identity(out);\n return out;\n}\n/**\n * 设置矩阵为单位矩阵\n * @param {Float32Array|Array.} out\n */\n\n\nfunction identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n out[4] = 0;\n out[5] = 0;\n return out;\n}\n/**\n * 复制矩阵\n * @param {Float32Array|Array.} out\n * @param {Float32Array|Array.} m\n */\n\n\nfunction copy(out, m) {\n out[0] = m[0];\n out[1] = m[1];\n out[2] = m[2];\n out[3] = m[3];\n out[4] = m[4];\n out[5] = m[5];\n return out;\n}\n/**\n * 矩阵相乘\n * @param {Float32Array|Array.} out\n * @param {Float32Array|Array.} m1\n * @param {Float32Array|Array.} m2\n */\n\n\nfunction mul(out, m1, m2) {\n // Consider matrix.mul(m, m2, m);\n // where out is the same as m2.\n // So use temp variable to escape error.\n var out0 = m1[0] * m2[0] + m1[2] * m2[1];\n var out1 = m1[1] * m2[0] + m1[3] * m2[1];\n var out2 = m1[0] * m2[2] + m1[2] * m2[3];\n var out3 = m1[1] * m2[2] + m1[3] * m2[3];\n var out4 = m1[0] * m2[4] + m1[2] * m2[5] + m1[4];\n var out5 = m1[1] * m2[4] + m1[3] * m2[5] + m1[5];\n out[0] = out0;\n out[1] = out1;\n out[2] = out2;\n out[3] = out3;\n out[4] = out4;\n out[5] = out5;\n return out;\n}\n/**\n * 平移变换\n * @param {Float32Array|Array.} out\n * @param {Float32Array|Array.} a\n * @param {Float32Array|Array.} v\n */\n\n\nfunction translate(out, a, v) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4] + v[0];\n out[5] = a[5] + v[1];\n return out;\n}\n/**\n * 旋转变换\n * @param {Float32Array|Array.} out\n * @param {Float32Array|Array.} a\n * @param {number} rad\n */\n\n\nfunction rotate(out, a, rad) {\n var aa = a[0];\n var ac = a[2];\n var atx = a[4];\n var ab = a[1];\n var ad = a[3];\n var aty = a[5];\n var st = Math.sin(rad);\n var ct = Math.cos(rad);\n out[0] = aa * ct + ab * st;\n out[1] = -aa * st + ab * ct;\n out[2] = ac * ct + ad * st;\n out[3] = -ac * st + ct * ad;\n out[4] = ct * atx + st * aty;\n out[5] = ct * aty - st * atx;\n return out;\n}\n/**\n * 缩放变换\n * @param {Float32Array|Array.} out\n * @param {Float32Array|Array.} a\n * @param {Float32Array|Array.} v\n */\n\n\nfunction scale(out, a, v) {\n var vx = v[0];\n var vy = v[1];\n out[0] = a[0] * vx;\n out[1] = a[1] * vy;\n out[2] = a[2] * vx;\n out[3] = a[3] * vy;\n out[4] = a[4] * vx;\n out[5] = a[5] * vy;\n return out;\n}\n/**\n * 求逆矩阵\n * @param {Float32Array|Array.} out\n * @param {Float32Array|Array.} a\n */\n\n\nfunction invert(out, a) {\n var aa = a[0];\n var ac = a[2];\n var atx = a[4];\n var ab = a[1];\n var ad = a[3];\n var aty = a[5];\n var det = aa * ad - ab * ac;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = ad * det;\n out[1] = -ab * det;\n out[2] = -ac * det;\n out[3] = aa * det;\n out[4] = (ac * aty - ad * atx) * det;\n out[5] = (ab * atx - aa * aty) * det;\n return out;\n}\n\nexports.create = create;\nexports.identity = identity;\nexports.copy = copy;\nexports.mul = mul;\nexports.translate = translate;\nexports.rotate = rotate;\nexports.scale = scale;\nexports.invert = invert;","var echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar axisDefault = require(\"../axisDefault\");\n\nvar Model = require(\"../../model/Model\");\n\nvar axisModelCommonMixin = require(\"../axisModelCommonMixin\");\n\nvar valueAxisDefault = axisDefault.valueAxis;\n\nfunction defaultsShow(opt, show) {\n return zrUtil.defaults({\n show: show\n }, opt);\n}\n\nvar RadarModel = echarts.extendComponentModel({\n type: 'radar',\n optionUpdated: function () {\n var boundaryGap = this.get('boundaryGap');\n var splitNumber = this.get('splitNumber');\n var scale = this.get('scale');\n var axisLine = this.get('axisLine');\n var axisTick = this.get('axisTick');\n var axisLabel = this.get('axisLabel');\n var nameTextStyle = this.get('name');\n var showName = this.get('name.show');\n var nameFormatter = this.get('name.formatter');\n var nameGap = this.get('nameGap');\n var triggerEvent = this.get('triggerEvent');\n var indicatorModels = zrUtil.map(this.get('indicator') || [], function (indicatorOpt) {\n // PENDING\n if (indicatorOpt.max != null && indicatorOpt.max > 0 && !indicatorOpt.min) {\n indicatorOpt.min = 0;\n } else if (indicatorOpt.min != null && indicatorOpt.min < 0 && !indicatorOpt.max) {\n indicatorOpt.max = 0;\n }\n\n var iNameTextStyle = nameTextStyle;\n\n if (indicatorOpt.color != null) {\n iNameTextStyle = zrUtil.defaults({\n color: indicatorOpt.color\n }, nameTextStyle);\n } // Use same configuration\n\n\n indicatorOpt = zrUtil.merge(zrUtil.clone(indicatorOpt), {\n boundaryGap: boundaryGap,\n splitNumber: splitNumber,\n scale: scale,\n axisLine: axisLine,\n axisTick: axisTick,\n axisLabel: axisLabel,\n // Competitable with 2 and use text\n name: indicatorOpt.text,\n nameLocation: 'end',\n nameGap: nameGap,\n // min: 0,\n nameTextStyle: iNameTextStyle,\n triggerEvent: triggerEvent\n }, false);\n\n if (!showName) {\n indicatorOpt.name = '';\n }\n\n if (typeof nameFormatter === 'string') {\n var indName = indicatorOpt.name;\n indicatorOpt.name = nameFormatter.replace('{value}', indName != null ? indName : '');\n } else if (typeof nameFormatter === 'function') {\n indicatorOpt.name = nameFormatter(indicatorOpt.name, indicatorOpt);\n }\n\n var model = zrUtil.extend(new Model(indicatorOpt, null, this.ecModel), axisModelCommonMixin); // For triggerEvent.\n\n model.mainType = 'radar';\n model.componentIndex = this.componentIndex;\n return model;\n }, this);\n\n this.getIndicatorModels = function () {\n return indicatorModels;\n };\n },\n defaultOption: {\n zlevel: 0,\n z: 0,\n center: ['50%', '50%'],\n radius: '75%',\n startAngle: 90,\n name: {\n show: true // formatter: null\n // textStyle: {}\n\n },\n boundaryGap: [0, 0],\n splitNumber: 5,\n nameGap: 15,\n scale: false,\n // Polygon or circle\n shape: 'polygon',\n axisLine: zrUtil.merge({\n lineStyle: {\n color: '#bbb'\n }\n }, valueAxisDefault.axisLine),\n axisLabel: defaultsShow(valueAxisDefault.axisLabel, false),\n axisTick: defaultsShow(valueAxisDefault.axisTick, false),\n splitLine: defaultsShow(valueAxisDefault.splitLine, true),\n splitArea: defaultsShow(valueAxisDefault.splitArea, true),\n // {text, min, max}\n indicator: []\n }\n});\nvar _default = RadarModel;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar coordsOffsetMap = {\n '南海诸岛': [32, 80],\n // 全国\n '广东': [0, -10],\n '香港': [10, 5],\n '澳门': [-10, 10],\n //'北京': [-10, 0],\n '天津': [5, 5]\n};\n\nfunction _default(geo) {\n zrUtil.each(geo.regions, function (region) {\n var coordFix = coordsOffsetMap[region.name];\n\n if (coordFix) {\n var cp = region.center;\n cp[0] += coordFix[0] / 10.5;\n cp[1] += -coordFix[1] / (10.5 / 0.75);\n }\n });\n}\n\nmodule.exports = _default;","var BaseBarSeries = require(\"./BaseBarSeries\");\n\nvar _default = BaseBarSeries.extend({\n type: 'series.bar',\n dependencies: ['grid', 'polar'],\n brushSelector: 'rect'\n});\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar env = require(\"zrender/lib/core/env\");\n\nvar modelUtil = require(\"../../util/model\");\n\nvar get = modelUtil.makeGetter();\nvar each = zrUtil.each;\n/**\n * @param {string} key\n * @param {module:echarts/ExtensionAPI} api\n * @param {Function} handler\n * param: {string} currTrigger\n * param: {Array.} point\n */\n\nfunction register(key, api, handler) {\n if (env.node) {\n return;\n }\n\n var zr = api.getZr();\n get(zr).records || (get(zr).records = {});\n initGlobalListeners(zr, api);\n var record = get(zr).records[key] || (get(zr).records[key] = {});\n record.handler = handler;\n}\n\nfunction initGlobalListeners(zr, api) {\n if (get(zr).initialized) {\n return;\n }\n\n get(zr).initialized = true;\n useHandler('click', zrUtil.curry(doEnter, 'click'));\n useHandler('mousemove', zrUtil.curry(doEnter, 'mousemove')); // useHandler('mouseout', onLeave);\n\n useHandler('globalout', onLeave);\n\n function useHandler(eventType, cb) {\n zr.on(eventType, function (e) {\n var dis = makeDispatchAction(api);\n each(get(zr).records, function (record) {\n record && cb(record, e, dis.dispatchAction);\n });\n dispatchTooltipFinally(dis.pendings, api);\n });\n }\n}\n\nfunction dispatchTooltipFinally(pendings, api) {\n var showLen = pendings.showTip.length;\n var hideLen = pendings.hideTip.length;\n var actuallyPayload;\n\n if (showLen) {\n actuallyPayload = pendings.showTip[showLen - 1];\n } else if (hideLen) {\n actuallyPayload = pendings.hideTip[hideLen - 1];\n }\n\n if (actuallyPayload) {\n actuallyPayload.dispatchAction = null;\n api.dispatchAction(actuallyPayload);\n }\n}\n\nfunction onLeave(record, e, dispatchAction) {\n record.handler('leave', null, dispatchAction);\n}\n\nfunction doEnter(currTrigger, record, e, dispatchAction) {\n record.handler(currTrigger, e, dispatchAction);\n}\n\nfunction makeDispatchAction(api) {\n var pendings = {\n showTip: [],\n hideTip: []\n }; // FIXME\n // better approach?\n // 'showTip' and 'hideTip' can be triggered by axisPointer and tooltip,\n // which may be conflict, (axisPointer call showTip but tooltip call hideTip);\n // So we have to add \"final stage\" to merge those dispatched actions.\n\n var dispatchAction = function (payload) {\n var pendingList = pendings[payload.type];\n\n if (pendingList) {\n pendingList.push(payload);\n } else {\n payload.dispatchAction = dispatchAction;\n api.dispatchAction(payload);\n }\n };\n\n return {\n dispatchAction: dispatchAction,\n pendings: pendings\n };\n}\n/**\n * @param {string} key\n * @param {module:echarts/ExtensionAPI} api\n */\n\n\nfunction unregister(key, api) {\n if (env.node) {\n return;\n }\n\n var zr = api.getZr();\n var record = (get(zr).records || {})[key];\n\n if (record) {\n get(zr).records[key] = null;\n }\n}\n\nexports.register = register;\nexports.unregister = unregister;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar Scale = require(\"./Scale\");\n\n/**\n * Linear continuous scale\n * @module echarts/coord/scale/Ordinal\n *\n * http://en.wikipedia.org/wiki/Level_of_measurement\n */\n// FIXME only one data\nvar scaleProto = Scale.prototype;\nvar OrdinalScale = Scale.extend({\n type: 'ordinal',\n init: function (data, extent) {\n this._data = data;\n this._extent = extent || [0, data.length - 1];\n },\n parse: function (val) {\n return typeof val === 'string' ? zrUtil.indexOf(this._data, val) // val might be float.\n : Math.round(val);\n },\n contain: function (rank) {\n rank = this.parse(rank);\n return scaleProto.contain.call(this, rank) && this._data[rank] != null;\n },\n\n /**\n * Normalize given rank or name to linear [0, 1]\n * @param {number|string} [val]\n * @return {number}\n */\n normalize: function (val) {\n return scaleProto.normalize.call(this, this.parse(val));\n },\n scale: function (val) {\n return Math.round(scaleProto.scale.call(this, val));\n },\n\n /**\n * @return {Array}\n */\n getTicks: function () {\n var ticks = [];\n var extent = this._extent;\n var rank = extent[0];\n\n while (rank <= extent[1]) {\n ticks.push(rank);\n rank++;\n }\n\n return ticks;\n },\n\n /**\n * Get item on rank n\n * @param {number} n\n * @return {string}\n */\n getLabel: function (n) {\n return this._data[n];\n },\n\n /**\n * @return {number}\n */\n count: function () {\n return this._extent[1] - this._extent[0] + 1;\n },\n\n /**\n * @override\n */\n unionExtentFromData: function (data, dim) {\n this.unionExtent(data.getDataExtent(dim, false));\n },\n niceTicks: zrUtil.noop,\n niceExtent: zrUtil.noop\n});\n/**\n * @return {module:echarts/scale/Time}\n */\n\nOrdinalScale.create = function () {\n return new OrdinalScale();\n};\n\nvar _default = OrdinalScale;\nmodule.exports = _default;","var MarkerModel = require(\"./MarkerModel\");\n\nvar _default = MarkerModel.extend({\n type: 'markLine',\n defaultOption: {\n zlevel: 0,\n z: 5,\n symbol: ['circle', 'arrow'],\n symbolSize: [8, 16],\n //symbolRotate: 0,\n precision: 2,\n tooltip: {\n trigger: 'item'\n },\n label: {\n normal: {\n show: true,\n position: 'end'\n },\n emphasis: {\n show: true\n }\n },\n lineStyle: {\n normal: {\n type: 'dashed'\n },\n emphasis: {\n width: 3\n }\n },\n animationEasing: 'linear'\n }\n});\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar ChartView = require(\"../../view/Chart\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar _whiskerBoxCommon = require(\"../helper/whiskerBoxCommon\");\n\nvar viewMixin = _whiskerBoxCommon.viewMixin;\nvar CandlestickView = ChartView.extend({\n type: 'candlestick',\n getStyleUpdater: function () {\n return updateStyle;\n },\n dispose: zrUtil.noop\n});\nzrUtil.mixin(CandlestickView, viewMixin, true); // Update common properties\n\nvar normalStyleAccessPath = ['itemStyle', 'normal'];\nvar emphasisStyleAccessPath = ['itemStyle', 'emphasis'];\n\nfunction updateStyle(itemGroup, data, idx) {\n var itemModel = data.getItemModel(idx);\n var normalItemStyleModel = itemModel.getModel(normalStyleAccessPath);\n var color = data.getItemVisual(idx, 'color');\n var borderColor = data.getItemVisual(idx, 'borderColor') || color; // Color must be excluded.\n // Because symbol provide setColor individually to set fill and stroke\n\n var itemStyle = normalItemStyleModel.getItemStyle(['color', 'color0', 'borderColor', 'borderColor0']);\n var whiskerEl = itemGroup.childAt(itemGroup.whiskerIndex);\n whiskerEl.useStyle(itemStyle);\n whiskerEl.style.stroke = borderColor;\n var bodyEl = itemGroup.childAt(itemGroup.bodyIndex);\n bodyEl.useStyle(itemStyle);\n bodyEl.style.fill = color;\n bodyEl.style.stroke = borderColor;\n var hoverStyle = itemModel.getModel(emphasisStyleAccessPath).getItemStyle();\n graphic.setHoverStyle(itemGroup, hoverStyle);\n}\n\nvar _default = CandlestickView;\nmodule.exports = _default;","var zrUtil = require(\"../core/util\");\n\nvar Style = require(\"./Style\");\n\nvar Element = require(\"../Element\");\n\nvar RectText = require(\"./mixin/RectText\");\n\n/**\n * 可绘制的图形基类\n * Base class of all displayable graphic objects\n * @module zrender/graphic/Displayable\n */\n\n/**\n * @alias module:zrender/graphic/Displayable\n * @extends module:zrender/Element\n * @extends module:zrender/graphic/mixin/RectText\n */\nfunction Displayable(opts) {\n opts = opts || {};\n Element.call(this, opts); // Extend properties\n\n for (var name in opts) {\n if (opts.hasOwnProperty(name) && name !== 'style') {\n this[name] = opts[name];\n }\n }\n /**\n * @type {module:zrender/graphic/Style}\n */\n\n\n this.style = new Style(opts.style, this);\n this._rect = null; // Shapes for cascade clipping.\n\n this.__clipPaths = []; // FIXME Stateful must be mixined after style is setted\n // Stateful.call(this, opts);\n}\n\nDisplayable.prototype = {\n constructor: Displayable,\n type: 'displayable',\n\n /**\n * Displayable 是否为脏,Painter 中会根据该标记判断是否需要是否需要重新绘制\n * Dirty flag. From which painter will determine if this displayable object needs brush\n * @name module:zrender/graphic/Displayable#__dirty\n * @type {boolean}\n */\n __dirty: true,\n\n /**\n * 图形是否可见,为true时不绘制图形,但是仍能触发鼠标事件\n * If ignore drawing of the displayable object. Mouse event will still be triggered\n * @name module:/zrender/graphic/Displayable#invisible\n * @type {boolean}\n * @default false\n */\n invisible: false,\n\n /**\n * @name module:/zrender/graphic/Displayable#z\n * @type {number}\n * @default 0\n */\n z: 0,\n\n /**\n * @name module:/zrender/graphic/Displayable#z\n * @type {number}\n * @default 0\n */\n z2: 0,\n\n /**\n * z层level,决定绘画在哪层canvas中\n * @name module:/zrender/graphic/Displayable#zlevel\n * @type {number}\n * @default 0\n */\n zlevel: 0,\n\n /**\n * 是否可拖拽\n * @name module:/zrender/graphic/Displayable#draggable\n * @type {boolean}\n * @default false\n */\n draggable: false,\n\n /**\n * 是否正在拖拽\n * @name module:/zrender/graphic/Displayable#draggable\n * @type {boolean}\n * @default false\n */\n dragging: false,\n\n /**\n * 是否相应鼠标事件\n * @name module:/zrender/graphic/Displayable#silent\n * @type {boolean}\n * @default false\n */\n silent: false,\n\n /**\n * If enable culling\n * @type {boolean}\n * @default false\n */\n culling: false,\n\n /**\n * Mouse cursor when hovered\n * @name module:/zrender/graphic/Displayable#cursor\n * @type {string}\n */\n cursor: 'pointer',\n\n /**\n * If hover area is bounding rect\n * @name module:/zrender/graphic/Displayable#rectHover\n * @type {string}\n */\n rectHover: false,\n\n /**\n * Render the element progressively when the value >= 0,\n * usefull for large data.\n * @type {number}\n */\n progressive: -1,\n beforeBrush: function (ctx) {},\n afterBrush: function (ctx) {},\n\n /**\n * 图形绘制方法\n * @param {CanvasRenderingContext2D} ctx\n */\n // Interface\n brush: function (ctx, prevEl) {},\n\n /**\n * 获取最小包围盒\n * @return {module:zrender/core/BoundingRect}\n */\n // Interface\n getBoundingRect: function () {},\n\n /**\n * 判断坐标 x, y 是否在图形上\n * If displayable element contain coord x, y\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n */\n contain: function (x, y) {\n return this.rectContain(x, y);\n },\n\n /**\n * @param {Function} cb\n * @param {} context\n */\n traverse: function (cb, context) {\n cb.call(context, this);\n },\n\n /**\n * 判断坐标 x, y 是否在图形的包围盒上\n * If bounding rect of element contain coord x, y\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n */\n rectContain: function (x, y) {\n var coord = this.transformCoordToLocal(x, y);\n var rect = this.getBoundingRect();\n return rect.contain(coord[0], coord[1]);\n },\n\n /**\n * 标记图形元素为脏,并且在下一帧重绘\n * Mark displayable element dirty and refresh next frame\n */\n dirty: function () {\n this.__dirty = true;\n this._rect = null;\n this.__zr && this.__zr.refresh();\n },\n\n /**\n * 图形是否会触发事件\n * If displayable object binded any event\n * @return {boolean}\n */\n // TODO, 通过 bind 绑定的事件\n // isSilent: function () {\n // return !(\n // this.hoverable || this.draggable\n // || this.onmousemove || this.onmouseover || this.onmouseout\n // || this.onmousedown || this.onmouseup || this.onclick\n // || this.ondragenter || this.ondragover || this.ondragleave\n // || this.ondrop\n // );\n // },\n\n /**\n * Alias for animate('style')\n * @param {boolean} loop\n */\n animateStyle: function (loop) {\n return this.animate('style', loop);\n },\n attrKV: function (key, value) {\n if (key !== 'style') {\n Element.prototype.attrKV.call(this, key, value);\n } else {\n this.style.set(value);\n }\n },\n\n /**\n * @param {Object|string} key\n * @param {*} value\n */\n setStyle: function (key, value) {\n this.style.set(key, value);\n this.dirty(false);\n return this;\n },\n\n /**\n * Use given style object\n * @param {Object} obj\n */\n useStyle: function (obj) {\n this.style = new Style(obj, this);\n this.dirty(false);\n return this;\n }\n};\nzrUtil.inherits(Displayable, Element);\nzrUtil.mixin(Displayable, RectText); // zrUtil.mixin(Displayable, Stateful);\n\nvar _default = Displayable;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\n/**\n * @param {Object} opt {labelInside}\n * @return {Object} {\n * position, rotation, labelDirection, labelOffset,\n * tickDirection, labelRotate, labelInterval, z2\n * }\n */\nfunction layout(gridModel, axisModel, opt) {\n opt = opt || {};\n var grid = gridModel.coordinateSystem;\n var axis = axisModel.axis;\n var layout = {};\n var rawAxisPosition = axis.position;\n var axisPosition = axis.onZero ? 'onZero' : rawAxisPosition;\n var axisDim = axis.dim;\n var rect = grid.getRect();\n var rectBound = [rect.x, rect.x + rect.width, rect.y, rect.y + rect.height];\n var idx = {\n left: 0,\n right: 1,\n top: 0,\n bottom: 1,\n onZero: 2\n };\n var axisOffset = axisModel.get('offset') || 0;\n var posBound = axisDim === 'x' ? [rectBound[2] - axisOffset, rectBound[3] + axisOffset] : [rectBound[0] - axisOffset, rectBound[1] + axisOffset];\n\n if (axis.onZero) {\n var otherAxis = grid.getAxis(axisDim === 'x' ? 'y' : 'x', axis.onZeroAxisIndex);\n var onZeroCoord = otherAxis.toGlobalCoord(otherAxis.dataToCoord(0));\n posBound[idx['onZero']] = Math.max(Math.min(onZeroCoord, posBound[1]), posBound[0]);\n } // Axis position\n\n\n layout.position = [axisDim === 'y' ? posBound[idx[axisPosition]] : rectBound[0], axisDim === 'x' ? posBound[idx[axisPosition]] : rectBound[3]]; // Axis rotation\n\n layout.rotation = Math.PI / 2 * (axisDim === 'x' ? 0 : 1); // Tick and label direction, x y is axisDim\n\n var dirMap = {\n top: -1,\n bottom: 1,\n left: -1,\n right: 1\n };\n layout.labelDirection = layout.tickDirection = layout.nameDirection = dirMap[rawAxisPosition];\n layout.labelOffset = axis.onZero ? posBound[idx[rawAxisPosition]] - posBound[idx['onZero']] : 0;\n\n if (axisModel.get('axisTick.inside')) {\n layout.tickDirection = -layout.tickDirection;\n }\n\n if (zrUtil.retrieve(opt.labelInside, axisModel.get('axisLabel.inside'))) {\n layout.labelDirection = -layout.labelDirection;\n } // Special label rotation\n\n\n var labelRotate = axisModel.get('axisLabel.rotate');\n layout.labelRotate = axisPosition === 'top' ? -labelRotate : labelRotate; // label interval when auto mode.\n\n layout.labelInterval = axis.getLabelInterval(); // Over splitLine and splitArea\n\n layout.z2 = 1;\n return layout;\n}\n\nexports.layout = layout;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar ChartView = require(\"../../view/Chart\");\n\n/**\n * @param {module:echarts/model/Series} seriesModel\n * @param {boolean} hasAnimation\n * @inner\n */\nfunction updateDataSelected(uid, seriesModel, hasAnimation, api) {\n var data = seriesModel.getData();\n var dataIndex = this.dataIndex;\n var name = data.getName(dataIndex);\n var selectedOffset = seriesModel.get('selectedOffset');\n api.dispatchAction({\n type: 'pieToggleSelect',\n from: uid,\n name: name,\n seriesId: seriesModel.id\n });\n data.each(function (idx) {\n toggleItemSelected(data.getItemGraphicEl(idx), data.getItemLayout(idx), seriesModel.isSelected(data.getName(idx)), selectedOffset, hasAnimation);\n });\n}\n/**\n * @param {module:zrender/graphic/Sector} el\n * @param {Object} layout\n * @param {boolean} isSelected\n * @param {number} selectedOffset\n * @param {boolean} hasAnimation\n * @inner\n */\n\n\nfunction toggleItemSelected(el, layout, isSelected, selectedOffset, hasAnimation) {\n var midAngle = (layout.startAngle + layout.endAngle) / 2;\n var dx = Math.cos(midAngle);\n var dy = Math.sin(midAngle);\n var offset = isSelected ? selectedOffset : 0;\n var position = [dx * offset, dy * offset];\n hasAnimation // animateTo will stop revious animation like update transition\n ? el.animate().when(200, {\n position: position\n }).start('bounceOut') : el.attr('position', position);\n}\n/**\n * Piece of pie including Sector, Label, LabelLine\n * @constructor\n * @extends {module:zrender/graphic/Group}\n */\n\n\nfunction PiePiece(data, idx) {\n graphic.Group.call(this);\n var sector = new graphic.Sector({\n z2: 2\n });\n var polyline = new graphic.Polyline();\n var text = new graphic.Text();\n this.add(sector);\n this.add(polyline);\n this.add(text);\n this.updateData(data, idx, true); // Hover to change label and labelLine\n\n function onEmphasis() {\n polyline.ignore = polyline.hoverIgnore;\n text.ignore = text.hoverIgnore;\n }\n\n function onNormal() {\n polyline.ignore = polyline.normalIgnore;\n text.ignore = text.normalIgnore;\n }\n\n this.on('emphasis', onEmphasis).on('normal', onNormal).on('mouseover', onEmphasis).on('mouseout', onNormal);\n}\n\nvar piePieceProto = PiePiece.prototype;\n\npiePieceProto.updateData = function (data, idx, firstCreate) {\n var sector = this.childAt(0);\n var seriesModel = data.hostModel;\n var itemModel = data.getItemModel(idx);\n var layout = data.getItemLayout(idx);\n var sectorShape = zrUtil.extend({}, layout);\n sectorShape.label = null;\n\n if (firstCreate) {\n sector.setShape(sectorShape);\n var animationType = seriesModel.getShallow('animationType');\n\n if (animationType === 'scale') {\n sector.shape.r = layout.r0;\n graphic.initProps(sector, {\n shape: {\n r: layout.r\n }\n }, seriesModel, idx);\n } // Expansion\n else {\n sector.shape.endAngle = layout.startAngle;\n graphic.updateProps(sector, {\n shape: {\n endAngle: layout.endAngle\n }\n }, seriesModel, idx);\n }\n } else {\n graphic.updateProps(sector, {\n shape: sectorShape\n }, seriesModel, idx);\n } // Update common style\n\n\n var itemStyleModel = itemModel.getModel('itemStyle');\n var visualColor = data.getItemVisual(idx, 'color');\n sector.useStyle(zrUtil.defaults({\n lineJoin: 'bevel',\n fill: visualColor\n }, itemStyleModel.getModel('normal').getItemStyle()));\n sector.hoverStyle = itemStyleModel.getModel('emphasis').getItemStyle();\n var cursorStyle = itemModel.getShallow('cursor');\n cursorStyle && sector.attr('cursor', cursorStyle); // Toggle selected\n\n toggleItemSelected(this, data.getItemLayout(idx), itemModel.get('selected'), seriesModel.get('selectedOffset'), seriesModel.get('animation'));\n\n function onEmphasis() {\n // Sector may has animation of updating data. Force to move to the last frame\n // Or it may stopped on the wrong shape\n sector.stopAnimation(true);\n sector.animateTo({\n shape: {\n r: layout.r + seriesModel.get('hoverOffset')\n }\n }, 300, 'elasticOut');\n }\n\n function onNormal() {\n sector.stopAnimation(true);\n sector.animateTo({\n shape: {\n r: layout.r\n }\n }, 300, 'elasticOut');\n }\n\n sector.off('mouseover').off('mouseout').off('emphasis').off('normal');\n\n if (itemModel.get('hoverAnimation') && seriesModel.isAnimationEnabled()) {\n sector.on('mouseover', onEmphasis).on('mouseout', onNormal).on('emphasis', onEmphasis).on('normal', onNormal);\n }\n\n this._updateLabel(data, idx);\n\n graphic.setHoverStyle(this);\n};\n\npiePieceProto._updateLabel = function (data, idx) {\n var labelLine = this.childAt(1);\n var labelText = this.childAt(2);\n var seriesModel = data.hostModel;\n var itemModel = data.getItemModel(idx);\n var layout = data.getItemLayout(idx);\n var labelLayout = layout.label;\n var visualColor = data.getItemVisual(idx, 'color');\n graphic.updateProps(labelLine, {\n shape: {\n points: labelLayout.linePoints || [[labelLayout.x, labelLayout.y], [labelLayout.x, labelLayout.y], [labelLayout.x, labelLayout.y]]\n }\n }, seriesModel, idx);\n graphic.updateProps(labelText, {\n style: {\n x: labelLayout.x,\n y: labelLayout.y\n }\n }, seriesModel, idx);\n labelText.attr({\n rotation: labelLayout.rotation,\n origin: [labelLayout.x, labelLayout.y],\n z2: 10\n });\n var labelModel = itemModel.getModel('label.normal');\n var labelHoverModel = itemModel.getModel('label.emphasis');\n var labelLineModel = itemModel.getModel('labelLine.normal');\n var labelLineHoverModel = itemModel.getModel('labelLine.emphasis');\n var visualColor = data.getItemVisual(idx, 'color');\n graphic.setLabelStyle(labelText.style, labelText.hoverStyle = {}, labelModel, labelHoverModel, {\n labelFetcher: data.hostModel,\n labelDataIndex: idx,\n defaultText: data.getName(idx),\n autoColor: visualColor,\n useInsideStyle: !!labelLayout.inside\n }, {\n textAlign: labelLayout.textAlign,\n textVerticalAlign: labelLayout.verticalAlign,\n opacity: data.getItemVisual(idx, 'opacity')\n });\n labelText.ignore = labelText.normalIgnore = !labelModel.get('show');\n labelText.hoverIgnore = !labelHoverModel.get('show');\n labelLine.ignore = labelLine.normalIgnore = !labelLineModel.get('show');\n labelLine.hoverIgnore = !labelLineHoverModel.get('show'); // Default use item visual color\n\n labelLine.setStyle({\n stroke: visualColor,\n opacity: data.getItemVisual(idx, 'opacity')\n });\n labelLine.setStyle(labelLineModel.getModel('lineStyle').getLineStyle());\n labelLine.hoverStyle = labelLineHoverModel.getModel('lineStyle').getLineStyle();\n var smooth = labelLineModel.get('smooth');\n\n if (smooth && smooth === true) {\n smooth = 0.4;\n }\n\n labelLine.setShape({\n smooth: smooth\n });\n};\n\nzrUtil.inherits(PiePiece, graphic.Group); // Pie view\n\nvar PieView = ChartView.extend({\n type: 'pie',\n init: function () {\n var sectorGroup = new graphic.Group();\n this._sectorGroup = sectorGroup;\n },\n render: function (seriesModel, ecModel, api, payload) {\n if (payload && payload.from === this.uid) {\n return;\n }\n\n var data = seriesModel.getData();\n var oldData = this._data;\n var group = this.group;\n var hasAnimation = ecModel.get('animation');\n var isFirstRender = !oldData;\n var animationType = seriesModel.get('animationType');\n var onSectorClick = zrUtil.curry(updateDataSelected, this.uid, seriesModel, hasAnimation, api);\n var selectedMode = seriesModel.get('selectedMode');\n data.diff(oldData).add(function (idx) {\n var piePiece = new PiePiece(data, idx); // Default expansion animation\n\n if (isFirstRender && animationType !== 'scale') {\n piePiece.eachChild(function (child) {\n child.stopAnimation(true);\n });\n }\n\n selectedMode && piePiece.on('click', onSectorClick);\n data.setItemGraphicEl(idx, piePiece);\n group.add(piePiece);\n }).update(function (newIdx, oldIdx) {\n var piePiece = oldData.getItemGraphicEl(oldIdx);\n piePiece.updateData(data, newIdx);\n piePiece.off('click');\n selectedMode && piePiece.on('click', onSectorClick);\n group.add(piePiece);\n data.setItemGraphicEl(newIdx, piePiece);\n }).remove(function (idx) {\n var piePiece = oldData.getItemGraphicEl(idx);\n group.remove(piePiece);\n }).execute();\n\n if (hasAnimation && isFirstRender && data.count() > 0 // Default expansion animation\n && animationType !== 'scale') {\n var shape = data.getItemLayout(0);\n var r = Math.max(api.getWidth(), api.getHeight()) / 2;\n var removeClipPath = zrUtil.bind(group.removeClipPath, group);\n group.setClipPath(this._createClipPath(shape.cx, shape.cy, r, shape.startAngle, shape.clockwise, removeClipPath, seriesModel));\n }\n\n this._data = data;\n },\n dispose: function () {},\n _createClipPath: function (cx, cy, r, startAngle, clockwise, cb, seriesModel) {\n var clipPath = new graphic.Sector({\n shape: {\n cx: cx,\n cy: cy,\n r0: 0,\n r: r,\n startAngle: startAngle,\n endAngle: startAngle,\n clockwise: clockwise\n }\n });\n graphic.initProps(clipPath, {\n shape: {\n endAngle: startAngle + (clockwise ? 1 : -1) * Math.PI * 2\n }\n }, seriesModel, cb);\n return clipPath;\n },\n\n /**\n * @implement\n */\n containPoint: function (point, seriesModel) {\n var data = seriesModel.getData();\n var itemLayout = data.getItemLayout(0);\n\n if (itemLayout) {\n var dx = point[0] - itemLayout.cx;\n var dy = point[1] - itemLayout.cy;\n var radius = Math.sqrt(dx * dx + dy * dy);\n return radius <= itemLayout.r && radius >= itemLayout.r0;\n }\n }\n});\nvar _default = PieView;\nmodule.exports = _default;","var vec2 = require(\"zrender/lib/core/vector\");\n\nfunction simpleLayout(seriesModel) {\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys && coordSys.type !== 'view') {\n return;\n }\n\n var graph = seriesModel.getGraph();\n graph.eachNode(function (node) {\n var model = node.getModel();\n node.setLayout([+model.get('x'), +model.get('y')]);\n });\n simpleLayoutEdge(graph);\n}\n\nfunction simpleLayoutEdge(graph) {\n graph.eachEdge(function (edge) {\n var curveness = edge.getModel().get('lineStyle.normal.curveness') || 0;\n var p1 = vec2.clone(edge.node1.getLayout());\n var p2 = vec2.clone(edge.node2.getLayout());\n var points = [p1, p2];\n\n if (+curveness) {\n points.push([(p1[0] + p2[0]) / 2 - (p1[1] - p2[1]) * curveness, (p1[1] + p2[1]) / 2 - (p2[0] - p1[0]) * curveness]);\n }\n\n edge.setLayout(points);\n });\n}\n\nexports.simpleLayout = simpleLayout;\nexports.simpleLayoutEdge = simpleLayoutEdge;","var _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar Polar = require(\"./Polar\");\n\nvar _number = require(\"../../util/number\");\n\nvar parsePercent = _number.parsePercent;\n\nvar _axisHelper = require(\"../../coord/axisHelper\");\n\nvar createScaleByModel = _axisHelper.createScaleByModel;\nvar niceScaleExtent = _axisHelper.niceScaleExtent;\n\nvar CoordinateSystem = require(\"../../CoordinateSystem\");\n\nrequire(\"./PolarModel\");\n\n// TODO Axis scale\n// 依赖 PolarModel 做预处理\n\n/**\n * Resize method bound to the polar\n * @param {module:echarts/coord/polar/PolarModel} polarModel\n * @param {module:echarts/ExtensionAPI} api\n */\nfunction resizePolar(polar, polarModel, api) {\n var center = polarModel.get('center');\n var width = api.getWidth();\n var height = api.getHeight();\n polar.cx = parsePercent(center[0], width);\n polar.cy = parsePercent(center[1], height);\n var radiusAxis = polar.getRadiusAxis();\n var size = Math.min(width, height) / 2;\n var radius = parsePercent(polarModel.get('radius'), size);\n radiusAxis.inverse ? radiusAxis.setExtent(radius, 0) : radiusAxis.setExtent(0, radius);\n}\n/**\n * Update polar\n */\n\n\nfunction updatePolarScale(ecModel, api) {\n var polar = this;\n var angleAxis = polar.getAngleAxis();\n var radiusAxis = polar.getRadiusAxis(); // Reset scale\n\n angleAxis.scale.setExtent(Infinity, -Infinity);\n radiusAxis.scale.setExtent(Infinity, -Infinity);\n ecModel.eachSeries(function (seriesModel) {\n if (seriesModel.coordinateSystem === polar) {\n var data = seriesModel.getData();\n radiusAxis.scale.unionExtentFromData(data, 'radius');\n angleAxis.scale.unionExtentFromData(data, 'angle');\n }\n });\n niceScaleExtent(angleAxis.scale, angleAxis.model);\n niceScaleExtent(radiusAxis.scale, radiusAxis.model); // Fix extent of category angle axis\n\n if (angleAxis.type === 'category' && !angleAxis.onBand) {\n var extent = angleAxis.getExtent();\n var diff = 360 / angleAxis.scale.count();\n angleAxis.inverse ? extent[1] += diff : extent[1] -= diff;\n angleAxis.setExtent(extent[0], extent[1]);\n }\n}\n/**\n * Set common axis properties\n * @param {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis}\n * @param {module:echarts/coord/polar/AxisModel}\n * @inner\n */\n\n\nfunction setAxis(axis, axisModel) {\n axis.type = axisModel.get('type');\n axis.scale = createScaleByModel(axisModel);\n axis.onBand = axisModel.get('boundaryGap') && axis.type === 'category';\n axis.inverse = axisModel.get('inverse');\n\n if (axisModel.mainType === 'angleAxis') {\n axis.inverse ^= axisModel.get('clockwise');\n var startAngle = axisModel.get('startAngle');\n axis.setExtent(startAngle, startAngle + (axis.inverse ? -360 : 360));\n } // Inject axis instance\n\n\n axisModel.axis = axis;\n axis.model = axisModel;\n}\n\nvar polarCreator = {\n dimensions: Polar.prototype.dimensions,\n create: function (ecModel, api) {\n var polarList = [];\n ecModel.eachComponent('polar', function (polarModel, idx) {\n var polar = new Polar(idx); // Inject resize and update method\n\n polar.update = updatePolarScale;\n var radiusAxis = polar.getRadiusAxis();\n var angleAxis = polar.getAngleAxis();\n var radiusAxisModel = polarModel.findAxisModel('radiusAxis');\n var angleAxisModel = polarModel.findAxisModel('angleAxis');\n setAxis(radiusAxis, radiusAxisModel);\n setAxis(angleAxis, angleAxisModel);\n resizePolar(polar, polarModel, api);\n polarList.push(polar);\n polarModel.coordinateSystem = polar;\n polar.model = polarModel;\n }); // Inject coordinateSystem to series\n\n ecModel.eachSeries(function (seriesModel) {\n if (seriesModel.get('coordinateSystem') === 'polar') {\n var polarModel = ecModel.queryComponents({\n mainType: 'polar',\n index: seriesModel.get('polarIndex'),\n id: seriesModel.get('polarId')\n })[0];\n seriesModel.coordinateSystem = polarModel.coordinateSystem;\n }\n });\n return polarList;\n }\n};\nCoordinateSystem.register('polar', polarCreator);","module.exports = __webpack_public_path__ + \"img/About_item_2.720afb93.png\";","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar _number = require(\"../util/number\");\n\nvar parsePercent = _number.parsePercent;\n\nfunction getSeriesStackId(seriesModel) {\n return seriesModel.get('stack') || '__ec_stack_' + seriesModel.seriesIndex;\n}\n\nfunction getAxisKey(axis) {\n return axis.dim;\n}\n/**\n * @param {string} seriesType\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n */\n\n\nfunction barLayoutPolar(seriesType, ecModel, api) {\n var width = api.getWidth();\n var height = api.getHeight();\n var lastStackCoords = {};\n var lastStackCoordsOrigin = {};\n var barWidthAndOffset = calRadialBar(zrUtil.filter(ecModel.getSeriesByType(seriesType), function (seriesModel) {\n return !ecModel.isSeriesFiltered(seriesModel) && seriesModel.coordinateSystem && seriesModel.coordinateSystem.type === 'polar';\n }));\n ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n // Check series coordinate, do layout for polar only\n if (seriesModel.coordinateSystem.type !== 'polar') {\n return;\n }\n\n var data = seriesModel.getData();\n var polar = seriesModel.coordinateSystem;\n var angleAxis = polar.getAngleAxis();\n var baseAxis = polar.getBaseAxis();\n var stackId = getSeriesStackId(seriesModel);\n var columnLayoutInfo = barWidthAndOffset[getAxisKey(baseAxis)][stackId];\n var columnOffset = columnLayoutInfo.offset;\n var columnWidth = columnLayoutInfo.width;\n var valueAxis = polar.getOtherAxis(baseAxis);\n var center = seriesModel.get('center') || ['50%', '50%'];\n var cx = parsePercent(center[0], width);\n var cy = parsePercent(center[1], height);\n var barMinHeight = seriesModel.get('barMinHeight') || 0;\n var barMinAngle = seriesModel.get('barMinAngle') || 0;\n var valueAxisStart = valueAxis.getExtent()[0];\n var valueMax = valueAxis.model.get('max');\n var valueMin = valueAxis.model.get('min');\n var coordDims = [seriesModel.coordDimToDataDim('radius')[0], seriesModel.coordDimToDataDim('angle')[0]];\n var coords = data.mapArray(coordDims, function (radius, angle) {\n return polar.dataToPoint([radius, angle]);\n }, true);\n lastStackCoords[stackId] = lastStackCoords[stackId] || [];\n lastStackCoordsOrigin[stackId] = lastStackCoordsOrigin[stackId] || []; // Fix #4243\n\n data.each(seriesModel.coordDimToDataDim(valueAxis.dim)[0], function (value, idx) {\n if (isNaN(value)) {\n return;\n }\n\n if (!lastStackCoords[stackId][idx]) {\n lastStackCoords[stackId][idx] = {\n p: valueAxisStart,\n // Positive stack\n n: valueAxisStart // Negative stack\n\n };\n lastStackCoordsOrigin[stackId][idx] = {\n p: valueAxisStart,\n // Positive stack\n n: valueAxisStart // Negative stack\n\n };\n }\n\n var sign = value >= 0 ? 'p' : 'n';\n var coord = polar.pointToCoord(coords[idx]);\n var lastCoordOrigin = lastStackCoordsOrigin[stackId][idx][sign];\n var r0;\n var r;\n var startAngle;\n var endAngle;\n\n if (valueAxis.dim === 'radius') {\n // radial sector\n r0 = lastCoordOrigin;\n r = coord[0];\n startAngle = (-coord[1] + columnOffset) * Math.PI / 180;\n endAngle = startAngle + columnWidth * Math.PI / 180;\n\n if (Math.abs(r) < barMinHeight) {\n r = r0 + (r < 0 ? -1 : 1) * barMinHeight;\n }\n\n lastStackCoordsOrigin[stackId][idx][sign] = r;\n } else {\n // tangential sector\n r0 = coord[0] + columnOffset;\n r = r0 + columnWidth; // clamp data if min or max is defined for valueAxis\n\n if (valueMax != null) {\n value = Math.min(value, valueMax);\n }\n\n if (valueMin != null) {\n value = Math.max(value, valueMin);\n }\n\n var angle = angleAxis.dataToAngle(value);\n\n if (Math.abs(angle - lastCoordOrigin) < barMinAngle) {\n angle = lastCoordOrigin - (value < 0 ? -1 : 1) * barMinAngle;\n }\n\n startAngle = -lastCoordOrigin * Math.PI / 180;\n endAngle = -angle * Math.PI / 180; // if the previous stack is at the end of the ring,\n // add a round to differentiate it from origin\n\n var extent = angleAxis.getExtent();\n var stackCoord = angle;\n\n if (stackCoord === extent[0] && value > 0) {\n stackCoord = extent[1];\n } else if (stackCoord === extent[1] && value < 0) {\n stackCoord = extent[0];\n }\n\n lastStackCoordsOrigin[stackId][idx][sign] = stackCoord;\n }\n\n data.setItemLayout(idx, {\n cx: cx,\n cy: cy,\n r0: r0,\n r: r,\n startAngle: startAngle,\n endAngle: endAngle\n });\n }, true);\n }, this);\n}\n/**\n * Calculate bar width and offset for radial bar charts\n */\n\n\nfunction calRadialBar(barSeries, api) {\n // Columns info on each category axis. Key is polar name\n var columnsMap = {};\n zrUtil.each(barSeries, function (seriesModel, idx) {\n var data = seriesModel.getData();\n var polar = seriesModel.coordinateSystem;\n var baseAxis = polar.getBaseAxis();\n var axisExtent = baseAxis.getExtent();\n var bandWidth = baseAxis.type === 'category' ? baseAxis.getBandWidth() : Math.abs(axisExtent[1] - axisExtent[0]) / data.count();\n var columnsOnAxis = columnsMap[getAxisKey(baseAxis)] || {\n bandWidth: bandWidth,\n remainedWidth: bandWidth,\n autoWidthCount: 0,\n categoryGap: '20%',\n gap: '30%',\n stacks: {}\n };\n var stacks = columnsOnAxis.stacks;\n columnsMap[getAxisKey(baseAxis)] = columnsOnAxis;\n var stackId = getSeriesStackId(seriesModel);\n\n if (!stacks[stackId]) {\n columnsOnAxis.autoWidthCount++;\n }\n\n stacks[stackId] = stacks[stackId] || {\n width: 0,\n maxWidth: 0\n };\n var barWidth = parsePercent(seriesModel.get('barWidth'), bandWidth);\n var barMaxWidth = parsePercent(seriesModel.get('barMaxWidth'), bandWidth);\n var barGap = seriesModel.get('barGap');\n var barCategoryGap = seriesModel.get('barCategoryGap');\n\n if (barWidth && !stacks[stackId].width) {\n barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth);\n stacks[stackId].width = barWidth;\n columnsOnAxis.remainedWidth -= barWidth;\n }\n\n barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth);\n barGap != null && (columnsOnAxis.gap = barGap);\n barCategoryGap != null && (columnsOnAxis.categoryGap = barCategoryGap);\n });\n var result = {};\n zrUtil.each(columnsMap, function (columnsOnAxis, coordSysName) {\n result[coordSysName] = {};\n var stacks = columnsOnAxis.stacks;\n var bandWidth = columnsOnAxis.bandWidth;\n var categoryGap = parsePercent(columnsOnAxis.categoryGap, bandWidth);\n var barGapPercent = parsePercent(columnsOnAxis.gap, 1);\n var remainedWidth = columnsOnAxis.remainedWidth;\n var autoWidthCount = columnsOnAxis.autoWidthCount;\n var autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n autoWidth = Math.max(autoWidth, 0); // Find if any auto calculated bar exceeded maxBarWidth\n\n zrUtil.each(stacks, function (column, stack) {\n var maxWidth = column.maxWidth;\n\n if (maxWidth && maxWidth < autoWidth) {\n maxWidth = Math.min(maxWidth, remainedWidth);\n\n if (column.width) {\n maxWidth = Math.min(maxWidth, column.width);\n }\n\n remainedWidth -= maxWidth;\n column.width = maxWidth;\n autoWidthCount--;\n }\n }); // Recalculate width again\n\n autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n autoWidth = Math.max(autoWidth, 0);\n var widthSum = 0;\n var lastColumn;\n zrUtil.each(stacks, function (column, idx) {\n if (!column.width) {\n column.width = autoWidth;\n }\n\n lastColumn = column;\n widthSum += column.width * (1 + barGapPercent);\n });\n\n if (lastColumn) {\n widthSum -= lastColumn.width * barGapPercent;\n }\n\n var offset = -widthSum / 2;\n zrUtil.each(stacks, function (column, stackId) {\n result[coordSysName][stackId] = result[coordSysName][stackId] || {\n offset: offset,\n width: column.width\n };\n offset += column.width * (1 + barGapPercent);\n });\n });\n return result;\n}\n\nvar _default = barLayoutPolar;\nmodule.exports = _default;","var Path = require(\"zrender/lib/graphic/Path\");\n\nvar _default = Path.extend({\n type: 'echartsGaugePointer',\n shape: {\n angle: 0,\n width: 10,\n r: 10,\n x: 0,\n y: 0\n },\n buildPath: function (ctx, shape) {\n var mathCos = Math.cos;\n var mathSin = Math.sin;\n var r = shape.r;\n var width = shape.width;\n var angle = shape.angle;\n var x = shape.x - mathCos(angle) * width * (width >= r / 3 ? 1 : 2);\n var y = shape.y - mathSin(angle) * width * (width >= r / 3 ? 1 : 2);\n angle = shape.angle - Math.PI / 2;\n ctx.moveTo(x, y);\n ctx.lineTo(shape.x + mathCos(angle) * width, shape.y + mathSin(angle) * width);\n ctx.lineTo(shape.x + mathCos(shape.angle) * r, shape.y + mathSin(shape.angle) * r);\n ctx.lineTo(shape.x - mathCos(angle) * width, shape.y - mathSin(angle) * width);\n ctx.lineTo(x, y);\n return;\n }\n});\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar modelUtil = require(\"../../util/model\");\n\nvar ComponentModel = require(\"../../model/Component\");\n\nvar Model = require(\"../../model/Model\");\n\nvar selectableMixin = require(\"../../component/helper/selectableMixin\");\n\nvar geoCreator = require(\"./geoCreator\");\n\nvar GeoModel = ComponentModel.extend({\n type: 'geo',\n\n /**\n * @type {module:echarts/coord/geo/Geo}\n */\n coordinateSystem: null,\n layoutMode: 'box',\n init: function (option) {\n ComponentModel.prototype.init.apply(this, arguments); // Default label emphasis `show`\n\n modelUtil.defaultEmphasis(option.label, ['show']);\n },\n optionUpdated: function () {\n var option = this.option;\n var self = this;\n option.regions = geoCreator.getFilledRegions(option.regions, option.map, option.nameMap);\n this._optionModelMap = zrUtil.reduce(option.regions || [], function (optionModelMap, regionOpt) {\n if (regionOpt.name) {\n optionModelMap.set(regionOpt.name, new Model(regionOpt, self));\n }\n\n return optionModelMap;\n }, zrUtil.createHashMap());\n this.updateSelectedMap(option.regions);\n },\n defaultOption: {\n zlevel: 0,\n z: 0,\n show: true,\n left: 'center',\n top: 'center',\n // width:,\n // height:,\n // right\n // bottom\n // Aspect is width / height. Inited to be geoJson bbox aspect\n // This parameter is used for scale this aspect\n aspectScale: 0.75,\n ///// Layout with center and size\n // If you wan't to put map in a fixed size box with right aspect ratio\n // This two properties may more conveninet\n // layoutCenter: [50%, 50%]\n // layoutSize: 100\n silent: false,\n // Map type\n map: '',\n // Define left-top, right-bottom coords to control view\n // For example, [ [180, 90], [-180, -90] ]\n boundingCoords: null,\n // Default on center of map\n center: null,\n zoom: 1,\n scaleLimit: null,\n // selectedMode: false\n label: {\n normal: {\n show: false,\n color: '#000'\n },\n emphasis: {\n show: true,\n color: 'rgb(100,0,0)'\n }\n },\n itemStyle: {\n normal: {\n // color: 各异,\n borderWidth: 0.5,\n borderColor: '#444',\n color: '#eee'\n },\n emphasis: {\n // 也是选中样式\n color: 'rgba(255,215,0,0.8)'\n }\n },\n regions: []\n },\n\n /**\n * Get model of region\n * @param {string} name\n * @return {module:echarts/model/Model}\n */\n getRegionModel: function (name) {\n return this._optionModelMap.get(name) || new Model(null, this, this.ecModel);\n },\n\n /**\n * Format label\n * @param {string} name Region name\n * @param {string} [status='normal'] 'normal' or 'emphasis'\n * @return {string}\n */\n getFormattedLabel: function (name, status) {\n var regionModel = this.getRegionModel(name);\n var formatter = regionModel.get('label.' + status + '.formatter');\n var params = {\n name: name\n };\n\n if (typeof formatter === 'function') {\n params.status = status;\n return formatter(params);\n } else if (typeof formatter === 'string') {\n return formatter.replace('{a}', name != null ? name : '');\n }\n },\n setZoom: function (zoom) {\n this.option.zoom = zoom;\n },\n setCenter: function (center) {\n this.option.center = center;\n }\n});\nzrUtil.mixin(GeoModel, selectableMixin);\nvar _default = GeoModel;\nmodule.exports = _default;","/**\n * 事件扩展\n * @module zrender/mixin/Eventful\n * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)\n * pissang (https://www.github.com/pissang)\n */\nvar arrySlice = Array.prototype.slice;\n/**\n * 事件分发器\n * @alias module:zrender/mixin/Eventful\n * @constructor\n */\n\nvar Eventful = function () {\n this._$handlers = {};\n};\n\nEventful.prototype = {\n constructor: Eventful,\n\n /**\n * 单次触发绑定,trigger后销毁\n *\n * @param {string} event 事件名\n * @param {Function} handler 响应函数\n * @param {Object} context\n */\n one: function (event, handler, context) {\n var _h = this._$handlers;\n\n if (!handler || !event) {\n return this;\n }\n\n if (!_h[event]) {\n _h[event] = [];\n }\n\n for (var i = 0; i < _h[event].length; i++) {\n if (_h[event][i].h === handler) {\n return this;\n }\n }\n\n _h[event].push({\n h: handler,\n one: true,\n ctx: context || this\n });\n\n return this;\n },\n\n /**\n * 绑定事件\n * @param {string} event 事件名\n * @param {Function} handler 事件处理函数\n * @param {Object} [context]\n */\n on: function (event, handler, context) {\n var _h = this._$handlers;\n\n if (!handler || !event) {\n return this;\n }\n\n if (!_h[event]) {\n _h[event] = [];\n }\n\n for (var i = 0; i < _h[event].length; i++) {\n if (_h[event][i].h === handler) {\n return this;\n }\n }\n\n _h[event].push({\n h: handler,\n one: false,\n ctx: context || this\n });\n\n return this;\n },\n\n /**\n * 是否绑定了事件\n * @param {string} event\n * @return {boolean}\n */\n isSilent: function (event) {\n var _h = this._$handlers;\n return _h[event] && _h[event].length;\n },\n\n /**\n * 解绑事件\n * @param {string} event 事件名\n * @param {Function} [handler] 事件处理函数\n */\n off: function (event, handler) {\n var _h = this._$handlers;\n\n if (!event) {\n this._$handlers = {};\n return this;\n }\n\n if (handler) {\n if (_h[event]) {\n var newList = [];\n\n for (var i = 0, l = _h[event].length; i < l; i++) {\n if (_h[event][i]['h'] != handler) {\n newList.push(_h[event][i]);\n }\n }\n\n _h[event] = newList;\n }\n\n if (_h[event] && _h[event].length === 0) {\n delete _h[event];\n }\n } else {\n delete _h[event];\n }\n\n return this;\n },\n\n /**\n * 事件分发\n *\n * @param {string} type 事件类型\n */\n trigger: function (type) {\n if (this._$handlers[type]) {\n var args = arguments;\n var argLen = args.length;\n\n if (argLen > 3) {\n args = arrySlice.call(args, 1);\n }\n\n var _h = this._$handlers[type];\n var len = _h.length;\n\n for (var i = 0; i < len;) {\n // Optimize advise from backbone\n switch (argLen) {\n case 1:\n _h[i]['h'].call(_h[i]['ctx']);\n\n break;\n\n case 2:\n _h[i]['h'].call(_h[i]['ctx'], args[1]);\n\n break;\n\n case 3:\n _h[i]['h'].call(_h[i]['ctx'], args[1], args[2]);\n\n break;\n\n default:\n // have more than 2 given arguments\n _h[i]['h'].apply(_h[i]['ctx'], args);\n\n break;\n }\n\n if (_h[i]['one']) {\n _h.splice(i, 1);\n\n len--;\n } else {\n i++;\n }\n }\n }\n\n return this;\n },\n\n /**\n * 带有context的事件分发, 最后一个参数是事件回调的context\n * @param {string} type 事件类型\n */\n triggerWithContext: function (type) {\n if (this._$handlers[type]) {\n var args = arguments;\n var argLen = args.length;\n\n if (argLen > 4) {\n args = arrySlice.call(args, 1, args.length - 1);\n }\n\n var ctx = args[args.length - 1];\n var _h = this._$handlers[type];\n var len = _h.length;\n\n for (var i = 0; i < len;) {\n // Optimize advise from backbone\n switch (argLen) {\n case 1:\n _h[i]['h'].call(ctx);\n\n break;\n\n case 2:\n _h[i]['h'].call(ctx, args[1]);\n\n break;\n\n case 3:\n _h[i]['h'].call(ctx, args[1], args[2]);\n\n break;\n\n default:\n // have more than 2 given arguments\n _h[i]['h'].apply(ctx, args);\n\n break;\n }\n\n if (_h[i]['one']) {\n _h.splice(i, 1);\n\n len--;\n } else {\n i++;\n }\n }\n }\n\n return this;\n }\n}; // 对象可以通过 onxxxx 绑定事件\n\n/**\n * @event module:zrender/mixin/Eventful#onclick\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#onmouseover\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#onmouseout\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#onmousemove\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#onmousewheel\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#onmousedown\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#onmouseup\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#ondrag\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#ondragstart\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#ondragend\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#ondragenter\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#ondragleave\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#ondragover\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#ondrop\n * @type {Function}\n * @default null\n */\n\nvar _default = Eventful;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar axisHelper = require(\"./axisHelper\");\n\nfunction getName(obj) {\n if (zrUtil.isObject(obj) && obj.value != null) {\n return obj.value;\n } else {\n return obj + '';\n }\n}\n\nvar _default = {\n /**\n * Format labels\n * @return {Array.}\n */\n getFormattedLabels: function () {\n return axisHelper.getFormattedLabels(this.axis, this.get('axisLabel.formatter'));\n },\n\n /**\n * Get categories\n */\n getCategories: function () {\n return this.get('type') === 'category' && zrUtil.map(this.get('data'), getName);\n },\n\n /**\n * @param {boolean} origin\n * @return {number|string} min value or 'dataMin' or null/undefined (means auto) or NaN\n */\n getMin: function (origin) {\n var option = this.option;\n var min = !origin && option.rangeStart != null ? option.rangeStart : option.min;\n\n if (this.axis && min != null && min !== 'dataMin' && typeof min !== 'function' && !zrUtil.eqNaN(min)) {\n min = this.axis.scale.parse(min);\n }\n\n return min;\n },\n\n /**\n * @param {boolean} origin\n * @return {number|string} max value or 'dataMax' or null/undefined (means auto) or NaN\n */\n getMax: function (origin) {\n var option = this.option;\n var max = !origin && option.rangeEnd != null ? option.rangeEnd : option.max;\n\n if (this.axis && max != null && max !== 'dataMax' && typeof max !== 'function' && !zrUtil.eqNaN(max)) {\n max = this.axis.scale.parse(max);\n }\n\n return max;\n },\n\n /**\n * @return {boolean}\n */\n getNeedCrossZero: function () {\n var option = this.option;\n return option.rangeStart != null || option.rangeEnd != null ? false : !option.scale;\n },\n\n /**\n * Should be implemented by each axis model if necessary.\n * @return {module:echarts/model/Component} coordinate system model\n */\n getCoordSysModel: zrUtil.noop,\n\n /**\n * @param {number} rangeStart Can only be finite number or null/undefined or NaN.\n * @param {number} rangeEnd Can only be finite number or null/undefined or NaN.\n */\n setRange: function (rangeStart, rangeEnd) {\n this.option.rangeStart = rangeStart;\n this.option.rangeEnd = rangeEnd;\n },\n\n /**\n * Reset range\n */\n resetRange: function () {\n // rangeStart and rangeEnd is readonly.\n this.option.rangeStart = this.option.rangeEnd = null;\n }\n};\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar coordinateSystemCreators = {};\n\nfunction CoordinateSystemManager() {\n this._coordinateSystems = [];\n}\n\nCoordinateSystemManager.prototype = {\n constructor: CoordinateSystemManager,\n create: function (ecModel, api) {\n var coordinateSystems = [];\n zrUtil.each(coordinateSystemCreators, function (creater, type) {\n var list = creater.create(ecModel, api);\n coordinateSystems = coordinateSystems.concat(list || []);\n });\n this._coordinateSystems = coordinateSystems;\n },\n update: function (ecModel, api) {\n zrUtil.each(this._coordinateSystems, function (coordSys) {\n // FIXME MUST have\n coordSys.update && coordSys.update(ecModel, api);\n });\n },\n getCoordinateSystems: function () {\n return this._coordinateSystems.slice();\n }\n};\n\nCoordinateSystemManager.register = function (type, coordinateSystemCreator) {\n coordinateSystemCreators[type] = coordinateSystemCreator;\n};\n\nCoordinateSystemManager.get = function (type) {\n return coordinateSystemCreators[type];\n};\n\nvar _default = CoordinateSystemManager;\nmodule.exports = _default;","var curve = require(\"./curve\");\n\nvar vec2 = require(\"./vector\");\n\nvar bbox = require(\"./bbox\");\n\nvar BoundingRect = require(\"./BoundingRect\");\n\nvar _config = require(\"../config\");\n\nvar dpr = _config.devicePixelRatio;\n\n/**\n * Path 代理,可以在`buildPath`中用于替代`ctx`, 会保存每个path操作的命令到pathCommands属性中\n * 可以用于 isInsidePath 判断以及获取boundingRect\n *\n * @module zrender/core/PathProxy\n * @author Yi Shen (http://www.github.com/pissang)\n */\n// TODO getTotalLength, getPointAtLength\nvar CMD = {\n M: 1,\n L: 2,\n C: 3,\n Q: 4,\n A: 5,\n Z: 6,\n // Rect\n R: 7\n}; // var CMD_MEM_SIZE = {\n// M: 3,\n// L: 3,\n// C: 7,\n// Q: 5,\n// A: 9,\n// R: 5,\n// Z: 1\n// };\n\nvar min = [];\nvar max = [];\nvar min2 = [];\nvar max2 = [];\nvar mathMin = Math.min;\nvar mathMax = Math.max;\nvar mathCos = Math.cos;\nvar mathSin = Math.sin;\nvar mathSqrt = Math.sqrt;\nvar mathAbs = Math.abs;\nvar hasTypedArray = typeof Float32Array != 'undefined';\n/**\n * @alias module:zrender/core/PathProxy\n * @constructor\n */\n\nvar PathProxy = function (notSaveData) {\n this._saveData = !(notSaveData || false);\n\n if (this._saveData) {\n /**\n * Path data. Stored as flat array\n * @type {Array.}\n */\n this.data = [];\n }\n\n this._ctx = null;\n};\n/**\n * 快速计算Path包围盒(并不是最小包围盒)\n * @return {Object}\n */\n\n\nPathProxy.prototype = {\n constructor: PathProxy,\n _xi: 0,\n _yi: 0,\n _x0: 0,\n _y0: 0,\n // Unit x, Unit y. Provide for avoiding drawing that too short line segment\n _ux: 0,\n _uy: 0,\n _len: 0,\n _lineDash: null,\n _dashOffset: 0,\n _dashIdx: 0,\n _dashSum: 0,\n\n /**\n * @readOnly\n */\n setScale: function (sx, sy) {\n this._ux = mathAbs(1 / dpr / sx) || 0;\n this._uy = mathAbs(1 / dpr / sy) || 0;\n },\n getContext: function () {\n return this._ctx;\n },\n\n /**\n * @param {CanvasRenderingContext2D} ctx\n * @return {module:zrender/core/PathProxy}\n */\n beginPath: function (ctx) {\n this._ctx = ctx;\n ctx && ctx.beginPath();\n ctx && (this.dpr = ctx.dpr); // Reset\n\n if (this._saveData) {\n this._len = 0;\n }\n\n if (this._lineDash) {\n this._lineDash = null;\n this._dashOffset = 0;\n }\n\n return this;\n },\n\n /**\n * @param {number} x\n * @param {number} y\n * @return {module:zrender/core/PathProxy}\n */\n moveTo: function (x, y) {\n this.addData(CMD.M, x, y);\n this._ctx && this._ctx.moveTo(x, y); // x0, y0, xi, yi 是记录在 _dashedXXXXTo 方法中使用\n // xi, yi 记录当前点, x0, y0 在 closePath 的时候回到起始点。\n // 有可能在 beginPath 之后直接调用 lineTo,这时候 x0, y0 需要\n // 在 lineTo 方法中记录,这里先不考虑这种情况,dashed line 也只在 IE10- 中不支持\n\n this._x0 = x;\n this._y0 = y;\n this._xi = x;\n this._yi = y;\n return this;\n },\n\n /**\n * @param {number} x\n * @param {number} y\n * @return {module:zrender/core/PathProxy}\n */\n lineTo: function (x, y) {\n var exceedUnit = mathAbs(x - this._xi) > this._ux || mathAbs(y - this._yi) > this._uy // Force draw the first segment\n || this._len < 5;\n this.addData(CMD.L, x, y);\n\n if (this._ctx && exceedUnit) {\n this._needsDash() ? this._dashedLineTo(x, y) : this._ctx.lineTo(x, y);\n }\n\n if (exceedUnit) {\n this._xi = x;\n this._yi = y;\n }\n\n return this;\n },\n\n /**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x3\n * @param {number} y3\n * @return {module:zrender/core/PathProxy}\n */\n bezierCurveTo: function (x1, y1, x2, y2, x3, y3) {\n this.addData(CMD.C, x1, y1, x2, y2, x3, y3);\n\n if (this._ctx) {\n this._needsDash() ? this._dashedBezierTo(x1, y1, x2, y2, x3, y3) : this._ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3);\n }\n\n this._xi = x3;\n this._yi = y3;\n return this;\n },\n\n /**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @return {module:zrender/core/PathProxy}\n */\n quadraticCurveTo: function (x1, y1, x2, y2) {\n this.addData(CMD.Q, x1, y1, x2, y2);\n\n if (this._ctx) {\n this._needsDash() ? this._dashedQuadraticTo(x1, y1, x2, y2) : this._ctx.quadraticCurveTo(x1, y1, x2, y2);\n }\n\n this._xi = x2;\n this._yi = y2;\n return this;\n },\n\n /**\n * @param {number} cx\n * @param {number} cy\n * @param {number} r\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean} anticlockwise\n * @return {module:zrender/core/PathProxy}\n */\n arc: function (cx, cy, r, startAngle, endAngle, anticlockwise) {\n this.addData(CMD.A, cx, cy, r, r, startAngle, endAngle - startAngle, 0, anticlockwise ? 0 : 1);\n this._ctx && this._ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise);\n this._xi = mathCos(endAngle) * r + cx;\n this._yi = mathSin(endAngle) * r + cx;\n return this;\n },\n // TODO\n arcTo: function (x1, y1, x2, y2, radius) {\n if (this._ctx) {\n this._ctx.arcTo(x1, y1, x2, y2, radius);\n }\n\n return this;\n },\n // TODO\n rect: function (x, y, w, h) {\n this._ctx && this._ctx.rect(x, y, w, h);\n this.addData(CMD.R, x, y, w, h);\n return this;\n },\n\n /**\n * @return {module:zrender/core/PathProxy}\n */\n closePath: function () {\n this.addData(CMD.Z);\n var ctx = this._ctx;\n var x0 = this._x0;\n var y0 = this._y0;\n\n if (ctx) {\n this._needsDash() && this._dashedLineTo(x0, y0);\n ctx.closePath();\n }\n\n this._xi = x0;\n this._yi = y0;\n return this;\n },\n\n /**\n * Context 从外部传入,因为有可能是 rebuildPath 完之后再 fill。\n * stroke 同样\n * @param {CanvasRenderingContext2D} ctx\n * @return {module:zrender/core/PathProxy}\n */\n fill: function (ctx) {\n ctx && ctx.fill();\n this.toStatic();\n },\n\n /**\n * @param {CanvasRenderingContext2D} ctx\n * @return {module:zrender/core/PathProxy}\n */\n stroke: function (ctx) {\n ctx && ctx.stroke();\n this.toStatic();\n },\n\n /**\n * 必须在其它绘制命令前调用\n * Must be invoked before all other path drawing methods\n * @return {module:zrender/core/PathProxy}\n */\n setLineDash: function (lineDash) {\n if (lineDash instanceof Array) {\n this._lineDash = lineDash;\n this._dashIdx = 0;\n var lineDashSum = 0;\n\n for (var i = 0; i < lineDash.length; i++) {\n lineDashSum += lineDash[i];\n }\n\n this._dashSum = lineDashSum;\n }\n\n return this;\n },\n\n /**\n * 必须在其它绘制命令前调用\n * Must be invoked before all other path drawing methods\n * @return {module:zrender/core/PathProxy}\n */\n setLineDashOffset: function (offset) {\n this._dashOffset = offset;\n return this;\n },\n\n /**\n *\n * @return {boolean}\n */\n len: function () {\n return this._len;\n },\n\n /**\n * 直接设置 Path 数据\n */\n setData: function (data) {\n var len = data.length;\n\n if (!(this.data && this.data.length == len) && hasTypedArray) {\n this.data = new Float32Array(len);\n }\n\n for (var i = 0; i < len; i++) {\n this.data[i] = data[i];\n }\n\n this._len = len;\n },\n\n /**\n * 添加子路径\n * @param {module:zrender/core/PathProxy|Array.} path\n */\n appendPath: function (path) {\n if (!(path instanceof Array)) {\n path = [path];\n }\n\n var len = path.length;\n var appendSize = 0;\n var offset = this._len;\n\n for (var i = 0; i < len; i++) {\n appendSize += path[i].len();\n }\n\n if (hasTypedArray && this.data instanceof Float32Array) {\n this.data = new Float32Array(offset + appendSize);\n }\n\n for (var i = 0; i < len; i++) {\n var appendPathData = path[i].data;\n\n for (var k = 0; k < appendPathData.length; k++) {\n this.data[offset++] = appendPathData[k];\n }\n }\n\n this._len = offset;\n },\n\n /**\n * 填充 Path 数据。\n * 尽量复用而不申明新的数组。大部分图形重绘的指令数据长度都是不变的。\n */\n addData: function (cmd) {\n if (!this._saveData) {\n return;\n }\n\n var data = this.data;\n\n if (this._len + arguments.length > data.length) {\n // 因为之前的数组已经转换成静态的 Float32Array\n // 所以不够用时需要扩展一个新的动态数组\n this._expandData();\n\n data = this.data;\n }\n\n for (var i = 0; i < arguments.length; i++) {\n data[this._len++] = arguments[i];\n }\n\n this._prevCmd = cmd;\n },\n _expandData: function () {\n // Only if data is Float32Array\n if (!(this.data instanceof Array)) {\n var newData = [];\n\n for (var i = 0; i < this._len; i++) {\n newData[i] = this.data[i];\n }\n\n this.data = newData;\n }\n },\n\n /**\n * If needs js implemented dashed line\n * @return {boolean}\n * @private\n */\n _needsDash: function () {\n return this._lineDash;\n },\n _dashedLineTo: function (x1, y1) {\n var dashSum = this._dashSum;\n var offset = this._dashOffset;\n var lineDash = this._lineDash;\n var ctx = this._ctx;\n var x0 = this._xi;\n var y0 = this._yi;\n var dx = x1 - x0;\n var dy = y1 - y0;\n var dist = mathSqrt(dx * dx + dy * dy);\n var x = x0;\n var y = y0;\n var dash;\n var nDash = lineDash.length;\n var idx;\n dx /= dist;\n dy /= dist;\n\n if (offset < 0) {\n // Convert to positive offset\n offset = dashSum + offset;\n }\n\n offset %= dashSum;\n x -= offset * dx;\n y -= offset * dy;\n\n while (dx > 0 && x <= x1 || dx < 0 && x >= x1 || dx == 0 && (dy > 0 && y <= y1 || dy < 0 && y >= y1)) {\n idx = this._dashIdx;\n dash = lineDash[idx];\n x += dx * dash;\n y += dy * dash;\n this._dashIdx = (idx + 1) % nDash; // Skip positive offset\n\n if (dx > 0 && x < x0 || dx < 0 && x > x0 || dy > 0 && y < y0 || dy < 0 && y > y0) {\n continue;\n }\n\n ctx[idx % 2 ? 'moveTo' : 'lineTo'](dx >= 0 ? mathMin(x, x1) : mathMax(x, x1), dy >= 0 ? mathMin(y, y1) : mathMax(y, y1));\n } // Offset for next lineTo\n\n\n dx = x - x1;\n dy = y - y1;\n this._dashOffset = -mathSqrt(dx * dx + dy * dy);\n },\n // Not accurate dashed line to\n _dashedBezierTo: function (x1, y1, x2, y2, x3, y3) {\n var dashSum = this._dashSum;\n var offset = this._dashOffset;\n var lineDash = this._lineDash;\n var ctx = this._ctx;\n var x0 = this._xi;\n var y0 = this._yi;\n var t;\n var dx;\n var dy;\n var cubicAt = curve.cubicAt;\n var bezierLen = 0;\n var idx = this._dashIdx;\n var nDash = lineDash.length;\n var x;\n var y;\n var tmpLen = 0;\n\n if (offset < 0) {\n // Convert to positive offset\n offset = dashSum + offset;\n }\n\n offset %= dashSum; // Bezier approx length\n\n for (t = 0; t < 1; t += 0.1) {\n dx = cubicAt(x0, x1, x2, x3, t + 0.1) - cubicAt(x0, x1, x2, x3, t);\n dy = cubicAt(y0, y1, y2, y3, t + 0.1) - cubicAt(y0, y1, y2, y3, t);\n bezierLen += mathSqrt(dx * dx + dy * dy);\n } // Find idx after add offset\n\n\n for (; idx < nDash; idx++) {\n tmpLen += lineDash[idx];\n\n if (tmpLen > offset) {\n break;\n }\n }\n\n t = (tmpLen - offset) / bezierLen;\n\n while (t <= 1) {\n x = cubicAt(x0, x1, x2, x3, t);\n y = cubicAt(y0, y1, y2, y3, t); // Use line to approximate dashed bezier\n // Bad result if dash is long\n\n idx % 2 ? ctx.moveTo(x, y) : ctx.lineTo(x, y);\n t += lineDash[idx] / bezierLen;\n idx = (idx + 1) % nDash;\n } // Finish the last segment and calculate the new offset\n\n\n idx % 2 !== 0 && ctx.lineTo(x3, y3);\n dx = x3 - x;\n dy = y3 - y;\n this._dashOffset = -mathSqrt(dx * dx + dy * dy);\n },\n _dashedQuadraticTo: function (x1, y1, x2, y2) {\n // Convert quadratic to cubic using degree elevation\n var x3 = x2;\n var y3 = y2;\n x2 = (x2 + 2 * x1) / 3;\n y2 = (y2 + 2 * y1) / 3;\n x1 = (this._xi + 2 * x1) / 3;\n y1 = (this._yi + 2 * y1) / 3;\n\n this._dashedBezierTo(x1, y1, x2, y2, x3, y3);\n },\n\n /**\n * 转成静态的 Float32Array 减少堆内存占用\n * Convert dynamic array to static Float32Array\n */\n toStatic: function () {\n var data = this.data;\n\n if (data instanceof Array) {\n data.length = this._len;\n\n if (hasTypedArray) {\n this.data = new Float32Array(data);\n }\n }\n },\n\n /**\n * @return {module:zrender/core/BoundingRect}\n */\n getBoundingRect: function () {\n min[0] = min[1] = min2[0] = min2[1] = Number.MAX_VALUE;\n max[0] = max[1] = max2[0] = max2[1] = -Number.MAX_VALUE;\n var data = this.data;\n var xi = 0;\n var yi = 0;\n var x0 = 0;\n var y0 = 0;\n\n for (var i = 0; i < data.length;) {\n var cmd = data[i++];\n\n if (i == 1) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n //\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n xi = data[i];\n yi = data[i + 1];\n x0 = xi;\n y0 = yi;\n }\n\n switch (cmd) {\n case CMD.M:\n // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n // 在 closePath 的时候使用\n x0 = data[i++];\n y0 = data[i++];\n xi = x0;\n yi = y0;\n min2[0] = x0;\n min2[1] = y0;\n max2[0] = x0;\n max2[1] = y0;\n break;\n\n case CMD.L:\n bbox.fromLine(xi, yi, data[i], data[i + 1], min2, max2);\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.C:\n bbox.fromCubic(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], min2, max2);\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.Q:\n bbox.fromQuadratic(xi, yi, data[i++], data[i++], data[i], data[i + 1], min2, max2);\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.A:\n // TODO Arc 判断的开销比较大\n var cx = data[i++];\n var cy = data[i++];\n var rx = data[i++];\n var ry = data[i++];\n var startAngle = data[i++];\n var endAngle = data[i++] + startAngle; // TODO Arc 旋转\n\n var psi = data[i++];\n var anticlockwise = 1 - data[i++];\n\n if (i == 1) {\n // 直接使用 arc 命令\n // 第一个命令起点还未定义\n x0 = mathCos(startAngle) * rx + cx;\n y0 = mathSin(startAngle) * ry + cy;\n }\n\n bbox.fromArc(cx, cy, rx, ry, startAngle, endAngle, anticlockwise, min2, max2);\n xi = mathCos(endAngle) * rx + cx;\n yi = mathSin(endAngle) * ry + cy;\n break;\n\n case CMD.R:\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n var width = data[i++];\n var height = data[i++]; // Use fromLine\n\n bbox.fromLine(x0, y0, x0 + width, y0 + height, min2, max2);\n break;\n\n case CMD.Z:\n xi = x0;\n yi = y0;\n break;\n } // Union\n\n\n vec2.min(min, min, min2);\n vec2.max(max, max, max2);\n } // No data\n\n\n if (i === 0) {\n min[0] = min[1] = max[0] = max[1] = 0;\n }\n\n return new BoundingRect(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n },\n\n /**\n * Rebuild path from current data\n * Rebuild path will not consider javascript implemented line dash.\n * @param {CanvasRenderingContext2D} ctx\n */\n rebuildPath: function (ctx) {\n var d = this.data;\n var x0, y0;\n var xi, yi;\n var x, y;\n var ux = this._ux;\n var uy = this._uy;\n var len = this._len;\n\n for (var i = 0; i < len;) {\n var cmd = d[i++];\n\n if (i == 1) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n //\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n xi = d[i];\n yi = d[i + 1];\n x0 = xi;\n y0 = yi;\n }\n\n switch (cmd) {\n case CMD.M:\n x0 = xi = d[i++];\n y0 = yi = d[i++];\n ctx.moveTo(xi, yi);\n break;\n\n case CMD.L:\n x = d[i++];\n y = d[i++]; // Not draw too small seg between\n\n if (mathAbs(x - xi) > ux || mathAbs(y - yi) > uy || i === len - 1) {\n ctx.lineTo(x, y);\n xi = x;\n yi = y;\n }\n\n break;\n\n case CMD.C:\n ctx.bezierCurveTo(d[i++], d[i++], d[i++], d[i++], d[i++], d[i++]);\n xi = d[i - 2];\n yi = d[i - 1];\n break;\n\n case CMD.Q:\n ctx.quadraticCurveTo(d[i++], d[i++], d[i++], d[i++]);\n xi = d[i - 2];\n yi = d[i - 1];\n break;\n\n case CMD.A:\n var cx = d[i++];\n var cy = d[i++];\n var rx = d[i++];\n var ry = d[i++];\n var theta = d[i++];\n var dTheta = d[i++];\n var psi = d[i++];\n var fs = d[i++];\n var r = rx > ry ? rx : ry;\n var scaleX = rx > ry ? 1 : rx / ry;\n var scaleY = rx > ry ? ry / rx : 1;\n var isEllipse = Math.abs(rx - ry) > 1e-3;\n var endAngle = theta + dTheta;\n\n if (isEllipse) {\n ctx.translate(cx, cy);\n ctx.rotate(psi);\n ctx.scale(scaleX, scaleY);\n ctx.arc(0, 0, r, theta, endAngle, 1 - fs);\n ctx.scale(1 / scaleX, 1 / scaleY);\n ctx.rotate(-psi);\n ctx.translate(-cx, -cy);\n } else {\n ctx.arc(cx, cy, r, theta, endAngle, 1 - fs);\n }\n\n if (i == 1) {\n // 直接使用 arc 命令\n // 第一个命令起点还未定义\n x0 = mathCos(theta) * rx + cx;\n y0 = mathSin(theta) * ry + cy;\n }\n\n xi = mathCos(endAngle) * rx + cx;\n yi = mathSin(endAngle) * ry + cy;\n break;\n\n case CMD.R:\n x0 = xi = d[i];\n y0 = yi = d[i + 1];\n ctx.rect(d[i++], d[i++], d[i++], d[i++]);\n break;\n\n case CMD.Z:\n ctx.closePath();\n xi = x0;\n yi = y0;\n }\n }\n }\n};\nPathProxy.CMD = CMD;\nvar _default = PathProxy;\nmodule.exports = _default;","var features = {};\n\nfunction register(name, ctor) {\n features[name] = ctor;\n}\n\nfunction get(name) {\n return features[name];\n}\n\nexports.register = register;\nexports.get = get;","var SeriesModel = require(\"../../model/Series\");\n\nvar Tree = require(\"../../data/Tree\");\n\nvar _format = require(\"../../util/format\");\n\nvar encodeHTML = _format.encodeHTML;\n\n/**\n * @file Create data struct and define tree view's series model\n */\nvar _default = SeriesModel.extend({\n type: 'series.tree',\n layoutInfo: null,\n // can support the position parameters 'left', 'top','right','bottom', 'width',\n // 'height' in the setOption() with 'merge' mode normal.\n layoutMode: 'box',\n\n /**\n * Init a tree data structure from data in option series\n * @param {Object} option the object used to config echarts view\n * @return {module:echarts/data/List} storage initial data\n */\n getInitialData: function (option) {\n //create an virtual root\n var root = {\n name: option.name,\n children: option.data\n };\n var leaves = option.leaves || {};\n var treeOption = {};\n treeOption.leaves = leaves;\n var tree = Tree.createTree(root, this, treeOption);\n var treeDepth = 0;\n tree.eachNode('preorder', function (node) {\n if (node.depth > treeDepth) {\n treeDepth = node.depth;\n }\n });\n var expandAndCollapse = option.expandAndCollapse;\n var expandTreeDepth = expandAndCollapse && option.initialTreeDepth >= 0 ? option.initialTreeDepth : treeDepth;\n tree.root.eachNode('preorder', function (node) {\n var item = node.hostTree.data.getRawDataItem(node.dataIndex);\n node.isExpand = item && item.collapsed != null ? !item.collapsed : node.depth <= expandTreeDepth;\n });\n return tree.data;\n },\n\n /**\n * @override\n * @param {number} dataIndex\n */\n formatTooltip: function (dataIndex) {\n var tree = this.getData().tree;\n var realRoot = tree.root.children[0];\n var node = tree.getNodeByDataIndex(dataIndex);\n var value = node.getValue();\n var name = node.name;\n\n while (node && node !== realRoot) {\n name = node.parentNode.name + '.' + name;\n node = node.parentNode;\n }\n\n return encodeHTML(name + (isNaN(value) || value == null ? '' : ' : ' + value));\n },\n defaultOption: {\n zlevel: 0,\n z: 2,\n // the position of the whole view\n left: '12%',\n top: '12%',\n right: '12%',\n bottom: '12%',\n // the layout of the tree, two value can be selected, 'orthogonal' or 'radial'\n layout: 'orthogonal',\n // the orient of orthoginal layout, can be setted to 'horizontal' or 'vertical'\n orient: 'horizontal',\n symbol: 'emptyCircle',\n symbolSize: 7,\n expandAndCollapse: true,\n initialTreeDepth: 2,\n lineStyle: {\n normal: {\n color: '#ccc',\n width: 1.5,\n curveness: 0.5\n }\n },\n itemStyle: {\n normal: {\n color: 'lightsteelblue',\n borderColor: '#c23531',\n borderWidth: 1.5\n }\n },\n label: {\n normal: {\n show: true,\n color: '#555'\n }\n },\n leaves: {\n label: {\n normal: {\n show: true\n }\n }\n },\n animationEasing: 'linear',\n animationDuration: 700,\n animationDurationUpdate: 1000\n }\n});\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar numberUtil = require(\"../util/number\");\n\nvar formatUtil = require(\"../util/format\");\n\nvar scaleHelper = require(\"./helper\");\n\nvar IntervalScale = require(\"./Interval\");\n\n// [About UTC and local time zone]:\n// In most cases, `number.parseDate` will treat input data string as local time\n// (except time zone is specified in time string). And `format.formateTime` returns\n// local time by default. option.useUTC is false by default. This design have\n// concidered these common case:\n// (1) Time that is persistent in server is in UTC, but it is needed to be diplayed\n// in local time by default.\n// (2) By default, the input data string (e.g., '2011-01-02') should be displayed\n// as its original time, without any time difference.\nvar intervalScaleProto = IntervalScale.prototype;\nvar mathCeil = Math.ceil;\nvar mathFloor = Math.floor;\nvar ONE_SECOND = 1000;\nvar ONE_MINUTE = ONE_SECOND * 60;\nvar ONE_HOUR = ONE_MINUTE * 60;\nvar ONE_DAY = ONE_HOUR * 24; // FIXME 公用?\n\nvar bisect = function (a, x, lo, hi) {\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n\n if (a[mid][1] < x) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n\n return lo;\n};\n/**\n * @alias module:echarts/coord/scale/Time\n * @constructor\n */\n\n\nvar TimeScale = IntervalScale.extend({\n type: 'time',\n\n /**\n * @override\n */\n getLabel: function (val) {\n var stepLvl = this._stepLvl;\n var date = new Date(val);\n return formatUtil.formatTime(stepLvl[0], date, this.getSetting('useUTC'));\n },\n\n /**\n * @override\n */\n niceExtent: function (opt) {\n var extent = this._extent; // If extent start and end are same, expand them\n\n if (extent[0] === extent[1]) {\n // Expand extent\n extent[0] -= ONE_DAY;\n extent[1] += ONE_DAY;\n } // If there are no data and extent are [Infinity, -Infinity]\n\n\n if (extent[1] === -Infinity && extent[0] === Infinity) {\n var d = new Date();\n extent[1] = +new Date(d.getFullYear(), d.getMonth(), d.getDate());\n extent[0] = extent[1] - ONE_DAY;\n }\n\n this.niceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval); // var extent = this._extent;\n\n var interval = this._interval;\n\n if (!opt.fixMin) {\n extent[0] = numberUtil.round(mathFloor(extent[0] / interval) * interval);\n }\n\n if (!opt.fixMax) {\n extent[1] = numberUtil.round(mathCeil(extent[1] / interval) * interval);\n }\n },\n\n /**\n * @override\n */\n niceTicks: function (approxTickNum, minInterval, maxInterval) {\n approxTickNum = approxTickNum || 10;\n var extent = this._extent;\n var span = extent[1] - extent[0];\n var approxInterval = span / approxTickNum;\n\n if (minInterval != null && approxInterval < minInterval) {\n approxInterval = minInterval;\n }\n\n if (maxInterval != null && approxInterval > maxInterval) {\n approxInterval = maxInterval;\n }\n\n var scaleLevelsLen = scaleLevels.length;\n var idx = bisect(scaleLevels, approxInterval, 0, scaleLevelsLen);\n var level = scaleLevels[Math.min(idx, scaleLevelsLen - 1)];\n var interval = level[1]; // Same with interval scale if span is much larger than 1 year\n\n if (level[0] === 'year') {\n var yearSpan = span / interval; // From \"Nice Numbers for Graph Labels\" of Graphic Gems\n // var niceYearSpan = numberUtil.nice(yearSpan, false);\n\n var yearStep = numberUtil.nice(yearSpan / approxTickNum, true);\n interval *= yearStep;\n }\n\n var timezoneOffset = this.getSetting('useUTC') ? 0 : new Date(+extent[0] || +extent[1]).getTimezoneOffset() * 60 * 1000;\n var niceExtent = [Math.round(mathCeil((extent[0] - timezoneOffset) / interval) * interval + timezoneOffset), Math.round(mathFloor((extent[1] - timezoneOffset) / interval) * interval + timezoneOffset)];\n scaleHelper.fixExtent(niceExtent, extent);\n this._stepLvl = level; // Interval will be used in getTicks\n\n this._interval = interval;\n this._niceExtent = niceExtent;\n },\n parse: function (val) {\n // val might be float.\n return +numberUtil.parseDate(val);\n }\n});\nzrUtil.each(['contain', 'normalize'], function (methodName) {\n TimeScale.prototype[methodName] = function (val) {\n return intervalScaleProto[methodName].call(this, this.parse(val));\n };\n}); // Steps from d3\n\nvar scaleLevels = [// Format interval\n['hh:mm:ss', ONE_SECOND], // 1s\n['hh:mm:ss', ONE_SECOND * 5], // 5s\n['hh:mm:ss', ONE_SECOND * 10], // 10s\n['hh:mm:ss', ONE_SECOND * 15], // 15s\n['hh:mm:ss', ONE_SECOND * 30], // 30s\n['hh:mm\\nMM-dd', ONE_MINUTE], // 1m\n['hh:mm\\nMM-dd', ONE_MINUTE * 5], // 5m\n['hh:mm\\nMM-dd', ONE_MINUTE * 10], // 10m\n['hh:mm\\nMM-dd', ONE_MINUTE * 15], // 15m\n['hh:mm\\nMM-dd', ONE_MINUTE * 30], // 30m\n['hh:mm\\nMM-dd', ONE_HOUR], // 1h\n['hh:mm\\nMM-dd', ONE_HOUR * 2], // 2h\n['hh:mm\\nMM-dd', ONE_HOUR * 6], // 6h\n['hh:mm\\nMM-dd', ONE_HOUR * 12], // 12h\n['MM-dd\\nyyyy', ONE_DAY], // 1d\n['MM-dd\\nyyyy', ONE_DAY * 2], // 2d\n['MM-dd\\nyyyy', ONE_DAY * 3], // 3d\n['MM-dd\\nyyyy', ONE_DAY * 4], // 4d\n['MM-dd\\nyyyy', ONE_DAY * 5], // 5d\n['MM-dd\\nyyyy', ONE_DAY * 6], // 6d\n['week', ONE_DAY * 7], // 7d\n['MM-dd\\nyyyy', ONE_DAY * 10], // 10d\n['week', ONE_DAY * 14], // 2w\n['week', ONE_DAY * 21], // 3w\n['month', ONE_DAY * 31], // 1M\n['week', ONE_DAY * 42], // 6w\n['month', ONE_DAY * 62], // 2M\n['week', ONE_DAY * 42], // 10w\n['quarter', ONE_DAY * 380 / 4], // 3M\n['month', ONE_DAY * 31 * 4], // 4M\n['month', ONE_DAY * 31 * 5], // 5M\n['half-year', ONE_DAY * 380 / 2], // 6M\n['month', ONE_DAY * 31 * 8], // 8M\n['month', ONE_DAY * 31 * 10], // 10M\n['year', ONE_DAY * 380] // 1Y\n];\n/**\n * @param {module:echarts/model/Model}\n * @return {module:echarts/scale/Time}\n */\n\nTimeScale.create = function (model) {\n return new TimeScale({\n useUTC: model.ecModel.get('useUTC')\n });\n};\n\nvar _default = TimeScale;\nmodule.exports = _default;","var _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar createListFromArray = require(\"../helper/createListFromArray\");\n\nvar SeriesModel = require(\"../../model/Series\");\n\nvar _default = SeriesModel.extend({\n type: 'series.line',\n dependencies: ['grid', 'polar'],\n getInitialData: function (option, ecModel) {\n return createListFromArray(option.data, this, ecModel);\n },\n defaultOption: {\n zlevel: 0,\n // 一级层叠\n z: 2,\n // 二级层叠\n coordinateSystem: 'cartesian2d',\n legendHoverLink: true,\n hoverAnimation: true,\n // stack: null\n // xAxisIndex: 0,\n // yAxisIndex: 0,\n // polarIndex: 0,\n // If clip the overflow value\n clipOverflow: true,\n // cursor: null,\n label: {\n normal: {\n position: 'top'\n }\n },\n // itemStyle: {\n // normal: {},\n // emphasis: {}\n // },\n lineStyle: {\n normal: {\n width: 2,\n type: 'solid'\n }\n },\n // areaStyle: {},\n // false, 'start', 'end', 'middle'\n step: false,\n // Disabled if step is true\n smooth: false,\n smoothMonotone: null,\n // 拐点图形类型\n symbol: 'emptyCircle',\n // 拐点图形大小\n symbolSize: 4,\n // 拐点图形旋转控制\n symbolRotate: null,\n // 是否显示 symbol, 只有在 tooltip hover 的时候显示\n showSymbol: true,\n // 标志图形默认只有主轴显示(随主轴标签间隔隐藏策略)\n showAllSymbol: false,\n // 是否连接断点\n connectNulls: false,\n // 数据过滤,'average', 'max', 'min', 'sum'\n sampling: 'none',\n animationEasing: 'linear',\n // Disable progressive\n progressive: 0,\n hoverLayerThreshold: Infinity\n }\n});\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar Component = require(\"../../model/Component\");\n\nrequire(\"./AxisModel\");\n\nvar _default = Component.extend({\n type: 'parallel',\n dependencies: ['parallelAxis'],\n\n /**\n * @type {module:echarts/coord/parallel/Parallel}\n */\n coordinateSystem: null,\n\n /**\n * Each item like: 'dim0', 'dim1', 'dim2', ...\n * @type {Array.}\n * @readOnly\n */\n dimensions: null,\n\n /**\n * Coresponding to dimensions.\n * @type {Array.}\n * @readOnly\n */\n parallelAxisIndex: null,\n layoutMode: 'box',\n defaultOption: {\n zlevel: 0,\n z: 0,\n left: 80,\n top: 60,\n right: 80,\n bottom: 60,\n // width: {totalWidth} - left - right,\n // height: {totalHeight} - top - bottom,\n layout: 'horizontal',\n // 'horizontal' or 'vertical'\n // FIXME\n // naming?\n axisExpandable: false,\n axisExpandCenter: null,\n axisExpandCount: 0,\n axisExpandWidth: 50,\n // FIXME '10%' ?\n axisExpandRate: 17,\n axisExpandDebounce: 50,\n // [out, in, jumpTarget]. In percentage. If use [null, 0.05], null means full.\n // Do not doc to user until necessary.\n axisExpandSlideTriggerArea: [-0.15, 0.05, 0.4],\n axisExpandTriggerOn: 'click',\n // 'mousemove' or 'click'\n parallelAxisDefault: null\n },\n\n /**\n * @override\n */\n init: function () {\n Component.prototype.init.apply(this, arguments);\n this.mergeOption({});\n },\n\n /**\n * @override\n */\n mergeOption: function (newOption) {\n var thisOption = this.option;\n newOption && zrUtil.merge(thisOption, newOption, true);\n\n this._initDimensions();\n },\n\n /**\n * Whether series or axis is in this coordinate system.\n * @param {module:echarts/model/Series|module:echarts/coord/parallel/AxisModel} model\n * @param {module:echarts/model/Global} ecModel\n */\n contains: function (model, ecModel) {\n var parallelIndex = model.get('parallelIndex');\n return parallelIndex != null && ecModel.getComponent('parallel', parallelIndex) === this;\n },\n setAxisExpand: function (opt) {\n zrUtil.each(['axisExpandable', 'axisExpandCenter', 'axisExpandCount', 'axisExpandWidth', 'axisExpandWindow'], function (name) {\n if (opt.hasOwnProperty(name)) {\n this.option[name] = opt[name];\n }\n }, this);\n },\n\n /**\n * @private\n */\n _initDimensions: function () {\n var dimensions = this.dimensions = [];\n var parallelAxisIndex = this.parallelAxisIndex = [];\n var axisModels = zrUtil.filter(this.dependentModels.parallelAxis, function (axisModel) {\n // Can not use this.contains here, because\n // initialization has not been completed yet.\n return (axisModel.get('parallelIndex') || 0) === this.componentIndex;\n }, this);\n zrUtil.each(axisModels, function (axisModel) {\n dimensions.push('dim' + axisModel.get('dim'));\n parallelAxisIndex.push(axisModel.componentIndex);\n });\n }\n});\n\nmodule.exports = _default;","/**\n * echarts设备环境识别\n *\n * @desc echarts基于Canvas,纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据统计图表。\n * @author firede[firede@firede.us]\n * @desc thanks zepto.\n */\nvar env = {};\n\nif (typeof navigator === 'undefined') {\n // In node\n env = {\n browser: {},\n os: {},\n node: true,\n // Assume canvas is supported\n canvasSupported: true,\n svgSupported: true\n };\n} else {\n env = detect(navigator.userAgent);\n}\n\nvar _default = env; // Zepto.js\n// (c) 2010-2013 Thomas Fuchs\n// Zepto.js may be freely distributed under the MIT license.\n\nfunction detect(ua) {\n var os = {};\n var browser = {}; // var webkit = ua.match(/Web[kK]it[\\/]{0,1}([\\d.]+)/);\n // var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);\n // var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n // var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n // var iphone = !ipad && ua.match(/(iPhone\\sOS)\\s([\\d_]+)/);\n // var webos = ua.match(/(webOS|hpwOS)[\\s\\/]([\\d.]+)/);\n // var touchpad = webos && ua.match(/TouchPad/);\n // var kindle = ua.match(/Kindle\\/([\\d.]+)/);\n // var silk = ua.match(/Silk\\/([\\d._]+)/);\n // var blackberry = ua.match(/(BlackBerry).*Version\\/([\\d.]+)/);\n // var bb10 = ua.match(/(BB10).*Version\\/([\\d.]+)/);\n // var rimtabletos = ua.match(/(RIM\\sTablet\\sOS)\\s([\\d.]+)/);\n // var playbook = ua.match(/PlayBook/);\n // var chrome = ua.match(/Chrome\\/([\\d.]+)/) || ua.match(/CriOS\\/([\\d.]+)/);\n\n var firefox = ua.match(/Firefox\\/([\\d.]+)/); // var safari = webkit && ua.match(/Mobile\\//) && !chrome;\n // var webview = ua.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/) && !chrome;\n\n var ie = ua.match(/MSIE\\s([\\d.]+)/) // IE 11 Trident/7.0; rv:11.0\n || ua.match(/Trident\\/.+?rv:(([\\d.]+))/);\n var edge = ua.match(/Edge\\/([\\d.]+)/); // IE 12 and 12+\n\n var weChat = /micromessenger/i.test(ua); // Todo: clean this up with a better OS/browser seperation:\n // - discern (more) between multiple browsers on android\n // - decide if kindle fire in silk mode is android or not\n // - Firefox on Android doesn't specify the Android version\n // - possibly devide in os, device and browser hashes\n // if (browser.webkit = !!webkit) browser.version = webkit[1];\n // if (android) os.android = true, os.version = android[2];\n // if (iphone && !ipod) os.ios = os.iphone = true, os.version = iphone[2].replace(/_/g, '.');\n // if (ipad) os.ios = os.ipad = true, os.version = ipad[2].replace(/_/g, '.');\n // if (ipod) os.ios = os.ipod = true, os.version = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n // if (webos) os.webos = true, os.version = webos[2];\n // if (touchpad) os.touchpad = true;\n // if (blackberry) os.blackberry = true, os.version = blackberry[2];\n // if (bb10) os.bb10 = true, os.version = bb10[2];\n // if (rimtabletos) os.rimtabletos = true, os.version = rimtabletos[2];\n // if (playbook) browser.playbook = true;\n // if (kindle) os.kindle = true, os.version = kindle[1];\n // if (silk) browser.silk = true, browser.version = silk[1];\n // if (!silk && os.android && ua.match(/Kindle Fire/)) browser.silk = true;\n // if (chrome) browser.chrome = true, browser.version = chrome[1];\n\n if (firefox) {\n browser.firefox = true;\n browser.version = firefox[1];\n } // if (safari && (ua.match(/Safari/) || !!os.ios)) browser.safari = true;\n // if (webview) browser.webview = true;\n\n\n if (ie) {\n browser.ie = true;\n browser.version = ie[1];\n }\n\n if (edge) {\n browser.edge = true;\n browser.version = edge[1];\n } // It is difficult to detect WeChat in Win Phone precisely, because ua can\n // not be set on win phone. So we do not consider Win Phone.\n\n\n if (weChat) {\n browser.weChat = true;\n } // os.tablet = !!(ipad || playbook || (android && !ua.match(/Mobile/)) ||\n // (firefox && ua.match(/Tablet/)) || (ie && !ua.match(/Phone/) && ua.match(/Touch/)));\n // os.phone = !!(!os.tablet && !os.ipod && (android || iphone || webos ||\n // (chrome && ua.match(/Android/)) || (chrome && ua.match(/CriOS\\/([\\d.]+)/)) ||\n // (firefox && ua.match(/Mobile/)) || (ie && ua.match(/Touch/))));\n\n\n return {\n browser: browser,\n os: os,\n node: false,\n // 原生canvas支持,改极端点了\n // canvasSupported : !(browser.ie && parseFloat(browser.version) < 9)\n canvasSupported: !!document.createElement('canvas').getContext,\n svgSupported: typeof SVGRect !== 'undefined',\n // @see \n // works on most browsers\n // IE10/11 does not support touch event, and MS Edge supports them but not by\n // default, so we dont check navigator.maxTouchPoints for them here.\n touchEventsSupported: 'ontouchstart' in window && !browser.ie && !browser.edge,\n // .\n pointerEventsSupported: 'onpointerdown' in window // Firefox supports pointer but not by default, only MS browsers are reliable on pointer\n // events currently. So we dont use that on other browsers unless tested sufficiently.\n // Although IE 10 supports pointer event, it use old style and is different from the\n // standard. So we exclude that. (IE 10 is hardly used on touch device)\n && (browser.edge || browser.ie && browser.version >= 11)\n };\n}\n\nmodule.exports = _default;","var layout = require(\"../../util/layout\");\n\n/**\n * @file The layout algorithm of node-link tree diagrams. Here we using Reingold-Tilford algorithm to drawing\n * the tree.\n * @see https://github.com/d3/d3-hierarchy\n */\n\n/**\n * Initialize all computational message for following algorithm\n * @param {module:echarts/data/Tree~TreeNode} root The virtual root of the tree\n */\nfunction init(root) {\n root.hierNode = {\n defaultAncestor: null,\n ancestor: root,\n prelim: 0,\n modifier: 0,\n change: 0,\n shift: 0,\n i: 0,\n thread: null\n };\n var nodes = [root];\n var node;\n var children;\n\n while (node = nodes.pop()) {\n // jshint ignore:line\n children = node.children;\n\n if (node.isExpand && children.length) {\n var n = children.length;\n\n for (var i = n - 1; i >= 0; i--) {\n var child = children[i];\n child.hierNode = {\n defaultAncestor: null,\n ancestor: child,\n prelim: 0,\n modifier: 0,\n change: 0,\n shift: 0,\n i: i,\n thread: null\n };\n nodes.push(child);\n }\n }\n }\n}\n/**\n * Computes a preliminary x coordinate for node. Before that, this function is\n * applied recursively to the children of node, as well as the function\n * apportion(). After spacing out the children by calling executeShifts(), the\n * node is placed to the midpoint of its outermost children.\n * @param {module:echarts/data/Tree~TreeNode} node\n * @param {Function} separation\n */\n\n\nfunction firstWalk(node, separation) {\n var children = node.isExpand ? node.children : [];\n var siblings = node.parentNode.children;\n var subtreeW = node.hierNode.i ? siblings[node.hierNode.i - 1] : null;\n\n if (children.length) {\n executeShifts(node);\n var midPoint = (children[0].hierNode.prelim + children[children.length - 1].hierNode.prelim) / 2;\n\n if (subtreeW) {\n node.hierNode.prelim = subtreeW.hierNode.prelim + separation(node, subtreeW);\n node.hierNode.modifier = node.hierNode.prelim - midPoint;\n } else {\n node.hierNode.prelim = midPoint;\n }\n } else if (subtreeW) {\n node.hierNode.prelim = subtreeW.hierNode.prelim + separation(node, subtreeW);\n }\n\n node.parentNode.hierNode.defaultAncestor = apportion(node, subtreeW, node.parentNode.hierNode.defaultAncestor || siblings[0], separation);\n}\n/**\n * Computes all real x-coordinates by summing up the modifiers recursively.\n * @param {module:echarts/data/Tree~TreeNode} node\n */\n\n\nfunction secondWalk(node) {\n var nodeX = node.hierNode.prelim + node.parentNode.hierNode.modifier;\n node.setLayout({\n x: nodeX\n }, true);\n node.hierNode.modifier += node.parentNode.hierNode.modifier;\n}\n\nfunction separation(cb) {\n return arguments.length ? cb : defaultSeparation;\n}\n/**\n * Transform the common coordinate to radial coordinate\n * @param {number} x\n * @param {number} y\n * @return {Object}\n */\n\n\nfunction radialCoordinate(x, y) {\n var radialCoor = {};\n x -= Math.PI / 2;\n radialCoor.x = y * Math.cos(x);\n radialCoor.y = y * Math.sin(x);\n return radialCoor;\n}\n/**\n * Get the layout position of the whole view\n * @param {module:echarts/model/Series} seriesModel the model object of sankey series\n * @param {module:echarts/ExtensionAPI} api provide the API list that the developer can call\n * @return {module:zrender/core/BoundingRect} size of rect to draw the sankey view\n */\n\n\nfunction getViewRect(seriesModel, api) {\n return layout.getLayoutRect(seriesModel.getBoxLayoutParams(), {\n width: api.getWidth(),\n height: api.getHeight()\n });\n}\n/**\n * All other shifts, applied to the smaller subtrees between w- and w+, are\n * performed by this function.\n * @param {module:echarts/data/Tree~TreeNode} node\n */\n\n\nfunction executeShifts(node) {\n var children = node.children;\n var n = children.length;\n var shift = 0;\n var change = 0;\n\n while (--n >= 0) {\n var child = children[n];\n child.hierNode.prelim += shift;\n child.hierNode.modifier += shift;\n change += child.hierNode.change;\n shift += child.hierNode.shift + change;\n }\n}\n/**\n * The core of the algorithm. Here, a new subtree is combined with the\n * previous subtrees. Threads are used to traverse the inside and outside\n * contours of the left and right subtree up to the highest common level.\n * Whenever two nodes of the inside contours conflict, we compute the left\n * one of the greatest uncommon ancestors using the function nextAncestor()\n * and call moveSubtree() to shift the subtree and prepare the shifts of\n * smaller subtrees. Finally, we add a new thread (if necessary).\n * @param {module:echarts/data/Tree~TreeNode} subtreeV\n * @param {module:echarts/data/Tree~TreeNode} subtreeW\n * @param {module:echarts/data/Tree~TreeNode} ancestor\n * @param {Function} separation\n * @return {module:echarts/data/Tree~TreeNode}\n */\n\n\nfunction apportion(subtreeV, subtreeW, ancestor, separation) {\n if (subtreeW) {\n var nodeOutRight = subtreeV;\n var nodeInRight = subtreeV;\n var nodeOutLeft = nodeInRight.parentNode.children[0];\n var nodeInLeft = subtreeW;\n var sumOutRight = nodeOutRight.hierNode.modifier;\n var sumInRight = nodeInRight.hierNode.modifier;\n var sumOutLeft = nodeOutLeft.hierNode.modifier;\n var sumInLeft = nodeInLeft.hierNode.modifier;\n\n while (nodeInLeft = nextRight(nodeInLeft), nodeInRight = nextLeft(nodeInRight), nodeInLeft && nodeInRight) {\n nodeOutRight = nextRight(nodeOutRight);\n nodeOutLeft = nextLeft(nodeOutLeft);\n nodeOutRight.hierNode.ancestor = subtreeV;\n var shift = nodeInLeft.hierNode.prelim + sumInLeft - nodeInRight.hierNode.prelim - sumInRight + separation(nodeInLeft, nodeInRight);\n\n if (shift > 0) {\n moveSubtree(nextAncestor(nodeInLeft, subtreeV, ancestor), subtreeV, shift);\n sumInRight += shift;\n sumOutRight += shift;\n }\n\n sumInLeft += nodeInLeft.hierNode.modifier;\n sumInRight += nodeInRight.hierNode.modifier;\n sumOutRight += nodeOutRight.hierNode.modifier;\n sumOutLeft += nodeOutLeft.hierNode.modifier;\n }\n\n if (nodeInLeft && !nextRight(nodeOutRight)) {\n nodeOutRight.hierNode.thread = nodeInLeft;\n nodeOutRight.hierNode.modifier += sumInLeft - sumOutRight;\n }\n\n if (nodeInRight && !nextLeft(nodeOutLeft)) {\n nodeOutLeft.hierNode.thread = nodeInRight;\n nodeOutLeft.hierNode.modifier += sumInRight - sumOutLeft;\n ancestor = subtreeV;\n }\n }\n\n return ancestor;\n}\n/**\n * This function is used to traverse the right contour of a subtree.\n * It returns the rightmost child of node or the thread of node. The function\n * returns null if and only if node is on the highest depth of its subtree.\n * @param {module:echarts/data/Tree~TreeNode} node\n * @return {module:echarts/data/Tree~TreeNode}\n */\n\n\nfunction nextRight(node) {\n var children = node.children;\n return children.length && node.isExpand ? children[children.length - 1] : node.hierNode.thread;\n}\n/**\n * This function is used to traverse the left contour of a subtree (or a subforest).\n * It returns the leftmost child of node or the thread of node. The function\n * returns null if and only if node is on the highest depth of its subtree.\n * @param {module:echarts/data/Tree~TreeNode} node\n * @return {module:echarts/data/Tree~TreeNode}\n */\n\n\nfunction nextLeft(node) {\n var children = node.children;\n return children.length && node.isExpand ? children[0] : node.hierNode.thread;\n}\n/**\n * If nodeInLeft’s ancestor is a sibling of node, returns nodeInLeft’s ancestor.\n * Otherwise, returns the specified ancestor.\n * @param {module:echarts/data/Tree~TreeNode} nodeInLeft\n * @param {module:echarts/data/Tree~TreeNode} node\n * @param {module:echarts/data/Tree~TreeNode} ancestor\n * @return {module:echarts/data/Tree~TreeNode}\n */\n\n\nfunction nextAncestor(nodeInLeft, node, ancestor) {\n return nodeInLeft.hierNode.ancestor.parentNode === node.parentNode ? nodeInLeft.hierNode.ancestor : ancestor;\n}\n/**\n * Shifts the current subtree rooted at wr. This is done by increasing prelim(w+) and modifier(w+) by shift.\n * @param {module:echarts/data/Tree~TreeNode} wl\n * @param {module:echarts/data/Tree~TreeNode} wr\n * @param {number} shift [description]\n */\n\n\nfunction moveSubtree(wl, wr, shift) {\n var change = shift / (wr.hierNode.i - wl.hierNode.i);\n wr.hierNode.change -= change;\n wr.hierNode.shift += shift;\n wr.hierNode.modifier += shift;\n wr.hierNode.prelim += shift;\n wl.hierNode.change += change;\n}\n\nfunction defaultSeparation(node1, node2) {\n return node1.parentNode === node2.parentNode ? 1 : 2;\n}\n\nexports.init = init;\nexports.firstWalk = firstWalk;\nexports.secondWalk = secondWalk;\nexports.separation = separation;\nexports.radialCoordinate = radialCoordinate;\nexports.getViewRect = getViewRect;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar pathTool = require(\"zrender/lib/tool/path\");\n\nvar colorTool = require(\"zrender/lib/tool/color\");\n\nvar matrix = require(\"zrender/lib/core/matrix\");\n\nvar vector = require(\"zrender/lib/core/vector\");\n\nvar Path = require(\"zrender/lib/graphic/Path\");\n\nvar Transformable = require(\"zrender/lib/mixin/Transformable\");\n\nvar Image = require(\"zrender/lib/graphic/Image\");\n\nexports.Image = Image;\n\nvar Group = require(\"zrender/lib/container/Group\");\n\nexports.Group = Group;\n\nvar Text = require(\"zrender/lib/graphic/Text\");\n\nexports.Text = Text;\n\nvar Circle = require(\"zrender/lib/graphic/shape/Circle\");\n\nexports.Circle = Circle;\n\nvar Sector = require(\"zrender/lib/graphic/shape/Sector\");\n\nexports.Sector = Sector;\n\nvar Ring = require(\"zrender/lib/graphic/shape/Ring\");\n\nexports.Ring = Ring;\n\nvar Polygon = require(\"zrender/lib/graphic/shape/Polygon\");\n\nexports.Polygon = Polygon;\n\nvar Polyline = require(\"zrender/lib/graphic/shape/Polyline\");\n\nexports.Polyline = Polyline;\n\nvar Rect = require(\"zrender/lib/graphic/shape/Rect\");\n\nexports.Rect = Rect;\n\nvar Line = require(\"zrender/lib/graphic/shape/Line\");\n\nexports.Line = Line;\n\nvar BezierCurve = require(\"zrender/lib/graphic/shape/BezierCurve\");\n\nexports.BezierCurve = BezierCurve;\n\nvar Arc = require(\"zrender/lib/graphic/shape/Arc\");\n\nexports.Arc = Arc;\n\nvar CompoundPath = require(\"zrender/lib/graphic/CompoundPath\");\n\nexports.CompoundPath = CompoundPath;\n\nvar LinearGradient = require(\"zrender/lib/graphic/LinearGradient\");\n\nexports.LinearGradient = LinearGradient;\n\nvar RadialGradient = require(\"zrender/lib/graphic/RadialGradient\");\n\nexports.RadialGradient = RadialGradient;\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nexports.BoundingRect = BoundingRect;\nvar round = Math.round;\nvar mathMax = Math.max;\nvar mathMin = Math.min;\nvar EMPTY_OBJ = {};\n/**\n * Extend shape with parameters\n */\n\nfunction extendShape(opts) {\n return Path.extend(opts);\n}\n/**\n * Extend path\n */\n\n\nfunction extendPath(pathData, opts) {\n return pathTool.extendFromString(pathData, opts);\n}\n/**\n * Create a path element from path data string\n * @param {string} pathData\n * @param {Object} opts\n * @param {module:zrender/core/BoundingRect} rect\n * @param {string} [layout=cover] 'center' or 'cover'\n */\n\n\nfunction makePath(pathData, opts, rect, layout) {\n var path = pathTool.createFromString(pathData, opts);\n var boundingRect = path.getBoundingRect();\n\n if (rect) {\n if (layout === 'center') {\n rect = centerGraphic(rect, boundingRect);\n }\n\n resizePath(path, rect);\n }\n\n return path;\n}\n/**\n * Create a image element from image url\n * @param {string} imageUrl image url\n * @param {Object} opts options\n * @param {module:zrender/core/BoundingRect} rect constrain rect\n * @param {string} [layout=cover] 'center' or 'cover'\n */\n\n\nfunction makeImage(imageUrl, rect, layout) {\n var path = new Image({\n style: {\n image: imageUrl,\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height\n },\n onload: function (img) {\n if (layout === 'center') {\n var boundingRect = {\n width: img.width,\n height: img.height\n };\n path.setStyle(centerGraphic(rect, boundingRect));\n }\n }\n });\n return path;\n}\n/**\n * Get position of centered element in bounding box.\n *\n * @param {Object} rect element local bounding box\n * @param {Object} boundingRect constraint bounding box\n * @return {Object} element position containing x, y, width, and height\n */\n\n\nfunction centerGraphic(rect, boundingRect) {\n // Set rect to center, keep width / height ratio.\n var aspect = boundingRect.width / boundingRect.height;\n var width = rect.height * aspect;\n var height;\n\n if (width <= rect.width) {\n height = rect.height;\n } else {\n width = rect.width;\n height = width / aspect;\n }\n\n var cx = rect.x + rect.width / 2;\n var cy = rect.y + rect.height / 2;\n return {\n x: cx - width / 2,\n y: cy - height / 2,\n width: width,\n height: height\n };\n}\n\nvar mergePath = pathTool.mergePath;\n/**\n * Resize a path to fit the rect\n * @param {module:zrender/graphic/Path} path\n * @param {Object} rect\n */\n\nfunction resizePath(path, rect) {\n if (!path.applyTransform) {\n return;\n }\n\n var pathRect = path.getBoundingRect();\n var m = pathRect.calculateTransform(rect);\n path.applyTransform(m);\n}\n/**\n * Sub pixel optimize line for canvas\n *\n * @param {Object} param\n * @param {Object} [param.shape]\n * @param {number} [param.shape.x1]\n * @param {number} [param.shape.y1]\n * @param {number} [param.shape.x2]\n * @param {number} [param.shape.y2]\n * @param {Object} [param.style]\n * @param {number} [param.style.lineWidth]\n * @return {Object} Modified param\n */\n\n\nfunction subPixelOptimizeLine(param) {\n var shape = param.shape;\n var lineWidth = param.style.lineWidth;\n\n if (round(shape.x1 * 2) === round(shape.x2 * 2)) {\n shape.x1 = shape.x2 = subPixelOptimize(shape.x1, lineWidth, true);\n }\n\n if (round(shape.y1 * 2) === round(shape.y2 * 2)) {\n shape.y1 = shape.y2 = subPixelOptimize(shape.y1, lineWidth, true);\n }\n\n return param;\n}\n/**\n * Sub pixel optimize rect for canvas\n *\n * @param {Object} param\n * @param {Object} [param.shape]\n * @param {number} [param.shape.x]\n * @param {number} [param.shape.y]\n * @param {number} [param.shape.width]\n * @param {number} [param.shape.height]\n * @param {Object} [param.style]\n * @param {number} [param.style.lineWidth]\n * @return {Object} Modified param\n */\n\n\nfunction subPixelOptimizeRect(param) {\n var shape = param.shape;\n var lineWidth = param.style.lineWidth;\n var originX = shape.x;\n var originY = shape.y;\n var originWidth = shape.width;\n var originHeight = shape.height;\n shape.x = subPixelOptimize(shape.x, lineWidth, true);\n shape.y = subPixelOptimize(shape.y, lineWidth, true);\n shape.width = Math.max(subPixelOptimize(originX + originWidth, lineWidth, false) - shape.x, originWidth === 0 ? 0 : 1);\n shape.height = Math.max(subPixelOptimize(originY + originHeight, lineWidth, false) - shape.y, originHeight === 0 ? 0 : 1);\n return param;\n}\n/**\n * Sub pixel optimize for canvas\n *\n * @param {number} position Coordinate, such as x, y\n * @param {number} lineWidth Should be nonnegative integer.\n * @param {boolean=} positiveOrNegative Default false (negative).\n * @return {number} Optimized position.\n */\n\n\nfunction subPixelOptimize(position, lineWidth, positiveOrNegative) {\n // Assure that (position + lineWidth / 2) is near integer edge,\n // otherwise line will be fuzzy in canvas.\n var doubledPosition = round(position * 2);\n return (doubledPosition + round(lineWidth)) % 2 === 0 ? doubledPosition / 2 : (doubledPosition + (positiveOrNegative ? 1 : -1)) / 2;\n}\n\nfunction hasFillOrStroke(fillOrStroke) {\n return fillOrStroke != null && fillOrStroke != 'none';\n}\n\nfunction liftColor(color) {\n return typeof color === 'string' ? colorTool.lift(color, -0.1) : color;\n}\n/**\n * @private\n */\n\n\nfunction cacheElementStl(el) {\n if (el.__hoverStlDirty) {\n var stroke = el.style.stroke;\n var fill = el.style.fill; // Create hoverStyle on mouseover\n\n var hoverStyle = el.__hoverStl;\n hoverStyle.fill = hoverStyle.fill || (hasFillOrStroke(fill) ? liftColor(fill) : null);\n hoverStyle.stroke = hoverStyle.stroke || (hasFillOrStroke(stroke) ? liftColor(stroke) : null);\n var normalStyle = {};\n\n for (var name in hoverStyle) {\n // See comment in `doSingleEnterHover`.\n if (hoverStyle[name] != null) {\n normalStyle[name] = el.style[name];\n }\n }\n\n el.__normalStl = normalStyle;\n el.__hoverStlDirty = false;\n }\n}\n/**\n * @private\n */\n\n\nfunction doSingleEnterHover(el) {\n if (el.__isHover) {\n return;\n }\n\n cacheElementStl(el);\n\n if (el.useHoverLayer) {\n el.__zr && el.__zr.addHover(el, el.__hoverStl);\n } else {\n var style = el.style;\n var insideRollbackOpt = style.insideRollbackOpt; // Consider case: only `position: 'top'` is set on emphasis, then text\n // color should be returned to `autoColor`, rather than remain '#fff'.\n // So we should rollback then apply again after style merging.\n\n insideRollbackOpt && rollbackInsideStyle(style); // styles can be:\n // {\n // label: {\n // normal: {\n // show: false,\n // position: 'outside',\n // fontSize: 18\n // },\n // emphasis: {\n // show: true\n // }\n // }\n // },\n // where properties of `emphasis` may not appear in `normal`. We previously use\n // module:echarts/util/model#defaultEmphasis to merge `normal` to `emphasis`.\n // But consider rich text and setOption in merge mode, it is impossible to cover\n // all properties in merge. So we use merge mode when setting style here, where\n // only properties that is not `null/undefined` can be set. The disadventage:\n // null/undefined can not be used to remove style any more in `emphasis`.\n\n style.extendFrom(el.__hoverStl); // Do not save `insideRollback`.\n\n if (insideRollbackOpt) {\n applyInsideStyle(style, style.insideOriginalTextPosition, insideRollbackOpt); // textFill may be rollbacked to null.\n\n if (style.textFill == null) {\n style.textFill = insideRollbackOpt.autoColor;\n }\n }\n\n el.dirty(false);\n el.z2 += 1;\n }\n\n el.__isHover = true;\n}\n/**\n * @inner\n */\n\n\nfunction doSingleLeaveHover(el) {\n if (!el.__isHover) {\n return;\n }\n\n var normalStl = el.__normalStl;\n\n if (el.useHoverLayer) {\n el.__zr && el.__zr.removeHover(el);\n } else {\n // Consider null/undefined value, should use\n // `setStyle` but not `extendFrom(stl, true)`.\n normalStl && el.setStyle(normalStl);\n el.z2 -= 1;\n }\n\n el.__isHover = false;\n}\n/**\n * @inner\n */\n\n\nfunction doEnterHover(el) {\n el.type === 'group' ? el.traverse(function (child) {\n if (child.type !== 'group') {\n doSingleEnterHover(child);\n }\n }) : doSingleEnterHover(el);\n}\n\nfunction doLeaveHover(el) {\n el.type === 'group' ? el.traverse(function (child) {\n if (child.type !== 'group') {\n doSingleLeaveHover(child);\n }\n }) : doSingleLeaveHover(el);\n}\n/**\n * @inner\n */\n\n\nfunction setElementHoverStl(el, hoverStl) {\n // If element has sepcified hoverStyle, then use it instead of given hoverStyle\n // Often used when item group has a label element and it's hoverStyle is different\n el.__hoverStl = el.hoverStyle || hoverStl || {};\n el.__hoverStlDirty = true;\n\n if (el.__isHover) {\n cacheElementStl(el);\n }\n}\n/**\n * @inner\n */\n\n\nfunction onElementMouseOver(e) {\n if (this.__hoverSilentOnTouch && e.zrByTouch) {\n return;\n } // Only if element is not in emphasis status\n\n\n !this.__isEmphasis && doEnterHover(this);\n}\n/**\n * @inner\n */\n\n\nfunction onElementMouseOut(e) {\n if (this.__hoverSilentOnTouch && e.zrByTouch) {\n return;\n } // Only if element is not in emphasis status\n\n\n !this.__isEmphasis && doLeaveHover(this);\n}\n/**\n * @inner\n */\n\n\nfunction enterEmphasis() {\n this.__isEmphasis = true;\n doEnterHover(this);\n}\n/**\n * @inner\n */\n\n\nfunction leaveEmphasis() {\n this.__isEmphasis = false;\n doLeaveHover(this);\n}\n/**\n * Set hover style of element.\n * This method can be called repeatly without side-effects.\n * @param {module:zrender/Element} el\n * @param {Object} [hoverStyle]\n * @param {Object} [opt]\n * @param {boolean} [opt.hoverSilentOnTouch=false]\n * In touch device, mouseover event will be trigger on touchstart event\n * (see module:zrender/dom/HandlerProxy). By this mechanism, we can\n * conviniently use hoverStyle when tap on touch screen without additional\n * code for compatibility.\n * But if the chart/component has select feature, which usually also use\n * hoverStyle, there might be conflict between 'select-highlight' and\n * 'hover-highlight' especially when roam is enabled (see geo for example).\n * In this case, hoverSilentOnTouch should be used to disable hover-highlight\n * on touch device.\n */\n\n\nfunction setHoverStyle(el, hoverStyle, opt) {\n el.__hoverSilentOnTouch = opt && opt.hoverSilentOnTouch;\n el.type === 'group' ? el.traverse(function (child) {\n if (child.type !== 'group') {\n setElementHoverStl(child, hoverStyle);\n }\n }) : setElementHoverStl(el, hoverStyle); // Duplicated function will be auto-ignored, see Eventful.js.\n\n el.on('mouseover', onElementMouseOver).on('mouseout', onElementMouseOut); // Emphasis, normal can be triggered manually\n\n el.on('emphasis', enterEmphasis).on('normal', leaveEmphasis);\n}\n/**\n * @param {Object|module:zrender/graphic/Style} normalStyle\n * @param {Object} emphasisStyle\n * @param {module:echarts/model/Model} normalModel\n * @param {module:echarts/model/Model} emphasisModel\n * @param {Object} opt Check `opt` of `setTextStyleCommon` to find other props.\n * @param {Object} [opt.defaultText]\n * @param {module:echarts/model/Model} [opt.labelFetcher] Fetch text by\n * `opt.labelFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex)`\n * @param {module:echarts/model/Model} [opt.labelDataIndex] Fetch text by\n * `opt.textFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex)`\n * @param {module:echarts/model/Model} [opt.labelDimIndex] Fetch text by\n * `opt.textFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex)`\n * @param {Object} [normalSpecified]\n * @param {Object} [emphasisSpecified]\n */\n\n\nfunction setLabelStyle(normalStyle, emphasisStyle, normalModel, emphasisModel, opt, normalSpecified, emphasisSpecified) {\n opt = opt || EMPTY_OBJ;\n var labelFetcher = opt.labelFetcher;\n var labelDataIndex = opt.labelDataIndex;\n var labelDimIndex = opt.labelDimIndex; // This scenario, `label.normal.show = true; label.emphasis.show = false`,\n // is not supported util someone requests.\n\n var showNormal = normalModel.getShallow('show');\n var showEmphasis = emphasisModel.getShallow('show'); // Consider performance, only fetch label when necessary.\n // If `normal.show` is `false` and `emphasis.show` is `true` and `emphasis.formatter` is not set,\n // label should be displayed, where text is fetched by `normal.formatter` or `opt.defaultText`.\n\n var baseText = showNormal || showEmphasis ? zrUtil.retrieve2(labelFetcher ? labelFetcher.getFormattedLabel(labelDataIndex, 'normal', null, labelDimIndex) : null, opt.defaultText) : null;\n var normalStyleText = showNormal ? baseText : null;\n var emphasisStyleText = showEmphasis ? zrUtil.retrieve2(labelFetcher ? labelFetcher.getFormattedLabel(labelDataIndex, 'emphasis', null, labelDimIndex) : null, baseText) : null; // Optimize: If style.text is null, text will not be drawn.\n\n if (normalStyleText != null || emphasisStyleText != null) {\n // Always set `textStyle` even if `normalStyle.text` is null, because default\n // values have to be set on `normalStyle`.\n // If we set default values on `emphasisStyle`, consider case:\n // Firstly, `setOption(... label: {normal: {text: null}, emphasis: {show: true}} ...);`\n // Secondly, `setOption(... label: {noraml: {show: true, text: 'abc', color: 'red'} ...);`\n // Then the 'red' will not work on emphasis.\n setTextStyle(normalStyle, normalModel, normalSpecified, opt);\n setTextStyle(emphasisStyle, emphasisModel, emphasisSpecified, opt, true);\n }\n\n normalStyle.text = normalStyleText;\n emphasisStyle.text = emphasisStyleText;\n}\n/**\n * Set basic textStyle properties.\n * @param {Object|module:zrender/graphic/Style} textStyle\n * @param {module:echarts/model/Model} model\n * @param {Object} [specifiedTextStyle] Can be overrided by settings in model.\n * @param {Object} [opt] See `opt` of `setTextStyleCommon`.\n * @param {boolean} [isEmphasis]\n */\n\n\nfunction setTextStyle(textStyle, textStyleModel, specifiedTextStyle, opt, isEmphasis) {\n setTextStyleCommon(textStyle, textStyleModel, opt, isEmphasis);\n specifiedTextStyle && zrUtil.extend(textStyle, specifiedTextStyle);\n textStyle.host && textStyle.host.dirty && textStyle.host.dirty(false);\n return textStyle;\n}\n/**\n * Set text option in the style.\n * @deprecated\n * @param {Object} textStyle\n * @param {module:echarts/model/Model} labelModel\n * @param {string|boolean} defaultColor Default text color.\n * If set as false, it will be processed as a emphasis style.\n */\n\n\nfunction setText(textStyle, labelModel, defaultColor) {\n var opt = {\n isRectText: true\n };\n var isEmphasis;\n\n if (defaultColor === false) {\n isEmphasis = true;\n } else {\n // Support setting color as 'auto' to get visual color.\n opt.autoColor = defaultColor;\n }\n\n setTextStyleCommon(textStyle, labelModel, opt, isEmphasis);\n textStyle.host && textStyle.host.dirty && textStyle.host.dirty(false);\n}\n/**\n * {\n * disableBox: boolean, Whether diable drawing box of block (outer most).\n * isRectText: boolean,\n * autoColor: string, specify a color when color is 'auto',\n * for textFill, textStroke, textBackgroundColor, and textBorderColor.\n * If autoColor specified, it is used as default textFill.\n * useInsideStyle:\n * `true`: Use inside style (textFill, textStroke, textStrokeWidth)\n * if `textFill` is not specified.\n * `false`: Do not use inside style.\n * `null/undefined`: use inside style if `isRectText` is true and\n * `textFill` is not specified and textPosition contains `'inside'`.\n * forceRich: boolean\n * }\n */\n\n\nfunction setTextStyleCommon(textStyle, textStyleModel, opt, isEmphasis) {\n // Consider there will be abnormal when merge hover style to normal style if given default value.\n opt = opt || EMPTY_OBJ;\n\n if (opt.isRectText) {\n var textPosition = textStyleModel.getShallow('position') || (isEmphasis ? null : 'inside'); // 'outside' is not a valid zr textPostion value, but used\n // in bar series, and magric type should be considered.\n\n textPosition === 'outside' && (textPosition = 'top');\n textStyle.textPosition = textPosition;\n textStyle.textOffset = textStyleModel.getShallow('offset');\n var labelRotate = textStyleModel.getShallow('rotate');\n labelRotate != null && (labelRotate *= Math.PI / 180);\n textStyle.textRotation = labelRotate;\n textStyle.textDistance = zrUtil.retrieve2(textStyleModel.getShallow('distance'), isEmphasis ? null : 5);\n }\n\n var ecModel = textStyleModel.ecModel;\n var globalTextStyle = ecModel && ecModel.option.textStyle; // Consider case:\n // {\n // data: [{\n // value: 12,\n // label: {\n // normal: {\n // rich: {\n // // no 'a' here but using parent 'a'.\n // }\n // }\n // }\n // }],\n // rich: {\n // a: { ... }\n // }\n // }\n\n var richItemNames = getRichItemNames(textStyleModel);\n var richResult;\n\n if (richItemNames) {\n richResult = {};\n\n for (var name in richItemNames) {\n if (richItemNames.hasOwnProperty(name)) {\n // Cascade is supported in rich.\n var richTextStyle = textStyleModel.getModel(['rich', name]); // In rich, never `disableBox`.\n\n setTokenTextStyle(richResult[name] = {}, richTextStyle, globalTextStyle, opt, isEmphasis);\n }\n }\n }\n\n textStyle.rich = richResult;\n setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, opt, isEmphasis, true);\n\n if (opt.forceRich && !opt.textStyle) {\n opt.textStyle = {};\n }\n\n return textStyle;\n} // Consider case:\n// {\n// data: [{\n// value: 12,\n// label: {\n// normal: {\n// rich: {\n// // no 'a' here but using parent 'a'.\n// }\n// }\n// }\n// }],\n// rich: {\n// a: { ... }\n// }\n// }\n\n\nfunction getRichItemNames(textStyleModel) {\n // Use object to remove duplicated names.\n var richItemNameMap;\n\n while (textStyleModel && textStyleModel !== textStyleModel.ecModel) {\n var rich = (textStyleModel.option || EMPTY_OBJ).rich;\n\n if (rich) {\n richItemNameMap = richItemNameMap || {};\n\n for (var name in rich) {\n if (rich.hasOwnProperty(name)) {\n richItemNameMap[name] = 1;\n }\n }\n }\n\n textStyleModel = textStyleModel.parentModel;\n }\n\n return richItemNameMap;\n}\n\nfunction setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, opt, isEmphasis, isBlock) {\n // In merge mode, default value should not be given.\n globalTextStyle = !isEmphasis && globalTextStyle || EMPTY_OBJ;\n textStyle.textFill = getAutoColor(textStyleModel.getShallow('color'), opt) || globalTextStyle.color;\n textStyle.textStroke = getAutoColor(textStyleModel.getShallow('textBorderColor'), opt) || globalTextStyle.textBorderColor;\n textStyle.textStrokeWidth = zrUtil.retrieve2(textStyleModel.getShallow('textBorderWidth'), globalTextStyle.textBorderWidth);\n\n if (!isEmphasis) {\n if (isBlock) {\n // Always set `insideRollback`, for clearing previous.\n var originalTextPosition = textStyle.textPosition;\n textStyle.insideRollback = applyInsideStyle(textStyle, originalTextPosition, opt); // Save original textPosition, because style.textPosition will be repalced by\n // real location (like [10, 30]) in zrender.\n\n textStyle.insideOriginalTextPosition = originalTextPosition;\n textStyle.insideRollbackOpt = opt;\n } // Set default finally.\n\n\n if (textStyle.textFill == null) {\n textStyle.textFill = opt.autoColor;\n }\n } // Do not use `getFont` here, because merge should be supported, where\n // part of these properties may be changed in emphasis style, and the\n // others should remain their original value got from normal style.\n\n\n textStyle.fontStyle = textStyleModel.getShallow('fontStyle') || globalTextStyle.fontStyle;\n textStyle.fontWeight = textStyleModel.getShallow('fontWeight') || globalTextStyle.fontWeight;\n textStyle.fontSize = textStyleModel.getShallow('fontSize') || globalTextStyle.fontSize;\n textStyle.fontFamily = textStyleModel.getShallow('fontFamily') || globalTextStyle.fontFamily;\n textStyle.textAlign = textStyleModel.getShallow('align');\n textStyle.textVerticalAlign = textStyleModel.getShallow('verticalAlign') || textStyleModel.getShallow('baseline');\n textStyle.textLineHeight = textStyleModel.getShallow('lineHeight');\n textStyle.textWidth = textStyleModel.getShallow('width');\n textStyle.textHeight = textStyleModel.getShallow('height');\n textStyle.textTag = textStyleModel.getShallow('tag');\n\n if (!isBlock || !opt.disableBox) {\n textStyle.textBackgroundColor = getAutoColor(textStyleModel.getShallow('backgroundColor'), opt);\n textStyle.textPadding = textStyleModel.getShallow('padding');\n textStyle.textBorderColor = getAutoColor(textStyleModel.getShallow('borderColor'), opt);\n textStyle.textBorderWidth = textStyleModel.getShallow('borderWidth');\n textStyle.textBorderRadius = textStyleModel.getShallow('borderRadius');\n textStyle.textBoxShadowColor = textStyleModel.getShallow('shadowColor');\n textStyle.textBoxShadowBlur = textStyleModel.getShallow('shadowBlur');\n textStyle.textBoxShadowOffsetX = textStyleModel.getShallow('shadowOffsetX');\n textStyle.textBoxShadowOffsetY = textStyleModel.getShallow('shadowOffsetY');\n }\n\n textStyle.textShadowColor = textStyleModel.getShallow('textShadowColor') || globalTextStyle.textShadowColor;\n textStyle.textShadowBlur = textStyleModel.getShallow('textShadowBlur') || globalTextStyle.textShadowBlur;\n textStyle.textShadowOffsetX = textStyleModel.getShallow('textShadowOffsetX') || globalTextStyle.textShadowOffsetX;\n textStyle.textShadowOffsetY = textStyleModel.getShallow('textShadowOffsetY') || globalTextStyle.textShadowOffsetY;\n}\n\nfunction getAutoColor(color, opt) {\n return color !== 'auto' ? color : opt && opt.autoColor ? opt.autoColor : null;\n}\n\nfunction applyInsideStyle(textStyle, textPosition, opt) {\n var useInsideStyle = opt.useInsideStyle;\n var insideRollback;\n\n if (textStyle.textFill == null && useInsideStyle !== false && (useInsideStyle === true || opt.isRectText && textPosition // textPosition can be [10, 30]\n && typeof textPosition === 'string' && textPosition.indexOf('inside') >= 0)) {\n insideRollback = {\n textFill: null,\n textStroke: textStyle.textStroke,\n textStrokeWidth: textStyle.textStrokeWidth\n };\n textStyle.textFill = '#fff'; // Consider text with #fff overflow its container.\n\n if (textStyle.textStroke == null) {\n textStyle.textStroke = opt.autoColor;\n textStyle.textStrokeWidth == null && (textStyle.textStrokeWidth = 2);\n }\n }\n\n return insideRollback;\n}\n\nfunction rollbackInsideStyle(style) {\n var insideRollback = style.insideRollback;\n\n if (insideRollback) {\n style.textFill = insideRollback.textFill;\n style.textStroke = insideRollback.textStroke;\n style.textStrokeWidth = insideRollback.textStrokeWidth;\n }\n}\n\nfunction getFont(opt, ecModel) {\n // ecModel or default text style model.\n var gTextStyleModel = ecModel || ecModel.getModel('textStyle');\n return [// FIXME in node-canvas fontWeight is before fontStyle\n opt.fontStyle || gTextStyleModel && gTextStyleModel.getShallow('fontStyle') || '', opt.fontWeight || gTextStyleModel && gTextStyleModel.getShallow('fontWeight') || '', (opt.fontSize || gTextStyleModel && gTextStyleModel.getShallow('fontSize') || 12) + 'px', opt.fontFamily || gTextStyleModel && gTextStyleModel.getShallow('fontFamily') || 'sans-serif'].join(' ');\n}\n\nfunction animateOrSetProps(isUpdate, el, props, animatableModel, dataIndex, cb) {\n if (typeof dataIndex === 'function') {\n cb = dataIndex;\n dataIndex = null;\n } // Do not check 'animation' property directly here. Consider this case:\n // animation model is an `itemModel`, whose does not have `isAnimationEnabled`\n // but its parent model (`seriesModel`) does.\n\n\n var animationEnabled = animatableModel && animatableModel.isAnimationEnabled();\n\n if (animationEnabled) {\n var postfix = isUpdate ? 'Update' : '';\n var duration = animatableModel.getShallow('animationDuration' + postfix);\n var animationEasing = animatableModel.getShallow('animationEasing' + postfix);\n var animationDelay = animatableModel.getShallow('animationDelay' + postfix);\n\n if (typeof animationDelay === 'function') {\n animationDelay = animationDelay(dataIndex, animatableModel.getAnimationDelayParams ? animatableModel.getAnimationDelayParams(el, dataIndex) : null);\n }\n\n if (typeof duration === 'function') {\n duration = duration(dataIndex);\n }\n\n duration > 0 ? el.animateTo(props, duration, animationDelay || 0, animationEasing, cb, !!cb) : (el.stopAnimation(), el.attr(props), cb && cb());\n } else {\n el.stopAnimation();\n el.attr(props);\n cb && cb();\n }\n}\n/**\n * Update graphic element properties with or without animation according to the\n * configuration in series.\n *\n * Caution: this method will stop previous animation.\n * So if do not use this method to one element twice before\n * animation starts, unless you know what you are doing.\n *\n * @param {module:zrender/Element} el\n * @param {Object} props\n * @param {module:echarts/model/Model} [animatableModel]\n * @param {number} [dataIndex]\n * @param {Function} [cb]\n * @example\n * graphic.updateProps(el, {\n * position: [100, 100]\n * }, seriesModel, dataIndex, function () { console.log('Animation done!'); });\n * // Or\n * graphic.updateProps(el, {\n * position: [100, 100]\n * }, seriesModel, function () { console.log('Animation done!'); });\n */\n\n\nfunction updateProps(el, props, animatableModel, dataIndex, cb) {\n animateOrSetProps(true, el, props, animatableModel, dataIndex, cb);\n}\n/**\n * Init graphic element properties with or without animation according to the\n * configuration in series.\n *\n * Caution: this method will stop previous animation.\n * So if do not use this method to one element twice before\n * animation starts, unless you know what you are doing.\n *\n * @param {module:zrender/Element} el\n * @param {Object} props\n * @param {module:echarts/model/Model} [animatableModel]\n * @param {number} [dataIndex]\n * @param {Function} cb\n */\n\n\nfunction initProps(el, props, animatableModel, dataIndex, cb) {\n animateOrSetProps(false, el, props, animatableModel, dataIndex, cb);\n}\n/**\n * Get transform matrix of target (param target),\n * in coordinate of its ancestor (param ancestor)\n *\n * @param {module:zrender/mixin/Transformable} target\n * @param {module:zrender/mixin/Transformable} [ancestor]\n */\n\n\nfunction getTransform(target, ancestor) {\n var mat = matrix.identity([]);\n\n while (target && target !== ancestor) {\n matrix.mul(mat, target.getLocalTransform(), mat);\n target = target.parent;\n }\n\n return mat;\n}\n/**\n * Apply transform to an vertex.\n * @param {Array.} target [x, y]\n * @param {Array.|TypedArray.|Object} transform Can be:\n * + Transform matrix: like [1, 0, 0, 1, 0, 0]\n * + {position, rotation, scale}, the same as `zrender/Transformable`.\n * @param {boolean=} invert Whether use invert matrix.\n * @return {Array.} [x, y]\n */\n\n\nfunction applyTransform(target, transform, invert) {\n if (transform && !zrUtil.isArrayLike(transform)) {\n transform = Transformable.getLocalTransform(transform);\n }\n\n if (invert) {\n transform = matrix.invert([], transform);\n }\n\n return vector.applyTransform([], target, transform);\n}\n/**\n * @param {string} direction 'left' 'right' 'top' 'bottom'\n * @param {Array.} transform Transform matrix: like [1, 0, 0, 1, 0, 0]\n * @param {boolean=} invert Whether use invert matrix.\n * @return {string} Transformed direction. 'left' 'right' 'top' 'bottom'\n */\n\n\nfunction transformDirection(direction, transform, invert) {\n // Pick a base, ensure that transform result will not be (0, 0).\n var hBase = transform[4] === 0 || transform[5] === 0 || transform[0] === 0 ? 1 : Math.abs(2 * transform[4] / transform[0]);\n var vBase = transform[4] === 0 || transform[5] === 0 || transform[2] === 0 ? 1 : Math.abs(2 * transform[4] / transform[2]);\n var vertex = [direction === 'left' ? -hBase : direction === 'right' ? hBase : 0, direction === 'top' ? -vBase : direction === 'bottom' ? vBase : 0];\n vertex = applyTransform(vertex, transform, invert);\n return Math.abs(vertex[0]) > Math.abs(vertex[1]) ? vertex[0] > 0 ? 'right' : 'left' : vertex[1] > 0 ? 'bottom' : 'top';\n}\n/**\n * Apply group transition animation from g1 to g2.\n * If no animatableModel, no animation.\n */\n\n\nfunction groupTransition(g1, g2, animatableModel, cb) {\n if (!g1 || !g2) {\n return;\n }\n\n function getElMap(g) {\n var elMap = {};\n g.traverse(function (el) {\n if (!el.isGroup && el.anid) {\n elMap[el.anid] = el;\n }\n });\n return elMap;\n }\n\n function getAnimatableProps(el) {\n var obj = {\n position: vector.clone(el.position),\n rotation: el.rotation\n };\n\n if (el.shape) {\n obj.shape = zrUtil.extend({}, el.shape);\n }\n\n return obj;\n }\n\n var elMap1 = getElMap(g1);\n g2.traverse(function (el) {\n if (!el.isGroup && el.anid) {\n var oldEl = elMap1[el.anid];\n\n if (oldEl) {\n var newProp = getAnimatableProps(el);\n el.attr(getAnimatableProps(oldEl));\n updateProps(el, newProp, animatableModel, el.dataIndex);\n } // else {\n // if (el.previousProps) {\n // graphic.updateProps\n // }\n // }\n\n }\n });\n}\n/**\n * @param {Array.>} points Like: [[23, 44], [53, 66], ...]\n * @param {Object} rect {x, y, width, height}\n * @return {Array.>} A new clipped points.\n */\n\n\nfunction clipPointsByRect(points, rect) {\n return zrUtil.map(points, function (point) {\n var x = point[0];\n x = mathMax(x, rect.x);\n x = mathMin(x, rect.x + rect.width);\n var y = point[1];\n y = mathMax(y, rect.y);\n y = mathMin(y, rect.y + rect.height);\n return [x, y];\n });\n}\n/**\n * @param {Object} targetRect {x, y, width, height}\n * @param {Object} rect {x, y, width, height}\n * @return {Object} A new clipped rect. If rect size are negative, return undefined.\n */\n\n\nfunction clipRectByRect(targetRect, rect) {\n var x = mathMax(targetRect.x, rect.x);\n var x2 = mathMin(targetRect.x + targetRect.width, rect.x + rect.width);\n var y = mathMax(targetRect.y, rect.y);\n var y2 = mathMin(targetRect.y + targetRect.height, rect.y + rect.height);\n\n if (x2 >= x && y2 >= y) {\n return {\n x: x,\n y: y,\n width: x2 - x,\n height: y2 - y\n };\n }\n}\n/**\n * @param {string} iconStr Support 'image://' or 'path://' or direct svg path.\n * @param {Object} [opt] Properties of `module:zrender/Element`, except `style`.\n * @param {Object} [rect] {x, y, width, height}\n * @return {module:zrender/Element} Icon path or image element.\n */\n\n\nfunction createIcon(iconStr, opt, rect) {\n opt = zrUtil.extend({\n rectHover: true\n }, opt);\n var style = opt.style = {\n strokeNoScale: true\n };\n rect = rect || {\n x: -1,\n y: -1,\n width: 2,\n height: 2\n };\n\n if (iconStr) {\n return iconStr.indexOf('image://') === 0 ? (style.image = iconStr.slice(8), zrUtil.defaults(style, rect), new Image(opt)) : makePath(iconStr.replace('path://', ''), opt, rect, 'center');\n }\n}\n\nexports.extendShape = extendShape;\nexports.extendPath = extendPath;\nexports.makePath = makePath;\nexports.makeImage = makeImage;\nexports.mergePath = mergePath;\nexports.resizePath = resizePath;\nexports.subPixelOptimizeLine = subPixelOptimizeLine;\nexports.subPixelOptimizeRect = subPixelOptimizeRect;\nexports.subPixelOptimize = subPixelOptimize;\nexports.setHoverStyle = setHoverStyle;\nexports.setLabelStyle = setLabelStyle;\nexports.setTextStyle = setTextStyle;\nexports.setText = setText;\nexports.getFont = getFont;\nexports.updateProps = updateProps;\nexports.initProps = initProps;\nexports.getTransform = getTransform;\nexports.applyTransform = applyTransform;\nexports.transformDirection = transformDirection;\nexports.groupTransition = groupTransition;\nexports.clipPointsByRect = clipPointsByRect;\nexports.clipRectByRect = clipRectByRect;\nexports.createIcon = createIcon;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar eventTool = require(\"zrender/lib/core/event\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar throttle = require(\"../../util/throttle\");\n\nvar DataZoomView = require(\"./DataZoomView\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar layout = require(\"../../util/layout\");\n\nvar sliderMove = require(\"../helper/sliderMove\");\n\nvar Rect = graphic.Rect;\nvar linearMap = numberUtil.linearMap;\nvar asc = numberUtil.asc;\nvar bind = zrUtil.bind;\nvar each = zrUtil.each; // Constants\n\nvar DEFAULT_LOCATION_EDGE_GAP = 7;\nvar DEFAULT_FRAME_BORDER_WIDTH = 1;\nvar DEFAULT_FILLER_SIZE = 30;\nvar HORIZONTAL = 'horizontal';\nvar VERTICAL = 'vertical';\nvar LABEL_GAP = 5;\nvar SHOW_DATA_SHADOW_SERIES_TYPE = ['line', 'bar', 'candlestick', 'scatter'];\nvar SliderZoomView = DataZoomView.extend({\n type: 'dataZoom.slider',\n init: function (ecModel, api) {\n /**\n * @private\n * @type {Object}\n */\n this._displayables = {};\n /**\n * @private\n * @type {string}\n */\n\n this._orient;\n /**\n * [0, 100]\n * @private\n */\n\n this._range;\n /**\n * [coord of the first handle, coord of the second handle]\n * @private\n */\n\n this._handleEnds;\n /**\n * [length, thick]\n * @private\n * @type {Array.}\n */\n\n this._size;\n /**\n * @private\n * @type {number}\n */\n\n this._handleWidth;\n /**\n * @private\n * @type {number}\n */\n\n this._handleHeight;\n /**\n * @private\n */\n\n this._location;\n /**\n * @private\n */\n\n this._dragging;\n /**\n * @private\n */\n\n this._dataShadowInfo;\n this.api = api;\n },\n\n /**\n * @override\n */\n render: function (dataZoomModel, ecModel, api, payload) {\n SliderZoomView.superApply(this, 'render', arguments);\n throttle.createOrUpdate(this, '_dispatchZoomAction', this.dataZoomModel.get('throttle'), 'fixRate');\n this._orient = dataZoomModel.get('orient');\n\n if (this.dataZoomModel.get('show') === false) {\n this.group.removeAll();\n return;\n } // Notice: this._resetInterval() should not be executed when payload.type\n // is 'dataZoom', origin this._range should be maintained, otherwise 'pan'\n // or 'zoom' info will be missed because of 'throttle' of this.dispatchAction,\n\n\n if (!payload || payload.type !== 'dataZoom' || payload.from !== this.uid) {\n this._buildView();\n }\n\n this._updateView();\n },\n\n /**\n * @override\n */\n remove: function () {\n SliderZoomView.superApply(this, 'remove', arguments);\n throttle.clear(this, '_dispatchZoomAction');\n },\n\n /**\n * @override\n */\n dispose: function () {\n SliderZoomView.superApply(this, 'dispose', arguments);\n throttle.clear(this, '_dispatchZoomAction');\n },\n _buildView: function () {\n var thisGroup = this.group;\n thisGroup.removeAll();\n\n this._resetLocation();\n\n this._resetInterval();\n\n var barGroup = this._displayables.barGroup = new graphic.Group();\n\n this._renderBackground();\n\n this._renderHandle();\n\n this._renderDataShadow();\n\n thisGroup.add(barGroup);\n\n this._positionGroup();\n },\n\n /**\n * @private\n */\n _resetLocation: function () {\n var dataZoomModel = this.dataZoomModel;\n var api = this.api; // If some of x/y/width/height are not specified,\n // auto-adapt according to target grid.\n\n var coordRect = this._findCoordRect();\n\n var ecSize = {\n width: api.getWidth(),\n height: api.getHeight()\n }; // Default align by coordinate system rect.\n\n var positionInfo = this._orient === HORIZONTAL ? {\n // Why using 'right', because right should be used in vertical,\n // and it is better to be consistent for dealing with position param merge.\n right: ecSize.width - coordRect.x - coordRect.width,\n top: ecSize.height - DEFAULT_FILLER_SIZE - DEFAULT_LOCATION_EDGE_GAP,\n width: coordRect.width,\n height: DEFAULT_FILLER_SIZE\n } : {\n // vertical\n right: DEFAULT_LOCATION_EDGE_GAP,\n top: coordRect.y,\n width: DEFAULT_FILLER_SIZE,\n height: coordRect.height\n }; // Do not write back to option and replace value 'ph', because\n // the 'ph' value should be recalculated when resize.\n\n var layoutParams = layout.getLayoutParams(dataZoomModel.option); // Replace the placeholder value.\n\n zrUtil.each(['right', 'top', 'width', 'height'], function (name) {\n if (layoutParams[name] === 'ph') {\n layoutParams[name] = positionInfo[name];\n }\n });\n var layoutRect = layout.getLayoutRect(layoutParams, ecSize, dataZoomModel.padding);\n this._location = {\n x: layoutRect.x,\n y: layoutRect.y\n };\n this._size = [layoutRect.width, layoutRect.height];\n this._orient === VERTICAL && this._size.reverse();\n },\n\n /**\n * @private\n */\n _positionGroup: function () {\n var thisGroup = this.group;\n var location = this._location;\n var orient = this._orient; // Just use the first axis to determine mapping.\n\n var targetAxisModel = this.dataZoomModel.getFirstTargetAxisModel();\n var inverse = targetAxisModel && targetAxisModel.get('inverse');\n var barGroup = this._displayables.barGroup;\n var otherAxisInverse = (this._dataShadowInfo || {}).otherAxisInverse; // Transform barGroup.\n\n barGroup.attr(orient === HORIZONTAL && !inverse ? {\n scale: otherAxisInverse ? [1, 1] : [1, -1]\n } : orient === HORIZONTAL && inverse ? {\n scale: otherAxisInverse ? [-1, 1] : [-1, -1]\n } : orient === VERTICAL && !inverse ? {\n scale: otherAxisInverse ? [1, -1] : [1, 1],\n rotation: Math.PI / 2 // Dont use Math.PI, considering shadow direction.\n\n } : {\n scale: otherAxisInverse ? [-1, -1] : [-1, 1],\n rotation: Math.PI / 2\n }); // Position barGroup\n\n var rect = thisGroup.getBoundingRect([barGroup]);\n thisGroup.attr('position', [location.x - rect.x, location.y - rect.y]);\n },\n\n /**\n * @private\n */\n _getViewExtent: function () {\n return [0, this._size[0]];\n },\n _renderBackground: function () {\n var dataZoomModel = this.dataZoomModel;\n var size = this._size;\n var barGroup = this._displayables.barGroup;\n barGroup.add(new Rect({\n silent: true,\n shape: {\n x: 0,\n y: 0,\n width: size[0],\n height: size[1]\n },\n style: {\n fill: dataZoomModel.get('backgroundColor')\n },\n z2: -40\n })); // Click panel, over shadow, below handles.\n\n barGroup.add(new Rect({\n shape: {\n x: 0,\n y: 0,\n width: size[0],\n height: size[1]\n },\n style: {\n fill: 'transparent'\n },\n z2: 0,\n onclick: zrUtil.bind(this._onClickPanelClick, this)\n }));\n },\n _renderDataShadow: function () {\n var info = this._dataShadowInfo = this._prepareDataShadowInfo();\n\n if (!info) {\n return;\n }\n\n var size = this._size;\n var seriesModel = info.series;\n var data = seriesModel.getRawData();\n var otherDim = seriesModel.getShadowDim ? seriesModel.getShadowDim() // @see candlestick\n : info.otherDim;\n\n if (otherDim == null) {\n return;\n }\n\n var otherDataExtent = data.getDataExtent(otherDim); // Nice extent.\n\n var otherOffset = (otherDataExtent[1] - otherDataExtent[0]) * 0.3;\n otherDataExtent = [otherDataExtent[0] - otherOffset, otherDataExtent[1] + otherOffset];\n var otherShadowExtent = [0, size[1]];\n var thisShadowExtent = [0, size[0]];\n var areaPoints = [[size[0], 0], [0, 0]];\n var linePoints = [];\n var step = thisShadowExtent[1] / (data.count() - 1);\n var thisCoord = 0; // Optimize for large data shadow\n\n var stride = Math.round(data.count() / size[0]);\n var lastIsEmpty;\n data.each([otherDim], function (value, index) {\n if (stride > 0 && index % stride) {\n thisCoord += step;\n return;\n } // FIXME\n // Should consider axis.min/axis.max when drawing dataShadow.\n // FIXME\n // 应该使用统一的空判断?还是在list里进行空判断?\n\n\n var isEmpty = value == null || isNaN(value) || value === ''; // See #4235.\n\n var otherCoord = isEmpty ? 0 : linearMap(value, otherDataExtent, otherShadowExtent, true); // Attempt to draw data shadow precisely when there are empty value.\n\n if (isEmpty && !lastIsEmpty && index) {\n areaPoints.push([areaPoints[areaPoints.length - 1][0], 0]);\n linePoints.push([linePoints[linePoints.length - 1][0], 0]);\n } else if (!isEmpty && lastIsEmpty) {\n areaPoints.push([thisCoord, 0]);\n linePoints.push([thisCoord, 0]);\n }\n\n areaPoints.push([thisCoord, otherCoord]);\n linePoints.push([thisCoord, otherCoord]);\n thisCoord += step;\n lastIsEmpty = isEmpty;\n });\n var dataZoomModel = this.dataZoomModel; // var dataBackgroundModel = dataZoomModel.getModel('dataBackground');\n\n this._displayables.barGroup.add(new graphic.Polygon({\n shape: {\n points: areaPoints\n },\n style: zrUtil.defaults({\n fill: dataZoomModel.get('dataBackgroundColor')\n }, dataZoomModel.getModel('dataBackground.areaStyle').getAreaStyle()),\n silent: true,\n z2: -20\n }));\n\n this._displayables.barGroup.add(new graphic.Polyline({\n shape: {\n points: linePoints\n },\n style: dataZoomModel.getModel('dataBackground.lineStyle').getLineStyle(),\n silent: true,\n z2: -19\n }));\n },\n _prepareDataShadowInfo: function () {\n var dataZoomModel = this.dataZoomModel;\n var showDataShadow = dataZoomModel.get('showDataShadow');\n\n if (showDataShadow === false) {\n return;\n } // Find a representative series.\n\n\n var result;\n var ecModel = this.ecModel;\n dataZoomModel.eachTargetAxis(function (dimNames, axisIndex) {\n var seriesModels = dataZoomModel.getAxisProxy(dimNames.name, axisIndex).getTargetSeriesModels();\n zrUtil.each(seriesModels, function (seriesModel) {\n if (result) {\n return;\n }\n\n if (showDataShadow !== true && zrUtil.indexOf(SHOW_DATA_SHADOW_SERIES_TYPE, seriesModel.get('type')) < 0) {\n return;\n }\n\n var thisAxis = ecModel.getComponent(dimNames.axis, axisIndex).axis;\n var otherDim = getOtherDim(dimNames.name);\n var otherAxisInverse;\n var coordSys = seriesModel.coordinateSystem;\n\n if (otherDim != null && coordSys.getOtherAxis) {\n otherAxisInverse = coordSys.getOtherAxis(thisAxis).inverse;\n }\n\n result = {\n thisAxis: thisAxis,\n series: seriesModel,\n thisDim: dimNames.name,\n otherDim: otherDim,\n otherAxisInverse: otherAxisInverse\n };\n }, this);\n }, this);\n return result;\n },\n _renderHandle: function () {\n var displaybles = this._displayables;\n var handles = displaybles.handles = [];\n var handleLabels = displaybles.handleLabels = [];\n var barGroup = this._displayables.barGroup;\n var size = this._size;\n var dataZoomModel = this.dataZoomModel;\n barGroup.add(displaybles.filler = new Rect({\n draggable: true,\n cursor: getCursor(this._orient),\n drift: bind(this._onDragMove, this, 'all'),\n onmousemove: function (e) {\n // Fot mobile devicem, prevent screen slider on the button.\n eventTool.stop(e.event);\n },\n ondragstart: bind(this._showDataInfo, this, true),\n ondragend: bind(this._onDragEnd, this),\n onmouseover: bind(this._showDataInfo, this, true),\n onmouseout: bind(this._showDataInfo, this, false),\n style: {\n fill: dataZoomModel.get('fillerColor'),\n textPosition: 'inside'\n }\n })); // Frame border.\n\n barGroup.add(new Rect(graphic.subPixelOptimizeRect({\n silent: true,\n shape: {\n x: 0,\n y: 0,\n width: size[0],\n height: size[1]\n },\n style: {\n stroke: dataZoomModel.get('dataBackgroundColor') || dataZoomModel.get('borderColor'),\n lineWidth: DEFAULT_FRAME_BORDER_WIDTH,\n fill: 'rgba(0,0,0,0)'\n }\n })));\n each([0, 1], function (handleIndex) {\n var path = graphic.createIcon(dataZoomModel.get('handleIcon'), {\n cursor: getCursor(this._orient),\n draggable: true,\n drift: bind(this._onDragMove, this, handleIndex),\n onmousemove: function (e) {\n // Fot mobile devicem, prevent screen slider on the button.\n eventTool.stop(e.event);\n },\n ondragend: bind(this._onDragEnd, this),\n onmouseover: bind(this._showDataInfo, this, true),\n onmouseout: bind(this._showDataInfo, this, false)\n }, {\n x: -1,\n y: 0,\n width: 2,\n height: 2\n });\n var bRect = path.getBoundingRect();\n this._handleHeight = numberUtil.parsePercent(dataZoomModel.get('handleSize'), this._size[1]);\n this._handleWidth = bRect.width / bRect.height * this._handleHeight;\n path.setStyle(dataZoomModel.getModel('handleStyle').getItemStyle());\n var handleColor = dataZoomModel.get('handleColor'); // Compatitable with previous version\n\n if (handleColor != null) {\n path.style.fill = handleColor;\n }\n\n barGroup.add(handles[handleIndex] = path);\n var textStyleModel = dataZoomModel.textStyleModel;\n this.group.add(handleLabels[handleIndex] = new graphic.Text({\n silent: true,\n invisible: true,\n style: {\n x: 0,\n y: 0,\n text: '',\n textVerticalAlign: 'middle',\n textAlign: 'center',\n textFill: textStyleModel.getTextColor(),\n textFont: textStyleModel.getFont()\n },\n z2: 10\n }));\n }, this);\n },\n\n /**\n * @private\n */\n _resetInterval: function () {\n var range = this._range = this.dataZoomModel.getPercentRange();\n\n var viewExtent = this._getViewExtent();\n\n this._handleEnds = [linearMap(range[0], [0, 100], viewExtent, true), linearMap(range[1], [0, 100], viewExtent, true)];\n },\n\n /**\n * @private\n * @param {(number|string)} handleIndex 0 or 1 or 'all'\n * @param {number} delta\n */\n _updateInterval: function (handleIndex, delta) {\n var dataZoomModel = this.dataZoomModel;\n var handleEnds = this._handleEnds;\n\n var viewExtend = this._getViewExtent();\n\n var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();\n var percentExtent = [0, 100];\n sliderMove(delta, handleEnds, viewExtend, dataZoomModel.get('zoomLock') ? 'all' : handleIndex, minMaxSpan.minSpan != null ? linearMap(minMaxSpan.minSpan, percentExtent, viewExtend, true) : null, minMaxSpan.maxSpan != null ? linearMap(minMaxSpan.maxSpan, percentExtent, viewExtend, true) : null);\n this._range = asc([linearMap(handleEnds[0], viewExtend, percentExtent, true), linearMap(handleEnds[1], viewExtend, percentExtent, true)]);\n },\n\n /**\n * @private\n */\n _updateView: function (nonRealtime) {\n var displaybles = this._displayables;\n var handleEnds = this._handleEnds;\n var handleInterval = asc(handleEnds.slice());\n var size = this._size;\n each([0, 1], function (handleIndex) {\n // Handles\n var handle = displaybles.handles[handleIndex];\n var handleHeight = this._handleHeight;\n handle.attr({\n scale: [handleHeight / 2, handleHeight / 2],\n position: [handleEnds[handleIndex], size[1] / 2 - handleHeight / 2]\n });\n }, this); // Filler\n\n displaybles.filler.setShape({\n x: handleInterval[0],\n y: 0,\n width: handleInterval[1] - handleInterval[0],\n height: size[1]\n });\n\n this._updateDataInfo(nonRealtime);\n },\n\n /**\n * @private\n */\n _updateDataInfo: function (nonRealtime) {\n var dataZoomModel = this.dataZoomModel;\n var displaybles = this._displayables;\n var handleLabels = displaybles.handleLabels;\n var orient = this._orient;\n var labelTexts = ['', '']; // FIXME\n // date型,支持formatter,autoformatter(ec2 date.getAutoFormatter)\n\n if (dataZoomModel.get('showDetail')) {\n var axisProxy = dataZoomModel.findRepresentativeAxisProxy();\n\n if (axisProxy) {\n var axis = axisProxy.getAxisModel().axis;\n var range = this._range;\n var dataInterval = nonRealtime // See #4434, data and axis are not processed and reset yet in non-realtime mode.\n ? axisProxy.calculateDataWindow({\n start: range[0],\n end: range[1]\n }).valueWindow : axisProxy.getDataValueWindow();\n labelTexts = [this._formatLabel(dataInterval[0], axis), this._formatLabel(dataInterval[1], axis)];\n }\n }\n\n var orderedHandleEnds = asc(this._handleEnds.slice());\n setLabel.call(this, 0);\n setLabel.call(this, 1);\n\n function setLabel(handleIndex) {\n // Label\n // Text should not transform by barGroup.\n // Ignore handlers transform\n var barTransform = graphic.getTransform(displaybles.handles[handleIndex].parent, this.group);\n var direction = graphic.transformDirection(handleIndex === 0 ? 'right' : 'left', barTransform);\n var offset = this._handleWidth / 2 + LABEL_GAP;\n var textPoint = graphic.applyTransform([orderedHandleEnds[handleIndex] + (handleIndex === 0 ? -offset : offset), this._size[1] / 2], barTransform);\n handleLabels[handleIndex].setStyle({\n x: textPoint[0],\n y: textPoint[1],\n textVerticalAlign: orient === HORIZONTAL ? 'middle' : direction,\n textAlign: orient === HORIZONTAL ? direction : 'center',\n text: labelTexts[handleIndex]\n });\n }\n },\n\n /**\n * @private\n */\n _formatLabel: function (value, axis) {\n var dataZoomModel = this.dataZoomModel;\n var labelFormatter = dataZoomModel.get('labelFormatter');\n var labelPrecision = dataZoomModel.get('labelPrecision');\n\n if (labelPrecision == null || labelPrecision === 'auto') {\n labelPrecision = axis.getPixelPrecision();\n }\n\n var valueStr = value == null || isNaN(value) ? '' // FIXME Glue code\n : axis.type === 'category' || axis.type === 'time' ? axis.scale.getLabel(Math.round(value)) // param of toFixed should less then 20.\n : value.toFixed(Math.min(labelPrecision, 20));\n return zrUtil.isFunction(labelFormatter) ? labelFormatter(value, valueStr) : zrUtil.isString(labelFormatter) ? labelFormatter.replace('{value}', valueStr) : valueStr;\n },\n\n /**\n * @private\n * @param {boolean} showOrHide true: show, false: hide\n */\n _showDataInfo: function (showOrHide) {\n // Always show when drgging.\n showOrHide = this._dragging || showOrHide;\n var handleLabels = this._displayables.handleLabels;\n handleLabels[0].attr('invisible', !showOrHide);\n handleLabels[1].attr('invisible', !showOrHide);\n },\n _onDragMove: function (handleIndex, dx, dy) {\n this._dragging = true; // Transform dx, dy to bar coordination.\n\n var barTransform = this._displayables.barGroup.getLocalTransform();\n\n var vertex = graphic.applyTransform([dx, dy], barTransform, true);\n\n this._updateInterval(handleIndex, vertex[0]);\n\n var realtime = this.dataZoomModel.get('realtime');\n\n this._updateView(!realtime);\n\n if (realtime) {\n realtime && this._dispatchZoomAction();\n }\n },\n _onDragEnd: function () {\n this._dragging = false;\n\n this._showDataInfo(false);\n\n this._dispatchZoomAction();\n },\n _onClickPanelClick: function (e) {\n var size = this._size;\n\n var localPoint = this._displayables.barGroup.transformCoordToLocal(e.offsetX, e.offsetY);\n\n if (localPoint[0] < 0 || localPoint[0] > size[0] || localPoint[1] < 0 || localPoint[1] > size[1]) {\n return;\n }\n\n var handleEnds = this._handleEnds;\n var center = (handleEnds[0] + handleEnds[1]) / 2;\n\n this._updateInterval('all', localPoint[0] - center);\n\n this._updateView();\n\n this._dispatchZoomAction();\n },\n\n /**\n * This action will be throttled.\n * @private\n */\n _dispatchZoomAction: function () {\n var range = this._range;\n this.api.dispatchAction({\n type: 'dataZoom',\n from: this.uid,\n dataZoomId: this.dataZoomModel.id,\n start: range[0],\n end: range[1]\n });\n },\n\n /**\n * @private\n */\n _findCoordRect: function () {\n // Find the grid coresponding to the first axis referred by dataZoom.\n var rect;\n each(this.getTargetCoordInfo(), function (coordInfoList) {\n if (!rect && coordInfoList.length) {\n var coordSys = coordInfoList[0].model.coordinateSystem;\n rect = coordSys.getRect && coordSys.getRect();\n }\n });\n\n if (!rect) {\n var width = this.api.getWidth();\n var height = this.api.getHeight();\n rect = {\n x: width * 0.2,\n y: height * 0.2,\n width: width * 0.6,\n height: height * 0.6\n };\n }\n\n return rect;\n }\n});\n\nfunction getOtherDim(thisDim) {\n // FIXME\n // 这个逻辑和getOtherAxis里一致,但是写在这里是否不好\n var map = {\n x: 'y',\n y: 'x',\n radius: 'angle',\n angle: 'radius'\n };\n return map[thisDim];\n}\n\nfunction getCursor(orient) {\n return orient === 'vertical' ? 'ns-resize' : 'ew-resize';\n}\n\nvar _default = SliderZoomView;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar List = require(\"../../data/List\");\n\nvar Graph = require(\"../../data/Graph\");\n\nvar linkList = require(\"../../data/helper/linkList\");\n\nvar completeDimensions = require(\"../../data/helper/completeDimensions\");\n\nvar CoordinateSystem = require(\"../../CoordinateSystem\");\n\nvar createListFromArray = require(\"./createListFromArray\");\n\nfunction _default(nodes, edges, hostModel, directed, beforeLink) {\n var graph = new Graph(directed);\n\n for (var i = 0; i < nodes.length; i++) {\n graph.addNode(zrUtil.retrieve( // Id, name, dataIndex\n nodes[i].id, nodes[i].name, i), i);\n }\n\n var linkNameList = [];\n var validEdges = [];\n var linkCount = 0;\n\n for (var i = 0; i < edges.length; i++) {\n var link = edges[i];\n var source = link.source;\n var target = link.target; // addEdge may fail when source or target not exists\n\n if (graph.addEdge(source, target, linkCount)) {\n validEdges.push(link);\n linkNameList.push(zrUtil.retrieve(link.id, source + ' > ' + target));\n linkCount++;\n }\n }\n\n var coordSys = hostModel.get('coordinateSystem');\n var nodeData;\n\n if (coordSys === 'cartesian2d' || coordSys === 'polar') {\n nodeData = createListFromArray(nodes, hostModel, hostModel.ecModel);\n } else {\n // FIXME\n var coordSysCtor = CoordinateSystem.get(coordSys); // FIXME\n\n var dimensionNames = completeDimensions((coordSysCtor && coordSysCtor.type !== 'view' ? coordSysCtor.dimensions || [] : []).concat(['value']), nodes);\n nodeData = new List(dimensionNames, hostModel);\n nodeData.initData(nodes);\n }\n\n var edgeData = new List(['value'], hostModel);\n edgeData.initData(validEdges, linkNameList);\n beforeLink && beforeLink(nodeData, edgeData);\n linkList({\n mainData: nodeData,\n struct: graph,\n structAttr: 'graph',\n datas: {\n node: nodeData,\n edge: edgeData\n },\n datasAttr: {\n node: 'data',\n edge: 'edgeData'\n }\n }); // Update dataIndex of nodes and edges because invalid edge may be removed\n\n graph.update();\n return graph;\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar IndicatorAxis = require(\"./IndicatorAxis\");\n\nvar IntervalScale = require(\"../../scale/Interval\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar _axisHelper = require(\"../axisHelper\");\n\nvar getScaleExtent = _axisHelper.getScaleExtent;\nvar niceScaleExtent = _axisHelper.niceScaleExtent;\n\nvar CoordinateSystem = require(\"../../CoordinateSystem\");\n\n// TODO clockwise\nfunction Radar(radarModel, ecModel, api) {\n this._model = radarModel;\n /**\n * Radar dimensions\n * @type {Array.}\n */\n\n this.dimensions = [];\n this._indicatorAxes = zrUtil.map(radarModel.getIndicatorModels(), function (indicatorModel, idx) {\n var dim = 'indicator_' + idx;\n var indicatorAxis = new IndicatorAxis(dim, new IntervalScale());\n indicatorAxis.name = indicatorModel.get('name'); // Inject model and axis\n\n indicatorAxis.model = indicatorModel;\n indicatorModel.axis = indicatorAxis;\n this.dimensions.push(dim);\n return indicatorAxis;\n }, this);\n this.resize(radarModel, api);\n /**\n * @type {number}\n * @readOnly\n */\n\n this.cx;\n /**\n * @type {number}\n * @readOnly\n */\n\n this.cy;\n /**\n * @type {number}\n * @readOnly\n */\n\n this.r;\n /**\n * @type {number}\n * @readOnly\n */\n\n this.startAngle;\n}\n\nRadar.prototype.getIndicatorAxes = function () {\n return this._indicatorAxes;\n};\n\nRadar.prototype.dataToPoint = function (value, indicatorIndex) {\n var indicatorAxis = this._indicatorAxes[indicatorIndex];\n return this.coordToPoint(indicatorAxis.dataToCoord(value), indicatorIndex);\n};\n\nRadar.prototype.coordToPoint = function (coord, indicatorIndex) {\n var indicatorAxis = this._indicatorAxes[indicatorIndex];\n var angle = indicatorAxis.angle;\n var x = this.cx + coord * Math.cos(angle);\n var y = this.cy - coord * Math.sin(angle);\n return [x, y];\n};\n\nRadar.prototype.pointToData = function (pt) {\n var dx = pt[0] - this.cx;\n var dy = pt[1] - this.cy;\n var radius = Math.sqrt(dx * dx + dy * dy);\n dx /= radius;\n dy /= radius;\n var radian = Math.atan2(-dy, dx); // Find the closest angle\n // FIXME index can calculated directly\n\n var minRadianDiff = Infinity;\n var closestAxis;\n var closestAxisIdx = -1;\n\n for (var i = 0; i < this._indicatorAxes.length; i++) {\n var indicatorAxis = this._indicatorAxes[i];\n var diff = Math.abs(radian - indicatorAxis.angle);\n\n if (diff < minRadianDiff) {\n closestAxis = indicatorAxis;\n closestAxisIdx = i;\n minRadianDiff = diff;\n }\n }\n\n return [closestAxisIdx, +(closestAxis && closestAxis.coodToData(radius))];\n};\n\nRadar.prototype.resize = function (radarModel, api) {\n var center = radarModel.get('center');\n var viewWidth = api.getWidth();\n var viewHeight = api.getHeight();\n var viewSize = Math.min(viewWidth, viewHeight) / 2;\n this.cx = numberUtil.parsePercent(center[0], viewWidth);\n this.cy = numberUtil.parsePercent(center[1], viewHeight);\n this.startAngle = radarModel.get('startAngle') * Math.PI / 180;\n this.r = numberUtil.parsePercent(radarModel.get('radius'), viewSize);\n zrUtil.each(this._indicatorAxes, function (indicatorAxis, idx) {\n indicatorAxis.setExtent(0, this.r);\n var angle = this.startAngle + idx * Math.PI * 2 / this._indicatorAxes.length; // Normalize to [-PI, PI]\n\n angle = Math.atan2(Math.sin(angle), Math.cos(angle));\n indicatorAxis.angle = angle;\n }, this);\n};\n\nRadar.prototype.update = function (ecModel, api) {\n var indicatorAxes = this._indicatorAxes;\n var radarModel = this._model;\n zrUtil.each(indicatorAxes, function (indicatorAxis) {\n indicatorAxis.scale.setExtent(Infinity, -Infinity);\n });\n ecModel.eachSeriesByType('radar', function (radarSeries, idx) {\n if (radarSeries.get('coordinateSystem') !== 'radar' || ecModel.getComponent('radar', radarSeries.get('radarIndex')) !== radarModel) {\n return;\n }\n\n var data = radarSeries.getData();\n zrUtil.each(indicatorAxes, function (indicatorAxis) {\n indicatorAxis.scale.unionExtentFromData(data, indicatorAxis.dim);\n });\n }, this);\n var splitNumber = radarModel.get('splitNumber');\n\n function increaseInterval(interval) {\n var exp10 = Math.pow(10, Math.floor(Math.log(interval) / Math.LN10)); // Increase interval\n\n var f = interval / exp10;\n\n if (f === 2) {\n f = 5;\n } else {\n // f is 2 or 5\n f *= 2;\n }\n\n return f * exp10;\n } // Force all the axis fixing the maxSplitNumber.\n\n\n zrUtil.each(indicatorAxes, function (indicatorAxis, idx) {\n var rawExtent = getScaleExtent(indicatorAxis.scale, indicatorAxis.model);\n niceScaleExtent(indicatorAxis.scale, indicatorAxis.model);\n var axisModel = indicatorAxis.model;\n var scale = indicatorAxis.scale;\n var fixedMin = axisModel.getMin();\n var fixedMax = axisModel.getMax();\n var interval = scale.getInterval();\n\n if (fixedMin != null && fixedMax != null) {\n // User set min, max, divide to get new interval\n scale.setExtent(+fixedMin, +fixedMax);\n scale.setInterval((fixedMax - fixedMin) / splitNumber);\n } else if (fixedMin != null) {\n var max; // User set min, expand extent on the other side\n\n do {\n max = fixedMin + interval * splitNumber;\n scale.setExtent(+fixedMin, max); // Interval must been set after extent\n // FIXME\n\n scale.setInterval(interval);\n interval = increaseInterval(interval);\n } while (max < rawExtent[1] && isFinite(max) && isFinite(rawExtent[1]));\n } else if (fixedMax != null) {\n var min; // User set min, expand extent on the other side\n\n do {\n min = fixedMax - interval * splitNumber;\n scale.setExtent(min, +fixedMax);\n scale.setInterval(interval);\n interval = increaseInterval(interval);\n } while (min > rawExtent[0] && isFinite(min) && isFinite(rawExtent[0]));\n } else {\n var nicedSplitNumber = scale.getTicks().length - 1;\n\n if (nicedSplitNumber > splitNumber) {\n interval = increaseInterval(interval);\n } // PENDING\n\n\n var center = Math.round((rawExtent[0] + rawExtent[1]) / 2 / interval) * interval;\n var halfSplitNumber = Math.round(splitNumber / 2);\n scale.setExtent(numberUtil.round(center - halfSplitNumber * interval), numberUtil.round(center + (splitNumber - halfSplitNumber) * interval));\n scale.setInterval(interval);\n }\n });\n};\n/**\n * Radar dimensions is based on the data\n * @type {Array}\n */\n\n\nRadar.dimensions = [];\n\nRadar.create = function (ecModel, api) {\n var radarList = [];\n ecModel.eachComponent('radar', function (radarModel) {\n var radar = new Radar(radarModel, ecModel, api);\n radarList.push(radar);\n radarModel.coordinateSystem = radar;\n });\n ecModel.eachSeriesByType('radar', function (radarSeries) {\n if (radarSeries.get('coordinateSystem') === 'radar') {\n // Inject coordinate system\n radarSeries.coordinateSystem = radarList[radarSeries.get('radarIndex') || 0];\n }\n });\n return radarList;\n};\n\nCoordinateSystem.register('radar', Radar);\nvar _default = Radar;\nmodule.exports = _default;","var echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nrequire(\"./graph/GraphSeries\");\n\nrequire(\"./graph/GraphView\");\n\nrequire(\"./graph/graphAction\");\n\nvar categoryFilter = require(\"./graph/categoryFilter\");\n\nvar visualSymbol = require(\"../visual/symbol\");\n\nvar categoryVisual = require(\"./graph/categoryVisual\");\n\nvar edgeVisual = require(\"./graph/edgeVisual\");\n\nvar simpleLayout = require(\"./graph/simpleLayout\");\n\nvar circularLayout = require(\"./graph/circularLayout\");\n\nvar forceLayout = require(\"./graph/forceLayout\");\n\nvar createView = require(\"./graph/createView\");\n\necharts.registerProcessor(categoryFilter);\necharts.registerVisual(zrUtil.curry(visualSymbol, 'graph', 'circle', null));\necharts.registerVisual(categoryVisual);\necharts.registerVisual(edgeVisual);\necharts.registerLayout(simpleLayout);\necharts.registerLayout(circularLayout);\necharts.registerLayout(forceLayout); // Graph view coordinate system\n\necharts.registerCoordinateSystem('graphView', {\n create: createView\n});","var _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar env = require(\"zrender/lib/core/env\");\n\nvar modelUtil = require(\"../../util/model\");\n\nvar formatUtil = require(\"../../util/format\");\n\nvar addCommas = formatUtil.addCommas;\nvar encodeHTML = formatUtil.encodeHTML;\n\nfunction fillLabel(opt) {\n modelUtil.defaultEmphasis(opt.label, ['show']);\n}\n\nvar MarkerModel = echarts.extendComponentModel({\n type: 'marker',\n dependencies: ['series', 'grid', 'polar', 'geo'],\n\n /**\n * @overrite\n */\n init: function (option, parentModel, ecModel, extraOpt) {\n this.mergeDefaultAndTheme(option, ecModel);\n this.mergeOption(option, ecModel, extraOpt.createdBySelf, true);\n },\n\n /**\n * @return {boolean}\n */\n isAnimationEnabled: function () {\n if (env.node) {\n return false;\n }\n\n var hostSeries = this.__hostSeries;\n return this.getShallow('animation') && hostSeries && hostSeries.isAnimationEnabled();\n },\n mergeOption: function (newOpt, ecModel, createdBySelf, isInit) {\n var MarkerModel = this.constructor;\n var modelPropName = this.mainType + 'Model';\n\n if (!createdBySelf) {\n ecModel.eachSeries(function (seriesModel) {\n var markerOpt = seriesModel.get(this.mainType);\n var markerModel = seriesModel[modelPropName];\n\n if (!markerOpt || !markerOpt.data) {\n seriesModel[modelPropName] = null;\n return;\n }\n\n if (!markerModel) {\n if (isInit) {\n // Default label emphasis `position` and `show`\n fillLabel(markerOpt);\n }\n\n zrUtil.each(markerOpt.data, function (item) {\n // FIXME Overwrite fillLabel method ?\n if (item instanceof Array) {\n fillLabel(item[0]);\n fillLabel(item[1]);\n } else {\n fillLabel(item);\n }\n });\n markerModel = new MarkerModel(markerOpt, this, ecModel);\n zrUtil.extend(markerModel, {\n mainType: this.mainType,\n // Use the same series index and name\n seriesIndex: seriesModel.seriesIndex,\n name: seriesModel.name,\n createdBySelf: true\n });\n markerModel.__hostSeries = seriesModel;\n } else {\n markerModel.mergeOption(markerOpt, ecModel, true);\n }\n\n seriesModel[modelPropName] = markerModel;\n }, this);\n }\n },\n formatTooltip: function (dataIndex) {\n var data = this.getData();\n var value = this.getRawValue(dataIndex);\n var formattedValue = zrUtil.isArray(value) ? zrUtil.map(value, addCommas).join(', ') : addCommas(value);\n var name = data.getName(dataIndex);\n var html = encodeHTML(this.name);\n\n if (value != null || name) {\n html += '
';\n }\n\n if (name) {\n html += encodeHTML(name);\n\n if (value != null) {\n html += ' : ';\n }\n }\n\n if (value != null) {\n html += encodeHTML(formattedValue);\n }\n\n return html;\n },\n getData: function () {\n return this._data;\n },\n setData: function (data) {\n this._data = data;\n }\n});\nzrUtil.mixin(MarkerModel, modelUtil.dataFormatMixin);\nvar _default = MarkerModel;\nmodule.exports = _default;","var layout = require(\"../../util/layout\");\n\nvar _number = require(\"../../util/number\");\n\nvar parsePercent = _number.parsePercent;\nvar linearMap = _number.linearMap;\n\nfunction getViewRect(seriesModel, api) {\n return layout.getLayoutRect(seriesModel.getBoxLayoutParams(), {\n width: api.getWidth(),\n height: api.getHeight()\n });\n}\n\nfunction getSortedIndices(data, sort) {\n var valueArr = data.mapArray('value', function (val) {\n return val;\n });\n var indices = [];\n var isAscending = sort === 'ascending';\n\n for (var i = 0, len = data.count(); i < len; i++) {\n indices[i] = i;\n } // Add custom sortable function & none sortable opetion by \"options.sort\"\n\n\n if (typeof sort === 'function') {\n indices.sort(sort);\n } else if (sort !== 'none') {\n indices.sort(function (a, b) {\n return isAscending ? valueArr[a] - valueArr[b] : valueArr[b] - valueArr[a];\n });\n }\n\n return indices;\n}\n\nfunction labelLayout(data) {\n data.each(function (idx) {\n var itemModel = data.getItemModel(idx);\n var labelModel = itemModel.getModel('label.normal');\n var labelPosition = labelModel.get('position');\n var labelLineModel = itemModel.getModel('labelLine.normal');\n var layout = data.getItemLayout(idx);\n var points = layout.points;\n var isLabelInside = labelPosition === 'inner' || labelPosition === 'inside' || labelPosition === 'center';\n var textAlign;\n var textX;\n var textY;\n var linePoints;\n\n if (isLabelInside) {\n textX = (points[0][0] + points[1][0] + points[2][0] + points[3][0]) / 4;\n textY = (points[0][1] + points[1][1] + points[2][1] + points[3][1]) / 4;\n textAlign = 'center';\n linePoints = [[textX, textY], [textX, textY]];\n } else {\n var x1;\n var y1;\n var x2;\n var labelLineLen = labelLineModel.get('length');\n\n if (labelPosition === 'left') {\n // Left side\n x1 = (points[3][0] + points[0][0]) / 2;\n y1 = (points[3][1] + points[0][1]) / 2;\n x2 = x1 - labelLineLen;\n textX = x2 - 5;\n textAlign = 'right';\n } else {\n // Right side\n x1 = (points[1][0] + points[2][0]) / 2;\n y1 = (points[1][1] + points[2][1]) / 2;\n x2 = x1 + labelLineLen;\n textX = x2 + 5;\n textAlign = 'left';\n }\n\n var y2 = y1;\n linePoints = [[x1, y1], [x2, y2]];\n textY = y2;\n }\n\n layout.label = {\n linePoints: linePoints,\n x: textX,\n y: textY,\n verticalAlign: 'middle',\n textAlign: textAlign,\n inside: isLabelInside\n };\n });\n}\n\nfunction _default(ecModel, api, payload) {\n ecModel.eachSeriesByType('funnel', function (seriesModel) {\n var data = seriesModel.getData();\n var sort = seriesModel.get('sort');\n var viewRect = getViewRect(seriesModel, api);\n var indices = getSortedIndices(data, sort);\n var sizeExtent = [parsePercent(seriesModel.get('minSize'), viewRect.width), parsePercent(seriesModel.get('maxSize'), viewRect.width)];\n var dataExtent = data.getDataExtent('value');\n var min = seriesModel.get('min');\n var max = seriesModel.get('max');\n\n if (min == null) {\n min = Math.min(dataExtent[0], 0);\n }\n\n if (max == null) {\n max = dataExtent[1];\n }\n\n var funnelAlign = seriesModel.get('funnelAlign');\n var gap = seriesModel.get('gap');\n var itemHeight = (viewRect.height - gap * (data.count() - 1)) / data.count();\n var y = viewRect.y;\n\n var getLinePoints = function (idx, offY) {\n // End point index is data.count() and we assign it 0\n var val = data.get('value', idx) || 0;\n var itemWidth = linearMap(val, [min, max], sizeExtent, true);\n var x0;\n\n switch (funnelAlign) {\n case 'left':\n x0 = viewRect.x;\n break;\n\n case 'center':\n x0 = viewRect.x + (viewRect.width - itemWidth) / 2;\n break;\n\n case 'right':\n x0 = viewRect.x + viewRect.width - itemWidth;\n break;\n }\n\n return [[x0, offY], [x0 + itemWidth, offY]];\n };\n\n if (sort === 'ascending') {\n // From bottom to top\n itemHeight = -itemHeight;\n gap = -gap;\n y += viewRect.height;\n indices = indices.reverse();\n }\n\n for (var i = 0; i < indices.length; i++) {\n var idx = indices[i];\n var nextIdx = indices[i + 1];\n var start = getLinePoints(idx, y);\n var end = getLinePoints(nextIdx, y + itemHeight);\n y += itemHeight + gap;\n data.setItemLayout(idx, {\n points: start.concat(end.slice().reverse())\n });\n }\n\n labelLayout(data);\n });\n}\n\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\nvar _poly = require(\"../line/poly\");\n\nvar Polygon = _poly.Polygon;\n\nvar graphic = require(\"../../util/graphic\");\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar bind = _util.bind;\nvar extend = _util.extend;\n\nvar DataDiffer = require(\"../../data/DataDiffer\");\n\n/**\n * @file The file used to draw themeRiver view\n * @author Deqing Li(annong035@gmail.com)\n */\nvar _default = echarts.extendChartView({\n type: 'themeRiver',\n init: function () {\n this._layers = [];\n },\n render: function (seriesModel, ecModel, api) {\n var data = seriesModel.getData();\n var group = this.group;\n var layerSeries = seriesModel.getLayerSeries();\n var layoutInfo = data.getLayout('layoutInfo');\n var rect = layoutInfo.rect;\n var boundaryGap = layoutInfo.boundaryGap;\n group.attr('position', [0, rect.y + boundaryGap[0]]);\n\n function keyGetter(item) {\n return item.name;\n }\n\n var dataDiffer = new DataDiffer(this._layersSeries || [], layerSeries, keyGetter, keyGetter);\n var newLayersGroups = {};\n dataDiffer.add(bind(process, this, 'add')).update(bind(process, this, 'update')).remove(bind(process, this, 'remove')).execute();\n\n function process(status, idx, oldIdx) {\n var oldLayersGroups = this._layers;\n\n if (status === 'remove') {\n group.remove(oldLayersGroups[idx]);\n return;\n }\n\n var points0 = [];\n var points1 = [];\n var color;\n var indices = layerSeries[idx].indices;\n\n for (var j = 0; j < indices.length; j++) {\n var layout = data.getItemLayout(indices[j]);\n var x = layout.x;\n var y0 = layout.y0;\n var y = layout.y;\n points0.push([x, y0]);\n points1.push([x, y0 + y]);\n color = data.getItemVisual(indices[j], 'color');\n }\n\n var polygon;\n var text;\n var textLayout = data.getItemLayout(indices[0]);\n var itemModel = data.getItemModel(indices[j - 1]);\n var labelModel = itemModel.getModel('label.normal');\n var margin = labelModel.get('margin');\n\n if (status === 'add') {\n var layerGroup = newLayersGroups[idx] = new graphic.Group();\n polygon = new Polygon({\n shape: {\n points: points0,\n stackedOnPoints: points1,\n smooth: 0.4,\n stackedOnSmooth: 0.4,\n smoothConstraint: false\n },\n z2: 0\n });\n text = new graphic.Text({\n style: {\n x: textLayout.x - margin,\n y: textLayout.y0 + textLayout.y / 2\n }\n });\n layerGroup.add(polygon);\n layerGroup.add(text);\n group.add(layerGroup);\n polygon.setClipPath(createGridClipShape(polygon.getBoundingRect(), seriesModel, function () {\n polygon.removeClipPath();\n }));\n } else {\n var layerGroup = oldLayersGroups[oldIdx];\n polygon = layerGroup.childAt(0);\n text = layerGroup.childAt(1);\n group.add(layerGroup);\n newLayersGroups[idx] = layerGroup;\n graphic.updateProps(polygon, {\n shape: {\n points: points0,\n stackedOnPoints: points1\n }\n }, seriesModel);\n graphic.updateProps(text, {\n style: {\n x: textLayout.x - margin,\n y: textLayout.y0 + textLayout.y / 2\n }\n }, seriesModel);\n }\n\n var hoverItemStyleModel = itemModel.getModel('itemStyle.emphasis');\n var itemStyleModel = itemModel.getModel('itemStyle.normal');\n graphic.setTextStyle(text.style, labelModel, {\n text: labelModel.get('show') ? seriesModel.getFormattedLabel(indices[j - 1], 'normal') || data.getName(indices[j - 1]) : null,\n textVerticalAlign: 'middle'\n });\n polygon.setStyle(extend({\n fill: color\n }, itemStyleModel.getItemStyle(['color'])));\n graphic.setHoverStyle(polygon, hoverItemStyleModel.getItemStyle());\n }\n\n this._layersSeries = layerSeries;\n this._layers = newLayersGroups;\n },\n dispose: function () {}\n}); // add animation to the view\n\n\nfunction createGridClipShape(rect, seriesModel, cb) {\n var rectEl = new graphic.Rect({\n shape: {\n x: rect.x - 10,\n y: rect.y - 10,\n width: 0,\n height: rect.height + 20\n }\n });\n graphic.initProps(rectEl, {\n shape: {\n width: rect.width + 20,\n height: rect.height + 20\n }\n }, seriesModel, cb);\n return rectEl;\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar modelUtil = require(\"../../util/model\");\n\nvar each = zrUtil.each;\nvar isObject = zrUtil.isObject;\nvar POSSIBLE_STYLES = ['areaStyle', 'lineStyle', 'nodeStyle', 'linkStyle', 'chordStyle', 'label', 'labelLine'];\n\nfunction compatItemStyle(opt) {\n var itemStyleOpt = opt && opt.itemStyle;\n\n if (!itemStyleOpt) {\n return;\n }\n\n for (var i = 0, len = POSSIBLE_STYLES.length; i < len; i++) {\n var styleName = POSSIBLE_STYLES[i];\n var normalItemStyleOpt = itemStyleOpt.normal;\n var emphasisItemStyleOpt = itemStyleOpt.emphasis;\n\n if (normalItemStyleOpt && normalItemStyleOpt[styleName]) {\n opt[styleName] = opt[styleName] || {};\n\n if (!opt[styleName].normal) {\n opt[styleName].normal = normalItemStyleOpt[styleName];\n } else {\n zrUtil.merge(opt[styleName].normal, normalItemStyleOpt[styleName]);\n }\n\n normalItemStyleOpt[styleName] = null;\n }\n\n if (emphasisItemStyleOpt && emphasisItemStyleOpt[styleName]) {\n opt[styleName] = opt[styleName] || {};\n\n if (!opt[styleName].emphasis) {\n opt[styleName].emphasis = emphasisItemStyleOpt[styleName];\n } else {\n zrUtil.merge(opt[styleName].emphasis, emphasisItemStyleOpt[styleName]);\n }\n\n emphasisItemStyleOpt[styleName] = null;\n }\n }\n}\n\nfunction compatTextStyle(opt, propName) {\n var labelOptSingle = isObject(opt) && opt[propName];\n var textStyle = isObject(labelOptSingle) && labelOptSingle.textStyle;\n\n if (textStyle) {\n for (var i = 0, len = modelUtil.TEXT_STYLE_OPTIONS.length; i < len; i++) {\n var propName = modelUtil.TEXT_STYLE_OPTIONS[i];\n\n if (textStyle.hasOwnProperty(propName)) {\n labelOptSingle[propName] = textStyle[propName];\n }\n }\n }\n}\n\nfunction compatLabelTextStyle(labelOpt) {\n if (isObject(labelOpt)) {\n compatTextStyle(labelOpt, 'normal');\n compatTextStyle(labelOpt, 'emphasis');\n }\n}\n\nfunction processSeries(seriesOpt) {\n if (!isObject(seriesOpt)) {\n return;\n }\n\n compatItemStyle(seriesOpt);\n compatLabelTextStyle(seriesOpt.label); // treemap\n\n compatLabelTextStyle(seriesOpt.upperLabel); // graph\n\n compatLabelTextStyle(seriesOpt.edgeLabel);\n var markPoint = seriesOpt.markPoint;\n compatItemStyle(markPoint);\n compatLabelTextStyle(markPoint && markPoint.label);\n var markLine = seriesOpt.markLine;\n compatItemStyle(seriesOpt.markLine);\n compatLabelTextStyle(markLine && markLine.label);\n var markArea = seriesOpt.markArea;\n compatLabelTextStyle(markArea && markArea.label); // For gauge\n\n compatTextStyle(seriesOpt, 'axisLabel');\n compatTextStyle(seriesOpt, 'title');\n compatTextStyle(seriesOpt, 'detail');\n var data = seriesOpt.data;\n\n if (data) {\n for (var i = 0; i < data.length; i++) {\n compatItemStyle(data[i]);\n compatLabelTextStyle(data[i] && data[i].label);\n }\n } // mark point data\n\n\n var markPoint = seriesOpt.markPoint;\n\n if (markPoint && markPoint.data) {\n var mpData = markPoint.data;\n\n for (var i = 0; i < mpData.length; i++) {\n compatItemStyle(mpData[i]);\n compatLabelTextStyle(mpData[i] && mpData[i].label);\n }\n } // mark line data\n\n\n var markLine = seriesOpt.markLine;\n\n if (markLine && markLine.data) {\n var mlData = markLine.data;\n\n for (var i = 0; i < mlData.length; i++) {\n if (zrUtil.isArray(mlData[i])) {\n compatItemStyle(mlData[i][0]);\n compatLabelTextStyle(mlData[i][0] && mlData[i][0].label);\n compatItemStyle(mlData[i][1]);\n compatLabelTextStyle(mlData[i][1] && mlData[i][1].label);\n } else {\n compatItemStyle(mlData[i]);\n compatLabelTextStyle(mlData[i] && mlData[i].label);\n }\n }\n }\n}\n\nfunction toArr(o) {\n return zrUtil.isArray(o) ? o : o ? [o] : [];\n}\n\nfunction toObj(o) {\n return (zrUtil.isArray(o) ? o[0] : o) || {};\n}\n\nfunction _default(option, isTheme) {\n each(toArr(option.series), function (seriesOpt) {\n isObject(seriesOpt) && processSeries(seriesOpt);\n });\n var axes = ['xAxis', 'yAxis', 'radiusAxis', 'angleAxis', 'singleAxis', 'parallelAxis', 'radar'];\n isTheme && axes.push('valueAxis', 'categoryAxis', 'logAxis', 'timeAxis');\n each(axes, function (axisName) {\n each(toArr(option[axisName]), function (axisOpt) {\n if (axisOpt) {\n compatTextStyle(axisOpt, 'axisLabel');\n compatTextStyle(axisOpt.axisPointer, 'label');\n }\n });\n });\n each(toArr(option.parallel), function (parallelOpt) {\n var parallelAxisDefault = parallelOpt && parallelOpt.parallelAxisDefault;\n compatTextStyle(parallelAxisDefault, 'axisLabel');\n compatTextStyle(parallelAxisDefault && parallelAxisDefault.axisPointer, 'label');\n });\n each(toArr(option.calendar), function (calendarOpt) {\n compatTextStyle(calendarOpt, 'dayLabel');\n compatTextStyle(calendarOpt, 'monthLabel');\n compatTextStyle(calendarOpt, 'yearLabel');\n }); // radar.name.textStyle\n\n each(toArr(option.radar), function (radarOpt) {\n compatTextStyle(radarOpt, 'name');\n });\n each(toArr(option.geo), function (geoOpt) {\n if (isObject(geoOpt)) {\n compatLabelTextStyle(geoOpt.label);\n each(toArr(geoOpt.regions), function (regionObj) {\n compatLabelTextStyle(regionObj.label);\n });\n }\n });\n compatLabelTextStyle(toObj(option.timeline).label);\n compatTextStyle(toObj(option.axisPointer), 'label');\n compatTextStyle(toObj(option.tooltip).axisPointer, 'label');\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\n// TODO Parse shadow style\n// TODO Only shallow path support\nfunction _default(properties) {\n // Normalize\n for (var i = 0; i < properties.length; i++) {\n if (!properties[i][1]) {\n properties[i][1] = properties[i][0];\n }\n }\n\n return function (model, excludes, includes) {\n var style = {};\n\n for (var i = 0; i < properties.length; i++) {\n var propName = properties[i][1];\n\n if (excludes && zrUtil.indexOf(excludes, propName) >= 0 || includes && zrUtil.indexOf(includes, propName) < 0) {\n continue;\n }\n\n var val = model.getShallow(propName);\n\n if (val != null) {\n style[properties[i][0]] = val;\n }\n }\n\n return style;\n };\n}\n\nmodule.exports = _default;","var _number = require(\"../../util/number\");\n\nvar parsePercent = _number.parsePercent;\nvar linearMap = _number.linearMap;\n\nvar labelLayout = require(\"./labelLayout\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar PI2 = Math.PI * 2;\nvar RADIAN = Math.PI / 180;\n\nfunction _default(seriesType, ecModel, api, payload) {\n ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n var center = seriesModel.get('center');\n var radius = seriesModel.get('radius');\n\n if (!zrUtil.isArray(radius)) {\n radius = [0, radius];\n }\n\n if (!zrUtil.isArray(center)) {\n center = [center, center];\n }\n\n var width = api.getWidth();\n var height = api.getHeight();\n var size = Math.min(width, height);\n var cx = parsePercent(center[0], width);\n var cy = parsePercent(center[1], height);\n var r0 = parsePercent(radius[0], size / 2);\n var r = parsePercent(radius[1], size / 2);\n var data = seriesModel.getData();\n var startAngle = -seriesModel.get('startAngle') * RADIAN;\n var minAngle = seriesModel.get('minAngle') * RADIAN;\n var validDataCount = 0;\n data.each('value', function (value) {\n !isNaN(value) && validDataCount++;\n });\n var sum = data.getSum('value'); // Sum may be 0\n\n var unitRadian = Math.PI / (sum || validDataCount) * 2;\n var clockwise = seriesModel.get('clockwise');\n var roseType = seriesModel.get('roseType');\n var stillShowZeroSum = seriesModel.get('stillShowZeroSum'); // [0...max]\n\n var extent = data.getDataExtent('value');\n extent[0] = 0; // In the case some sector angle is smaller than minAngle\n\n var restAngle = PI2;\n var valueSumLargerThanMinAngle = 0;\n var currentAngle = startAngle;\n var dir = clockwise ? 1 : -1;\n data.each('value', function (value, idx) {\n var angle;\n\n if (isNaN(value)) {\n data.setItemLayout(idx, {\n angle: NaN,\n startAngle: NaN,\n endAngle: NaN,\n clockwise: clockwise,\n cx: cx,\n cy: cy,\n r0: r0,\n r: roseType ? NaN : r\n });\n return;\n } // FIXME 兼容 2.0 但是 roseType 是 area 的时候才是这样?\n\n\n if (roseType !== 'area') {\n angle = sum === 0 && stillShowZeroSum ? unitRadian : value * unitRadian;\n } else {\n angle = PI2 / validDataCount;\n }\n\n if (angle < minAngle) {\n angle = minAngle;\n restAngle -= minAngle;\n } else {\n valueSumLargerThanMinAngle += value;\n }\n\n var endAngle = currentAngle + dir * angle;\n data.setItemLayout(idx, {\n angle: angle,\n startAngle: currentAngle,\n endAngle: endAngle,\n clockwise: clockwise,\n cx: cx,\n cy: cy,\n r0: r0,\n r: roseType ? linearMap(value, extent, [r0, r]) : r\n });\n currentAngle = endAngle;\n }, true); // Some sector is constrained by minAngle\n // Rest sectors needs recalculate angle\n\n if (restAngle < PI2 && validDataCount) {\n // Average the angle if rest angle is not enough after all angles is\n // Constrained by minAngle\n if (restAngle <= 1e-3) {\n var angle = PI2 / validDataCount;\n data.each('value', function (value, idx) {\n if (!isNaN(value)) {\n var layout = data.getItemLayout(idx);\n layout.angle = angle;\n layout.startAngle = startAngle + dir * idx * angle;\n layout.endAngle = startAngle + dir * (idx + 1) * angle;\n }\n });\n } else {\n unitRadian = restAngle / valueSumLargerThanMinAngle;\n currentAngle = startAngle;\n data.each('value', function (value, idx) {\n if (!isNaN(value)) {\n var layout = data.getItemLayout(idx);\n var angle = layout.angle === minAngle ? minAngle : value * unitRadian;\n layout.startAngle = currentAngle;\n layout.endAngle = currentAngle + dir * angle;\n currentAngle += dir * angle;\n }\n });\n }\n }\n\n labelLayout(seriesModel, r, width, height);\n });\n}\n\nmodule.exports = _default;","function _default(ecModel) {\n var paletteScope = {};\n ecModel.eachSeriesByType('graph', function (seriesModel) {\n var categoriesData = seriesModel.getCategoriesData();\n var data = seriesModel.getData();\n var categoryNameIdxMap = {};\n categoriesData.each(function (idx) {\n var name = categoriesData.getName(idx); // Add prefix to avoid conflict with Object.prototype.\n\n categoryNameIdxMap['ec-' + name] = idx;\n var itemModel = categoriesData.getItemModel(idx);\n var color = itemModel.get('itemStyle.normal.color') || seriesModel.getColorFromPalette(name, paletteScope);\n categoriesData.setItemVisual(idx, 'color', color);\n }); // Assign category color to visual\n\n if (categoriesData.count()) {\n data.each(function (idx) {\n var model = data.getItemModel(idx);\n var category = model.getShallow('category');\n\n if (category != null) {\n if (typeof category === 'string') {\n category = categoryNameIdxMap['ec-' + category];\n }\n\n if (!data.getItemVisual(idx, 'color', true)) {\n data.setItemVisual(idx, 'color', categoriesData.getItemVisual(category, 'color'));\n }\n }\n });\n }\n });\n}\n\nmodule.exports = _default;","var _default = {\n toolbox: {\n brush: {\n title: {\n rect: '矩形选择',\n polygon: '圈选',\n lineX: '横向选择',\n lineY: '纵向选择',\n keep: '保持选择',\n clear: '清除选择'\n }\n },\n dataView: {\n title: '数据视图',\n lang: ['数据视图', '关闭', '刷新']\n },\n dataZoom: {\n title: {\n zoom: '区域缩放',\n back: '区域缩放还原'\n }\n },\n magicType: {\n title: {\n line: '切换为折线图',\n bar: '切换为柱状图',\n stack: '切换为堆叠',\n tiled: '切换为平铺'\n }\n },\n restore: {\n title: '还原'\n },\n saveAsImage: {\n title: '保存为图片',\n lang: ['右键另存为图片']\n }\n }\n};\nmodule.exports = _default;","var echarts = require(\"../echarts\");\n\nvar preprocessor = require(\"./visualMap/preprocessor\");\n\nrequire(\"./visualMap/typeDefaulter\");\n\nrequire(\"./visualMap/visualEncoding\");\n\nrequire(\"./visualMap/PiecewiseModel\");\n\nrequire(\"./visualMap/PiecewiseView\");\n\nrequire(\"./visualMap/visualMapAction\");\n\n/**\n * DataZoom component entry\n */\necharts.registerPreprocessor(preprocessor);","var STYLE_COMMON_PROPS = [['shadowBlur', 0], ['shadowOffsetX', 0], ['shadowOffsetY', 0], ['shadowColor', '#000'], ['lineCap', 'butt'], ['lineJoin', 'miter'], ['miterLimit', 10]]; // var SHADOW_PROPS = STYLE_COMMON_PROPS.slice(0, 4);\n// var LINE_PROPS = STYLE_COMMON_PROPS.slice(4);\n\nvar Style = function (opts, host) {\n this.extendFrom(opts, false);\n this.host = host;\n};\n\nfunction createLinearGradient(ctx, obj, rect) {\n var x = obj.x == null ? 0 : obj.x;\n var x2 = obj.x2 == null ? 1 : obj.x2;\n var y = obj.y == null ? 0 : obj.y;\n var y2 = obj.y2 == null ? 0 : obj.y2;\n\n if (!obj.global) {\n x = x * rect.width + rect.x;\n x2 = x2 * rect.width + rect.x;\n y = y * rect.height + rect.y;\n y2 = y2 * rect.height + rect.y;\n }\n\n var canvasGradient = ctx.createLinearGradient(x, y, x2, y2);\n return canvasGradient;\n}\n\nfunction createRadialGradient(ctx, obj, rect) {\n var width = rect.width;\n var height = rect.height;\n var min = Math.min(width, height);\n var x = obj.x == null ? 0.5 : obj.x;\n var y = obj.y == null ? 0.5 : obj.y;\n var r = obj.r == null ? 0.5 : obj.r;\n\n if (!obj.global) {\n x = x * width + rect.x;\n y = y * height + rect.y;\n r = r * min;\n }\n\n var canvasGradient = ctx.createRadialGradient(x, y, 0, x, y, r);\n return canvasGradient;\n}\n\nStyle.prototype = {\n constructor: Style,\n\n /**\n * @type {module:zrender/graphic/Displayable}\n */\n host: null,\n\n /**\n * @type {string}\n */\n fill: '#000',\n\n /**\n * @type {string}\n */\n stroke: null,\n\n /**\n * @type {number}\n */\n opacity: 1,\n\n /**\n * @type {Array.}\n */\n lineDash: null,\n\n /**\n * @type {number}\n */\n lineDashOffset: 0,\n\n /**\n * @type {number}\n */\n shadowBlur: 0,\n\n /**\n * @type {number}\n */\n shadowOffsetX: 0,\n\n /**\n * @type {number}\n */\n shadowOffsetY: 0,\n\n /**\n * @type {number}\n */\n lineWidth: 1,\n\n /**\n * If stroke ignore scale\n * @type {Boolean}\n */\n strokeNoScale: false,\n // Bounding rect text configuration\n // Not affected by element transform\n\n /**\n * @type {string}\n */\n text: null,\n\n /**\n * If `fontSize` or `fontFamily` exists, `font` will be reset by\n * `fontSize`, `fontStyle`, `fontWeight`, `fontFamily`.\n * So do not visit it directly in upper application (like echarts),\n * but use `contain/text#makeFont` instead.\n * @type {string}\n */\n font: null,\n\n /**\n * The same as font. Use font please.\n * @deprecated\n * @type {string}\n */\n textFont: null,\n\n /**\n * It helps merging respectively, rather than parsing an entire font string.\n * @type {string}\n */\n fontStyle: null,\n\n /**\n * It helps merging respectively, rather than parsing an entire font string.\n * @type {string}\n */\n fontWeight: null,\n\n /**\n * It helps merging respectively, rather than parsing an entire font string.\n * Should be 12 but not '12px'.\n * @type {number}\n */\n fontSize: null,\n\n /**\n * It helps merging respectively, rather than parsing an entire font string.\n * @type {string}\n */\n fontFamily: null,\n\n /**\n * Reserved for special functinality, like 'hr'.\n * @type {string}\n */\n textTag: null,\n\n /**\n * @type {string}\n */\n textFill: '#000',\n\n /**\n * @type {string}\n */\n textStroke: null,\n\n /**\n * @type {number}\n */\n textWidth: null,\n\n /**\n * Only for textBackground.\n * @type {number}\n */\n textHeight: null,\n\n /**\n * textStroke may be set as some color as a default\n * value in upper applicaion, where the default value\n * of textStrokeWidth should be 0 to make sure that\n * user can choose to do not use text stroke.\n * @type {number}\n */\n textStrokeWidth: 0,\n\n /**\n * @type {number}\n */\n textLineHeight: null,\n\n /**\n * 'inside', 'left', 'right', 'top', 'bottom'\n * [x, y]\n * Based on x, y of rect.\n * @type {string|Array.}\n * @default 'inside'\n */\n textPosition: 'inside',\n\n /**\n * If not specified, use the boundingRect of a `displayable`.\n * @type {Object}\n */\n textRect: null,\n\n /**\n * [x, y]\n * @type {Array.}\n */\n textOffset: null,\n\n /**\n * @type {string}\n */\n textAlign: null,\n\n /**\n * @type {string}\n */\n textVerticalAlign: null,\n\n /**\n * @type {number}\n */\n textDistance: 5,\n\n /**\n * @type {string}\n */\n textShadowColor: 'transparent',\n\n /**\n * @type {number}\n */\n textShadowBlur: 0,\n\n /**\n * @type {number}\n */\n textShadowOffsetX: 0,\n\n /**\n * @type {number}\n */\n textShadowOffsetY: 0,\n\n /**\n * @type {string}\n */\n textBoxShadowColor: 'transparent',\n\n /**\n * @type {number}\n */\n textBoxShadowBlur: 0,\n\n /**\n * @type {number}\n */\n textBoxShadowOffsetX: 0,\n\n /**\n * @type {number}\n */\n textBoxShadowOffsetY: 0,\n\n /**\n * Whether transform text.\n * Only useful in Path and Image element\n * @type {boolean}\n */\n transformText: false,\n\n /**\n * Text rotate around position of Path or Image\n * Only useful in Path and Image element and transformText is false.\n */\n textRotation: 0,\n\n /**\n * Text origin of text rotation, like [10, 40].\n * Based on x, y of rect.\n * Useful in label rotation of circular symbol.\n * By default, this origin is textPosition.\n * Can be 'center'.\n * @type {string|Array.}\n */\n textOrigin: null,\n\n /**\n * @type {string}\n */\n textBackgroundColor: null,\n\n /**\n * @type {string}\n */\n textBorderColor: null,\n\n /**\n * @type {number}\n */\n textBorderWidth: 0,\n\n /**\n * @type {number}\n */\n textBorderRadius: 0,\n\n /**\n * Can be `2` or `[2, 4]` or `[2, 3, 4, 5]`\n * @type {number|Array.}\n */\n textPadding: null,\n\n /**\n * Text styles for rich text.\n * @type {Object}\n */\n rich: null,\n\n /**\n * {outerWidth, outerHeight, ellipsis, placeholder}\n * @type {Object}\n */\n truncate: null,\n\n /**\n * https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation\n * @type {string}\n */\n blend: null,\n\n /**\n * @param {CanvasRenderingContext2D} ctx\n */\n bind: function (ctx, el, prevEl) {\n var style = this;\n var prevStyle = prevEl && prevEl.style;\n var firstDraw = !prevStyle;\n\n for (var i = 0; i < STYLE_COMMON_PROPS.length; i++) {\n var prop = STYLE_COMMON_PROPS[i];\n var styleName = prop[0];\n\n if (firstDraw || style[styleName] !== prevStyle[styleName]) {\n // FIXME Invalid property value will cause style leak from previous element.\n ctx[styleName] = style[styleName] || prop[1];\n }\n }\n\n if (firstDraw || style.fill !== prevStyle.fill) {\n ctx.fillStyle = style.fill;\n }\n\n if (firstDraw || style.stroke !== prevStyle.stroke) {\n ctx.strokeStyle = style.stroke;\n }\n\n if (firstDraw || style.opacity !== prevStyle.opacity) {\n ctx.globalAlpha = style.opacity == null ? 1 : style.opacity;\n }\n\n if (firstDraw || style.blend !== prevStyle.blend) {\n ctx.globalCompositeOperation = style.blend || 'source-over';\n }\n\n if (this.hasStroke()) {\n var lineWidth = style.lineWidth;\n ctx.lineWidth = lineWidth / (this.strokeNoScale && el && el.getLineScale ? el.getLineScale() : 1);\n }\n },\n hasFill: function () {\n var fill = this.fill;\n return fill != null && fill !== 'none';\n },\n hasStroke: function () {\n var stroke = this.stroke;\n return stroke != null && stroke !== 'none' && this.lineWidth > 0;\n },\n\n /**\n * Extend from other style\n * @param {zrender/graphic/Style} otherStyle\n * @param {boolean} overwrite true: overwrirte any way.\n * false: overwrite only when !target.hasOwnProperty\n * others: overwrite when property is not null/undefined.\n */\n extendFrom: function (otherStyle, overwrite) {\n if (otherStyle) {\n for (var name in otherStyle) {\n if (otherStyle.hasOwnProperty(name) && (overwrite === true || (overwrite === false ? !this.hasOwnProperty(name) : otherStyle[name] != null))) {\n this[name] = otherStyle[name];\n }\n }\n }\n },\n\n /**\n * Batch setting style with a given object\n * @param {Object|string} obj\n * @param {*} [obj]\n */\n set: function (obj, value) {\n if (typeof obj === 'string') {\n this[obj] = value;\n } else {\n this.extendFrom(obj, true);\n }\n },\n\n /**\n * Clone\n * @return {zrender/graphic/Style} [description]\n */\n clone: function () {\n var newStyle = new this.constructor();\n newStyle.extendFrom(this, true);\n return newStyle;\n },\n getGradient: function (ctx, obj, rect) {\n var method = obj.type === 'radial' ? createRadialGradient : createLinearGradient;\n var canvasGradient = method(ctx, obj, rect);\n var colorStops = obj.colorStops;\n\n for (var i = 0; i < colorStops.length; i++) {\n canvasGradient.addColorStop(colorStops[i].offset, colorStops[i].color);\n }\n\n return canvasGradient;\n }\n};\nvar styleProto = Style.prototype;\n\nfor (var i = 0; i < STYLE_COMMON_PROPS.length; i++) {\n var prop = STYLE_COMMON_PROPS[i];\n\n if (!(prop[0] in styleProto)) {\n styleProto[prop[0]] = prop[1];\n }\n} // Provide for others\n\n\nStyle.getGradient = styleProto.getGradient;\nvar _default = Style;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar VisualMapping = require(\"./VisualMapping\");\n\n/**\n * @file Visual solution, for consistent option specification.\n */\nvar each = zrUtil.each;\n\nfunction hasKeys(obj) {\n if (obj) {\n for (var name in obj) {\n if (obj.hasOwnProperty(name)) {\n return true;\n }\n }\n }\n}\n/**\n * @param {Object} option\n * @param {Array.} stateList\n * @param {Function} [supplementVisualOption]\n * @return {Object} visualMappings >\n */\n\n\nfunction createVisualMappings(option, stateList, supplementVisualOption) {\n var visualMappings = {};\n each(stateList, function (state) {\n var mappings = visualMappings[state] = createMappings();\n each(option[state], function (visualData, visualType) {\n if (!VisualMapping.isValidType(visualType)) {\n return;\n }\n\n var mappingOption = {\n type: visualType,\n visual: visualData\n };\n supplementVisualOption && supplementVisualOption(mappingOption, state);\n mappings[visualType] = new VisualMapping(mappingOption); // Prepare a alpha for opacity, for some case that opacity\n // is not supported, such as rendering using gradient color.\n\n if (visualType === 'opacity') {\n mappingOption = zrUtil.clone(mappingOption);\n mappingOption.type = 'colorAlpha';\n mappings.__hidden.__alphaForOpacity = new VisualMapping(mappingOption);\n }\n });\n });\n return visualMappings;\n\n function createMappings() {\n var Creater = function () {}; // Make sure hidden fields will not be visited by\n // object iteration (with hasOwnProperty checking).\n\n\n Creater.prototype.__hidden = Creater.prototype;\n var obj = new Creater();\n return obj;\n }\n}\n/**\n * @param {Object} thisOption\n * @param {Object} newOption\n * @param {Array.} keys\n */\n\n\nfunction replaceVisualOption(thisOption, newOption, keys) {\n // Visual attributes merge is not supported, otherwise it\n // brings overcomplicated merge logic. See #2853. So if\n // newOption has anyone of these keys, all of these keys\n // will be reset. Otherwise, all keys remain.\n var has;\n zrUtil.each(keys, function (key) {\n if (newOption.hasOwnProperty(key) && hasKeys(newOption[key])) {\n has = true;\n }\n });\n has && zrUtil.each(keys, function (key) {\n if (newOption.hasOwnProperty(key) && hasKeys(newOption[key])) {\n thisOption[key] = zrUtil.clone(newOption[key]);\n } else {\n delete thisOption[key];\n }\n });\n}\n/**\n * @param {Array.} stateList\n * @param {Object} visualMappings >\n * @param {module:echarts/data/List} list\n * @param {Function} getValueState param: valueOrIndex, return: state.\n * @param {object} [scope] Scope for getValueState\n * @param {string} [dimension] Concrete dimension, if used.\n */\n\n\nfunction applyVisual(stateList, visualMappings, data, getValueState, scope, dimension) {\n var visualTypesMap = {};\n zrUtil.each(stateList, function (state) {\n var visualTypes = VisualMapping.prepareVisualTypes(visualMappings[state]);\n visualTypesMap[state] = visualTypes;\n });\n var dataIndex;\n\n function getVisual(key) {\n return data.getItemVisual(dataIndex, key);\n }\n\n function setVisual(key, value) {\n data.setItemVisual(dataIndex, key, value);\n }\n\n if (dimension == null) {\n data.each(eachItem, true);\n } else {\n data.each([dimension], eachItem, true);\n }\n\n function eachItem(valueOrIndex, index) {\n dataIndex = dimension == null ? valueOrIndex : index;\n var rawDataItem = data.getRawDataItem(dataIndex); // Consider performance\n\n if (rawDataItem && rawDataItem.visualMap === false) {\n return;\n }\n\n var valueState = getValueState.call(scope, valueOrIndex);\n var mappings = visualMappings[valueState];\n var visualTypes = visualTypesMap[valueState];\n\n for (var i = 0, len = visualTypes.length; i < len; i++) {\n var type = visualTypes[i];\n mappings[type] && mappings[type].applyVisual(valueOrIndex, getVisual, setVisual);\n }\n }\n}\n\nexports.createVisualMappings = createVisualMappings;\nexports.replaceVisualOption = replaceVisualOption;\nexports.applyVisual = applyVisual;","var echarts = require(\"../../echarts\");\n\necharts.registerProcessor(function (ecModel, api) {\n ecModel.eachComponent('dataZoom', function (dataZoomModel) {\n // We calculate window and reset axis here but not in model\n // init stage and not after action dispatch handler, because\n // reset should be called after seriesData.restoreData.\n dataZoomModel.eachTargetAxis(resetSingleAxis); // Caution: data zoom filtering is order sensitive when using\n // percent range and no min/max/scale set on axis.\n // For example, we have dataZoom definition:\n // [\n // {xAxisIndex: 0, start: 30, end: 70},\n // {yAxisIndex: 0, start: 20, end: 80}\n // ]\n // In this case, [20, 80] of y-dataZoom should be based on data\n // that have filtered by x-dataZoom using range of [30, 70],\n // but should not be based on full raw data. Thus sliding\n // x-dataZoom will change both ranges of xAxis and yAxis,\n // while sliding y-dataZoom will only change the range of yAxis.\n // So we should filter x-axis after reset x-axis immediately,\n // and then reset y-axis and filter y-axis.\n\n dataZoomModel.eachTargetAxis(filterSingleAxis);\n });\n ecModel.eachComponent('dataZoom', function (dataZoomModel) {\n // Fullfill all of the range props so that user\n // is able to get them from chart.getOption().\n var axisProxy = dataZoomModel.findRepresentativeAxisProxy();\n var percentRange = axisProxy.getDataPercentWindow();\n var valueRange = axisProxy.getDataValueWindow();\n dataZoomModel.setRawRange({\n start: percentRange[0],\n end: percentRange[1],\n startValue: valueRange[0],\n endValue: valueRange[1]\n }, true);\n });\n});\n\nfunction resetSingleAxis(dimNames, axisIndex, dataZoomModel) {\n dataZoomModel.getAxisProxy(dimNames.name, axisIndex).reset(dataZoomModel);\n}\n\nfunction filterSingleAxis(dimNames, axisIndex, dataZoomModel) {\n dataZoomModel.getAxisProxy(dimNames.name, axisIndex).filterData(dataZoomModel);\n}","var dpr = 1; // If in browser environment\n\nif (typeof window !== 'undefined') {\n dpr = Math.max(window.devicePixelRatio || 1, 1);\n}\n/**\n * config默认配置项\n * @exports zrender/config\n * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)\n */\n\n/**\n * debug日志选项:catchBrushException为true下有效\n * 0 : 不生成debug数据,发布用\n * 1 : 异常抛出,调试用\n * 2 : 控制台输出,调试用\n */\n\n\nvar debugMode = 0; // retina 屏幕优化\n\nvar devicePixelRatio = dpr;\nexports.debugMode = debugMode;\nexports.devicePixelRatio = devicePixelRatio;","var echarts = require(\"../echarts\");\n\nrequire(\"../coord/single/singleCreator\");\n\nrequire(\"./axis/SingleAxisView\");\n\nrequire(\"../coord/single/AxisModel\");\n\nrequire(\"./axisPointer\");\n\nrequire(\"./axisPointer/SingleAxisPointer\");\n\necharts.extendComponentView({\n type: 'single'\n});","var echarts = require(\"../echarts\");\n\nvar preprocessor = require(\"./brush/preprocessor\");\n\nrequire(\"./brush/visualEncoding\");\n\nrequire(\"./brush/BrushModel\");\n\nrequire(\"./brush/BrushView\");\n\nrequire(\"./brush/brushAction\");\n\nrequire(\"./toolbox/feature/Brush\");\n\n/**\n * Brush component entry\n */\necharts.registerPreprocessor(preprocessor);","var echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar barPolar = require(\"../layout/barPolar\");\n\nrequire(\"../coord/polar/polarCreator\");\n\nrequire(\"./angleAxis\");\n\nrequire(\"./radiusAxis\");\n\nrequire(\"./axisPointer\");\n\nrequire(\"./axisPointer/PolarAxisPointer\");\n\n// For reducing size of echarts.min, barLayoutPolar is required by polar.\necharts.registerLayout(zrUtil.curry(barPolar, 'bar')); // Polar view\n\necharts.extendComponentView({\n type: 'polar'\n});","var borderColorQuery = ['itemStyle', 'normal', 'borderColor'];\n\nfunction _default(ecModel, api) {\n var globalColors = ecModel.get('color');\n ecModel.eachRawSeriesByType('boxplot', function (seriesModel) {\n var defaulColor = globalColors[seriesModel.seriesIndex % globalColors.length];\n var data = seriesModel.getData();\n data.setVisual({\n legendSymbol: 'roundRect',\n // Use name 'color' but not 'borderColor' for legend usage and\n // visual coding from other component like dataRange.\n color: seriesModel.get(borderColorQuery) || defaulColor\n }); // Only visible series has each data be visual encoded\n\n if (!ecModel.isSeriesFiltered(seriesModel)) {\n data.each(function (idx) {\n var itemModel = data.getItemModel(idx);\n data.setItemVisual(idx, {\n color: itemModel.get(borderColorQuery, true)\n });\n });\n }\n });\n}\n\nmodule.exports = _default;","var SeriesModel = require(\"../../model/Series\");\n\nvar createListFromArray = require(\"../helper/createListFromArray\");\n\nvar _default = SeriesModel.extend({\n type: 'series.__base_bar__',\n getInitialData: function (option, ecModel) {\n return createListFromArray(option.data, this, ecModel);\n },\n getMarkerPosition: function (value) {\n var coordSys = this.coordinateSystem;\n\n if (coordSys) {\n // PENDING if clamp ?\n var pt = coordSys.dataToPoint(value, true);\n var data = this.getData();\n var offset = data.getLayout('offset');\n var size = data.getLayout('size');\n var offsetIndex = coordSys.getBaseAxis().isHorizontal() ? 0 : 1;\n pt[offsetIndex] += offset + size / 2;\n return pt;\n }\n\n return [NaN, NaN];\n },\n defaultOption: {\n zlevel: 0,\n // 一级层叠\n z: 2,\n // 二级层叠\n coordinateSystem: 'cartesian2d',\n legendHoverLink: true,\n // stack: null\n // Cartesian coordinate system\n // xAxisIndex: 0,\n // yAxisIndex: 0,\n // 最小高度改为0\n barMinHeight: 0,\n // 最小角度为0,仅对极坐标系下的柱状图有效\n barMinAngle: 0,\n // cursor: null,\n // barMaxWidth: null,\n // 默认自适应\n // barWidth: null,\n // 柱间距离,默认为柱形宽度的30%,可设固定值\n // barGap: '30%',\n // 类目间柱形距离,默认为类目间距的20%,可设固定值\n // barCategoryGap: '20%',\n // label: {\n // normal: {\n // show: false\n // }\n // },\n itemStyle: {// normal: {\n // color: '各异'\n // },\n // emphasis: {}\n }\n }\n});\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar VisualMapModel = require(\"./VisualMapModel\");\n\nvar numberUtil = require(\"../../util/number\");\n\n// Constant\nvar DEFAULT_BAR_BOUND = [20, 140];\nvar ContinuousModel = VisualMapModel.extend({\n type: 'visualMap.continuous',\n\n /**\n * @protected\n */\n defaultOption: {\n align: 'auto',\n // 'auto', 'left', 'right', 'top', 'bottom'\n calculable: false,\n // This prop effect default component type determine,\n // See echarts/component/visualMap/typeDefaulter.\n range: null,\n // selected range. In default case `range` is [min, max]\n // and can auto change along with modification of min max,\n // util use specifid a range.\n realtime: true,\n // Whether realtime update.\n itemHeight: null,\n // The length of the range control edge.\n itemWidth: null,\n // The length of the other side.\n hoverLink: true,\n // Enable hover highlight.\n hoverLinkDataSize: null,\n // The size of hovered data.\n hoverLinkOnHandle: null // Whether trigger hoverLink when hover handle.\n // If not specified, follow the value of `realtime`.\n\n },\n\n /**\n * @override\n */\n optionUpdated: function (newOption, isInit) {\n ContinuousModel.superApply(this, 'optionUpdated', arguments);\n this.resetExtent();\n this.resetVisual(function (mappingOption) {\n mappingOption.mappingMethod = 'linear';\n mappingOption.dataExtent = this.getExtent();\n });\n\n this._resetRange();\n },\n\n /**\n * @protected\n * @override\n */\n resetItemSize: function () {\n ContinuousModel.superApply(this, 'resetItemSize', arguments);\n var itemSize = this.itemSize;\n this._orient === 'horizontal' && itemSize.reverse();\n (itemSize[0] == null || isNaN(itemSize[0])) && (itemSize[0] = DEFAULT_BAR_BOUND[0]);\n (itemSize[1] == null || isNaN(itemSize[1])) && (itemSize[1] = DEFAULT_BAR_BOUND[1]);\n },\n\n /**\n * @private\n */\n _resetRange: function () {\n var dataExtent = this.getExtent();\n var range = this.option.range;\n\n if (!range || range.auto) {\n // `range` should always be array (so we dont use other\n // value like 'auto') for user-friend. (consider getOption).\n dataExtent.auto = 1;\n this.option.range = dataExtent;\n } else if (zrUtil.isArray(range)) {\n if (range[0] > range[1]) {\n range.reverse();\n }\n\n range[0] = Math.max(range[0], dataExtent[0]);\n range[1] = Math.min(range[1], dataExtent[1]);\n }\n },\n\n /**\n * @protected\n * @override\n */\n completeVisualOption: function () {\n VisualMapModel.prototype.completeVisualOption.apply(this, arguments);\n zrUtil.each(this.stateList, function (state) {\n var symbolSize = this.option.controller[state].symbolSize;\n\n if (symbolSize && symbolSize[0] !== symbolSize[1]) {\n symbolSize[0] = 0; // For good looking.\n }\n }, this);\n },\n\n /**\n * @override\n */\n setSelected: function (selected) {\n this.option.range = selected.slice();\n\n this._resetRange();\n },\n\n /**\n * @public\n */\n getSelected: function () {\n var dataExtent = this.getExtent();\n var dataInterval = numberUtil.asc((this.get('range') || []).slice()); // Clamp\n\n dataInterval[0] > dataExtent[1] && (dataInterval[0] = dataExtent[1]);\n dataInterval[1] > dataExtent[1] && (dataInterval[1] = dataExtent[1]);\n dataInterval[0] < dataExtent[0] && (dataInterval[0] = dataExtent[0]);\n dataInterval[1] < dataExtent[0] && (dataInterval[1] = dataExtent[0]);\n return dataInterval;\n },\n\n /**\n * @override\n */\n getValueState: function (value) {\n var range = this.option.range;\n var dataExtent = this.getExtent(); // When range[0] === dataExtent[0], any value larger than dataExtent[0] maps to 'inRange'.\n // range[1] is processed likewise.\n\n return (range[0] <= dataExtent[0] || range[0] <= value) && (range[1] >= dataExtent[1] || value <= range[1]) ? 'inRange' : 'outOfRange';\n },\n\n /**\n * @params {Array.} range target value: range[0] <= value && value <= range[1]\n * @return {Array.} [{seriesId, dataIndices: >}, ...]\n */\n findTargetDataIndices: function (range) {\n var result = [];\n this.eachTargetSeries(function (seriesModel) {\n var dataIndices = [];\n var data = seriesModel.getData();\n data.each(this.getDataDimension(data), function (value, dataIndex) {\n range[0] <= value && value <= range[1] && dataIndices.push(dataIndex);\n }, true, this);\n result.push({\n seriesId: seriesModel.id,\n dataIndex: dataIndices\n });\n }, this);\n return result;\n },\n\n /**\n * @implement\n */\n getVisualMeta: function (getColorVisual) {\n var oVals = getColorStopValues(this, 'outOfRange', this.getExtent());\n var iVals = getColorStopValues(this, 'inRange', this.option.range.slice());\n var stops = [];\n\n function setStop(value, valueState) {\n stops.push({\n value: value,\n color: getColorVisual(value, valueState)\n });\n } // Format to: outOfRange -- inRange -- outOfRange.\n\n\n var iIdx = 0;\n var oIdx = 0;\n var iLen = iVals.length;\n var oLen = oVals.length;\n\n for (; oIdx < oLen && (!iVals.length || oVals[oIdx] <= iVals[0]); oIdx++) {\n // If oVal[oIdx] === iVals[iIdx], oVal[oIdx] should be ignored.\n if (oVals[oIdx] < iVals[iIdx]) {\n setStop(oVals[oIdx], 'outOfRange');\n }\n }\n\n for (var first = 1; iIdx < iLen; iIdx++, first = 0) {\n // If range is full, value beyond min, max will be clamped.\n // make a singularity\n first && stops.length && setStop(iVals[iIdx], 'outOfRange');\n setStop(iVals[iIdx], 'inRange');\n }\n\n for (var first = 1; oIdx < oLen; oIdx++) {\n if (!iVals.length || iVals[iVals.length - 1] < oVals[oIdx]) {\n // make a singularity\n if (first) {\n stops.length && setStop(stops[stops.length - 1].value, 'outOfRange');\n first = 0;\n }\n\n setStop(oVals[oIdx], 'outOfRange');\n }\n }\n\n var stopsLen = stops.length;\n return {\n stops: stops,\n outerColors: [stopsLen ? stops[0].color : 'transparent', stopsLen ? stops[stopsLen - 1].color : 'transparent']\n };\n }\n});\n\nfunction getColorStopValues(visualMapModel, valueState, dataExtent) {\n if (dataExtent[0] === dataExtent[1]) {\n return dataExtent.slice();\n } // When using colorHue mapping, it is not linear color any more.\n // Moreover, canvas gradient seems not to be accurate linear.\n // FIXME\n // Should be arbitrary value 100? or based on pixel size?\n\n\n var count = 200;\n var step = (dataExtent[1] - dataExtent[0]) / count;\n var value = dataExtent[0];\n var stopValues = [];\n\n for (var i = 0; i <= count && value < dataExtent[1]; i++) {\n stopValues.push(value);\n value += step;\n }\n\n stopValues.push(dataExtent[1]);\n return stopValues;\n}\n\nvar _default = ContinuousModel;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nfunction dataToCoordSize(dataSize, dataItem) {\n // dataItem is necessary in log axis.\n var axis = this.getAxis();\n var val = dataItem instanceof Array ? dataItem[0] : dataItem;\n var halfSize = (dataSize instanceof Array ? dataSize[0] : dataSize) / 2;\n return axis.type === 'category' ? axis.getBandWidth() : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize));\n}\n\nfunction _default(coordSys) {\n var rect = coordSys.getRect();\n return {\n coordSys: {\n type: 'singleAxis',\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height\n },\n api: {\n coord: zrUtil.bind(coordSys.dataToPoint, coordSys),\n size: zrUtil.bind(dataToCoordSize, coordSys)\n }\n };\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar List = require(\"../../data/List\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar markerHelper = require(\"./markerHelper\");\n\nvar LineDraw = require(\"../../chart/helper/LineDraw\");\n\nvar MarkerView = require(\"./MarkerView\");\n\nvar markLineTransform = function (seriesModel, coordSys, mlModel, item) {\n var data = seriesModel.getData(); // Special type markLine like 'min', 'max', 'average'\n\n var mlType = item.type;\n\n if (!zrUtil.isArray(item) && (mlType === 'min' || mlType === 'max' || mlType === 'average' // In case\n // data: [{\n // yAxis: 10\n // }]\n || item.xAxis != null || item.yAxis != null)) {\n var valueAxis;\n var valueDataDim;\n var value;\n\n if (item.yAxis != null || item.xAxis != null) {\n valueDataDim = item.yAxis != null ? 'y' : 'x';\n valueAxis = coordSys.getAxis(valueDataDim);\n value = zrUtil.retrieve(item.yAxis, item.xAxis);\n } else {\n var axisInfo = markerHelper.getAxisInfo(item, data, coordSys, seriesModel);\n valueDataDim = axisInfo.valueDataDim;\n valueAxis = axisInfo.valueAxis;\n value = markerHelper.numCalculate(data, valueDataDim, mlType);\n }\n\n var valueIndex = valueDataDim === 'x' ? 0 : 1;\n var baseIndex = 1 - valueIndex;\n var mlFrom = zrUtil.clone(item);\n var mlTo = {};\n mlFrom.type = null;\n mlFrom.coord = [];\n mlTo.coord = [];\n mlFrom.coord[baseIndex] = -Infinity;\n mlTo.coord[baseIndex] = Infinity;\n var precision = mlModel.get('precision');\n\n if (precision >= 0 && typeof value === 'number') {\n value = +value.toFixed(Math.min(precision, 20));\n }\n\n mlFrom.coord[valueIndex] = mlTo.coord[valueIndex] = value;\n item = [mlFrom, mlTo, {\n // Extra option for tooltip and label\n type: mlType,\n valueIndex: item.valueIndex,\n // Force to use the value of calculated value.\n value: value\n }];\n }\n\n item = [markerHelper.dataTransform(seriesModel, item[0]), markerHelper.dataTransform(seriesModel, item[1]), zrUtil.extend({}, item[2])]; // Avoid line data type is extended by from(to) data type\n\n item[2].type = item[2].type || ''; // Merge from option and to option into line option\n\n zrUtil.merge(item[2], item[0]);\n zrUtil.merge(item[2], item[1]);\n return item;\n};\n\nfunction isInifinity(val) {\n return !isNaN(val) && !isFinite(val);\n} // If a markLine has one dim\n\n\nfunction ifMarkLineHasOnlyDim(dimIndex, fromCoord, toCoord, coordSys) {\n var otherDimIndex = 1 - dimIndex;\n var dimName = coordSys.dimensions[dimIndex];\n return isInifinity(fromCoord[otherDimIndex]) && isInifinity(toCoord[otherDimIndex]) && fromCoord[dimIndex] === toCoord[dimIndex] && coordSys.getAxis(dimName).containData(fromCoord[dimIndex]);\n}\n\nfunction markLineFilter(coordSys, item) {\n if (coordSys.type === 'cartesian2d') {\n var fromCoord = item[0].coord;\n var toCoord = item[1].coord; // In case\n // {\n // markLine: {\n // data: [{ yAxis: 2 }]\n // }\n // }\n\n if (fromCoord && toCoord && (ifMarkLineHasOnlyDim(1, fromCoord, toCoord, coordSys) || ifMarkLineHasOnlyDim(0, fromCoord, toCoord, coordSys))) {\n return true;\n }\n }\n\n return markerHelper.dataFilter(coordSys, item[0]) && markerHelper.dataFilter(coordSys, item[1]);\n}\n\nfunction updateSingleMarkerEndLayout(data, idx, isFrom, seriesModel, api) {\n var coordSys = seriesModel.coordinateSystem;\n var itemModel = data.getItemModel(idx);\n var point;\n var xPx = numberUtil.parsePercent(itemModel.get('x'), api.getWidth());\n var yPx = numberUtil.parsePercent(itemModel.get('y'), api.getHeight());\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n point = [xPx, yPx];\n } else {\n // Chart like bar may have there own marker positioning logic\n if (seriesModel.getMarkerPosition) {\n // Use the getMarkerPoisition\n point = seriesModel.getMarkerPosition(data.getValues(data.dimensions, idx));\n } else {\n var dims = coordSys.dimensions;\n var x = data.get(dims[0], idx);\n var y = data.get(dims[1], idx);\n point = coordSys.dataToPoint([x, y]);\n } // Expand line to the edge of grid if value on one axis is Inifnity\n // In case\n // markLine: {\n // data: [{\n // yAxis: 2\n // // or\n // type: 'average'\n // }]\n // }\n\n\n if (coordSys.type === 'cartesian2d') {\n var xAxis = coordSys.getAxis('x');\n var yAxis = coordSys.getAxis('y');\n var dims = coordSys.dimensions;\n\n if (isInifinity(data.get(dims[0], idx))) {\n point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[isFrom ? 0 : 1]);\n } else if (isInifinity(data.get(dims[1], idx))) {\n point[1] = yAxis.toGlobalCoord(yAxis.getExtent()[isFrom ? 0 : 1]);\n }\n } // Use x, y if has any\n\n\n if (!isNaN(xPx)) {\n point[0] = xPx;\n }\n\n if (!isNaN(yPx)) {\n point[1] = yPx;\n }\n }\n\n data.setItemLayout(idx, point);\n}\n\nvar _default = MarkerView.extend({\n type: 'markLine',\n updateLayout: function (markLineModel, ecModel, api) {\n ecModel.eachSeries(function (seriesModel) {\n var mlModel = seriesModel.markLineModel;\n\n if (mlModel) {\n var mlData = mlModel.getData();\n var fromData = mlModel.__from;\n var toData = mlModel.__to; // Update visual and layout of from symbol and to symbol\n\n fromData.each(function (idx) {\n updateSingleMarkerEndLayout(fromData, idx, true, seriesModel, api);\n updateSingleMarkerEndLayout(toData, idx, false, seriesModel, api);\n }); // Update layout of line\n\n mlData.each(function (idx) {\n mlData.setItemLayout(idx, [fromData.getItemLayout(idx), toData.getItemLayout(idx)]);\n });\n this.markerGroupMap.get(seriesModel.id).updateLayout();\n }\n }, this);\n },\n renderSeries: function (seriesModel, mlModel, ecModel, api) {\n var coordSys = seriesModel.coordinateSystem;\n var seriesId = seriesModel.id;\n var seriesData = seriesModel.getData();\n var lineDrawMap = this.markerGroupMap;\n var lineDraw = lineDrawMap.get(seriesId) || lineDrawMap.set(seriesId, new LineDraw());\n this.group.add(lineDraw.group);\n var mlData = createList(coordSys, seriesModel, mlModel);\n var fromData = mlData.from;\n var toData = mlData.to;\n var lineData = mlData.line;\n mlModel.__from = fromData;\n mlModel.__to = toData; // Line data for tooltip and formatter\n\n mlModel.setData(lineData);\n var symbolType = mlModel.get('symbol');\n var symbolSize = mlModel.get('symbolSize');\n\n if (!zrUtil.isArray(symbolType)) {\n symbolType = [symbolType, symbolType];\n }\n\n if (typeof symbolSize === 'number') {\n symbolSize = [symbolSize, symbolSize];\n } // Update visual and layout of from symbol and to symbol\n\n\n mlData.from.each(function (idx) {\n updateDataVisualAndLayout(fromData, idx, true);\n updateDataVisualAndLayout(toData, idx, false);\n }); // Update visual and layout of line\n\n lineData.each(function (idx) {\n var lineColor = lineData.getItemModel(idx).get('lineStyle.normal.color');\n lineData.setItemVisual(idx, {\n color: lineColor || fromData.getItemVisual(idx, 'color')\n });\n lineData.setItemLayout(idx, [fromData.getItemLayout(idx), toData.getItemLayout(idx)]);\n lineData.setItemVisual(idx, {\n 'fromSymbolSize': fromData.getItemVisual(idx, 'symbolSize'),\n 'fromSymbol': fromData.getItemVisual(idx, 'symbol'),\n 'toSymbolSize': toData.getItemVisual(idx, 'symbolSize'),\n 'toSymbol': toData.getItemVisual(idx, 'symbol')\n });\n });\n lineDraw.updateData(lineData); // Set host model for tooltip\n // FIXME\n\n mlData.line.eachItemGraphicEl(function (el, idx) {\n el.traverse(function (child) {\n child.dataModel = mlModel;\n });\n });\n\n function updateDataVisualAndLayout(data, idx, isFrom) {\n var itemModel = data.getItemModel(idx);\n updateSingleMarkerEndLayout(data, idx, isFrom, seriesModel, api);\n data.setItemVisual(idx, {\n symbolSize: itemModel.get('symbolSize') || symbolSize[isFrom ? 0 : 1],\n symbol: itemModel.get('symbol', true) || symbolType[isFrom ? 0 : 1],\n color: itemModel.get('itemStyle.normal.color') || seriesData.getVisual('color')\n });\n }\n\n lineDraw.__keep = true;\n lineDraw.group.silent = mlModel.get('silent') || seriesModel.get('silent');\n }\n});\n/**\n * @inner\n * @param {module:echarts/coord/*} coordSys\n * @param {module:echarts/model/Series} seriesModel\n * @param {module:echarts/model/Model} mpModel\n */\n\n\nfunction createList(coordSys, seriesModel, mlModel) {\n var coordDimsInfos;\n\n if (coordSys) {\n coordDimsInfos = zrUtil.map(coordSys && coordSys.dimensions, function (coordDim) {\n var info = seriesModel.getData().getDimensionInfo(seriesModel.coordDimToDataDim(coordDim)[0]) || {}; // In map series data don't have lng and lat dimension. Fallback to same with coordSys\n\n info.name = coordDim;\n return info;\n });\n } else {\n coordDimsInfos = [{\n name: 'value',\n type: 'float'\n }];\n }\n\n var fromData = new List(coordDimsInfos, mlModel);\n var toData = new List(coordDimsInfos, mlModel); // No dimensions\n\n var lineData = new List([], mlModel);\n var optData = zrUtil.map(mlModel.get('data'), zrUtil.curry(markLineTransform, seriesModel, coordSys, mlModel));\n\n if (coordSys) {\n optData = zrUtil.filter(optData, zrUtil.curry(markLineFilter, coordSys));\n }\n\n var dimValueGetter = coordSys ? markerHelper.dimValueGetter : function (item) {\n return item.value;\n };\n fromData.initData(zrUtil.map(optData, function (item) {\n return item[0];\n }), null, dimValueGetter);\n toData.initData(zrUtil.map(optData, function (item) {\n return item[1];\n }), null, dimValueGetter);\n lineData.initData(zrUtil.map(optData, function (item) {\n return item[2];\n }));\n lineData.hasItemOption = true;\n return {\n from: fromData,\n to: toData,\n line: lineData\n };\n}\n\nmodule.exports = _default;","var util = require(\"../core/util\");\n\nvar _event = require(\"../core/event\");\n\nvar Dispatcher = _event.Dispatcher;\n\nvar requestAnimationFrame = require(\"./requestAnimationFrame\");\n\nvar Animator = require(\"./Animator\");\n\n/**\n * 动画主类, 调度和管理所有动画控制器\n *\n * @module zrender/animation/Animation\n * @author pissang(https://github.com/pissang)\n */\n// TODO Additive animation\n// http://iosoteric.com/additive-animations-animatewithduration-in-ios-8/\n// https://developer.apple.com/videos/wwdc2014/#236\n\n/**\n * @typedef {Object} IZRenderStage\n * @property {Function} update\n */\n\n/**\n * @alias module:zrender/animation/Animation\n * @constructor\n * @param {Object} [options]\n * @param {Function} [options.onframe]\n * @param {IZRenderStage} [options.stage]\n * @example\n * var animation = new Animation();\n * var obj = {\n * x: 100,\n * y: 100\n * };\n * animation.animate(node.position)\n * .when(1000, {\n * x: 500,\n * y: 500\n * })\n * .when(2000, {\n * x: 100,\n * y: 100\n * })\n * .start('spline');\n */\nvar Animation = function (options) {\n options = options || {};\n this.stage = options.stage || {};\n\n this.onframe = options.onframe || function () {}; // private properties\n\n\n this._clips = [];\n this._running = false;\n this._time;\n this._pausedTime;\n this._pauseStart;\n this._paused = false;\n Dispatcher.call(this);\n};\n\nAnimation.prototype = {\n constructor: Animation,\n\n /**\n * 添加 clip\n * @param {module:zrender/animation/Clip} clip\n */\n addClip: function (clip) {\n this._clips.push(clip);\n },\n\n /**\n * 添加 animator\n * @param {module:zrender/animation/Animator} animator\n */\n addAnimator: function (animator) {\n animator.animation = this;\n var clips = animator.getClips();\n\n for (var i = 0; i < clips.length; i++) {\n this.addClip(clips[i]);\n }\n },\n\n /**\n * 删除动画片段\n * @param {module:zrender/animation/Clip} clip\n */\n removeClip: function (clip) {\n var idx = util.indexOf(this._clips, clip);\n\n if (idx >= 0) {\n this._clips.splice(idx, 1);\n }\n },\n\n /**\n * 删除动画片段\n * @param {module:zrender/animation/Animator} animator\n */\n removeAnimator: function (animator) {\n var clips = animator.getClips();\n\n for (var i = 0; i < clips.length; i++) {\n this.removeClip(clips[i]);\n }\n\n animator.animation = null;\n },\n _update: function () {\n var time = new Date().getTime() - this._pausedTime;\n\n var delta = time - this._time;\n var clips = this._clips;\n var len = clips.length;\n var deferredEvents = [];\n var deferredClips = [];\n\n for (var i = 0; i < len; i++) {\n var clip = clips[i];\n var e = clip.step(time, delta); // Throw out the events need to be called after\n // stage.update, like destroy\n\n if (e) {\n deferredEvents.push(e);\n deferredClips.push(clip);\n }\n } // Remove the finished clip\n\n\n for (var i = 0; i < len;) {\n if (clips[i]._needsRemove) {\n clips[i] = clips[len - 1];\n clips.pop();\n len--;\n } else {\n i++;\n }\n }\n\n len = deferredEvents.length;\n\n for (var i = 0; i < len; i++) {\n deferredClips[i].fire(deferredEvents[i]);\n }\n\n this._time = time;\n this.onframe(delta);\n this.trigger('frame', delta);\n\n if (this.stage.update) {\n this.stage.update();\n }\n },\n _startLoop: function () {\n var self = this;\n this._running = true;\n\n function step() {\n if (self._running) {\n requestAnimationFrame(step);\n !self._paused && self._update();\n }\n }\n\n requestAnimationFrame(step);\n },\n\n /**\n * 开始运行动画\n */\n start: function () {\n this._time = new Date().getTime();\n this._pausedTime = 0;\n\n this._startLoop();\n },\n\n /**\n * 停止运行动画\n */\n stop: function () {\n this._running = false;\n },\n\n /**\n * Pause\n */\n pause: function () {\n if (!this._paused) {\n this._pauseStart = new Date().getTime();\n this._paused = true;\n }\n },\n\n /**\n * Resume\n */\n resume: function () {\n if (this._paused) {\n this._pausedTime += new Date().getTime() - this._pauseStart;\n this._paused = false;\n }\n },\n\n /**\n * 清除所有动画片段\n */\n clear: function () {\n this._clips = [];\n },\n\n /**\n * 对一个目标创建一个animator对象,可以指定目标中的属性使用动画\n * @param {Object} target\n * @param {Object} options\n * @param {boolean} [options.loop=false] 是否循环播放动画\n * @param {Function} [options.getter=null]\n * 如果指定getter函数,会通过getter函数取属性值\n * @param {Function} [options.setter=null]\n * 如果指定setter函数,会通过setter函数设置属性值\n * @return {module:zrender/animation/Animation~Animator}\n */\n // TODO Gap\n animate: function (target, options) {\n options = options || {};\n var animator = new Animator(target, options.loop, options.getter, options.setter);\n this.addAnimator(animator);\n return animator;\n }\n};\nutil.mixin(Animation, Dispatcher);\nvar _default = Animation;\nmodule.exports = _default;","var echarts = require(\"../echarts\");\n\nrequire(\"./sankey/SankeySeries\");\n\nrequire(\"./sankey/SankeyView\");\n\nvar sankeyLayout = require(\"./sankey/sankeyLayout\");\n\nvar sankeyVisual = require(\"./sankey/sankeyVisual\");\n\necharts.registerLayout(sankeyLayout);\necharts.registerVisual(sankeyVisual);","var _echarts = require(\"./lib/echarts\");\n\n(function () {\n for (var key in _echarts) {\n if (_echarts == null || !_echarts.hasOwnProperty(key) || key === 'default' || key === '__esModule') return;\n exports[key] = _echarts[key];\n }\n})();\n\nvar _export = require(\"./lib/export\");\n\n(function () {\n for (var key in _export) {\n if (_export == null || !_export.hasOwnProperty(key) || key === 'default' || key === '__esModule') return;\n exports[key] = _export[key];\n }\n})();\n\nrequire(\"./lib/chart/line\");\n\nrequire(\"./lib/chart/bar\");\n\nrequire(\"./lib/chart/pie\");\n\nrequire(\"./lib/chart/scatter\");\n\nrequire(\"./lib/chart/radar\");\n\nrequire(\"./lib/chart/map\");\n\nrequire(\"./lib/chart/tree\");\n\nrequire(\"./lib/chart/treemap\");\n\nrequire(\"./lib/chart/graph\");\n\nrequire(\"./lib/chart/gauge\");\n\nrequire(\"./lib/chart/funnel\");\n\nrequire(\"./lib/chart/parallel\");\n\nrequire(\"./lib/chart/sankey\");\n\nrequire(\"./lib/chart/boxplot\");\n\nrequire(\"./lib/chart/candlestick\");\n\nrequire(\"./lib/chart/effectScatter\");\n\nrequire(\"./lib/chart/lines\");\n\nrequire(\"./lib/chart/heatmap\");\n\nrequire(\"./lib/chart/pictorialBar\");\n\nrequire(\"./lib/chart/themeRiver\");\n\nrequire(\"./lib/chart/custom\");\n\nrequire(\"./lib/component/graphic\");\n\nrequire(\"./lib/component/grid\");\n\nrequire(\"./lib/component/legendScroll\");\n\nrequire(\"./lib/component/tooltip\");\n\nrequire(\"./lib/component/axisPointer\");\n\nrequire(\"./lib/component/polar\");\n\nrequire(\"./lib/component/geo\");\n\nrequire(\"./lib/component/parallel\");\n\nrequire(\"./lib/component/singleAxis\");\n\nrequire(\"./lib/component/brush\");\n\nrequire(\"./lib/component/calendar\");\n\nrequire(\"./lib/component/title\");\n\nrequire(\"./lib/component/dataZoom\");\n\nrequire(\"./lib/component/visualMap\");\n\nrequire(\"./lib/component/markPoint\");\n\nrequire(\"./lib/component/markLine\");\n\nrequire(\"./lib/component/markArea\");\n\nrequire(\"./lib/component/timeline\");\n\nrequire(\"./lib/component/toolbox\");\n\nrequire(\"zrender/lib/vml/vml\");\n\nrequire(\"zrender/lib/svg/svg\");","var zrUtil = require(\"zrender/lib/core/util\");\n\n/**\n * Link lists and struct (graph or tree)\n */\nvar each = zrUtil.each;\nvar DATAS = '\\0__link_datas';\nvar MAIN_DATA = '\\0__link_mainData'; // Caution:\n// In most case, either list or its shallow clones (see list.cloneShallow)\n// is active in echarts process. So considering heap memory consumption,\n// we do not clone tree or graph, but share them among list and its shallow clones.\n// But in some rare case, we have to keep old list (like do animation in chart). So\n// please take care that both the old list and the new list share the same tree/graph.\n\n/**\n * @param {Object} opt\n * @param {module:echarts/data/List} opt.mainData\n * @param {Object} [opt.struct] For example, instance of Graph or Tree.\n * @param {string} [opt.structAttr] designation: list[structAttr] = struct;\n * @param {Object} [opt.datas] {dataType: data},\n * like: {node: nodeList, edge: edgeList}.\n * Should contain mainData.\n * @param {Object} [opt.datasAttr] {dataType: attr},\n * designation: struct[datasAttr[dataType]] = list;\n */\n\nfunction linkList(opt) {\n var mainData = opt.mainData;\n var datas = opt.datas;\n\n if (!datas) {\n datas = {\n main: mainData\n };\n opt.datasAttr = {\n main: 'data'\n };\n }\n\n opt.datas = opt.mainData = null;\n linkAll(mainData, datas, opt); // Porxy data original methods.\n\n each(datas, function (data) {\n each(mainData.TRANSFERABLE_METHODS, function (methodName) {\n data.wrapMethod(methodName, zrUtil.curry(transferInjection, opt));\n });\n }); // Beyond transfer, additional features should be added to `cloneShallow`.\n\n mainData.wrapMethod('cloneShallow', zrUtil.curry(cloneShallowInjection, opt)); // Only mainData trigger change, because struct.update may trigger\n // another changable methods, which may bring about dead lock.\n\n each(mainData.CHANGABLE_METHODS, function (methodName) {\n mainData.wrapMethod(methodName, zrUtil.curry(changeInjection, opt));\n }); // Make sure datas contains mainData.\n\n zrUtil.assert(datas[mainData.dataType] === mainData);\n}\n\nfunction transferInjection(opt, res) {\n if (isMainData(this)) {\n // Transfer datas to new main data.\n var datas = zrUtil.extend({}, this[DATAS]);\n datas[this.dataType] = res;\n linkAll(res, datas, opt);\n } else {\n // Modify the reference in main data to point newData.\n linkSingle(res, this.dataType, this[MAIN_DATA], opt);\n }\n\n return res;\n}\n\nfunction changeInjection(opt, res) {\n opt.struct && opt.struct.update(this);\n return res;\n}\n\nfunction cloneShallowInjection(opt, res) {\n // cloneShallow, which brings about some fragilities, may be inappropriate\n // to be exposed as an API. So for implementation simplicity we can make\n // the restriction that cloneShallow of not-mainData should not be invoked\n // outside, but only be invoked here.\n each(res[DATAS], function (data, dataType) {\n data !== res && linkSingle(data.cloneShallow(), dataType, res, opt);\n });\n return res;\n}\n/**\n * Supplement method to List.\n *\n * @public\n * @param {string} [dataType] If not specified, return mainData.\n * @return {module:echarts/data/List}\n */\n\n\nfunction getLinkedData(dataType) {\n var mainData = this[MAIN_DATA];\n return dataType == null || mainData == null ? mainData : mainData[DATAS][dataType];\n}\n\nfunction isMainData(data) {\n return data[MAIN_DATA] === data;\n}\n\nfunction linkAll(mainData, datas, opt) {\n mainData[DATAS] = {};\n each(datas, function (data, dataType) {\n linkSingle(data, dataType, mainData, opt);\n });\n}\n\nfunction linkSingle(data, dataType, mainData, opt) {\n mainData[DATAS][dataType] = data;\n data[MAIN_DATA] = mainData;\n data.dataType = dataType;\n\n if (opt.struct) {\n data[opt.structAttr] = opt.struct;\n opt.struct[opt.datasAttr[dataType]] = data;\n } // Supplement method.\n\n\n data.getLinkedData = getLinkedData;\n}\n\nvar _default = linkList;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar Region = require(\"../Region\");\n\n// Fix for 南海诸岛\nvar geoCoord = [126, 25];\nvar points = [[[0, 3.5], [7, 11.2], [15, 11.9], [30, 7], [42, 0.7], [52, 0.7], [56, 7.7], [59, 0.7], [64, 0.7], [64, 0], [5, 0], [0, 3.5]], [[13, 16.1], [19, 14.7], [16, 21.7], [11, 23.1], [13, 16.1]], [[12, 32.2], [14, 38.5], [15, 38.5], [13, 32.2], [12, 32.2]], [[16, 47.6], [12, 53.2], [13, 53.2], [18, 47.6], [16, 47.6]], [[6, 64.4], [8, 70], [9, 70], [8, 64.4], [6, 64.4]], [[23, 82.6], [29, 79.8], [30, 79.8], [25, 82.6], [23, 82.6]], [[37, 70.7], [43, 62.3], [44, 62.3], [39, 70.7], [37, 70.7]], [[48, 51.1], [51, 45.5], [53, 45.5], [50, 51.1], [48, 51.1]], [[51, 35], [51, 28.7], [53, 28.7], [53, 35], [51, 35]], [[52, 22.4], [55, 17.5], [56, 17.5], [53, 22.4], [52, 22.4]], [[58, 12.6], [62, 7], [63, 7], [60, 12.6], [58, 12.6]], [[0, 3.5], [0, 93.1], [64, 93.1], [64, 0], [63, 0], [63, 92.4], [1, 92.4], [1, 3.5], [0, 3.5]]];\n\nfor (var i = 0; i < points.length; i++) {\n for (var k = 0; k < points[i].length; k++) {\n points[i][k][0] /= 10.5;\n points[i][k][1] /= -10.5 / 0.75;\n points[i][k][0] += geoCoord[0];\n points[i][k][1] += geoCoord[1];\n }\n}\n\nfunction _default(geo) {\n if (geo.map === 'china') {\n geo.regions.push(new Region('南海诸岛', zrUtil.map(points, function (exterior) {\n return {\n type: 'polygon',\n exterior: exterior\n };\n }), geoCoord));\n }\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar DataZoomView = require(\"./DataZoomView\");\n\nvar sliderMove = require(\"../helper/sliderMove\");\n\nvar roams = require(\"./roams\");\n\nvar bind = zrUtil.bind;\nvar InsideZoomView = DataZoomView.extend({\n type: 'dataZoom.inside',\n\n /**\n * @override\n */\n init: function (ecModel, api) {\n /**\n * 'throttle' is used in this.dispatchAction, so we save range\n * to avoid missing some 'pan' info.\n * @private\n * @type {Array.}\n */\n this._range;\n },\n\n /**\n * @override\n */\n render: function (dataZoomModel, ecModel, api, payload) {\n InsideZoomView.superApply(this, 'render', arguments); // Notice: origin this._range should be maintained, and should not be re-fetched\n // from dataZoomModel when payload.type is 'dataZoom', otherwise 'pan' or 'zoom'\n // info will be missed because of 'throttle' of this.dispatchAction.\n\n if (roams.shouldRecordRange(payload, dataZoomModel.id)) {\n this._range = dataZoomModel.getPercentRange();\n } // Reset controllers.\n\n\n zrUtil.each(this.getTargetCoordInfo(), function (coordInfoList, coordSysName) {\n var allCoordIds = zrUtil.map(coordInfoList, function (coordInfo) {\n return roams.generateCoordId(coordInfo.model);\n });\n zrUtil.each(coordInfoList, function (coordInfo) {\n var coordModel = coordInfo.model;\n var dataZoomOption = dataZoomModel.option;\n roams.register(api, {\n coordId: roams.generateCoordId(coordModel),\n allCoordIds: allCoordIds,\n containsPoint: function (e, x, y) {\n return coordModel.coordinateSystem.containPoint([x, y]);\n },\n dataZoomId: dataZoomModel.id,\n throttleRate: dataZoomModel.get('throttle', true),\n panGetRange: bind(this._onPan, this, coordInfo, coordSysName),\n zoomGetRange: bind(this._onZoom, this, coordInfo, coordSysName),\n zoomLock: dataZoomOption.zoomLock,\n disabled: dataZoomOption.disabled,\n roamControllerOpt: {\n zoomOnMouseWheel: dataZoomOption.zoomOnMouseWheel,\n moveOnMouseMove: dataZoomOption.moveOnMouseMove,\n preventDefaultMouseMove: dataZoomOption.preventDefaultMouseMove\n }\n });\n }, this);\n }, this);\n },\n\n /**\n * @override\n */\n dispose: function () {\n roams.unregister(this.api, this.dataZoomModel.id);\n InsideZoomView.superApply(this, 'dispose', arguments);\n this._range = null;\n },\n\n /**\n * @private\n */\n _onPan: function (coordInfo, coordSysName, controller, dx, dy, oldX, oldY, newX, newY) {\n var range = this._range.slice(); // Calculate transform by the first axis.\n\n\n var axisModel = coordInfo.axisModels[0];\n\n if (!axisModel) {\n return;\n }\n\n var directionInfo = getDirectionInfo[coordSysName]([oldX, oldY], [newX, newY], axisModel, controller, coordInfo);\n var percentDelta = directionInfo.signal * (range[1] - range[0]) * directionInfo.pixel / directionInfo.pixelLength;\n sliderMove(percentDelta, range, [0, 100], 'all');\n return this._range = range;\n },\n\n /**\n * @private\n */\n _onZoom: function (coordInfo, coordSysName, controller, scale, mouseX, mouseY) {\n var range = this._range.slice(); // Calculate transform by the first axis.\n\n\n var axisModel = coordInfo.axisModels[0];\n\n if (!axisModel) {\n return;\n }\n\n var directionInfo = getDirectionInfo[coordSysName](null, [mouseX, mouseY], axisModel, controller, coordInfo);\n var percentPoint = (directionInfo.signal > 0 ? directionInfo.pixelStart + directionInfo.pixelLength - directionInfo.pixel : directionInfo.pixel - directionInfo.pixelStart) / directionInfo.pixelLength * (range[1] - range[0]) + range[0];\n scale = Math.max(1 / scale, 0);\n range[0] = (range[0] - percentPoint) * scale + percentPoint;\n range[1] = (range[1] - percentPoint) * scale + percentPoint; // Restrict range.\n\n var minMaxSpan = this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();\n sliderMove(0, range, [0, 100], 0, minMaxSpan.minSpan, minMaxSpan.maxSpan);\n return this._range = range;\n }\n});\nvar getDirectionInfo = {\n grid: function (oldPoint, newPoint, axisModel, controller, coordInfo) {\n var axis = axisModel.axis;\n var ret = {};\n var rect = coordInfo.model.coordinateSystem.getRect();\n oldPoint = oldPoint || [0, 0];\n\n if (axis.dim === 'x') {\n ret.pixel = newPoint[0] - oldPoint[0];\n ret.pixelLength = rect.width;\n ret.pixelStart = rect.x;\n ret.signal = axis.inverse ? 1 : -1;\n } else {\n // axis.dim === 'y'\n ret.pixel = newPoint[1] - oldPoint[1];\n ret.pixelLength = rect.height;\n ret.pixelStart = rect.y;\n ret.signal = axis.inverse ? -1 : 1;\n }\n\n return ret;\n },\n polar: function (oldPoint, newPoint, axisModel, controller, coordInfo) {\n var axis = axisModel.axis;\n var ret = {};\n var polar = coordInfo.model.coordinateSystem;\n var radiusExtent = polar.getRadiusAxis().getExtent();\n var angleExtent = polar.getAngleAxis().getExtent();\n oldPoint = oldPoint ? polar.pointToCoord(oldPoint) : [0, 0];\n newPoint = polar.pointToCoord(newPoint);\n\n if (axisModel.mainType === 'radiusAxis') {\n ret.pixel = newPoint[0] - oldPoint[0]; // ret.pixelLength = Math.abs(radiusExtent[1] - radiusExtent[0]);\n // ret.pixelStart = Math.min(radiusExtent[0], radiusExtent[1]);\n\n ret.pixelLength = radiusExtent[1] - radiusExtent[0];\n ret.pixelStart = radiusExtent[0];\n ret.signal = axis.inverse ? 1 : -1;\n } else {\n // 'angleAxis'\n ret.pixel = newPoint[1] - oldPoint[1]; // ret.pixelLength = Math.abs(angleExtent[1] - angleExtent[0]);\n // ret.pixelStart = Math.min(angleExtent[0], angleExtent[1]);\n\n ret.pixelLength = angleExtent[1] - angleExtent[0];\n ret.pixelStart = angleExtent[0];\n ret.signal = axis.inverse ? -1 : 1;\n }\n\n return ret;\n },\n singleAxis: function (oldPoint, newPoint, axisModel, controller, coordInfo) {\n var axis = axisModel.axis;\n var rect = coordInfo.model.coordinateSystem.getRect();\n var ret = {};\n oldPoint = oldPoint || [0, 0];\n\n if (axis.orient === 'horizontal') {\n ret.pixel = newPoint[0] - oldPoint[0];\n ret.pixelLength = rect.width;\n ret.pixelStart = rect.x;\n ret.signal = axis.inverse ? 1 : -1;\n } else {\n // 'vertical'\n ret.pixel = newPoint[1] - oldPoint[1];\n ret.pixelLength = rect.height;\n ret.pixelStart = rect.y;\n ret.signal = axis.inverse ? -1 : 1;\n }\n\n return ret;\n }\n};\nvar _default = InsideZoomView;\nmodule.exports = _default;","var _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar List = require(\"../../data/List\");\n\nvar completeDimensions = require(\"../../data/helper/completeDimensions\");\n\nvar _model = require(\"../../util/model\");\n\nvar getDataItemValue = _model.getDataItemValue;\nvar converDataValue = _model.converDataValue;\nvar isDataItemOption = _model.isDataItemOption;\n\nvar CoordinateSystem = require(\"../../CoordinateSystem\");\n\nfunction firstDataNotNull(data) {\n var i = 0;\n\n while (i < data.length && data[i] == null) {\n i++;\n }\n\n return data[i];\n}\n\nfunction ifNeedCompleteOrdinalData(data) {\n var sampleItem = firstDataNotNull(data);\n return sampleItem != null && !zrUtil.isArray(getDataItemValue(sampleItem));\n}\n/**\n * Helper function to create a list from option data\n */\n\n\nfunction createListFromArray(data, seriesModel, ecModel) {\n // If data is undefined\n data = data || [];\n var coordSysName = seriesModel.get('coordinateSystem');\n var creator = creators[coordSysName];\n var registeredCoordSys = CoordinateSystem.get(coordSysName);\n var completeDimOpt = {\n encodeDef: seriesModel.get('encode'),\n dimsDef: seriesModel.get('dimensions')\n }; // FIXME\n\n var axesInfo = creator && creator(data, seriesModel, ecModel, completeDimOpt);\n var dimensions = axesInfo && axesInfo.dimensions;\n\n if (!dimensions) {\n // Get dimensions from registered coordinate system\n dimensions = registeredCoordSys && (registeredCoordSys.getDimensionsInfo ? registeredCoordSys.getDimensionsInfo() : registeredCoordSys.dimensions.slice()) || ['x', 'y'];\n dimensions = completeDimensions(dimensions, data, completeDimOpt);\n }\n\n var categoryIndex = axesInfo ? axesInfo.categoryIndex : -1;\n var list = new List(dimensions, seriesModel);\n var nameList = createNameList(axesInfo, data);\n var categories = {};\n var dimValueGetter = categoryIndex >= 0 && ifNeedCompleteOrdinalData(data) ? function (itemOpt, dimName, dataIndex, dimIndex) {\n // If any dataItem is like { value: 10 }\n if (isDataItemOption(itemOpt)) {\n list.hasItemOption = true;\n } // Use dataIndex as ordinal value in categoryAxis\n\n\n return dimIndex === categoryIndex ? dataIndex : converDataValue(getDataItemValue(itemOpt), dimensions[dimIndex]);\n } : function (itemOpt, dimName, dataIndex, dimIndex) {\n var value = getDataItemValue(itemOpt);\n var val = converDataValue(value && value[dimIndex], dimensions[dimIndex]); // If any dataItem is like { value: 10 }\n\n if (isDataItemOption(itemOpt)) {\n list.hasItemOption = true;\n }\n\n var categoryAxesModels = axesInfo && axesInfo.categoryAxesModels;\n\n if (categoryAxesModels && categoryAxesModels[dimName]) {\n // If given value is a category string\n if (typeof val === 'string') {\n // Lazy get categories\n categories[dimName] = categories[dimName] || categoryAxesModels[dimName].getCategories();\n val = zrUtil.indexOf(categories[dimName], val);\n\n if (val < 0 && !isNaN(val)) {\n // In case some one write '1', '2' istead of 1, 2\n val = +val;\n }\n }\n }\n\n return val;\n };\n list.hasItemOption = false;\n list.initData(data, nameList, dimValueGetter);\n return list;\n}\n\nfunction isStackable(axisType) {\n return axisType !== 'category' && axisType !== 'time';\n}\n\nfunction getDimTypeByAxis(axisType) {\n return axisType === 'category' ? 'ordinal' : axisType === 'time' ? 'time' : 'float';\n}\n/**\n * Creaters for each coord system.\n */\n\n\nvar creators = {\n cartesian2d: function (data, seriesModel, ecModel, completeDimOpt) {\n var axesModels = zrUtil.map(['xAxis', 'yAxis'], function (name) {\n return ecModel.queryComponents({\n mainType: name,\n index: seriesModel.get(name + 'Index'),\n id: seriesModel.get(name + 'Id')\n })[0];\n });\n var xAxisModel = axesModels[0];\n var yAxisModel = axesModels[1];\n var xAxisType = xAxisModel.get('type');\n var yAxisType = yAxisModel.get('type');\n var dimensions = [{\n name: 'x',\n type: getDimTypeByAxis(xAxisType),\n stackable: isStackable(xAxisType)\n }, {\n name: 'y',\n // If two category axes\n type: getDimTypeByAxis(yAxisType),\n stackable: isStackable(yAxisType)\n }];\n var isXAxisCateogry = xAxisType === 'category';\n var isYAxisCategory = yAxisType === 'category';\n dimensions = completeDimensions(dimensions, data, completeDimOpt);\n var categoryAxesModels = {};\n\n if (isXAxisCateogry) {\n categoryAxesModels.x = xAxisModel;\n }\n\n if (isYAxisCategory) {\n categoryAxesModels.y = yAxisModel;\n }\n\n return {\n dimensions: dimensions,\n categoryIndex: isXAxisCateogry ? 0 : isYAxisCategory ? 1 : -1,\n categoryAxesModels: categoryAxesModels\n };\n },\n singleAxis: function (data, seriesModel, ecModel, completeDimOpt) {\n var singleAxisModel = ecModel.queryComponents({\n mainType: 'singleAxis',\n index: seriesModel.get('singleAxisIndex'),\n id: seriesModel.get('singleAxisId')\n })[0];\n var singleAxisType = singleAxisModel.get('type');\n var isCategory = singleAxisType === 'category';\n var dimensions = [{\n name: 'single',\n type: getDimTypeByAxis(singleAxisType),\n stackable: isStackable(singleAxisType)\n }];\n dimensions = completeDimensions(dimensions, data, completeDimOpt);\n var categoryAxesModels = {};\n\n if (isCategory) {\n categoryAxesModels.single = singleAxisModel;\n }\n\n return {\n dimensions: dimensions,\n categoryIndex: isCategory ? 0 : -1,\n categoryAxesModels: categoryAxesModels\n };\n },\n polar: function (data, seriesModel, ecModel, completeDimOpt) {\n var polarModel = ecModel.queryComponents({\n mainType: 'polar',\n index: seriesModel.get('polarIndex'),\n id: seriesModel.get('polarId')\n })[0];\n var angleAxisModel = polarModel.findAxisModel('angleAxis');\n var radiusAxisModel = polarModel.findAxisModel('radiusAxis');\n var radiusAxisType = radiusAxisModel.get('type');\n var angleAxisType = angleAxisModel.get('type');\n var dimensions = [{\n name: 'radius',\n type: getDimTypeByAxis(radiusAxisType),\n stackable: isStackable(radiusAxisType)\n }, {\n name: 'angle',\n type: getDimTypeByAxis(angleAxisType),\n stackable: isStackable(angleAxisType)\n }];\n var isAngleAxisCateogry = angleAxisType === 'category';\n var isRadiusAxisCateogry = radiusAxisType === 'category';\n dimensions = completeDimensions(dimensions, data, completeDimOpt);\n var categoryAxesModels = {};\n\n if (isRadiusAxisCateogry) {\n categoryAxesModels.radius = radiusAxisModel;\n }\n\n if (isAngleAxisCateogry) {\n categoryAxesModels.angle = angleAxisModel;\n }\n\n return {\n dimensions: dimensions,\n categoryIndex: isAngleAxisCateogry ? 1 : isRadiusAxisCateogry ? 0 : -1,\n categoryAxesModels: categoryAxesModels\n };\n },\n geo: function (data, seriesModel, ecModel, completeDimOpt) {\n // TODO Region\n // 多个散点图系列在同一个地区的时候\n return {\n dimensions: completeDimensions([{\n name: 'lng'\n }, {\n name: 'lat'\n }], data, completeDimOpt)\n };\n }\n};\n\nfunction createNameList(result, data) {\n var nameList = [];\n var categoryDim = result && result.dimensions[result.categoryIndex];\n var categoryAxisModel;\n\n if (categoryDim) {\n categoryAxisModel = result.categoryAxesModels[categoryDim.name];\n }\n\n if (categoryAxisModel) {\n // FIXME Two category axis\n var categories = categoryAxisModel.getCategories();\n\n if (categories) {\n var dataLen = data.length; // Ordered data is given explicitly like\n // [[3, 0.2], [1, 0.3], [2, 0.15]]\n // or given scatter data,\n // pick the category\n\n if (zrUtil.isArray(data[0]) && data[0].length > 1) {\n nameList = [];\n\n for (var i = 0; i < dataLen; i++) {\n nameList[i] = categories[data[i][result.categoryIndex || 0]];\n }\n } else {\n nameList = categories.slice(0);\n }\n }\n }\n\n return nameList;\n}\n\nvar _default = createListFromArray;\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar _symbol = require(\"../../util/symbol\");\n\nvar createSymbol = _symbol.createSymbol;\n\nvar _number = require(\"../../util/number\");\n\nvar parsePercent = _number.parsePercent;\nvar isNumeric = _number.isNumeric;\n\nvar _helper = require(\"./helper\");\n\nvar setLabel = _helper.setLabel;\nvar BAR_BORDER_WIDTH_QUERY = ['itemStyle', 'normal', 'borderWidth']; // index: +isHorizontal\n\nvar LAYOUT_ATTRS = [{\n xy: 'x',\n wh: 'width',\n index: 0,\n posDesc: ['left', 'right']\n}, {\n xy: 'y',\n wh: 'height',\n index: 1,\n posDesc: ['top', 'bottom']\n}];\nvar pathForLineWidth = new graphic.Circle();\nvar BarView = echarts.extendChartView({\n type: 'pictorialBar',\n render: function (seriesModel, ecModel, api) {\n var group = this.group;\n var data = seriesModel.getData();\n var oldData = this._data;\n var cartesian = seriesModel.coordinateSystem;\n var baseAxis = cartesian.getBaseAxis();\n var isHorizontal = !!baseAxis.isHorizontal();\n var coordSysRect = cartesian.grid.getRect();\n var opt = {\n ecSize: {\n width: api.getWidth(),\n height: api.getHeight()\n },\n seriesModel: seriesModel,\n coordSys: cartesian,\n coordSysExtent: [[coordSysRect.x, coordSysRect.x + coordSysRect.width], [coordSysRect.y, coordSysRect.y + coordSysRect.height]],\n isHorizontal: isHorizontal,\n valueDim: LAYOUT_ATTRS[+isHorizontal],\n categoryDim: LAYOUT_ATTRS[1 - isHorizontal]\n };\n data.diff(oldData).add(function (dataIndex) {\n if (!data.hasValue(dataIndex)) {\n return;\n }\n\n var itemModel = getItemModel(data, dataIndex);\n var symbolMeta = getSymbolMeta(data, dataIndex, itemModel, opt);\n var bar = createBar(data, opt, symbolMeta);\n data.setItemGraphicEl(dataIndex, bar);\n group.add(bar);\n updateCommon(bar, opt, symbolMeta);\n }).update(function (newIndex, oldIndex) {\n var bar = oldData.getItemGraphicEl(oldIndex);\n\n if (!data.hasValue(newIndex)) {\n group.remove(bar);\n return;\n }\n\n var itemModel = getItemModel(data, newIndex);\n var symbolMeta = getSymbolMeta(data, newIndex, itemModel, opt);\n var pictorialShapeStr = getShapeStr(data, symbolMeta);\n\n if (bar && pictorialShapeStr !== bar.__pictorialShapeStr) {\n group.remove(bar);\n data.setItemGraphicEl(newIndex, null);\n bar = null;\n }\n\n if (bar) {\n updateBar(bar, opt, symbolMeta);\n } else {\n bar = createBar(data, opt, symbolMeta, true);\n }\n\n data.setItemGraphicEl(newIndex, bar);\n bar.__pictorialSymbolMeta = symbolMeta; // Add back\n\n group.add(bar);\n updateCommon(bar, opt, symbolMeta);\n }).remove(function (dataIndex) {\n var bar = oldData.getItemGraphicEl(dataIndex);\n bar && removeBar(oldData, dataIndex, bar.__pictorialSymbolMeta.animationModel, bar);\n }).execute();\n this._data = data;\n return this.group;\n },\n dispose: zrUtil.noop,\n remove: function (ecModel, api) {\n var group = this.group;\n var data = this._data;\n\n if (ecModel.get('animation')) {\n if (data) {\n data.eachItemGraphicEl(function (bar) {\n removeBar(data, bar.dataIndex, ecModel, bar);\n });\n }\n } else {\n group.removeAll();\n }\n }\n}); // Set or calculate default value about symbol, and calculate layout info.\n\nfunction getSymbolMeta(data, dataIndex, itemModel, opt) {\n var layout = data.getItemLayout(dataIndex);\n var symbolRepeat = itemModel.get('symbolRepeat');\n var symbolClip = itemModel.get('symbolClip');\n var symbolPosition = itemModel.get('symbolPosition') || 'start';\n var symbolRotate = itemModel.get('symbolRotate');\n var rotation = (symbolRotate || 0) * Math.PI / 180 || 0;\n var symbolPatternSize = itemModel.get('symbolPatternSize') || 2;\n var isAnimationEnabled = itemModel.isAnimationEnabled();\n var symbolMeta = {\n dataIndex: dataIndex,\n layout: layout,\n itemModel: itemModel,\n symbolType: data.getItemVisual(dataIndex, 'symbol') || 'circle',\n color: data.getItemVisual(dataIndex, 'color'),\n symbolClip: symbolClip,\n symbolRepeat: symbolRepeat,\n symbolRepeatDirection: itemModel.get('symbolRepeatDirection'),\n symbolPatternSize: symbolPatternSize,\n rotation: rotation,\n animationModel: isAnimationEnabled ? itemModel : null,\n hoverAnimation: isAnimationEnabled && itemModel.get('hoverAnimation'),\n z2: itemModel.getShallow('z', true) || 0\n };\n prepareBarLength(itemModel, symbolRepeat, layout, opt, symbolMeta);\n prepareSymbolSize(data, dataIndex, layout, symbolRepeat, symbolClip, symbolMeta.boundingLength, symbolMeta.pxSign, symbolPatternSize, opt, symbolMeta);\n prepareLineWidth(itemModel, symbolMeta.symbolScale, rotation, opt, symbolMeta);\n var symbolSize = symbolMeta.symbolSize;\n var symbolOffset = itemModel.get('symbolOffset');\n\n if (zrUtil.isArray(symbolOffset)) {\n symbolOffset = [parsePercent(symbolOffset[0], symbolSize[0]), parsePercent(symbolOffset[1], symbolSize[1])];\n }\n\n prepareLayoutInfo(itemModel, symbolSize, layout, symbolRepeat, symbolClip, symbolOffset, symbolPosition, symbolMeta.valueLineWidth, symbolMeta.boundingLength, symbolMeta.repeatCutLength, opt, symbolMeta);\n return symbolMeta;\n} // bar length can be negative.\n\n\nfunction prepareBarLength(itemModel, symbolRepeat, layout, opt, output) {\n var valueDim = opt.valueDim;\n var symbolBoundingData = itemModel.get('symbolBoundingData');\n var valueAxis = opt.coordSys.getOtherAxis(opt.coordSys.getBaseAxis());\n var zeroPx = valueAxis.toGlobalCoord(valueAxis.dataToCoord(0));\n var pxSignIdx = 1 - +(layout[valueDim.wh] <= 0);\n var boundingLength;\n\n if (zrUtil.isArray(symbolBoundingData)) {\n var symbolBoundingExtent = [convertToCoordOnAxis(valueAxis, symbolBoundingData[0]) - zeroPx, convertToCoordOnAxis(valueAxis, symbolBoundingData[1]) - zeroPx];\n symbolBoundingExtent[1] < symbolBoundingExtent[0] && symbolBoundingExtent.reverse();\n boundingLength = symbolBoundingExtent[pxSignIdx];\n } else if (symbolBoundingData != null) {\n boundingLength = convertToCoordOnAxis(valueAxis, symbolBoundingData) - zeroPx;\n } else if (symbolRepeat) {\n boundingLength = opt.coordSysExtent[valueDim.index][pxSignIdx] - zeroPx;\n } else {\n boundingLength = layout[valueDim.wh];\n }\n\n output.boundingLength = boundingLength;\n\n if (symbolRepeat) {\n output.repeatCutLength = layout[valueDim.wh];\n }\n\n output.pxSign = boundingLength > 0 ? 1 : boundingLength < 0 ? -1 : 0;\n}\n\nfunction convertToCoordOnAxis(axis, value) {\n return axis.toGlobalCoord(axis.dataToCoord(axis.scale.parse(value)));\n} // Support ['100%', '100%']\n\n\nfunction prepareSymbolSize(data, dataIndex, layout, symbolRepeat, symbolClip, boundingLength, pxSign, symbolPatternSize, opt, output) {\n var valueDim = opt.valueDim;\n var categoryDim = opt.categoryDim;\n var categorySize = Math.abs(layout[categoryDim.wh]);\n var symbolSize = data.getItemVisual(dataIndex, 'symbolSize');\n\n if (zrUtil.isArray(symbolSize)) {\n symbolSize = symbolSize.slice();\n } else {\n if (symbolSize == null) {\n symbolSize = '100%';\n }\n\n symbolSize = [symbolSize, symbolSize];\n } // Note: percentage symbolSize (like '100%') do not consider lineWidth, because it is\n // to complicated to calculate real percent value if considering scaled lineWidth.\n // So the actual size will bigger than layout size if lineWidth is bigger than zero,\n // which can be tolerated in pictorial chart.\n\n\n symbolSize[categoryDim.index] = parsePercent(symbolSize[categoryDim.index], categorySize);\n symbolSize[valueDim.index] = parsePercent(symbolSize[valueDim.index], symbolRepeat ? categorySize : Math.abs(boundingLength));\n output.symbolSize = symbolSize; // If x or y is less than zero, show reversed shape.\n\n var symbolScale = output.symbolScale = [symbolSize[0] / symbolPatternSize, symbolSize[1] / symbolPatternSize]; // Follow convention, 'right' and 'top' is the normal scale.\n\n symbolScale[valueDim.index] *= (opt.isHorizontal ? -1 : 1) * pxSign;\n}\n\nfunction prepareLineWidth(itemModel, symbolScale, rotation, opt, output) {\n // In symbols are drawn with scale, so do not need to care about the case that width\n // or height are too small. But symbol use strokeNoScale, where acture lineWidth should\n // be calculated.\n var valueLineWidth = itemModel.get(BAR_BORDER_WIDTH_QUERY) || 0;\n\n if (valueLineWidth) {\n pathForLineWidth.attr({\n scale: symbolScale.slice(),\n rotation: rotation\n });\n pathForLineWidth.updateTransform();\n valueLineWidth /= pathForLineWidth.getLineScale();\n valueLineWidth *= symbolScale[opt.valueDim.index];\n }\n\n output.valueLineWidth = valueLineWidth;\n}\n\nfunction prepareLayoutInfo(itemModel, symbolSize, layout, symbolRepeat, symbolClip, symbolOffset, symbolPosition, valueLineWidth, boundingLength, repeatCutLength, opt, output) {\n var categoryDim = opt.categoryDim;\n var valueDim = opt.valueDim;\n var pxSign = output.pxSign;\n var unitLength = Math.max(symbolSize[valueDim.index] + valueLineWidth, 0);\n var pathLen = unitLength; // Note: rotation will not effect the layout of symbols, because user may\n // want symbols to rotate on its center, which should not be translated\n // when rotating.\n\n if (symbolRepeat) {\n var absBoundingLength = Math.abs(boundingLength);\n var symbolMargin = zrUtil.retrieve(itemModel.get('symbolMargin'), '15%') + '';\n var hasEndGap = false;\n\n if (symbolMargin.lastIndexOf('!') === symbolMargin.length - 1) {\n hasEndGap = true;\n symbolMargin = symbolMargin.slice(0, symbolMargin.length - 1);\n }\n\n symbolMargin = parsePercent(symbolMargin, symbolSize[valueDim.index]);\n var uLenWithMargin = Math.max(unitLength + symbolMargin * 2, 0); // When symbol margin is less than 0, margin at both ends will be subtracted\n // to ensure that all of the symbols will not be overflow the given area.\n\n var endFix = hasEndGap ? 0 : symbolMargin * 2; // Both final repeatTimes and final symbolMargin area calculated based on\n // boundingLength.\n\n var repeatSpecified = isNumeric(symbolRepeat);\n var repeatTimes = repeatSpecified ? symbolRepeat : toIntTimes((absBoundingLength + endFix) / uLenWithMargin); // Adjust calculate margin, to ensure each symbol is displayed\n // entirely in the given layout area.\n\n var mDiff = absBoundingLength - repeatTimes * unitLength;\n symbolMargin = mDiff / 2 / (hasEndGap ? repeatTimes : repeatTimes - 1);\n uLenWithMargin = unitLength + symbolMargin * 2;\n endFix = hasEndGap ? 0 : symbolMargin * 2; // Update repeatTimes when not all symbol will be shown.\n\n if (!repeatSpecified && symbolRepeat !== 'fixed') {\n repeatTimes = repeatCutLength ? toIntTimes((Math.abs(repeatCutLength) + endFix) / uLenWithMargin) : 0;\n }\n\n pathLen = repeatTimes * uLenWithMargin - endFix;\n output.repeatTimes = repeatTimes;\n output.symbolMargin = symbolMargin;\n }\n\n var sizeFix = pxSign * (pathLen / 2);\n var pathPosition = output.pathPosition = [];\n pathPosition[categoryDim.index] = layout[categoryDim.wh] / 2;\n pathPosition[valueDim.index] = symbolPosition === 'start' ? sizeFix : symbolPosition === 'end' ? boundingLength - sizeFix : boundingLength / 2; // 'center'\n\n if (symbolOffset) {\n pathPosition[0] += symbolOffset[0];\n pathPosition[1] += symbolOffset[1];\n }\n\n var bundlePosition = output.bundlePosition = [];\n bundlePosition[categoryDim.index] = layout[categoryDim.xy];\n bundlePosition[valueDim.index] = layout[valueDim.xy];\n var barRectShape = output.barRectShape = zrUtil.extend({}, layout);\n barRectShape[valueDim.wh] = pxSign * Math.max(Math.abs(layout[valueDim.wh]), Math.abs(pathPosition[valueDim.index] + sizeFix));\n barRectShape[categoryDim.wh] = layout[categoryDim.wh];\n var clipShape = output.clipShape = {}; // Consider that symbol may be overflow layout rect.\n\n clipShape[categoryDim.xy] = -layout[categoryDim.xy];\n clipShape[categoryDim.wh] = opt.ecSize[categoryDim.wh];\n clipShape[valueDim.xy] = 0;\n clipShape[valueDim.wh] = layout[valueDim.wh];\n}\n\nfunction createPath(symbolMeta) {\n var symbolPatternSize = symbolMeta.symbolPatternSize;\n var path = createSymbol( // Consider texture img, make a big size.\n symbolMeta.symbolType, -symbolPatternSize / 2, -symbolPatternSize / 2, symbolPatternSize, symbolPatternSize, symbolMeta.color);\n path.attr({\n culling: true\n });\n path.type !== 'image' && path.setStyle({\n strokeNoScale: true\n });\n return path;\n}\n\nfunction createOrUpdateRepeatSymbols(bar, opt, symbolMeta, isUpdate) {\n var bundle = bar.__pictorialBundle;\n var symbolSize = symbolMeta.symbolSize;\n var valueLineWidth = symbolMeta.valueLineWidth;\n var pathPosition = symbolMeta.pathPosition;\n var valueDim = opt.valueDim;\n var repeatTimes = symbolMeta.repeatTimes || 0;\n var index = 0;\n var unit = symbolSize[opt.valueDim.index] + valueLineWidth + symbolMeta.symbolMargin * 2;\n eachPath(bar, function (path) {\n path.__pictorialAnimationIndex = index;\n path.__pictorialRepeatTimes = repeatTimes;\n\n if (index < repeatTimes) {\n updateAttr(path, null, makeTarget(index), symbolMeta, isUpdate);\n } else {\n updateAttr(path, null, {\n scale: [0, 0]\n }, symbolMeta, isUpdate, function () {\n bundle.remove(path);\n });\n }\n\n updateHoverAnimation(path, symbolMeta);\n index++;\n });\n\n for (; index < repeatTimes; index++) {\n var path = createPath(symbolMeta);\n path.__pictorialAnimationIndex = index;\n path.__pictorialRepeatTimes = repeatTimes;\n bundle.add(path);\n var target = makeTarget(index);\n updateAttr(path, {\n position: target.position,\n scale: [0, 0]\n }, {\n scale: target.scale,\n rotation: target.rotation\n }, symbolMeta, isUpdate); // FIXME\n // If all emphasis/normal through action.\n\n path.on('mouseover', onMouseOver).on('mouseout', onMouseOut);\n updateHoverAnimation(path, symbolMeta);\n }\n\n function makeTarget(index) {\n var position = pathPosition.slice(); // (start && pxSign > 0) || (end && pxSign < 0): i = repeatTimes - index\n // Otherwise: i = index;\n\n var pxSign = symbolMeta.pxSign;\n var i = index;\n\n if (symbolMeta.symbolRepeatDirection === 'start' ? pxSign > 0 : pxSign < 0) {\n i = repeatTimes - 1 - index;\n }\n\n position[valueDim.index] = unit * (i - repeatTimes / 2 + 0.5) + pathPosition[valueDim.index];\n return {\n position: position,\n scale: symbolMeta.symbolScale.slice(),\n rotation: symbolMeta.rotation\n };\n }\n\n function onMouseOver() {\n eachPath(bar, function (path) {\n path.trigger('emphasis');\n });\n }\n\n function onMouseOut() {\n eachPath(bar, function (path) {\n path.trigger('normal');\n });\n }\n}\n\nfunction createOrUpdateSingleSymbol(bar, opt, symbolMeta, isUpdate) {\n var bundle = bar.__pictorialBundle;\n var mainPath = bar.__pictorialMainPath;\n\n if (!mainPath) {\n mainPath = bar.__pictorialMainPath = createPath(symbolMeta);\n bundle.add(mainPath);\n updateAttr(mainPath, {\n position: symbolMeta.pathPosition.slice(),\n scale: [0, 0],\n rotation: symbolMeta.rotation\n }, {\n scale: symbolMeta.symbolScale.slice()\n }, symbolMeta, isUpdate);\n mainPath.on('mouseover', onMouseOver).on('mouseout', onMouseOut);\n } else {\n updateAttr(mainPath, null, {\n position: symbolMeta.pathPosition.slice(),\n scale: symbolMeta.symbolScale.slice(),\n rotation: symbolMeta.rotation\n }, symbolMeta, isUpdate);\n }\n\n updateHoverAnimation(mainPath, symbolMeta);\n\n function onMouseOver() {\n this.trigger('emphasis');\n }\n\n function onMouseOut() {\n this.trigger('normal');\n }\n} // bar rect is used for label.\n\n\nfunction createOrUpdateBarRect(bar, symbolMeta, isUpdate) {\n var rectShape = zrUtil.extend({}, symbolMeta.barRectShape);\n var barRect = bar.__pictorialBarRect;\n\n if (!barRect) {\n barRect = bar.__pictorialBarRect = new graphic.Rect({\n z2: 2,\n shape: rectShape,\n silent: true,\n style: {\n stroke: 'transparent',\n fill: 'transparent',\n lineWidth: 0\n }\n });\n bar.add(barRect);\n } else {\n updateAttr(barRect, null, {\n shape: rectShape\n }, symbolMeta, isUpdate);\n }\n}\n\nfunction createOrUpdateClip(bar, opt, symbolMeta, isUpdate) {\n // If not clip, symbol will be remove and rebuilt.\n if (symbolMeta.symbolClip) {\n var clipPath = bar.__pictorialClipPath;\n var clipShape = zrUtil.extend({}, symbolMeta.clipShape);\n var valueDim = opt.valueDim;\n var animationModel = symbolMeta.animationModel;\n var dataIndex = symbolMeta.dataIndex;\n\n if (clipPath) {\n graphic.updateProps(clipPath, {\n shape: clipShape\n }, animationModel, dataIndex);\n } else {\n clipShape[valueDim.wh] = 0;\n clipPath = new graphic.Rect({\n shape: clipShape\n });\n\n bar.__pictorialBundle.setClipPath(clipPath);\n\n bar.__pictorialClipPath = clipPath;\n var target = {};\n target[valueDim.wh] = symbolMeta.clipShape[valueDim.wh];\n graphic[isUpdate ? 'updateProps' : 'initProps'](clipPath, {\n shape: target\n }, animationModel, dataIndex);\n }\n }\n}\n\nfunction getItemModel(data, dataIndex) {\n var itemModel = data.getItemModel(dataIndex);\n itemModel.getAnimationDelayParams = getAnimationDelayParams;\n itemModel.isAnimationEnabled = isAnimationEnabled;\n return itemModel;\n}\n\nfunction getAnimationDelayParams(path) {\n // The order is the same as the z-order, see `symbolRepeatDiretion`.\n return {\n index: path.__pictorialAnimationIndex,\n count: path.__pictorialRepeatTimes\n };\n}\n\nfunction isAnimationEnabled() {\n // `animation` prop can be set on itemModel in pictorial bar chart.\n return this.parentModel.isAnimationEnabled() && !!this.getShallow('animation');\n}\n\nfunction updateHoverAnimation(path, symbolMeta) {\n path.off('emphasis').off('normal');\n var scale = symbolMeta.symbolScale.slice();\n symbolMeta.hoverAnimation && path.on('emphasis', function () {\n this.animateTo({\n scale: [scale[0] * 1.1, scale[1] * 1.1]\n }, 400, 'elasticOut');\n }).on('normal', function () {\n this.animateTo({\n scale: scale.slice()\n }, 400, 'elasticOut');\n });\n}\n\nfunction createBar(data, opt, symbolMeta, isUpdate) {\n // bar is the main element for each data.\n var bar = new graphic.Group(); // bundle is used for location and clip.\n\n var bundle = new graphic.Group();\n bar.add(bundle);\n bar.__pictorialBundle = bundle;\n bundle.attr('position', symbolMeta.bundlePosition.slice());\n\n if (symbolMeta.symbolRepeat) {\n createOrUpdateRepeatSymbols(bar, opt, symbolMeta);\n } else {\n createOrUpdateSingleSymbol(bar, opt, symbolMeta);\n }\n\n createOrUpdateBarRect(bar, symbolMeta, isUpdate);\n createOrUpdateClip(bar, opt, symbolMeta, isUpdate);\n bar.__pictorialShapeStr = getShapeStr(data, symbolMeta);\n bar.__pictorialSymbolMeta = symbolMeta;\n return bar;\n}\n\nfunction updateBar(bar, opt, symbolMeta) {\n var animationModel = symbolMeta.animationModel;\n var dataIndex = symbolMeta.dataIndex;\n var bundle = bar.__pictorialBundle;\n graphic.updateProps(bundle, {\n position: symbolMeta.bundlePosition.slice()\n }, animationModel, dataIndex);\n\n if (symbolMeta.symbolRepeat) {\n createOrUpdateRepeatSymbols(bar, opt, symbolMeta, true);\n } else {\n createOrUpdateSingleSymbol(bar, opt, symbolMeta, true);\n }\n\n createOrUpdateBarRect(bar, symbolMeta, true);\n createOrUpdateClip(bar, opt, symbolMeta, true);\n}\n\nfunction removeBar(data, dataIndex, animationModel, bar) {\n // Not show text when animating\n var labelRect = bar.__pictorialBarRect;\n labelRect && (labelRect.style.text = null);\n var pathes = [];\n eachPath(bar, function (path) {\n pathes.push(path);\n });\n bar.__pictorialMainPath && pathes.push(bar.__pictorialMainPath); // I do not find proper remove animation for clip yet.\n\n bar.__pictorialClipPath && (animationModel = null);\n zrUtil.each(pathes, function (path) {\n graphic.updateProps(path, {\n scale: [0, 0]\n }, animationModel, dataIndex, function () {\n bar.parent && bar.parent.remove(bar);\n });\n });\n data.setItemGraphicEl(dataIndex, null);\n}\n\nfunction getShapeStr(data, symbolMeta) {\n return [data.getItemVisual(symbolMeta.dataIndex, 'symbol') || 'none', !!symbolMeta.symbolRepeat, !!symbolMeta.symbolClip].join(':');\n}\n\nfunction eachPath(bar, cb, context) {\n // Do not use Group#eachChild, because it do not support remove.\n zrUtil.each(bar.__pictorialBundle.children(), function (el) {\n el !== bar.__pictorialBarRect && cb.call(context, el);\n });\n}\n\nfunction updateAttr(el, immediateAttrs, animationAttrs, symbolMeta, isUpdate, cb) {\n immediateAttrs && el.attr(immediateAttrs); // when symbolCip used, only clip path has init animation, otherwise it would be weird effect.\n\n if (symbolMeta.symbolClip && !isUpdate) {\n animationAttrs && el.attr(animationAttrs);\n } else {\n animationAttrs && graphic[isUpdate ? 'updateProps' : 'initProps'](el, animationAttrs, symbolMeta.animationModel, symbolMeta.dataIndex, cb);\n }\n}\n\nfunction updateCommon(bar, opt, symbolMeta) {\n var color = symbolMeta.color;\n var dataIndex = symbolMeta.dataIndex;\n var itemModel = symbolMeta.itemModel; // Color must be excluded.\n // Because symbol provide setColor individually to set fill and stroke\n\n var normalStyle = itemModel.getModel('itemStyle.normal').getItemStyle(['color']);\n var hoverStyle = itemModel.getModel('itemStyle.emphasis').getItemStyle();\n var cursorStyle = itemModel.getShallow('cursor');\n eachPath(bar, function (path) {\n // PENDING setColor should be before setStyle!!!\n path.setColor(color);\n path.setStyle(zrUtil.defaults({\n fill: color,\n opacity: symbolMeta.opacity\n }, normalStyle));\n graphic.setHoverStyle(path, hoverStyle);\n cursorStyle && (path.cursor = cursorStyle);\n path.z2 = symbolMeta.z2;\n });\n var barRectHoverStyle = {};\n var barPositionOutside = opt.valueDim.posDesc[+(symbolMeta.boundingLength > 0)];\n var barRect = bar.__pictorialBarRect;\n setLabel(barRect.style, barRectHoverStyle, itemModel, color, opt.seriesModel, dataIndex, barPositionOutside);\n graphic.setHoverStyle(barRect, barRectHoverStyle);\n}\n\nfunction toIntTimes(times) {\n var roundedTimes = Math.round(times); // Escapse accurate error\n\n return Math.abs(times - roundedTimes) < 1e-4 ? roundedTimes : Math.ceil(times);\n}\n\nvar _default = BarView;\nmodule.exports = _default;","var Path = require(\"../graphic/Path\");\n\nvar PathProxy = require(\"../core/PathProxy\");\n\nvar transformPath = require(\"./transformPath\");\n\n// command chars\nvar cc = ['m', 'M', 'l', 'L', 'v', 'V', 'h', 'H', 'z', 'Z', 'c', 'C', 'q', 'Q', 't', 'T', 's', 'S', 'a', 'A'];\nvar mathSqrt = Math.sqrt;\nvar mathSin = Math.sin;\nvar mathCos = Math.cos;\nvar PI = Math.PI;\n\nvar vMag = function (v) {\n return Math.sqrt(v[0] * v[0] + v[1] * v[1]);\n};\n\nvar vRatio = function (u, v) {\n return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v));\n};\n\nvar vAngle = function (u, v) {\n return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vRatio(u, v));\n};\n\nfunction processArc(x1, y1, x2, y2, fa, fs, rx, ry, psiDeg, cmd, path) {\n var psi = psiDeg * (PI / 180.0);\n var xp = mathCos(psi) * (x1 - x2) / 2.0 + mathSin(psi) * (y1 - y2) / 2.0;\n var yp = -1 * mathSin(psi) * (x1 - x2) / 2.0 + mathCos(psi) * (y1 - y2) / 2.0;\n var lambda = xp * xp / (rx * rx) + yp * yp / (ry * ry);\n\n if (lambda > 1) {\n rx *= mathSqrt(lambda);\n ry *= mathSqrt(lambda);\n }\n\n var f = (fa === fs ? -1 : 1) * mathSqrt((rx * rx * (ry * ry) - rx * rx * (yp * yp) - ry * ry * (xp * xp)) / (rx * rx * (yp * yp) + ry * ry * (xp * xp))) || 0;\n var cxp = f * rx * yp / ry;\n var cyp = f * -ry * xp / rx;\n var cx = (x1 + x2) / 2.0 + mathCos(psi) * cxp - mathSin(psi) * cyp;\n var cy = (y1 + y2) / 2.0 + mathSin(psi) * cxp + mathCos(psi) * cyp;\n var theta = vAngle([1, 0], [(xp - cxp) / rx, (yp - cyp) / ry]);\n var u = [(xp - cxp) / rx, (yp - cyp) / ry];\n var v = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry];\n var dTheta = vAngle(u, v);\n\n if (vRatio(u, v) <= -1) {\n dTheta = PI;\n }\n\n if (vRatio(u, v) >= 1) {\n dTheta = 0;\n }\n\n if (fs === 0 && dTheta > 0) {\n dTheta = dTheta - 2 * PI;\n }\n\n if (fs === 1 && dTheta < 0) {\n dTheta = dTheta + 2 * PI;\n }\n\n path.addData(cmd, cx, cy, rx, ry, theta, dTheta, psi, fs);\n}\n\nfunction createPathProxyFromString(data) {\n if (!data) {\n return [];\n } // command string\n\n\n var cs = data.replace(/-/g, ' -').replace(/ /g, ' ').replace(/ /g, ',').replace(/,,/g, ',');\n var n; // create pipes so that we can split the data\n\n for (n = 0; n < cc.length; n++) {\n cs = cs.replace(new RegExp(cc[n], 'g'), '|' + cc[n]);\n } // create array\n\n\n var arr = cs.split('|'); // init context point\n\n var cpx = 0;\n var cpy = 0;\n var path = new PathProxy();\n var CMD = PathProxy.CMD;\n var prevCmd;\n\n for (n = 1; n < arr.length; n++) {\n var str = arr[n];\n var c = str.charAt(0);\n var off = 0;\n var p = str.slice(1).replace(/e,-/g, 'e-').split(',');\n var cmd;\n\n if (p.length > 0 && p[0] === '') {\n p.shift();\n }\n\n for (var i = 0; i < p.length; i++) {\n p[i] = parseFloat(p[i]);\n }\n\n while (off < p.length && !isNaN(p[off])) {\n if (isNaN(p[0])) {\n break;\n }\n\n var ctlPtx;\n var ctlPty;\n var rx;\n var ry;\n var psi;\n var fa;\n var fs;\n var x1 = cpx;\n var y1 = cpy; // convert l, H, h, V, and v to L\n\n switch (c) {\n case 'l':\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n\n case 'L':\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n\n case 'm':\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.M;\n path.addData(cmd, cpx, cpy);\n c = 'l';\n break;\n\n case 'M':\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.M;\n path.addData(cmd, cpx, cpy);\n c = 'L';\n break;\n\n case 'h':\n cpx += p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n\n case 'H':\n cpx = p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n\n case 'v':\n cpy += p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n\n case 'V':\n cpy = p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n\n case 'C':\n cmd = CMD.C;\n path.addData(cmd, p[off++], p[off++], p[off++], p[off++], p[off++], p[off++]);\n cpx = p[off - 2];\n cpy = p[off - 1];\n break;\n\n case 'c':\n cmd = CMD.C;\n path.addData(cmd, p[off++] + cpx, p[off++] + cpy, p[off++] + cpx, p[off++] + cpy, p[off++] + cpx, p[off++] + cpy);\n cpx += p[off - 2];\n cpy += p[off - 1];\n break;\n\n case 'S':\n ctlPtx = cpx;\n ctlPty = cpy;\n var len = path.len();\n var pathData = path.data;\n\n if (prevCmd === CMD.C) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n\n cmd = CMD.C;\n x1 = p[off++];\n y1 = p[off++];\n cpx = p[off++];\n cpy = p[off++];\n path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy);\n break;\n\n case 's':\n ctlPtx = cpx;\n ctlPty = cpy;\n var len = path.len();\n var pathData = path.data;\n\n if (prevCmd === CMD.C) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n\n cmd = CMD.C;\n x1 = cpx + p[off++];\n y1 = cpy + p[off++];\n cpx += p[off++];\n cpy += p[off++];\n path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy);\n break;\n\n case 'Q':\n x1 = p[off++];\n y1 = p[off++];\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.Q;\n path.addData(cmd, x1, y1, cpx, cpy);\n break;\n\n case 'q':\n x1 = p[off++] + cpx;\n y1 = p[off++] + cpy;\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.Q;\n path.addData(cmd, x1, y1, cpx, cpy);\n break;\n\n case 'T':\n ctlPtx = cpx;\n ctlPty = cpy;\n var len = path.len();\n var pathData = path.data;\n\n if (prevCmd === CMD.Q) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.Q;\n path.addData(cmd, ctlPtx, ctlPty, cpx, cpy);\n break;\n\n case 't':\n ctlPtx = cpx;\n ctlPty = cpy;\n var len = path.len();\n var pathData = path.data;\n\n if (prevCmd === CMD.Q) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.Q;\n path.addData(cmd, ctlPtx, ctlPty, cpx, cpy);\n break;\n\n case 'A':\n rx = p[off++];\n ry = p[off++];\n psi = p[off++];\n fa = p[off++];\n fs = p[off++];\n x1 = cpx, y1 = cpy;\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.A;\n processArc(x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path);\n break;\n\n case 'a':\n rx = p[off++];\n ry = p[off++];\n psi = p[off++];\n fa = p[off++];\n fs = p[off++];\n x1 = cpx, y1 = cpy;\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.A;\n processArc(x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path);\n break;\n }\n }\n\n if (c === 'z' || c === 'Z') {\n cmd = CMD.Z;\n path.addData(cmd);\n }\n\n prevCmd = cmd;\n }\n\n path.toStatic();\n return path;\n} // TODO Optimize double memory cost problem\n\n\nfunction createPathOptions(str, opts) {\n var pathProxy = createPathProxyFromString(str);\n opts = opts || {};\n\n opts.buildPath = function (path) {\n if (path.setData) {\n path.setData(pathProxy.data); // Svg and vml renderer don't have context\n\n var ctx = path.getContext();\n\n if (ctx) {\n path.rebuildPath(ctx);\n }\n } else {\n var ctx = path;\n pathProxy.rebuildPath(ctx);\n }\n };\n\n opts.applyTransform = function (m) {\n transformPath(pathProxy, m);\n this.dirty(true);\n };\n\n return opts;\n}\n/**\n * Create a Path object from path string data\n * http://www.w3.org/TR/SVG/paths.html#PathData\n * @param {Object} opts Other options\n */\n\n\nfunction createFromString(str, opts) {\n return new Path(createPathOptions(str, opts));\n}\n/**\n * Create a Path class from path string data\n * @param {string} str\n * @param {Object} opts Other options\n */\n\n\nfunction extendFromString(str, opts) {\n return Path.extend(createPathOptions(str, opts));\n}\n/**\n * Merge multiple paths\n */\n// TODO Apply transform\n// TODO stroke dash\n// TODO Optimize double memory cost problem\n\n\nfunction mergePath(pathEls, opts) {\n var pathList = [];\n var len = pathEls.length;\n\n for (var i = 0; i < len; i++) {\n var pathEl = pathEls[i];\n\n if (!pathEl.path) {\n pathEl.createPathProxy();\n }\n\n if (pathEl.__dirtyPath) {\n pathEl.buildPath(pathEl.path, pathEl.shape, true);\n }\n\n pathList.push(pathEl.path);\n }\n\n var pathBundle = new Path(opts); // Need path proxy.\n\n pathBundle.createPathProxy();\n\n pathBundle.buildPath = function (path) {\n path.appendPath(pathList); // Svg and vml renderer don't have context\n\n var ctx = path.getContext();\n\n if (ctx) {\n path.rebuildPath(ctx);\n }\n };\n\n return pathBundle;\n}\n\nexports.createFromString = createFromString;\nexports.extendFromString = extendFromString;\nexports.mergePath = mergePath;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nvar matrix = require(\"zrender/lib/core/matrix\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar layout = require(\"../../util/layout\");\n\nvar TimelineView = require(\"./TimelineView\");\n\nvar TimelineAxis = require(\"./TimelineAxis\");\n\nvar _symbol = require(\"../../util/symbol\");\n\nvar createSymbol = _symbol.createSymbol;\n\nvar axisHelper = require(\"../../coord/axisHelper\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar _format = require(\"../../util/format\");\n\nvar encodeHTML = _format.encodeHTML;\nvar bind = zrUtil.bind;\nvar each = zrUtil.each;\nvar PI = Math.PI;\n\nvar _default = TimelineView.extend({\n type: 'timeline.slider',\n init: function (ecModel, api) {\n this.api = api;\n /**\n * @private\n * @type {module:echarts/component/timeline/TimelineAxis}\n */\n\n this._axis;\n /**\n * @private\n * @type {module:zrender/core/BoundingRect}\n */\n\n this._viewRect;\n /**\n * @type {number}\n */\n\n this._timer;\n /**\n * @type {module:zrender/Element}\n */\n\n this._currentPointer;\n /**\n * @type {module:zrender/container/Group}\n */\n\n this._mainGroup;\n /**\n * @type {module:zrender/container/Group}\n */\n\n this._labelGroup;\n },\n\n /**\n * @override\n */\n render: function (timelineModel, ecModel, api, payload) {\n this.model = timelineModel;\n this.api = api;\n this.ecModel = ecModel;\n this.group.removeAll();\n\n if (timelineModel.get('show', true)) {\n var layoutInfo = this._layout(timelineModel, api);\n\n var mainGroup = this._createGroup('mainGroup');\n\n var labelGroup = this._createGroup('labelGroup');\n /**\n * @private\n * @type {module:echarts/component/timeline/TimelineAxis}\n */\n\n\n var axis = this._axis = this._createAxis(layoutInfo, timelineModel);\n\n timelineModel.formatTooltip = function (dataIndex) {\n return encodeHTML(axis.scale.getLabel(dataIndex));\n };\n\n each(['AxisLine', 'AxisTick', 'Control', 'CurrentPointer'], function (name) {\n this['_render' + name](layoutInfo, mainGroup, axis, timelineModel);\n }, this);\n\n this._renderAxisLabel(layoutInfo, labelGroup, axis, timelineModel);\n\n this._position(layoutInfo, timelineModel);\n }\n\n this._doPlayStop();\n },\n\n /**\n * @override\n */\n remove: function () {\n this._clearTimer();\n\n this.group.removeAll();\n },\n\n /**\n * @override\n */\n dispose: function () {\n this._clearTimer();\n },\n _layout: function (timelineModel, api) {\n var labelPosOpt = timelineModel.get('label.normal.position');\n var orient = timelineModel.get('orient');\n var viewRect = getViewRect(timelineModel, api); // Auto label offset.\n\n if (labelPosOpt == null || labelPosOpt === 'auto') {\n labelPosOpt = orient === 'horizontal' ? viewRect.y + viewRect.height / 2 < api.getHeight() / 2 ? '-' : '+' : viewRect.x + viewRect.width / 2 < api.getWidth() / 2 ? '+' : '-';\n } else if (isNaN(labelPosOpt)) {\n labelPosOpt = {\n horizontal: {\n top: '-',\n bottom: '+'\n },\n vertical: {\n left: '-',\n right: '+'\n }\n }[orient][labelPosOpt];\n }\n\n var labelAlignMap = {\n horizontal: 'center',\n vertical: labelPosOpt >= 0 || labelPosOpt === '+' ? 'left' : 'right'\n };\n var labelBaselineMap = {\n horizontal: labelPosOpt >= 0 || labelPosOpt === '+' ? 'top' : 'bottom',\n vertical: 'middle'\n };\n var rotationMap = {\n horizontal: 0,\n vertical: PI / 2\n }; // Position\n\n var mainLength = orient === 'vertical' ? viewRect.height : viewRect.width;\n var controlModel = timelineModel.getModel('controlStyle');\n var showControl = controlModel.get('show');\n var controlSize = showControl ? controlModel.get('itemSize') : 0;\n var controlGap = showControl ? controlModel.get('itemGap') : 0;\n var sizePlusGap = controlSize + controlGap; // Special label rotate.\n\n var labelRotation = timelineModel.get('label.normal.rotate') || 0;\n labelRotation = labelRotation * PI / 180; // To radian.\n\n var playPosition;\n var prevBtnPosition;\n var nextBtnPosition;\n var axisExtent;\n var controlPosition = controlModel.get('position', true);\n var showControl = controlModel.get('show', true);\n var showPlayBtn = showControl && controlModel.get('showPlayBtn', true);\n var showPrevBtn = showControl && controlModel.get('showPrevBtn', true);\n var showNextBtn = showControl && controlModel.get('showNextBtn', true);\n var xLeft = 0;\n var xRight = mainLength; // position[0] means left, position[1] means middle.\n\n if (controlPosition === 'left' || controlPosition === 'bottom') {\n showPlayBtn && (playPosition = [0, 0], xLeft += sizePlusGap);\n showPrevBtn && (prevBtnPosition = [xLeft, 0], xLeft += sizePlusGap);\n showNextBtn && (nextBtnPosition = [xRight - controlSize, 0], xRight -= sizePlusGap);\n } else {\n // 'top' 'right'\n showPlayBtn && (playPosition = [xRight - controlSize, 0], xRight -= sizePlusGap);\n showPrevBtn && (prevBtnPosition = [0, 0], xLeft += sizePlusGap);\n showNextBtn && (nextBtnPosition = [xRight - controlSize, 0], xRight -= sizePlusGap);\n }\n\n axisExtent = [xLeft, xRight];\n\n if (timelineModel.get('inverse')) {\n axisExtent.reverse();\n }\n\n return {\n viewRect: viewRect,\n mainLength: mainLength,\n orient: orient,\n rotation: rotationMap[orient],\n labelRotation: labelRotation,\n labelPosOpt: labelPosOpt,\n labelAlign: timelineModel.get('label.normal.align') || labelAlignMap[orient],\n labelBaseline: timelineModel.get('label.normal.verticalAlign') || timelineModel.get('label.normal.baseline') || labelBaselineMap[orient],\n // Based on mainGroup.\n playPosition: playPosition,\n prevBtnPosition: prevBtnPosition,\n nextBtnPosition: nextBtnPosition,\n axisExtent: axisExtent,\n controlSize: controlSize,\n controlGap: controlGap\n };\n },\n _position: function (layoutInfo, timelineModel) {\n // Position is be called finally, because bounding rect is needed for\n // adapt content to fill viewRect (auto adapt offset).\n // Timeline may be not all in the viewRect when 'offset' is specified\n // as a number, because it is more appropriate that label aligns at\n // 'offset' but not the other edge defined by viewRect.\n var mainGroup = this._mainGroup;\n var labelGroup = this._labelGroup;\n var viewRect = layoutInfo.viewRect;\n\n if (layoutInfo.orient === 'vertical') {\n // transfrom to horizontal, inverse rotate by left-top point.\n var m = matrix.create();\n var rotateOriginX = viewRect.x;\n var rotateOriginY = viewRect.y + viewRect.height;\n matrix.translate(m, m, [-rotateOriginX, -rotateOriginY]);\n matrix.rotate(m, m, -PI / 2);\n matrix.translate(m, m, [rotateOriginX, rotateOriginY]);\n viewRect = viewRect.clone();\n viewRect.applyTransform(m);\n }\n\n var viewBound = getBound(viewRect);\n var mainBound = getBound(mainGroup.getBoundingRect());\n var labelBound = getBound(labelGroup.getBoundingRect());\n var mainPosition = mainGroup.position;\n var labelsPosition = labelGroup.position;\n labelsPosition[0] = mainPosition[0] = viewBound[0][0];\n var labelPosOpt = layoutInfo.labelPosOpt;\n\n if (isNaN(labelPosOpt)) {\n // '+' or '-'\n var mainBoundIdx = labelPosOpt === '+' ? 0 : 1;\n toBound(mainPosition, mainBound, viewBound, 1, mainBoundIdx);\n toBound(labelsPosition, labelBound, viewBound, 1, 1 - mainBoundIdx);\n } else {\n var mainBoundIdx = labelPosOpt >= 0 ? 0 : 1;\n toBound(mainPosition, mainBound, viewBound, 1, mainBoundIdx);\n labelsPosition[1] = mainPosition[1] + labelPosOpt;\n }\n\n mainGroup.attr('position', mainPosition);\n labelGroup.attr('position', labelsPosition);\n mainGroup.rotation = labelGroup.rotation = layoutInfo.rotation;\n setOrigin(mainGroup);\n setOrigin(labelGroup);\n\n function setOrigin(targetGroup) {\n var pos = targetGroup.position;\n targetGroup.origin = [viewBound[0][0] - pos[0], viewBound[1][0] - pos[1]];\n }\n\n function getBound(rect) {\n // [[xmin, xmax], [ymin, ymax]]\n return [[rect.x, rect.x + rect.width], [rect.y, rect.y + rect.height]];\n }\n\n function toBound(fromPos, from, to, dimIdx, boundIdx) {\n fromPos[dimIdx] += to[dimIdx][boundIdx] - from[dimIdx][boundIdx];\n }\n },\n _createAxis: function (layoutInfo, timelineModel) {\n var data = timelineModel.getData();\n var axisType = timelineModel.get('axisType');\n var scale = axisHelper.createScaleByModel(timelineModel, axisType);\n var dataExtent = data.getDataExtent('value');\n scale.setExtent(dataExtent[0], dataExtent[1]);\n\n this._customizeScale(scale, data);\n\n scale.niceTicks();\n var axis = new TimelineAxis('value', scale, layoutInfo.axisExtent, axisType);\n axis.model = timelineModel;\n return axis;\n },\n _customizeScale: function (scale, data) {\n scale.getTicks = function () {\n return data.mapArray(['value'], function (value) {\n return value;\n });\n };\n\n scale.getTicksLabels = function () {\n return zrUtil.map(this.getTicks(), scale.getLabel, scale);\n };\n },\n _createGroup: function (name) {\n var newGroup = this['_' + name] = new graphic.Group();\n this.group.add(newGroup);\n return newGroup;\n },\n _renderAxisLine: function (layoutInfo, group, axis, timelineModel) {\n var axisExtent = axis.getExtent();\n\n if (!timelineModel.get('lineStyle.show')) {\n return;\n }\n\n group.add(new graphic.Line({\n shape: {\n x1: axisExtent[0],\n y1: 0,\n x2: axisExtent[1],\n y2: 0\n },\n style: zrUtil.extend({\n lineCap: 'round'\n }, timelineModel.getModel('lineStyle').getLineStyle()),\n silent: true,\n z2: 1\n }));\n },\n\n /**\n * @private\n */\n _renderAxisTick: function (layoutInfo, group, axis, timelineModel) {\n var data = timelineModel.getData();\n var ticks = axis.scale.getTicks();\n each(ticks, function (value, dataIndex) {\n var tickCoord = axis.dataToCoord(value);\n var itemModel = data.getItemModel(dataIndex);\n var itemStyleModel = itemModel.getModel('itemStyle.normal');\n var hoverStyleModel = itemModel.getModel('itemStyle.emphasis');\n var symbolOpt = {\n position: [tickCoord, 0],\n onclick: bind(this._changeTimeline, this, dataIndex)\n };\n var el = giveSymbol(itemModel, itemStyleModel, group, symbolOpt);\n graphic.setHoverStyle(el, hoverStyleModel.getItemStyle());\n\n if (itemModel.get('tooltip')) {\n el.dataIndex = dataIndex;\n el.dataModel = timelineModel;\n } else {\n el.dataIndex = el.dataModel = null;\n }\n }, this);\n },\n\n /**\n * @private\n */\n _renderAxisLabel: function (layoutInfo, group, axis, timelineModel) {\n var labelModel = timelineModel.getModel('label.normal');\n\n if (!labelModel.get('show')) {\n return;\n }\n\n var data = timelineModel.getData();\n var ticks = axis.scale.getTicks();\n var labels = axisHelper.getFormattedLabels(axis, labelModel.get('formatter'));\n var labelInterval = axis.getLabelInterval();\n each(ticks, function (tick, dataIndex) {\n if (axis.isLabelIgnored(dataIndex, labelInterval)) {\n return;\n }\n\n var itemModel = data.getItemModel(dataIndex);\n var normalLabelModel = itemModel.getModel('label.normal');\n var hoverLabelModel = itemModel.getModel('label.emphasis');\n var tickCoord = axis.dataToCoord(tick);\n var textEl = new graphic.Text({\n position: [tickCoord, 0],\n rotation: layoutInfo.labelRotation - layoutInfo.rotation,\n onclick: bind(this._changeTimeline, this, dataIndex),\n silent: false\n });\n graphic.setTextStyle(textEl.style, normalLabelModel, {\n text: labels[dataIndex],\n textAlign: layoutInfo.labelAlign,\n textVerticalAlign: layoutInfo.labelBaseline\n });\n group.add(textEl);\n graphic.setHoverStyle(textEl, graphic.setTextStyle({}, hoverLabelModel));\n }, this);\n },\n\n /**\n * @private\n */\n _renderControl: function (layoutInfo, group, axis, timelineModel) {\n var controlSize = layoutInfo.controlSize;\n var rotation = layoutInfo.rotation;\n var itemStyle = timelineModel.getModel('controlStyle.normal').getItemStyle();\n var hoverStyle = timelineModel.getModel('controlStyle.emphasis').getItemStyle();\n var rect = [0, -controlSize / 2, controlSize, controlSize];\n var playState = timelineModel.getPlayState();\n var inverse = timelineModel.get('inverse', true);\n makeBtn(layoutInfo.nextBtnPosition, 'controlStyle.nextIcon', bind(this._changeTimeline, this, inverse ? '-' : '+'));\n makeBtn(layoutInfo.prevBtnPosition, 'controlStyle.prevIcon', bind(this._changeTimeline, this, inverse ? '+' : '-'));\n makeBtn(layoutInfo.playPosition, 'controlStyle.' + (playState ? 'stopIcon' : 'playIcon'), bind(this._handlePlayClick, this, !playState), true);\n\n function makeBtn(position, iconPath, onclick, willRotate) {\n if (!position) {\n return;\n }\n\n var opt = {\n position: position,\n origin: [controlSize / 2, 0],\n rotation: willRotate ? -rotation : 0,\n rectHover: true,\n style: itemStyle,\n onclick: onclick\n };\n var btn = makeIcon(timelineModel, iconPath, rect, opt);\n group.add(btn);\n graphic.setHoverStyle(btn, hoverStyle);\n }\n },\n _renderCurrentPointer: function (layoutInfo, group, axis, timelineModel) {\n var data = timelineModel.getData();\n var currentIndex = timelineModel.getCurrentIndex();\n var pointerModel = data.getItemModel(currentIndex).getModel('checkpointStyle');\n var me = this;\n var callback = {\n onCreate: function (pointer) {\n pointer.draggable = true;\n pointer.drift = bind(me._handlePointerDrag, me);\n pointer.ondragend = bind(me._handlePointerDragend, me);\n pointerMoveTo(pointer, currentIndex, axis, timelineModel, true);\n },\n onUpdate: function (pointer) {\n pointerMoveTo(pointer, currentIndex, axis, timelineModel);\n }\n }; // Reuse when exists, for animation and drag.\n\n this._currentPointer = giveSymbol(pointerModel, pointerModel, this._mainGroup, {}, this._currentPointer, callback);\n },\n _handlePlayClick: function (nextState) {\n this._clearTimer();\n\n this.api.dispatchAction({\n type: 'timelinePlayChange',\n playState: nextState,\n from: this.uid\n });\n },\n _handlePointerDrag: function (dx, dy, e) {\n this._clearTimer();\n\n this._pointerChangeTimeline([e.offsetX, e.offsetY]);\n },\n _handlePointerDragend: function (e) {\n this._pointerChangeTimeline([e.offsetX, e.offsetY], true);\n },\n _pointerChangeTimeline: function (mousePos, trigger) {\n var toCoord = this._toAxisCoord(mousePos)[0];\n\n var axis = this._axis;\n var axisExtent = numberUtil.asc(axis.getExtent().slice());\n toCoord > axisExtent[1] && (toCoord = axisExtent[1]);\n toCoord < axisExtent[0] && (toCoord = axisExtent[0]);\n this._currentPointer.position[0] = toCoord;\n\n this._currentPointer.dirty();\n\n var targetDataIndex = this._findNearestTick(toCoord);\n\n var timelineModel = this.model;\n\n if (trigger || targetDataIndex !== timelineModel.getCurrentIndex() && timelineModel.get('realtime')) {\n this._changeTimeline(targetDataIndex);\n }\n },\n _doPlayStop: function () {\n this._clearTimer();\n\n if (this.model.getPlayState()) {\n this._timer = setTimeout(bind(handleFrame, this), this.model.get('playInterval'));\n }\n\n function handleFrame() {\n // Do not cache\n var timelineModel = this.model;\n\n this._changeTimeline(timelineModel.getCurrentIndex() + (timelineModel.get('rewind', true) ? -1 : 1));\n }\n },\n _toAxisCoord: function (vertex) {\n var trans = this._mainGroup.getLocalTransform();\n\n return graphic.applyTransform(vertex, trans, true);\n },\n _findNearestTick: function (axisCoord) {\n var data = this.model.getData();\n var dist = Infinity;\n var targetDataIndex;\n var axis = this._axis;\n data.each(['value'], function (value, dataIndex) {\n var coord = axis.dataToCoord(value);\n var d = Math.abs(coord - axisCoord);\n\n if (d < dist) {\n dist = d;\n targetDataIndex = dataIndex;\n }\n });\n return targetDataIndex;\n },\n _clearTimer: function () {\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n },\n _changeTimeline: function (nextIndex) {\n var currentIndex = this.model.getCurrentIndex();\n\n if (nextIndex === '+') {\n nextIndex = currentIndex + 1;\n } else if (nextIndex === '-') {\n nextIndex = currentIndex - 1;\n }\n\n this.api.dispatchAction({\n type: 'timelineChange',\n currentIndex: nextIndex,\n from: this.uid\n });\n }\n});\n\nfunction getViewRect(model, api) {\n return layout.getLayoutRect(model.getBoxLayoutParams(), {\n width: api.getWidth(),\n height: api.getHeight()\n }, model.get('padding'));\n}\n\nfunction makeIcon(timelineModel, objPath, rect, opts) {\n var icon = graphic.makePath(timelineModel.get(objPath).replace(/^path:\\/\\//, ''), zrUtil.clone(opts || {}), new BoundingRect(rect[0], rect[1], rect[2], rect[3]), 'center');\n return icon;\n}\n/**\n * Create symbol or update symbol\n * opt: basic position and event handlers\n */\n\n\nfunction giveSymbol(hostModel, itemStyleModel, group, opt, symbol, callback) {\n var color = itemStyleModel.get('color');\n\n if (!symbol) {\n var symbolType = hostModel.get('symbol');\n symbol = createSymbol(symbolType, -1, -1, 2, 2, color);\n symbol.setStyle('strokeNoScale', true);\n group.add(symbol);\n callback && callback.onCreate(symbol);\n } else {\n symbol.setColor(color);\n group.add(symbol); // Group may be new, also need to add.\n\n callback && callback.onUpdate(symbol);\n } // Style\n\n\n var itemStyle = itemStyleModel.getItemStyle(['color', 'symbol', 'symbolSize']);\n symbol.setStyle(itemStyle); // Transform and events.\n\n opt = zrUtil.merge({\n rectHover: true,\n z2: 100\n }, opt, true);\n var symbolSize = hostModel.get('symbolSize');\n symbolSize = symbolSize instanceof Array ? symbolSize.slice() : [+symbolSize, +symbolSize];\n symbolSize[0] /= 2;\n symbolSize[1] /= 2;\n opt.scale = symbolSize;\n var symbolOffset = hostModel.get('symbolOffset');\n\n if (symbolOffset) {\n var pos = opt.position = opt.position || [0, 0];\n pos[0] += numberUtil.parsePercent(symbolOffset[0], symbolSize[0]);\n pos[1] += numberUtil.parsePercent(symbolOffset[1], symbolSize[1]);\n }\n\n var symbolRotate = hostModel.get('symbolRotate');\n opt.rotation = (symbolRotate || 0) * Math.PI / 180 || 0;\n symbol.attr(opt); // FIXME\n // (1) When symbol.style.strokeNoScale is true and updateTransform is not performed,\n // getBoundingRect will return wrong result.\n // (This is supposed to be resolved in zrender, but it is a little difficult to\n // leverage performance and auto updateTransform)\n // (2) All of ancesters of symbol do not scale, so we can just updateTransform symbol.\n\n symbol.updateTransform();\n return symbol;\n}\n\nfunction pointerMoveTo(pointer, dataIndex, axis, timelineModel, noAnimation) {\n if (pointer.dragging) {\n return;\n }\n\n var pointerModel = timelineModel.getModel('checkpointStyle');\n var toCoord = axis.dataToCoord(timelineModel.getData().get(['value'], dataIndex));\n\n if (noAnimation || !pointerModel.get('animation', true)) {\n pointer.attr({\n position: [toCoord, 0]\n });\n } else {\n pointer.stopAnimation(true);\n pointer.animateTo({\n position: [toCoord, 0]\n }, pointerModel.get('animationDuration', true), pointerModel.get('animationEasing', true));\n }\n}\n\nmodule.exports = _default;","var DataZoomModel = require(\"./DataZoomModel\");\n\nvar SliderZoomModel = DataZoomModel.extend({\n type: 'dataZoom.slider',\n layoutMode: 'box',\n\n /**\n * @protected\n */\n defaultOption: {\n show: true,\n // ph => placeholder. Using placehoder here because\n // deault value can only be drived in view stage.\n right: 'ph',\n // Default align to grid rect.\n top: 'ph',\n // Default align to grid rect.\n width: 'ph',\n // Default align to grid rect.\n height: 'ph',\n // Default align to grid rect.\n left: null,\n // Default align to grid rect.\n bottom: null,\n // Default align to grid rect.\n backgroundColor: 'rgba(47,69,84,0)',\n // Background of slider zoom component.\n // dataBackgroundColor: '#ddd', // Background coor of data shadow and border of box,\n // highest priority, remain for compatibility of\n // previous version, but not recommended any more.\n dataBackground: {\n lineStyle: {\n color: '#2f4554',\n width: 0.5,\n opacity: 0.3\n },\n areaStyle: {\n color: 'rgba(47,69,84,0.3)',\n opacity: 0.3\n }\n },\n borderColor: '#ddd',\n // border color of the box. For compatibility,\n // if dataBackgroundColor is set, borderColor\n // is ignored.\n fillerColor: 'rgba(167,183,204,0.4)',\n // Color of selected area.\n // handleColor: 'rgba(89,170,216,0.95)', // Color of handle.\n // handleIcon: 'path://M4.9,17.8c0-1.4,4.5-10.5,5.5-12.4c0-0.1,0.6-1.1,0.9-1.1c0.4,0,0.9,1,0.9,1.1c1.1,2.2,5.4,11,5.4,12.4v17.8c0,1.5-0.6,2.1-1.3,2.1H6.1c-0.7,0-1.3-0.6-1.3-2.1V17.8z',\n handleIcon: 'M8.2,13.6V3.9H6.3v9.7H3.1v14.9h3.3v9.7h1.8v-9.7h3.3V13.6H8.2z M9.7,24.4H4.8v-1.4h4.9V24.4z M9.7,19.1H4.8v-1.4h4.9V19.1z',\n // Percent of the slider height\n handleSize: '100%',\n handleStyle: {\n color: '#a7b7cc'\n },\n labelPrecision: null,\n labelFormatter: null,\n showDetail: true,\n showDataShadow: 'auto',\n // Default auto decision.\n realtime: true,\n zoomLock: false,\n // Whether disable zoom.\n textStyle: {\n color: '#333'\n }\n }\n});\nvar _default = SliderZoomModel;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar RADIAN_EPSILON = 1e-4;\n\nfunction _trim(str) {\n return str.replace(/^\\s+/, '').replace(/\\s+$/, '');\n}\n/**\n * Linear mapping a value from domain to range\n * @memberOf module:echarts/util/number\n * @param {(number|Array.)} val\n * @param {Array.} domain Domain extent domain[0] can be bigger than domain[1]\n * @param {Array.} range Range extent range[0] can be bigger than range[1]\n * @param {boolean} clamp\n * @return {(number|Array.}\n */\n\n\nfunction linearMap(val, domain, range, clamp) {\n var subDomain = domain[1] - domain[0];\n var subRange = range[1] - range[0];\n\n if (subDomain === 0) {\n return subRange === 0 ? range[0] : (range[0] + range[1]) / 2;\n } // Avoid accuracy problem in edge, such as\n // 146.39 - 62.83 === 83.55999999999999.\n // See echarts/test/ut/spec/util/number.js#linearMap#accuracyError\n // It is a little verbose for efficiency considering this method\n // is a hotspot.\n\n\n if (clamp) {\n if (subDomain > 0) {\n if (val <= domain[0]) {\n return range[0];\n } else if (val >= domain[1]) {\n return range[1];\n }\n } else {\n if (val >= domain[0]) {\n return range[0];\n } else if (val <= domain[1]) {\n return range[1];\n }\n }\n } else {\n if (val === domain[0]) {\n return range[0];\n }\n\n if (val === domain[1]) {\n return range[1];\n }\n }\n\n return (val - domain[0]) / subDomain * subRange + range[0];\n}\n/**\n * Convert a percent string to absolute number.\n * Returns NaN if percent is not a valid string or number\n * @memberOf module:echarts/util/number\n * @param {string|number} percent\n * @param {number} all\n * @return {number}\n */\n\n\nfunction parsePercent(percent, all) {\n switch (percent) {\n case 'center':\n case 'middle':\n percent = '50%';\n break;\n\n case 'left':\n case 'top':\n percent = '0%';\n break;\n\n case 'right':\n case 'bottom':\n percent = '100%';\n break;\n }\n\n if (typeof percent === 'string') {\n if (_trim(percent).match(/%$/)) {\n return parseFloat(percent) / 100 * all;\n }\n\n return parseFloat(percent);\n }\n\n return percent == null ? NaN : +percent;\n}\n/**\n * (1) Fix rounding error of float numbers.\n * (2) Support return string to avoid scientific notation like '3.5e-7'.\n *\n * @param {number} x\n * @param {number} [precision]\n * @param {boolean} [returnStr]\n * @return {number|string}\n */\n\n\nfunction round(x, precision, returnStr) {\n if (precision == null) {\n precision = 10;\n } // Avoid range error\n\n\n precision = Math.min(Math.max(0, precision), 20);\n x = (+x).toFixed(precision);\n return returnStr ? x : +x;\n}\n\nfunction asc(arr) {\n arr.sort(function (a, b) {\n return a - b;\n });\n return arr;\n}\n/**\n * Get precision\n * @param {number} val\n */\n\n\nfunction getPrecision(val) {\n val = +val;\n\n if (isNaN(val)) {\n return 0;\n } // It is much faster than methods converting number to string as follows\n // var tmp = val.toString();\n // return tmp.length - 1 - tmp.indexOf('.');\n // especially when precision is low\n\n\n var e = 1;\n var count = 0;\n\n while (Math.round(val * e) / e !== val) {\n e *= 10;\n count++;\n }\n\n return count;\n}\n/**\n * @param {string|number} val\n * @return {number}\n */\n\n\nfunction getPrecisionSafe(val) {\n var str = val.toString(); // Consider scientific notation: '3.4e-12' '3.4e+12'\n\n var eIndex = str.indexOf('e');\n\n if (eIndex > 0) {\n var precision = +str.slice(eIndex + 1);\n return precision < 0 ? -precision : 0;\n } else {\n var dotIndex = str.indexOf('.');\n return dotIndex < 0 ? 0 : str.length - 1 - dotIndex;\n }\n}\n/**\n * Minimal dicernible data precisioin according to a single pixel.\n *\n * @param {Array.} dataExtent\n * @param {Array.} pixelExtent\n * @return {number} precision\n */\n\n\nfunction getPixelPrecision(dataExtent, pixelExtent) {\n var log = Math.log;\n var LN10 = Math.LN10;\n var dataQuantity = Math.floor(log(dataExtent[1] - dataExtent[0]) / LN10);\n var sizeQuantity = Math.round(log(Math.abs(pixelExtent[1] - pixelExtent[0])) / LN10); // toFixed() digits argument must be between 0 and 20.\n\n var precision = Math.min(Math.max(-dataQuantity + sizeQuantity, 0), 20);\n return !isFinite(precision) ? 20 : precision;\n}\n/**\n * Get a data of given precision, assuring the sum of percentages\n * in valueList is 1.\n * The largest remainer method is used.\n * https://en.wikipedia.org/wiki/Largest_remainder_method\n *\n * @param {Array.} valueList a list of all data\n * @param {number} idx index of the data to be processed in valueList\n * @param {number} precision integer number showing digits of precision\n * @return {number} percent ranging from 0 to 100\n */\n\n\nfunction getPercentWithPrecision(valueList, idx, precision) {\n if (!valueList[idx]) {\n return 0;\n }\n\n var sum = zrUtil.reduce(valueList, function (acc, val) {\n return acc + (isNaN(val) ? 0 : val);\n }, 0);\n\n if (sum === 0) {\n return 0;\n }\n\n var digits = Math.pow(10, precision);\n var votesPerQuota = zrUtil.map(valueList, function (val) {\n return (isNaN(val) ? 0 : val) / sum * digits * 100;\n });\n var targetSeats = digits * 100;\n var seats = zrUtil.map(votesPerQuota, function (votes) {\n // Assign automatic seats.\n return Math.floor(votes);\n });\n var currentSum = zrUtil.reduce(seats, function (acc, val) {\n return acc + val;\n }, 0);\n var remainder = zrUtil.map(votesPerQuota, function (votes, idx) {\n return votes - seats[idx];\n }); // Has remainding votes.\n\n while (currentSum < targetSeats) {\n // Find next largest remainder.\n var max = Number.NEGATIVE_INFINITY;\n var maxId = null;\n\n for (var i = 0, len = remainder.length; i < len; ++i) {\n if (remainder[i] > max) {\n max = remainder[i];\n maxId = i;\n }\n } // Add a vote to max remainder.\n\n\n ++seats[maxId];\n remainder[maxId] = 0;\n ++currentSum;\n }\n\n return seats[idx] / digits;\n} // Number.MAX_SAFE_INTEGER, ie do not support.\n\n\nvar MAX_SAFE_INTEGER = 9007199254740991;\n/**\n * To 0 - 2 * PI, considering negative radian.\n * @param {number} radian\n * @return {number}\n */\n\nfunction remRadian(radian) {\n var pi2 = Math.PI * 2;\n return (radian % pi2 + pi2) % pi2;\n}\n/**\n * @param {type} radian\n * @return {boolean}\n */\n\n\nfunction isRadianAroundZero(val) {\n return val > -RADIAN_EPSILON && val < RADIAN_EPSILON;\n}\n\nvar TIME_REG = /^(?:(\\d{4})(?:[-\\/](\\d{1,2})(?:[-\\/](\\d{1,2})(?:[T ](\\d{1,2})(?::(\\d\\d)(?::(\\d\\d)(?:[.,](\\d+))?)?)?(Z|[\\+\\-]\\d\\d:?\\d\\d)?)?)?)?)?$/; // jshint ignore:line\n\n/**\n * @param {string|Date|number} value These values can be accepted:\n * + An instance of Date, represent a time in its own time zone.\n * + Or string in a subset of ISO 8601, only including:\n * + only year, month, date: '2012-03', '2012-03-01', '2012-03-01 05', '2012-03-01 05:06',\n * + separated with T or space: '2012-03-01T12:22:33.123', '2012-03-01 12:22:33.123',\n * + time zone: '2012-03-01T12:22:33Z', '2012-03-01T12:22:33+8000', '2012-03-01T12:22:33-05:00',\n * all of which will be treated as local time if time zone is not specified\n * (see ).\n * + Or other string format, including (all of which will be treated as loacal time):\n * '2012', '2012-3-1', '2012/3/1', '2012/03/01',\n * '2009/6/12 2:00', '2009/6/12 2:05:08', '2009/6/12 2:05:08.123'\n * + a timestamp, which represent a time in UTC.\n * @return {Date} date\n */\n\nfunction parseDate(value) {\n if (value instanceof Date) {\n return value;\n } else if (typeof value === 'string') {\n // Different browsers parse date in different way, so we parse it manually.\n // Some other issues:\n // new Date('1970-01-01') is UTC,\n // new Date('1970/01/01') and new Date('1970-1-01') is local.\n // See issue #3623\n var match = TIME_REG.exec(value);\n\n if (!match) {\n // return Invalid Date.\n return new Date(NaN);\n } // Use local time when no timezone offset specifed.\n\n\n if (!match[8]) {\n // match[n] can only be string or undefined.\n // But take care of '12' + 1 => '121'.\n return new Date(+match[1], +(match[2] || 1) - 1, +match[3] || 1, +match[4] || 0, +(match[5] || 0), +match[6] || 0, +match[7] || 0);\n } // Timezoneoffset of Javascript Date has considered DST (Daylight Saving Time,\n // https://tc39.github.io/ecma262/#sec-daylight-saving-time-adjustment).\n // For example, system timezone is set as \"Time Zone: America/Toronto\",\n // then these code will get different result:\n // `new Date(1478411999999).getTimezoneOffset(); // get 240`\n // `new Date(1478412000000).getTimezoneOffset(); // get 300`\n // So we should not use `new Date`, but use `Date.UTC`.\n else {\n var hour = +match[4] || 0;\n\n if (match[8].toUpperCase() !== 'Z') {\n hour -= match[8].slice(0, 3);\n }\n\n return new Date(Date.UTC(+match[1], +(match[2] || 1) - 1, +match[3] || 1, hour, +(match[5] || 0), +match[6] || 0, +match[7] || 0));\n }\n } else if (value == null) {\n return new Date(NaN);\n }\n\n return new Date(Math.round(value));\n}\n/**\n * Quantity of a number. e.g. 0.1, 1, 10, 100\n *\n * @param {number} val\n * @return {number}\n */\n\n\nfunction quantity(val) {\n return Math.pow(10, quantityExponent(val));\n}\n\nfunction quantityExponent(val) {\n return Math.floor(Math.log(val) / Math.LN10);\n}\n/**\n * find a “nice” number approximately equal to x. Round the number if round = true,\n * take ceiling if round = false. The primary observation is that the “nicest”\n * numbers in decimal are 1, 2, and 5, and all power-of-ten multiples of these numbers.\n *\n * See \"Nice Numbers for Graph Labels\" of Graphic Gems.\n *\n * @param {number} val Non-negative value.\n * @param {boolean} round\n * @return {number}\n */\n\n\nfunction nice(val, round) {\n var exponent = quantityExponent(val);\n var exp10 = Math.pow(10, exponent);\n var f = val / exp10; // 1 <= f < 10\n\n var nf;\n\n if (round) {\n if (f < 1.5) {\n nf = 1;\n } else if (f < 2.5) {\n nf = 2;\n } else if (f < 4) {\n nf = 3;\n } else if (f < 7) {\n nf = 5;\n } else {\n nf = 10;\n }\n } else {\n if (f < 1) {\n nf = 1;\n } else if (f < 2) {\n nf = 2;\n } else if (f < 3) {\n nf = 3;\n } else if (f < 5) {\n nf = 5;\n } else {\n nf = 10;\n }\n }\n\n val = nf * exp10; // Fix 3 * 0.1 === 0.30000000000000004 issue (see IEEE 754).\n // 20 is the uppper bound of toFixed.\n\n return exponent >= -20 ? +val.toFixed(exponent < 0 ? -exponent : 0) : val;\n}\n/**\n * Order intervals asc, and split them when overlap.\n * expect(numberUtil.reformIntervals([\n * {interval: [18, 62], close: [1, 1]},\n * {interval: [-Infinity, -70], close: [0, 0]},\n * {interval: [-70, -26], close: [1, 1]},\n * {interval: [-26, 18], close: [1, 1]},\n * {interval: [62, 150], close: [1, 1]},\n * {interval: [106, 150], close: [1, 1]},\n * {interval: [150, Infinity], close: [0, 0]}\n * ])).toEqual([\n * {interval: [-Infinity, -70], close: [0, 0]},\n * {interval: [-70, -26], close: [1, 1]},\n * {interval: [-26, 18], close: [0, 1]},\n * {interval: [18, 62], close: [0, 1]},\n * {interval: [62, 150], close: [0, 1]},\n * {interval: [150, Infinity], close: [0, 0]}\n * ]);\n * @param {Array.} list, where `close` mean open or close\n * of the interval, and Infinity can be used.\n * @return {Array.} The origin list, which has been reformed.\n */\n\n\nfunction reformIntervals(list) {\n list.sort(function (a, b) {\n return littleThan(a, b, 0) ? -1 : 1;\n });\n var curr = -Infinity;\n var currClose = 1;\n\n for (var i = 0; i < list.length;) {\n var interval = list[i].interval;\n var close = list[i].close;\n\n for (var lg = 0; lg < 2; lg++) {\n if (interval[lg] <= curr) {\n interval[lg] = curr;\n close[lg] = !lg ? 1 - currClose : 1;\n }\n\n curr = interval[lg];\n currClose = close[lg];\n }\n\n if (interval[0] === interval[1] && close[0] * close[1] !== 1) {\n list.splice(i, 1);\n } else {\n i++;\n }\n }\n\n return list;\n\n function littleThan(a, b, lg) {\n return a.interval[lg] < b.interval[lg] || a.interval[lg] === b.interval[lg] && (a.close[lg] - b.close[lg] === (!lg ? 1 : -1) || !lg && littleThan(a, b, 1));\n }\n}\n/**\n * parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n * ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n * subtraction forces infinities to NaN\n *\n * @param {*} v\n * @return {boolean}\n */\n\n\nfunction isNumeric(v) {\n return v - parseFloat(v) >= 0;\n}\n\nexports.linearMap = linearMap;\nexports.parsePercent = parsePercent;\nexports.round = round;\nexports.asc = asc;\nexports.getPrecision = getPrecision;\nexports.getPrecisionSafe = getPrecisionSafe;\nexports.getPixelPrecision = getPixelPrecision;\nexports.getPercentWithPrecision = getPercentWithPrecision;\nexports.MAX_SAFE_INTEGER = MAX_SAFE_INTEGER;\nexports.remRadian = remRadian;\nexports.isRadianAroundZero = isRadianAroundZero;\nexports.parseDate = parseDate;\nexports.quantity = quantity;\nexports.nice = nice;\nexports.reformIntervals = reformIntervals;\nexports.isNumeric = isNumeric;","var makeStyleMapper = require(\"./makeStyleMapper\");\n\nvar getLineStyle = makeStyleMapper([['lineWidth', 'width'], ['stroke', 'color'], ['opacity'], ['shadowBlur'], ['shadowOffsetX'], ['shadowOffsetY'], ['shadowColor']]);\nvar _default = {\n getLineStyle: function (excludes) {\n var style = getLineStyle(this, excludes);\n var lineDash = this.getLineDash(style.lineWidth);\n lineDash && (style.lineDash = lineDash);\n return style;\n },\n getLineDash: function (lineWidth) {\n if (lineWidth == null) {\n lineWidth = 1;\n }\n\n var lineType = this.get('type');\n var dotSize = Math.max(lineWidth, 2);\n var dashSize = lineWidth * 4;\n return lineType === 'solid' || lineType == null ? null : lineType === 'dashed' ? [dashSize, dashSize] : [dotSize, dotSize];\n }\n};\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\necharts.registerAction({\n type: 'timelineChange',\n event: 'timelineChanged',\n update: 'prepareAndUpdate'\n}, function (payload, ecModel) {\n var timelineModel = ecModel.getComponent('timeline');\n\n if (timelineModel && payload.currentIndex != null) {\n timelineModel.setCurrentIndex(payload.currentIndex);\n\n if (!timelineModel.get('loop', true) && timelineModel.isIndexMax()) {\n timelineModel.setPlayState(false);\n }\n } // Set normalized currentIndex to payload.\n\n\n ecModel.resetOption('timeline');\n return zrUtil.defaults({\n currentIndex: timelineModel.option.currentIndex\n }, payload);\n});\necharts.registerAction({\n type: 'timelinePlayChange',\n event: 'timelinePlayChanged',\n update: 'update'\n}, function (payload, ecModel) {\n var timelineModel = ecModel.getComponent('timeline');\n\n if (timelineModel && payload.playState != null) {\n timelineModel.setPlayState(payload.playState);\n }\n});","var SeriesModel = require(\"../../model/Series\");\n\nvar createListFromArray = require(\"../helper/createListFromArray\");\n\nvar _default = SeriesModel.extend({\n type: 'series.heatmap',\n getInitialData: function (option, ecModel) {\n return createListFromArray(option.data, this, ecModel);\n },\n defaultOption: {\n // Cartesian2D or geo\n coordinateSystem: 'cartesian2d',\n zlevel: 0,\n z: 2,\n // Cartesian coordinate system\n // xAxisIndex: 0,\n // yAxisIndex: 0,\n // Geo coordinate system\n geoIndex: 0,\n blurSize: 30,\n pointSize: 20,\n maxOpacity: 1,\n minOpacity: 0\n }\n});\n\nmodule.exports = _default;","var _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar env = require(\"zrender/lib/core/env\");\n\nvar modelUtil = require(\"../../util/model\");\n\nvar helper = require(\"./helper\");\n\nvar AxisProxy = require(\"./AxisProxy\");\n\nvar each = zrUtil.each;\nvar eachAxisDim = helper.eachAxisDim;\nvar DataZoomModel = echarts.extendComponentModel({\n type: 'dataZoom',\n dependencies: ['xAxis', 'yAxis', 'zAxis', 'radiusAxis', 'angleAxis', 'singleAxis', 'series'],\n\n /**\n * @protected\n */\n defaultOption: {\n zlevel: 0,\n z: 4,\n // Higher than normal component (z: 2).\n orient: null,\n // Default auto by axisIndex. Possible value: 'horizontal', 'vertical'.\n xAxisIndex: null,\n // Default the first horizontal category axis.\n yAxisIndex: null,\n // Default the first vertical category axis.\n filterMode: 'filter',\n // Possible values: 'filter' or 'empty' or 'weakFilter'.\n // 'filter': data items which are out of window will be removed. This option is\n // applicable when filtering outliers. For each data item, it will be\n // filtered if one of the relevant dimensions is out of the window.\n // 'weakFilter': data items which are out of window will be removed. This option\n // is applicable when filtering outliers. For each data item, it will be\n // filtered only if all of the relevant dimensions are out of the same\n // side of the window.\n // 'empty': data items which are out of window will be set to empty.\n // This option is applicable when user should not neglect\n // that there are some data items out of window.\n // 'none': Do not filter.\n // Taking line chart as an example, line will be broken in\n // the filtered points when filterModel is set to 'empty', but\n // be connected when set to 'filter'.\n throttle: null,\n // Dispatch action by the fixed rate, avoid frequency.\n // default 100. Do not throttle when use null/undefined.\n // If animation === true and animationDurationUpdate > 0,\n // default value is 100, otherwise 20.\n start: 0,\n // Start percent. 0 ~ 100\n end: 100,\n // End percent. 0 ~ 100\n startValue: null,\n // Start value. If startValue specified, start is ignored.\n endValue: null,\n // End value. If endValue specified, end is ignored.\n minSpan: null,\n // 0 ~ 100\n maxSpan: null,\n // 0 ~ 100\n minValueSpan: null,\n // The range of dataZoom can not be smaller than that.\n maxValueSpan: null,\n // The range of dataZoom can not be larger than that.\n rangeMode: null // Array, can be 'value' or 'percent'.\n\n },\n\n /**\n * @override\n */\n init: function (option, parentModel, ecModel) {\n /**\n * key like x_0, y_1\n * @private\n * @type {Object}\n */\n this._dataIntervalByAxis = {};\n /**\n * @private\n */\n\n this._dataInfo = {};\n /**\n * key like x_0, y_1\n * @private\n */\n\n this._axisProxies = {};\n /**\n * @readOnly\n */\n\n this.textStyleModel;\n /**\n * @private\n */\n\n this._autoThrottle = true;\n /**\n * 'percent' or 'value'\n * @private\n */\n\n this._rangePropMode = ['percent', 'percent'];\n var rawOption = retrieveRaw(option);\n this.mergeDefaultAndTheme(option, ecModel);\n this.doInit(rawOption);\n },\n\n /**\n * @override\n */\n mergeOption: function (newOption) {\n var rawOption = retrieveRaw(newOption); //FIX #2591\n\n zrUtil.merge(this.option, newOption, true);\n this.doInit(rawOption);\n },\n\n /**\n * @protected\n */\n doInit: function (rawOption) {\n var thisOption = this.option; // Disable realtime view update if canvas is not supported.\n\n if (!env.canvasSupported) {\n thisOption.realtime = false;\n }\n\n this._setDefaultThrottle(rawOption);\n\n updateRangeUse(this, rawOption);\n each([['start', 'startValue'], ['end', 'endValue']], function (names, index) {\n // start/end has higher priority over startValue/endValue if they\n // both set, but we should make chart.setOption({endValue: 1000})\n // effective, rather than chart.setOption({endValue: 1000, end: null}).\n if (this._rangePropMode[index] === 'value') {\n thisOption[names[0]] = null;\n } // Otherwise do nothing and use the merge result.\n\n }, this);\n this.textStyleModel = this.getModel('textStyle');\n\n this._resetTarget();\n\n this._giveAxisProxies();\n },\n\n /**\n * @private\n */\n _giveAxisProxies: function () {\n var axisProxies = this._axisProxies;\n this.eachTargetAxis(function (dimNames, axisIndex, dataZoomModel, ecModel) {\n var axisModel = this.dependentModels[dimNames.axis][axisIndex]; // If exists, share axisProxy with other dataZoomModels.\n\n var axisProxy = axisModel.__dzAxisProxy || ( // Use the first dataZoomModel as the main model of axisProxy.\n axisModel.__dzAxisProxy = new AxisProxy(dimNames.name, axisIndex, this, ecModel)); // FIXME\n // dispose __dzAxisProxy\n\n axisProxies[dimNames.name + '_' + axisIndex] = axisProxy;\n }, this);\n },\n\n /**\n * @private\n */\n _resetTarget: function () {\n var thisOption = this.option;\n\n var autoMode = this._judgeAutoMode();\n\n eachAxisDim(function (dimNames) {\n var axisIndexName = dimNames.axisIndex;\n thisOption[axisIndexName] = modelUtil.normalizeToArray(thisOption[axisIndexName]);\n }, this);\n\n if (autoMode === 'axisIndex') {\n this._autoSetAxisIndex();\n } else if (autoMode === 'orient') {\n this._autoSetOrient();\n }\n },\n\n /**\n * @private\n */\n _judgeAutoMode: function () {\n // Auto set only works for setOption at the first time.\n // The following is user's reponsibility. So using merged\n // option is OK.\n var thisOption = this.option;\n var hasIndexSpecified = false;\n eachAxisDim(function (dimNames) {\n // When user set axisIndex as a empty array, we think that user specify axisIndex\n // but do not want use auto mode. Because empty array may be encountered when\n // some error occured.\n if (thisOption[dimNames.axisIndex] != null) {\n hasIndexSpecified = true;\n }\n }, this);\n var orient = thisOption.orient;\n\n if (orient == null && hasIndexSpecified) {\n return 'orient';\n } else if (!hasIndexSpecified) {\n if (orient == null) {\n thisOption.orient = 'horizontal';\n }\n\n return 'axisIndex';\n }\n },\n\n /**\n * @private\n */\n _autoSetAxisIndex: function () {\n var autoAxisIndex = true;\n var orient = this.get('orient', true);\n var thisOption = this.option;\n var dependentModels = this.dependentModels;\n\n if (autoAxisIndex) {\n // Find axis that parallel to dataZoom as default.\n var dimName = orient === 'vertical' ? 'y' : 'x';\n\n if (dependentModels[dimName + 'Axis'].length) {\n thisOption[dimName + 'AxisIndex'] = [0];\n autoAxisIndex = false;\n } else {\n each(dependentModels.singleAxis, function (singleAxisModel) {\n if (autoAxisIndex && singleAxisModel.get('orient', true) === orient) {\n thisOption.singleAxisIndex = [singleAxisModel.componentIndex];\n autoAxisIndex = false;\n }\n });\n }\n }\n\n if (autoAxisIndex) {\n // Find the first category axis as default. (consider polar)\n eachAxisDim(function (dimNames) {\n if (!autoAxisIndex) {\n return;\n }\n\n var axisIndices = [];\n var axisModels = this.dependentModels[dimNames.axis];\n\n if (axisModels.length && !axisIndices.length) {\n for (var i = 0, len = axisModels.length; i < len; i++) {\n if (axisModels[i].get('type') === 'category') {\n axisIndices.push(i);\n }\n }\n }\n\n thisOption[dimNames.axisIndex] = axisIndices;\n\n if (axisIndices.length) {\n autoAxisIndex = false;\n }\n }, this);\n }\n\n if (autoAxisIndex) {\n // FIXME\n // 这里是兼容ec2的写法(没指定xAxisIndex和yAxisIndex时把scatter和双数值轴折柱纳入dataZoom控制),\n // 但是实际是否需要Grid.js#getScaleByOption来判断(考虑time,log等axis type)?\n // If both dataZoom.xAxisIndex and dataZoom.yAxisIndex is not specified,\n // dataZoom component auto adopts series that reference to\n // both xAxis and yAxis which type is 'value'.\n this.ecModel.eachSeries(function (seriesModel) {\n if (this._isSeriesHasAllAxesTypeOf(seriesModel, 'value')) {\n eachAxisDim(function (dimNames) {\n var axisIndices = thisOption[dimNames.axisIndex];\n var axisIndex = seriesModel.get(dimNames.axisIndex);\n var axisId = seriesModel.get(dimNames.axisId);\n var axisModel = seriesModel.ecModel.queryComponents({\n mainType: dimNames.axis,\n index: axisIndex,\n id: axisId\n })[0];\n axisIndex = axisModel.componentIndex;\n\n if (zrUtil.indexOf(axisIndices, axisIndex) < 0) {\n axisIndices.push(axisIndex);\n }\n });\n }\n }, this);\n }\n },\n\n /**\n * @private\n */\n _autoSetOrient: function () {\n var dim; // Find the first axis\n\n this.eachTargetAxis(function (dimNames) {\n !dim && (dim = dimNames.name);\n }, this);\n this.option.orient = dim === 'y' ? 'vertical' : 'horizontal';\n },\n\n /**\n * @private\n */\n _isSeriesHasAllAxesTypeOf: function (seriesModel, axisType) {\n // FIXME\n // 需要series的xAxisIndex和yAxisIndex都首先自动设置上。\n // 例如series.type === scatter时。\n var is = true;\n eachAxisDim(function (dimNames) {\n var seriesAxisIndex = seriesModel.get(dimNames.axisIndex);\n var axisModel = this.dependentModels[dimNames.axis][seriesAxisIndex];\n\n if (!axisModel || axisModel.get('type') !== axisType) {\n is = false;\n }\n }, this);\n return is;\n },\n\n /**\n * @private\n */\n _setDefaultThrottle: function (rawOption) {\n // When first time user set throttle, auto throttle ends.\n if (rawOption.hasOwnProperty('throttle')) {\n this._autoThrottle = false;\n }\n\n if (this._autoThrottle) {\n var globalOption = this.ecModel.option;\n this.option.throttle = globalOption.animation && globalOption.animationDurationUpdate > 0 ? 100 : 20;\n }\n },\n\n /**\n * @public\n */\n getFirstTargetAxisModel: function () {\n var firstAxisModel;\n eachAxisDim(function (dimNames) {\n if (firstAxisModel == null) {\n var indices = this.get(dimNames.axisIndex);\n\n if (indices.length) {\n firstAxisModel = this.dependentModels[dimNames.axis][indices[0]];\n }\n }\n }, this);\n return firstAxisModel;\n },\n\n /**\n * @public\n * @param {Function} callback param: axisModel, dimNames, axisIndex, dataZoomModel, ecModel\n */\n eachTargetAxis: function (callback, context) {\n var ecModel = this.ecModel;\n eachAxisDim(function (dimNames) {\n each(this.get(dimNames.axisIndex), function (axisIndex) {\n callback.call(context, dimNames, axisIndex, this, ecModel);\n }, this);\n }, this);\n },\n\n /**\n * @param {string} dimName\n * @param {number} axisIndex\n * @return {module:echarts/component/dataZoom/AxisProxy} If not found, return null/undefined.\n */\n getAxisProxy: function (dimName, axisIndex) {\n return this._axisProxies[dimName + '_' + axisIndex];\n },\n\n /**\n * @param {string} dimName\n * @param {number} axisIndex\n * @return {module:echarts/model/Model} If not found, return null/undefined.\n */\n getAxisModel: function (dimName, axisIndex) {\n var axisProxy = this.getAxisProxy(dimName, axisIndex);\n return axisProxy && axisProxy.getAxisModel();\n },\n\n /**\n * If not specified, set to undefined.\n *\n * @public\n * @param {Object} opt\n * @param {number} [opt.start]\n * @param {number} [opt.end]\n * @param {number} [opt.startValue]\n * @param {number} [opt.endValue]\n * @param {boolean} [ignoreUpdateRangeUsg=false]\n */\n setRawRange: function (opt, ignoreUpdateRangeUsg) {\n var option = this.option;\n each([['start', 'startValue'], ['end', 'endValue']], function (names) {\n // If only one of 'start' and 'startValue' is not null/undefined, the other\n // should be cleared, which enable clear the option.\n // If both of them are not set, keep option with the original value, which\n // enable use only set start but not set end when calling `dispatchAction`.\n // The same as 'end' and 'endValue'.\n if (opt[names[0]] != null || opt[names[1]] != null) {\n option[names[0]] = opt[names[0]];\n option[names[1]] = opt[names[1]];\n }\n }, this);\n !ignoreUpdateRangeUsg && updateRangeUse(this, opt);\n },\n\n /**\n * @public\n * @return {Array.} [startPercent, endPercent]\n */\n getPercentRange: function () {\n var axisProxy = this.findRepresentativeAxisProxy();\n\n if (axisProxy) {\n return axisProxy.getDataPercentWindow();\n }\n },\n\n /**\n * @public\n * For example, chart.getModel().getComponent('dataZoom').getValueRange('y', 0);\n *\n * @param {string} [axisDimName]\n * @param {number} [axisIndex]\n * @return {Array.} [startValue, endValue] value can only be '-' or finite number.\n */\n getValueRange: function (axisDimName, axisIndex) {\n if (axisDimName == null && axisIndex == null) {\n var axisProxy = this.findRepresentativeAxisProxy();\n\n if (axisProxy) {\n return axisProxy.getDataValueWindow();\n }\n } else {\n return this.getAxisProxy(axisDimName, axisIndex).getDataValueWindow();\n }\n },\n\n /**\n * @public\n * @param {module:echarts/model/Model} [axisModel] If axisModel given, find axisProxy\n * corresponding to the axisModel\n * @return {module:echarts/component/dataZoom/AxisProxy}\n */\n findRepresentativeAxisProxy: function (axisModel) {\n if (axisModel) {\n return axisModel.__dzAxisProxy;\n } // Find the first hosted axisProxy\n\n\n var axisProxies = this._axisProxies;\n\n for (var key in axisProxies) {\n if (axisProxies.hasOwnProperty(key) && axisProxies[key].hostedBy(this)) {\n return axisProxies[key];\n }\n } // If no hosted axis find not hosted axisProxy.\n // Consider this case: dataZoomModel1 and dataZoomModel2 control the same axis,\n // and the option.start or option.end settings are different. The percentRange\n // should follow axisProxy.\n // (We encounter this problem in toolbox data zoom.)\n\n\n for (var key in axisProxies) {\n if (axisProxies.hasOwnProperty(key) && !axisProxies[key].hostedBy(this)) {\n return axisProxies[key];\n }\n }\n },\n\n /**\n * @return {Array.}\n */\n getRangePropMode: function () {\n return this._rangePropMode.slice();\n }\n});\n\nfunction retrieveRaw(option) {\n var ret = {};\n each(['start', 'end', 'startValue', 'endValue', 'throttle'], function (name) {\n option.hasOwnProperty(name) && (ret[name] = option[name]);\n });\n return ret;\n}\n\nfunction updateRangeUse(dataZoomModel, rawOption) {\n var rangePropMode = dataZoomModel._rangePropMode;\n var rangeModeInOption = dataZoomModel.get('rangeMode');\n each([['start', 'startValue'], ['end', 'endValue']], function (names, index) {\n var percentSpecified = rawOption[names[0]] != null;\n var valueSpecified = rawOption[names[1]] != null;\n\n if (percentSpecified && !valueSpecified) {\n rangePropMode[index] = 'percent';\n } else if (!percentSpecified && valueSpecified) {\n rangePropMode[index] = 'value';\n } else if (rangeModeInOption) {\n rangePropMode[index] = rangeModeInOption[index];\n } else if (percentSpecified) {\n // percentSpecified && valueSpecified\n rangePropMode[index] = 'percent';\n } // else remain its original setting.\n\n });\n}\n\nvar _default = DataZoomModel;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar LinearGradient = require(\"zrender/lib/graphic/LinearGradient\");\n\nvar eventTool = require(\"zrender/lib/core/event\");\n\nvar VisualMapView = require(\"./VisualMapView\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar sliderMove = require(\"../helper/sliderMove\");\n\nvar helper = require(\"./helper\");\n\nvar modelUtil = require(\"../../util/model\");\n\nvar linearMap = numberUtil.linearMap;\nvar each = zrUtil.each;\nvar mathMin = Math.min;\nvar mathMax = Math.max; // Arbitrary value\n\nvar HOVER_LINK_SIZE = 12;\nvar HOVER_LINK_OUT = 6; // Notice:\n// Any \"interval\" should be by the order of [low, high].\n// \"handle0\" (handleIndex === 0) maps to\n// low data value: this._dataInterval[0] and has low coord.\n// \"handle1\" (handleIndex === 1) maps to\n// high data value: this._dataInterval[1] and has high coord.\n// The logic of transform is implemented in this._createBarGroup.\n\nvar ContinuousView = VisualMapView.extend({\n type: 'visualMap.continuous',\n\n /**\n * @override\n */\n init: function () {\n ContinuousView.superApply(this, 'init', arguments);\n /**\n * @private\n */\n\n this._shapes = {};\n /**\n * @private\n */\n\n this._dataInterval = [];\n /**\n * @private\n */\n\n this._handleEnds = [];\n /**\n * @private\n */\n\n this._orient;\n /**\n * @private\n */\n\n this._useHandle;\n /**\n * @private\n */\n\n this._hoverLinkDataIndices = [];\n /**\n * @private\n */\n\n this._dragging;\n /**\n * @private\n */\n\n this._hovering;\n },\n\n /**\n * @protected\n * @override\n */\n doRender: function (visualMapModel, ecModel, api, payload) {\n if (!payload || payload.type !== 'selectDataRange' || payload.from !== this.uid) {\n this._buildView();\n }\n },\n\n /**\n * @private\n */\n _buildView: function () {\n this.group.removeAll();\n var visualMapModel = this.visualMapModel;\n var thisGroup = this.group;\n this._orient = visualMapModel.get('orient');\n this._useHandle = visualMapModel.get('calculable');\n\n this._resetInterval();\n\n this._renderBar(thisGroup);\n\n var dataRangeText = visualMapModel.get('text');\n\n this._renderEndsText(thisGroup, dataRangeText, 0);\n\n this._renderEndsText(thisGroup, dataRangeText, 1); // Do this for background size calculation.\n\n\n this._updateView(true); // After updating view, inner shapes is built completely,\n // and then background can be rendered.\n\n\n this.renderBackground(thisGroup); // Real update view\n\n this._updateView();\n\n this._enableHoverLinkToSeries();\n\n this._enableHoverLinkFromSeries();\n\n this.positionGroup(thisGroup);\n },\n\n /**\n * @private\n */\n _renderEndsText: function (group, dataRangeText, endsIndex) {\n if (!dataRangeText) {\n return;\n } // Compatible with ec2, text[0] map to high value, text[1] map low value.\n\n\n var text = dataRangeText[1 - endsIndex];\n text = text != null ? text + '' : '';\n var visualMapModel = this.visualMapModel;\n var textGap = visualMapModel.get('textGap');\n var itemSize = visualMapModel.itemSize;\n var barGroup = this._shapes.barGroup;\n\n var position = this._applyTransform([itemSize[0] / 2, endsIndex === 0 ? -textGap : itemSize[1] + textGap], barGroup);\n\n var align = this._applyTransform(endsIndex === 0 ? 'bottom' : 'top', barGroup);\n\n var orient = this._orient;\n var textStyleModel = this.visualMapModel.textStyleModel;\n this.group.add(new graphic.Text({\n style: {\n x: position[0],\n y: position[1],\n textVerticalAlign: orient === 'horizontal' ? 'middle' : align,\n textAlign: orient === 'horizontal' ? align : 'center',\n text: text,\n textFont: textStyleModel.getFont(),\n textFill: textStyleModel.getTextColor()\n }\n }));\n },\n\n /**\n * @private\n */\n _renderBar: function (targetGroup) {\n var visualMapModel = this.visualMapModel;\n var shapes = this._shapes;\n var itemSize = visualMapModel.itemSize;\n var orient = this._orient;\n var useHandle = this._useHandle;\n var itemAlign = helper.getItemAlign(visualMapModel, this.api, itemSize);\n\n var barGroup = shapes.barGroup = this._createBarGroup(itemAlign); // Bar\n\n\n barGroup.add(shapes.outOfRange = createPolygon());\n barGroup.add(shapes.inRange = createPolygon(null, useHandle ? getCursor(this._orient) : null, zrUtil.bind(this._dragHandle, this, 'all', false), zrUtil.bind(this._dragHandle, this, 'all', true)));\n var textRect = visualMapModel.textStyleModel.getTextRect('国');\n var textSize = mathMax(textRect.width, textRect.height); // Handle\n\n if (useHandle) {\n shapes.handleThumbs = [];\n shapes.handleLabels = [];\n shapes.handleLabelPoints = [];\n\n this._createHandle(barGroup, 0, itemSize, textSize, orient, itemAlign);\n\n this._createHandle(barGroup, 1, itemSize, textSize, orient, itemAlign);\n }\n\n this._createIndicator(barGroup, itemSize, textSize, orient);\n\n targetGroup.add(barGroup);\n },\n\n /**\n * @private\n */\n _createHandle: function (barGroup, handleIndex, itemSize, textSize, orient) {\n var onDrift = zrUtil.bind(this._dragHandle, this, handleIndex, false);\n var onDragEnd = zrUtil.bind(this._dragHandle, this, handleIndex, true);\n var handleThumb = createPolygon(createHandlePoints(handleIndex, textSize), getCursor(this._orient), onDrift, onDragEnd);\n handleThumb.position[0] = itemSize[0];\n barGroup.add(handleThumb); // Text is always horizontal layout but should not be effected by\n // transform (orient/inverse). So label is built separately but not\n // use zrender/graphic/helper/RectText, and is located based on view\n // group (according to handleLabelPoint) but not barGroup.\n\n var textStyleModel = this.visualMapModel.textStyleModel;\n var handleLabel = new graphic.Text({\n draggable: true,\n drift: onDrift,\n onmousemove: function (e) {\n // Fot mobile devicem, prevent screen slider on the button.\n eventTool.stop(e.event);\n },\n ondragend: onDragEnd,\n style: {\n x: 0,\n y: 0,\n text: '',\n textFont: textStyleModel.getFont(),\n textFill: textStyleModel.getTextColor()\n }\n });\n this.group.add(handleLabel);\n var handleLabelPoint = [orient === 'horizontal' ? textSize / 2 : textSize * 1.5, orient === 'horizontal' ? handleIndex === 0 ? -(textSize * 1.5) : textSize * 1.5 : handleIndex === 0 ? -textSize / 2 : textSize / 2];\n var shapes = this._shapes;\n shapes.handleThumbs[handleIndex] = handleThumb;\n shapes.handleLabelPoints[handleIndex] = handleLabelPoint;\n shapes.handleLabels[handleIndex] = handleLabel;\n },\n\n /**\n * @private\n */\n _createIndicator: function (barGroup, itemSize, textSize, orient) {\n var indicator = createPolygon([[0, 0]], 'move');\n indicator.position[0] = itemSize[0];\n indicator.attr({\n invisible: true,\n silent: true\n });\n barGroup.add(indicator);\n var textStyleModel = this.visualMapModel.textStyleModel;\n var indicatorLabel = new graphic.Text({\n silent: true,\n invisible: true,\n style: {\n x: 0,\n y: 0,\n text: '',\n textFont: textStyleModel.getFont(),\n textFill: textStyleModel.getTextColor()\n }\n });\n this.group.add(indicatorLabel);\n var indicatorLabelPoint = [orient === 'horizontal' ? textSize / 2 : HOVER_LINK_OUT + 3, 0];\n var shapes = this._shapes;\n shapes.indicator = indicator;\n shapes.indicatorLabel = indicatorLabel;\n shapes.indicatorLabelPoint = indicatorLabelPoint;\n },\n\n /**\n * @private\n */\n _dragHandle: function (handleIndex, isEnd, dx, dy) {\n if (!this._useHandle) {\n return;\n }\n\n this._dragging = !isEnd;\n\n if (!isEnd) {\n // Transform dx, dy to bar coordination.\n var vertex = this._applyTransform([dx, dy], this._shapes.barGroup, true);\n\n this._updateInterval(handleIndex, vertex[1]); // Considering realtime, update view should be executed\n // before dispatch action.\n\n\n this._updateView();\n } // dragEnd do not dispatch action when realtime.\n\n\n if (isEnd === !this.visualMapModel.get('realtime')) {\n // jshint ignore:line\n this.api.dispatchAction({\n type: 'selectDataRange',\n from: this.uid,\n visualMapId: this.visualMapModel.id,\n selected: this._dataInterval.slice()\n });\n }\n\n if (isEnd) {\n !this._hovering && this._clearHoverLinkToSeries();\n } else if (useHoverLinkOnHandle(this.visualMapModel)) {\n this._doHoverLinkToSeries(this._handleEnds[handleIndex], false);\n }\n },\n\n /**\n * @private\n */\n _resetInterval: function () {\n var visualMapModel = this.visualMapModel;\n var dataInterval = this._dataInterval = visualMapModel.getSelected();\n var dataExtent = visualMapModel.getExtent();\n var sizeExtent = [0, visualMapModel.itemSize[1]];\n this._handleEnds = [linearMap(dataInterval[0], dataExtent, sizeExtent, true), linearMap(dataInterval[1], dataExtent, sizeExtent, true)];\n },\n\n /**\n * @private\n * @param {(number|string)} handleIndex 0 or 1 or 'all'\n * @param {number} dx\n * @param {number} dy\n */\n _updateInterval: function (handleIndex, delta) {\n delta = delta || 0;\n var visualMapModel = this.visualMapModel;\n var handleEnds = this._handleEnds;\n var sizeExtent = [0, visualMapModel.itemSize[1]];\n sliderMove(delta, handleEnds, sizeExtent, handleIndex, // cross is forbiden\n 0);\n var dataExtent = visualMapModel.getExtent(); // Update data interval.\n\n this._dataInterval = [linearMap(handleEnds[0], sizeExtent, dataExtent, true), linearMap(handleEnds[1], sizeExtent, dataExtent, true)];\n },\n\n /**\n * @private\n */\n _updateView: function (forSketch) {\n var visualMapModel = this.visualMapModel;\n var dataExtent = visualMapModel.getExtent();\n var shapes = this._shapes;\n var outOfRangeHandleEnds = [0, visualMapModel.itemSize[1]];\n var inRangeHandleEnds = forSketch ? outOfRangeHandleEnds : this._handleEnds;\n\n var visualInRange = this._createBarVisual(this._dataInterval, dataExtent, inRangeHandleEnds, 'inRange');\n\n var visualOutOfRange = this._createBarVisual(dataExtent, dataExtent, outOfRangeHandleEnds, 'outOfRange');\n\n shapes.inRange.setStyle({\n fill: visualInRange.barColor,\n opacity: visualInRange.opacity\n }).setShape('points', visualInRange.barPoints);\n shapes.outOfRange.setStyle({\n fill: visualOutOfRange.barColor,\n opacity: visualOutOfRange.opacity\n }).setShape('points', visualOutOfRange.barPoints);\n\n this._updateHandle(inRangeHandleEnds, visualInRange);\n },\n\n /**\n * @private\n */\n _createBarVisual: function (dataInterval, dataExtent, handleEnds, forceState) {\n var opts = {\n forceState: forceState,\n convertOpacityToAlpha: true\n };\n\n var colorStops = this._makeColorGradient(dataInterval, opts);\n\n var symbolSizes = [this.getControllerVisual(dataInterval[0], 'symbolSize', opts), this.getControllerVisual(dataInterval[1], 'symbolSize', opts)];\n\n var barPoints = this._createBarPoints(handleEnds, symbolSizes);\n\n return {\n barColor: new LinearGradient(0, 0, 0, 1, colorStops),\n barPoints: barPoints,\n handlesColor: [colorStops[0].color, colorStops[colorStops.length - 1].color]\n };\n },\n\n /**\n * @private\n */\n _makeColorGradient: function (dataInterval, opts) {\n // Considering colorHue, which is not linear, so we have to sample\n // to calculate gradient color stops, but not only caculate head\n // and tail.\n var sampleNumber = 100; // Arbitrary value.\n\n var colorStops = [];\n var step = (dataInterval[1] - dataInterval[0]) / sampleNumber;\n colorStops.push({\n color: this.getControllerVisual(dataInterval[0], 'color', opts),\n offset: 0\n });\n\n for (var i = 1; i < sampleNumber; i++) {\n var currValue = dataInterval[0] + step * i;\n\n if (currValue > dataInterval[1]) {\n break;\n }\n\n colorStops.push({\n color: this.getControllerVisual(currValue, 'color', opts),\n offset: i / sampleNumber\n });\n }\n\n colorStops.push({\n color: this.getControllerVisual(dataInterval[1], 'color', opts),\n offset: 1\n });\n return colorStops;\n },\n\n /**\n * @private\n */\n _createBarPoints: function (handleEnds, symbolSizes) {\n var itemSize = this.visualMapModel.itemSize;\n return [[itemSize[0] - symbolSizes[0], handleEnds[0]], [itemSize[0], handleEnds[0]], [itemSize[0], handleEnds[1]], [itemSize[0] - symbolSizes[1], handleEnds[1]]];\n },\n\n /**\n * @private\n */\n _createBarGroup: function (itemAlign) {\n var orient = this._orient;\n var inverse = this.visualMapModel.get('inverse');\n return new graphic.Group(orient === 'horizontal' && !inverse ? {\n scale: itemAlign === 'bottom' ? [1, 1] : [-1, 1],\n rotation: Math.PI / 2\n } : orient === 'horizontal' && inverse ? {\n scale: itemAlign === 'bottom' ? [-1, 1] : [1, 1],\n rotation: -Math.PI / 2\n } : orient === 'vertical' && !inverse ? {\n scale: itemAlign === 'left' ? [1, -1] : [-1, -1]\n } : {\n scale: itemAlign === 'left' ? [1, 1] : [-1, 1]\n });\n },\n\n /**\n * @private\n */\n _updateHandle: function (handleEnds, visualInRange) {\n if (!this._useHandle) {\n return;\n }\n\n var shapes = this._shapes;\n var visualMapModel = this.visualMapModel;\n var handleThumbs = shapes.handleThumbs;\n var handleLabels = shapes.handleLabels;\n each([0, 1], function (handleIndex) {\n var handleThumb = handleThumbs[handleIndex];\n handleThumb.setStyle('fill', visualInRange.handlesColor[handleIndex]);\n handleThumb.position[1] = handleEnds[handleIndex]; // Update handle label position.\n\n var textPoint = graphic.applyTransform(shapes.handleLabelPoints[handleIndex], graphic.getTransform(handleThumb, this.group));\n handleLabels[handleIndex].setStyle({\n x: textPoint[0],\n y: textPoint[1],\n text: visualMapModel.formatValueText(this._dataInterval[handleIndex]),\n textVerticalAlign: 'middle',\n textAlign: this._applyTransform(this._orient === 'horizontal' ? handleIndex === 0 ? 'bottom' : 'top' : 'left', shapes.barGroup)\n });\n }, this);\n },\n\n /**\n * @private\n * @param {number} cursorValue\n * @param {number} textValue\n * @param {string} [rangeSymbol]\n * @param {number} [halfHoverLinkSize]\n */\n _showIndicator: function (cursorValue, textValue, rangeSymbol, halfHoverLinkSize) {\n var visualMapModel = this.visualMapModel;\n var dataExtent = visualMapModel.getExtent();\n var itemSize = visualMapModel.itemSize;\n var sizeExtent = [0, itemSize[1]];\n var pos = linearMap(cursorValue, dataExtent, sizeExtent, true);\n var shapes = this._shapes;\n var indicator = shapes.indicator;\n\n if (!indicator) {\n return;\n }\n\n indicator.position[1] = pos;\n indicator.attr('invisible', false);\n indicator.setShape('points', createIndicatorPoints(!!rangeSymbol, halfHoverLinkSize, pos, itemSize[1]));\n var opts = {\n convertOpacityToAlpha: true\n };\n var color = this.getControllerVisual(cursorValue, 'color', opts);\n indicator.setStyle('fill', color); // Update handle label position.\n\n var textPoint = graphic.applyTransform(shapes.indicatorLabelPoint, graphic.getTransform(indicator, this.group));\n var indicatorLabel = shapes.indicatorLabel;\n indicatorLabel.attr('invisible', false);\n\n var align = this._applyTransform('left', shapes.barGroup);\n\n var orient = this._orient;\n indicatorLabel.setStyle({\n text: (rangeSymbol ? rangeSymbol : '') + visualMapModel.formatValueText(textValue),\n textVerticalAlign: orient === 'horizontal' ? align : 'middle',\n textAlign: orient === 'horizontal' ? 'center' : align,\n x: textPoint[0],\n y: textPoint[1]\n });\n },\n\n /**\n * @private\n */\n _enableHoverLinkToSeries: function () {\n var self = this;\n\n this._shapes.barGroup.on('mousemove', function (e) {\n self._hovering = true;\n\n if (!self._dragging) {\n var itemSize = self.visualMapModel.itemSize;\n\n var pos = self._applyTransform([e.offsetX, e.offsetY], self._shapes.barGroup, true, true); // For hover link show when hover handle, which might be\n // below or upper than sizeExtent.\n\n\n pos[1] = mathMin(mathMax(0, pos[1]), itemSize[1]);\n\n self._doHoverLinkToSeries(pos[1], 0 <= pos[0] && pos[0] <= itemSize[0]);\n }\n }).on('mouseout', function () {\n // When mouse is out of handle, hoverLink still need\n // to be displayed when realtime is set as false.\n self._hovering = false;\n !self._dragging && self._clearHoverLinkToSeries();\n });\n },\n\n /**\n * @private\n */\n _enableHoverLinkFromSeries: function () {\n var zr = this.api.getZr();\n\n if (this.visualMapModel.option.hoverLink) {\n zr.on('mouseover', this._hoverLinkFromSeriesMouseOver, this);\n zr.on('mouseout', this._hideIndicator, this);\n } else {\n this._clearHoverLinkFromSeries();\n }\n },\n\n /**\n * @private\n */\n _doHoverLinkToSeries: function (cursorPos, hoverOnBar) {\n var visualMapModel = this.visualMapModel;\n var itemSize = visualMapModel.itemSize;\n\n if (!visualMapModel.option.hoverLink) {\n return;\n }\n\n var sizeExtent = [0, itemSize[1]];\n var dataExtent = visualMapModel.getExtent(); // For hover link show when hover handle, which might be below or upper than sizeExtent.\n\n cursorPos = mathMin(mathMax(sizeExtent[0], cursorPos), sizeExtent[1]);\n var halfHoverLinkSize = getHalfHoverLinkSize(visualMapModel, dataExtent, sizeExtent);\n var hoverRange = [cursorPos - halfHoverLinkSize, cursorPos + halfHoverLinkSize];\n var cursorValue = linearMap(cursorPos, sizeExtent, dataExtent, true);\n var valueRange = [linearMap(hoverRange[0], sizeExtent, dataExtent, true), linearMap(hoverRange[1], sizeExtent, dataExtent, true)]; // Consider data range is out of visualMap range, see test/visualMap-continuous.html,\n // where china and india has very large population.\n\n hoverRange[0] < sizeExtent[0] && (valueRange[0] = -Infinity);\n hoverRange[1] > sizeExtent[1] && (valueRange[1] = Infinity); // Do not show indicator when mouse is over handle,\n // otherwise labels overlap, especially when dragging.\n\n if (hoverOnBar) {\n if (valueRange[0] === -Infinity) {\n this._showIndicator(cursorValue, valueRange[1], '< ', halfHoverLinkSize);\n } else if (valueRange[1] === Infinity) {\n this._showIndicator(cursorValue, valueRange[0], '> ', halfHoverLinkSize);\n } else {\n this._showIndicator(cursorValue, cursorValue, '≈ ', halfHoverLinkSize);\n }\n } // When realtime is set as false, handles, which are in barGroup,\n // also trigger hoverLink, which help user to realize where they\n // focus on when dragging. (see test/heatmap-large.html)\n // When realtime is set as true, highlight will not show when hover\n // handle, because the label on handle, which displays a exact value\n // but not range, might mislead users.\n\n\n var oldBatch = this._hoverLinkDataIndices;\n var newBatch = [];\n\n if (hoverOnBar || useHoverLinkOnHandle(visualMapModel)) {\n newBatch = this._hoverLinkDataIndices = visualMapModel.findTargetDataIndices(valueRange);\n }\n\n var resultBatches = modelUtil.compressBatches(oldBatch, newBatch);\n\n this._dispatchHighDown('downplay', helper.convertDataIndex(resultBatches[0]));\n\n this._dispatchHighDown('highlight', helper.convertDataIndex(resultBatches[1]));\n },\n\n /**\n * @private\n */\n _hoverLinkFromSeriesMouseOver: function (e) {\n var el = e.target;\n var visualMapModel = this.visualMapModel;\n\n if (!el || el.dataIndex == null) {\n return;\n }\n\n var dataModel = this.ecModel.getSeriesByIndex(el.seriesIndex);\n\n if (!visualMapModel.isTargetSeries(dataModel)) {\n return;\n }\n\n var data = dataModel.getData(el.dataType);\n var dim = data.getDimension(visualMapModel.getDataDimension(data));\n var value = data.get(dim, el.dataIndex, true);\n\n if (!isNaN(value)) {\n this._showIndicator(value, value);\n }\n },\n\n /**\n * @private\n */\n _hideIndicator: function () {\n var shapes = this._shapes;\n shapes.indicator && shapes.indicator.attr('invisible', true);\n shapes.indicatorLabel && shapes.indicatorLabel.attr('invisible', true);\n },\n\n /**\n * @private\n */\n _clearHoverLinkToSeries: function () {\n this._hideIndicator();\n\n var indices = this._hoverLinkDataIndices;\n\n this._dispatchHighDown('downplay', helper.convertDataIndex(indices));\n\n indices.length = 0;\n },\n\n /**\n * @private\n */\n _clearHoverLinkFromSeries: function () {\n this._hideIndicator();\n\n var zr = this.api.getZr();\n zr.off('mouseover', this._hoverLinkFromSeriesMouseOver);\n zr.off('mouseout', this._hideIndicator);\n },\n\n /**\n * @private\n */\n _applyTransform: function (vertex, element, inverse, global) {\n var transform = graphic.getTransform(element, global ? null : this.group);\n return graphic[zrUtil.isArray(vertex) ? 'applyTransform' : 'transformDirection'](vertex, transform, inverse);\n },\n\n /**\n * @private\n */\n _dispatchHighDown: function (type, batch) {\n batch && batch.length && this.api.dispatchAction({\n type: type,\n batch: batch\n });\n },\n\n /**\n * @override\n */\n dispose: function () {\n this._clearHoverLinkFromSeries();\n\n this._clearHoverLinkToSeries();\n },\n\n /**\n * @override\n */\n remove: function () {\n this._clearHoverLinkFromSeries();\n\n this._clearHoverLinkToSeries();\n }\n});\n\nfunction createPolygon(points, cursor, onDrift, onDragEnd) {\n return new graphic.Polygon({\n shape: {\n points: points\n },\n draggable: !!onDrift,\n cursor: cursor,\n drift: onDrift,\n onmousemove: function (e) {\n // Fot mobile devicem, prevent screen slider on the button.\n eventTool.stop(e.event);\n },\n ondragend: onDragEnd\n });\n}\n\nfunction createHandlePoints(handleIndex, textSize) {\n return handleIndex === 0 ? [[0, 0], [textSize, 0], [textSize, -textSize]] : [[0, 0], [textSize, 0], [textSize, textSize]];\n}\n\nfunction createIndicatorPoints(isRange, halfHoverLinkSize, pos, extentMax) {\n return isRange ? [// indicate range\n [0, -mathMin(halfHoverLinkSize, mathMax(pos, 0))], [HOVER_LINK_OUT, 0], [0, mathMin(halfHoverLinkSize, mathMax(extentMax - pos, 0))]] : [// indicate single value\n [0, 0], [5, -5], [5, 5]];\n}\n\nfunction getHalfHoverLinkSize(visualMapModel, dataExtent, sizeExtent) {\n var halfHoverLinkSize = HOVER_LINK_SIZE / 2;\n var hoverLinkDataSize = visualMapModel.get('hoverLinkDataSize');\n\n if (hoverLinkDataSize) {\n halfHoverLinkSize = linearMap(hoverLinkDataSize, dataExtent, sizeExtent, true) / 2;\n }\n\n return halfHoverLinkSize;\n}\n\nfunction useHoverLinkOnHandle(visualMapModel) {\n var hoverLinkOnHandle = visualMapModel.get('hoverLinkOnHandle');\n return !!(hoverLinkOnHandle == null ? visualMapModel.get('realtime') : hoverLinkOnHandle);\n}\n\nfunction getCursor(orient) {\n return orient === 'vertical' ? 'ns-resize' : 'ew-resize';\n}\n\nvar _default = ContinuousView;\nmodule.exports = _default;","var _config = require(\"./config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar zrender = require(\"zrender/lib/zrender\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar colorTool = require(\"zrender/lib/tool/color\");\n\nvar env = require(\"zrender/lib/core/env\");\n\nvar timsort = require(\"zrender/lib/core/timsort\");\n\nvar Eventful = require(\"zrender/lib/mixin/Eventful\");\n\nvar GlobalModel = require(\"./model/Global\");\n\nvar ExtensionAPI = require(\"./ExtensionAPI\");\n\nvar CoordinateSystemManager = require(\"./CoordinateSystem\");\n\nvar OptionManager = require(\"./model/OptionManager\");\n\nvar backwardCompat = require(\"./preprocessor/backwardCompat\");\n\nvar ComponentModel = require(\"./model/Component\");\n\nvar SeriesModel = require(\"./model/Series\");\n\nvar ComponentView = require(\"./view/Component\");\n\nvar ChartView = require(\"./view/Chart\");\n\nvar graphic = require(\"./util/graphic\");\n\nvar modelUtil = require(\"./util/model\");\n\nvar _throttle = require(\"./util/throttle\");\n\nvar throttle = _throttle.throttle;\n\nvar seriesColor = require(\"./visual/seriesColor\");\n\nvar loadingDefault = require(\"./loading/default\");\n\n/*!\n * ECharts, a javascript interactive chart library.\n *\n * Copyright (c) 2015, Baidu Inc.\n * All rights reserved.\n *\n * LICENSE\n * https://github.com/ecomfe/echarts/blob/master/LICENSE.txt\n */\nvar each = zrUtil.each;\nvar parseClassType = ComponentModel.parseClassType;\nvar version = '3.8.5';\nvar dependencies = {\n zrender: '3.7.4'\n};\nvar PRIORITY_PROCESSOR_FILTER = 1000;\nvar PRIORITY_PROCESSOR_STATISTIC = 5000;\nvar PRIORITY_VISUAL_LAYOUT = 1000;\nvar PRIORITY_VISUAL_GLOBAL = 2000;\nvar PRIORITY_VISUAL_CHART = 3000;\nvar PRIORITY_VISUAL_COMPONENT = 4000; // FIXME\n// necessary?\n\nvar PRIORITY_VISUAL_BRUSH = 5000;\nvar PRIORITY = {\n PROCESSOR: {\n FILTER: PRIORITY_PROCESSOR_FILTER,\n STATISTIC: PRIORITY_PROCESSOR_STATISTIC\n },\n VISUAL: {\n LAYOUT: PRIORITY_VISUAL_LAYOUT,\n GLOBAL: PRIORITY_VISUAL_GLOBAL,\n CHART: PRIORITY_VISUAL_CHART,\n COMPONENT: PRIORITY_VISUAL_COMPONENT,\n BRUSH: PRIORITY_VISUAL_BRUSH\n }\n}; // Main process have three entries: `setOption`, `dispatchAction` and `resize`,\n// where they must not be invoked nestedly, except the only case: invoke\n// dispatchAction with updateMethod \"none\" in main process.\n// This flag is used to carry out this rule.\n// All events will be triggered out side main process (i.e. when !this[IN_MAIN_PROCESS]).\n\nvar IN_MAIN_PROCESS = '__flagInMainProcess';\nvar HAS_GRADIENT_OR_PATTERN_BG = '__hasGradientOrPatternBg';\nvar OPTION_UPDATED = '__optionUpdated';\nvar ACTION_REG = /^[a-zA-Z0-9_]+$/;\n\nfunction createRegisterEventWithLowercaseName(method) {\n return function (eventName, handler, context) {\n // Event name is all lowercase\n eventName = eventName && eventName.toLowerCase();\n Eventful.prototype[method].call(this, eventName, handler, context);\n };\n}\n/**\n * @module echarts~MessageCenter\n */\n\n\nfunction MessageCenter() {\n Eventful.call(this);\n}\n\nMessageCenter.prototype.on = createRegisterEventWithLowercaseName('on');\nMessageCenter.prototype.off = createRegisterEventWithLowercaseName('off');\nMessageCenter.prototype.one = createRegisterEventWithLowercaseName('one');\nzrUtil.mixin(MessageCenter, Eventful);\n/**\n * @module echarts~ECharts\n */\n\nfunction ECharts(dom, theme, opts) {\n opts = opts || {}; // Get theme by name\n\n if (typeof theme === 'string') {\n theme = themeStorage[theme];\n }\n /**\n * @type {string}\n */\n\n\n this.id;\n /**\n * Group id\n * @type {string}\n */\n\n this.group;\n /**\n * @type {HTMLElement}\n * @private\n */\n\n this._dom = dom;\n var defaultRenderer = 'canvas';\n\n /**\n * @type {module:zrender/ZRender}\n * @private\n */\n var zr = this._zr = zrender.init(dom, {\n renderer: opts.renderer || defaultRenderer,\n devicePixelRatio: opts.devicePixelRatio,\n width: opts.width,\n height: opts.height\n });\n /**\n * Expect 60 pfs.\n * @type {Function}\n * @private\n */\n\n this._throttledZrFlush = throttle(zrUtil.bind(zr.flush, zr), 17);\n var theme = zrUtil.clone(theme);\n theme && backwardCompat(theme, true);\n /**\n * @type {Object}\n * @private\n */\n\n this._theme = theme;\n /**\n * @type {Array.}\n * @private\n */\n\n this._chartsViews = [];\n /**\n * @type {Object.}\n * @private\n */\n\n this._chartsMap = {};\n /**\n * @type {Array.}\n * @private\n */\n\n this._componentsViews = [];\n /**\n * @type {Object.}\n * @private\n */\n\n this._componentsMap = {};\n /**\n * @type {module:echarts/CoordinateSystem}\n * @private\n */\n\n this._coordSysMgr = new CoordinateSystemManager();\n /**\n * @type {module:echarts/ExtensionAPI}\n * @private\n */\n\n this._api = createExtensionAPI(this);\n Eventful.call(this);\n /**\n * @type {module:echarts~MessageCenter}\n * @private\n */\n\n this._messageCenter = new MessageCenter(); // Init mouse events\n\n this._initEvents(); // In case some people write `window.onresize = chart.resize`\n\n\n this.resize = zrUtil.bind(this.resize, this); // Can't dispatch action during rendering procedure\n\n this._pendingActions = []; // Sort on demand\n\n function prioritySortFunc(a, b) {\n return a.prio - b.prio;\n }\n\n timsort(visualFuncs, prioritySortFunc);\n timsort(dataProcessorFuncs, prioritySortFunc);\n zr.animation.on('frame', this._onframe, this); // ECharts instance can be used as value.\n\n zrUtil.setAsPrimitive(this);\n}\n\nvar echartsProto = ECharts.prototype;\n\nechartsProto._onframe = function () {\n // Lazy update\n if (this[OPTION_UPDATED]) {\n var silent = this[OPTION_UPDATED].silent;\n this[IN_MAIN_PROCESS] = true;\n updateMethods.prepareAndUpdate.call(this);\n this[IN_MAIN_PROCESS] = false;\n this[OPTION_UPDATED] = false;\n flushPendingActions.call(this, silent);\n triggerUpdatedEvent.call(this, silent);\n }\n};\n/**\n * @return {HTMLElement}\n */\n\n\nechartsProto.getDom = function () {\n return this._dom;\n};\n/**\n * @return {module:zrender~ZRender}\n */\n\n\nechartsProto.getZr = function () {\n return this._zr;\n};\n/**\n * Usage:\n * chart.setOption(option, notMerge, lazyUpdate);\n * chart.setOption(option, {\n * notMerge: ...,\n * lazyUpdate: ...,\n * silent: ...\n * });\n *\n * @param {Object} option\n * @param {Object|boolean} [opts] opts or notMerge.\n * @param {boolean} [opts.notMerge=false]\n * @param {boolean} [opts.lazyUpdate=false] Useful when setOption frequently.\n */\n\n\nechartsProto.setOption = function (option, notMerge, lazyUpdate) {\n var silent;\n\n if (zrUtil.isObject(notMerge)) {\n lazyUpdate = notMerge.lazyUpdate;\n silent = notMerge.silent;\n notMerge = notMerge.notMerge;\n }\n\n this[IN_MAIN_PROCESS] = true;\n\n if (!this._model || notMerge) {\n var optionManager = new OptionManager(this._api);\n var theme = this._theme;\n var ecModel = this._model = new GlobalModel(null, null, theme, optionManager);\n ecModel.init(null, null, theme, optionManager);\n }\n\n this._model.setOption(option, optionPreprocessorFuncs);\n\n if (lazyUpdate) {\n this[OPTION_UPDATED] = {\n silent: silent\n };\n this[IN_MAIN_PROCESS] = false;\n } else {\n updateMethods.prepareAndUpdate.call(this); // Ensure zr refresh sychronously, and then pixel in canvas can be\n // fetched after `setOption`.\n\n this._zr.flush();\n\n this[OPTION_UPDATED] = false;\n this[IN_MAIN_PROCESS] = false;\n flushPendingActions.call(this, silent);\n triggerUpdatedEvent.call(this, silent);\n }\n};\n/**\n * @DEPRECATED\n */\n\n\nechartsProto.setTheme = function () {\n console.log('ECharts#setTheme() is DEPRECATED in ECharts 3.0');\n};\n/**\n * @return {module:echarts/model/Global}\n */\n\n\nechartsProto.getModel = function () {\n return this._model;\n};\n/**\n * @return {Object}\n */\n\n\nechartsProto.getOption = function () {\n return this._model && this._model.getOption();\n};\n/**\n * @return {number}\n */\n\n\nechartsProto.getWidth = function () {\n return this._zr.getWidth();\n};\n/**\n * @return {number}\n */\n\n\nechartsProto.getHeight = function () {\n return this._zr.getHeight();\n};\n/**\n * @return {number}\n */\n\n\nechartsProto.getDevicePixelRatio = function () {\n return this._zr.painter.dpr || window.devicePixelRatio || 1;\n};\n/**\n * Get canvas which has all thing rendered\n * @param {Object} opts\n * @param {string} [opts.backgroundColor]\n * @return {string}\n */\n\n\nechartsProto.getRenderedCanvas = function (opts) {\n if (!env.canvasSupported) {\n return;\n }\n\n opts = opts || {};\n opts.pixelRatio = opts.pixelRatio || 1;\n opts.backgroundColor = opts.backgroundColor || this._model.get('backgroundColor');\n var zr = this._zr;\n var list = zr.storage.getDisplayList(); // Stop animations\n\n zrUtil.each(list, function (el) {\n el.stopAnimation(true);\n });\n return zr.painter.getRenderedCanvas(opts);\n};\n/**\n * Get svg data url\n * @return {string}\n */\n\n\nechartsProto.getSvgDataUrl = function () {\n if (!env.svgSupported) {\n return;\n }\n\n var zr = this._zr;\n var list = zr.storage.getDisplayList(); // Stop animations\n\n zrUtil.each(list, function (el) {\n el.stopAnimation(true);\n });\n return zr.painter.pathToSvg();\n};\n/**\n * @return {string}\n * @param {Object} opts\n * @param {string} [opts.type='png']\n * @param {string} [opts.pixelRatio=1]\n * @param {string} [opts.backgroundColor]\n * @param {string} [opts.excludeComponents]\n */\n\n\nechartsProto.getDataURL = function (opts) {\n opts = opts || {};\n var excludeComponents = opts.excludeComponents;\n var ecModel = this._model;\n var excludesComponentViews = [];\n var self = this;\n each(excludeComponents, function (componentType) {\n ecModel.eachComponent({\n mainType: componentType\n }, function (component) {\n var view = self._componentsMap[component.__viewId];\n\n if (!view.group.ignore) {\n excludesComponentViews.push(view);\n view.group.ignore = true;\n }\n });\n });\n var url = this._zr.painter.getType() === 'svg' ? this.getSvgDataUrl() : this.getRenderedCanvas(opts).toDataURL('image/' + (opts && opts.type || 'png'));\n each(excludesComponentViews, function (view) {\n view.group.ignore = false;\n });\n return url;\n};\n/**\n * @return {string}\n * @param {Object} opts\n * @param {string} [opts.type='png']\n * @param {string} [opts.pixelRatio=1]\n * @param {string} [opts.backgroundColor]\n */\n\n\nechartsProto.getConnectedDataURL = function (opts) {\n if (!env.canvasSupported) {\n return;\n }\n\n var groupId = this.group;\n var mathMin = Math.min;\n var mathMax = Math.max;\n var MAX_NUMBER = Infinity;\n\n if (connectedGroups[groupId]) {\n var left = MAX_NUMBER;\n var top = MAX_NUMBER;\n var right = -MAX_NUMBER;\n var bottom = -MAX_NUMBER;\n var canvasList = [];\n var dpr = opts && opts.pixelRatio || 1;\n zrUtil.each(instances, function (chart, id) {\n if (chart.group === groupId) {\n var canvas = chart.getRenderedCanvas(zrUtil.clone(opts));\n var boundingRect = chart.getDom().getBoundingClientRect();\n left = mathMin(boundingRect.left, left);\n top = mathMin(boundingRect.top, top);\n right = mathMax(boundingRect.right, right);\n bottom = mathMax(boundingRect.bottom, bottom);\n canvasList.push({\n dom: canvas,\n left: boundingRect.left,\n top: boundingRect.top\n });\n }\n });\n left *= dpr;\n top *= dpr;\n right *= dpr;\n bottom *= dpr;\n var width = right - left;\n var height = bottom - top;\n var targetCanvas = zrUtil.createCanvas();\n targetCanvas.width = width;\n targetCanvas.height = height;\n var zr = zrender.init(targetCanvas);\n each(canvasList, function (item) {\n var img = new graphic.Image({\n style: {\n x: item.left * dpr - left,\n y: item.top * dpr - top,\n image: item.dom\n }\n });\n zr.add(img);\n });\n zr.refreshImmediately();\n return targetCanvas.toDataURL('image/' + (opts && opts.type || 'png'));\n } else {\n return this.getDataURL(opts);\n }\n};\n/**\n * Convert from logical coordinate system to pixel coordinate system.\n * See CoordinateSystem#convertToPixel.\n * @param {string|Object} finder\n * If string, e.g., 'geo', means {geoIndex: 0}.\n * If Object, could contain some of these properties below:\n * {\n * seriesIndex / seriesId / seriesName,\n * geoIndex / geoId, geoName,\n * bmapIndex / bmapId / bmapName,\n * xAxisIndex / xAxisId / xAxisName,\n * yAxisIndex / yAxisId / yAxisName,\n * gridIndex / gridId / gridName,\n * ... (can be extended)\n * }\n * @param {Array|number} value\n * @return {Array|number} result\n */\n\n\nechartsProto.convertToPixel = zrUtil.curry(doConvertPixel, 'convertToPixel');\n/**\n * Convert from pixel coordinate system to logical coordinate system.\n * See CoordinateSystem#convertFromPixel.\n * @param {string|Object} finder\n * If string, e.g., 'geo', means {geoIndex: 0}.\n * If Object, could contain some of these properties below:\n * {\n * seriesIndex / seriesId / seriesName,\n * geoIndex / geoId / geoName,\n * bmapIndex / bmapId / bmapName,\n * xAxisIndex / xAxisId / xAxisName,\n * yAxisIndex / yAxisId / yAxisName\n * gridIndex / gridId / gridName,\n * ... (can be extended)\n * }\n * @param {Array|number} value\n * @return {Array|number} result\n */\n\nechartsProto.convertFromPixel = zrUtil.curry(doConvertPixel, 'convertFromPixel');\n\nfunction doConvertPixel(methodName, finder, value) {\n var ecModel = this._model;\n\n var coordSysList = this._coordSysMgr.getCoordinateSystems();\n\n var result;\n finder = modelUtil.parseFinder(ecModel, finder);\n\n for (var i = 0; i < coordSysList.length; i++) {\n var coordSys = coordSysList[i];\n\n if (coordSys[methodName] && (result = coordSys[methodName](ecModel, finder, value)) != null) {\n return result;\n }\n }\n}\n/**\n * Is the specified coordinate systems or components contain the given pixel point.\n * @param {string|Object} finder\n * If string, e.g., 'geo', means {geoIndex: 0}.\n * If Object, could contain some of these properties below:\n * {\n * seriesIndex / seriesId / seriesName,\n * geoIndex / geoId / geoName,\n * bmapIndex / bmapId / bmapName,\n * xAxisIndex / xAxisId / xAxisName,\n * yAxisIndex / yAxisId / yAxisName,\n * gridIndex / gridId / gridName,\n * ... (can be extended)\n * }\n * @param {Array|number} value\n * @return {boolean} result\n */\n\n\nechartsProto.containPixel = function (finder, value) {\n var ecModel = this._model;\n var result;\n finder = modelUtil.parseFinder(ecModel, finder);\n zrUtil.each(finder, function (models, key) {\n key.indexOf('Models') >= 0 && zrUtil.each(models, function (model) {\n var coordSys = model.coordinateSystem;\n\n if (coordSys && coordSys.containPoint) {\n result |= !!coordSys.containPoint(value);\n } else if (key === 'seriesModels') {\n var view = this._chartsMap[model.__viewId];\n\n if (view && view.containPoint) {\n result |= view.containPoint(value, model);\n } else {}\n } else {}\n }, this);\n }, this);\n return !!result;\n};\n/**\n * Get visual from series or data.\n * @param {string|Object} finder\n * If string, e.g., 'series', means {seriesIndex: 0}.\n * If Object, could contain some of these properties below:\n * {\n * seriesIndex / seriesId / seriesName,\n * dataIndex / dataIndexInside\n * }\n * If dataIndex is not specified, series visual will be fetched,\n * but not data item visual.\n * If all of seriesIndex, seriesId, seriesName are not specified,\n * visual will be fetched from first series.\n * @param {string} visualType 'color', 'symbol', 'symbolSize'\n */\n\n\nechartsProto.getVisual = function (finder, visualType) {\n var ecModel = this._model;\n finder = modelUtil.parseFinder(ecModel, finder, {\n defaultMainType: 'series'\n });\n var seriesModel = finder.seriesModel;\n var data = seriesModel.getData();\n var dataIndexInside = finder.hasOwnProperty('dataIndexInside') ? finder.dataIndexInside : finder.hasOwnProperty('dataIndex') ? data.indexOfRawIndex(finder.dataIndex) : null;\n return dataIndexInside != null ? data.getItemVisual(dataIndexInside, visualType) : data.getVisual(visualType);\n};\n/**\n * Get view of corresponding component model\n * @param {module:echarts/model/Component} componentModel\n * @return {module:echarts/view/Component}\n */\n\n\nechartsProto.getViewOfComponentModel = function (componentModel) {\n return this._componentsMap[componentModel.__viewId];\n};\n/**\n * Get view of corresponding series model\n * @param {module:echarts/model/Series} seriesModel\n * @return {module:echarts/view/Chart}\n */\n\n\nechartsProto.getViewOfSeriesModel = function (seriesModel) {\n return this._chartsMap[seriesModel.__viewId];\n};\n\nvar updateMethods = {\n /**\n * @param {Object} payload\n * @private\n */\n update: function (payload) {\n // console.profile && console.profile('update');\n var ecModel = this._model;\n var api = this._api;\n var coordSysMgr = this._coordSysMgr;\n var zr = this._zr; // update before setOption\n\n if (!ecModel) {\n return;\n } // Fixme First time update ?\n\n\n ecModel.restoreData(); // TODO\n // Save total ecModel here for undo/redo (after restoring data and before processing data).\n // Undo (restoration of total ecModel) can be carried out in 'action' or outside API call.\n // Create new coordinate system each update\n // In LineView may save the old coordinate system and use it to get the orignal point\n\n coordSysMgr.create(this._model, this._api);\n processData.call(this, ecModel, api);\n stackSeriesData.call(this, ecModel);\n coordSysMgr.update(ecModel, api);\n doVisualEncoding.call(this, ecModel, payload);\n doRender.call(this, ecModel, payload); // Set background\n\n var backgroundColor = ecModel.get('backgroundColor') || 'transparent';\n var painter = zr.painter; // TODO all use clearColor ?\n\n if (painter.isSingleCanvas && painter.isSingleCanvas()) {\n zr.configLayer(0, {\n clearColor: backgroundColor\n });\n } else {\n // In IE8\n if (!env.canvasSupported) {\n var colorArr = colorTool.parse(backgroundColor);\n backgroundColor = colorTool.stringify(colorArr, 'rgb');\n\n if (colorArr[3] === 0) {\n backgroundColor = 'transparent';\n }\n }\n\n if (backgroundColor.colorStops || backgroundColor.image) {\n // Gradient background\n // FIXME Fixed layer?\n zr.configLayer(0, {\n clearColor: backgroundColor\n });\n this[HAS_GRADIENT_OR_PATTERN_BG] = true;\n this._dom.style.background = 'transparent';\n } else {\n if (this[HAS_GRADIENT_OR_PATTERN_BG]) {\n zr.configLayer(0, {\n clearColor: null\n });\n }\n\n this[HAS_GRADIENT_OR_PATTERN_BG] = false;\n this._dom.style.background = backgroundColor;\n }\n }\n\n each(postUpdateFuncs, function (func) {\n func(ecModel, api);\n }); // console.profile && console.profileEnd('update');\n },\n\n /**\n * @param {Object} payload\n * @private\n */\n updateView: function (payload) {\n var ecModel = this._model; // update before setOption\n\n if (!ecModel) {\n return;\n }\n\n ecModel.eachSeries(function (seriesModel) {\n seriesModel.getData().clearAllVisual();\n });\n doVisualEncoding.call(this, ecModel, payload);\n invokeUpdateMethod.call(this, 'updateView', ecModel, payload);\n },\n\n /**\n * @param {Object} payload\n * @private\n */\n updateVisual: function (payload) {\n var ecModel = this._model; // update before setOption\n\n if (!ecModel) {\n return;\n }\n\n ecModel.eachSeries(function (seriesModel) {\n seriesModel.getData().clearAllVisual();\n });\n doVisualEncoding.call(this, ecModel, payload, true);\n invokeUpdateMethod.call(this, 'updateVisual', ecModel, payload);\n },\n\n /**\n * @param {Object} payload\n * @private\n */\n updateLayout: function (payload) {\n var ecModel = this._model; // update before setOption\n\n if (!ecModel) {\n return;\n }\n\n doLayout.call(this, ecModel, payload);\n invokeUpdateMethod.call(this, 'updateLayout', ecModel, payload);\n },\n\n /**\n * @param {Object} payload\n * @private\n */\n prepareAndUpdate: function (payload) {\n var ecModel = this._model;\n prepareView.call(this, 'component', ecModel);\n prepareView.call(this, 'chart', ecModel);\n updateMethods.update.call(this, payload);\n }\n};\n/**\n * @private\n */\n\nfunction updateDirectly(ecIns, method, payload, mainType, subType) {\n var ecModel = ecIns._model; // broadcast\n\n if (!mainType) {\n each(ecIns._componentsViews.concat(ecIns._chartsViews), callView);\n return;\n }\n\n var query = {};\n query[mainType + 'Id'] = payload[mainType + 'Id'];\n query[mainType + 'Index'] = payload[mainType + 'Index'];\n query[mainType + 'Name'] = payload[mainType + 'Name'];\n var condition = {\n mainType: mainType,\n query: query\n };\n subType && (condition.subType = subType); // subType may be '' by parseClassType;\n // If dispatchAction before setOption, do nothing.\n\n ecModel && ecModel.eachComponent(condition, function (model, index) {\n callView(ecIns[mainType === 'series' ? '_chartsMap' : '_componentsMap'][model.__viewId]);\n }, ecIns);\n\n function callView(view) {\n view && view.__alive && view[method] && view[method](view.__model, ecModel, ecIns._api, payload);\n }\n}\n/**\n * Resize the chart\n * @param {Object} opts\n * @param {number} [opts.width] Can be 'auto' (the same as null/undefined)\n * @param {number} [opts.height] Can be 'auto' (the same as null/undefined)\n * @param {boolean} [opts.silent=false]\n */\n\n\nechartsProto.resize = function (opts) {\n this[IN_MAIN_PROCESS] = true;\n\n this._zr.resize(opts);\n\n var optionChanged = this._model && this._model.resetOption('media');\n\n var updateMethod = optionChanged ? 'prepareAndUpdate' : 'update';\n updateMethods[updateMethod].call(this); // Resize loading effect\n\n this._loadingFX && this._loadingFX.resize();\n this[IN_MAIN_PROCESS] = false;\n var silent = opts && opts.silent;\n flushPendingActions.call(this, silent);\n triggerUpdatedEvent.call(this, silent);\n};\n/**\n * Show loading effect\n * @param {string} [name='default']\n * @param {Object} [cfg]\n */\n\n\nechartsProto.showLoading = function (name, cfg) {\n if (zrUtil.isObject(name)) {\n cfg = name;\n name = '';\n }\n\n name = name || 'default';\n this.hideLoading();\n\n if (!loadingEffects[name]) {\n return;\n }\n\n var el = loadingEffects[name](this._api, cfg);\n var zr = this._zr;\n this._loadingFX = el;\n zr.add(el);\n};\n/**\n * Hide loading effect\n */\n\n\nechartsProto.hideLoading = function () {\n this._loadingFX && this._zr.remove(this._loadingFX);\n this._loadingFX = null;\n};\n/**\n * @param {Object} eventObj\n * @return {Object}\n */\n\n\nechartsProto.makeActionFromEvent = function (eventObj) {\n var payload = zrUtil.extend({}, eventObj);\n payload.type = eventActionMap[eventObj.type];\n return payload;\n};\n/**\n * @pubilc\n * @param {Object} payload\n * @param {string} [payload.type] Action type\n * @param {Object|boolean} [opt] If pass boolean, means opt.silent\n * @param {boolean} [opt.silent=false] Whether trigger events.\n * @param {boolean} [opt.flush=undefined]\n * true: Flush immediately, and then pixel in canvas can be fetched\n * immediately. Caution: it might affect performance.\n * false: Not not flush.\n * undefined: Auto decide whether perform flush.\n */\n\n\nechartsProto.dispatchAction = function (payload, opt) {\n if (!zrUtil.isObject(opt)) {\n opt = {\n silent: !!opt\n };\n }\n\n if (!actions[payload.type]) {\n return;\n } // Avoid dispatch action before setOption. Especially in `connect`.\n\n\n if (!this._model) {\n return;\n } // May dispatchAction in rendering procedure\n\n\n if (this[IN_MAIN_PROCESS]) {\n this._pendingActions.push(payload);\n\n return;\n }\n\n doDispatchAction.call(this, payload, opt.silent);\n\n if (opt.flush) {\n this._zr.flush(true);\n } else if (opt.flush !== false && env.browser.weChat) {\n // In WeChat embeded browser, `requestAnimationFrame` and `setInterval`\n // hang when sliding page (on touch event), which cause that zr does not\n // refresh util user interaction finished, which is not expected.\n // But `dispatchAction` may be called too frequently when pan on touch\n // screen, which impacts performance if do not throttle them.\n this._throttledZrFlush();\n }\n\n flushPendingActions.call(this, opt.silent);\n triggerUpdatedEvent.call(this, opt.silent);\n};\n\nfunction doDispatchAction(payload, silent) {\n var payloadType = payload.type;\n var escapeConnect = payload.escapeConnect;\n var actionWrap = actions[payloadType];\n var actionInfo = actionWrap.actionInfo;\n var cptType = (actionInfo.update || 'update').split(':');\n var updateMethod = cptType.pop();\n cptType = cptType[0] != null && parseClassType(cptType[0]);\n this[IN_MAIN_PROCESS] = true;\n var payloads = [payload];\n var batched = false; // Batch action\n\n if (payload.batch) {\n batched = true;\n payloads = zrUtil.map(payload.batch, function (item) {\n item = zrUtil.defaults(zrUtil.extend({}, item), payload);\n item.batch = null;\n return item;\n });\n }\n\n var eventObjBatch = [];\n var eventObj;\n var isHighDown = payloadType === 'highlight' || payloadType === 'downplay';\n each(payloads, function (batchItem) {\n // Action can specify the event by return it.\n eventObj = actionWrap.action(batchItem, this._model, this._api); // Emit event outside\n\n eventObj = eventObj || zrUtil.extend({}, batchItem); // Convert type to eventType\n\n eventObj.type = actionInfo.event || eventObj.type;\n eventObjBatch.push(eventObj); // light update does not perform data process, layout and visual.\n\n if (isHighDown) {\n // method, payload, mainType, subType\n updateDirectly(this, updateMethod, batchItem, 'series');\n } else if (cptType) {\n updateDirectly(this, updateMethod, batchItem, cptType.main, cptType.sub);\n }\n }, this);\n\n if (updateMethod !== 'none' && !isHighDown && !cptType) {\n // Still dirty\n if (this[OPTION_UPDATED]) {\n // FIXME Pass payload ?\n updateMethods.prepareAndUpdate.call(this, payload);\n this[OPTION_UPDATED] = false;\n } else {\n updateMethods[updateMethod].call(this, payload);\n }\n } // Follow the rule of action batch\n\n\n if (batched) {\n eventObj = {\n type: actionInfo.event || payloadType,\n escapeConnect: escapeConnect,\n batch: eventObjBatch\n };\n } else {\n eventObj = eventObjBatch[0];\n }\n\n this[IN_MAIN_PROCESS] = false;\n !silent && this._messageCenter.trigger(eventObj.type, eventObj);\n}\n\nfunction flushPendingActions(silent) {\n var pendingActions = this._pendingActions;\n\n while (pendingActions.length) {\n var payload = pendingActions.shift();\n doDispatchAction.call(this, payload, silent);\n }\n}\n\nfunction triggerUpdatedEvent(silent) {\n !silent && this.trigger('updated');\n}\n/**\n * Register event\n * @method\n */\n\n\nechartsProto.on = createRegisterEventWithLowercaseName('on');\nechartsProto.off = createRegisterEventWithLowercaseName('off');\nechartsProto.one = createRegisterEventWithLowercaseName('one');\n/**\n * @param {string} methodName\n * @private\n */\n\nfunction invokeUpdateMethod(methodName, ecModel, payload) {\n var api = this._api; // Update all components\n\n each(this._componentsViews, function (component) {\n var componentModel = component.__model;\n component[methodName](componentModel, ecModel, api, payload);\n updateZ(componentModel, component);\n }, this); // Upate all charts\n\n ecModel.eachSeries(function (seriesModel, idx) {\n var chart = this._chartsMap[seriesModel.__viewId];\n chart[methodName](seriesModel, ecModel, api, payload);\n updateZ(seriesModel, chart);\n updateProgressiveAndBlend(seriesModel, chart);\n }, this); // If use hover layer\n\n updateHoverLayerStatus(this._zr, ecModel); // Post render\n\n each(postUpdateFuncs, function (func) {\n func(ecModel, api);\n });\n}\n/**\n * Prepare view instances of charts and components\n * @param {module:echarts/model/Global} ecModel\n * @private\n */\n\n\nfunction prepareView(type, ecModel) {\n var isComponent = type === 'component';\n var viewList = isComponent ? this._componentsViews : this._chartsViews;\n var viewMap = isComponent ? this._componentsMap : this._chartsMap;\n var zr = this._zr;\n\n for (var i = 0; i < viewList.length; i++) {\n viewList[i].__alive = false;\n }\n\n ecModel[isComponent ? 'eachComponent' : 'eachSeries'](function (componentType, model) {\n if (isComponent) {\n if (componentType === 'series') {\n return;\n }\n } else {\n model = componentType;\n } // Consider: id same and type changed.\n\n\n var viewId = '_ec_' + model.id + '_' + model.type;\n var view = viewMap[viewId];\n\n if (!view) {\n var classType = parseClassType(model.type);\n var Clazz = isComponent ? ComponentView.getClass(classType.main, classType.sub) : ChartView.getClass(classType.sub);\n\n if (Clazz) {\n view = new Clazz();\n view.init(ecModel, this._api);\n viewMap[viewId] = view;\n viewList.push(view);\n zr.add(view.group);\n } else {\n // Error\n return;\n }\n }\n\n model.__viewId = view.__id = viewId;\n view.__alive = true;\n view.__model = model;\n view.group.__ecComponentInfo = {\n mainType: model.mainType,\n index: model.componentIndex\n };\n }, this);\n\n for (var i = 0; i < viewList.length;) {\n var view = viewList[i];\n\n if (!view.__alive) {\n zr.remove(view.group);\n view.dispose(ecModel, this._api);\n viewList.splice(i, 1);\n delete viewMap[view.__id];\n view.__id = view.group.__ecComponentInfo = null;\n } else {\n i++;\n }\n }\n}\n/**\n * Processor data in each series\n *\n * @param {module:echarts/model/Global} ecModel\n * @private\n */\n\n\nfunction processData(ecModel, api) {\n each(dataProcessorFuncs, function (process) {\n process.func(ecModel, api);\n });\n}\n/**\n * @private\n */\n\n\nfunction stackSeriesData(ecModel) {\n var stackedDataMap = {};\n ecModel.eachSeries(function (series) {\n var stack = series.get('stack');\n var data = series.getData();\n\n if (stack && data.type === 'list') {\n var previousStack = stackedDataMap[stack]; // Avoid conflict with Object.prototype\n\n if (stackedDataMap.hasOwnProperty(stack) && previousStack) {\n data.stackedOn = previousStack;\n }\n\n stackedDataMap[stack] = data;\n }\n });\n}\n/**\n * Layout before each chart render there series, special visual encoding stage\n *\n * @param {module:echarts/model/Global} ecModel\n * @private\n */\n\n\nfunction doLayout(ecModel, payload) {\n var api = this._api;\n each(visualFuncs, function (visual) {\n if (visual.isLayout) {\n visual.func(ecModel, api, payload);\n }\n });\n}\n/**\n * Encode visual infomation from data after data processing\n *\n * @param {module:echarts/model/Global} ecModel\n * @param {object} layout\n * @param {boolean} [excludesLayout]\n * @private\n */\n\n\nfunction doVisualEncoding(ecModel, payload, excludesLayout) {\n var api = this._api;\n ecModel.clearColorPalette();\n ecModel.eachSeries(function (seriesModel) {\n seriesModel.clearColorPalette();\n });\n each(visualFuncs, function (visual) {\n (!excludesLayout || !visual.isLayout) && visual.func(ecModel, api, payload);\n });\n}\n/**\n * Render each chart and component\n * @private\n */\n\n\nfunction doRender(ecModel, payload) {\n var api = this._api; // Render all components\n\n each(this._componentsViews, function (componentView) {\n var componentModel = componentView.__model;\n componentView.render(componentModel, ecModel, api, payload);\n updateZ(componentModel, componentView);\n }, this);\n each(this._chartsViews, function (chart) {\n chart.__alive = false;\n }, this); // Render all charts\n\n ecModel.eachSeries(function (seriesModel, idx) {\n var chartView = this._chartsMap[seriesModel.__viewId];\n chartView.__alive = true;\n chartView.render(seriesModel, ecModel, api, payload);\n chartView.group.silent = !!seriesModel.get('silent');\n updateZ(seriesModel, chartView);\n updateProgressiveAndBlend(seriesModel, chartView);\n }, this); // If use hover layer\n\n updateHoverLayerStatus(this._zr, ecModel); // Remove groups of unrendered charts\n\n each(this._chartsViews, function (chart) {\n if (!chart.__alive) {\n chart.remove(ecModel, api);\n }\n }, this);\n}\n\nvar MOUSE_EVENT_NAMES = ['click', 'dblclick', 'mouseover', 'mouseout', 'mousemove', 'mousedown', 'mouseup', 'globalout', 'contextmenu'];\n/**\n * @private\n */\n\nechartsProto._initEvents = function () {\n each(MOUSE_EVENT_NAMES, function (eveName) {\n this._zr.on(eveName, function (e) {\n var ecModel = this.getModel();\n var el = e.target;\n var params; // no e.target when 'globalout'.\n\n if (eveName === 'globalout') {\n params = {};\n } else if (el && el.dataIndex != null) {\n var dataModel = el.dataModel || ecModel.getSeriesByIndex(el.seriesIndex);\n params = dataModel && dataModel.getDataParams(el.dataIndex, el.dataType) || {};\n } // If element has custom eventData of components\n else if (el && el.eventData) {\n params = zrUtil.extend({}, el.eventData);\n }\n\n if (params) {\n params.event = e;\n params.type = eveName;\n this.trigger(eveName, params);\n }\n }, this);\n }, this);\n each(eventActionMap, function (actionType, eventType) {\n this._messageCenter.on(eventType, function (event) {\n this.trigger(eventType, event);\n }, this);\n }, this);\n};\n/**\n * @return {boolean}\n */\n\n\nechartsProto.isDisposed = function () {\n return this._disposed;\n};\n/**\n * Clear\n */\n\n\nechartsProto.clear = function () {\n this.setOption({\n series: []\n }, true);\n};\n/**\n * Dispose instance\n */\n\n\nechartsProto.dispose = function () {\n if (this._disposed) {\n return;\n }\n\n this._disposed = true;\n var api = this._api;\n var ecModel = this._model;\n each(this._componentsViews, function (component) {\n component.dispose(ecModel, api);\n });\n each(this._chartsViews, function (chart) {\n chart.dispose(ecModel, api);\n }); // Dispose after all views disposed\n\n this._zr.dispose();\n\n delete instances[this.id];\n};\n\nzrUtil.mixin(ECharts, Eventful);\n\nfunction updateHoverLayerStatus(zr, ecModel) {\n var storage = zr.storage;\n var elCount = 0;\n storage.traverse(function (el) {\n if (!el.isGroup) {\n elCount++;\n }\n });\n\n if (elCount > ecModel.get('hoverLayerThreshold') && !env.node) {\n storage.traverse(function (el) {\n if (!el.isGroup) {\n el.useHoverLayer = true;\n }\n });\n }\n}\n/**\n * Update chart progressive and blend.\n * @param {module:echarts/model/Series|module:echarts/model/Component} model\n * @param {module:echarts/view/Component|module:echarts/view/Chart} view\n */\n\n\nfunction updateProgressiveAndBlend(seriesModel, chartView) {\n // Progressive configuration\n var elCount = 0;\n chartView.group.traverse(function (el) {\n if (el.type !== 'group' && !el.ignore) {\n elCount++;\n }\n });\n var frameDrawNum = +seriesModel.get('progressive');\n var needProgressive = elCount > seriesModel.get('progressiveThreshold') && frameDrawNum && !env.node;\n\n if (needProgressive) {\n chartView.group.traverse(function (el) {\n // FIXME marker and other components\n if (!el.isGroup) {\n el.progressive = needProgressive ? Math.floor(elCount++ / frameDrawNum) : -1;\n\n if (needProgressive) {\n el.stopAnimation(true);\n }\n }\n });\n } // Blend configration\n\n\n var blendMode = seriesModel.get('blendMode') || null;\n chartView.group.traverse(function (el) {\n // FIXME marker and other components\n if (!el.isGroup) {\n el.setStyle('blend', blendMode);\n }\n });\n}\n/**\n * @param {module:echarts/model/Series|module:echarts/model/Component} model\n * @param {module:echarts/view/Component|module:echarts/view/Chart} view\n */\n\n\nfunction updateZ(model, view) {\n var z = model.get('z');\n var zlevel = model.get('zlevel'); // Set z and zlevel\n\n view.group.traverse(function (el) {\n if (el.type !== 'group') {\n z != null && (el.z = z);\n zlevel != null && (el.zlevel = zlevel);\n }\n });\n}\n\nfunction createExtensionAPI(ecInstance) {\n var coordSysMgr = ecInstance._coordSysMgr;\n return zrUtil.extend(new ExtensionAPI(ecInstance), {\n // Inject methods\n getCoordinateSystems: zrUtil.bind(coordSysMgr.getCoordinateSystems, coordSysMgr),\n getComponentByElement: function (el) {\n while (el) {\n var modelInfo = el.__ecComponentInfo;\n\n if (modelInfo != null) {\n return ecInstance._model.getComponent(modelInfo.mainType, modelInfo.index);\n }\n\n el = el.parent;\n }\n }\n });\n}\n/**\n * @type {Object} key: actionType.\n * @inner\n */\n\n\nvar actions = {};\n/**\n * Map eventType to actionType\n * @type {Object}\n */\n\nvar eventActionMap = {};\n/**\n * Data processor functions of each stage\n * @type {Array.>}\n * @inner\n */\n\nvar dataProcessorFuncs = [];\n/**\n * @type {Array.}\n * @inner\n */\n\nvar optionPreprocessorFuncs = [];\n/**\n * @type {Array.}\n * @inner\n */\n\nvar postUpdateFuncs = [];\n/**\n * Visual encoding functions of each stage\n * @type {Array.>}\n * @inner\n */\n\nvar visualFuncs = [];\n/**\n * Theme storage\n * @type {Object.}\n */\n\nvar themeStorage = {};\n/**\n * Loading effects\n */\n\nvar loadingEffects = {};\nvar instances = {};\nvar connectedGroups = {};\nvar idBase = new Date() - 0;\nvar groupIdBase = new Date() - 0;\nvar DOM_ATTRIBUTE_KEY = '_echarts_instance_';\nvar mapDataStores = {};\n\nfunction enableConnect(chart) {\n var STATUS_PENDING = 0;\n var STATUS_UPDATING = 1;\n var STATUS_UPDATED = 2;\n var STATUS_KEY = '__connectUpdateStatus';\n\n function updateConnectedChartsStatus(charts, status) {\n for (var i = 0; i < charts.length; i++) {\n var otherChart = charts[i];\n otherChart[STATUS_KEY] = status;\n }\n }\n\n zrUtil.each(eventActionMap, function (actionType, eventType) {\n chart._messageCenter.on(eventType, function (event) {\n if (connectedGroups[chart.group] && chart[STATUS_KEY] !== STATUS_PENDING) {\n if (event && event.escapeConnect) {\n return;\n }\n\n var action = chart.makeActionFromEvent(event);\n var otherCharts = [];\n zrUtil.each(instances, function (otherChart) {\n if (otherChart !== chart && otherChart.group === chart.group) {\n otherCharts.push(otherChart);\n }\n });\n updateConnectedChartsStatus(otherCharts, STATUS_PENDING);\n each(otherCharts, function (otherChart) {\n if (otherChart[STATUS_KEY] !== STATUS_UPDATING) {\n otherChart.dispatchAction(action);\n }\n });\n updateConnectedChartsStatus(otherCharts, STATUS_UPDATED);\n }\n });\n });\n}\n/**\n * @param {HTMLElement} dom\n * @param {Object} [theme]\n * @param {Object} opts\n * @param {number} [opts.devicePixelRatio] Use window.devicePixelRatio by default\n * @param {string} [opts.renderer] Currently only 'canvas' is supported.\n * @param {number} [opts.width] Use clientWidth of the input `dom` by default.\n * Can be 'auto' (the same as null/undefined)\n * @param {number} [opts.height] Use clientHeight of the input `dom` by default.\n * Can be 'auto' (the same as null/undefined)\n */\n\n\nfunction init(dom, theme, opts) {\n var existInstance = getInstanceByDom(dom);\n\n if (existInstance) {\n return existInstance;\n }\n\n var chart = new ECharts(dom, theme, opts);\n chart.id = 'ec_' + idBase++;\n instances[chart.id] = chart;\n\n if (dom.setAttribute) {\n dom.setAttribute(DOM_ATTRIBUTE_KEY, chart.id);\n } else {\n dom[DOM_ATTRIBUTE_KEY] = chart.id;\n }\n\n enableConnect(chart);\n return chart;\n}\n/**\n * @return {string|Array.} groupId\n */\n\n\nfunction connect(groupId) {\n // Is array of charts\n if (zrUtil.isArray(groupId)) {\n var charts = groupId;\n groupId = null; // If any chart has group\n\n zrUtil.each(charts, function (chart) {\n if (chart.group != null) {\n groupId = chart.group;\n }\n });\n groupId = groupId || 'g_' + groupIdBase++;\n zrUtil.each(charts, function (chart) {\n chart.group = groupId;\n });\n }\n\n connectedGroups[groupId] = true;\n return groupId;\n}\n/**\n * @DEPRECATED\n * @return {string} groupId\n */\n\n\nfunction disConnect(groupId) {\n connectedGroups[groupId] = false;\n}\n/**\n * @return {string} groupId\n */\n\n\nvar disconnect = disConnect;\n/**\n * Dispose a chart instance\n * @param {module:echarts~ECharts|HTMLDomElement|string} chart\n */\n\nfunction dispose(chart) {\n if (typeof chart === 'string') {\n chart = instances[chart];\n } else if (!(chart instanceof ECharts)) {\n // Try to treat as dom\n chart = getInstanceByDom(chart);\n }\n\n if (chart instanceof ECharts && !chart.isDisposed()) {\n chart.dispose();\n }\n}\n/**\n * @param {HTMLElement} dom\n * @return {echarts~ECharts}\n */\n\n\nfunction getInstanceByDom(dom) {\n var key;\n\n if (dom.getAttribute) {\n key = dom.getAttribute(DOM_ATTRIBUTE_KEY);\n } else {\n key = dom[DOM_ATTRIBUTE_KEY];\n }\n\n return instances[key];\n}\n/**\n * @param {string} key\n * @return {echarts~ECharts}\n */\n\n\nfunction getInstanceById(key) {\n return instances[key];\n}\n/**\n * Register theme\n */\n\n\nfunction registerTheme(name, theme) {\n themeStorage[name] = theme;\n}\n/**\n * Register option preprocessor\n * @param {Function} preprocessorFunc\n */\n\n\nfunction registerPreprocessor(preprocessorFunc) {\n optionPreprocessorFuncs.push(preprocessorFunc);\n}\n/**\n * @param {number} [priority=1000]\n * @param {Function} processorFunc\n */\n\n\nfunction registerProcessor(priority, processorFunc) {\n if (typeof priority === 'function') {\n processorFunc = priority;\n priority = PRIORITY_PROCESSOR_FILTER;\n }\n\n dataProcessorFuncs.push({\n prio: priority,\n func: processorFunc\n });\n}\n/**\n * Register postUpdater\n * @param {Function} postUpdateFunc\n */\n\n\nfunction registerPostUpdate(postUpdateFunc) {\n postUpdateFuncs.push(postUpdateFunc);\n}\n/**\n * Usage:\n * registerAction('someAction', 'someEvent', function () { ... });\n * registerAction('someAction', function () { ... });\n * registerAction(\n * {type: 'someAction', event: 'someEvent', update: 'updateView'},\n * function () { ... }\n * );\n *\n * @param {(string|Object)} actionInfo\n * @param {string} actionInfo.type\n * @param {string} [actionInfo.event]\n * @param {string} [actionInfo.update]\n * @param {string} [eventName]\n * @param {Function} action\n */\n\n\nfunction registerAction(actionInfo, eventName, action) {\n if (typeof eventName === 'function') {\n action = eventName;\n eventName = '';\n }\n\n var actionType = zrUtil.isObject(actionInfo) ? actionInfo.type : [actionInfo, actionInfo = {\n event: eventName\n }][0]; // Event name is all lowercase\n\n actionInfo.event = (actionInfo.event || actionType).toLowerCase();\n eventName = actionInfo.event; // Validate action type and event name.\n\n zrUtil.assert(ACTION_REG.test(actionType) && ACTION_REG.test(eventName));\n\n if (!actions[actionType]) {\n actions[actionType] = {\n action: action,\n actionInfo: actionInfo\n };\n }\n\n eventActionMap[eventName] = actionType;\n}\n/**\n * @param {string} type\n * @param {*} CoordinateSystem\n */\n\n\nfunction registerCoordinateSystem(type, CoordinateSystem) {\n CoordinateSystemManager.register(type, CoordinateSystem);\n}\n/**\n * Get dimensions of specified coordinate system.\n * @param {string} type\n * @return {Array.}\n */\n\n\nfunction getCoordinateSystemDimensions(type) {\n var coordSysCreator = CoordinateSystemManager.get(type);\n\n if (coordSysCreator) {\n return coordSysCreator.getDimensionsInfo ? coordSysCreator.getDimensionsInfo() : coordSysCreator.dimensions.slice();\n }\n}\n/**\n * Layout is a special stage of visual encoding\n * Most visual encoding like color are common for different chart\n * But each chart has it's own layout algorithm\n *\n * @param {number} [priority=1000]\n * @param {Function} layoutFunc\n */\n\n\nfunction registerLayout(priority, layoutFunc) {\n if (typeof priority === 'function') {\n layoutFunc = priority;\n priority = PRIORITY_VISUAL_LAYOUT;\n }\n\n visualFuncs.push({\n prio: priority,\n func: layoutFunc,\n isLayout: true\n });\n}\n/**\n * @param {number} [priority=3000]\n * @param {Function} visualFunc\n */\n\n\nfunction registerVisual(priority, visualFunc) {\n if (typeof priority === 'function') {\n visualFunc = priority;\n priority = PRIORITY_VISUAL_CHART;\n }\n\n visualFuncs.push({\n prio: priority,\n func: visualFunc\n });\n}\n/**\n * @param {string} name\n */\n\n\nfunction registerLoading(name, loadingFx) {\n loadingEffects[name] = loadingFx;\n}\n/**\n * @param {Object} opts\n * @param {string} [superClass]\n */\n\n\nfunction extendComponentModel(opts\n/*, superClass*/\n) {\n // var Clazz = ComponentModel;\n // if (superClass) {\n // var classType = parseClassType(superClass);\n // Clazz = ComponentModel.getClass(classType.main, classType.sub, true);\n // }\n return ComponentModel.extend(opts);\n}\n/**\n * @param {Object} opts\n * @param {string} [superClass]\n */\n\n\nfunction extendComponentView(opts\n/*, superClass*/\n) {\n // var Clazz = ComponentView;\n // if (superClass) {\n // var classType = parseClassType(superClass);\n // Clazz = ComponentView.getClass(classType.main, classType.sub, true);\n // }\n return ComponentView.extend(opts);\n}\n/**\n * @param {Object} opts\n * @param {string} [superClass]\n */\n\n\nfunction extendSeriesModel(opts\n/*, superClass*/\n) {\n // var Clazz = SeriesModel;\n // if (superClass) {\n // superClass = 'series.' + superClass.replace('series.', '');\n // var classType = parseClassType(superClass);\n // Clazz = ComponentModel.getClass(classType.main, classType.sub, true);\n // }\n return SeriesModel.extend(opts);\n}\n/**\n * @param {Object} opts\n * @param {string} [superClass]\n */\n\n\nfunction extendChartView(opts\n/*, superClass*/\n) {\n // var Clazz = ChartView;\n // if (superClass) {\n // superClass = superClass.replace('series.', '');\n // var classType = parseClassType(superClass);\n // Clazz = ChartView.getClass(classType.main, true);\n // }\n return ChartView.extend(opts);\n}\n/**\n * ZRender need a canvas context to do measureText.\n * But in node environment canvas may be created by node-canvas.\n * So we need to specify how to create a canvas instead of using document.createElement('canvas')\n *\n * Be careful of using it in the browser.\n *\n * @param {Function} creator\n * @example\n * var Canvas = require('canvas');\n * var echarts = require('echarts');\n * echarts.setCanvasCreator(function () {\n * // Small size is enough.\n * return new Canvas(32, 32);\n * });\n */\n\n\nfunction setCanvasCreator(creator) {\n zrUtil.$override('createCanvas', creator);\n}\n/**\n * @param {string} mapName\n * @param {Object|string} geoJson\n * @param {Object} [specialAreas]\n *\n * @example\n * $.get('USA.json', function (geoJson) {\n * echarts.registerMap('USA', geoJson);\n * // Or\n * echarts.registerMap('USA', {\n * geoJson: geoJson,\n * specialAreas: {}\n * })\n * });\n */\n\n\nfunction registerMap(mapName, geoJson, specialAreas) {\n if (geoJson.geoJson && !geoJson.features) {\n specialAreas = geoJson.specialAreas;\n geoJson = geoJson.geoJson;\n }\n\n if (typeof geoJson === 'string') {\n geoJson = typeof JSON !== 'undefined' && JSON.parse ? JSON.parse(geoJson) : new Function('return (' + geoJson + ');')();\n }\n\n mapDataStores[mapName] = {\n geoJson: geoJson,\n specialAreas: specialAreas\n };\n}\n/**\n * @param {string} mapName\n * @return {Object}\n */\n\n\nfunction getMap(mapName) {\n return mapDataStores[mapName];\n}\n\nregisterVisual(PRIORITY_VISUAL_GLOBAL, seriesColor);\nregisterPreprocessor(backwardCompat);\nregisterLoading('default', loadingDefault); // Default actions\n\nregisterAction({\n type: 'highlight',\n event: 'highlight',\n update: 'highlight'\n}, zrUtil.noop);\nregisterAction({\n type: 'downplay',\n event: 'downplay',\n update: 'downplay'\n}, zrUtil.noop); // For backward compatibility, where the namespace `dataTool` will\n// be mounted on `echarts` is the extension `dataTool` is imported.\n\nvar dataTool = {};\nexports.version = version;\nexports.dependencies = dependencies;\nexports.PRIORITY = PRIORITY;\nexports.init = init;\nexports.connect = connect;\nexports.disConnect = disConnect;\nexports.disconnect = disconnect;\nexports.dispose = dispose;\nexports.getInstanceByDom = getInstanceByDom;\nexports.getInstanceById = getInstanceById;\nexports.registerTheme = registerTheme;\nexports.registerPreprocessor = registerPreprocessor;\nexports.registerProcessor = registerProcessor;\nexports.registerPostUpdate = registerPostUpdate;\nexports.registerAction = registerAction;\nexports.registerCoordinateSystem = registerCoordinateSystem;\nexports.getCoordinateSystemDimensions = getCoordinateSystemDimensions;\nexports.registerLayout = registerLayout;\nexports.registerVisual = registerVisual;\nexports.registerLoading = registerLoading;\nexports.extendComponentModel = extendComponentModel;\nexports.extendComponentView = extendComponentView;\nexports.extendSeriesModel = extendSeriesModel;\nexports.extendChartView = extendChartView;\nexports.setCanvasCreator = setCanvasCreator;\nexports.registerMap = registerMap;\nexports.getMap = getMap;\nexports.dataTool = dataTool;\nvar ___ec_export = require(\"./export\");\n(function () {\n for (var key in ___ec_export) {\n if (___ec_export.hasOwnProperty(key)) {\n exports[key] = ___ec_export[key];\n }\n }\n})();","var _core = require(\"./core\");\n\nvar createElement = _core.createElement;\n\nvar PathProxy = require(\"../core/PathProxy\");\n\nvar BoundingRect = require(\"../core/BoundingRect\");\n\nvar textContain = require(\"../contain/text\");\n\nvar textHelper = require(\"../graphic/helper/text\");\n\nvar Text = require(\"../graphic/Text\");\n\n// TODO\n// 1. shadow\n// 2. Image: sx, sy, sw, sh\nvar CMD = PathProxy.CMD;\nvar arrayJoin = Array.prototype.join;\nvar NONE = 'none';\nvar mathRound = Math.round;\nvar mathSin = Math.sin;\nvar mathCos = Math.cos;\nvar PI = Math.PI;\nvar PI2 = Math.PI * 2;\nvar degree = 180 / PI;\nvar EPSILON = 1e-4;\n\nfunction round4(val) {\n return mathRound(val * 1e4) / 1e4;\n}\n\nfunction isAroundZero(val) {\n return val < EPSILON && val > -EPSILON;\n}\n\nfunction pathHasFill(style, isText) {\n var fill = isText ? style.textFill : style.fill;\n return fill != null && fill !== NONE;\n}\n\nfunction pathHasStroke(style, isText) {\n var stroke = isText ? style.textStroke : style.stroke;\n return stroke != null && stroke !== NONE;\n}\n\nfunction setTransform(svgEl, m) {\n if (m) {\n attr(svgEl, 'transform', 'matrix(' + arrayJoin.call(m, ',') + ')');\n }\n}\n\nfunction attr(el, key, val) {\n if (!val || val.type !== 'linear' && val.type !== 'radial') {\n // Don't set attribute for gradient, since it need new dom nodes\n el.setAttribute(key, val);\n }\n}\n\nfunction attrXLink(el, key, val) {\n el.setAttributeNS('http://www.w3.org/1999/xlink', key, val);\n}\n\nfunction bindStyle(svgEl, style, isText) {\n if (pathHasFill(style, isText)) {\n var fill = isText ? style.textFill : style.fill;\n fill = fill === 'transparent' ? NONE : fill;\n /**\n * FIXME:\n * This is a temporary fix for Chrome's clipping bug\n * that happens when a clip-path is referring another one.\n * This fix should be used before Chrome's bug is fixed.\n * For an element that has clip-path, and fill is none,\n * set it to be \"rgba(0, 0, 0, 0.002)\" will hide the element.\n * Otherwise, it will show black fill color.\n * 0.002 is used because this won't work for alpha values smaller\n * than 0.002.\n *\n * See\n * https://bugs.chromium.org/p/chromium/issues/detail?id=659790\n * for more information.\n */\n\n if (svgEl.getAttribute('clip-path') !== 'none' && fill === NONE) {\n fill = 'rgba(0, 0, 0, 0.002)';\n }\n\n attr(svgEl, 'fill', fill);\n attr(svgEl, 'fill-opacity', style.opacity);\n } else {\n attr(svgEl, 'fill', NONE);\n }\n\n if (pathHasStroke(style, isText)) {\n var stroke = isText ? style.textStroke : style.stroke;\n stroke = stroke === 'transparent' ? NONE : stroke;\n attr(svgEl, 'stroke', stroke);\n var strokeWidth = isText ? style.textStrokeWidth : style.lineWidth;\n var strokeScale = style.strokeNoScale ? style.host.getLineScale() : 1;\n attr(svgEl, 'stroke-width', strokeWidth / strokeScale);\n attr(svgEl, 'paint-order', 'stroke');\n attr(svgEl, 'stroke-opacity', style.opacity);\n var lineDash = style.lineDash;\n\n if (lineDash) {\n attr(svgEl, 'stroke-dasharray', style.lineDash.join(','));\n attr(svgEl, 'stroke-dashoffset', mathRound(style.lineDashOffset || 0));\n } else {\n attr(svgEl, 'stroke-dasharray', '');\n } // PENDING\n\n\n style.lineCap && attr(svgEl, 'stroke-linecap', style.lineCap);\n style.lineJoin && attr(svgEl, 'stroke-linejoin', style.lineJoin);\n style.miterLimit && attr(svgEl, 'stroke-miterlimit', style.miterLimit);\n } else {\n attr(svgEl, 'stroke', NONE);\n }\n}\n/***************************************************\n * PATH\n **************************************************/\n\n\nfunction pathDataToString(path) {\n var str = [];\n var data = path.data;\n var dataLength = path.len();\n\n for (var i = 0; i < dataLength;) {\n var cmd = data[i++];\n var cmdStr = '';\n var nData = 0;\n\n switch (cmd) {\n case CMD.M:\n cmdStr = 'M';\n nData = 2;\n break;\n\n case CMD.L:\n cmdStr = 'L';\n nData = 2;\n break;\n\n case CMD.Q:\n cmdStr = 'Q';\n nData = 4;\n break;\n\n case CMD.C:\n cmdStr = 'C';\n nData = 6;\n break;\n\n case CMD.A:\n var cx = data[i++];\n var cy = data[i++];\n var rx = data[i++];\n var ry = data[i++];\n var theta = data[i++];\n var dTheta = data[i++];\n var psi = data[i++];\n var clockwise = data[i++];\n var dThetaPositive = Math.abs(dTheta);\n var isCircle = isAroundZero(dThetaPositive % PI2) && !isAroundZero(dThetaPositive);\n var large = false;\n\n if (dThetaPositive >= PI2) {\n large = true;\n } else if (isAroundZero(dThetaPositive)) {\n large = false;\n } else {\n large = (dTheta > -PI && dTheta < 0 || dTheta > PI) === !!clockwise;\n }\n\n var x0 = round4(cx + rx * mathCos(theta));\n var y0 = round4(cy + ry * mathSin(theta)); // It will not draw if start point and end point are exactly the same\n // We need to shift the end point with a small value\n // FIXME A better way to draw circle ?\n\n if (isCircle) {\n if (clockwise) {\n dTheta = PI2 - 1e-4;\n } else {\n dTheta = -PI2 + 1e-4;\n }\n\n large = true;\n\n if (i === 9) {\n // Move to (x0, y0) only when CMD.A comes at the\n // first position of a shape.\n // For instance, when drawing a ring, CMD.A comes\n // after CMD.M, so it's unnecessary to move to\n // (x0, y0).\n str.push('M', x0, y0);\n }\n }\n\n var x = round4(cx + rx * mathCos(theta + dTheta));\n var y = round4(cy + ry * mathSin(theta + dTheta)); // FIXME Ellipse\n\n str.push('A', round4(rx), round4(ry), mathRound(psi * degree), +large, +clockwise, x, y);\n break;\n\n case CMD.Z:\n cmdStr = 'Z';\n break;\n\n case CMD.R:\n var x = round4(data[i++]);\n var y = round4(data[i++]);\n var w = round4(data[i++]);\n var h = round4(data[i++]);\n str.push('M', x, y, 'L', x + w, y, 'L', x + w, y + h, 'L', x, y + h, 'L', x, y);\n break;\n }\n\n cmdStr && str.push(cmdStr);\n\n for (var j = 0; j < nData; j++) {\n // PENDING With scale\n str.push(round4(data[i++]));\n }\n }\n\n return str.join(' ');\n}\n\nvar svgPath = {};\n\nsvgPath.brush = function (el) {\n var style = el.style;\n var svgEl = el.__svgEl;\n\n if (!svgEl) {\n svgEl = createElement('path');\n el.__svgEl = svgEl;\n }\n\n if (!el.path) {\n el.createPathProxy();\n }\n\n var path = el.path;\n\n if (el.__dirtyPath) {\n path.beginPath();\n el.buildPath(path, el.shape);\n el.__dirtyPath = false;\n var pathStr = pathDataToString(path);\n\n if (pathStr.indexOf('NaN') < 0) {\n // Ignore illegal path, which may happen such in out-of-range\n // data in Calendar series.\n attr(svgEl, 'd', pathStr);\n }\n }\n\n bindStyle(svgEl, style);\n setTransform(svgEl, el.transform);\n\n if (style.text != null) {\n svgTextDrawRectText(el, el.getBoundingRect());\n }\n};\n/***************************************************\n * IMAGE\n **************************************************/\n\n\nvar svgImage = {};\n\nsvgImage.brush = function (el) {\n var style = el.style;\n var image = style.image;\n\n if (image instanceof HTMLImageElement) {\n var src = image.src;\n image = src;\n }\n\n if (!image) {\n return;\n }\n\n var x = style.x || 0;\n var y = style.y || 0;\n var dw = style.width;\n var dh = style.height;\n var svgEl = el.__svgEl;\n\n if (!svgEl) {\n svgEl = createElement('image');\n el.__svgEl = svgEl;\n }\n\n if (image !== el.__imageSrc) {\n attrXLink(svgEl, 'href', image); // Caching image src\n\n el.__imageSrc = image;\n }\n\n attr(svgEl, 'width', dw);\n attr(svgEl, 'height', dh);\n attr(svgEl, 'x', x);\n attr(svgEl, 'y', y);\n setTransform(svgEl, el.transform);\n\n if (style.text != null) {\n svgTextDrawRectText(el, el.getBoundingRect());\n }\n};\n/***************************************************\n * TEXT\n **************************************************/\n\n\nvar svgText = {};\nvar tmpRect = new BoundingRect();\n\nvar svgTextDrawRectText = function (el, rect, textRect) {\n var style = el.style;\n el.__dirty && textHelper.normalizeTextStyle(style, true);\n var text = style.text; // Convert to string\n\n if (text == null) {\n // Draw no text only when text is set to null, but not ''\n return;\n } else {\n text += '';\n }\n\n var textSvgEl = el.__textSvgEl;\n\n if (!textSvgEl) {\n textSvgEl = createElement('text');\n el.__textSvgEl = textSvgEl;\n }\n\n bindStyle(textSvgEl, style, true);\n\n if (el instanceof Text || el.style.transformText) {\n // Transform text with element\n setTransform(textSvgEl, el.transform);\n } else {\n if (el.transform) {\n tmpRect.copy(rect);\n tmpRect.applyTransform(el.transform);\n rect = tmpRect;\n } else {\n var pos = el.transformCoordToGlobal(rect.x, rect.y);\n rect.x = pos[0];\n rect.y = pos[1];\n }\n }\n\n var x;\n var y;\n var textPosition = style.textPosition;\n var distance = style.textDistance;\n var align = style.textAlign || 'left';\n\n if (typeof style.fontSize === 'number') {\n style.fontSize += 'px';\n }\n\n var font = style.font || [style.fontStyle || '', style.fontWeight || '', style.fontSize || '', style.fontFamily || ''].join(' ') || textContain.DEFAULT_FONT;\n var verticalAlign = getVerticalAlignForSvg(style.textVerticalAlign);\n textRect = textContain.getBoundingRect(text, font, align, verticalAlign);\n var lineHeight = textRect.lineHeight; // Text position represented by coord\n\n if (textPosition instanceof Array) {\n x = rect.x + textPosition[0];\n y = rect.y + textPosition[1];\n } else {\n var newPos = textContain.adjustTextPositionOnRect(textPosition, rect, distance);\n x = newPos.x;\n y = newPos.y;\n verticalAlign = getVerticalAlignForSvg(newPos.textVerticalAlign);\n align = newPos.textAlign;\n }\n\n attr(textSvgEl, 'alignment-baseline', verticalAlign);\n\n if (font) {\n textSvgEl.style.font = font;\n }\n\n var textPadding = style.textPadding; // Make baseline top\n\n attr(textSvgEl, 'x', x);\n attr(textSvgEl, 'y', y);\n var textLines = text.split('\\n');\n var nTextLines = textLines.length;\n var textAnchor = align; // PENDING\n\n if (textAnchor === 'left') {\n textAnchor = 'start';\n textPadding && (x += textPadding[3]);\n } else if (textAnchor === 'right') {\n textAnchor = 'end';\n textPadding && (x -= textPadding[1]);\n } else if (textAnchor === 'center') {\n textAnchor = 'middle';\n textPadding && (x += (textPadding[3] - textPadding[1]) / 2);\n }\n\n var dy = 0;\n\n if (verticalAlign === 'baseline') {\n dy = -textRect.height + lineHeight;\n textPadding && (dy -= textPadding[2]);\n } else if (verticalAlign === 'middle') {\n dy = (-textRect.height + lineHeight) / 2;\n textPadding && (y += (textPadding[0] - textPadding[2]) / 2);\n } else {\n textPadding && (dy += textPadding[0]);\n } // Font may affect position of each tspan elements\n\n\n if (el.__text !== text || el.__textFont !== font) {\n var tspanList = el.__tspanList || [];\n el.__tspanList = tspanList;\n\n for (var i = 0; i < nTextLines; i++) {\n // Using cached tspan elements\n var tspan = tspanList[i];\n\n if (!tspan) {\n tspan = tspanList[i] = createElement('tspan');\n textSvgEl.appendChild(tspan);\n attr(tspan, 'alignment-baseline', verticalAlign);\n attr(tspan, 'text-anchor', textAnchor);\n } else {\n tspan.innerHTML = '';\n }\n\n attr(tspan, 'x', x);\n attr(tspan, 'y', y + i * lineHeight + dy);\n tspan.appendChild(document.createTextNode(textLines[i]));\n } // Remove unsed tspan elements\n\n\n for (; i < tspanList.length; i++) {\n textSvgEl.removeChild(tspanList[i]);\n }\n\n tspanList.length = nTextLines;\n el.__text = text;\n el.__textFont = font;\n } else if (el.__tspanList.length) {\n // Update span x and y\n var len = el.__tspanList.length;\n\n for (var i = 0; i < len; ++i) {\n var tspan = el.__tspanList[i];\n\n if (tspan) {\n attr(tspan, 'x', x);\n attr(tspan, 'y', y + i * lineHeight + dy);\n }\n }\n }\n};\n\nfunction getVerticalAlignForSvg(verticalAlign) {\n if (verticalAlign === 'middle') {\n return 'middle';\n } else if (verticalAlign === 'bottom') {\n return 'baseline';\n } else {\n return 'hanging';\n }\n}\n\nsvgText.drawRectText = svgTextDrawRectText;\n\nsvgText.brush = function (el) {\n var style = el.style;\n\n if (style.text != null) {\n // 强制设置 textPosition\n style.textPosition = [0, 0];\n svgTextDrawRectText(el, {\n x: style.x || 0,\n y: style.y || 0,\n width: 0,\n height: 0\n }, el.getBoundingRect());\n }\n};\n\nexports.path = svgPath;\nexports.image = svgImage;\nexports.text = svgText;","var ArrayCtor = typeof Float32Array === 'undefined' ? Array : Float32Array;\n/**\n * 创建一个向量\n * @param {number} [x=0]\n * @param {number} [y=0]\n * @return {Vector2}\n */\n\nfunction create(x, y) {\n var out = new ArrayCtor(2);\n\n if (x == null) {\n x = 0;\n }\n\n if (y == null) {\n y = 0;\n }\n\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\n * 复制向量数据\n * @param {Vector2} out\n * @param {Vector2} v\n * @return {Vector2}\n */\n\n\nfunction copy(out, v) {\n out[0] = v[0];\n out[1] = v[1];\n return out;\n}\n/**\n * 克隆一个向量\n * @param {Vector2} v\n * @return {Vector2}\n */\n\n\nfunction clone(v) {\n var out = new ArrayCtor(2);\n out[0] = v[0];\n out[1] = v[1];\n return out;\n}\n/**\n * 设置向量的两个项\n * @param {Vector2} out\n * @param {number} a\n * @param {number} b\n * @return {Vector2} 结果\n */\n\n\nfunction set(out, a, b) {\n out[0] = a;\n out[1] = b;\n return out;\n}\n/**\n * 向量相加\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n */\n\n\nfunction add(out, v1, v2) {\n out[0] = v1[0] + v2[0];\n out[1] = v1[1] + v2[1];\n return out;\n}\n/**\n * 向量缩放后相加\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n * @param {number} a\n */\n\n\nfunction scaleAndAdd(out, v1, v2, a) {\n out[0] = v1[0] + v2[0] * a;\n out[1] = v1[1] + v2[1] * a;\n return out;\n}\n/**\n * 向量相减\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n */\n\n\nfunction sub(out, v1, v2) {\n out[0] = v1[0] - v2[0];\n out[1] = v1[1] - v2[1];\n return out;\n}\n/**\n * 向量长度\n * @param {Vector2} v\n * @return {number}\n */\n\n\nfunction len(v) {\n return Math.sqrt(lenSquare(v));\n}\n\nvar length = len; // jshint ignore:line\n\n/**\n * 向量长度平方\n * @param {Vector2} v\n * @return {number}\n */\n\nfunction lenSquare(v) {\n return v[0] * v[0] + v[1] * v[1];\n}\n\nvar lengthSquare = lenSquare;\n/**\n * 向量乘法\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n */\n\nfunction mul(out, v1, v2) {\n out[0] = v1[0] * v2[0];\n out[1] = v1[1] * v2[1];\n return out;\n}\n/**\n * 向量除法\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n */\n\n\nfunction div(out, v1, v2) {\n out[0] = v1[0] / v2[0];\n out[1] = v1[1] / v2[1];\n return out;\n}\n/**\n * 向量点乘\n * @param {Vector2} v1\n * @param {Vector2} v2\n * @return {number}\n */\n\n\nfunction dot(v1, v2) {\n return v1[0] * v2[0] + v1[1] * v2[1];\n}\n/**\n * 向量缩放\n * @param {Vector2} out\n * @param {Vector2} v\n * @param {number} s\n */\n\n\nfunction scale(out, v, s) {\n out[0] = v[0] * s;\n out[1] = v[1] * s;\n return out;\n}\n/**\n * 向量归一化\n * @param {Vector2} out\n * @param {Vector2} v\n */\n\n\nfunction normalize(out, v) {\n var d = len(v);\n\n if (d === 0) {\n out[0] = 0;\n out[1] = 0;\n } else {\n out[0] = v[0] / d;\n out[1] = v[1] / d;\n }\n\n return out;\n}\n/**\n * 计算向量间距离\n * @param {Vector2} v1\n * @param {Vector2} v2\n * @return {number}\n */\n\n\nfunction distance(v1, v2) {\n return Math.sqrt((v1[0] - v2[0]) * (v1[0] - v2[0]) + (v1[1] - v2[1]) * (v1[1] - v2[1]));\n}\n\nvar dist = distance;\n/**\n * 向量距离平方\n * @param {Vector2} v1\n * @param {Vector2} v2\n * @return {number}\n */\n\nfunction distanceSquare(v1, v2) {\n return (v1[0] - v2[0]) * (v1[0] - v2[0]) + (v1[1] - v2[1]) * (v1[1] - v2[1]);\n}\n\nvar distSquare = distanceSquare;\n/**\n * 求负向量\n * @param {Vector2} out\n * @param {Vector2} v\n */\n\nfunction negate(out, v) {\n out[0] = -v[0];\n out[1] = -v[1];\n return out;\n}\n/**\n * 插值两个点\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n * @param {number} t\n */\n\n\nfunction lerp(out, v1, v2, t) {\n out[0] = v1[0] + t * (v2[0] - v1[0]);\n out[1] = v1[1] + t * (v2[1] - v1[1]);\n return out;\n}\n/**\n * 矩阵左乘向量\n * @param {Vector2} out\n * @param {Vector2} v\n * @param {Vector2} m\n */\n\n\nfunction applyTransform(out, v, m) {\n var x = v[0];\n var y = v[1];\n out[0] = m[0] * x + m[2] * y + m[4];\n out[1] = m[1] * x + m[3] * y + m[5];\n return out;\n}\n/**\n * 求两个向量最小值\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n */\n\n\nfunction min(out, v1, v2) {\n out[0] = Math.min(v1[0], v2[0]);\n out[1] = Math.min(v1[1], v2[1]);\n return out;\n}\n/**\n * 求两个向量最大值\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n */\n\n\nfunction max(out, v1, v2) {\n out[0] = Math.max(v1[0], v2[0]);\n out[1] = Math.max(v1[1], v2[1]);\n return out;\n}\n\nexports.create = create;\nexports.copy = copy;\nexports.clone = clone;\nexports.set = set;\nexports.add = add;\nexports.scaleAndAdd = scaleAndAdd;\nexports.sub = sub;\nexports.len = len;\nexports.length = length;\nexports.lenSquare = lenSquare;\nexports.lengthSquare = lengthSquare;\nexports.mul = mul;\nexports.div = div;\nexports.dot = dot;\nexports.scale = scale;\nexports.normalize = normalize;\nexports.distance = distance;\nexports.dist = dist;\nexports.distanceSquare = distanceSquare;\nexports.distSquare = distSquare;\nexports.negate = negate;\nexports.lerp = lerp;\nexports.applyTransform = applyTransform;\nexports.min = min;\nexports.max = max;","var DataZoomModel = require(\"./DataZoomModel\");\n\nvar _default = DataZoomModel.extend({\n type: 'dataZoom.select'\n});\n\nmodule.exports = _default;","var LRU = require(\"../core/LRU\");\n\nvar kCSSColorTable = {\n 'transparent': [0, 0, 0, 0],\n 'aliceblue': [240, 248, 255, 1],\n 'antiquewhite': [250, 235, 215, 1],\n 'aqua': [0, 255, 255, 1],\n 'aquamarine': [127, 255, 212, 1],\n 'azure': [240, 255, 255, 1],\n 'beige': [245, 245, 220, 1],\n 'bisque': [255, 228, 196, 1],\n 'black': [0, 0, 0, 1],\n 'blanchedalmond': [255, 235, 205, 1],\n 'blue': [0, 0, 255, 1],\n 'blueviolet': [138, 43, 226, 1],\n 'brown': [165, 42, 42, 1],\n 'burlywood': [222, 184, 135, 1],\n 'cadetblue': [95, 158, 160, 1],\n 'chartreuse': [127, 255, 0, 1],\n 'chocolate': [210, 105, 30, 1],\n 'coral': [255, 127, 80, 1],\n 'cornflowerblue': [100, 149, 237, 1],\n 'cornsilk': [255, 248, 220, 1],\n 'crimson': [220, 20, 60, 1],\n 'cyan': [0, 255, 255, 1],\n 'darkblue': [0, 0, 139, 1],\n 'darkcyan': [0, 139, 139, 1],\n 'darkgoldenrod': [184, 134, 11, 1],\n 'darkgray': [169, 169, 169, 1],\n 'darkgreen': [0, 100, 0, 1],\n 'darkgrey': [169, 169, 169, 1],\n 'darkkhaki': [189, 183, 107, 1],\n 'darkmagenta': [139, 0, 139, 1],\n 'darkolivegreen': [85, 107, 47, 1],\n 'darkorange': [255, 140, 0, 1],\n 'darkorchid': [153, 50, 204, 1],\n 'darkred': [139, 0, 0, 1],\n 'darksalmon': [233, 150, 122, 1],\n 'darkseagreen': [143, 188, 143, 1],\n 'darkslateblue': [72, 61, 139, 1],\n 'darkslategray': [47, 79, 79, 1],\n 'darkslategrey': [47, 79, 79, 1],\n 'darkturquoise': [0, 206, 209, 1],\n 'darkviolet': [148, 0, 211, 1],\n 'deeppink': [255, 20, 147, 1],\n 'deepskyblue': [0, 191, 255, 1],\n 'dimgray': [105, 105, 105, 1],\n 'dimgrey': [105, 105, 105, 1],\n 'dodgerblue': [30, 144, 255, 1],\n 'firebrick': [178, 34, 34, 1],\n 'floralwhite': [255, 250, 240, 1],\n 'forestgreen': [34, 139, 34, 1],\n 'fuchsia': [255, 0, 255, 1],\n 'gainsboro': [220, 220, 220, 1],\n 'ghostwhite': [248, 248, 255, 1],\n 'gold': [255, 215, 0, 1],\n 'goldenrod': [218, 165, 32, 1],\n 'gray': [128, 128, 128, 1],\n 'green': [0, 128, 0, 1],\n 'greenyellow': [173, 255, 47, 1],\n 'grey': [128, 128, 128, 1],\n 'honeydew': [240, 255, 240, 1],\n 'hotpink': [255, 105, 180, 1],\n 'indianred': [205, 92, 92, 1],\n 'indigo': [75, 0, 130, 1],\n 'ivory': [255, 255, 240, 1],\n 'khaki': [240, 230, 140, 1],\n 'lavender': [230, 230, 250, 1],\n 'lavenderblush': [255, 240, 245, 1],\n 'lawngreen': [124, 252, 0, 1],\n 'lemonchiffon': [255, 250, 205, 1],\n 'lightblue': [173, 216, 230, 1],\n 'lightcoral': [240, 128, 128, 1],\n 'lightcyan': [224, 255, 255, 1],\n 'lightgoldenrodyellow': [250, 250, 210, 1],\n 'lightgray': [211, 211, 211, 1],\n 'lightgreen': [144, 238, 144, 1],\n 'lightgrey': [211, 211, 211, 1],\n 'lightpink': [255, 182, 193, 1],\n 'lightsalmon': [255, 160, 122, 1],\n 'lightseagreen': [32, 178, 170, 1],\n 'lightskyblue': [135, 206, 250, 1],\n 'lightslategray': [119, 136, 153, 1],\n 'lightslategrey': [119, 136, 153, 1],\n 'lightsteelblue': [176, 196, 222, 1],\n 'lightyellow': [255, 255, 224, 1],\n 'lime': [0, 255, 0, 1],\n 'limegreen': [50, 205, 50, 1],\n 'linen': [250, 240, 230, 1],\n 'magenta': [255, 0, 255, 1],\n 'maroon': [128, 0, 0, 1],\n 'mediumaquamarine': [102, 205, 170, 1],\n 'mediumblue': [0, 0, 205, 1],\n 'mediumorchid': [186, 85, 211, 1],\n 'mediumpurple': [147, 112, 219, 1],\n 'mediumseagreen': [60, 179, 113, 1],\n 'mediumslateblue': [123, 104, 238, 1],\n 'mediumspringgreen': [0, 250, 154, 1],\n 'mediumturquoise': [72, 209, 204, 1],\n 'mediumvioletred': [199, 21, 133, 1],\n 'midnightblue': [25, 25, 112, 1],\n 'mintcream': [245, 255, 250, 1],\n 'mistyrose': [255, 228, 225, 1],\n 'moccasin': [255, 228, 181, 1],\n 'navajowhite': [255, 222, 173, 1],\n 'navy': [0, 0, 128, 1],\n 'oldlace': [253, 245, 230, 1],\n 'olive': [128, 128, 0, 1],\n 'olivedrab': [107, 142, 35, 1],\n 'orange': [255, 165, 0, 1],\n 'orangered': [255, 69, 0, 1],\n 'orchid': [218, 112, 214, 1],\n 'palegoldenrod': [238, 232, 170, 1],\n 'palegreen': [152, 251, 152, 1],\n 'paleturquoise': [175, 238, 238, 1],\n 'palevioletred': [219, 112, 147, 1],\n 'papayawhip': [255, 239, 213, 1],\n 'peachpuff': [255, 218, 185, 1],\n 'peru': [205, 133, 63, 1],\n 'pink': [255, 192, 203, 1],\n 'plum': [221, 160, 221, 1],\n 'powderblue': [176, 224, 230, 1],\n 'purple': [128, 0, 128, 1],\n 'red': [255, 0, 0, 1],\n 'rosybrown': [188, 143, 143, 1],\n 'royalblue': [65, 105, 225, 1],\n 'saddlebrown': [139, 69, 19, 1],\n 'salmon': [250, 128, 114, 1],\n 'sandybrown': [244, 164, 96, 1],\n 'seagreen': [46, 139, 87, 1],\n 'seashell': [255, 245, 238, 1],\n 'sienna': [160, 82, 45, 1],\n 'silver': [192, 192, 192, 1],\n 'skyblue': [135, 206, 235, 1],\n 'slateblue': [106, 90, 205, 1],\n 'slategray': [112, 128, 144, 1],\n 'slategrey': [112, 128, 144, 1],\n 'snow': [255, 250, 250, 1],\n 'springgreen': [0, 255, 127, 1],\n 'steelblue': [70, 130, 180, 1],\n 'tan': [210, 180, 140, 1],\n 'teal': [0, 128, 128, 1],\n 'thistle': [216, 191, 216, 1],\n 'tomato': [255, 99, 71, 1],\n 'turquoise': [64, 224, 208, 1],\n 'violet': [238, 130, 238, 1],\n 'wheat': [245, 222, 179, 1],\n 'white': [255, 255, 255, 1],\n 'whitesmoke': [245, 245, 245, 1],\n 'yellow': [255, 255, 0, 1],\n 'yellowgreen': [154, 205, 50, 1]\n};\n\nfunction clampCssByte(i) {\n // Clamp to integer 0 .. 255.\n i = Math.round(i); // Seems to be what Chrome does (vs truncation).\n\n return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clampCssAngle(i) {\n // Clamp to integer 0 .. 360.\n i = Math.round(i); // Seems to be what Chrome does (vs truncation).\n\n return i < 0 ? 0 : i > 360 ? 360 : i;\n}\n\nfunction clampCssFloat(f) {\n // Clamp to float 0.0 .. 1.0.\n return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parseCssInt(str) {\n // int or percentage.\n if (str.length && str.charAt(str.length - 1) === '%') {\n return clampCssByte(parseFloat(str) / 100 * 255);\n }\n\n return clampCssByte(parseInt(str, 10));\n}\n\nfunction parseCssFloat(str) {\n // float or percentage.\n if (str.length && str.charAt(str.length - 1) === '%') {\n return clampCssFloat(parseFloat(str) / 100);\n }\n\n return clampCssFloat(parseFloat(str));\n}\n\nfunction cssHueToRgb(m1, m2, h) {\n if (h < 0) {\n h += 1;\n } else if (h > 1) {\n h -= 1;\n }\n\n if (h * 6 < 1) {\n return m1 + (m2 - m1) * h * 6;\n }\n\n if (h * 2 < 1) {\n return m2;\n }\n\n if (h * 3 < 2) {\n return m1 + (m2 - m1) * (2 / 3 - h) * 6;\n }\n\n return m1;\n}\n\nfunction lerpNumber(a, b, p) {\n return a + (b - a) * p;\n}\n\nfunction setRgba(out, r, g, b, a) {\n out[0] = r;\n out[1] = g;\n out[2] = b;\n out[3] = a;\n return out;\n}\n\nfunction copyRgba(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n\nvar colorCache = new LRU(20);\nvar lastRemovedArr = null;\n\nfunction putToCache(colorStr, rgbaArr) {\n // Reuse removed array\n if (lastRemovedArr) {\n copyRgba(lastRemovedArr, rgbaArr);\n }\n\n lastRemovedArr = colorCache.put(colorStr, lastRemovedArr || rgbaArr.slice());\n}\n/**\n * @param {string} colorStr\n * @param {Array.} out\n * @return {Array.}\n * @memberOf module:zrender/util/color\n */\n\n\nfunction parse(colorStr, rgbaArr) {\n if (!colorStr) {\n return;\n }\n\n rgbaArr = rgbaArr || [];\n var cached = colorCache.get(colorStr);\n\n if (cached) {\n return copyRgba(rgbaArr, cached);\n } // colorStr may be not string\n\n\n colorStr = colorStr + ''; // Remove all whitespace, not compliant, but should just be more accepting.\n\n var str = colorStr.replace(/ /g, '').toLowerCase(); // Color keywords (and transparent) lookup.\n\n if (str in kCSSColorTable) {\n copyRgba(rgbaArr, kCSSColorTable[str]);\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n } // #abc and #abc123 syntax.\n\n\n if (str.charAt(0) === '#') {\n if (str.length === 4) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n\n if (!(iv >= 0 && iv <= 0xfff)) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return; // Covers NaN.\n }\n\n setRgba(rgbaArr, (iv & 0xf00) >> 4 | (iv & 0xf00) >> 8, iv & 0xf0 | (iv & 0xf0) >> 4, iv & 0xf | (iv & 0xf) << 4, 1);\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n } else if (str.length === 7) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n\n if (!(iv >= 0 && iv <= 0xffffff)) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return; // Covers NaN.\n }\n\n setRgba(rgbaArr, (iv & 0xff0000) >> 16, (iv & 0xff00) >> 8, iv & 0xff, 1);\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n }\n\n return;\n }\n\n var op = str.indexOf('('),\n ep = str.indexOf(')');\n\n if (op !== -1 && ep + 1 === str.length) {\n var fname = str.substr(0, op);\n var params = str.substr(op + 1, ep - (op + 1)).split(',');\n var alpha = 1; // To allow case fallthrough.\n\n switch (fname) {\n case 'rgba':\n if (params.length !== 4) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n }\n\n alpha = parseCssFloat(params.pop());\n // jshint ignore:line\n // Fall through.\n\n case 'rgb':\n if (params.length !== 3) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n }\n\n setRgba(rgbaArr, parseCssInt(params[0]), parseCssInt(params[1]), parseCssInt(params[2]), alpha);\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n\n case 'hsla':\n if (params.length !== 4) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n }\n\n params[3] = parseCssFloat(params[3]);\n hsla2rgba(params, rgbaArr);\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n\n case 'hsl':\n if (params.length !== 3) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n }\n\n hsla2rgba(params, rgbaArr);\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n\n default:\n return;\n }\n }\n\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n}\n/**\n * @param {Array.} hsla\n * @param {Array.} rgba\n * @return {Array.} rgba\n */\n\n\nfunction hsla2rgba(hsla, rgba) {\n var h = (parseFloat(hsla[0]) % 360 + 360) % 360 / 360; // 0 .. 1\n // NOTE(deanm): According to the CSS spec s/l should only be\n // percentages, but we don't bother and let float or percentage.\n\n var s = parseCssFloat(hsla[1]);\n var l = parseCssFloat(hsla[2]);\n var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n var m1 = l * 2 - m2;\n rgba = rgba || [];\n setRgba(rgba, clampCssByte(cssHueToRgb(m1, m2, h + 1 / 3) * 255), clampCssByte(cssHueToRgb(m1, m2, h) * 255), clampCssByte(cssHueToRgb(m1, m2, h - 1 / 3) * 255), 1);\n\n if (hsla.length === 4) {\n rgba[3] = hsla[3];\n }\n\n return rgba;\n}\n/**\n * @param {Array.} rgba\n * @return {Array.} hsla\n */\n\n\nfunction rgba2hsla(rgba) {\n if (!rgba) {\n return;\n } // RGB from 0 to 255\n\n\n var R = rgba[0] / 255;\n var G = rgba[1] / 255;\n var B = rgba[2] / 255;\n var vMin = Math.min(R, G, B); // Min. value of RGB\n\n var vMax = Math.max(R, G, B); // Max. value of RGB\n\n var delta = vMax - vMin; // Delta RGB value\n\n var L = (vMax + vMin) / 2;\n var H;\n var S; // HSL results from 0 to 1\n\n if (delta === 0) {\n H = 0;\n S = 0;\n } else {\n if (L < 0.5) {\n S = delta / (vMax + vMin);\n } else {\n S = delta / (2 - vMax - vMin);\n }\n\n var deltaR = ((vMax - R) / 6 + delta / 2) / delta;\n var deltaG = ((vMax - G) / 6 + delta / 2) / delta;\n var deltaB = ((vMax - B) / 6 + delta / 2) / delta;\n\n if (R === vMax) {\n H = deltaB - deltaG;\n } else if (G === vMax) {\n H = 1 / 3 + deltaR - deltaB;\n } else if (B === vMax) {\n H = 2 / 3 + deltaG - deltaR;\n }\n\n if (H < 0) {\n H += 1;\n }\n\n if (H > 1) {\n H -= 1;\n }\n }\n\n var hsla = [H * 360, S, L];\n\n if (rgba[3] != null) {\n hsla.push(rgba[3]);\n }\n\n return hsla;\n}\n/**\n * @param {string} color\n * @param {number} level\n * @return {string}\n * @memberOf module:zrender/util/color\n */\n\n\nfunction lift(color, level) {\n var colorArr = parse(color);\n\n if (colorArr) {\n for (var i = 0; i < 3; i++) {\n if (level < 0) {\n colorArr[i] = colorArr[i] * (1 - level) | 0;\n } else {\n colorArr[i] = (255 - colorArr[i]) * level + colorArr[i] | 0;\n }\n }\n\n return stringify(colorArr, colorArr.length === 4 ? 'rgba' : 'rgb');\n }\n}\n/**\n * @param {string} color\n * @return {string}\n * @memberOf module:zrender/util/color\n */\n\n\nfunction toHex(color) {\n var colorArr = parse(color);\n\n if (colorArr) {\n return ((1 << 24) + (colorArr[0] << 16) + (colorArr[1] << 8) + +colorArr[2]).toString(16).slice(1);\n }\n}\n/**\n * Map value to color. Faster than lerp methods because color is represented by rgba array.\n * @param {number} normalizedValue A float between 0 and 1.\n * @param {Array.>} colors List of rgba color array\n * @param {Array.} [out] Mapped gba color array\n * @return {Array.} will be null/undefined if input illegal.\n */\n\n\nfunction fastLerp(normalizedValue, colors, out) {\n if (!(colors && colors.length) || !(normalizedValue >= 0 && normalizedValue <= 1)) {\n return;\n }\n\n out = out || [];\n var value = normalizedValue * (colors.length - 1);\n var leftIndex = Math.floor(value);\n var rightIndex = Math.ceil(value);\n var leftColor = colors[leftIndex];\n var rightColor = colors[rightIndex];\n var dv = value - leftIndex;\n out[0] = clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv));\n out[1] = clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv));\n out[2] = clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv));\n out[3] = clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv));\n return out;\n}\n/**\n * @deprecated\n */\n\n\nvar fastMapToColor = fastLerp;\n/**\n * @param {number} normalizedValue A float between 0 and 1.\n * @param {Array.} colors Color list.\n * @param {boolean=} fullOutput Default false.\n * @return {(string|Object)} Result color. If fullOutput,\n * return {color: ..., leftIndex: ..., rightIndex: ..., value: ...},\n * @memberOf module:zrender/util/color\n */\n\nfunction lerp(normalizedValue, colors, fullOutput) {\n if (!(colors && colors.length) || !(normalizedValue >= 0 && normalizedValue <= 1)) {\n return;\n }\n\n var value = normalizedValue * (colors.length - 1);\n var leftIndex = Math.floor(value);\n var rightIndex = Math.ceil(value);\n var leftColor = parse(colors[leftIndex]);\n var rightColor = parse(colors[rightIndex]);\n var dv = value - leftIndex;\n var color = stringify([clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv)), clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv)), clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv)), clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv))], 'rgba');\n return fullOutput ? {\n color: color,\n leftIndex: leftIndex,\n rightIndex: rightIndex,\n value: value\n } : color;\n}\n/**\n * @deprecated\n */\n\n\nvar mapToColor = lerp;\n/**\n * @param {string} color\n * @param {number=} h 0 ~ 360, ignore when null.\n * @param {number=} s 0 ~ 1, ignore when null.\n * @param {number=} l 0 ~ 1, ignore when null.\n * @return {string} Color string in rgba format.\n * @memberOf module:zrender/util/color\n */\n\nfunction modifyHSL(color, h, s, l) {\n color = parse(color);\n\n if (color) {\n color = rgba2hsla(color);\n h != null && (color[0] = clampCssAngle(h));\n s != null && (color[1] = parseCssFloat(s));\n l != null && (color[2] = parseCssFloat(l));\n return stringify(hsla2rgba(color), 'rgba');\n }\n}\n/**\n * @param {string} color\n * @param {number=} alpha 0 ~ 1\n * @return {string} Color string in rgba format.\n * @memberOf module:zrender/util/color\n */\n\n\nfunction modifyAlpha(color, alpha) {\n color = parse(color);\n\n if (color && alpha != null) {\n color[3] = clampCssFloat(alpha);\n return stringify(color, 'rgba');\n }\n}\n/**\n * @param {Array.} arrColor like [12,33,44,0.4]\n * @param {string} type 'rgba', 'hsva', ...\n * @return {string} Result color. (If input illegal, return undefined).\n */\n\n\nfunction stringify(arrColor, type) {\n if (!arrColor || !arrColor.length) {\n return;\n }\n\n var colorStr = arrColor[0] + ',' + arrColor[1] + ',' + arrColor[2];\n\n if (type === 'rgba' || type === 'hsva' || type === 'hsla') {\n colorStr += ',' + arrColor[3];\n }\n\n return type + '(' + colorStr + ')';\n}\n\nexports.parse = parse;\nexports.lift = lift;\nexports.toHex = toHex;\nexports.fastLerp = fastLerp;\nexports.fastMapToColor = fastMapToColor;\nexports.lerp = lerp;\nexports.mapToColor = mapToColor;\nexports.modifyHSL = modifyHSL;\nexports.modifyAlpha = modifyAlpha;\nexports.stringify = stringify;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar Path = require(\"zrender/lib/graphic/Path\");\n\n/**\n * @module echarts/chart/helper/Symbol\n */\nvar WhiskerPath = Path.extend({\n type: 'whiskerInBox',\n shape: {},\n buildPath: function (ctx, shape) {\n for (var i in shape) {\n if (shape.hasOwnProperty(i) && i.indexOf('ends') === 0) {\n var pts = shape[i];\n ctx.moveTo(pts[0][0], pts[0][1]);\n ctx.lineTo(pts[1][0], pts[1][1]);\n }\n }\n }\n});\n/**\n * @constructor\n * @alias {module:echarts/chart/helper/WhiskerBox}\n * @param {module:echarts/data/List} data\n * @param {number} idx\n * @param {Function} styleUpdater\n * @param {boolean} isInit\n * @extends {module:zrender/graphic/Group}\n */\n\nfunction WhiskerBox(data, idx, styleUpdater, isInit) {\n graphic.Group.call(this);\n /**\n * @type {number}\n * @readOnly\n */\n\n this.bodyIndex;\n /**\n * @type {number}\n * @readOnly\n */\n\n this.whiskerIndex;\n /**\n * @type {Function}\n */\n\n this.styleUpdater = styleUpdater;\n\n this._createContent(data, idx, isInit);\n\n this.updateData(data, idx, isInit);\n /**\n * Last series model.\n * @type {module:echarts/model/Series}\n */\n\n this._seriesModel;\n}\n\nvar whiskerBoxProto = WhiskerBox.prototype;\n\nwhiskerBoxProto._createContent = function (data, idx, isInit) {\n var itemLayout = data.getItemLayout(idx);\n var constDim = itemLayout.chartLayout === 'horizontal' ? 1 : 0;\n var count = 0; // Whisker element.\n\n this.add(new graphic.Polygon({\n shape: {\n points: isInit ? transInit(itemLayout.bodyEnds, constDim, itemLayout) : itemLayout.bodyEnds\n },\n style: {\n strokeNoScale: true\n },\n z2: 100\n }));\n this.bodyIndex = count++; // Box element.\n\n var whiskerEnds = zrUtil.map(itemLayout.whiskerEnds, function (ends) {\n return isInit ? transInit(ends, constDim, itemLayout) : ends;\n });\n this.add(new WhiskerPath({\n shape: makeWhiskerEndsShape(whiskerEnds),\n style: {\n strokeNoScale: true\n },\n z2: 100\n }));\n this.whiskerIndex = count++;\n};\n\nfunction transInit(points, dim, itemLayout) {\n return zrUtil.map(points, function (point) {\n point = point.slice();\n point[dim] = itemLayout.initBaseline;\n return point;\n });\n}\n\nfunction makeWhiskerEndsShape(whiskerEnds) {\n // zr animation only support 2-dim array.\n var shape = {};\n zrUtil.each(whiskerEnds, function (ends, i) {\n shape['ends' + i] = ends;\n });\n return shape;\n}\n/**\n * Update symbol properties\n * @param {module:echarts/data/List} data\n * @param {number} idx\n */\n\n\nwhiskerBoxProto.updateData = function (data, idx, isInit) {\n var seriesModel = this._seriesModel = data.hostModel;\n var itemLayout = data.getItemLayout(idx);\n var updateMethod = graphic[isInit ? 'initProps' : 'updateProps']; // this.childAt(this.bodyIndex).stopAnimation(true);\n // this.childAt(this.whiskerIndex).stopAnimation(true);\n\n updateMethod(this.childAt(this.bodyIndex), {\n shape: {\n points: itemLayout.bodyEnds\n }\n }, seriesModel, idx);\n updateMethod(this.childAt(this.whiskerIndex), {\n shape: makeWhiskerEndsShape(itemLayout.whiskerEnds)\n }, seriesModel, idx);\n this.styleUpdater.call(null, this, data, idx);\n};\n\nzrUtil.inherits(WhiskerBox, graphic.Group);\n/**\n * @constructor\n * @alias module:echarts/chart/helper/WhiskerBoxDraw\n */\n\nfunction WhiskerBoxDraw(styleUpdater) {\n this.group = new graphic.Group();\n this.styleUpdater = styleUpdater;\n}\n\nvar whiskerBoxDrawProto = WhiskerBoxDraw.prototype;\n/**\n * Update symbols draw by new data\n * @param {module:echarts/data/List} data\n */\n\nwhiskerBoxDrawProto.updateData = function (data) {\n var group = this.group;\n var oldData = this._data;\n var styleUpdater = this.styleUpdater;\n data.diff(oldData).add(function (newIdx) {\n if (data.hasValue(newIdx)) {\n var symbolEl = new WhiskerBox(data, newIdx, styleUpdater, true);\n data.setItemGraphicEl(newIdx, symbolEl);\n group.add(symbolEl);\n }\n }).update(function (newIdx, oldIdx) {\n var symbolEl = oldData.getItemGraphicEl(oldIdx); // Empty data\n\n if (!data.hasValue(newIdx)) {\n group.remove(symbolEl);\n return;\n }\n\n if (!symbolEl) {\n symbolEl = new WhiskerBox(data, newIdx, styleUpdater);\n } else {\n symbolEl.updateData(data, newIdx);\n } // Add back\n\n\n group.add(symbolEl);\n data.setItemGraphicEl(newIdx, symbolEl);\n }).remove(function (oldIdx) {\n var el = oldData.getItemGraphicEl(oldIdx);\n el && group.remove(el);\n }).execute();\n this._data = data;\n};\n/**\n * Remove symbols.\n * @param {module:echarts/data/List} data\n */\n\n\nwhiskerBoxDrawProto.remove = function () {\n var group = this.group;\n var data = this._data;\n this._data = null;\n data && data.eachItemGraphicEl(function (el) {\n el && group.remove(el);\n });\n};\n\nvar _default = WhiskerBoxDraw;\nmodule.exports = _default;","/**\n * @param {Array.} colorStops\n */\nvar Gradient = function (colorStops) {\n this.colorStops = colorStops || [];\n};\n\nGradient.prototype = {\n constructor: Gradient,\n addColorStop: function (offset, color) {\n this.colorStops.push({\n offset: offset,\n color: color\n });\n }\n};\nvar _default = Gradient;\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar env = require(\"zrender/lib/core/env\");\n\nvar TooltipContent = require(\"./TooltipContent\");\n\nvar formatUtil = require(\"../../util/format\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar findPointFromSeries = require(\"../axisPointer/findPointFromSeries\");\n\nvar layoutUtil = require(\"../../util/layout\");\n\nvar Model = require(\"../../model/Model\");\n\nvar globalListener = require(\"../axisPointer/globalListener\");\n\nvar axisHelper = require(\"../../coord/axisHelper\");\n\nvar axisPointerViewHelper = require(\"../axisPointer/viewHelper\");\n\nvar bind = zrUtil.bind;\nvar each = zrUtil.each;\nvar parsePercent = numberUtil.parsePercent;\nvar proxyRect = new graphic.Rect({\n shape: {\n x: -1,\n y: -1,\n width: 2,\n height: 2\n }\n});\n\nvar _default = echarts.extendComponentView({\n type: 'tooltip',\n init: function (ecModel, api) {\n if (env.node) {\n return;\n }\n\n var tooltipContent = new TooltipContent(api.getDom(), api);\n this._tooltipContent = tooltipContent;\n },\n render: function (tooltipModel, ecModel, api) {\n if (env.node) {\n return;\n } // Reset\n\n\n this.group.removeAll();\n /**\n * @private\n * @type {module:echarts/component/tooltip/TooltipModel}\n */\n\n this._tooltipModel = tooltipModel;\n /**\n * @private\n * @type {module:echarts/model/Global}\n */\n\n this._ecModel = ecModel;\n /**\n * @private\n * @type {module:echarts/ExtensionAPI}\n */\n\n this._api = api;\n /**\n * Should be cleaned when render.\n * @private\n * @type {Array.>}\n */\n\n this._lastDataByCoordSys = null;\n /**\n * @private\n * @type {boolean}\n */\n\n this._alwaysShowContent = tooltipModel.get('alwaysShowContent');\n var tooltipContent = this._tooltipContent;\n tooltipContent.update();\n tooltipContent.setEnterable(tooltipModel.get('enterable'));\n\n this._initGlobalListener();\n\n this._keepShow();\n },\n _initGlobalListener: function () {\n var tooltipModel = this._tooltipModel;\n var triggerOn = tooltipModel.get('triggerOn');\n globalListener.register('itemTooltip', this._api, bind(function (currTrigger, e, dispatchAction) {\n // If 'none', it is not controlled by mouse totally.\n if (triggerOn !== 'none') {\n if (triggerOn.indexOf(currTrigger) >= 0) {\n this._tryShow(e, dispatchAction);\n } else if (currTrigger === 'leave') {\n this._hide(dispatchAction);\n }\n }\n }, this));\n },\n _keepShow: function () {\n var tooltipModel = this._tooltipModel;\n var ecModel = this._ecModel;\n var api = this._api; // Try to keep the tooltip show when refreshing\n\n if (this._lastX != null && this._lastY != null // When user is willing to control tooltip totally using API,\n // self.manuallyShowTip({x, y}) might cause tooltip hide,\n // which is not expected.\n && tooltipModel.get('triggerOn') !== 'none') {\n var self = this;\n clearTimeout(this._refreshUpdateTimeout);\n this._refreshUpdateTimeout = setTimeout(function () {\n // Show tip next tick after other charts are rendered\n // In case highlight action has wrong result\n // FIXME\n self.manuallyShowTip(tooltipModel, ecModel, api, {\n x: self._lastX,\n y: self._lastY\n });\n });\n }\n },\n\n /**\n * Show tip manually by\n * dispatchAction({\n * type: 'showTip',\n * x: 10,\n * y: 10\n * });\n * Or\n * dispatchAction({\n * type: 'showTip',\n * seriesIndex: 0,\n * dataIndex or dataIndexInside or name\n * });\n *\n * TODO Batch\n */\n manuallyShowTip: function (tooltipModel, ecModel, api, payload) {\n if (payload.from === this.uid || env.node) {\n return;\n }\n\n var dispatchAction = makeDispatchAction(payload, api); // Reset ticket\n\n this._ticket = ''; // When triggered from axisPointer.\n\n var dataByCoordSys = payload.dataByCoordSys;\n\n if (payload.tooltip && payload.x != null && payload.y != null) {\n var el = proxyRect;\n el.position = [payload.x, payload.y];\n el.update();\n el.tooltip = payload.tooltip; // Manually show tooltip while view is not using zrender elements.\n\n this._tryShow({\n offsetX: payload.x,\n offsetY: payload.y,\n target: el\n }, dispatchAction);\n } else if (dataByCoordSys) {\n this._tryShow({\n offsetX: payload.x,\n offsetY: payload.y,\n position: payload.position,\n event: {},\n dataByCoordSys: payload.dataByCoordSys,\n tooltipOption: payload.tooltipOption\n }, dispatchAction);\n } else if (payload.seriesIndex != null) {\n if (this._manuallyAxisShowTip(tooltipModel, ecModel, api, payload)) {\n return;\n }\n\n var pointInfo = findPointFromSeries(payload, ecModel);\n var cx = pointInfo.point[0];\n var cy = pointInfo.point[1];\n\n if (cx != null && cy != null) {\n this._tryShow({\n offsetX: cx,\n offsetY: cy,\n position: payload.position,\n target: pointInfo.el,\n event: {}\n }, dispatchAction);\n }\n } else if (payload.x != null && payload.y != null) {\n // FIXME\n // should wrap dispatchAction like `axisPointer/globalListener` ?\n api.dispatchAction({\n type: 'updateAxisPointer',\n x: payload.x,\n y: payload.y\n });\n\n this._tryShow({\n offsetX: payload.x,\n offsetY: payload.y,\n position: payload.position,\n target: api.getZr().findHover(payload.x, payload.y).target,\n event: {}\n }, dispatchAction);\n }\n },\n manuallyHideTip: function (tooltipModel, ecModel, api, payload) {\n var tooltipContent = this._tooltipContent;\n\n if (!this._alwaysShowContent) {\n tooltipContent.hideLater(this._tooltipModel.get('hideDelay'));\n }\n\n this._lastX = this._lastY = null;\n\n if (payload.from !== this.uid) {\n this._hide(makeDispatchAction(payload, api));\n }\n },\n // Be compatible with previous design, that is, when tooltip.type is 'axis' and\n // dispatchAction 'showTip' with seriesIndex and dataIndex will trigger axis pointer\n // and tooltip.\n _manuallyAxisShowTip: function (tooltipModel, ecModel, api, payload) {\n var seriesIndex = payload.seriesIndex;\n var dataIndex = payload.dataIndex;\n var coordSysAxesInfo = ecModel.getComponent('axisPointer').coordSysAxesInfo;\n\n if (seriesIndex == null || dataIndex == null || coordSysAxesInfo == null) {\n return;\n }\n\n var seriesModel = ecModel.getSeriesByIndex(seriesIndex);\n\n if (!seriesModel) {\n return;\n }\n\n var data = seriesModel.getData();\n var tooltipModel = buildTooltipModel([data.getItemModel(dataIndex), seriesModel, (seriesModel.coordinateSystem || {}).model, tooltipModel]);\n\n if (tooltipModel.get('trigger') !== 'axis') {\n return;\n }\n\n api.dispatchAction({\n type: 'updateAxisPointer',\n seriesIndex: seriesIndex,\n dataIndex: dataIndex,\n position: payload.position\n });\n return true;\n },\n _tryShow: function (e, dispatchAction) {\n var el = e.target;\n var tooltipModel = this._tooltipModel;\n\n if (!tooltipModel) {\n return;\n } // Save mouse x, mouse y. So we can try to keep showing the tip if chart is refreshed\n\n\n this._lastX = e.offsetX;\n this._lastY = e.offsetY;\n var dataByCoordSys = e.dataByCoordSys;\n\n if (dataByCoordSys && dataByCoordSys.length) {\n this._showAxisTooltip(dataByCoordSys, e);\n } // Always show item tooltip if mouse is on the element with dataIndex\n else if (el && el.dataIndex != null) {\n this._lastDataByCoordSys = null;\n\n this._showSeriesItemTooltip(e, el, dispatchAction);\n } // Tooltip provided directly. Like legend.\n else if (el && el.tooltip) {\n this._lastDataByCoordSys = null;\n\n this._showComponentItemTooltip(e, el, dispatchAction);\n } else {\n this._lastDataByCoordSys = null;\n\n this._hide(dispatchAction);\n }\n },\n _showOrMove: function (tooltipModel, cb) {\n // showDelay is used in this case: tooltip.enterable is set\n // as true. User intent to move mouse into tooltip and click\n // something. `showDelay` makes it easyer to enter the content\n // but tooltip do not move immediately.\n var delay = tooltipModel.get('showDelay');\n cb = zrUtil.bind(cb, this);\n clearTimeout(this._showTimout);\n delay > 0 ? this._showTimout = setTimeout(cb, delay) : cb();\n },\n _showAxisTooltip: function (dataByCoordSys, e) {\n var ecModel = this._ecModel;\n var globalTooltipModel = this._tooltipModel;\n var point = [e.offsetX, e.offsetY];\n var singleDefaultHTML = [];\n var singleParamsList = [];\n var singleTooltipModel = buildTooltipModel([e.tooltipOption, globalTooltipModel]);\n each(dataByCoordSys, function (itemCoordSys) {\n // var coordParamList = [];\n // var coordDefaultHTML = [];\n // var coordTooltipModel = buildTooltipModel([\n // e.tooltipOption,\n // itemCoordSys.tooltipOption,\n // ecModel.getComponent(itemCoordSys.coordSysMainType, itemCoordSys.coordSysIndex),\n // globalTooltipModel\n // ]);\n // var displayMode = coordTooltipModel.get('displayMode');\n // var paramsList = displayMode === 'single' ? singleParamsList : [];\n each(itemCoordSys.dataByAxis, function (item) {\n var axisModel = ecModel.getComponent(item.axisDim + 'Axis', item.axisIndex);\n var axisValue = item.value;\n var seriesDefaultHTML = [];\n\n if (!axisModel || axisValue == null) {\n return;\n }\n\n var valueLabel = axisPointerViewHelper.getValueLabel(axisValue, axisModel.axis, ecModel, item.seriesDataIndices, item.valueLabelOpt);\n zrUtil.each(item.seriesDataIndices, function (idxItem) {\n var series = ecModel.getSeriesByIndex(idxItem.seriesIndex);\n var dataIndex = idxItem.dataIndexInside;\n var dataParams = series && series.getDataParams(dataIndex);\n dataParams.axisDim = item.axisDim;\n dataParams.axisIndex = item.axisIndex;\n dataParams.axisType = item.axisType;\n dataParams.axisId = item.axisId;\n dataParams.axisValue = axisHelper.getAxisRawValue(axisModel.axis, axisValue);\n dataParams.axisValueLabel = valueLabel;\n\n if (dataParams) {\n singleParamsList.push(dataParams);\n seriesDefaultHTML.push(series.formatTooltip(dataIndex, true));\n }\n }); // Default tooltip content\n // FIXME\n // (1) shold be the first data which has name?\n // (2) themeRiver, firstDataIndex is array, and first line is unnecessary.\n\n var firstLine = valueLabel;\n singleDefaultHTML.push((firstLine ? formatUtil.encodeHTML(firstLine) + '
' : '') + seriesDefaultHTML.join('
'));\n });\n }, this); // In most case, the second axis is shown upper than the first one.\n\n singleDefaultHTML.reverse();\n singleDefaultHTML = singleDefaultHTML.join('

');\n var positionExpr = e.position;\n\n this._showOrMove(singleTooltipModel, function () {\n if (this._updateContentNotChangedOnAxis(dataByCoordSys)) {\n this._updatePosition(singleTooltipModel, positionExpr, point[0], point[1], this._tooltipContent, singleParamsList);\n } else {\n this._showTooltipContent(singleTooltipModel, singleDefaultHTML, singleParamsList, Math.random(), point[0], point[1], positionExpr);\n }\n }); // Do not trigger events here, because this branch only be entered\n // from dispatchAction.\n\n },\n _showSeriesItemTooltip: function (e, el, dispatchAction) {\n var ecModel = this._ecModel; // Use dataModel in element if possible\n // Used when mouseover on a element like markPoint or edge\n // In which case, the data is not main data in series.\n\n var seriesIndex = el.seriesIndex;\n var seriesModel = ecModel.getSeriesByIndex(seriesIndex); // For example, graph link.\n\n var dataModel = el.dataModel || seriesModel;\n var dataIndex = el.dataIndex;\n var dataType = el.dataType;\n var data = dataModel.getData();\n var tooltipModel = buildTooltipModel([data.getItemModel(dataIndex), dataModel, seriesModel && (seriesModel.coordinateSystem || {}).model, this._tooltipModel]);\n var tooltipTrigger = tooltipModel.get('trigger');\n\n if (tooltipTrigger != null && tooltipTrigger !== 'item') {\n return;\n }\n\n var params = dataModel.getDataParams(dataIndex, dataType);\n var defaultHtml = dataModel.formatTooltip(dataIndex, false, dataType);\n var asyncTicket = 'item_' + dataModel.name + '_' + dataIndex;\n\n this._showOrMove(tooltipModel, function () {\n this._showTooltipContent(tooltipModel, defaultHtml, params, asyncTicket, e.offsetX, e.offsetY, e.position, e.target);\n }); // FIXME\n // duplicated showtip if manuallyShowTip is called from dispatchAction.\n\n\n dispatchAction({\n type: 'showTip',\n dataIndexInside: dataIndex,\n dataIndex: data.getRawIndex(dataIndex),\n seriesIndex: seriesIndex,\n from: this.uid\n });\n },\n _showComponentItemTooltip: function (e, el, dispatchAction) {\n var tooltipOpt = el.tooltip;\n\n if (typeof tooltipOpt === 'string') {\n var content = tooltipOpt;\n tooltipOpt = {\n content: content,\n // Fixed formatter\n formatter: content\n };\n }\n\n var subTooltipModel = new Model(tooltipOpt, this._tooltipModel, this._ecModel);\n var defaultHtml = subTooltipModel.get('content');\n var asyncTicket = Math.random(); // Do not check whether `trigger` is 'none' here, because `trigger`\n // only works on cooridinate system. In fact, we have not found case\n // that requires setting `trigger` nothing on component yet.\n\n this._showOrMove(subTooltipModel, function () {\n this._showTooltipContent(subTooltipModel, defaultHtml, subTooltipModel.get('formatterParams') || {}, asyncTicket, e.offsetX, e.offsetY, e.position, el);\n }); // If not dispatch showTip, tip may be hide triggered by axis.\n\n\n dispatchAction({\n type: 'showTip',\n from: this.uid\n });\n },\n _showTooltipContent: function (tooltipModel, defaultHtml, params, asyncTicket, x, y, positionExpr, el) {\n // Reset ticket\n this._ticket = '';\n\n if (!tooltipModel.get('showContent') || !tooltipModel.get('show')) {\n return;\n }\n\n var tooltipContent = this._tooltipContent;\n var formatter = tooltipModel.get('formatter');\n positionExpr = positionExpr || tooltipModel.get('position');\n var html = defaultHtml;\n\n if (formatter && typeof formatter === 'string') {\n html = formatUtil.formatTpl(formatter, params, true);\n } else if (typeof formatter === 'function') {\n var callback = bind(function (cbTicket, html) {\n if (cbTicket === this._ticket) {\n tooltipContent.setContent(html);\n\n this._updatePosition(tooltipModel, positionExpr, x, y, tooltipContent, params, el);\n }\n }, this);\n this._ticket = asyncTicket;\n html = formatter(params, asyncTicket, callback);\n }\n\n tooltipContent.setContent(html);\n tooltipContent.show(tooltipModel);\n\n this._updatePosition(tooltipModel, positionExpr, x, y, tooltipContent, params, el);\n },\n\n /**\n * @param {string|Function|Array.|Object} positionExpr\n * @param {number} x Mouse x\n * @param {number} y Mouse y\n * @param {boolean} confine Whether confine tooltip content in view rect.\n * @param {Object|} params\n * @param {module:zrender/Element} el target element\n * @param {module:echarts/ExtensionAPI} api\n * @return {Array.}\n */\n _updatePosition: function (tooltipModel, positionExpr, x, y, content, params, el) {\n var viewWidth = this._api.getWidth();\n\n var viewHeight = this._api.getHeight();\n\n positionExpr = positionExpr || tooltipModel.get('position');\n var contentSize = content.getSize();\n var align = tooltipModel.get('align');\n var vAlign = tooltipModel.get('verticalAlign');\n var rect = el && el.getBoundingRect().clone();\n el && rect.applyTransform(el.transform);\n\n if (typeof positionExpr === 'function') {\n // Callback of position can be an array or a string specify the position\n positionExpr = positionExpr([x, y], params, content.el, rect, {\n viewSize: [viewWidth, viewHeight],\n contentSize: contentSize.slice()\n });\n }\n\n if (zrUtil.isArray(positionExpr)) {\n x = parsePercent(positionExpr[0], viewWidth);\n y = parsePercent(positionExpr[1], viewHeight);\n } else if (zrUtil.isObject(positionExpr)) {\n positionExpr.width = contentSize[0];\n positionExpr.height = contentSize[1];\n var layoutRect = layoutUtil.getLayoutRect(positionExpr, {\n width: viewWidth,\n height: viewHeight\n });\n x = layoutRect.x;\n y = layoutRect.y;\n align = null; // When positionExpr is left/top/right/bottom,\n // align and verticalAlign will not work.\n\n vAlign = null;\n } // Specify tooltip position by string 'top' 'bottom' 'left' 'right' around graphic element\n else if (typeof positionExpr === 'string' && el) {\n var pos = calcTooltipPosition(positionExpr, rect, contentSize);\n x = pos[0];\n y = pos[1];\n } else {\n var pos = refixTooltipPosition(x, y, content.el, viewWidth, viewHeight, align ? null : 20, vAlign ? null : 20);\n x = pos[0];\n y = pos[1];\n }\n\n align && (x -= isCenterAlign(align) ? contentSize[0] / 2 : align === 'right' ? contentSize[0] : 0);\n vAlign && (y -= isCenterAlign(vAlign) ? contentSize[1] / 2 : vAlign === 'bottom' ? contentSize[1] : 0);\n\n if (tooltipModel.get('confine')) {\n var pos = confineTooltipPosition(x, y, content.el, viewWidth, viewHeight);\n x = pos[0];\n y = pos[1];\n }\n\n content.moveTo(x, y);\n },\n // FIXME\n // Should we remove this but leave this to user?\n _updateContentNotChangedOnAxis: function (dataByCoordSys) {\n var lastCoordSys = this._lastDataByCoordSys;\n var contentNotChanged = !!lastCoordSys && lastCoordSys.length === dataByCoordSys.length;\n contentNotChanged && each(lastCoordSys, function (lastItemCoordSys, indexCoordSys) {\n var lastDataByAxis = lastItemCoordSys.dataByAxis || {};\n var thisItemCoordSys = dataByCoordSys[indexCoordSys] || {};\n var thisDataByAxis = thisItemCoordSys.dataByAxis || [];\n contentNotChanged &= lastDataByAxis.length === thisDataByAxis.length;\n contentNotChanged && each(lastDataByAxis, function (lastItem, indexAxis) {\n var thisItem = thisDataByAxis[indexAxis] || {};\n var lastIndices = lastItem.seriesDataIndices || [];\n var newIndices = thisItem.seriesDataIndices || [];\n contentNotChanged &= lastItem.value === thisItem.value && lastItem.axisType === thisItem.axisType && lastItem.axisId === thisItem.axisId && lastIndices.length === newIndices.length;\n contentNotChanged && each(lastIndices, function (lastIdxItem, j) {\n var newIdxItem = newIndices[j];\n contentNotChanged &= lastIdxItem.seriesIndex === newIdxItem.seriesIndex && lastIdxItem.dataIndex === newIdxItem.dataIndex;\n });\n });\n });\n this._lastDataByCoordSys = dataByCoordSys;\n return !!contentNotChanged;\n },\n _hide: function (dispatchAction) {\n // Do not directly hideLater here, because this behavior may be prevented\n // in dispatchAction when showTip is dispatched.\n // FIXME\n // duplicated hideTip if manuallyHideTip is called from dispatchAction.\n this._lastDataByCoordSys = null;\n dispatchAction({\n type: 'hideTip',\n from: this.uid\n });\n },\n dispose: function (ecModel, api) {\n if (env.node) {\n return;\n }\n\n this._tooltipContent.hide();\n\n globalListener.unregister('itemTooltip', api);\n }\n});\n/**\n * @param {Array.} modelCascade\n * From top to bottom. (the last one should be globalTooltipModel);\n */\n\n\nfunction buildTooltipModel(modelCascade) {\n var resultModel = modelCascade.pop();\n\n while (modelCascade.length) {\n var tooltipOpt = modelCascade.pop();\n\n if (tooltipOpt) {\n if (tooltipOpt instanceof Model) {\n tooltipOpt = tooltipOpt.get('tooltip', true);\n } // In each data item tooltip can be simply write:\n // {\n // value: 10,\n // tooltip: 'Something you need to know'\n // }\n\n\n if (typeof tooltipOpt === 'string') {\n tooltipOpt = {\n formatter: tooltipOpt\n };\n }\n\n resultModel = new Model(tooltipOpt, resultModel, resultModel.ecModel);\n }\n }\n\n return resultModel;\n}\n\nfunction makeDispatchAction(payload, api) {\n return payload.dispatchAction || zrUtil.bind(api.dispatchAction, api);\n}\n\nfunction refixTooltipPosition(x, y, el, viewWidth, viewHeight, gapH, gapV) {\n var size = getOuterSize(el);\n var width = size.width;\n var height = size.height;\n\n if (gapH != null) {\n if (x + width + gapH > viewWidth) {\n x -= width + gapH;\n } else {\n x += gapH;\n }\n }\n\n if (gapV != null) {\n if (y + height + gapV > viewHeight) {\n y -= height + gapV;\n } else {\n y += gapV;\n }\n }\n\n return [x, y];\n}\n\nfunction confineTooltipPosition(x, y, el, viewWidth, viewHeight) {\n var size = getOuterSize(el);\n var width = size.width;\n var height = size.height;\n x = Math.min(x + width, viewWidth) - width;\n y = Math.min(y + height, viewHeight) - height;\n x = Math.max(x, 0);\n y = Math.max(y, 0);\n return [x, y];\n}\n\nfunction getOuterSize(el) {\n var width = el.clientWidth;\n var height = el.clientHeight; // Consider browser compatibility.\n // IE8 does not support getComputedStyle.\n\n if (document.defaultView && document.defaultView.getComputedStyle) {\n var stl = document.defaultView.getComputedStyle(el);\n\n if (stl) {\n width += parseInt(stl.paddingLeft, 10) + parseInt(stl.paddingRight, 10) + parseInt(stl.borderLeftWidth, 10) + parseInt(stl.borderRightWidth, 10);\n height += parseInt(stl.paddingTop, 10) + parseInt(stl.paddingBottom, 10) + parseInt(stl.borderTopWidth, 10) + parseInt(stl.borderBottomWidth, 10);\n }\n }\n\n return {\n width: width,\n height: height\n };\n}\n\nfunction calcTooltipPosition(position, rect, contentSize) {\n var domWidth = contentSize[0];\n var domHeight = contentSize[1];\n var gap = 5;\n var x = 0;\n var y = 0;\n var rectWidth = rect.width;\n var rectHeight = rect.height;\n\n switch (position) {\n case 'inside':\n x = rect.x + rectWidth / 2 - domWidth / 2;\n y = rect.y + rectHeight / 2 - domHeight / 2;\n break;\n\n case 'top':\n x = rect.x + rectWidth / 2 - domWidth / 2;\n y = rect.y - domHeight - gap;\n break;\n\n case 'bottom':\n x = rect.x + rectWidth / 2 - domWidth / 2;\n y = rect.y + rectHeight + gap;\n break;\n\n case 'left':\n x = rect.x - domWidth - gap;\n y = rect.y + rectHeight / 2 - domHeight / 2;\n break;\n\n case 'right':\n x = rect.x + rectWidth + gap;\n y = rect.y + rectHeight / 2 - domHeight / 2;\n }\n\n return [x, y];\n}\n\nfunction isCenterAlign(align) {\n return align === 'center' || align === 'middle';\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar env = require(\"zrender/lib/core/env\");\n\nvar clazzUtil = require(\"../util/clazz\");\n\nvar lineStyleMixin = require(\"./mixin/lineStyle\");\n\nvar areaStyleMixin = require(\"./mixin/areaStyle\");\n\nvar textStyleMixin = require(\"./mixin/textStyle\");\n\nvar itemStyleMixin = require(\"./mixin/itemStyle\");\n\n/**\n * @module echarts/model/Model\n */\nvar mixin = zrUtil.mixin;\n/**\n * @alias module:echarts/model/Model\n * @constructor\n * @param {Object} option\n * @param {module:echarts/model/Model} [parentModel]\n * @param {module:echarts/model/Global} [ecModel]\n */\n\nfunction Model(option, parentModel, ecModel) {\n /**\n * @type {module:echarts/model/Model}\n * @readOnly\n */\n this.parentModel = parentModel;\n /**\n * @type {module:echarts/model/Global}\n * @readOnly\n */\n\n this.ecModel = ecModel;\n /**\n * @type {Object}\n * @protected\n */\n\n this.option = option; // Simple optimization\n // if (this.init) {\n // if (arguments.length <= 4) {\n // this.init(option, parentModel, ecModel, extraOpt);\n // }\n // else {\n // this.init.apply(this, arguments);\n // }\n // }\n}\n\nModel.prototype = {\n constructor: Model,\n\n /**\n * Model 的初始化函数\n * @param {Object} option\n */\n init: null,\n\n /**\n * 从新的 Option merge\n */\n mergeOption: function (option) {\n zrUtil.merge(this.option, option, true);\n },\n\n /**\n * @param {string|Array.} path\n * @param {boolean} [ignoreParent=false]\n * @return {*}\n */\n get: function (path, ignoreParent) {\n if (path == null) {\n return this.option;\n }\n\n return doGet(this.option, this.parsePath(path), !ignoreParent && getParent(this, path));\n },\n\n /**\n * @param {string} key\n * @param {boolean} [ignoreParent=false]\n * @return {*}\n */\n getShallow: function (key, ignoreParent) {\n var option = this.option;\n var val = option == null ? option : option[key];\n var parentModel = !ignoreParent && getParent(this, key);\n\n if (val == null && parentModel) {\n val = parentModel.getShallow(key);\n }\n\n return val;\n },\n\n /**\n * @param {string|Array.} [path]\n * @param {module:echarts/model/Model} [parentModel]\n * @return {module:echarts/model/Model}\n */\n getModel: function (path, parentModel) {\n var obj = path == null ? this.option : doGet(this.option, path = this.parsePath(path));\n var thisParentModel;\n parentModel = parentModel || (thisParentModel = getParent(this, path)) && thisParentModel.getModel(path);\n return new Model(obj, parentModel, this.ecModel);\n },\n\n /**\n * If model has option\n */\n isEmpty: function () {\n return this.option == null;\n },\n restoreData: function () {},\n // Pending\n clone: function () {\n var Ctor = this.constructor;\n return new Ctor(zrUtil.clone(this.option));\n },\n setReadOnly: function (properties) {\n clazzUtil.setReadOnly(this, properties);\n },\n // If path is null/undefined, return null/undefined.\n parsePath: function (path) {\n if (typeof path === 'string') {\n path = path.split('.');\n }\n\n return path;\n },\n\n /**\n * @param {Function} getParentMethod\n * param {Array.|string} path\n * return {module:echarts/model/Model}\n */\n customizeGetParent: function (getParentMethod) {\n clazzUtil.set(this, 'getParent', getParentMethod);\n },\n isAnimationEnabled: function () {\n if (!env.node) {\n if (this.option.animation != null) {\n return !!this.option.animation;\n } else if (this.parentModel) {\n return this.parentModel.isAnimationEnabled();\n }\n }\n }\n};\n\nfunction doGet(obj, pathArr, parentModel) {\n for (var i = 0; i < pathArr.length; i++) {\n // Ignore empty\n if (!pathArr[i]) {\n continue;\n } // obj could be number/string/... (like 0)\n\n\n obj = obj && typeof obj === 'object' ? obj[pathArr[i]] : null;\n\n if (obj == null) {\n break;\n }\n }\n\n if (obj == null && parentModel) {\n obj = parentModel.get(pathArr);\n }\n\n return obj;\n} // `path` can be null/undefined\n\n\nfunction getParent(model, path) {\n var getParentMethod = clazzUtil.get(model, 'getParent');\n return getParentMethod ? getParentMethod.call(model, path) : model.parentModel;\n} // Enable Model.extend.\n\n\nclazzUtil.enableClassExtend(Model);\nmixin(Model, lineStyleMixin);\nmixin(Model, areaStyleMixin);\nmixin(Model, textStyleMixin);\nmixin(Model, itemStyleMixin);\nvar _default = Model;\nmodule.exports = _default;","var Single = require(\"./Single\");\n\nvar CoordinateSystem = require(\"../../CoordinateSystem\");\n\n/**\n * Single coordinate system creator.\n */\n\n/**\n * Create single coordinate system and inject it into seriesModel.\n *\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n * @return {Array.}\n */\nfunction create(ecModel, api) {\n var singles = [];\n ecModel.eachComponent('singleAxis', function (axisModel, idx) {\n var single = new Single(axisModel, ecModel, api);\n single.name = 'single_' + idx;\n single.resize(axisModel, api);\n axisModel.coordinateSystem = single;\n singles.push(single);\n });\n ecModel.eachSeries(function (seriesModel) {\n if (seriesModel.get('coordinateSystem') === 'singleAxis') {\n var singleAxisModel = ecModel.queryComponents({\n mainType: 'singleAxis',\n index: seriesModel.get('singleAxisIndex'),\n id: seriesModel.get('singleAxisId')\n })[0];\n seriesModel.coordinateSystem = singleAxisModel && singleAxisModel.coordinateSystem;\n }\n });\n return singles;\n}\n\nCoordinateSystem.register('single', {\n create: create,\n dimensions: Single.prototype.dimensions\n});","var MarkerModel = require(\"./MarkerModel\");\n\nvar _default = MarkerModel.extend({\n type: 'markArea',\n defaultOption: {\n zlevel: 0,\n // PENDING\n z: 1,\n tooltip: {\n trigger: 'item'\n },\n // markArea should fixed on the coordinate system\n animation: false,\n label: {\n normal: {\n show: true,\n position: 'top'\n },\n emphasis: {\n show: true,\n position: 'top'\n }\n },\n itemStyle: {\n normal: {\n // color and borderColor default to use color from series\n // color: 'auto'\n // borderColor: 'auto'\n borderWidth: 0\n }\n }\n }\n});\n\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\nvar helper = require(\"./helper\");\n\n/**\n * @file Treemap action\n */\nvar noop = function () {};\n\nvar actionTypes = ['treemapZoomToNode', 'treemapRender', 'treemapMove'];\n\nfor (var i = 0; i < actionTypes.length; i++) {\n echarts.registerAction({\n type: actionTypes[i],\n update: 'updateView'\n }, noop);\n}\n\necharts.registerAction({\n type: 'treemapRootToNode',\n update: 'updateView'\n}, function (payload, ecModel) {\n ecModel.eachComponent({\n mainType: 'series',\n subType: 'treemap',\n query: payload\n }, handleRootToNode);\n\n function handleRootToNode(model, index) {\n var targetInfo = helper.retrieveTargetInfo(payload, model);\n\n if (targetInfo) {\n var originViewRoot = model.getViewRoot();\n\n if (originViewRoot) {\n payload.direction = helper.aboveViewRoot(originViewRoot, targetInfo.node) ? 'rollUp' : 'drillDown';\n }\n\n model.resetViewRoot(targetInfo.node);\n }\n }\n});","var easingFuncs = require(\"./easing\");\n\n/**\n * 动画主控制器\n * @config target 动画对象,可以是数组,如果是数组的话会批量分发onframe等事件\n * @config life(1000) 动画时长\n * @config delay(0) 动画延迟时间\n * @config loop(true)\n * @config gap(0) 循环的间隔时间\n * @config onframe\n * @config easing(optional)\n * @config ondestroy(optional)\n * @config onrestart(optional)\n *\n * TODO pause\n */\nfunction Clip(options) {\n this._target = options.target; // 生命周期\n\n this._life = options.life || 1000; // 延时\n\n this._delay = options.delay || 0; // 开始时间\n // this._startTime = new Date().getTime() + this._delay;// 单位毫秒\n\n this._initialized = false; // 是否循环\n\n this.loop = options.loop == null ? false : options.loop;\n this.gap = options.gap || 0;\n this.easing = options.easing || 'Linear';\n this.onframe = options.onframe;\n this.ondestroy = options.ondestroy;\n this.onrestart = options.onrestart;\n this._pausedTime = 0;\n this._paused = false;\n}\n\nClip.prototype = {\n constructor: Clip,\n step: function (globalTime, deltaTime) {\n // Set startTime on first step, or _startTime may has milleseconds different between clips\n // PENDING\n if (!this._initialized) {\n this._startTime = globalTime + this._delay;\n this._initialized = true;\n }\n\n if (this._paused) {\n this._pausedTime += deltaTime;\n return;\n }\n\n var percent = (globalTime - this._startTime - this._pausedTime) / this._life; // 还没开始\n\n if (percent < 0) {\n return;\n }\n\n percent = Math.min(percent, 1);\n var easing = this.easing;\n var easingFunc = typeof easing == 'string' ? easingFuncs[easing] : easing;\n var schedule = typeof easingFunc === 'function' ? easingFunc(percent) : percent;\n this.fire('frame', schedule); // 结束\n\n if (percent == 1) {\n if (this.loop) {\n this.restart(globalTime); // 重新开始周期\n // 抛出而不是直接调用事件直到 stage.update 后再统一调用这些事件\n\n return 'restart';\n } // 动画完成将这个控制器标识为待删除\n // 在Animation.update中进行批量删除\n\n\n this._needsRemove = true;\n return 'destroy';\n }\n\n return null;\n },\n restart: function (globalTime) {\n var remainder = (globalTime - this._startTime - this._pausedTime) % this._life;\n this._startTime = globalTime - remainder + this.gap;\n this._pausedTime = 0;\n this._needsRemove = false;\n },\n fire: function (eventType, arg) {\n eventType = 'on' + eventType;\n\n if (this[eventType]) {\n this[eventType](this._target, arg);\n }\n },\n pause: function () {\n this._paused = true;\n },\n resume: function () {\n this._paused = false;\n }\n};\nvar _default = Clip;\nmodule.exports = _default;","var graphic = require(\"../../util/graphic\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/**\n * @module echarts/chart/helper/Line\n */\n\n/**\n * @constructor\n * @extends {module:zrender/graphic/Group}\n * @alias {module:echarts/chart/helper/Polyline}\n */\nfunction Polyline(lineData, idx, seriesScope) {\n graphic.Group.call(this);\n\n this._createPolyline(lineData, idx, seriesScope);\n}\n\nvar polylineProto = Polyline.prototype;\n\npolylineProto._createPolyline = function (lineData, idx, seriesScope) {\n // var seriesModel = lineData.hostModel;\n var points = lineData.getItemLayout(idx);\n var line = new graphic.Polyline({\n shape: {\n points: points\n }\n });\n this.add(line);\n\n this._updateCommonStl(lineData, idx, seriesScope);\n};\n\npolylineProto.updateData = function (lineData, idx, seriesScope) {\n var seriesModel = lineData.hostModel;\n var line = this.childAt(0);\n var target = {\n shape: {\n points: lineData.getItemLayout(idx)\n }\n };\n graphic.updateProps(line, target, seriesModel, idx);\n\n this._updateCommonStl(lineData, idx, seriesScope);\n};\n\npolylineProto._updateCommonStl = function (lineData, idx, seriesScope) {\n var line = this.childAt(0);\n var itemModel = lineData.getItemModel(idx);\n var visualColor = lineData.getItemVisual(idx, 'color');\n var lineStyle = seriesScope && seriesScope.lineStyle;\n var hoverLineStyle = seriesScope && seriesScope.hoverLineStyle;\n\n if (!seriesScope || lineData.hasItemOption) {\n lineStyle = itemModel.getModel('lineStyle.normal').getLineStyle();\n hoverLineStyle = itemModel.getModel('lineStyle.emphasis').getLineStyle();\n }\n\n line.useStyle(zrUtil.defaults({\n strokeNoScale: true,\n fill: 'none',\n stroke: visualColor\n }, lineStyle));\n line.hoverStyle = hoverLineStyle;\n graphic.setHoverStyle(this);\n};\n\npolylineProto.updateLayout = function (lineData, idx) {\n var polyline = this.childAt(0);\n polyline.setShape('points', lineData.getItemLayout(idx));\n};\n\nzrUtil.inherits(Polyline, graphic.Group);\nvar _default = Polyline;\nmodule.exports = _default;","var Path = require(\"../Path\");\n\n/**\n * 圆环\n * @module zrender/graphic/shape/Ring\n */\nvar _default = Path.extend({\n type: 'ring',\n shape: {\n cx: 0,\n cy: 0,\n r: 0,\n r0: 0\n },\n buildPath: function (ctx, shape) {\n var x = shape.cx;\n var y = shape.cy;\n var PI2 = Math.PI * 2;\n ctx.moveTo(x + shape.r, y);\n ctx.arc(x, y, shape.r, 0, PI2, false);\n ctx.moveTo(x + shape.r0, y);\n ctx.arc(x, y, shape.r0, 0, PI2, true);\n }\n});\n\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nfunction legendSelectActionHandler(methodName, payload, ecModel) {\n var selectedMap = {};\n var isToggleSelect = methodName === 'toggleSelected';\n var isSelected; // Update all legend components\n\n ecModel.eachComponent('legend', function (legendModel) {\n if (isToggleSelect && isSelected != null) {\n // Force other legend has same selected status\n // Or the first is toggled to true and other are toggled to false\n // In the case one legend has some item unSelected in option. And if other legend\n // doesn't has the item, they will assume it is selected.\n legendModel[isSelected ? 'select' : 'unSelect'](payload.name);\n } else {\n legendModel[methodName](payload.name);\n isSelected = legendModel.isSelected(payload.name);\n }\n\n var legendData = legendModel.getData();\n zrUtil.each(legendData, function (model) {\n var name = model.get('name'); // Wrap element\n\n if (name === '\\n' || name === '') {\n return;\n }\n\n var isItemSelected = legendModel.isSelected(name);\n\n if (selectedMap.hasOwnProperty(name)) {\n // Unselected if any legend is unselected\n selectedMap[name] = selectedMap[name] && isItemSelected;\n } else {\n selectedMap[name] = isItemSelected;\n }\n });\n }); // Return the event explicitly\n\n return {\n name: payload.name,\n selected: selectedMap\n };\n}\n/**\n * @event legendToggleSelect\n * @type {Object}\n * @property {string} type 'legendToggleSelect'\n * @property {string} [from]\n * @property {string} name Series name or data item name\n */\n\n\necharts.registerAction('legendToggleSelect', 'legendselectchanged', zrUtil.curry(legendSelectActionHandler, 'toggleSelected'));\n/**\n * @event legendSelect\n * @type {Object}\n * @property {string} type 'legendSelect'\n * @property {string} name Series name or data item name\n */\n\necharts.registerAction('legendSelect', 'legendselected', zrUtil.curry(legendSelectActionHandler, 'select'));\n/**\n * @event legendUnSelect\n * @type {Object}\n * @property {string} type 'legendUnSelect'\n * @property {string} name Series name or data item name\n */\n\necharts.registerAction('legendUnSelect', 'legendunselected', zrUtil.curry(legendSelectActionHandler, 'unSelect'));","var zrUtil = require(\"zrender/lib/core/util\");\n\nfunction _default(coordSys) {\n var rect = coordSys.getRect();\n var rangeInfo = coordSys.getRangeInfo();\n return {\n coordSys: {\n type: 'calendar',\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n cellWidth: coordSys.getCellWidth(),\n cellHeight: coordSys.getCellHeight(),\n rangeInfo: {\n start: rangeInfo.start,\n end: rangeInfo.end,\n weeks: rangeInfo.weeks,\n dayCount: rangeInfo.allDay\n }\n },\n api: {\n coord: zrUtil.bind(coordSys.dataToPoint, coordSys)\n }\n };\n}\n\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\nvar SymbolDraw = require(\"../helper/SymbolDraw\");\n\nvar EffectSymbol = require(\"../helper/EffectSymbol\");\n\nvar _default = echarts.extendChartView({\n type: 'effectScatter',\n init: function () {\n this._symbolDraw = new SymbolDraw(EffectSymbol);\n },\n render: function (seriesModel, ecModel, api) {\n var data = seriesModel.getData();\n var effectSymbolDraw = this._symbolDraw;\n effectSymbolDraw.updateData(data);\n this.group.add(effectSymbolDraw.group);\n },\n updateLayout: function () {\n this._symbolDraw.updateLayout();\n },\n remove: function (ecModel, api) {\n this._symbolDraw && this._symbolDraw.remove(api);\n },\n dispose: function () {}\n});\n\nmodule.exports = _default;","var _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar echarts = require(\"../../echarts\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar HeatmapLayer = require(\"./HeatmapLayer\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nfunction getIsInPiecewiseRange(dataExtent, pieceList, selected) {\n var dataSpan = dataExtent[1] - dataExtent[0];\n pieceList = zrUtil.map(pieceList, function (piece) {\n return {\n interval: [(piece.interval[0] - dataExtent[0]) / dataSpan, (piece.interval[1] - dataExtent[0]) / dataSpan]\n };\n });\n var len = pieceList.length;\n var lastIndex = 0;\n return function (val) {\n // Try to find in the location of the last found\n for (var i = lastIndex; i < len; i++) {\n var interval = pieceList[i].interval;\n\n if (interval[0] <= val && val <= interval[1]) {\n lastIndex = i;\n break;\n }\n }\n\n if (i === len) {\n // Not found, back interation\n for (var i = lastIndex - 1; i >= 0; i--) {\n var interval = pieceList[i].interval;\n\n if (interval[0] <= val && val <= interval[1]) {\n lastIndex = i;\n break;\n }\n }\n }\n\n return i >= 0 && i < len && selected[i];\n };\n}\n\nfunction getIsInContinuousRange(dataExtent, range) {\n var dataSpan = dataExtent[1] - dataExtent[0];\n range = [(range[0] - dataExtent[0]) / dataSpan, (range[1] - dataExtent[0]) / dataSpan];\n return function (val) {\n return val >= range[0] && val <= range[1];\n };\n}\n\nfunction isGeoCoordSys(coordSys) {\n var dimensions = coordSys.dimensions; // Not use coorSys.type === 'geo' because coordSys maybe extended\n\n return dimensions[0] === 'lng' && dimensions[1] === 'lat';\n}\n\nvar _default = echarts.extendChartView({\n type: 'heatmap',\n render: function (seriesModel, ecModel, api) {\n var visualMapOfThisSeries;\n ecModel.eachComponent('visualMap', function (visualMap) {\n visualMap.eachTargetSeries(function (targetSeries) {\n if (targetSeries === seriesModel) {\n visualMapOfThisSeries = visualMap;\n }\n });\n });\n this.group.removeAll();\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys.type === 'cartesian2d' || coordSys.type === 'calendar') {\n this._renderOnCartesianAndCalendar(coordSys, seriesModel, api);\n } else if (isGeoCoordSys(coordSys)) {\n this._renderOnGeo(coordSys, seriesModel, visualMapOfThisSeries, api);\n }\n },\n dispose: function () {},\n _renderOnCartesianAndCalendar: function (coordSys, seriesModel, api) {\n if (coordSys.type === 'cartesian2d') {\n var xAxis = coordSys.getAxis('x');\n var yAxis = coordSys.getAxis('y');\n var width = xAxis.getBandWidth();\n var height = yAxis.getBandWidth();\n }\n\n var group = this.group;\n var data = seriesModel.getData();\n var itemStyleQuery = 'itemStyle.normal';\n var hoverItemStyleQuery = 'itemStyle.emphasis';\n var labelQuery = 'label.normal';\n var hoverLabelQuery = 'label.emphasis';\n var style = seriesModel.getModel(itemStyleQuery).getItemStyle(['color']);\n var hoverStl = seriesModel.getModel(hoverItemStyleQuery).getItemStyle();\n var labelModel = seriesModel.getModel('label.normal');\n var hoverLabelModel = seriesModel.getModel('label.emphasis');\n var coordSysType = coordSys.type;\n var dataDims = coordSysType === 'cartesian2d' ? [seriesModel.coordDimToDataDim('x')[0], seriesModel.coordDimToDataDim('y')[0], seriesModel.coordDimToDataDim('value')[0]] : [seriesModel.coordDimToDataDim('time')[0], seriesModel.coordDimToDataDim('value')[0]];\n data.each(function (idx) {\n var rect;\n\n if (coordSysType === 'cartesian2d') {\n // Ignore empty data\n if (isNaN(data.get(dataDims[2], idx))) {\n return;\n }\n\n var point = coordSys.dataToPoint([data.get(dataDims[0], idx), data.get(dataDims[1], idx)]);\n rect = new graphic.Rect({\n shape: {\n x: point[0] - width / 2,\n y: point[1] - height / 2,\n width: width,\n height: height\n },\n style: {\n fill: data.getItemVisual(idx, 'color'),\n opacity: data.getItemVisual(idx, 'opacity')\n }\n });\n } else {\n // Ignore empty data\n if (isNaN(data.get(dataDims[1], idx))) {\n return;\n }\n\n rect = new graphic.Rect({\n z2: 1,\n shape: coordSys.dataToRect([data.get(dataDims[0], idx)]).contentShape,\n style: {\n fill: data.getItemVisual(idx, 'color'),\n opacity: data.getItemVisual(idx, 'opacity')\n }\n });\n }\n\n var itemModel = data.getItemModel(idx); // Optimization for large datset\n\n if (data.hasItemOption) {\n style = itemModel.getModel(itemStyleQuery).getItemStyle(['color']);\n hoverStl = itemModel.getModel(hoverItemStyleQuery).getItemStyle();\n labelModel = itemModel.getModel(labelQuery);\n hoverLabelModel = itemModel.getModel(hoverLabelQuery);\n }\n\n var rawValue = seriesModel.getRawValue(idx);\n var defaultText = '-';\n\n if (rawValue && rawValue[2] != null) {\n defaultText = rawValue[2];\n }\n\n graphic.setLabelStyle(style, hoverStl, labelModel, hoverLabelModel, {\n labelFetcher: seriesModel,\n labelDataIndex: idx,\n defaultText: defaultText,\n isRectText: true\n });\n rect.setStyle(style);\n graphic.setHoverStyle(rect, data.hasItemOption ? hoverStl : zrUtil.extend({}, hoverStl));\n group.add(rect);\n data.setItemGraphicEl(idx, rect);\n });\n },\n _renderOnGeo: function (geo, seriesModel, visualMapModel, api) {\n var inRangeVisuals = visualMapModel.targetVisuals.inRange;\n var outOfRangeVisuals = visualMapModel.targetVisuals.outOfRange; // if (!visualMapping) {\n // throw new Error('Data range must have color visuals');\n // }\n\n var data = seriesModel.getData();\n var hmLayer = this._hmLayer || this._hmLayer || new HeatmapLayer();\n hmLayer.blurSize = seriesModel.get('blurSize');\n hmLayer.pointSize = seriesModel.get('pointSize');\n hmLayer.minOpacity = seriesModel.get('minOpacity');\n hmLayer.maxOpacity = seriesModel.get('maxOpacity');\n var rect = geo.getViewRect().clone();\n var roamTransform = geo.getRoamTransform().transform;\n rect.applyTransform(roamTransform); // Clamp on viewport\n\n var x = Math.max(rect.x, 0);\n var y = Math.max(rect.y, 0);\n var x2 = Math.min(rect.width + rect.x, api.getWidth());\n var y2 = Math.min(rect.height + rect.y, api.getHeight());\n var width = x2 - x;\n var height = y2 - y;\n var points = data.mapArray(['lng', 'lat', 'value'], function (lng, lat, value) {\n var pt = geo.dataToPoint([lng, lat]);\n pt[0] -= x;\n pt[1] -= y;\n pt.push(value);\n return pt;\n });\n var dataExtent = visualMapModel.getExtent();\n var isInRange = visualMapModel.type === 'visualMap.continuous' ? getIsInContinuousRange(dataExtent, visualMapModel.option.range) : getIsInPiecewiseRange(dataExtent, visualMapModel.getPieceList(), visualMapModel.option.selected);\n hmLayer.update(points, width, height, inRangeVisuals.color.getNormalizer(), {\n inRange: inRangeVisuals.color.getColorMapper(),\n outOfRange: outOfRangeVisuals.color.getColorMapper()\n }, isInRange);\n var img = new graphic.Image({\n style: {\n width: width,\n height: height,\n x: x,\n y: y,\n image: hmLayer.canvas\n },\n silent: true\n });\n this.group.add(img);\n }\n});\n\nmodule.exports = _default;","var curveTool = require(\"zrender/lib/core/curve\");\n\nvar vec2 = require(\"zrender/lib/core/vector\");\n\nvar v1 = [];\nvar v2 = [];\nvar v3 = [];\nvar quadraticAt = curveTool.quadraticAt;\nvar v2DistSquare = vec2.distSquare;\nvar mathAbs = Math.abs;\n\nfunction intersectCurveCircle(curvePoints, center, radius) {\n var p0 = curvePoints[0];\n var p1 = curvePoints[1];\n var p2 = curvePoints[2];\n var d = Infinity;\n var t;\n var radiusSquare = radius * radius;\n var interval = 0.1;\n\n for (var _t = 0.1; _t <= 0.9; _t += 0.1) {\n v1[0] = quadraticAt(p0[0], p1[0], p2[0], _t);\n v1[1] = quadraticAt(p0[1], p1[1], p2[1], _t);\n var diff = mathAbs(v2DistSquare(v1, center) - radiusSquare);\n\n if (diff < d) {\n d = diff;\n t = _t;\n }\n } // Assume the segment is monotone,Find root through Bisection method\n // At most 32 iteration\n\n\n for (var i = 0; i < 32; i++) {\n // var prev = t - interval;\n var next = t + interval; // v1[0] = quadraticAt(p0[0], p1[0], p2[0], prev);\n // v1[1] = quadraticAt(p0[1], p1[1], p2[1], prev);\n\n v2[0] = quadraticAt(p0[0], p1[0], p2[0], t);\n v2[1] = quadraticAt(p0[1], p1[1], p2[1], t);\n v3[0] = quadraticAt(p0[0], p1[0], p2[0], next);\n v3[1] = quadraticAt(p0[1], p1[1], p2[1], next);\n var diff = v2DistSquare(v2, center) - radiusSquare;\n\n if (mathAbs(diff) < 1e-2) {\n break;\n } // var prevDiff = v2DistSquare(v1, center) - radiusSquare;\n\n\n var nextDiff = v2DistSquare(v3, center) - radiusSquare;\n interval /= 2;\n\n if (diff < 0) {\n if (nextDiff >= 0) {\n t = t + interval;\n } else {\n t = t - interval;\n }\n } else {\n if (nextDiff >= 0) {\n t = t - interval;\n } else {\n t = t + interval;\n }\n }\n }\n\n return t;\n} // Adjust edge to avoid\n\n\nfunction _default(graph, scale) {\n var tmp0 = [];\n var quadraticSubdivide = curveTool.quadraticSubdivide;\n var pts = [[], [], []];\n var pts2 = [[], []];\n var v = [];\n scale /= 2;\n\n function getSymbolSize(node) {\n var symbolSize = node.getVisual('symbolSize');\n\n if (symbolSize instanceof Array) {\n symbolSize = (symbolSize[0] + symbolSize[1]) / 2;\n }\n\n return symbolSize;\n }\n\n graph.eachEdge(function (edge, idx) {\n var linePoints = edge.getLayout();\n var fromSymbol = edge.getVisual('fromSymbol');\n var toSymbol = edge.getVisual('toSymbol');\n\n if (!linePoints.__original) {\n linePoints.__original = [vec2.clone(linePoints[0]), vec2.clone(linePoints[1])];\n\n if (linePoints[2]) {\n linePoints.__original.push(vec2.clone(linePoints[2]));\n }\n }\n\n var originalPoints = linePoints.__original; // Quadratic curve\n\n if (linePoints[2] != null) {\n vec2.copy(pts[0], originalPoints[0]);\n vec2.copy(pts[1], originalPoints[2]);\n vec2.copy(pts[2], originalPoints[1]);\n\n if (fromSymbol && fromSymbol != 'none') {\n var symbolSize = getSymbolSize(edge.node1);\n var t = intersectCurveCircle(pts, originalPoints[0], symbolSize * scale); // Subdivide and get the second\n\n quadraticSubdivide(pts[0][0], pts[1][0], pts[2][0], t, tmp0);\n pts[0][0] = tmp0[3];\n pts[1][0] = tmp0[4];\n quadraticSubdivide(pts[0][1], pts[1][1], pts[2][1], t, tmp0);\n pts[0][1] = tmp0[3];\n pts[1][1] = tmp0[4];\n }\n\n if (toSymbol && toSymbol != 'none') {\n var symbolSize = getSymbolSize(edge.node2);\n var t = intersectCurveCircle(pts, originalPoints[1], symbolSize * scale); // Subdivide and get the first\n\n quadraticSubdivide(pts[0][0], pts[1][0], pts[2][0], t, tmp0);\n pts[1][0] = tmp0[1];\n pts[2][0] = tmp0[2];\n quadraticSubdivide(pts[0][1], pts[1][1], pts[2][1], t, tmp0);\n pts[1][1] = tmp0[1];\n pts[2][1] = tmp0[2];\n } // Copy back to layout\n\n\n vec2.copy(linePoints[0], pts[0]);\n vec2.copy(linePoints[1], pts[2]);\n vec2.copy(linePoints[2], pts[1]);\n } // Line\n else {\n vec2.copy(pts2[0], originalPoints[0]);\n vec2.copy(pts2[1], originalPoints[1]);\n vec2.sub(v, pts2[1], pts2[0]);\n vec2.normalize(v, v);\n\n if (fromSymbol && fromSymbol != 'none') {\n var symbolSize = getSymbolSize(edge.node1);\n vec2.scaleAndAdd(pts2[0], pts2[0], v, symbolSize * scale);\n }\n\n if (toSymbol && toSymbol != 'none') {\n var symbolSize = getSymbolSize(edge.node2);\n vec2.scaleAndAdd(pts2[1], pts2[1], v, -symbolSize * scale);\n }\n\n vec2.copy(linePoints[0], pts2[0]);\n vec2.copy(linePoints[1], pts2[1]);\n }\n });\n}\n\nmodule.exports = _default;","var zrUtil = require(\"../core/util\");\n\nvar Gradient = require(\"./Gradient\");\n\n/**\n * x, y, x2, y2 are all percent from 0 to 1\n * @param {number} [x=0]\n * @param {number} [y=0]\n * @param {number} [x2=1]\n * @param {number} [y2=0]\n * @param {Array.} colorStops\n * @param {boolean} [globalCoord=false]\n */\nvar LinearGradient = function (x, y, x2, y2, colorStops, globalCoord) {\n // Should do nothing more in this constructor. Because gradient can be\n // declard by `color: {type: 'linear', colorStops: ...}`, where\n // this constructor will not be called.\n this.x = x == null ? 0 : x;\n this.y = y == null ? 0 : y;\n this.x2 = x2 == null ? 1 : x2;\n this.y2 = y2 == null ? 0 : y2; // Can be cloned\n\n this.type = 'linear'; // If use global coord\n\n this.global = globalCoord || false;\n Gradient.call(this, colorStops);\n};\n\nLinearGradient.prototype = {\n constructor: LinearGradient\n};\nzrUtil.inherits(LinearGradient, Gradient);\nvar _default = LinearGradient;\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\nvar AxisPointerModel = echarts.extendComponentModel({\n type: 'axisPointer',\n coordSysAxesInfo: null,\n defaultOption: {\n // 'auto' means that show when triggered by tooltip or handle.\n show: 'auto',\n // 'click' | 'mousemove' | 'none'\n triggerOn: null,\n // set default in AxisPonterView.js\n zlevel: 0,\n z: 50,\n type: 'line',\n // axispointer triggered by tootip determine snap automatically,\n // see `modelHelper`.\n snap: false,\n triggerTooltip: true,\n value: null,\n status: null,\n // Init value depends on whether handle is used.\n // [group0, group1, ...]\n // Each group can be: {\n // mapper: function () {},\n // singleTooltip: 'multiple', // 'multiple' or 'single'\n // xAxisId: ...,\n // yAxisName: ...,\n // angleAxisIndex: ...\n // }\n // mapper: can be ignored.\n // input: {axisInfo, value}\n // output: {axisInfo, value}\n link: [],\n // Do not set 'auto' here, otherwise global animation: false\n // will not effect at this axispointer.\n animation: null,\n animationDurationUpdate: 200,\n lineStyle: {\n color: '#aaa',\n width: 1,\n type: 'solid'\n },\n shadowStyle: {\n color: 'rgba(150,150,150,0.3)'\n },\n label: {\n show: true,\n formatter: null,\n // string | Function\n precision: 'auto',\n // Or a number like 0, 1, 2 ...\n margin: 3,\n color: '#fff',\n padding: [5, 7, 5, 7],\n backgroundColor: 'auto',\n // default: axis line color\n borderColor: null,\n borderWidth: 0,\n shadowBlur: 3,\n shadowColor: '#aaa' // Considering applicability, common style should\n // better not have shadowOffset.\n // shadowOffsetX: 0,\n // shadowOffsetY: 2\n\n },\n handle: {\n show: false,\n icon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z',\n // jshint ignore:line\n size: 45,\n // handle margin is from symbol center to axis, which is stable when circular move.\n margin: 50,\n // color: '#1b8bbd'\n // color: '#2f4554'\n color: '#333',\n shadowBlur: 3,\n shadowColor: '#aaa',\n shadowOffsetX: 0,\n shadowOffsetY: 2,\n // For mobile performance\n throttle: 40\n }\n }\n});\nvar _default = AxisPointerModel;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar ComponentModel = require(\"../../model/Component\");\n\nvar axisModelCreator = require(\"../axisModelCreator\");\n\nvar axisModelCommonMixin = require(\"../axisModelCommonMixin\");\n\nvar AxisModel = ComponentModel.extend({\n type: 'cartesian2dAxis',\n\n /**\n * @type {module:echarts/coord/cartesian/Axis2D}\n */\n axis: null,\n\n /**\n * @override\n */\n init: function () {\n AxisModel.superApply(this, 'init', arguments);\n this.resetRange();\n },\n\n /**\n * @override\n */\n mergeOption: function () {\n AxisModel.superApply(this, 'mergeOption', arguments);\n this.resetRange();\n },\n\n /**\n * @override\n */\n restoreData: function () {\n AxisModel.superApply(this, 'restoreData', arguments);\n this.resetRange();\n },\n\n /**\n * @override\n * @return {module:echarts/model/Component}\n */\n getCoordSysModel: function () {\n return this.ecModel.queryComponents({\n mainType: 'grid',\n index: this.option.gridIndex,\n id: this.option.gridId\n })[0];\n }\n});\n\nfunction getAxisType(axisDim, option) {\n // Default axis with data is category axis\n return option.type || (option.data ? 'category' : 'value');\n}\n\nzrUtil.merge(AxisModel.prototype, axisModelCommonMixin);\nvar extraOption = {\n // gridIndex: 0,\n // gridId: '',\n // Offset is for multiple axis on the same position\n offset: 0\n};\naxisModelCreator('x', AxisModel, getAxisType, extraOption);\naxisModelCreator('y', AxisModel, getAxisType, extraOption);\nvar _default = AxisModel;\nmodule.exports = _default;","var _config = require(\"../config\");\n\nvar debugMode = _config.debugMode;\n\nvar log = function () {};\n\nif (debugMode === 1) {\n log = function () {\n for (var k in arguments) {\n throw new Error(arguments[k]);\n }\n };\n} else if (debugMode > 1) {\n log = function () {\n for (var k in arguments) {\n console.log(arguments[k]);\n }\n };\n}\n\nvar _default = log;\nmodule.exports = _default;","var echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _roamHelper = require(\"./roamHelper\");\n\nvar updateCenterAndZoom = _roamHelper.updateCenterAndZoom;\n\n/**\n * @payload\n * @property {string} [componentType=series]\n * @property {number} [dx]\n * @property {number} [dy]\n * @property {number} [zoom]\n * @property {number} [originX]\n * @property {number} [originY]\n */\necharts.registerAction({\n type: 'geoRoam',\n event: 'geoRoam',\n update: 'updateLayout'\n}, function (payload, ecModel) {\n var componentType = payload.componentType || 'series';\n ecModel.eachComponent({\n mainType: componentType,\n query: payload\n }, function (componentModel) {\n var geo = componentModel.coordinateSystem;\n\n if (geo.type !== 'geo') {\n return;\n }\n\n var res = updateCenterAndZoom(geo, payload, componentModel.get('scaleLimit'));\n componentModel.setCenter && componentModel.setCenter(res.center);\n componentModel.setZoom && componentModel.setZoom(res.zoom); // All map series with same `map` use the same geo coordinate system\n // So the center and zoom must be in sync. Include the series not selected by legend\n\n if (componentType === 'series') {\n zrUtil.each(componentModel.seriesGroup, function (seriesModel) {\n seriesModel.setCenter(res.center);\n seriesModel.setZoom(res.zoom);\n });\n }\n });\n});","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar Eventful = require(\"zrender/lib/mixin/Eventful\");\n\nvar eventTool = require(\"zrender/lib/core/event\");\n\nvar interactionMutex = require(\"./interactionMutex\");\n\n/**\n * @alias module:echarts/component/helper/RoamController\n * @constructor\n * @mixin {module:zrender/mixin/Eventful}\n *\n * @param {module:zrender/zrender~ZRender} zr\n */\nfunction RoamController(zr) {\n /**\n * @type {Function}\n */\n this.pointerChecker;\n /**\n * @type {module:zrender}\n */\n\n this._zr = zr;\n /**\n * @type {Object}\n */\n\n this._opt = {}; // Avoid two roamController bind the same handler\n\n var bind = zrUtil.bind;\n var mousedownHandler = bind(mousedown, this);\n var mousemoveHandler = bind(mousemove, this);\n var mouseupHandler = bind(mouseup, this);\n var mousewheelHandler = bind(mousewheel, this);\n var pinchHandler = bind(pinch, this);\n Eventful.call(this);\n /**\n * @param {Function} pointerChecker\n * input: x, y\n * output: boolean\n */\n\n this.setPointerChecker = function (pointerChecker) {\n this.pointerChecker = pointerChecker;\n };\n /**\n * Notice: only enable needed types. For example, if 'zoom'\n * is not needed, 'zoom' should not be enabled, otherwise\n * default mousewheel behaviour (scroll page) will be disabled.\n *\n * @param {boolean|string} [controlType=true] Specify the control type,\n * which can be null/undefined or true/false\n * or 'pan/move' or 'zoom'/'scale'\n * @param {Object} [opt]\n * @param {Object} [opt.zoomOnMouseWheel=true]\n * @param {Object} [opt.moveOnMouseMove=true]\n * @param {Object} [opt.preventDefaultMouseMove=true] When pan.\n */\n\n\n this.enable = function (controlType, opt) {\n // Disable previous first\n this.disable();\n this._opt = zrUtil.defaults(zrUtil.clone(opt) || {}, {\n zoomOnMouseWheel: true,\n moveOnMouseMove: true,\n preventDefaultMouseMove: true\n });\n\n if (controlType == null) {\n controlType = true;\n }\n\n if (controlType === true || controlType === 'move' || controlType === 'pan') {\n zr.on('mousedown', mousedownHandler);\n zr.on('mousemove', mousemoveHandler);\n zr.on('mouseup', mouseupHandler);\n }\n\n if (controlType === true || controlType === 'scale' || controlType === 'zoom') {\n zr.on('mousewheel', mousewheelHandler);\n zr.on('pinch', pinchHandler);\n }\n };\n\n this.disable = function () {\n zr.off('mousedown', mousedownHandler);\n zr.off('mousemove', mousemoveHandler);\n zr.off('mouseup', mouseupHandler);\n zr.off('mousewheel', mousewheelHandler);\n zr.off('pinch', pinchHandler);\n };\n\n this.dispose = this.disable;\n\n this.isDragging = function () {\n return this._dragging;\n };\n\n this.isPinching = function () {\n return this._pinching;\n };\n}\n\nzrUtil.mixin(RoamController, Eventful);\n\nfunction mousedown(e) {\n if (eventTool.notLeftMouse(e) || e.target && e.target.draggable) {\n return;\n }\n\n var x = e.offsetX;\n var y = e.offsetY; // Only check on mosedown, but not mousemove.\n // Mouse can be out of target when mouse moving.\n\n if (this.pointerChecker && this.pointerChecker(e, x, y)) {\n this._x = x;\n this._y = y;\n this._dragging = true;\n }\n}\n\nfunction mousemove(e) {\n if (eventTool.notLeftMouse(e) || !checkKeyBinding(this, 'moveOnMouseMove', e) || !this._dragging || e.gestureEvent === 'pinch' || interactionMutex.isTaken(this._zr, 'globalPan')) {\n return;\n }\n\n var x = e.offsetX;\n var y = e.offsetY;\n var oldX = this._x;\n var oldY = this._y;\n var dx = x - oldX;\n var dy = y - oldY;\n this._x = x;\n this._y = y;\n this._opt.preventDefaultMouseMove && eventTool.stop(e.event);\n this.trigger('pan', dx, dy, oldX, oldY, x, y);\n}\n\nfunction mouseup(e) {\n if (!eventTool.notLeftMouse(e)) {\n this._dragging = false;\n }\n}\n\nfunction mousewheel(e) {\n // wheelDelta maybe -0 in chrome mac.\n if (!checkKeyBinding(this, 'zoomOnMouseWheel', e) || e.wheelDelta === 0) {\n return;\n } // Convenience:\n // Mac and VM Windows on Mac: scroll up: zoom out.\n // Windows: scroll up: zoom in.\n\n\n var zoomDelta = e.wheelDelta > 0 ? 1.1 : 1 / 1.1;\n zoom.call(this, e, zoomDelta, e.offsetX, e.offsetY);\n}\n\nfunction pinch(e) {\n if (interactionMutex.isTaken(this._zr, 'globalPan')) {\n return;\n }\n\n var zoomDelta = e.pinchScale > 1 ? 1.1 : 1 / 1.1;\n zoom.call(this, e, zoomDelta, e.pinchX, e.pinchY);\n}\n\nfunction zoom(e, zoomDelta, zoomX, zoomY) {\n if (this.pointerChecker && this.pointerChecker(e, zoomX, zoomY)) {\n // When mouse is out of roamController rect,\n // default befavoius should not be be disabled, otherwise\n // page sliding is disabled, contrary to expectation.\n eventTool.stop(e.event);\n this.trigger('zoom', zoomDelta, zoomX, zoomY);\n }\n}\n\nfunction checkKeyBinding(roamController, prop, e) {\n var setting = roamController._opt[prop];\n return setting && (!zrUtil.isString(setting) || e.event[setting + 'Key']);\n}\n\nvar _default = RoamController;\nmodule.exports = _default;","var _vector = require(\"./vector\");\n\nvar v2Create = _vector.create;\nvar v2DistSquare = _vector.distSquare;\n\n/**\n * 曲线辅助模块\n * @module zrender/core/curve\n * @author pissang(https://www.github.com/pissang)\n */\nvar mathPow = Math.pow;\nvar mathSqrt = Math.sqrt;\nvar EPSILON = 1e-8;\nvar EPSILON_NUMERIC = 1e-4;\nvar THREE_SQRT = mathSqrt(3);\nvar ONE_THIRD = 1 / 3; // 临时变量\n\nvar _v0 = v2Create();\n\nvar _v1 = v2Create();\n\nvar _v2 = v2Create();\n\nfunction isAroundZero(val) {\n return val > -EPSILON && val < EPSILON;\n}\n\nfunction isNotAroundZero(val) {\n return val > EPSILON || val < -EPSILON;\n}\n/**\n * 计算三次贝塞尔值\n * @memberOf module:zrender/core/curve\n * @param {number} p0\n * @param {number} p1\n * @param {number} p2\n * @param {number} p3\n * @param {number} t\n * @return {number}\n */\n\n\nfunction cubicAt(p0, p1, p2, p3, t) {\n var onet = 1 - t;\n return onet * onet * (onet * p0 + 3 * t * p1) + t * t * (t * p3 + 3 * onet * p2);\n}\n/**\n * 计算三次贝塞尔导数值\n * @memberOf module:zrender/core/curve\n * @param {number} p0\n * @param {number} p1\n * @param {number} p2\n * @param {number} p3\n * @param {number} t\n * @return {number}\n */\n\n\nfunction cubicDerivativeAt(p0, p1, p2, p3, t) {\n var onet = 1 - t;\n return 3 * (((p1 - p0) * onet + 2 * (p2 - p1) * t) * onet + (p3 - p2) * t * t);\n}\n/**\n * 计算三次贝塞尔方程根,使用盛金公式\n * @memberOf module:zrender/core/curve\n * @param {number} p0\n * @param {number} p1\n * @param {number} p2\n * @param {number} p3\n * @param {number} val\n * @param {Array.} roots\n * @return {number} 有效根数目\n */\n\n\nfunction cubicRootAt(p0, p1, p2, p3, val, roots) {\n // Evaluate roots of cubic functions\n var a = p3 + 3 * (p1 - p2) - p0;\n var b = 3 * (p2 - p1 * 2 + p0);\n var c = 3 * (p1 - p0);\n var d = p0 - val;\n var A = b * b - 3 * a * c;\n var B = b * c - 9 * a * d;\n var C = c * c - 3 * b * d;\n var n = 0;\n\n if (isAroundZero(A) && isAroundZero(B)) {\n if (isAroundZero(b)) {\n roots[0] = 0;\n } else {\n var t1 = -c / b; //t1, t2, t3, b is not zero\n\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n } else {\n var disc = B * B - 4 * A * C;\n\n if (isAroundZero(disc)) {\n var K = B / A;\n var t1 = -b / a + K; // t1, a is not zero\n\n var t2 = -K / 2; // t2, t3\n\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n } else if (disc > 0) {\n var discSqrt = mathSqrt(disc);\n var Y1 = A * b + 1.5 * a * (-B + discSqrt);\n var Y2 = A * b + 1.5 * a * (-B - discSqrt);\n\n if (Y1 < 0) {\n Y1 = -mathPow(-Y1, ONE_THIRD);\n } else {\n Y1 = mathPow(Y1, ONE_THIRD);\n }\n\n if (Y2 < 0) {\n Y2 = -mathPow(-Y2, ONE_THIRD);\n } else {\n Y2 = mathPow(Y2, ONE_THIRD);\n }\n\n var t1 = (-b - (Y1 + Y2)) / (3 * a);\n\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n } else {\n var T = (2 * A * b - 3 * a * B) / (2 * mathSqrt(A * A * A));\n var theta = Math.acos(T) / 3;\n var ASqrt = mathSqrt(A);\n var tmp = Math.cos(theta);\n var t1 = (-b - 2 * ASqrt * tmp) / (3 * a);\n var t2 = (-b + ASqrt * (tmp + THREE_SQRT * Math.sin(theta))) / (3 * a);\n var t3 = (-b + ASqrt * (tmp - THREE_SQRT * Math.sin(theta))) / (3 * a);\n\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n\n if (t3 >= 0 && t3 <= 1) {\n roots[n++] = t3;\n }\n }\n }\n\n return n;\n}\n/**\n * 计算三次贝塞尔方程极限值的位置\n * @memberOf module:zrender/core/curve\n * @param {number} p0\n * @param {number} p1\n * @param {number} p2\n * @param {number} p3\n * @param {Array.} extrema\n * @return {number} 有效数目\n */\n\n\nfunction cubicExtrema(p0, p1, p2, p3, extrema) {\n var b = 6 * p2 - 12 * p1 + 6 * p0;\n var a = 9 * p1 + 3 * p3 - 3 * p0 - 9 * p2;\n var c = 3 * p1 - 3 * p0;\n var n = 0;\n\n if (isAroundZero(a)) {\n if (isNotAroundZero(b)) {\n var t1 = -c / b;\n\n if (t1 >= 0 && t1 <= 1) {\n extrema[n++] = t1;\n }\n }\n } else {\n var disc = b * b - 4 * a * c;\n\n if (isAroundZero(disc)) {\n extrema[0] = -b / (2 * a);\n } else if (disc > 0) {\n var discSqrt = mathSqrt(disc);\n var t1 = (-b + discSqrt) / (2 * a);\n var t2 = (-b - discSqrt) / (2 * a);\n\n if (t1 >= 0 && t1 <= 1) {\n extrema[n++] = t1;\n }\n\n if (t2 >= 0 && t2 <= 1) {\n extrema[n++] = t2;\n }\n }\n }\n\n return n;\n}\n/**\n * 细分三次贝塞尔曲线\n * @memberOf module:zrender/core/curve\n * @param {number} p0\n * @param {number} p1\n * @param {number} p2\n * @param {number} p3\n * @param {number} t\n * @param {Array.} out\n */\n\n\nfunction cubicSubdivide(p0, p1, p2, p3, t, out) {\n var p01 = (p1 - p0) * t + p0;\n var p12 = (p2 - p1) * t + p1;\n var p23 = (p3 - p2) * t + p2;\n var p012 = (p12 - p01) * t + p01;\n var p123 = (p23 - p12) * t + p12;\n var p0123 = (p123 - p012) * t + p012; // Seg0\n\n out[0] = p0;\n out[1] = p01;\n out[2] = p012;\n out[3] = p0123; // Seg1\n\n out[4] = p0123;\n out[5] = p123;\n out[6] = p23;\n out[7] = p3;\n}\n/**\n * 投射点到三次贝塞尔曲线上,返回投射距离。\n * 投射点有可能会有一个或者多个,这里只返回其中距离最短的一个。\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x3\n * @param {number} y3\n * @param {number} x\n * @param {number} y\n * @param {Array.} [out] 投射点\n * @return {number}\n */\n\n\nfunction cubicProjectPoint(x0, y0, x1, y1, x2, y2, x3, y3, x, y, out) {\n // http://pomax.github.io/bezierinfo/#projections\n var t;\n var interval = 0.005;\n var d = Infinity;\n var prev;\n var next;\n var d1;\n var d2;\n _v0[0] = x;\n _v0[1] = y; // 先粗略估计一下可能的最小距离的 t 值\n // PENDING\n\n for (var _t = 0; _t < 1; _t += 0.05) {\n _v1[0] = cubicAt(x0, x1, x2, x3, _t);\n _v1[1] = cubicAt(y0, y1, y2, y3, _t);\n d1 = v2DistSquare(_v0, _v1);\n\n if (d1 < d) {\n t = _t;\n d = d1;\n }\n }\n\n d = Infinity; // At most 32 iteration\n\n for (var i = 0; i < 32; i++) {\n if (interval < EPSILON_NUMERIC) {\n break;\n }\n\n prev = t - interval;\n next = t + interval; // t - interval\n\n _v1[0] = cubicAt(x0, x1, x2, x3, prev);\n _v1[1] = cubicAt(y0, y1, y2, y3, prev);\n d1 = v2DistSquare(_v1, _v0);\n\n if (prev >= 0 && d1 < d) {\n t = prev;\n d = d1;\n } else {\n // t + interval\n _v2[0] = cubicAt(x0, x1, x2, x3, next);\n _v2[1] = cubicAt(y0, y1, y2, y3, next);\n d2 = v2DistSquare(_v2, _v0);\n\n if (next <= 1 && d2 < d) {\n t = next;\n d = d2;\n } else {\n interval *= 0.5;\n }\n }\n } // t\n\n\n if (out) {\n out[0] = cubicAt(x0, x1, x2, x3, t);\n out[1] = cubicAt(y0, y1, y2, y3, t);\n } // console.log(interval, i);\n\n\n return mathSqrt(d);\n}\n/**\n * 计算二次方贝塞尔值\n * @param {number} p0\n * @param {number} p1\n * @param {number} p2\n * @param {number} t\n * @return {number}\n */\n\n\nfunction quadraticAt(p0, p1, p2, t) {\n var onet = 1 - t;\n return onet * (onet * p0 + 2 * t * p1) + t * t * p2;\n}\n/**\n * 计算二次方贝塞尔导数值\n * @param {number} p0\n * @param {number} p1\n * @param {number} p2\n * @param {number} t\n * @return {number}\n */\n\n\nfunction quadraticDerivativeAt(p0, p1, p2, t) {\n return 2 * ((1 - t) * (p1 - p0) + t * (p2 - p1));\n}\n/**\n * 计算二次方贝塞尔方程根\n * @param {number} p0\n * @param {number} p1\n * @param {number} p2\n * @param {number} t\n * @param {Array.} roots\n * @return {number} 有效根数目\n */\n\n\nfunction quadraticRootAt(p0, p1, p2, val, roots) {\n var a = p0 - 2 * p1 + p2;\n var b = 2 * (p1 - p0);\n var c = p0 - val;\n var n = 0;\n\n if (isAroundZero(a)) {\n if (isNotAroundZero(b)) {\n var t1 = -c / b;\n\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n } else {\n var disc = b * b - 4 * a * c;\n\n if (isAroundZero(disc)) {\n var t1 = -b / (2 * a);\n\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n } else if (disc > 0) {\n var discSqrt = mathSqrt(disc);\n var t1 = (-b + discSqrt) / (2 * a);\n var t2 = (-b - discSqrt) / (2 * a);\n\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n }\n }\n\n return n;\n}\n/**\n * 计算二次贝塞尔方程极限值\n * @memberOf module:zrender/core/curve\n * @param {number} p0\n * @param {number} p1\n * @param {number} p2\n * @return {number}\n */\n\n\nfunction quadraticExtremum(p0, p1, p2) {\n var divider = p0 + p2 - 2 * p1;\n\n if (divider === 0) {\n // p1 is center of p0 and p2\n return 0.5;\n } else {\n return (p0 - p1) / divider;\n }\n}\n/**\n * 细分二次贝塞尔曲线\n * @memberOf module:zrender/core/curve\n * @param {number} p0\n * @param {number} p1\n * @param {number} p2\n * @param {number} t\n * @param {Array.} out\n */\n\n\nfunction quadraticSubdivide(p0, p1, p2, t, out) {\n var p01 = (p1 - p0) * t + p0;\n var p12 = (p2 - p1) * t + p1;\n var p012 = (p12 - p01) * t + p01; // Seg0\n\n out[0] = p0;\n out[1] = p01;\n out[2] = p012; // Seg1\n\n out[3] = p012;\n out[4] = p12;\n out[5] = p2;\n}\n/**\n * 投射点到二次贝塞尔曲线上,返回投射距离。\n * 投射点有可能会有一个或者多个,这里只返回其中距离最短的一个。\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x\n * @param {number} y\n * @param {Array.} out 投射点\n * @return {number}\n */\n\n\nfunction quadraticProjectPoint(x0, y0, x1, y1, x2, y2, x, y, out) {\n // http://pomax.github.io/bezierinfo/#projections\n var t;\n var interval = 0.005;\n var d = Infinity;\n _v0[0] = x;\n _v0[1] = y; // 先粗略估计一下可能的最小距离的 t 值\n // PENDING\n\n for (var _t = 0; _t < 1; _t += 0.05) {\n _v1[0] = quadraticAt(x0, x1, x2, _t);\n _v1[1] = quadraticAt(y0, y1, y2, _t);\n var d1 = v2DistSquare(_v0, _v1);\n\n if (d1 < d) {\n t = _t;\n d = d1;\n }\n }\n\n d = Infinity; // At most 32 iteration\n\n for (var i = 0; i < 32; i++) {\n if (interval < EPSILON_NUMERIC) {\n break;\n }\n\n var prev = t - interval;\n var next = t + interval; // t - interval\n\n _v1[0] = quadraticAt(x0, x1, x2, prev);\n _v1[1] = quadraticAt(y0, y1, y2, prev);\n var d1 = v2DistSquare(_v1, _v0);\n\n if (prev >= 0 && d1 < d) {\n t = prev;\n d = d1;\n } else {\n // t + interval\n _v2[0] = quadraticAt(x0, x1, x2, next);\n _v2[1] = quadraticAt(y0, y1, y2, next);\n var d2 = v2DistSquare(_v2, _v0);\n\n if (next <= 1 && d2 < d) {\n t = next;\n d = d2;\n } else {\n interval *= 0.5;\n }\n }\n } // t\n\n\n if (out) {\n out[0] = quadraticAt(x0, x1, x2, t);\n out[1] = quadraticAt(y0, y1, y2, t);\n } // console.log(interval, i);\n\n\n return mathSqrt(d);\n}\n\nexports.cubicAt = cubicAt;\nexports.cubicDerivativeAt = cubicDerivativeAt;\nexports.cubicRootAt = cubicRootAt;\nexports.cubicExtrema = cubicExtrema;\nexports.cubicSubdivide = cubicSubdivide;\nexports.cubicProjectPoint = cubicProjectPoint;\nexports.quadraticAt = quadraticAt;\nexports.quadraticDerivativeAt = quadraticDerivativeAt;\nexports.quadraticRootAt = quadraticRootAt;\nexports.quadraticExtremum = quadraticExtremum;\nexports.quadraticSubdivide = quadraticSubdivide;\nexports.quadraticProjectPoint = quadraticProjectPoint;","var graphic = require(\"../../util/graphic\");\n\nvar BaseAxisPointer = require(\"./BaseAxisPointer\");\n\nvar viewHelper = require(\"./viewHelper\");\n\nvar cartesianAxisHelper = require(\"../axis/cartesianAxisHelper\");\n\nvar AxisView = require(\"../axis/AxisView\");\n\nvar CartesianAxisPointer = BaseAxisPointer.extend({\n /**\n * @override\n */\n makeElOption: function (elOption, value, axisModel, axisPointerModel, api) {\n var axis = axisModel.axis;\n var grid = axis.grid;\n var axisPointerType = axisPointerModel.get('type');\n var otherExtent = getCartesian(grid, axis).getOtherAxis(axis).getGlobalExtent();\n var pixelValue = axis.toGlobalCoord(axis.dataToCoord(value, true));\n\n if (axisPointerType && axisPointerType !== 'none') {\n var elStyle = viewHelper.buildElStyle(axisPointerModel);\n var pointerOption = pointerShapeBuilder[axisPointerType](axis, pixelValue, otherExtent, elStyle);\n pointerOption.style = elStyle;\n elOption.graphicKey = pointerOption.type;\n elOption.pointer = pointerOption;\n }\n\n var layoutInfo = cartesianAxisHelper.layout(grid.model, axisModel);\n viewHelper.buildCartesianSingleLabelElOption(value, elOption, layoutInfo, axisModel, axisPointerModel, api);\n },\n\n /**\n * @override\n */\n getHandleTransform: function (value, axisModel, axisPointerModel) {\n var layoutInfo = cartesianAxisHelper.layout(axisModel.axis.grid.model, axisModel, {\n labelInside: false\n });\n layoutInfo.labelMargin = axisPointerModel.get('handle.margin');\n return {\n position: viewHelper.getTransformedPosition(axisModel.axis, value, layoutInfo),\n rotation: layoutInfo.rotation + (layoutInfo.labelDirection < 0 ? Math.PI : 0)\n };\n },\n\n /**\n * @override\n */\n updateHandleTransform: function (transform, delta, axisModel, axisPointerModel) {\n var axis = axisModel.axis;\n var grid = axis.grid;\n var axisExtent = axis.getGlobalExtent(true);\n var otherExtent = getCartesian(grid, axis).getOtherAxis(axis).getGlobalExtent();\n var dimIndex = axis.dim === 'x' ? 0 : 1;\n var currPosition = transform.position;\n currPosition[dimIndex] += delta[dimIndex];\n currPosition[dimIndex] = Math.min(axisExtent[1], currPosition[dimIndex]);\n currPosition[dimIndex] = Math.max(axisExtent[0], currPosition[dimIndex]);\n var cursorOtherValue = (otherExtent[1] + otherExtent[0]) / 2;\n var cursorPoint = [cursorOtherValue, cursorOtherValue];\n cursorPoint[dimIndex] = currPosition[dimIndex]; // Make tooltip do not overlap axisPointer and in the middle of the grid.\n\n var tooltipOptions = [{\n verticalAlign: 'middle'\n }, {\n align: 'center'\n }];\n return {\n position: currPosition,\n rotation: transform.rotation,\n cursorPoint: cursorPoint,\n tooltipOption: tooltipOptions[dimIndex]\n };\n }\n});\n\nfunction getCartesian(grid, axis) {\n var opt = {};\n opt[axis.dim + 'AxisIndex'] = axis.index;\n return grid.getCartesian(opt);\n}\n\nvar pointerShapeBuilder = {\n line: function (axis, pixelValue, otherExtent, elStyle) {\n var targetShape = viewHelper.makeLineShape([pixelValue, otherExtent[0]], [pixelValue, otherExtent[1]], getAxisDimIndex(axis));\n graphic.subPixelOptimizeLine({\n shape: targetShape,\n style: elStyle\n });\n return {\n type: 'Line',\n shape: targetShape\n };\n },\n shadow: function (axis, pixelValue, otherExtent, elStyle) {\n var bandWidth = axis.getBandWidth();\n var span = otherExtent[1] - otherExtent[0];\n return {\n type: 'Rect',\n shape: viewHelper.makeRectShape([pixelValue - bandWidth / 2, otherExtent[0]], [bandWidth, span], getAxisDimIndex(axis))\n };\n }\n};\n\nfunction getAxisDimIndex(axis) {\n return axis.dim === 'x' ? 0 : 1;\n}\n\nAxisView.registerAxisPointerClass('CartesianAxisPointer', CartesianAxisPointer);\nvar _default = CartesianAxisPointer;\nmodule.exports = _default;","var Path = require(\"../Path\");\n\nvar fixClipWithShadow = require(\"../helper/fixClipWithShadow\");\n\n/**\n * 扇形\n * @module zrender/graphic/shape/Sector\n */\nvar _default = Path.extend({\n type: 'sector',\n shape: {\n cx: 0,\n cy: 0,\n r0: 0,\n r: 0,\n startAngle: 0,\n endAngle: Math.PI * 2,\n clockwise: true\n },\n brush: fixClipWithShadow(Path.prototype.brush),\n buildPath: function (ctx, shape) {\n var x = shape.cx;\n var y = shape.cy;\n var r0 = Math.max(shape.r0 || 0, 0);\n var r = Math.max(shape.r, 0);\n var startAngle = shape.startAngle;\n var endAngle = shape.endAngle;\n var clockwise = shape.clockwise;\n var unitX = Math.cos(startAngle);\n var unitY = Math.sin(startAngle);\n ctx.moveTo(unitX * r0 + x, unitY * r0 + y);\n ctx.lineTo(unitX * r + x, unitY * r + y);\n ctx.arc(x, y, r, startAngle, endAngle, !clockwise);\n ctx.lineTo(Math.cos(endAngle) * r0 + x, Math.sin(endAngle) * r0 + y);\n\n if (r0 !== 0) {\n ctx.arc(x, y, r0, endAngle, startAngle, clockwise);\n }\n\n ctx.closePath();\n }\n});\n\nmodule.exports = _default;","var _core = require(\"../core\");\n\nvar createElement = _core.createElement;\n\nvar zrUtil = require(\"../../core/util\");\n\nvar Path = require(\"../../graphic/Path\");\n\nvar ZImage = require(\"../../graphic/Image\");\n\nvar ZText = require(\"../../graphic/Text\");\n\nvar _graphic = require(\"../graphic\");\n\nvar svgPath = _graphic.path;\nvar svgImage = _graphic.image;\nvar svgText = _graphic.text;\n\n/**\n * @file Manages elements that can be defined in in SVG,\n * e.g., gradients, clip path, etc.\n * @author Zhang Wenli\n */\nvar MARK_UNUSED = '0';\nvar MARK_USED = '1';\n/**\n * Manages elements that can be defined in in SVG,\n * e.g., gradients, clip path, etc.\n *\n * @class\n * @param {SVGElement} svgRoot root of SVG document\n * @param {string|string[]} tagNames possible tag names\n * @param {string} markLabel label name to make if the element\n * is used\n */\n\nfunction Definable(svgRoot, tagNames, markLabel) {\n this._svgRoot = svgRoot;\n this._tagNames = typeof tagNames === 'string' ? [tagNames] : tagNames;\n this._markLabel = markLabel;\n this.nextId = 0;\n}\n\nDefinable.prototype.createElement = createElement;\n/**\n * Get the tag for svgRoot; optionally creates one if not exists.\n *\n * @param {boolean} isForceCreating if need to create when not exists\n * @return {SVGDefsElement} SVG element, null if it doesn't\n * exist and isForceCreating is false\n */\n\nDefinable.prototype.getDefs = function (isForceCreating) {\n var svgRoot = this._svgRoot;\n\n var defs = this._svgRoot.getElementsByTagName('defs');\n\n if (defs.length === 0) {\n // Not exist\n if (isForceCreating) {\n defs = svgRoot.insertBefore(this.createElement('defs'), // Create new tag\n svgRoot.firstChild // Insert in the front of svg\n );\n\n if (!defs.contains) {\n // IE doesn't support contains method\n defs.contains = function (el) {\n var children = defs.children;\n\n if (!children) {\n return false;\n }\n\n for (var i = children.length - 1; i >= 0; --i) {\n if (children[i] === el) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n return defs;\n } else {\n return null;\n }\n } else {\n return defs[0];\n }\n};\n/**\n * Update DOM element if necessary.\n *\n * @param {Object|string} element style element. e.g., for gradient,\n * it may be '#ccc' or {type: 'linear', ...}\n * @param {Function|undefined} onUpdate update callback\n */\n\n\nDefinable.prototype.update = function (element, onUpdate) {\n if (!element) {\n return;\n }\n\n var defs = this.getDefs(false);\n\n if (element._dom && defs.contains(element._dom)) {\n // Update DOM\n if (typeof onUpdate === 'function') {\n onUpdate();\n }\n } else {\n // No previous dom, create new\n var dom = this.add(element);\n\n if (dom) {\n element._dom = dom;\n }\n }\n};\n/**\n * Add gradient dom to defs\n *\n * @param {SVGElement} dom DOM to be added to \n */\n\n\nDefinable.prototype.addDom = function (dom) {\n var defs = this.getDefs(true);\n defs.appendChild(dom);\n};\n/**\n * Remove DOM of a given element.\n *\n * @param {SVGElement} element element to remove dom\n */\n\n\nDefinable.prototype.removeDom = function (element) {\n var defs = this.getDefs(false);\n defs.removeChild(element._dom);\n};\n/**\n * Get DOMs of this element.\n *\n * @return {HTMLDomElement} doms of this defineable elements in \n */\n\n\nDefinable.prototype.getDoms = function () {\n var defs = this.getDefs(false);\n\n if (!defs) {\n // No dom when defs is not defined\n return [];\n }\n\n var doms = [];\n zrUtil.each(this._tagNames, function (tagName) {\n var tags = defs.getElementsByTagName(tagName); // Note that tags is HTMLCollection, which is array-like\n // rather than real array.\n // So `doms.concat(tags)` add tags as one object.\n\n doms = doms.concat([].slice.call(tags));\n });\n return doms;\n};\n/**\n * Mark DOMs to be unused before painting, and clear unused ones at the end\n * of the painting.\n */\n\n\nDefinable.prototype.markAllUnused = function () {\n var doms = this.getDoms();\n var that = this;\n zrUtil.each(doms, function (dom) {\n dom[that._markLabel] = MARK_UNUSED;\n });\n};\n/**\n * Mark a single DOM to be used.\n *\n * @param {SVGElement} dom DOM to mark\n */\n\n\nDefinable.prototype.markUsed = function (dom) {\n if (dom) {\n dom[this._markLabel] = MARK_USED;\n }\n};\n/**\n * Remove unused DOMs defined in \n */\n\n\nDefinable.prototype.removeUnused = function () {\n var defs = this.getDefs(false);\n\n if (!defs) {\n // Nothing to remove\n return;\n }\n\n var doms = this.getDoms();\n var that = this;\n zrUtil.each(doms, function (dom) {\n if (dom[that._markLabel] !== MARK_USED) {\n // Remove gradient\n defs.removeChild(dom);\n }\n });\n};\n/**\n * Get SVG proxy.\n *\n * @param {Displayable} displayable displayable element\n * @return {Path|Image|Text} svg proxy of given element\n */\n\n\nDefinable.prototype.getSvgProxy = function (displayable) {\n if (displayable instanceof Path) {\n return svgPath;\n } else if (displayable instanceof ZImage) {\n return svgImage;\n } else if (displayable instanceof ZText) {\n return svgText;\n } else {\n return svgPath;\n }\n};\n/**\n * Get text SVG element.\n *\n * @param {Displayable} displayable displayable element\n * @return {SVGElement} SVG element of text\n */\n\n\nDefinable.prototype.getTextSvgElement = function (displayable) {\n return displayable.__textSvgEl;\n};\n/**\n * Get SVG element.\n *\n * @param {Displayable} displayable displayable element\n * @return {SVGElement} SVG element\n */\n\n\nDefinable.prototype.getSvgElement = function (displayable) {\n return displayable.__svgEl;\n};\n\nvar _default = Definable;\nmodule.exports = _default;","var DataZoomView = require(\"./DataZoomView\");\n\nvar _default = DataZoomView.extend({\n type: 'dataZoom.select'\n});\n\nmodule.exports = _default;","var SingleAxis = require(\"./SingleAxis\");\n\nvar axisHelper = require(\"../axisHelper\");\n\nvar _layout = require(\"../../util/layout\");\n\nvar getLayoutRect = _layout.getLayoutRect;\n\n/**\n * Single coordinates system.\n */\n\n/**\n * Create a single coordinates system.\n *\n * @param {module:echarts/coord/single/AxisModel} axisModel\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n */\nfunction Single(axisModel, ecModel, api) {\n /**\n * @type {string}\n * @readOnly\n */\n this.dimension = 'single';\n /**\n * Add it just for draw tooltip.\n *\n * @type {Array.}\n * @readOnly\n */\n\n this.dimensions = ['single'];\n /**\n * @private\n * @type {module:echarts/coord/single/SingleAxis}.\n */\n\n this._axis = null;\n /**\n * @private\n * @type {module:zrender/core/BoundingRect}\n */\n\n this._rect;\n\n this._init(axisModel, ecModel, api);\n /**\n * @type {module:echarts/coord/single/AxisModel}\n */\n\n\n this.model = axisModel;\n}\n\nSingle.prototype = {\n type: 'singleAxis',\n axisPointerEnabled: true,\n constructor: Single,\n\n /**\n * Initialize single coordinate system.\n *\n * @param {module:echarts/coord/single/AxisModel} axisModel\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n * @private\n */\n _init: function (axisModel, ecModel, api) {\n var dim = this.dimension;\n var axis = new SingleAxis(dim, axisHelper.createScaleByModel(axisModel), [0, 0], axisModel.get('type'), axisModel.get('position'));\n var isCategory = axis.type === 'category';\n axis.onBand = isCategory && axisModel.get('boundaryGap');\n axis.inverse = axisModel.get('inverse');\n axis.orient = axisModel.get('orient');\n axisModel.axis = axis;\n axis.model = axisModel;\n axis.coordinateSystem = this;\n this._axis = axis;\n },\n\n /**\n * Update axis scale after data processed\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n */\n update: function (ecModel, api) {\n ecModel.eachSeries(function (seriesModel) {\n if (seriesModel.coordinateSystem === this) {\n var data = seriesModel.getData();\n var dim = this.dimension;\n\n this._axis.scale.unionExtentFromData(data, seriesModel.coordDimToDataDim(dim));\n\n axisHelper.niceScaleExtent(this._axis.scale, this._axis.model);\n }\n }, this);\n },\n\n /**\n * Resize the single coordinate system.\n *\n * @param {module:echarts/coord/single/AxisModel} axisModel\n * @param {module:echarts/ExtensionAPI} api\n */\n resize: function (axisModel, api) {\n this._rect = getLayoutRect({\n left: axisModel.get('left'),\n top: axisModel.get('top'),\n right: axisModel.get('right'),\n bottom: axisModel.get('bottom'),\n width: axisModel.get('width'),\n height: axisModel.get('height')\n }, {\n width: api.getWidth(),\n height: api.getHeight()\n });\n\n this._adjustAxis();\n },\n\n /**\n * @return {module:zrender/core/BoundingRect}\n */\n getRect: function () {\n return this._rect;\n },\n\n /**\n * @private\n */\n _adjustAxis: function () {\n var rect = this._rect;\n var axis = this._axis;\n var isHorizontal = axis.isHorizontal();\n var extent = isHorizontal ? [0, rect.width] : [0, rect.height];\n var idx = axis.reverse ? 1 : 0;\n axis.setExtent(extent[idx], extent[1 - idx]);\n\n this._updateAxisTransform(axis, isHorizontal ? rect.x : rect.y);\n },\n\n /**\n * @param {module:echarts/coord/single/SingleAxis} axis\n * @param {number} coordBase\n */\n _updateAxisTransform: function (axis, coordBase) {\n var axisExtent = axis.getExtent();\n var extentSum = axisExtent[0] + axisExtent[1];\n var isHorizontal = axis.isHorizontal();\n axis.toGlobalCoord = isHorizontal ? function (coord) {\n return coord + coordBase;\n } : function (coord) {\n return extentSum - coord + coordBase;\n };\n axis.toLocalCoord = isHorizontal ? function (coord) {\n return coord - coordBase;\n } : function (coord) {\n return extentSum - coord + coordBase;\n };\n },\n\n /**\n * Get axis.\n *\n * @return {module:echarts/coord/single/SingleAxis}\n */\n getAxis: function () {\n return this._axis;\n },\n\n /**\n * Get axis, add it just for draw tooltip.\n *\n * @return {[type]} [description]\n */\n getBaseAxis: function () {\n return this._axis;\n },\n\n /**\n * @return {Array.}\n */\n getAxes: function () {\n return [this._axis];\n },\n\n /**\n * @return {Object} {baseAxes: [], otherAxes: []}\n */\n getTooltipAxes: function () {\n return {\n baseAxes: [this.getAxis()]\n };\n },\n\n /**\n * If contain point.\n *\n * @param {Array.} point\n * @return {boolean}\n */\n containPoint: function (point) {\n var rect = this.getRect();\n var axis = this.getAxis();\n var orient = axis.orient;\n\n if (orient === 'horizontal') {\n return axis.contain(axis.toLocalCoord(point[0])) && point[1] >= rect.y && point[1] <= rect.y + rect.height;\n } else {\n return axis.contain(axis.toLocalCoord(point[1])) && point[0] >= rect.y && point[0] <= rect.y + rect.height;\n }\n },\n\n /**\n * @param {Array.} point\n * @return {Array.}\n */\n pointToData: function (point) {\n var axis = this.getAxis();\n return [axis.coordToData(axis.toLocalCoord(point[axis.orient === 'horizontal' ? 0 : 1]))];\n },\n\n /**\n * Convert the series data to concrete point.\n *\n * @param {number|Array.} val\n * @return {Array.}\n */\n dataToPoint: function (val) {\n var axis = this.getAxis();\n var rect = this.getRect();\n var pt = [];\n var idx = axis.orient === 'horizontal' ? 0 : 1;\n\n if (val instanceof Array) {\n val = val[0];\n }\n\n pt[idx] = axis.toGlobalCoord(axis.dataToCoord(+val));\n pt[1 - idx] = idx === 0 ? rect.y + rect.height / 2 : rect.x + rect.width / 2;\n return pt;\n }\n};\nvar _default = Single;\nmodule.exports = _default;","var positiveBorderColorQuery = ['itemStyle', 'normal', 'borderColor'];\nvar negativeBorderColorQuery = ['itemStyle', 'normal', 'borderColor0'];\nvar positiveColorQuery = ['itemStyle', 'normal', 'color'];\nvar negativeColorQuery = ['itemStyle', 'normal', 'color0'];\n\nfunction _default(ecModel, api) {\n ecModel.eachRawSeriesByType('candlestick', function (seriesModel) {\n var data = seriesModel.getData();\n data.setVisual({\n legendSymbol: 'roundRect'\n }); // Only visible series has each data be visual encoded\n\n if (!ecModel.isSeriesFiltered(seriesModel)) {\n data.each(function (idx) {\n var itemModel = data.getItemModel(idx);\n var sign = data.getItemLayout(idx).sign;\n data.setItemVisual(idx, {\n color: itemModel.get(sign > 0 ? positiveColorQuery : negativeColorQuery),\n borderColor: itemModel.get(sign > 0 ? positiveBorderColorQuery : negativeBorderColorQuery)\n });\n });\n }\n });\n}\n\nmodule.exports = _default;","var graphic = require(\"../../util/graphic\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar ChartView = require(\"../../view/Chart\");\n\n/**\n * Piece of pie including Sector, Label, LabelLine\n * @constructor\n * @extends {module:zrender/graphic/Group}\n */\nfunction FunnelPiece(data, idx) {\n graphic.Group.call(this);\n var polygon = new graphic.Polygon();\n var labelLine = new graphic.Polyline();\n var text = new graphic.Text();\n this.add(polygon);\n this.add(labelLine);\n this.add(text);\n this.updateData(data, idx, true); // Hover to change label and labelLine\n\n function onEmphasis() {\n labelLine.ignore = labelLine.hoverIgnore;\n text.ignore = text.hoverIgnore;\n }\n\n function onNormal() {\n labelLine.ignore = labelLine.normalIgnore;\n text.ignore = text.normalIgnore;\n }\n\n this.on('emphasis', onEmphasis).on('normal', onNormal).on('mouseover', onEmphasis).on('mouseout', onNormal);\n}\n\nvar funnelPieceProto = FunnelPiece.prototype;\nvar opacityAccessPath = ['itemStyle', 'normal', 'opacity'];\n\nfunnelPieceProto.updateData = function (data, idx, firstCreate) {\n var polygon = this.childAt(0);\n var seriesModel = data.hostModel;\n var itemModel = data.getItemModel(idx);\n var layout = data.getItemLayout(idx);\n var opacity = data.getItemModel(idx).get(opacityAccessPath);\n opacity = opacity == null ? 1 : opacity; // Reset style\n\n polygon.useStyle({});\n\n if (firstCreate) {\n polygon.setShape({\n points: layout.points\n });\n polygon.setStyle({\n opacity: 0\n });\n graphic.initProps(polygon, {\n style: {\n opacity: opacity\n }\n }, seriesModel, idx);\n } else {\n graphic.updateProps(polygon, {\n style: {\n opacity: opacity\n },\n shape: {\n points: layout.points\n }\n }, seriesModel, idx);\n } // Update common style\n\n\n var itemStyleModel = itemModel.getModel('itemStyle');\n var visualColor = data.getItemVisual(idx, 'color');\n polygon.setStyle(zrUtil.defaults({\n lineJoin: 'round',\n fill: visualColor\n }, itemStyleModel.getModel('normal').getItemStyle(['opacity'])));\n polygon.hoverStyle = itemStyleModel.getModel('emphasis').getItemStyle();\n\n this._updateLabel(data, idx);\n\n graphic.setHoverStyle(this);\n};\n\nfunnelPieceProto._updateLabel = function (data, idx) {\n var labelLine = this.childAt(1);\n var labelText = this.childAt(2);\n var seriesModel = data.hostModel;\n var itemModel = data.getItemModel(idx);\n var layout = data.getItemLayout(idx);\n var labelLayout = layout.label;\n var visualColor = data.getItemVisual(idx, 'color');\n graphic.updateProps(labelLine, {\n shape: {\n points: labelLayout.linePoints || labelLayout.linePoints\n }\n }, seriesModel, idx);\n graphic.updateProps(labelText, {\n style: {\n x: labelLayout.x,\n y: labelLayout.y\n }\n }, seriesModel, idx);\n labelText.attr({\n rotation: labelLayout.rotation,\n origin: [labelLayout.x, labelLayout.y],\n z2: 10\n });\n var labelModel = itemModel.getModel('label.normal');\n var labelHoverModel = itemModel.getModel('label.emphasis');\n var labelLineModel = itemModel.getModel('labelLine.normal');\n var labelLineHoverModel = itemModel.getModel('labelLine.emphasis');\n var visualColor = data.getItemVisual(idx, 'color');\n graphic.setLabelStyle(labelText.style, labelText.hoverStyle = {}, labelModel, labelHoverModel, {\n labelFetcher: data.hostModel,\n labelDataIndex: idx,\n defaultText: data.getName(idx),\n autoColor: visualColor,\n useInsideStyle: !!labelLayout.inside\n }, {\n textAlign: labelLayout.textAlign,\n textVerticalAlign: labelLayout.verticalAlign\n });\n labelText.ignore = labelText.normalIgnore = !labelModel.get('show');\n labelText.hoverIgnore = !labelHoverModel.get('show');\n labelLine.ignore = labelLine.normalIgnore = !labelLineModel.get('show');\n labelLine.hoverIgnore = !labelLineHoverModel.get('show'); // Default use item visual color\n\n labelLine.setStyle({\n stroke: visualColor\n });\n labelLine.setStyle(labelLineModel.getModel('lineStyle').getLineStyle());\n labelLine.hoverStyle = labelLineHoverModel.getModel('lineStyle').getLineStyle();\n};\n\nzrUtil.inherits(FunnelPiece, graphic.Group);\nvar FunnelView = ChartView.extend({\n type: 'funnel',\n render: function (seriesModel, ecModel, api) {\n var data = seriesModel.getData();\n var oldData = this._data;\n var group = this.group;\n data.diff(oldData).add(function (idx) {\n var funnelPiece = new FunnelPiece(data, idx);\n data.setItemGraphicEl(idx, funnelPiece);\n group.add(funnelPiece);\n }).update(function (newIdx, oldIdx) {\n var piePiece = oldData.getItemGraphicEl(oldIdx);\n piePiece.updateData(data, newIdx);\n group.add(piePiece);\n data.setItemGraphicEl(newIdx, piePiece);\n }).remove(function (idx) {\n var piePiece = oldData.getItemGraphicEl(idx);\n group.remove(piePiece);\n }).execute();\n this._data = data;\n },\n remove: function () {\n this.group.removeAll();\n this._data = null;\n },\n dispose: function () {}\n});\nvar _default = FunnelView;\nmodule.exports = _default;","var List = require(\"../../data/List\");\n\nvar SeriesModel = require(\"../../model/Series\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar GaugeSeries = SeriesModel.extend({\n type: 'series.gauge',\n getInitialData: function (option, ecModel) {\n var list = new List(['value'], this);\n var dataOpt = option.data || [];\n\n if (!zrUtil.isArray(dataOpt)) {\n dataOpt = [dataOpt];\n } // Only use the first data item\n\n\n list.initData(dataOpt);\n return list;\n },\n defaultOption: {\n zlevel: 0,\n z: 2,\n // 默认全局居中\n center: ['50%', '50%'],\n legendHoverLink: true,\n radius: '75%',\n startAngle: 225,\n endAngle: -45,\n clockwise: true,\n // 最小值\n min: 0,\n // 最大值\n max: 100,\n // 分割段数,默认为10\n splitNumber: 10,\n // 坐标轴线\n axisLine: {\n // 默认显示,属性show控制显示与否\n show: true,\n lineStyle: {\n // 属性lineStyle控制线条样式\n color: [[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']],\n width: 30\n }\n },\n // 分隔线\n splitLine: {\n // 默认显示,属性show控制显示与否\n show: true,\n // 属性length控制线长\n length: 30,\n // 属性lineStyle(详见lineStyle)控制线条样式\n lineStyle: {\n color: '#eee',\n width: 2,\n type: 'solid'\n }\n },\n // 坐标轴小标记\n axisTick: {\n // 属性show控制显示与否,默认不显示\n show: true,\n // 每份split细分多少段\n splitNumber: 5,\n // 属性length控制线长\n length: 8,\n // 属性lineStyle控制线条样式\n lineStyle: {\n color: '#eee',\n width: 1,\n type: 'solid'\n }\n },\n axisLabel: {\n show: true,\n distance: 5,\n // formatter: null,\n color: 'auto'\n },\n pointer: {\n show: true,\n length: '80%',\n width: 8\n },\n itemStyle: {\n normal: {\n color: 'auto'\n }\n },\n title: {\n show: true,\n // x, y,单位px\n offsetCenter: [0, '-40%'],\n // 其余属性默认使用全局文本样式,详见TEXTSTYLE\n color: '#333',\n fontSize: 15\n },\n detail: {\n show: true,\n backgroundColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n borderColor: '#ccc',\n width: 100,\n height: null,\n // self-adaption\n padding: [5, 10],\n // x, y,单位px\n offsetCenter: [0, '40%'],\n // formatter: null,\n // 其余属性默认使用全局文本样式,详见TEXTSTYLE\n color: 'auto',\n fontSize: 30\n }\n }\n});\nvar _default = GaugeSeries;\nmodule.exports = _default;","// (1) The code `if (__DEV__) ...` can be removed by build tool.\n// (2) If intend to use `__DEV__`, this module should be imported. Use a global\n// variable `__DEV__` may cause that miss the declaration (see #6535), or the\n// declaration is behind of the using position (for example in `Model.extent`,\n// And tools like rollup can not analysis the dependency if not import).\nvar dev; // In browser\n\nif (typeof window !== 'undefined') {\n dev = window.__DEV__;\n} // In node\nelse if (typeof global !== 'undefined') {\n dev = global.__DEV__;\n }\n\nif (typeof dev === 'undefined') {\n dev = true;\n}\n\nvar __DEV__ = dev;\nexports.__DEV__ = __DEV__;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar List = require(\"../../data/List\");\n\nvar SeriesModel = require(\"../../model/Series\");\n\nvar completeDimensions = require(\"../../data/helper/completeDimensions\");\n\nvar _format = require(\"../../util/format\");\n\nvar encodeHTML = _format.encodeHTML;\nvar addCommas = _format.addCommas;\n\nvar dataSelectableMixin = require(\"../../component/helper/selectableMixin\");\n\nvar geoCreator = require(\"../../coord/geo/geoCreator\");\n\nvar MapSeries = SeriesModel.extend({\n type: 'series.map',\n dependencies: ['geo'],\n layoutMode: 'box',\n\n /**\n * Only first map series of same mapType will drawMap\n * @type {boolean}\n */\n needsDrawMap: false,\n\n /**\n * Group of all map series with same mapType\n * @type {boolean}\n */\n seriesGroup: [],\n init: function (option) {\n this._fillOption(option, this.getMapType()); // this.option = option;\n\n\n MapSeries.superApply(this, 'init', arguments);\n this.updateSelectedMap(option.data);\n },\n getInitialData: function (option) {\n var dimensions = completeDimensions(['value'], option.data || []);\n var list = new List(dimensions, this);\n list.initData(option.data);\n return list;\n },\n mergeOption: function (newOption) {\n this._fillOption(newOption, this.getMapType());\n\n MapSeries.superApply(this, 'mergeOption', arguments);\n this.updateSelectedMap(this.option.data);\n },\n\n /**\n * If no host geo model, return null, which means using a\n * inner exclusive geo model.\n */\n getHostGeoModel: function () {\n var geoIndex = this.option.geoIndex;\n return geoIndex != null ? this.dependentModels.geo[geoIndex] : null;\n },\n getMapType: function () {\n return (this.getHostGeoModel() || this).option.map;\n },\n _fillOption: function (option, mapName) {\n // Shallow clone\n // option = zrUtil.extend({}, option);\n option.data = geoCreator.getFilledRegions(option.data, mapName, option.nameMap); // return option;\n },\n getRawValue: function (dataIndex) {\n // Use value stored in data instead because it is calculated from multiple series\n // FIXME Provide all value of multiple series ?\n return this.getData().get('value', dataIndex);\n },\n\n /**\n * Get model of region\n * @param {string} name\n * @return {module:echarts/model/Model}\n */\n getRegionModel: function (regionName) {\n var data = this.getData();\n return data.getItemModel(data.indexOfName(regionName));\n },\n\n /**\n * Map tooltip formatter\n *\n * @param {number} dataIndex\n */\n formatTooltip: function (dataIndex) {\n // FIXME orignalData and data is a bit confusing\n var data = this.getData();\n var formattedValue = addCommas(this.getRawValue(dataIndex));\n var name = data.getName(dataIndex);\n var seriesGroup = this.seriesGroup;\n var seriesNames = [];\n\n for (var i = 0; i < seriesGroup.length; i++) {\n var otherIndex = seriesGroup[i].originalData.indexOfName(name);\n\n if (!isNaN(seriesGroup[i].originalData.get('value', otherIndex))) {\n seriesNames.push(encodeHTML(seriesGroup[i].name));\n }\n }\n\n return seriesNames.join(', ') + '
' + encodeHTML(name + ' : ' + formattedValue);\n },\n\n /**\n * @implement\n */\n getTooltipPosition: function (dataIndex) {\n if (dataIndex != null) {\n var name = this.getData().getName(dataIndex);\n var geo = this.coordinateSystem;\n var region = geo.getRegion(name);\n return region && geo.dataToPoint(region.center);\n }\n },\n setZoom: function (zoom) {\n this.option.zoom = zoom;\n },\n setCenter: function (center) {\n this.option.center = center;\n },\n defaultOption: {\n // 一级层叠\n zlevel: 0,\n // 二级层叠\n z: 2,\n coordinateSystem: 'geo',\n // map should be explicitly specified since ec3.\n map: '',\n // If `geoIndex` is not specified, a exclusive geo will be\n // created. Otherwise use the specified geo component, and\n // `map` and `mapType` are ignored.\n // geoIndex: 0,\n // 'center' | 'left' | 'right' | 'x%' | {number}\n left: 'center',\n // 'center' | 'top' | 'bottom' | 'x%' | {number}\n top: 'center',\n // right\n // bottom\n // width:\n // height\n // Aspect is width / height. Inited to be geoJson bbox aspect\n // This parameter is used for scale this aspect\n aspectScale: 0.75,\n ///// Layout with center and size\n // If you wan't to put map in a fixed size box with right aspect ratio\n // This two properties may more conveninet\n // layoutCenter: [50%, 50%]\n // layoutSize: 100\n // 数值合并方式,默认加和,可选为:\n // 'sum' | 'average' | 'max' | 'min'\n // mapValueCalculation: 'sum',\n // 地图数值计算结果小数精度\n // mapValuePrecision: 0,\n // 显示图例颜色标识(系列标识的小圆点),图例开启时有效\n showLegendSymbol: true,\n // 选择模式,默认关闭,可选single,multiple\n // selectedMode: false,\n dataRangeHoverLink: true,\n // 是否开启缩放及漫游模式\n // roam: false,\n // Define left-top, right-bottom coords to control view\n // For example, [ [180, 90], [-180, -90] ],\n // higher priority than center and zoom\n boundingCoords: null,\n // Default on center of map\n center: null,\n zoom: 1,\n scaleLimit: null,\n label: {\n normal: {\n show: false,\n color: '#000'\n },\n emphasis: {\n show: true,\n color: 'rgb(100,0,0)'\n }\n },\n // scaleLimit: null,\n itemStyle: {\n normal: {\n // color: 各异,\n borderWidth: 0.5,\n borderColor: '#444',\n areaColor: '#eee'\n },\n // 也是选中样式\n emphasis: {\n areaColor: 'rgba(255,215,0,0.8)'\n }\n }\n }\n});\nzrUtil.mixin(MapSeries, dataSelectableMixin);\nvar _default = MapSeries;\nmodule.exports = _default;","var env = require(\"zrender/lib/core/env\");\n\nvar lang = require(\"../../../lang\");\n\nvar featureManager = require(\"../featureManager\");\n\nvar saveAsImageLang = lang.toolbox.saveAsImage;\n\nfunction SaveAsImage(model) {\n this.model = model;\n}\n\nSaveAsImage.defaultOption = {\n show: true,\n icon: 'M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0',\n title: saveAsImageLang.title,\n type: 'png',\n // Default use option.backgroundColor\n // backgroundColor: '#fff',\n name: '',\n excludeComponents: ['toolbox'],\n pixelRatio: 1,\n lang: saveAsImageLang.lang.slice()\n};\nSaveAsImage.prototype.unusable = !env.canvasSupported;\nvar proto = SaveAsImage.prototype;\n\nproto.onclick = function (ecModel, api) {\n var model = this.model;\n var title = model.get('name') || ecModel.get('title.0.text') || 'echarts';\n var $a = document.createElement('a');\n var type = model.get('type', true) || 'png';\n $a.download = title + '.' + type;\n $a.target = '_blank';\n var url = api.getConnectedDataURL({\n type: type,\n backgroundColor: model.get('backgroundColor', true) || ecModel.get('backgroundColor') || '#fff',\n excludeComponents: model.get('excludeComponents'),\n pixelRatio: model.get('pixelRatio')\n });\n $a.href = url; // Chrome and Firefox\n\n if (typeof MouseEvent === 'function' && !env.browser.ie && !env.browser.edge) {\n var evt = new MouseEvent('click', {\n view: window,\n bubbles: true,\n cancelable: false\n });\n $a.dispatchEvent(evt);\n } // IE\n else {\n if (window.navigator.msSaveOrOpenBlob) {\n var bstr = atob(url.split(',')[1]);\n var n = bstr.length;\n var u8arr = new Uint8Array(n);\n\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n\n var blob = new Blob([u8arr]);\n window.navigator.msSaveOrOpenBlob(blob, title + '.' + type);\n } else {\n var lang = model.get('lang');\n var html = '' + '' + '' + '';\n var tab = window.open();\n tab.document.write(html);\n }\n }\n};\n\nfeatureManager.register('saveAsImage', SaveAsImage);\nvar _default = SaveAsImage;\nmodule.exports = _default;","var _config = require(\"../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar env = require(\"zrender/lib/core/env\");\n\nvar _format = require(\"../util/format\");\n\nvar formatTime = _format.formatTime;\nvar encodeHTML = _format.encodeHTML;\nvar addCommas = _format.addCommas;\nvar getTooltipMarker = _format.getTooltipMarker;\n\nvar _clazz = require(\"../util/clazz\");\n\nvar set = _clazz.set;\nvar get = _clazz.get;\n\nvar modelUtil = require(\"../util/model\");\n\nvar ComponentModel = require(\"./Component\");\n\nvar colorPaletteMixin = require(\"./mixin/colorPalette\");\n\nvar _layout = require(\"../util/layout\");\n\nvar getLayoutParams = _layout.getLayoutParams;\nvar mergeLayoutParam = _layout.mergeLayoutParam;\nvar SeriesModel = ComponentModel.extend({\n type: 'series.__base__',\n\n /**\n * @readOnly\n */\n seriesIndex: 0,\n // coodinateSystem will be injected in the echarts/CoordinateSystem\n coordinateSystem: null,\n\n /**\n * @type {Object}\n * @protected\n */\n defaultOption: null,\n\n /**\n * Data provided for legend\n * @type {Function}\n */\n // PENDING\n legendDataProvider: null,\n\n /**\n * Access path of color for visual\n */\n visualColorAccessPath: 'itemStyle.normal.color',\n\n /**\n * Support merge layout params.\n * Only support 'box' now (left/right/top/bottom/width/height).\n * @type {string|Object} Object can be {ignoreSize: true}\n * @readOnly\n */\n layoutMode: null,\n init: function (option, parentModel, ecModel, extraOpt) {\n /**\n * @type {number}\n * @readOnly\n */\n this.seriesIndex = this.componentIndex;\n this.mergeDefaultAndTheme(option, ecModel);\n var data = this.getInitialData(option, ecModel);\n\n /**\n * @type {module:echarts/data/List|module:echarts/data/Tree|module:echarts/data/Graph}\n * @private\n */\n set(this, 'dataBeforeProcessed', data); // If we reverse the order (make data firstly, and then make\n // dataBeforeProcessed by cloneShallow), cloneShallow will\n // cause data.graph.data !== data when using\n // module:echarts/data/Graph or module:echarts/data/Tree.\n // See module:echarts/data/helper/linkList\n\n this.restoreData();\n },\n\n /**\n * Util for merge default and theme to option\n * @param {Object} option\n * @param {module:echarts/model/Global} ecModel\n */\n mergeDefaultAndTheme: function (option, ecModel) {\n var layoutMode = this.layoutMode;\n var inputPositionParams = layoutMode ? getLayoutParams(option) : {}; // Backward compat: using subType on theme.\n // But if name duplicate between series subType\n // (for example: parallel) add component mainType,\n // add suffix 'Series'.\n\n var themeSubType = this.subType;\n\n if (ComponentModel.hasClass(themeSubType)) {\n themeSubType += 'Series';\n }\n\n zrUtil.merge(option, ecModel.getTheme().get(this.subType));\n zrUtil.merge(option, this.getDefaultOption()); // Default label emphasis `show`\n\n modelUtil.defaultEmphasis(option.label, ['show']);\n this.fillDataTextStyle(option.data);\n\n if (layoutMode) {\n mergeLayoutParam(option, inputPositionParams, layoutMode);\n }\n },\n mergeOption: function (newSeriesOption, ecModel) {\n newSeriesOption = zrUtil.merge(this.option, newSeriesOption, true);\n this.fillDataTextStyle(newSeriesOption.data);\n var layoutMode = this.layoutMode;\n\n if (layoutMode) {\n mergeLayoutParam(this.option, newSeriesOption, layoutMode);\n }\n\n var data = this.getInitialData(newSeriesOption, ecModel); // TODO Merge data?\n\n if (data) {\n set(this, 'data', data);\n set(this, 'dataBeforeProcessed', data.cloneShallow());\n }\n },\n fillDataTextStyle: function (data) {\n // Default data label emphasis `show`\n // FIXME Tree structure data ?\n // FIXME Performance ?\n if (data) {\n var props = ['show'];\n\n for (var i = 0; i < data.length; i++) {\n if (data[i] && data[i].label) {\n modelUtil.defaultEmphasis(data[i].label, props);\n }\n }\n }\n },\n\n /**\n * Init a data structure from data related option in series\n * Must be overwritten\n */\n getInitialData: function () {},\n\n /**\n * @param {string} [dataType]\n * @return {module:echarts/data/List}\n */\n getData: function (dataType) {\n var data = get(this, 'data');\n return dataType == null ? data : data.getLinkedData(dataType);\n },\n\n /**\n * @param {module:echarts/data/List} data\n */\n setData: function (data) {\n set(this, 'data', data);\n },\n\n /**\n * Get data before processed\n * @return {module:echarts/data/List}\n */\n getRawData: function () {\n return get(this, 'dataBeforeProcessed');\n },\n\n /**\n * Coord dimension to data dimension.\n *\n * By default the result is the same as dimensions of series data.\n * But in some series data dimensions are different from coord dimensions (i.e.\n * candlestick and boxplot). Override this method to handle those cases.\n *\n * Coord dimension to data dimension can be one-to-many\n *\n * @param {string} coordDim\n * @return {Array.} dimensions on the axis.\n */\n coordDimToDataDim: function (coordDim) {\n return modelUtil.coordDimToDataDim(this.getData(), coordDim);\n },\n\n /**\n * Convert data dimension to coord dimension.\n *\n * @param {string|number} dataDim\n * @return {string}\n */\n dataDimToCoordDim: function (dataDim) {\n return modelUtil.dataDimToCoordDim(this.getData(), dataDim);\n },\n\n /**\n * Get base axis if has coordinate system and has axis.\n * By default use coordSys.getBaseAxis();\n * Can be overrided for some chart.\n * @return {type} description\n */\n getBaseAxis: function () {\n var coordSys = this.coordinateSystem;\n return coordSys && coordSys.getBaseAxis && coordSys.getBaseAxis();\n },\n // FIXME\n\n /**\n * Default tooltip formatter\n *\n * @param {number} dataIndex\n * @param {boolean} [multipleSeries=false]\n * @param {number} [dataType]\n */\n formatTooltip: function (dataIndex, multipleSeries, dataType) {\n function formatArrayValue(value) {\n var vertially = zrUtil.reduce(value, function (vertially, val, idx) {\n var dimItem = data.getDimensionInfo(idx);\n return vertially |= dimItem && dimItem.tooltip !== false && dimItem.tooltipName != null;\n }, 0);\n var result = [];\n var tooltipDims = modelUtil.otherDimToDataDim(data, 'tooltip');\n tooltipDims.length ? zrUtil.each(tooltipDims, function (dimIdx) {\n setEachItem(data.get(dimIdx, dataIndex), dimIdx);\n }) // By default, all dims is used on tooltip.\n : zrUtil.each(value, setEachItem);\n\n function setEachItem(val, dimIdx) {\n var dimInfo = data.getDimensionInfo(dimIdx); // If `dimInfo.tooltip` is not set, show tooltip.\n\n if (!dimInfo || dimInfo.otherDims.tooltip === false) {\n return;\n }\n\n var dimType = dimInfo.type;\n var valStr = (vertially ? '- ' + (dimInfo.tooltipName || dimInfo.name) + ': ' : '') + (dimType === 'ordinal' ? val + '' : dimType === 'time' ? multipleSeries ? '' : formatTime('yyyy/MM/dd hh:mm:ss', val) : addCommas(val));\n valStr && result.push(encodeHTML(valStr));\n }\n\n return (vertially ? '
' : '') + result.join(vertially ? '
' : ', ');\n }\n\n var data = get(this, 'data');\n var value = this.getRawValue(dataIndex);\n var formattedValue = zrUtil.isArray(value) ? formatArrayValue(value) : encodeHTML(addCommas(value));\n var name = data.getName(dataIndex);\n var color = data.getItemVisual(dataIndex, 'color');\n\n if (zrUtil.isObject(color) && color.colorStops) {\n color = (color.colorStops[0] || {}).color;\n }\n\n color = color || 'transparent';\n var colorEl = getTooltipMarker(color);\n var seriesName = this.name; // FIXME\n\n if (seriesName === '\\0-') {\n // Not show '-'\n seriesName = '';\n }\n\n seriesName = seriesName ? encodeHTML(seriesName) + (!multipleSeries ? '
' : ': ') : '';\n return !multipleSeries ? seriesName + colorEl + (name ? encodeHTML(name) + ': ' + formattedValue : formattedValue) : colorEl + seriesName + formattedValue;\n },\n\n /**\n * @return {boolean}\n */\n isAnimationEnabled: function () {\n if (env.node) {\n return false;\n }\n\n var animationEnabled = this.getShallow('animation');\n\n if (animationEnabled) {\n if (this.getData().count() > this.getShallow('animationThreshold')) {\n animationEnabled = false;\n }\n }\n\n return animationEnabled;\n },\n restoreData: function () {\n set(this, 'data', get(this, 'dataBeforeProcessed').cloneShallow());\n },\n getColorFromPalette: function (name, scope) {\n var ecModel = this.ecModel; // PENDING\n\n var color = colorPaletteMixin.getColorFromPalette.call(this, name, scope);\n\n if (!color) {\n color = ecModel.getColorFromPalette(name, scope);\n }\n\n return color;\n },\n\n /**\n * Get data indices for show tooltip content. See tooltip.\n * @abstract\n * @param {Array.|string} dim\n * @param {Array.} value\n * @param {module:echarts/coord/single/SingleAxis} baseAxis\n * @return {Object} {dataIndices, nestestValue}.\n */\n getAxisTooltipData: null,\n\n /**\n * See tooltip.\n * @abstract\n * @param {number} dataIndex\n * @return {Array.} Point of tooltip. null/undefined can be returned.\n */\n getTooltipPosition: null\n});\nzrUtil.mixin(SeriesModel, modelUtil.dataFormatMixin);\nzrUtil.mixin(SeriesModel, colorPaletteMixin);\nvar _default = SeriesModel;\nmodule.exports = _default;","var smoothSpline = require(\"./smoothSpline\");\n\nvar smoothBezier = require(\"./smoothBezier\");\n\nfunction buildPath(ctx, shape, closePath) {\n var points = shape.points;\n var smooth = shape.smooth;\n\n if (points && points.length >= 2) {\n if (smooth && smooth !== 'spline') {\n var controlPoints = smoothBezier(points, smooth, closePath, shape.smoothConstraint);\n ctx.moveTo(points[0][0], points[0][1]);\n var len = points.length;\n\n for (var i = 0; i < (closePath ? len : len - 1); i++) {\n var cp1 = controlPoints[i * 2];\n var cp2 = controlPoints[i * 2 + 1];\n var p = points[(i + 1) % len];\n ctx.bezierCurveTo(cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]);\n }\n } else {\n if (smooth === 'spline') {\n points = smoothSpline(points, closePath);\n }\n\n ctx.moveTo(points[0][0], points[0][1]);\n\n for (var i = 1, l = points.length; i < l; i++) {\n ctx.lineTo(points[i][0], points[i][1]);\n }\n }\n\n closePath && ctx.closePath();\n }\n}\n\nexports.buildPath = buildPath;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar formatUtil = require(\"../../util/format\");\n\nvar AXIS_DIMS = ['x', 'y', 'z', 'radius', 'angle', 'single']; // Supported coords.\n\nvar COORDS = ['cartesian2d', 'polar', 'singleAxis'];\n/**\n * @param {string} coordType\n * @return {boolean}\n */\n\nfunction isCoordSupported(coordType) {\n return zrUtil.indexOf(COORDS, coordType) >= 0;\n}\n/**\n * Create \"each\" method to iterate names.\n *\n * @pubilc\n * @param {Array.} names\n * @param {Array.=} attrs\n * @return {Function}\n */\n\n\nfunction createNameEach(names, attrs) {\n names = names.slice();\n var capitalNames = zrUtil.map(names, formatUtil.capitalFirst);\n attrs = (attrs || []).slice();\n var capitalAttrs = zrUtil.map(attrs, formatUtil.capitalFirst);\n return function (callback, context) {\n zrUtil.each(names, function (name, index) {\n var nameObj = {\n name: name,\n capital: capitalNames[index]\n };\n\n for (var j = 0; j < attrs.length; j++) {\n nameObj[attrs[j]] = name + capitalAttrs[j];\n }\n\n callback.call(context, nameObj);\n });\n };\n}\n/**\n * Iterate each dimension name.\n *\n * @public\n * @param {Function} callback The parameter is like:\n * {\n * name: 'angle',\n * capital: 'Angle',\n * axis: 'angleAxis',\n * axisIndex: 'angleAixs',\n * index: 'angleIndex'\n * }\n * @param {Object} context\n */\n\n\nvar eachAxisDim = createNameEach(AXIS_DIMS, ['axisIndex', 'axis', 'index', 'id']);\n/**\n * If tow dataZoomModels has the same axis controlled, we say that they are 'linked'.\n * dataZoomModels and 'links' make up one or more graphics.\n * This function finds the graphic where the source dataZoomModel is in.\n *\n * @public\n * @param {Function} forEachNode Node iterator.\n * @param {Function} forEachEdgeType edgeType iterator\n * @param {Function} edgeIdGetter Giving node and edgeType, return an array of edge id.\n * @return {Function} Input: sourceNode, Output: Like {nodes: [], dims: {}}\n */\n\nfunction createLinkedNodesFinder(forEachNode, forEachEdgeType, edgeIdGetter) {\n return function (sourceNode) {\n var result = {\n nodes: [],\n records: {} // key: edgeType.name, value: Object (key: edge id, value: boolean).\n\n };\n forEachEdgeType(function (edgeType) {\n result.records[edgeType.name] = {};\n });\n\n if (!sourceNode) {\n return result;\n }\n\n absorb(sourceNode, result);\n var existsLink;\n\n do {\n existsLink = false;\n forEachNode(processSingleNode);\n } while (existsLink);\n\n function processSingleNode(node) {\n if (!isNodeAbsorded(node, result) && isLinked(node, result)) {\n absorb(node, result);\n existsLink = true;\n }\n }\n\n return result;\n };\n\n function isNodeAbsorded(node, result) {\n return zrUtil.indexOf(result.nodes, node) >= 0;\n }\n\n function isLinked(node, result) {\n var hasLink = false;\n forEachEdgeType(function (edgeType) {\n zrUtil.each(edgeIdGetter(node, edgeType) || [], function (edgeId) {\n result.records[edgeType.name][edgeId] && (hasLink = true);\n });\n });\n return hasLink;\n }\n\n function absorb(node, result) {\n result.nodes.push(node);\n forEachEdgeType(function (edgeType) {\n zrUtil.each(edgeIdGetter(node, edgeType) || [], function (edgeId) {\n result.records[edgeType.name][edgeId] = true;\n });\n });\n }\n}\n\nexports.isCoordSupported = isCoordSupported;\nexports.createNameEach = createNameEach;\nexports.eachAxisDim = eachAxisDim;\nexports.createLinkedNodesFinder = createLinkedNodesFinder;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar numberUtil = require(\"../../util/number\");\n\n/**\n * @file Using layout algorithm transform the raw data to layout information.\n * @author Deqing Li(annong035@gmail.com)\n */\nfunction _default(ecModel, api) {\n ecModel.eachSeriesByType('themeRiver', function (seriesModel) {\n var data = seriesModel.getData();\n var single = seriesModel.coordinateSystem;\n var layoutInfo = {}; // use the axis boundingRect for view\n\n var rect = single.getRect();\n layoutInfo.rect = rect;\n var boundaryGap = seriesModel.get('boundaryGap');\n var axis = single.getAxis();\n layoutInfo.boundaryGap = boundaryGap;\n\n if (axis.orient === 'horizontal') {\n boundaryGap[0] = numberUtil.parsePercent(boundaryGap[0], rect.height);\n boundaryGap[1] = numberUtil.parsePercent(boundaryGap[1], rect.height);\n var height = rect.height - boundaryGap[0] - boundaryGap[1];\n themeRiverLayout(data, seriesModel, height);\n } else {\n boundaryGap[0] = numberUtil.parsePercent(boundaryGap[0], rect.width);\n boundaryGap[1] = numberUtil.parsePercent(boundaryGap[1], rect.width);\n var width = rect.width - boundaryGap[0] - boundaryGap[1];\n themeRiverLayout(data, seriesModel, width);\n }\n\n data.setLayout('layoutInfo', layoutInfo);\n });\n}\n/**\n * The layout information about themeriver\n *\n * @param {module:echarts/data/List} data data in the series\n * @param {module:echarts/model/Series} seriesModel the model object of themeRiver series\n * @param {number} height value used to compute every series height\n */\n\n\nfunction themeRiverLayout(data, seriesModel, height) {\n if (!data.count()) {\n return;\n }\n\n var coordSys = seriesModel.coordinateSystem; // the data in each layer are organized into a series.\n\n var layerSeries = seriesModel.getLayerSeries(); // the points in each layer.\n\n var layerPoints = zrUtil.map(layerSeries, function (singleLayer) {\n return zrUtil.map(singleLayer.indices, function (idx) {\n var pt = coordSys.dataToPoint(data.get('time', idx));\n pt[1] = data.get('value', idx);\n return pt;\n });\n });\n var base = computeBaseline(layerPoints);\n var baseLine = base.y0;\n var ky = height / base.max; // set layout information for each item.\n\n var n = layerSeries.length;\n var m = layerSeries[0].indices.length;\n var baseY0;\n\n for (var j = 0; j < m; ++j) {\n baseY0 = baseLine[j] * ky;\n data.setItemLayout(layerSeries[0].indices[j], {\n layerIndex: 0,\n x: layerPoints[0][j][0],\n y0: baseY0,\n y: layerPoints[0][j][1] * ky\n });\n\n for (var i = 1; i < n; ++i) {\n baseY0 += layerPoints[i - 1][j][1] * ky;\n data.setItemLayout(layerSeries[i].indices[j], {\n layerIndex: i,\n x: layerPoints[i][j][0],\n y0: baseY0,\n y: layerPoints[i][j][1] * ky\n });\n }\n }\n}\n/**\n * Compute the baseLine of the rawdata\n * Inspired by Lee Byron's paper Stacked Graphs - Geometry & Aesthetics\n *\n * @param {Array.} data the points in each layer\n * @return {Object}\n */\n\n\nfunction computeBaseline(data) {\n var layerNum = data.length;\n var pointNum = data[0].length;\n var sums = [];\n var y0 = [];\n var max = 0;\n var temp;\n var base = {};\n\n for (var i = 0; i < pointNum; ++i) {\n for (var j = 0, temp = 0; j < layerNum; ++j) {\n temp += data[j][i][1];\n }\n\n if (temp > max) {\n max = temp;\n }\n\n sums.push(temp);\n }\n\n for (var k = 0; k < pointNum; ++k) {\n y0[k] = (max - sums[k]) / 2;\n }\n\n max = 0;\n\n for (var l = 0; l < pointNum; ++l) {\n var sum = sums[l] + y0[l];\n\n if (sum > max) {\n max = sum;\n }\n }\n\n base.y0 = y0;\n base.max = max;\n return base;\n}\n\nmodule.exports = _default;","require(\"./visualMapContinuous\");\n\nrequire(\"./visualMapPiecewise\");","function _default(ecModel) {\n ecModel.eachSeriesByType('map', function (seriesModel) {\n var colorList = seriesModel.get('color');\n var itemStyleModel = seriesModel.getModel('itemStyle.normal');\n var areaColor = itemStyleModel.get('areaColor');\n var color = itemStyleModel.get('color') || colorList[seriesModel.seriesIndex % colorList.length];\n seriesModel.getData().setVisual({\n 'areaColor': areaColor,\n 'color': color\n });\n });\n}\n\nmodule.exports = _default;","var makeStyleMapper = require(\"./makeStyleMapper\");\n\nvar getItemStyle = makeStyleMapper([['fill', 'color'], ['stroke', 'borderColor'], ['lineWidth', 'borderWidth'], ['opacity'], ['shadowBlur'], ['shadowOffsetX'], ['shadowOffsetY'], ['shadowColor'], ['textPosition'], ['textAlign']]);\nvar _default = {\n getItemStyle: function (excludes, includes) {\n var style = getItemStyle(this, excludes, includes);\n var lineDash = this.getBorderLineDash();\n lineDash && (style.lineDash = lineDash);\n return style;\n },\n getBorderLineDash: function () {\n var lineType = this.get('borderType');\n return lineType === 'solid' || lineType == null ? null : lineType === 'dashed' ? [5, 5] : [1, 1];\n }\n};\nmodule.exports = _default;","require(\"../coord/radar/Radar\");\n\nrequire(\"../coord/radar/RadarModel\");\n\nrequire(\"./radar/RadarView\");","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar RoamController = require(\"../../component/helper/RoamController\");\n\nvar throttleUtil = require(\"../../util/throttle\");\n\n// Only create one roam controller for each coordinate system.\n// one roam controller might be refered by two inside data zoom\n// components (for example, one for x and one for y). When user\n// pan or zoom, only dispatch one action for those data zoom\n// components.\nvar curry = zrUtil.curry;\nvar ATTR = '\\0_ec_dataZoom_roams';\n/**\n * @public\n * @param {module:echarts/ExtensionAPI} api\n * @param {Object} dataZoomInfo\n * @param {string} dataZoomInfo.coordId\n * @param {Function} dataZoomInfo.containsPoint\n * @param {Array.} dataZoomInfo.allCoordIds\n * @param {string} dataZoomInfo.dataZoomId\n * @param {number} dataZoomInfo.throttleRate\n * @param {Function} dataZoomInfo.panGetRange\n * @param {Function} dataZoomInfo.zoomGetRange\n * @param {boolean} [dataZoomInfo.zoomLock]\n * @param {boolean} [dataZoomInfo.disabled]\n */\n\nfunction register(api, dataZoomInfo) {\n var store = giveStore(api);\n var theDataZoomId = dataZoomInfo.dataZoomId;\n var theCoordId = dataZoomInfo.coordId; // Do clean when a dataZoom changes its target coordnate system.\n // Avoid memory leak, dispose all not-used-registered.\n\n zrUtil.each(store, function (record, coordId) {\n var dataZoomInfos = record.dataZoomInfos;\n\n if (dataZoomInfos[theDataZoomId] && zrUtil.indexOf(dataZoomInfo.allCoordIds, theCoordId) < 0) {\n delete dataZoomInfos[theDataZoomId];\n record.count--;\n }\n });\n cleanStore(store);\n var record = store[theCoordId]; // Create if needed.\n\n if (!record) {\n record = store[theCoordId] = {\n coordId: theCoordId,\n dataZoomInfos: {},\n count: 0\n };\n record.controller = createController(api, record);\n record.dispatchAction = zrUtil.curry(dispatchAction, api);\n } // Update reference of dataZoom.\n\n\n !record.dataZoomInfos[theDataZoomId] && record.count++;\n record.dataZoomInfos[theDataZoomId] = dataZoomInfo;\n var controllerParams = mergeControllerParams(record.dataZoomInfos);\n record.controller.enable(controllerParams.controlType, controllerParams.opt); // Consider resize, area should be always updated.\n\n record.controller.setPointerChecker(dataZoomInfo.containsPoint); // Update throttle.\n\n throttleUtil.createOrUpdate(record, 'dispatchAction', dataZoomInfo.throttleRate, 'fixRate');\n}\n/**\n * @public\n * @param {module:echarts/ExtensionAPI} api\n * @param {string} dataZoomId\n */\n\n\nfunction unregister(api, dataZoomId) {\n var store = giveStore(api);\n zrUtil.each(store, function (record) {\n record.controller.dispose();\n var dataZoomInfos = record.dataZoomInfos;\n\n if (dataZoomInfos[dataZoomId]) {\n delete dataZoomInfos[dataZoomId];\n record.count--;\n }\n });\n cleanStore(store);\n}\n/**\n * @public\n */\n\n\nfunction shouldRecordRange(payload, dataZoomId) {\n if (payload && payload.type === 'dataZoom' && payload.batch) {\n for (var i = 0, len = payload.batch.length; i < len; i++) {\n if (payload.batch[i].dataZoomId === dataZoomId) {\n return false;\n }\n }\n }\n\n return true;\n}\n/**\n * @public\n */\n\n\nfunction generateCoordId(coordModel) {\n return coordModel.type + '\\0_' + coordModel.id;\n}\n/**\n * Key: coordId, value: {dataZoomInfos: [], count, controller}\n * @type {Array.}\n */\n\n\nfunction giveStore(api) {\n // Mount store on zrender instance, so that we do not\n // need to worry about dispose.\n var zr = api.getZr();\n return zr[ATTR] || (zr[ATTR] = {});\n}\n\nfunction createController(api, newRecord) {\n var controller = new RoamController(api.getZr());\n controller.on('pan', curry(onPan, newRecord));\n controller.on('zoom', curry(onZoom, newRecord));\n return controller;\n}\n\nfunction cleanStore(store) {\n zrUtil.each(store, function (record, coordId) {\n if (!record.count) {\n record.controller.dispose();\n delete store[coordId];\n }\n });\n}\n\nfunction onPan(record, dx, dy, oldX, oldY, newX, newY) {\n wrapAndDispatch(record, function (info) {\n return info.panGetRange(record.controller, dx, dy, oldX, oldY, newX, newY);\n });\n}\n\nfunction onZoom(record, scale, mouseX, mouseY) {\n wrapAndDispatch(record, function (info) {\n return info.zoomGetRange(record.controller, scale, mouseX, mouseY);\n });\n}\n\nfunction wrapAndDispatch(record, getRange) {\n var batch = [];\n zrUtil.each(record.dataZoomInfos, function (info) {\n var range = getRange(info);\n !info.disabled && range && batch.push({\n dataZoomId: info.dataZoomId,\n start: range[0],\n end: range[1]\n });\n });\n record.dispatchAction(batch);\n}\n/**\n * This action will be throttled.\n */\n\n\nfunction dispatchAction(api, batch) {\n api.dispatchAction({\n type: 'dataZoom',\n batch: batch\n });\n}\n/**\n * Merge roamController settings when multiple dataZooms share one roamController.\n */\n\n\nfunction mergeControllerParams(dataZoomInfos) {\n var controlType;\n var opt = {};\n var typePriority = {\n 'true': 2,\n 'move': 1,\n 'false': 0,\n 'undefined': -1\n };\n zrUtil.each(dataZoomInfos, function (dataZoomInfo) {\n var oneType = dataZoomInfo.disabled ? false : dataZoomInfo.zoomLock ? 'move' : true;\n typePriority[oneType] > typePriority[controlType] && (controlType = oneType); // Do not support that different 'shift'/'ctrl'/'alt' setting used in one coord sys.\n\n zrUtil.extend(opt, dataZoomInfo.roamControllerOpt);\n });\n return {\n controlType: controlType,\n opt: opt\n };\n}\n\nexports.register = register;\nexports.unregister = unregister;\nexports.shouldRecordRange = shouldRecordRange;\nexports.generateCoordId = generateCoordId;","function buildPath(ctx, shape) {\n var x = shape.x;\n var y = shape.y;\n var width = shape.width;\n var height = shape.height;\n var r = shape.r;\n var r1;\n var r2;\n var r3;\n var r4; // Convert width and height to positive for better borderRadius\n\n if (width < 0) {\n x = x + width;\n width = -width;\n }\n\n if (height < 0) {\n y = y + height;\n height = -height;\n }\n\n if (typeof r === 'number') {\n r1 = r2 = r3 = r4 = r;\n } else if (r instanceof Array) {\n if (r.length === 1) {\n r1 = r2 = r3 = r4 = r[0];\n } else if (r.length === 2) {\n r1 = r3 = r[0];\n r2 = r4 = r[1];\n } else if (r.length === 3) {\n r1 = r[0];\n r2 = r4 = r[1];\n r3 = r[2];\n } else {\n r1 = r[0];\n r2 = r[1];\n r3 = r[2];\n r4 = r[3];\n }\n } else {\n r1 = r2 = r3 = r4 = 0;\n }\n\n var total;\n\n if (r1 + r2 > width) {\n total = r1 + r2;\n r1 *= width / total;\n r2 *= width / total;\n }\n\n if (r3 + r4 > width) {\n total = r3 + r4;\n r3 *= width / total;\n r4 *= width / total;\n }\n\n if (r2 + r3 > height) {\n total = r2 + r3;\n r2 *= height / total;\n r3 *= height / total;\n }\n\n if (r1 + r4 > height) {\n total = r1 + r4;\n r1 *= height / total;\n r4 *= height / total;\n }\n\n ctx.moveTo(x + r1, y);\n ctx.lineTo(x + width - r2, y);\n r2 !== 0 && ctx.quadraticCurveTo(x + width, y, x + width, y + r2);\n ctx.lineTo(x + width, y + height - r3);\n r3 !== 0 && ctx.quadraticCurveTo(x + width, y + height, x + width - r3, y + height);\n ctx.lineTo(x + r4, y + height);\n r4 !== 0 && ctx.quadraticCurveTo(x, y + height, x, y + height - r4);\n ctx.lineTo(x, y + r1);\n r1 !== 0 && ctx.quadraticCurveTo(x, y, x + r1, y);\n}\n\nexports.buildPath = buildPath;","var _forceHelper = require(\"./forceHelper\");\n\nvar forceLayout = _forceHelper.forceLayout;\n\nvar _simpleLayoutHelper = require(\"./simpleLayoutHelper\");\n\nvar simpleLayout = _simpleLayoutHelper.simpleLayout;\n\nvar _circularLayoutHelper = require(\"./circularLayoutHelper\");\n\nvar circularLayout = _circularLayoutHelper.circularLayout;\n\nvar _number = require(\"../../util/number\");\n\nvar linearMap = _number.linearMap;\n\nvar vec2 = require(\"zrender/lib/core/vector\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nfunction _default(ecModel) {\n ecModel.eachSeriesByType('graph', function (graphSeries) {\n var coordSys = graphSeries.coordinateSystem;\n\n if (coordSys && coordSys.type !== 'view') {\n return;\n }\n\n if (graphSeries.get('layout') === 'force') {\n var preservedPoints = graphSeries.preservedPoints || {};\n var graph = graphSeries.getGraph();\n var nodeData = graph.data;\n var edgeData = graph.edgeData;\n var forceModel = graphSeries.getModel('force');\n var initLayout = forceModel.get('initLayout');\n\n if (graphSeries.preservedPoints) {\n nodeData.each(function (idx) {\n var id = nodeData.getId(idx);\n nodeData.setItemLayout(idx, preservedPoints[id] || [NaN, NaN]);\n });\n } else if (!initLayout || initLayout === 'none') {\n simpleLayout(graphSeries);\n } else if (initLayout === 'circular') {\n circularLayout(graphSeries);\n }\n\n var nodeDataExtent = nodeData.getDataExtent('value');\n var edgeDataExtent = edgeData.getDataExtent('value'); // var edgeDataExtent = edgeData.getDataExtent('value');\n\n var repulsion = forceModel.get('repulsion');\n var edgeLength = forceModel.get('edgeLength');\n\n if (!zrUtil.isArray(repulsion)) {\n repulsion = [repulsion, repulsion];\n }\n\n if (!zrUtil.isArray(edgeLength)) {\n edgeLength = [edgeLength, edgeLength];\n } // Larger value has smaller length\n\n\n edgeLength = [edgeLength[1], edgeLength[0]];\n var nodes = nodeData.mapArray('value', function (value, idx) {\n var point = nodeData.getItemLayout(idx);\n var rep = linearMap(value, nodeDataExtent, repulsion);\n\n if (isNaN(rep)) {\n rep = (repulsion[0] + repulsion[1]) / 2;\n }\n\n return {\n w: rep,\n rep: rep,\n fixed: nodeData.getItemModel(idx).get('fixed'),\n p: !point || isNaN(point[0]) || isNaN(point[1]) ? null : point\n };\n });\n var edges = edgeData.mapArray('value', function (value, idx) {\n var edge = graph.getEdgeByIndex(idx);\n var d = linearMap(value, edgeDataExtent, edgeLength);\n\n if (isNaN(d)) {\n d = (edgeLength[0] + edgeLength[1]) / 2;\n }\n\n return {\n n1: nodes[edge.node1.dataIndex],\n n2: nodes[edge.node2.dataIndex],\n d: d,\n curveness: edge.getModel().get('lineStyle.normal.curveness') || 0\n };\n });\n var coordSys = graphSeries.coordinateSystem;\n var rect = coordSys.getBoundingRect();\n var forceInstance = forceLayout(nodes, edges, {\n rect: rect,\n gravity: forceModel.get('gravity')\n });\n var oldStep = forceInstance.step;\n\n forceInstance.step = function (cb) {\n for (var i = 0, l = nodes.length; i < l; i++) {\n if (nodes[i].fixed) {\n // Write back to layout instance\n vec2.copy(nodes[i].p, graph.getNodeByIndex(i).getLayout());\n }\n }\n\n oldStep(function (nodes, edges, stopped) {\n for (var i = 0, l = nodes.length; i < l; i++) {\n if (!nodes[i].fixed) {\n graph.getNodeByIndex(i).setLayout(nodes[i].p);\n }\n\n preservedPoints[nodeData.getId(i)] = nodes[i].p;\n }\n\n for (var i = 0, l = edges.length; i < l; i++) {\n var e = edges[i];\n var edge = graph.getEdgeByIndex(i);\n var p1 = e.n1.p;\n var p2 = e.n2.p;\n var points = edge.getLayout();\n points = points ? points.slice() : [];\n points[0] = points[0] || [];\n points[1] = points[1] || [];\n vec2.copy(points[0], p1);\n vec2.copy(points[1], p2);\n\n if (+e.curveness) {\n points[2] = [(p1[0] + p2[0]) / 2 - (p1[1] - p2[1]) * e.curveness, (p1[1] + p2[1]) / 2 - (p2[0] - p1[0]) * e.curveness];\n }\n\n edge.setLayout(points);\n } // Update layout\n\n\n cb && cb(stopped);\n });\n };\n\n graphSeries.forceLayout = forceInstance;\n graphSeries.preservedPoints = preservedPoints; // Step to get the layout\n\n forceInstance.step();\n } else {\n // Remove prev injected forceLayout instance\n graphSeries.forceLayout = null;\n }\n });\n}\n\nmodule.exports = _default;","var _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nvar _layout = require(\"../../util/layout\");\n\nvar getLayoutRect = _layout.getLayoutRect;\n\nvar axisHelper = require(\"../../coord/axisHelper\");\n\nvar Cartesian2D = require(\"./Cartesian2D\");\n\nvar Axis2D = require(\"./Axis2D\");\n\nvar CoordinateSystem = require(\"../../CoordinateSystem\");\n\nrequire(\"./GridModel\");\n\n/**\n * Grid is a region which contains at most 4 cartesian systems\n *\n * TODO Default cartesian\n */\n// Depends on GridModel, AxisModel, which performs preprocess.\nvar each = zrUtil.each;\nvar ifAxisCrossZero = axisHelper.ifAxisCrossZero;\nvar niceScaleExtent = axisHelper.niceScaleExtent;\n/**\n * Check if the axis is used in the specified grid\n * @inner\n */\n\nfunction isAxisUsedInTheGrid(axisModel, gridModel, ecModel) {\n return axisModel.getCoordSysModel() === gridModel;\n}\n\nfunction rotateTextRect(textRect, rotate) {\n var rotateRadians = rotate * Math.PI / 180;\n var boundingBox = textRect.plain();\n var beforeWidth = boundingBox.width;\n var beforeHeight = boundingBox.height;\n var afterWidth = beforeWidth * Math.cos(rotateRadians) + beforeHeight * Math.sin(rotateRadians);\n var afterHeight = beforeWidth * Math.sin(rotateRadians) + beforeHeight * Math.cos(rotateRadians);\n var rotatedRect = new BoundingRect(boundingBox.x, boundingBox.y, afterWidth, afterHeight);\n return rotatedRect;\n}\n\nfunction getLabelUnionRect(axis) {\n var axisModel = axis.model;\n var labels = axisModel.getFormattedLabels();\n var axisLabelModel = axisModel.getModel('axisLabel');\n var rect;\n var step = 1;\n var labelCount = labels.length;\n\n if (labelCount > 40) {\n // Simple optimization for large amount of labels\n step = Math.ceil(labelCount / 40);\n }\n\n for (var i = 0; i < labelCount; i += step) {\n if (!axis.isLabelIgnored(i)) {\n var unrotatedSingleRect = axisLabelModel.getTextRect(labels[i]);\n var singleRect = rotateTextRect(unrotatedSingleRect, axisLabelModel.get('rotate') || 0);\n rect ? rect.union(singleRect) : rect = singleRect;\n }\n }\n\n return rect;\n}\n\nfunction Grid(gridModel, ecModel, api) {\n /**\n * @type {Object.}\n * @private\n */\n this._coordsMap = {};\n /**\n * @type {Array.}\n * @private\n */\n\n this._coordsList = [];\n /**\n * @type {Object.}\n * @private\n */\n\n this._axesMap = {};\n /**\n * @type {Array.}\n * @private\n */\n\n this._axesList = [];\n\n this._initCartesian(gridModel, ecModel, api);\n\n this.model = gridModel;\n}\n\nvar gridProto = Grid.prototype;\ngridProto.type = 'grid';\ngridProto.axisPointerEnabled = true;\n\ngridProto.getRect = function () {\n return this._rect;\n};\n\ngridProto.update = function (ecModel, api) {\n var axesMap = this._axesMap;\n\n this._updateScale(ecModel, this.model);\n\n each(axesMap.x, function (xAxis) {\n niceScaleExtent(xAxis.scale, xAxis.model);\n });\n each(axesMap.y, function (yAxis) {\n niceScaleExtent(yAxis.scale, yAxis.model);\n });\n each(axesMap.x, function (xAxis) {\n fixAxisOnZero(axesMap, 'y', xAxis);\n });\n each(axesMap.y, function (yAxis) {\n fixAxisOnZero(axesMap, 'x', yAxis);\n }); // Resize again if containLabel is enabled\n // FIXME It may cause getting wrong grid size in data processing stage\n\n this.resize(this.model, api);\n};\n\nfunction fixAxisOnZero(axesMap, otherAxisDim, axis) {\n // onZero can not be enabled in these two situations:\n // 1. When any other axis is a category axis.\n // 2. When no axis is cross 0 point.\n var axes = axesMap[otherAxisDim];\n\n if (!axis.onZero) {\n return;\n }\n\n var onZeroAxisIndex = axis.onZeroAxisIndex; // If target axis is specified.\n\n if (onZeroAxisIndex != null) {\n var otherAxis = axes[onZeroAxisIndex];\n\n if (otherAxis && canNotOnZeroToAxis(otherAxis)) {\n axis.onZero = false;\n }\n\n return;\n }\n\n for (var idx in axes) {\n if (axes.hasOwnProperty(idx)) {\n var otherAxis = axes[idx];\n\n if (otherAxis && !canNotOnZeroToAxis(otherAxis)) {\n onZeroAxisIndex = +idx;\n break;\n }\n }\n }\n\n if (onZeroAxisIndex == null) {\n axis.onZero = false;\n }\n\n axis.onZeroAxisIndex = onZeroAxisIndex;\n}\n\nfunction canNotOnZeroToAxis(axis) {\n return axis.type === 'category' || axis.type === 'time' || !ifAxisCrossZero(axis);\n}\n/**\n * Resize the grid\n * @param {module:echarts/coord/cartesian/GridModel} gridModel\n * @param {module:echarts/ExtensionAPI} api\n */\n\n\ngridProto.resize = function (gridModel, api, ignoreContainLabel) {\n var gridRect = getLayoutRect(gridModel.getBoxLayoutParams(), {\n width: api.getWidth(),\n height: api.getHeight()\n });\n this._rect = gridRect;\n var axesList = this._axesList;\n adjustAxes(); // Minus label size\n\n if (!ignoreContainLabel && gridModel.get('containLabel')) {\n each(axesList, function (axis) {\n if (!axis.model.get('axisLabel.inside')) {\n var labelUnionRect = getLabelUnionRect(axis);\n\n if (labelUnionRect) {\n var dim = axis.isHorizontal() ? 'height' : 'width';\n var margin = axis.model.get('axisLabel.margin');\n gridRect[dim] -= labelUnionRect[dim] + margin;\n\n if (axis.position === 'top') {\n gridRect.y += labelUnionRect.height + margin;\n } else if (axis.position === 'left') {\n gridRect.x += labelUnionRect.width + margin;\n }\n }\n }\n });\n adjustAxes();\n }\n\n function adjustAxes() {\n each(axesList, function (axis) {\n var isHorizontal = axis.isHorizontal();\n var extent = isHorizontal ? [0, gridRect.width] : [0, gridRect.height];\n var idx = axis.inverse ? 1 : 0;\n axis.setExtent(extent[idx], extent[1 - idx]);\n updateAxisTransfrom(axis, isHorizontal ? gridRect.x : gridRect.y);\n });\n }\n};\n/**\n * @param {string} axisType\n * @param {number} [axisIndex]\n */\n\n\ngridProto.getAxis = function (axisType, axisIndex) {\n var axesMapOnDim = this._axesMap[axisType];\n\n if (axesMapOnDim != null) {\n if (axisIndex == null) {\n // Find first axis\n for (var name in axesMapOnDim) {\n if (axesMapOnDim.hasOwnProperty(name)) {\n return axesMapOnDim[name];\n }\n }\n }\n\n return axesMapOnDim[axisIndex];\n }\n};\n/**\n * @return {Array.}\n */\n\n\ngridProto.getAxes = function () {\n return this._axesList.slice();\n};\n/**\n * Usage:\n * grid.getCartesian(xAxisIndex, yAxisIndex);\n * grid.getCartesian(xAxisIndex);\n * grid.getCartesian(null, yAxisIndex);\n * grid.getCartesian({xAxisIndex: ..., yAxisIndex: ...});\n *\n * @param {number|Object} [xAxisIndex]\n * @param {number} [yAxisIndex]\n */\n\n\ngridProto.getCartesian = function (xAxisIndex, yAxisIndex) {\n if (xAxisIndex != null && yAxisIndex != null) {\n var key = 'x' + xAxisIndex + 'y' + yAxisIndex;\n return this._coordsMap[key];\n }\n\n if (zrUtil.isObject(xAxisIndex)) {\n yAxisIndex = xAxisIndex.yAxisIndex;\n xAxisIndex = xAxisIndex.xAxisIndex;\n } // When only xAxisIndex or yAxisIndex given, find its first cartesian.\n\n\n for (var i = 0, coordList = this._coordsList; i < coordList.length; i++) {\n if (coordList[i].getAxis('x').index === xAxisIndex || coordList[i].getAxis('y').index === yAxisIndex) {\n return coordList[i];\n }\n }\n};\n\ngridProto.getCartesians = function () {\n return this._coordsList.slice();\n};\n/**\n * @implements\n * see {module:echarts/CoodinateSystem}\n */\n\n\ngridProto.convertToPixel = function (ecModel, finder, value) {\n var target = this._findConvertTarget(ecModel, finder);\n\n return target.cartesian ? target.cartesian.dataToPoint(value) : target.axis ? target.axis.toGlobalCoord(target.axis.dataToCoord(value)) : null;\n};\n/**\n * @implements\n * see {module:echarts/CoodinateSystem}\n */\n\n\ngridProto.convertFromPixel = function (ecModel, finder, value) {\n var target = this._findConvertTarget(ecModel, finder);\n\n return target.cartesian ? target.cartesian.pointToData(value) : target.axis ? target.axis.coordToData(target.axis.toLocalCoord(value)) : null;\n};\n/**\n * @inner\n */\n\n\ngridProto._findConvertTarget = function (ecModel, finder) {\n var seriesModel = finder.seriesModel;\n var xAxisModel = finder.xAxisModel || seriesModel && seriesModel.getReferringComponents('xAxis')[0];\n var yAxisModel = finder.yAxisModel || seriesModel && seriesModel.getReferringComponents('yAxis')[0];\n var gridModel = finder.gridModel;\n var coordsList = this._coordsList;\n var cartesian;\n var axis;\n\n if (seriesModel) {\n cartesian = seriesModel.coordinateSystem;\n zrUtil.indexOf(coordsList, cartesian) < 0 && (cartesian = null);\n } else if (xAxisModel && yAxisModel) {\n cartesian = this.getCartesian(xAxisModel.componentIndex, yAxisModel.componentIndex);\n } else if (xAxisModel) {\n axis = this.getAxis('x', xAxisModel.componentIndex);\n } else if (yAxisModel) {\n axis = this.getAxis('y', yAxisModel.componentIndex);\n } // Lowest priority.\n else if (gridModel) {\n var grid = gridModel.coordinateSystem;\n\n if (grid === this) {\n cartesian = this._coordsList[0];\n }\n }\n\n return {\n cartesian: cartesian,\n axis: axis\n };\n};\n/**\n * @implements\n * see {module:echarts/CoodinateSystem}\n */\n\n\ngridProto.containPoint = function (point) {\n var coord = this._coordsList[0];\n\n if (coord) {\n return coord.containPoint(point);\n }\n};\n/**\n * Initialize cartesian coordinate systems\n * @private\n */\n\n\ngridProto._initCartesian = function (gridModel, ecModel, api) {\n var axisPositionUsed = {\n left: false,\n right: false,\n top: false,\n bottom: false\n };\n var axesMap = {\n x: {},\n y: {}\n };\n var axesCount = {\n x: 0,\n y: 0\n }; /// Create axis\n\n ecModel.eachComponent('xAxis', createAxisCreator('x'), this);\n ecModel.eachComponent('yAxis', createAxisCreator('y'), this);\n\n if (!axesCount.x || !axesCount.y) {\n // Roll back when there no either x or y axis\n this._axesMap = {};\n this._axesList = [];\n return;\n }\n\n this._axesMap = axesMap; /// Create cartesian2d\n\n each(axesMap.x, function (xAxis, xAxisIndex) {\n each(axesMap.y, function (yAxis, yAxisIndex) {\n var key = 'x' + xAxisIndex + 'y' + yAxisIndex;\n var cartesian = new Cartesian2D(key);\n cartesian.grid = this;\n cartesian.model = gridModel;\n this._coordsMap[key] = cartesian;\n\n this._coordsList.push(cartesian);\n\n cartesian.addAxis(xAxis);\n cartesian.addAxis(yAxis);\n }, this);\n }, this);\n\n function createAxisCreator(axisType) {\n return function (axisModel, idx) {\n if (!isAxisUsedInTheGrid(axisModel, gridModel, ecModel)) {\n return;\n }\n\n var axisPosition = axisModel.get('position');\n\n if (axisType === 'x') {\n // Fix position\n if (axisPosition !== 'top' && axisPosition !== 'bottom') {\n // Default bottom of X\n axisPosition = 'bottom';\n\n if (axisPositionUsed[axisPosition]) {\n axisPosition = axisPosition === 'top' ? 'bottom' : 'top';\n }\n }\n } else {\n // Fix position\n if (axisPosition !== 'left' && axisPosition !== 'right') {\n // Default left of Y\n axisPosition = 'left';\n\n if (axisPositionUsed[axisPosition]) {\n axisPosition = axisPosition === 'left' ? 'right' : 'left';\n }\n }\n }\n\n axisPositionUsed[axisPosition] = true;\n var axis = new Axis2D(axisType, axisHelper.createScaleByModel(axisModel), [0, 0], axisModel.get('type'), axisPosition);\n var isCategory = axis.type === 'category';\n axis.onBand = isCategory && axisModel.get('boundaryGap');\n axis.inverse = axisModel.get('inverse');\n axis.onZero = axisModel.get('axisLine.onZero');\n axis.onZeroAxisIndex = axisModel.get('axisLine.onZeroAxisIndex'); // Inject axis into axisModel\n\n axisModel.axis = axis; // Inject axisModel into axis\n\n axis.model = axisModel; // Inject grid info axis\n\n axis.grid = this; // Index of axis, can be used as key\n\n axis.index = idx;\n\n this._axesList.push(axis);\n\n axesMap[axisType][idx] = axis;\n axesCount[axisType]++;\n };\n }\n};\n/**\n * Update cartesian properties from series\n * @param {module:echarts/model/Option} option\n * @private\n */\n\n\ngridProto._updateScale = function (ecModel, gridModel) {\n // Reset scale\n zrUtil.each(this._axesList, function (axis) {\n axis.scale.setExtent(Infinity, -Infinity);\n });\n ecModel.eachSeries(function (seriesModel) {\n if (isCartesian2D(seriesModel)) {\n var axesModels = findAxesModels(seriesModel, ecModel);\n var xAxisModel = axesModels[0];\n var yAxisModel = axesModels[1];\n\n if (!isAxisUsedInTheGrid(xAxisModel, gridModel, ecModel) || !isAxisUsedInTheGrid(yAxisModel, gridModel, ecModel)) {\n return;\n }\n\n var cartesian = this.getCartesian(xAxisModel.componentIndex, yAxisModel.componentIndex);\n var data = seriesModel.getData();\n var xAxis = cartesian.getAxis('x');\n var yAxis = cartesian.getAxis('y');\n\n if (data.type === 'list') {\n unionExtent(data, xAxis, seriesModel);\n unionExtent(data, yAxis, seriesModel);\n }\n }\n }, this);\n\n function unionExtent(data, axis, seriesModel) {\n each(seriesModel.coordDimToDataDim(axis.dim), function (dim) {\n axis.scale.unionExtentFromData(data, dim);\n });\n }\n};\n/**\n * @param {string} [dim] 'x' or 'y' or 'auto' or null/undefined\n * @return {Object} {baseAxes: [], otherAxes: []}\n */\n\n\ngridProto.getTooltipAxes = function (dim) {\n var baseAxes = [];\n var otherAxes = [];\n each(this.getCartesians(), function (cartesian) {\n var baseAxis = dim != null && dim !== 'auto' ? cartesian.getAxis(dim) : cartesian.getBaseAxis();\n var otherAxis = cartesian.getOtherAxis(baseAxis);\n zrUtil.indexOf(baseAxes, baseAxis) < 0 && baseAxes.push(baseAxis);\n zrUtil.indexOf(otherAxes, otherAxis) < 0 && otherAxes.push(otherAxis);\n });\n return {\n baseAxes: baseAxes,\n otherAxes: otherAxes\n };\n};\n/**\n * @inner\n */\n\n\nfunction updateAxisTransfrom(axis, coordBase) {\n var axisExtent = axis.getExtent();\n var axisExtentSum = axisExtent[0] + axisExtent[1]; // Fast transform\n\n axis.toGlobalCoord = axis.dim === 'x' ? function (coord) {\n return coord + coordBase;\n } : function (coord) {\n return axisExtentSum - coord + coordBase;\n };\n axis.toLocalCoord = axis.dim === 'x' ? function (coord) {\n return coord - coordBase;\n } : function (coord) {\n return axisExtentSum - coord + coordBase;\n };\n}\n\nvar axesTypes = ['xAxis', 'yAxis'];\n/**\n * @inner\n */\n\nfunction findAxesModels(seriesModel, ecModel) {\n return zrUtil.map(axesTypes, function (axisType) {\n var axisModel = seriesModel.getReferringComponents(axisType)[0];\n return axisModel;\n });\n}\n/**\n * @inner\n */\n\n\nfunction isCartesian2D(seriesModel) {\n return seriesModel.get('coordinateSystem') === 'cartesian2d';\n}\n\nGrid.create = function (ecModel, api) {\n var grids = [];\n ecModel.eachComponent('grid', function (gridModel, idx) {\n var grid = new Grid(gridModel, ecModel, api);\n grid.name = 'grid_' + idx; // dataSampling requires axis extent, so resize\n // should be performed in create stage.\n\n grid.resize(gridModel, api, true);\n gridModel.coordinateSystem = grid;\n grids.push(grid);\n }); // Inject the coordinateSystems into seriesModel\n\n ecModel.eachSeries(function (seriesModel) {\n if (!isCartesian2D(seriesModel)) {\n return;\n }\n\n var axesModels = findAxesModels(seriesModel, ecModel);\n var xAxisModel = axesModels[0];\n var yAxisModel = axesModels[1];\n var gridModel = xAxisModel.getCoordSysModel();\n var grid = gridModel.coordinateSystem;\n seriesModel.coordinateSystem = grid.getCartesian(xAxisModel.componentIndex, yAxisModel.componentIndex);\n });\n return grids;\n}; // For deciding which dimensions to use when creating list data\n\n\nGrid.dimensions = Grid.prototype.dimensions = Cartesian2D.prototype.dimensions;\nCoordinateSystem.register('cartesian2d', Grid);\nvar _default = Grid;\nmodule.exports = _default;","var graphic = require(\"../../util/graphic\");\n\nvar echarts = require(\"../../echarts\");\n\n/**\n * @file The file used to draw sankey view\n * @author Deqing Li(annong035@gmail.com)\n */\nvar SankeyShape = graphic.extendShape({\n shape: {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n cpx1: 0,\n cpy1: 0,\n cpx2: 0,\n cpy2: 0,\n extent: 0\n },\n buildPath: function (ctx, shape) {\n var halfExtent = shape.extent / 2;\n ctx.moveTo(shape.x1, shape.y1 - halfExtent);\n ctx.bezierCurveTo(shape.cpx1, shape.cpy1 - halfExtent, shape.cpx2, shape.cpy2 - halfExtent, shape.x2, shape.y2 - halfExtent);\n ctx.lineTo(shape.x2, shape.y2 + halfExtent);\n ctx.bezierCurveTo(shape.cpx2, shape.cpy2 + halfExtent, shape.cpx1, shape.cpy1 + halfExtent, shape.x1, shape.y1 + halfExtent);\n ctx.closePath();\n }\n});\n\nvar _default = echarts.extendChartView({\n type: 'sankey',\n\n /**\n * @private\n * @type {module:echarts/chart/sankey/SankeySeries}\n */\n _model: null,\n render: function (seriesModel, ecModel, api) {\n var graph = seriesModel.getGraph();\n var group = this.group;\n var layoutInfo = seriesModel.layoutInfo;\n var nodeData = seriesModel.getData();\n var edgeData = seriesModel.getData('edge');\n this._model = seriesModel;\n group.removeAll();\n group.attr('position', [layoutInfo.x, layoutInfo.y]); // generate a bezire Curve for each edge\n\n graph.eachEdge(function (edge) {\n var curve = new SankeyShape();\n curve.dataIndex = edge.dataIndex;\n curve.seriesIndex = seriesModel.seriesIndex;\n curve.dataType = 'edge';\n var lineStyleModel = edge.getModel('lineStyle.normal');\n var curvature = lineStyleModel.get('curveness');\n var n1Layout = edge.node1.getLayout();\n var n2Layout = edge.node2.getLayout();\n var edgeLayout = edge.getLayout();\n curve.shape.extent = Math.max(1, edgeLayout.dy);\n var x1 = n1Layout.x + n1Layout.dx;\n var y1 = n1Layout.y + edgeLayout.sy + edgeLayout.dy / 2;\n var x2 = n2Layout.x;\n var y2 = n2Layout.y + edgeLayout.ty + edgeLayout.dy / 2;\n var cpx1 = x1 * (1 - curvature) + x2 * curvature;\n var cpy1 = y1;\n var cpx2 = x1 * curvature + x2 * (1 - curvature);\n var cpy2 = y2;\n curve.setShape({\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2,\n cpx1: cpx1,\n cpy1: cpy1,\n cpx2: cpx2,\n cpy2: cpy2\n });\n curve.setStyle(lineStyleModel.getItemStyle()); // Special color, use source node color or target node color\n\n switch (curve.style.fill) {\n case 'source':\n curve.style.fill = edge.node1.getVisual('color');\n break;\n\n case 'target':\n curve.style.fill = edge.node2.getVisual('color');\n break;\n }\n\n graphic.setHoverStyle(curve, edge.getModel('lineStyle.emphasis').getItemStyle());\n group.add(curve);\n edgeData.setItemGraphicEl(edge.dataIndex, curve);\n }); // generate a rect for each node\n\n graph.eachNode(function (node) {\n var layout = node.getLayout();\n var itemModel = node.getModel();\n var labelModel = itemModel.getModel('label.normal');\n var labelHoverModel = itemModel.getModel('label.emphasis');\n var rect = new graphic.Rect({\n shape: {\n x: layout.x,\n y: layout.y,\n width: node.getLayout().dx,\n height: node.getLayout().dy\n },\n style: itemModel.getModel('itemStyle.normal').getItemStyle()\n });\n var hoverStyle = node.getModel('itemStyle.emphasis').getItemStyle();\n graphic.setLabelStyle(rect.style, hoverStyle, labelModel, labelHoverModel, {\n labelFetcher: seriesModel,\n labelDataIndex: node.dataIndex,\n defaultText: node.id,\n isRectText: true\n });\n rect.setStyle('fill', node.getVisual('color'));\n graphic.setHoverStyle(rect, hoverStyle);\n group.add(rect);\n nodeData.setItemGraphicEl(node.dataIndex, rect);\n rect.dataType = 'node';\n });\n\n if (!this._data && seriesModel.get('animation')) {\n group.setClipPath(createGridClipShape(group.getBoundingRect(), seriesModel, function () {\n group.removeClipPath();\n }));\n }\n\n this._data = seriesModel.getData();\n },\n dispose: function () {}\n}); // add animation to the view\n\n\nfunction createGridClipShape(rect, seriesModel, cb) {\n var rectEl = new graphic.Rect({\n shape: {\n x: rect.x - 10,\n y: rect.y - 10,\n width: 0,\n height: rect.height + 20\n }\n });\n graphic.initProps(rectEl, {\n shape: {\n width: rect.width + 20,\n height: rect.height + 20\n }\n }, seriesModel, cb);\n return rectEl;\n}\n\nmodule.exports = _default;","require(\"./heatmap/HeatmapSeries\");\n\nrequire(\"./heatmap/HeatmapView\");","var util = require(\"./core/util\");\n\nvar _config = require(\"./config\");\n\nvar devicePixelRatio = _config.devicePixelRatio;\n\nvar Style = require(\"./graphic/Style\");\n\nvar Pattern = require(\"./graphic/Pattern\");\n\n/**\n * @module zrender/Layer\n * @author pissang(https://www.github.com/pissang)\n */\nfunction returnFalse() {\n return false;\n}\n/**\n * 创建dom\n *\n * @inner\n * @param {string} id dom id 待用\n * @param {Painter} painter painter instance\n * @param {number} number\n */\n\n\nfunction createDom(id, painter, dpr) {\n var newDom = util.createCanvas();\n var width = painter.getWidth();\n var height = painter.getHeight();\n var newDomStyle = newDom.style; // 没append呢,请原谅我这样写,清晰~\n\n newDomStyle.position = 'absolute';\n newDomStyle.left = 0;\n newDomStyle.top = 0;\n newDomStyle.width = width + 'px';\n newDomStyle.height = height + 'px';\n newDom.width = width * dpr;\n newDom.height = height * dpr; // id不作为索引用,避免可能造成的重名,定义为私有属性\n\n newDom.setAttribute('data-zr-dom-id', id);\n return newDom;\n}\n/**\n * @alias module:zrender/Layer\n * @constructor\n * @extends module:zrender/mixin/Transformable\n * @param {string} id\n * @param {module:zrender/Painter} painter\n * @param {number} [dpr]\n */\n\n\nvar Layer = function (id, painter, dpr) {\n var dom;\n dpr = dpr || devicePixelRatio;\n\n if (typeof id === 'string') {\n dom = createDom(id, painter, dpr);\n } // Not using isDom because in node it will return false\n else if (util.isObject(id)) {\n dom = id;\n id = dom.id;\n }\n\n this.id = id;\n this.dom = dom;\n var domStyle = dom.style;\n\n if (domStyle) {\n // Not in node\n dom.onselectstart = returnFalse; // 避免页面选中的尴尬\n\n domStyle['-webkit-user-select'] = 'none';\n domStyle['user-select'] = 'none';\n domStyle['-webkit-touch-callout'] = 'none';\n domStyle['-webkit-tap-highlight-color'] = 'rgba(0,0,0,0)';\n domStyle['padding'] = 0;\n domStyle['margin'] = 0;\n domStyle['border-width'] = 0;\n }\n\n this.domBack = null;\n this.ctxBack = null;\n this.painter = painter;\n this.config = null; // Configs\n\n /**\n * 每次清空画布的颜色\n * @type {string}\n * @default 0\n */\n\n this.clearColor = 0;\n /**\n * 是否开启动态模糊\n * @type {boolean}\n * @default false\n */\n\n this.motionBlur = false;\n /**\n * 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显\n * @type {number}\n * @default 0.7\n */\n\n this.lastFrameAlpha = 0.7;\n /**\n * Layer dpr\n * @type {number}\n */\n\n this.dpr = dpr;\n};\n\nLayer.prototype = {\n constructor: Layer,\n elCount: 0,\n __dirty: true,\n initContext: function () {\n this.ctx = this.dom.getContext('2d');\n this.ctx.__currentValues = {};\n this.ctx.dpr = this.dpr;\n },\n createBackBuffer: function () {\n var dpr = this.dpr;\n this.domBack = createDom('back-' + this.id, this.painter, dpr);\n this.ctxBack = this.domBack.getContext('2d');\n this.ctxBack.__currentValues = {};\n\n if (dpr != 1) {\n this.ctxBack.scale(dpr, dpr);\n }\n },\n\n /**\n * @param {number} width\n * @param {number} height\n */\n resize: function (width, height) {\n var dpr = this.dpr;\n var dom = this.dom;\n var domStyle = dom.style;\n var domBack = this.domBack;\n domStyle.width = width + 'px';\n domStyle.height = height + 'px';\n dom.width = width * dpr;\n dom.height = height * dpr;\n\n if (domBack) {\n domBack.width = width * dpr;\n domBack.height = height * dpr;\n\n if (dpr != 1) {\n this.ctxBack.scale(dpr, dpr);\n }\n }\n },\n\n /**\n * 清空该层画布\n * @param {boolean} clearAll Clear all with out motion blur\n */\n clear: function (clearAll) {\n var dom = this.dom;\n var ctx = this.ctx;\n var width = dom.width;\n var height = dom.height;\n var clearColor = this.clearColor;\n var haveMotionBLur = this.motionBlur && !clearAll;\n var lastFrameAlpha = this.lastFrameAlpha;\n var dpr = this.dpr;\n\n if (haveMotionBLur) {\n if (!this.domBack) {\n this.createBackBuffer();\n }\n\n this.ctxBack.globalCompositeOperation = 'copy';\n this.ctxBack.drawImage(dom, 0, 0, width / dpr, height / dpr);\n }\n\n ctx.clearRect(0, 0, width, height);\n\n if (clearColor) {\n var clearColorGradientOrPattern; // Gradient\n\n if (clearColor.colorStops) {\n // Cache canvas gradient\n clearColorGradientOrPattern = clearColor.__canvasGradient || Style.getGradient(ctx, clearColor, {\n x: 0,\n y: 0,\n width: width,\n height: height\n });\n clearColor.__canvasGradient = clearColorGradientOrPattern;\n } // Pattern\n else if (clearColor.image) {\n clearColorGradientOrPattern = Pattern.prototype.getCanvasPattern.call(clearColor, ctx);\n }\n\n ctx.save();\n ctx.fillStyle = clearColorGradientOrPattern || clearColor;\n ctx.fillRect(0, 0, width, height);\n ctx.restore();\n }\n\n if (haveMotionBLur) {\n var domBack = this.domBack;\n ctx.save();\n ctx.globalAlpha = lastFrameAlpha;\n ctx.drawImage(domBack, 0, 0, width, height);\n ctx.restore();\n }\n }\n};\nvar _default = Layer;\nmodule.exports = _default;","var LRU = require(\"../../core/LRU\");\n\nvar globalImageCache = new LRU(50);\n/**\n * @param {string|HTMLImageElement|HTMLCanvasElement|Canvas} newImageOrSrc\n * @return {HTMLImageElement|HTMLCanvasElement|Canvas} image\n */\n\nfunction findExistImage(newImageOrSrc) {\n if (typeof newImageOrSrc === 'string') {\n var cachedImgObj = globalImageCache.get(newImageOrSrc);\n return cachedImgObj && cachedImgObj.image;\n } else {\n return newImageOrSrc;\n }\n}\n/**\n * Caution: User should cache loaded images, but not just count on LRU.\n * Consider if required images more than LRU size, will dead loop occur?\n *\n * @param {string|HTMLImageElement|HTMLCanvasElement|Canvas} newImageOrSrc\n * @param {HTMLImageElement|HTMLCanvasElement|Canvas} image Existent image.\n * @param {module:zrender/Element} [hostEl] For calling `dirty`.\n * @param {Function} [cb] params: (image, cbPayload)\n * @param {Object} [cbPayload] Payload on cb calling.\n * @return {HTMLImageElement|HTMLCanvasElement|Canvas} image\n */\n\n\nfunction createOrUpdateImage(newImageOrSrc, image, hostEl, cb, cbPayload) {\n if (!newImageOrSrc) {\n return image;\n } else if (typeof newImageOrSrc === 'string') {\n // Image should not be loaded repeatly.\n if (image && image.__zrImageSrc === newImageOrSrc || !hostEl) {\n return image;\n } // Only when there is no existent image or existent image src\n // is different, this method is responsible for load.\n\n\n var cachedImgObj = globalImageCache.get(newImageOrSrc);\n var pendingWrap = {\n hostEl: hostEl,\n cb: cb,\n cbPayload: cbPayload\n };\n\n if (cachedImgObj) {\n image = cachedImgObj.image;\n !isImageReady(image) && cachedImgObj.pending.push(pendingWrap);\n } else {\n !image && (image = new Image());\n image.onload = imageOnLoad;\n globalImageCache.put(newImageOrSrc, image.__cachedImgObj = {\n image: image,\n pending: [pendingWrap]\n });\n image.src = image.__zrImageSrc = newImageOrSrc;\n }\n\n return image;\n } // newImageOrSrc is an HTMLImageElement or HTMLCanvasElement or Canvas\n else {\n return newImageOrSrc;\n }\n}\n\nfunction imageOnLoad() {\n var cachedImgObj = this.__cachedImgObj;\n this.onload = this.__cachedImgObj = null;\n\n for (var i = 0; i < cachedImgObj.pending.length; i++) {\n var pendingWrap = cachedImgObj.pending[i];\n var cb = pendingWrap.cb;\n cb && cb(this, pendingWrap.cbPayload);\n pendingWrap.hostEl.dirty();\n }\n\n cachedImgObj.pending.length = 0;\n}\n\nfunction isImageReady(image) {\n return image && image.width && image.height;\n}\n\nexports.findExistImage = findExistImage;\nexports.createOrUpdateImage = createOrUpdateImage;\nexports.isImageReady = isImageReady;","var _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _symbol = require(\"../../util/symbol\");\n\nvar createSymbol = _symbol.createSymbol;\n\nvar graphic = require(\"../../util/graphic\");\n\nvar _listComponent = require(\"../helper/listComponent\");\n\nvar makeBackground = _listComponent.makeBackground;\n\nvar layoutUtil = require(\"../../util/layout\");\n\nvar curry = zrUtil.curry;\nvar each = zrUtil.each;\nvar Group = graphic.Group;\n\nvar _default = echarts.extendComponentView({\n type: 'legend.plain',\n newlineDisabled: false,\n\n /**\n * @override\n */\n init: function () {\n /**\n * @private\n * @type {module:zrender/container/Group}\n */\n this.group.add(this._contentGroup = new Group());\n /**\n * @private\n * @type {module:zrender/Element}\n */\n\n this._backgroundEl;\n },\n\n /**\n * @protected\n */\n getContentGroup: function () {\n return this._contentGroup;\n },\n\n /**\n * @override\n */\n render: function (legendModel, ecModel, api) {\n this.resetInner();\n\n if (!legendModel.get('show', true)) {\n return;\n }\n\n var itemAlign = legendModel.get('align');\n\n if (!itemAlign || itemAlign === 'auto') {\n itemAlign = legendModel.get('left') === 'right' && legendModel.get('orient') === 'vertical' ? 'right' : 'left';\n }\n\n this.renderInner(itemAlign, legendModel, ecModel, api); // Perform layout.\n\n var positionInfo = legendModel.getBoxLayoutParams();\n var viewportSize = {\n width: api.getWidth(),\n height: api.getHeight()\n };\n var padding = legendModel.get('padding');\n var maxSize = layoutUtil.getLayoutRect(positionInfo, viewportSize, padding);\n var mainRect = this.layoutInner(legendModel, itemAlign, maxSize); // Place mainGroup, based on the calculated `mainRect`.\n\n var layoutRect = layoutUtil.getLayoutRect(zrUtil.defaults({\n width: mainRect.width,\n height: mainRect.height\n }, positionInfo), viewportSize, padding);\n this.group.attr('position', [layoutRect.x - mainRect.x, layoutRect.y - mainRect.y]); // Render background after group is layout.\n\n this.group.add(this._backgroundEl = makeBackground(mainRect, legendModel));\n },\n\n /**\n * @protected\n */\n resetInner: function () {\n this.getContentGroup().removeAll();\n this._backgroundEl && this.group.remove(this._backgroundEl);\n },\n\n /**\n * @protected\n */\n renderInner: function (itemAlign, legendModel, ecModel, api) {\n var contentGroup = this.getContentGroup();\n var legendDrawnMap = zrUtil.createHashMap();\n var selectMode = legendModel.get('selectedMode');\n each(legendModel.getData(), function (itemModel, dataIndex) {\n var name = itemModel.get('name'); // Use empty string or \\n as a newline string\n\n if (!this.newlineDisabled && (name === '' || name === '\\n')) {\n contentGroup.add(new Group({\n newline: true\n }));\n return;\n }\n\n var seriesModel = ecModel.getSeriesByName(name)[0];\n\n if (legendDrawnMap.get(name)) {\n // Have been drawed\n return;\n } // Series legend\n\n\n if (seriesModel) {\n var data = seriesModel.getData();\n var color = data.getVisual('color'); // If color is a callback function\n\n if (typeof color === 'function') {\n // Use the first data\n color = color(seriesModel.getDataParams(0));\n } // Using rect symbol defaultly\n\n\n var legendSymbolType = data.getVisual('legendSymbol') || 'roundRect';\n var symbolType = data.getVisual('symbol');\n\n var itemGroup = this._createItem(name, dataIndex, itemModel, legendModel, legendSymbolType, symbolType, itemAlign, color, selectMode);\n\n itemGroup.on('click', curry(dispatchSelectAction, name, api)).on('mouseover', curry(dispatchHighlightAction, seriesModel, null, api)).on('mouseout', curry(dispatchDownplayAction, seriesModel, null, api));\n legendDrawnMap.set(name, true);\n } else {\n // Data legend of pie, funnel\n ecModel.eachRawSeries(function (seriesModel) {\n // In case multiple series has same data name\n if (legendDrawnMap.get(name)) {\n return;\n }\n\n if (seriesModel.legendDataProvider) {\n var data = seriesModel.legendDataProvider();\n var idx = data.indexOfName(name);\n\n if (idx < 0) {\n return;\n }\n\n var color = data.getItemVisual(idx, 'color');\n var legendSymbolType = 'roundRect';\n\n var itemGroup = this._createItem(name, dataIndex, itemModel, legendModel, legendSymbolType, null, itemAlign, color, selectMode);\n\n itemGroup.on('click', curry(dispatchSelectAction, name, api)) // FIXME Should not specify the series name\n .on('mouseover', curry(dispatchHighlightAction, seriesModel, name, api)).on('mouseout', curry(dispatchDownplayAction, seriesModel, name, api));\n legendDrawnMap.set(name, true);\n }\n }, this);\n }\n }, this);\n },\n _createItem: function (name, dataIndex, itemModel, legendModel, legendSymbolType, symbolType, itemAlign, color, selectMode) {\n var itemWidth = legendModel.get('itemWidth');\n var itemHeight = legendModel.get('itemHeight');\n var inactiveColor = legendModel.get('inactiveColor');\n var isSelected = legendModel.isSelected(name);\n var itemGroup = new Group();\n var textStyleModel = itemModel.getModel('textStyle');\n var itemIcon = itemModel.get('icon');\n var tooltipModel = itemModel.getModel('tooltip');\n var legendGlobalTooltipModel = tooltipModel.parentModel; // Use user given icon first\n\n legendSymbolType = itemIcon || legendSymbolType;\n itemGroup.add(createSymbol(legendSymbolType, 0, 0, itemWidth, itemHeight, isSelected ? color : inactiveColor, true)); // Compose symbols\n // PENDING\n\n if (!itemIcon && symbolType // At least show one symbol, can't be all none\n && (symbolType !== legendSymbolType || symbolType == 'none')) {\n var size = itemHeight * 0.8;\n\n if (symbolType === 'none') {\n symbolType = 'circle';\n } // Put symbol in the center\n\n\n itemGroup.add(createSymbol(symbolType, (itemWidth - size) / 2, (itemHeight - size) / 2, size, size, isSelected ? color : inactiveColor));\n }\n\n var textX = itemAlign === 'left' ? itemWidth + 5 : -5;\n var textAlign = itemAlign;\n var formatter = legendModel.get('formatter');\n var content = name;\n\n if (typeof formatter === 'string' && formatter) {\n content = formatter.replace('{name}', name != null ? name : '');\n } else if (typeof formatter === 'function') {\n content = formatter(name);\n }\n\n itemGroup.add(new graphic.Text({\n style: graphic.setTextStyle({}, textStyleModel, {\n text: content,\n x: textX,\n y: itemHeight / 2,\n textFill: isSelected ? textStyleModel.getTextColor() : inactiveColor,\n textAlign: textAlign,\n textVerticalAlign: 'middle'\n })\n })); // Add a invisible rect to increase the area of mouse hover\n\n var hitRect = new graphic.Rect({\n shape: itemGroup.getBoundingRect(),\n invisible: true,\n tooltip: tooltipModel.get('show') ? zrUtil.extend({\n content: name,\n // Defaul formatter\n formatter: legendGlobalTooltipModel.get('formatter', true) || function () {\n return name;\n },\n formatterParams: {\n componentType: 'legend',\n legendIndex: legendModel.componentIndex,\n name: name,\n $vars: ['name']\n }\n }, tooltipModel.option) : null\n });\n itemGroup.add(hitRect);\n itemGroup.eachChild(function (child) {\n child.silent = true;\n });\n hitRect.silent = !selectMode;\n this.getContentGroup().add(itemGroup);\n graphic.setHoverStyle(itemGroup);\n itemGroup.__legendDataIndex = dataIndex;\n return itemGroup;\n },\n\n /**\n * @protected\n */\n layoutInner: function (legendModel, itemAlign, maxSize) {\n var contentGroup = this.getContentGroup(); // Place items in contentGroup.\n\n layoutUtil.box(legendModel.get('orient'), contentGroup, legendModel.get('itemGap'), maxSize.width, maxSize.height);\n var contentRect = contentGroup.getBoundingRect();\n contentGroup.attr('position', [-contentRect.x, -contentRect.y]);\n return this.group.getBoundingRect();\n }\n});\n\nfunction dispatchSelectAction(name, api) {\n api.dispatchAction({\n type: 'legendToggleSelect',\n name: name\n });\n}\n\nfunction dispatchHighlightAction(seriesModel, dataName, api) {\n // If element hover will move to a hoverLayer.\n var el = api.getZr().storage.getDisplayList()[0];\n\n if (!(el && el.useHoverLayer)) {\n seriesModel.get('legendHoverLink') && api.dispatchAction({\n type: 'highlight',\n seriesName: seriesModel.name,\n name: dataName\n });\n }\n}\n\nfunction dispatchDownplayAction(seriesModel, dataName, api) {\n // If element hover will move to a hoverLayer.\n var el = api.getZr().storage.getDisplayList()[0];\n\n if (!(el && el.useHoverLayer)) {\n seriesModel.get('legendHoverLink') && api.dispatchAction({\n type: 'downplay',\n seriesName: seriesModel.name,\n name: dataName\n });\n }\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar zrColor = require(\"zrender/lib/tool/color\");\n\nvar _number = require(\"../util/number\");\n\nvar linearMap = _number.linearMap;\nvar each = zrUtil.each;\nvar isObject = zrUtil.isObject;\nvar CATEGORY_DEFAULT_VISUAL_INDEX = -1;\n/**\n * @param {Object} option\n * @param {string} [option.type] See visualHandlers.\n * @param {string} [option.mappingMethod] 'linear' or 'piecewise' or 'category' or 'fixed'\n * @param {Array.=} [option.dataExtent] [minExtent, maxExtent],\n * required when mappingMethod is 'linear'\n * @param {Array.=} [option.pieceList] [\n * {value: someValue},\n * {interval: [min1, max1], visual: {...}},\n * {interval: [min2, max2]}\n * ],\n * required when mappingMethod is 'piecewise'.\n * Visual for only each piece can be specified.\n * @param {Array.=} [option.categories] ['cate1', 'cate2']\n * required when mappingMethod is 'category'.\n * If no option.categories, categories is set\n * as [0, 1, 2, ...].\n * @param {boolean} [option.loop=false] Whether loop mapping when mappingMethod is 'category'.\n * @param {(Array|Object|*)} [option.visual] Visual data.\n * when mappingMethod is 'category',\n * visual data can be array or object\n * (like: {cate1: '#222', none: '#fff'})\n * or primary types (which represents\n * defualt category visual), otherwise visual\n * can be array or primary (which will be\n * normalized to array).\n *\n */\n\nvar VisualMapping = function (option) {\n var mappingMethod = option.mappingMethod;\n var visualType = option.type;\n /**\n * @readOnly\n * @type {Object}\n */\n\n var thisOption = this.option = zrUtil.clone(option);\n /**\n * @readOnly\n * @type {string}\n */\n\n this.type = visualType;\n /**\n * @readOnly\n * @type {string}\n */\n\n this.mappingMethod = mappingMethod;\n /**\n * @private\n * @type {Function}\n */\n\n this._normalizeData = normalizers[mappingMethod];\n var visualHandler = visualHandlers[visualType];\n /**\n * @public\n * @type {Function}\n */\n\n this.applyVisual = visualHandler.applyVisual;\n /**\n * @public\n * @type {Function}\n */\n\n this.getColorMapper = visualHandler.getColorMapper;\n /**\n * @private\n * @type {Function}\n */\n\n this._doMap = visualHandler._doMap[mappingMethod];\n\n if (mappingMethod === 'piecewise') {\n normalizeVisualRange(thisOption);\n preprocessForPiecewise(thisOption);\n } else if (mappingMethod === 'category') {\n thisOption.categories ? preprocessForSpecifiedCategory(thisOption) // categories is ordinal when thisOption.categories not specified,\n // which need no more preprocess except normalize visual.\n : normalizeVisualRange(thisOption, true);\n } else {\n // mappingMethod === 'linear' or 'fixed'\n zrUtil.assert(mappingMethod !== 'linear' || thisOption.dataExtent);\n normalizeVisualRange(thisOption);\n }\n};\n\nVisualMapping.prototype = {\n constructor: VisualMapping,\n mapValueToVisual: function (value) {\n var normalized = this._normalizeData(value);\n\n return this._doMap(normalized, value);\n },\n getNormalizer: function () {\n return zrUtil.bind(this._normalizeData, this);\n }\n};\nvar visualHandlers = VisualMapping.visualHandlers = {\n color: {\n applyVisual: makeApplyVisual('color'),\n\n /**\n * Create a mapper function\n * @return {Function}\n */\n getColorMapper: function () {\n var thisOption = this.option;\n return zrUtil.bind(thisOption.mappingMethod === 'category' ? function (value, isNormalized) {\n !isNormalized && (value = this._normalizeData(value));\n return doMapCategory.call(this, value);\n } : function (value, isNormalized, out) {\n // If output rgb array\n // which will be much faster and useful in pixel manipulation\n var returnRGBArray = !!out;\n !isNormalized && (value = this._normalizeData(value));\n out = zrColor.fastLerp(value, thisOption.parsedVisual, out);\n return returnRGBArray ? out : zrColor.stringify(out, 'rgba');\n }, this);\n },\n _doMap: {\n linear: function (normalized) {\n return zrColor.stringify(zrColor.fastLerp(normalized, this.option.parsedVisual), 'rgba');\n },\n category: doMapCategory,\n piecewise: function (normalized, value) {\n var result = getSpecifiedVisual.call(this, value);\n\n if (result == null) {\n result = zrColor.stringify(zrColor.fastLerp(normalized, this.option.parsedVisual), 'rgba');\n }\n\n return result;\n },\n fixed: doMapFixed\n }\n },\n colorHue: makePartialColorVisualHandler(function (color, value) {\n return zrColor.modifyHSL(color, value);\n }),\n colorSaturation: makePartialColorVisualHandler(function (color, value) {\n return zrColor.modifyHSL(color, null, value);\n }),\n colorLightness: makePartialColorVisualHandler(function (color, value) {\n return zrColor.modifyHSL(color, null, null, value);\n }),\n colorAlpha: makePartialColorVisualHandler(function (color, value) {\n return zrColor.modifyAlpha(color, value);\n }),\n opacity: {\n applyVisual: makeApplyVisual('opacity'),\n _doMap: makeDoMap([0, 1])\n },\n symbol: {\n applyVisual: function (value, getter, setter) {\n var symbolCfg = this.mapValueToVisual(value);\n\n if (zrUtil.isString(symbolCfg)) {\n setter('symbol', symbolCfg);\n } else if (isObject(symbolCfg)) {\n for (var name in symbolCfg) {\n if (symbolCfg.hasOwnProperty(name)) {\n setter(name, symbolCfg[name]);\n }\n }\n }\n },\n _doMap: {\n linear: doMapToArray,\n category: doMapCategory,\n piecewise: function (normalized, value) {\n var result = getSpecifiedVisual.call(this, value);\n\n if (result == null) {\n result = doMapToArray.call(this, normalized);\n }\n\n return result;\n },\n fixed: doMapFixed\n }\n },\n symbolSize: {\n applyVisual: makeApplyVisual('symbolSize'),\n _doMap: makeDoMap([0, 1])\n }\n};\n\nfunction preprocessForPiecewise(thisOption) {\n var pieceList = thisOption.pieceList;\n thisOption.hasSpecialVisual = false;\n zrUtil.each(pieceList, function (piece, index) {\n piece.originIndex = index; // piece.visual is \"result visual value\" but not\n // a visual range, so it does not need to be normalized.\n\n if (piece.visual != null) {\n thisOption.hasSpecialVisual = true;\n }\n });\n}\n\nfunction preprocessForSpecifiedCategory(thisOption) {\n // Hash categories.\n var categories = thisOption.categories;\n var visual = thisOption.visual;\n var categoryMap = thisOption.categoryMap = {};\n each(categories, function (cate, index) {\n categoryMap[cate] = index;\n }); // Process visual map input.\n\n if (!zrUtil.isArray(visual)) {\n var visualArr = [];\n\n if (zrUtil.isObject(visual)) {\n each(visual, function (v, cate) {\n var index = categoryMap[cate];\n visualArr[index != null ? index : CATEGORY_DEFAULT_VISUAL_INDEX] = v;\n });\n } else {\n // Is primary type, represents default visual.\n visualArr[CATEGORY_DEFAULT_VISUAL_INDEX] = visual;\n }\n\n visual = setVisualToOption(thisOption, visualArr);\n } // Remove categories that has no visual,\n // then we can mapping them to CATEGORY_DEFAULT_VISUAL_INDEX.\n\n\n for (var i = categories.length - 1; i >= 0; i--) {\n if (visual[i] == null) {\n delete categoryMap[categories[i]];\n categories.pop();\n }\n }\n}\n\nfunction normalizeVisualRange(thisOption, isCategory) {\n var visual = thisOption.visual;\n var visualArr = [];\n\n if (zrUtil.isObject(visual)) {\n each(visual, function (v) {\n visualArr.push(v);\n });\n } else if (visual != null) {\n visualArr.push(visual);\n }\n\n var doNotNeedPair = {\n color: 1,\n symbol: 1\n };\n\n if (!isCategory && visualArr.length === 1 && !doNotNeedPair.hasOwnProperty(thisOption.type)) {\n // Do not care visualArr.length === 0, which is illegal.\n visualArr[1] = visualArr[0];\n }\n\n setVisualToOption(thisOption, visualArr);\n}\n\nfunction makePartialColorVisualHandler(applyValue) {\n return {\n applyVisual: function (value, getter, setter) {\n value = this.mapValueToVisual(value); // Must not be array value\n\n setter('color', applyValue(getter('color'), value));\n },\n _doMap: makeDoMap([0, 1])\n };\n}\n\nfunction doMapToArray(normalized) {\n var visual = this.option.visual;\n return visual[Math.round(linearMap(normalized, [0, 1], [0, visual.length - 1], true))] || {};\n}\n\nfunction makeApplyVisual(visualType) {\n return function (value, getter, setter) {\n setter(visualType, this.mapValueToVisual(value));\n };\n}\n\nfunction doMapCategory(normalized) {\n var visual = this.option.visual;\n return visual[this.option.loop && normalized !== CATEGORY_DEFAULT_VISUAL_INDEX ? normalized % visual.length : normalized];\n}\n\nfunction doMapFixed() {\n return this.option.visual[0];\n}\n\nfunction makeDoMap(sourceExtent) {\n return {\n linear: function (normalized) {\n return linearMap(normalized, sourceExtent, this.option.visual, true);\n },\n category: doMapCategory,\n piecewise: function (normalized, value) {\n var result = getSpecifiedVisual.call(this, value);\n\n if (result == null) {\n result = linearMap(normalized, sourceExtent, this.option.visual, true);\n }\n\n return result;\n },\n fixed: doMapFixed\n };\n}\n\nfunction getSpecifiedVisual(value) {\n var thisOption = this.option;\n var pieceList = thisOption.pieceList;\n\n if (thisOption.hasSpecialVisual) {\n var pieceIndex = VisualMapping.findPieceIndex(value, pieceList);\n var piece = pieceList[pieceIndex];\n\n if (piece && piece.visual) {\n return piece.visual[this.type];\n }\n }\n}\n\nfunction setVisualToOption(thisOption, visualArr) {\n thisOption.visual = visualArr;\n\n if (thisOption.type === 'color') {\n thisOption.parsedVisual = zrUtil.map(visualArr, function (item) {\n return zrColor.parse(item);\n });\n }\n\n return visualArr;\n}\n/**\n * Normalizers by mapping methods.\n */\n\n\nvar normalizers = {\n linear: function (value) {\n return linearMap(value, this.option.dataExtent, [0, 1], true);\n },\n piecewise: function (value) {\n var pieceList = this.option.pieceList;\n var pieceIndex = VisualMapping.findPieceIndex(value, pieceList, true);\n\n if (pieceIndex != null) {\n return linearMap(pieceIndex, [0, pieceList.length - 1], [0, 1], true);\n }\n },\n category: function (value) {\n var index = this.option.categories ? this.option.categoryMap[value] : value; // ordinal\n\n return index == null ? CATEGORY_DEFAULT_VISUAL_INDEX : index;\n },\n fixed: zrUtil.noop\n};\n/**\n * List available visual types.\n *\n * @public\n * @return {Array.}\n */\n\nVisualMapping.listVisualTypes = function () {\n var visualTypes = [];\n zrUtil.each(visualHandlers, function (handler, key) {\n visualTypes.push(key);\n });\n return visualTypes;\n};\n/**\n * @public\n */\n\n\nVisualMapping.addVisualHandler = function (name, handler) {\n visualHandlers[name] = handler;\n};\n/**\n * @public\n */\n\n\nVisualMapping.isValidType = function (visualType) {\n return visualHandlers.hasOwnProperty(visualType);\n};\n/**\n * Convinent method.\n * Visual can be Object or Array or primary type.\n *\n * @public\n */\n\n\nVisualMapping.eachVisual = function (visual, callback, context) {\n if (zrUtil.isObject(visual)) {\n zrUtil.each(visual, callback, context);\n } else {\n callback.call(context, visual);\n }\n};\n\nVisualMapping.mapVisual = function (visual, callback, context) {\n var isPrimary;\n var newVisual = zrUtil.isArray(visual) ? [] : zrUtil.isObject(visual) ? {} : (isPrimary = true, null);\n VisualMapping.eachVisual(visual, function (v, key) {\n var newVal = callback.call(context, v, key);\n isPrimary ? newVisual = newVal : newVisual[key] = newVal;\n });\n return newVisual;\n};\n/**\n * @public\n * @param {Object} obj\n * @return {Object} new object containers visual values.\n * If no visuals, return null.\n */\n\n\nVisualMapping.retrieveVisuals = function (obj) {\n var ret = {};\n var hasVisual;\n obj && each(visualHandlers, function (h, visualType) {\n if (obj.hasOwnProperty(visualType)) {\n ret[visualType] = obj[visualType];\n hasVisual = true;\n }\n });\n return hasVisual ? ret : null;\n};\n/**\n * Give order to visual types, considering colorSaturation, colorAlpha depends on color.\n *\n * @public\n * @param {(Object|Array)} visualTypes If Object, like: {color: ..., colorSaturation: ...}\n * IF Array, like: ['color', 'symbol', 'colorSaturation']\n * @return {Array.} Sorted visual types.\n */\n\n\nVisualMapping.prepareVisualTypes = function (visualTypes) {\n if (isObject(visualTypes)) {\n var types = [];\n each(visualTypes, function (item, type) {\n types.push(type);\n });\n visualTypes = types;\n } else if (zrUtil.isArray(visualTypes)) {\n visualTypes = visualTypes.slice();\n } else {\n return [];\n }\n\n visualTypes.sort(function (type1, type2) {\n // color should be front of colorSaturation, colorAlpha, ...\n // symbol and symbolSize do not matter.\n return type2 === 'color' && type1 !== 'color' && type1.indexOf('color') === 0 ? 1 : -1;\n });\n return visualTypes;\n};\n/**\n * 'color', 'colorSaturation', 'colorAlpha', ... are depends on 'color'.\n * Other visuals are only depends on themself.\n *\n * @public\n * @param {string} visualType1\n * @param {string} visualType2\n * @return {boolean}\n */\n\n\nVisualMapping.dependsOn = function (visualType1, visualType2) {\n return visualType2 === 'color' ? !!(visualType1 && visualType1.indexOf(visualType2) === 0) : visualType1 === visualType2;\n};\n/**\n * @param {number} value\n * @param {Array.} pieceList [{value: ..., interval: [min, max]}, ...]\n * Always from small to big.\n * @param {boolean} [findClosestWhenOutside=false]\n * @return {number} index\n */\n\n\nVisualMapping.findPieceIndex = function (value, pieceList, findClosestWhenOutside) {\n var possibleI;\n var abs = Infinity; // value has the higher priority.\n\n for (var i = 0, len = pieceList.length; i < len; i++) {\n var pieceValue = pieceList[i].value;\n\n if (pieceValue != null) {\n if (pieceValue === value // FIXME\n // It is supposed to compare value according to value type of dimension,\n // but currently value type can exactly be string or number.\n // Compromise for numeric-like string (like '12'), especially\n // in the case that visualMap.categories is ['22', '33'].\n || typeof pieceValue === 'string' && pieceValue === value + '') {\n return i;\n }\n\n findClosestWhenOutside && updatePossible(pieceValue, i);\n }\n }\n\n for (var i = 0, len = pieceList.length; i < len; i++) {\n var piece = pieceList[i];\n var interval = piece.interval;\n var close = piece.close;\n\n if (interval) {\n if (interval[0] === -Infinity) {\n if (littleThan(close[1], value, interval[1])) {\n return i;\n }\n } else if (interval[1] === Infinity) {\n if (littleThan(close[0], interval[0], value)) {\n return i;\n }\n } else if (littleThan(close[0], interval[0], value) && littleThan(close[1], value, interval[1])) {\n return i;\n }\n\n findClosestWhenOutside && updatePossible(interval[0], i);\n findClosestWhenOutside && updatePossible(interval[1], i);\n }\n }\n\n if (findClosestWhenOutside) {\n return value === Infinity ? pieceList.length - 1 : value === -Infinity ? 0 : possibleI;\n }\n\n function updatePossible(val, index) {\n var newAbs = Math.abs(val - value);\n\n if (newAbs < abs) {\n abs = newAbs;\n possibleI = index;\n }\n }\n};\n\nfunction littleThan(close, a, b) {\n return close ? a <= b : a < b;\n}\n\nvar _default = VisualMapping;\nmodule.exports = _default;","var Eventful = require(\"../mixin/Eventful\");\n\nexports.Dispatcher = Eventful;\n\nvar env = require(\"./env\");\n\n/**\n * 事件辅助类\n * @module zrender/core/event\n * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)\n */\nvar isDomLevel2 = typeof window !== 'undefined' && !!window.addEventListener;\nvar MOUSE_EVENT_REG = /^(?:mouse|pointer|contextmenu|drag|drop)|click/;\n\nfunction getBoundingClientRect(el) {\n // BlackBerry 5, iOS 3 (original iPhone) don't have getBoundingRect\n return el.getBoundingClientRect ? el.getBoundingClientRect() : {\n left: 0,\n top: 0\n };\n} // `calculate` is optional, default false\n\n\nfunction clientToLocal(el, e, out, calculate) {\n out = out || {}; // According to the W3C Working Draft, offsetX and offsetY should be relative\n // to the padding edge of the target element. The only browser using this convention\n // is IE. Webkit uses the border edge, Opera uses the content edge, and FireFox does\n // not support the properties.\n // (see http://www.jacklmoore.com/notes/mouse-position/)\n // In zr painter.dom, padding edge equals to border edge.\n // FIXME\n // When mousemove event triggered on ec tooltip, target is not zr painter.dom, and\n // offsetX/Y is relative to e.target, where the calculation of zrX/Y via offsetX/Y\n // is too complex. So css-transfrom dont support in this case temporarily.\n\n if (calculate || !env.canvasSupported) {\n defaultGetZrXY(el, e, out);\n } // Caution: In FireFox, layerX/layerY Mouse position relative to the closest positioned\n // ancestor element, so we should make sure el is positioned (e.g., not position:static).\n // BTW1, Webkit don't return the same results as FF in non-simple cases (like add\n // zoom-factor, overflow / opacity layers, transforms ...)\n // BTW2, (ev.offsetY || ev.pageY - $(ev.target).offset().top) is not correct in preserve-3d.\n // \n // BTW3, In ff, offsetX/offsetY is always 0.\n else if (env.browser.firefox && e.layerX != null && e.layerX !== e.offsetX) {\n out.zrX = e.layerX;\n out.zrY = e.layerY;\n } // For IE6+, chrome, safari, opera. (When will ff support offsetX?)\n else if (e.offsetX != null) {\n out.zrX = e.offsetX;\n out.zrY = e.offsetY;\n } // For some other device, e.g., IOS safari.\n else {\n defaultGetZrXY(el, e, out);\n }\n\n return out;\n}\n\nfunction defaultGetZrXY(el, e, out) {\n // This well-known method below does not support css transform.\n var box = getBoundingClientRect(el);\n out.zrX = e.clientX - box.left;\n out.zrY = e.clientY - box.top;\n}\n/**\n * 如果存在第三方嵌入的一些dom触发的事件,或touch事件,需要转换一下事件坐标.\n * `calculate` is optional, default false.\n */\n\n\nfunction normalizeEvent(el, e, calculate) {\n e = e || window.event;\n\n if (e.zrX != null) {\n return e;\n }\n\n var eventType = e.type;\n var isTouch = eventType && eventType.indexOf('touch') >= 0;\n\n if (!isTouch) {\n clientToLocal(el, e, e, calculate);\n e.zrDelta = e.wheelDelta ? e.wheelDelta / 120 : -(e.detail || 0) / 3;\n } else {\n var touch = eventType != 'touchend' ? e.targetTouches[0] : e.changedTouches[0];\n touch && clientToLocal(el, touch, e, calculate);\n } // Add which for click: 1 === left; 2 === middle; 3 === right; otherwise: 0;\n // See jQuery: https://github.com/jquery/jquery/blob/master/src/event.js\n // If e.which has been defined, if may be readonly,\n // see: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/which\n\n\n var button = e.button;\n\n if (e.which == null && button !== undefined && MOUSE_EVENT_REG.test(e.type)) {\n e.which = button & 1 ? 1 : button & 2 ? 3 : button & 4 ? 2 : 0;\n }\n\n return e;\n}\n\nfunction addEventListener(el, name, handler) {\n if (isDomLevel2) {\n el.addEventListener(name, handler);\n } else {\n el.attachEvent('on' + name, handler);\n }\n}\n\nfunction removeEventListener(el, name, handler) {\n if (isDomLevel2) {\n el.removeEventListener(name, handler);\n } else {\n el.detachEvent('on' + name, handler);\n }\n}\n/**\n * preventDefault and stopPropagation.\n * Notice: do not do that in zrender. Upper application\n * do that if necessary.\n *\n * @memberOf module:zrender/core/event\n * @method\n * @param {Event} e : event对象\n */\n\n\nvar stop = isDomLevel2 ? function (e) {\n e.preventDefault();\n e.stopPropagation();\n e.cancelBubble = true;\n} : function (e) {\n e.returnValue = false;\n e.cancelBubble = true;\n};\n\nfunction notLeftMouse(e) {\n // If e.which is undefined, considered as left mouse event.\n return e.which > 1;\n} // 做向上兼容\n\n\nexports.clientToLocal = clientToLocal;\nexports.normalizeEvent = normalizeEvent;\nexports.addEventListener = addEventListener;\nexports.removeEventListener = removeEventListener;\nexports.stop = stop;\nexports.notLeftMouse = notLeftMouse;","var graphic = require(\"../../util/graphic\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar ChartView = require(\"../../view/Chart\");\n\nvar SMOOTH = 0.3;\nvar ParallelView = ChartView.extend({\n type: 'parallel',\n init: function () {\n /**\n * @type {module:zrender/container/Group}\n * @private\n */\n this._dataGroup = new graphic.Group();\n this.group.add(this._dataGroup);\n /**\n * @type {module:echarts/data/List}\n */\n\n this._data;\n },\n\n /**\n * @override\n */\n render: function (seriesModel, ecModel, api, payload) {\n this._renderForNormal(seriesModel, payload); // this[\n // seriesModel.option.progressive\n // ? '_renderForProgressive'\n // : '_renderForNormal'\n // ](seriesModel);\n\n },\n dispose: function () {},\n\n /**\n * @private\n */\n _renderForNormal: function (seriesModel, payload) {\n var dataGroup = this._dataGroup;\n var data = seriesModel.getData();\n var oldData = this._data;\n var coordSys = seriesModel.coordinateSystem;\n var dimensions = coordSys.dimensions;\n var option = seriesModel.option;\n var smooth = option.smooth ? SMOOTH : null; // Consider switch between progressive and not.\n // oldData && oldData.__plProgressive && dataGroup.removeAll();\n\n data.diff(oldData).add(add).update(update).remove(remove).execute(); // Update style\n\n updateElCommon(data, smooth); // First create\n\n if (!this._data) {\n var clipPath = createGridClipShape(coordSys, seriesModel, function () {\n // Callback will be invoked immediately if there is no animation\n setTimeout(function () {\n dataGroup.removeClipPath();\n });\n });\n dataGroup.setClipPath(clipPath);\n }\n\n this._data = data;\n\n function add(newDataIndex) {\n addEl(data, dataGroup, newDataIndex, dimensions, coordSys, null, smooth);\n }\n\n function update(newDataIndex, oldDataIndex) {\n var line = oldData.getItemGraphicEl(oldDataIndex);\n var points = createLinePoints(data, newDataIndex, dimensions, coordSys);\n data.setItemGraphicEl(newDataIndex, line);\n var animationModel = payload && payload.animation === false ? null : seriesModel;\n graphic.updateProps(line, {\n shape: {\n points: points\n }\n }, animationModel, newDataIndex);\n }\n\n function remove(oldDataIndex) {\n var line = oldData.getItemGraphicEl(oldDataIndex);\n dataGroup.remove(line);\n }\n },\n\n /**\n * @private\n */\n // _renderForProgressive: function (seriesModel) {\n // var dataGroup = this._dataGroup;\n // var data = seriesModel.getData();\n // var oldData = this._data;\n // var coordSys = seriesModel.coordinateSystem;\n // var dimensions = coordSys.dimensions;\n // var option = seriesModel.option;\n // var progressive = option.progressive;\n // var smooth = option.smooth ? SMOOTH : null;\n // // In progressive animation is disabled, so use simple data diff,\n // // which effects performance less.\n // // (Typically performance for data with length 7000+ like:\n // // simpleDiff: 60ms, addEl: 184ms,\n // // in RMBP 2.4GHz intel i7, OSX 10.9 chrome 50.0.2661.102 (64-bit))\n // if (simpleDiff(oldData, data, dimensions)) {\n // dataGroup.removeAll();\n // data.each(function (dataIndex) {\n // addEl(data, dataGroup, dataIndex, dimensions, coordSys);\n // });\n // }\n // updateElCommon(data, progressive, smooth);\n // // Consider switch between progressive and not.\n // data.__plProgressive = true;\n // this._data = data;\n // },\n\n /**\n * @override\n */\n remove: function () {\n this._dataGroup && this._dataGroup.removeAll();\n this._data = null;\n }\n});\n\nfunction createGridClipShape(coordSys, seriesModel, cb) {\n var parallelModel = coordSys.model;\n var rect = coordSys.getRect();\n var rectEl = new graphic.Rect({\n shape: {\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height\n }\n });\n var dim = parallelModel.get('layout') === 'horizontal' ? 'width' : 'height';\n rectEl.setShape(dim, 0);\n graphic.initProps(rectEl, {\n shape: {\n width: rect.width,\n height: rect.height\n }\n }, seriesModel, cb);\n return rectEl;\n}\n\nfunction createLinePoints(data, dataIndex, dimensions, coordSys) {\n var points = [];\n\n for (var i = 0; i < dimensions.length; i++) {\n var dimName = dimensions[i];\n var value = data.get(dimName, dataIndex);\n\n if (!isEmptyValue(value, coordSys.getAxis(dimName).type)) {\n points.push(coordSys.dataToPoint(value, dimName));\n }\n }\n\n return points;\n}\n\nfunction addEl(data, dataGroup, dataIndex, dimensions, coordSys) {\n var points = createLinePoints(data, dataIndex, dimensions, coordSys);\n var line = new graphic.Polyline({\n shape: {\n points: points\n },\n silent: true,\n z2: 10\n });\n dataGroup.add(line);\n data.setItemGraphicEl(dataIndex, line);\n}\n\nfunction updateElCommon(data, smooth) {\n var seriesStyleModel = data.hostModel.getModel('lineStyle.normal');\n var lineStyle = seriesStyleModel.getLineStyle();\n data.eachItemGraphicEl(function (line, dataIndex) {\n if (data.hasItemOption) {\n var itemModel = data.getItemModel(dataIndex);\n var lineStyleModel = itemModel.getModel('lineStyle.normal', seriesStyleModel);\n lineStyle = lineStyleModel.getLineStyle(['color', 'stroke']);\n }\n\n line.useStyle(zrUtil.extend(lineStyle, {\n fill: null,\n // lineStyle.color have been set to itemVisual in module:echarts/visual/seriesColor.\n stroke: data.getItemVisual(dataIndex, 'color'),\n // lineStyle.opacity have been set to itemVisual in parallelVisual.\n opacity: data.getItemVisual(dataIndex, 'opacity')\n }));\n line.shape.smooth = smooth;\n });\n} // function simpleDiff(oldData, newData, dimensions) {\n// var oldLen;\n// if (!oldData\n// || !oldData.__plProgressive\n// || (oldLen = oldData.count()) !== newData.count()\n// ) {\n// return true;\n// }\n// var dimLen = dimensions.length;\n// for (var i = 0; i < oldLen; i++) {\n// for (var j = 0; j < dimLen; j++) {\n// if (oldData.get(dimensions[j], i) !== newData.get(dimensions[j], i)) {\n// return true;\n// }\n// }\n// }\n// return false;\n// }\n// FIXME\n// 公用方法?\n\n\nfunction isEmptyValue(val, axisType) {\n return axisType === 'category' ? val == null : val == null || isNaN(val); // axisType === 'value'\n}\n\nvar _default = ParallelView;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\n/**\n * @file Visual mapping.\n */\nvar visualDefault = {\n /**\n * @public\n */\n get: function (visualType, key, isCategory) {\n var value = zrUtil.clone((defaultOption[visualType] || {})[key]);\n return isCategory ? zrUtil.isArray(value) ? value[value.length - 1] : value : value;\n }\n};\nvar defaultOption = {\n color: {\n active: ['#006edd', '#e0ffff'],\n inactive: ['rgba(0,0,0,0)']\n },\n colorHue: {\n active: [0, 360],\n inactive: [0, 0]\n },\n colorSaturation: {\n active: [0.3, 1],\n inactive: [0, 0]\n },\n colorLightness: {\n active: [0.9, 0.5],\n inactive: [0, 0]\n },\n colorAlpha: {\n active: [0.3, 1],\n inactive: [0, 0]\n },\n opacity: {\n active: [0.3, 1],\n inactive: [0, 0]\n },\n symbol: {\n active: ['circle', 'roundRect', 'diamond'],\n inactive: ['none']\n },\n symbolSize: {\n active: [10, 50],\n inactive: [0, 0]\n }\n};\nvar _default = visualDefault;\nmodule.exports = _default;","var _config = require(\"../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar Model = require(\"../model/Model\");\n\nvar DataDiffer = require(\"./DataDiffer\");\n\nvar modelUtil = require(\"../util/model\");\n\n/**\n * List for data storage\n * @module echarts/data/List\n */\nvar isObject = zrUtil.isObject;\nvar UNDEFINED = 'undefined';\nvar globalObj = typeof window === UNDEFINED ? global : window;\nvar dataCtors = {\n 'float': typeof globalObj.Float64Array === UNDEFINED ? Array : globalObj.Float64Array,\n 'int': typeof globalObj.Int32Array === UNDEFINED ? Array : globalObj.Int32Array,\n // Ordinal data type can be string or int\n 'ordinal': Array,\n 'number': Array,\n 'time': Array\n};\nvar TRANSFERABLE_PROPERTIES = ['stackedOn', 'hasItemOption', '_nameList', '_idList', '_rawData'];\n\nfunction transferProperties(a, b) {\n zrUtil.each(TRANSFERABLE_PROPERTIES.concat(b.__wrappedMethods || []), function (propName) {\n if (b.hasOwnProperty(propName)) {\n a[propName] = b[propName];\n }\n });\n a.__wrappedMethods = b.__wrappedMethods;\n}\n\nfunction DefaultDataProvider(dataArray) {\n this._array = dataArray || [];\n}\n\nDefaultDataProvider.prototype.pure = false;\n\nDefaultDataProvider.prototype.count = function () {\n return this._array.length;\n};\n\nDefaultDataProvider.prototype.getItem = function (idx) {\n return this._array[idx];\n};\n/**\n * @constructor\n * @alias module:echarts/data/List\n *\n * @param {Array.} dimensions\n * For example, ['someDimName', {name: 'someDimName', type: 'someDimType'}, ...].\n * Dimensions should be concrete names like x, y, z, lng, lat, angle, radius\n * @param {module:echarts/model/Model} hostModel\n */\n\n\nvar List = function (dimensions, hostModel) {\n dimensions = dimensions || ['x', 'y'];\n var dimensionInfos = {};\n var dimensionNames = [];\n\n for (var i = 0; i < dimensions.length; i++) {\n var dimensionName;\n var dimensionInfo = {};\n\n if (typeof dimensions[i] === 'string') {\n dimensionName = dimensions[i];\n dimensionInfo = {\n name: dimensionName,\n coordDim: dimensionName,\n coordDimIndex: 0,\n stackable: false,\n // Type can be 'float', 'int', 'number'\n // Default is number, Precision of float may not enough\n type: 'number'\n };\n } else {\n dimensionInfo = dimensions[i];\n dimensionName = dimensionInfo.name;\n dimensionInfo.type = dimensionInfo.type || 'number';\n\n if (!dimensionInfo.coordDim) {\n dimensionInfo.coordDim = dimensionName;\n dimensionInfo.coordDimIndex = 0;\n }\n }\n\n dimensionInfo.otherDims = dimensionInfo.otherDims || {};\n dimensionNames.push(dimensionName);\n dimensionInfos[dimensionName] = dimensionInfo;\n }\n /**\n * @readOnly\n * @type {Array.}\n */\n\n\n this.dimensions = dimensionNames;\n /**\n * Infomation of each data dimension, like data type.\n * @type {Object}\n */\n\n this._dimensionInfos = dimensionInfos;\n /**\n * @type {module:echarts/model/Model}\n */\n\n this.hostModel = hostModel;\n /**\n * @type {module:echarts/model/Model}\n */\n\n this.dataType;\n /**\n * Indices stores the indices of data subset after filtered.\n * This data subset will be used in chart.\n * @type {Array.}\n * @readOnly\n */\n\n this.indices = [];\n /**\n * Data storage\n * @type {Object.}\n * @private\n */\n\n this._storage = {};\n /**\n * @type {Array.}\n */\n\n this._nameList = [];\n /**\n * @type {Array.}\n */\n\n this._idList = [];\n /**\n * Models of data option is stored sparse for optimizing memory cost\n * @type {Array.}\n * @private\n */\n\n this._optionModels = [];\n /**\n * @param {module:echarts/data/List}\n */\n\n this.stackedOn = null;\n /**\n * Global visual properties after visual coding\n * @type {Object}\n * @private\n */\n\n this._visual = {};\n /**\n * Globel layout properties.\n * @type {Object}\n * @private\n */\n\n this._layout = {};\n /**\n * Item visual properties after visual coding\n * @type {Array.}\n * @private\n */\n\n this._itemVisuals = [];\n /**\n * Item layout properties after layout\n * @type {Array.}\n * @private\n */\n\n this._itemLayouts = [];\n /**\n * Graphic elemnents\n * @type {Array.}\n * @private\n */\n\n this._graphicEls = [];\n /**\n * @type {Array.}\n * @private\n */\n\n this._rawData;\n /**\n * @type {Object}\n * @private\n */\n\n this._extent;\n};\n\nvar listProto = List.prototype;\nlistProto.type = 'list';\n/**\n * If each data item has it's own option\n * @type {boolean}\n */\n\nlistProto.hasItemOption = true;\n/**\n * Get dimension name\n * @param {string|number} dim\n * Dimension can be concrete names like x, y, z, lng, lat, angle, radius\n * Or a ordinal number. For example getDimensionInfo(0) will return 'x' or 'lng' or 'radius'\n * @return {string} Concrete dim name.\n */\n\nlistProto.getDimension = function (dim) {\n if (!isNaN(dim)) {\n dim = this.dimensions[dim] || dim;\n }\n\n return dim;\n};\n/**\n * Get type and stackable info of particular dimension\n * @param {string|number} dim\n * Dimension can be concrete names like x, y, z, lng, lat, angle, radius\n * Or a ordinal number. For example getDimensionInfo(0) will return 'x' or 'lng' or 'radius'\n */\n\n\nlistProto.getDimensionInfo = function (dim) {\n return zrUtil.clone(this._dimensionInfos[this.getDimension(dim)]);\n};\n/**\n * Initialize from data\n * @param {Array.} data\n * @param {Array.} [nameList]\n * @param {Function} [dimValueGetter] (dataItem, dimName, dataIndex, dimIndex) => number\n */\n\n\nlistProto.initData = function (data, nameList, dimValueGetter) {\n data = data || [];\n var isDataArray = zrUtil.isArray(data);\n\n if (isDataArray) {\n data = new DefaultDataProvider(data);\n }\n\n this._rawData = data; // Clear\n\n var storage = this._storage = {};\n var indices = this.indices = [];\n var dimensions = this.dimensions;\n var dimensionInfoMap = this._dimensionInfos;\n var size = data.count();\n var idList = [];\n var nameRepeatCount = {};\n var nameDimIdx;\n nameList = nameList || []; // Init storage\n\n for (var i = 0; i < dimensions.length; i++) {\n var dimInfo = dimensionInfoMap[dimensions[i]];\n dimInfo.otherDims.itemName === 0 && (nameDimIdx = i);\n var DataCtor = dataCtors[dimInfo.type];\n storage[dimensions[i]] = new DataCtor(size);\n }\n\n var self = this;\n\n if (!dimValueGetter) {\n self.hasItemOption = false;\n } // Default dim value getter\n\n\n dimValueGetter = dimValueGetter || function (dataItem, dimName, dataIndex, dimIndex) {\n var value = modelUtil.getDataItemValue(dataItem); // If any dataItem is like { value: 10 }\n\n if (modelUtil.isDataItemOption(dataItem)) {\n self.hasItemOption = true;\n }\n\n return modelUtil.converDataValue(value instanceof Array ? value[dimIndex] // If value is a single number or something else not array.\n : value, dimensionInfoMap[dimName]);\n };\n\n for (var i = 0; i < size; i++) {\n // NOTICE: Try not to write things into dataItem\n var dataItem = data.getItem(i); // Each data item is value\n // [1, 2]\n // 2\n // Bar chart, line chart which uses category axis\n // only gives the 'y' value. 'x' value is the indices of cateogry\n // Use a tempValue to normalize the value to be a (x, y) value\n // Store the data by dimensions\n\n for (var k = 0; k < dimensions.length; k++) {\n var dim = dimensions[k];\n var dimStorage = storage[dim]; // PENDING NULL is empty or zero\n\n dimStorage[i] = dimValueGetter(dataItem, dim, i, k);\n }\n\n indices.push(i);\n } // Use the name in option and create id\n\n\n for (var i = 0; i < size; i++) {\n var dataItem = data.getItem(i);\n\n if (!nameList[i] && dataItem) {\n if (dataItem.name != null) {\n nameList[i] = dataItem.name;\n } else if (nameDimIdx != null) {\n nameList[i] = storage[dimensions[nameDimIdx]][i];\n }\n }\n\n var name = nameList[i] || ''; // Try using the id in option\n\n var id = dataItem && dataItem.id;\n\n if (!id && name) {\n // Use name as id and add counter to avoid same name\n nameRepeatCount[name] = nameRepeatCount[name] || 0;\n id = name;\n\n if (nameRepeatCount[name] > 0) {\n id += '__ec__' + nameRepeatCount[name];\n }\n\n nameRepeatCount[name]++;\n }\n\n id && (idList[i] = id);\n }\n\n this._nameList = nameList;\n this._idList = idList;\n};\n/**\n * @return {number}\n */\n\n\nlistProto.count = function () {\n return this.indices.length;\n};\n/**\n * Get value. Return NaN if idx is out of range.\n * @param {string} dim Dim must be concrete name.\n * @param {number} idx\n * @param {boolean} stack\n * @return {number}\n */\n\n\nlistProto.get = function (dim, idx, stack) {\n var storage = this._storage;\n var dataIndex = this.indices[idx]; // If value not exists\n\n if (dataIndex == null || !storage[dim]) {\n return NaN;\n }\n\n var value = storage[dim][dataIndex]; // FIXME ordinal data type is not stackable\n\n if (stack) {\n var dimensionInfo = this._dimensionInfos[dim];\n\n if (dimensionInfo && dimensionInfo.stackable) {\n var stackedOn = this.stackedOn;\n\n while (stackedOn) {\n // Get no stacked data of stacked on\n var stackedValue = stackedOn.get(dim, idx); // Considering positive stack, negative stack and empty data\n\n if (value >= 0 && stackedValue > 0 || // Positive stack\n value <= 0 && stackedValue < 0 // Negative stack\n ) {\n value += stackedValue;\n }\n\n stackedOn = stackedOn.stackedOn;\n }\n }\n }\n\n return value;\n};\n/**\n * Get value for multi dimensions.\n * @param {Array.} [dimensions] If ignored, using all dimensions.\n * @param {number} idx\n * @param {boolean} stack\n * @return {number}\n */\n\n\nlistProto.getValues = function (dimensions, idx, stack) {\n var values = [];\n\n if (!zrUtil.isArray(dimensions)) {\n stack = idx;\n idx = dimensions;\n dimensions = this.dimensions;\n }\n\n for (var i = 0, len = dimensions.length; i < len; i++) {\n values.push(this.get(dimensions[i], idx, stack));\n }\n\n return values;\n};\n/**\n * If value is NaN. Inlcuding '-'\n * @param {string} dim\n * @param {number} idx\n * @return {number}\n */\n\n\nlistProto.hasValue = function (idx) {\n var dimensions = this.dimensions;\n var dimensionInfos = this._dimensionInfos;\n\n for (var i = 0, len = dimensions.length; i < len; i++) {\n if ( // Ordinal type can be string or number\n dimensionInfos[dimensions[i]].type !== 'ordinal' && isNaN(this.get(dimensions[i], idx))) {\n return false;\n }\n }\n\n return true;\n};\n/**\n * Get extent of data in one dimension\n * @param {string} dim\n * @param {boolean} stack\n * @param {Function} filter\n */\n\n\nlistProto.getDataExtent = function (dim, stack, filter) {\n dim = this.getDimension(dim);\n var dimData = this._storage[dim];\n var dimInfo = this.getDimensionInfo(dim);\n stack = dimInfo && dimInfo.stackable && stack;\n var dimExtent = (this._extent || (this._extent = {}))[dim + !!stack];\n var value;\n\n if (dimExtent) {\n return dimExtent;\n } // var dimInfo = this._dimensionInfos[dim];\n\n\n if (dimData) {\n var min = Infinity;\n var max = -Infinity; // var isOrdinal = dimInfo.type === 'ordinal';\n\n for (var i = 0, len = this.count(); i < len; i++) {\n value = this.get(dim, i, stack); // FIXME\n // if (isOrdinal && typeof value === 'string') {\n // value = zrUtil.indexOf(dimData, value);\n // }\n\n if (!filter || filter(value, dim, i)) {\n value < min && (min = value);\n value > max && (max = value);\n }\n }\n\n return this._extent[dim + !!stack] = [min, max];\n } else {\n return [Infinity, -Infinity];\n }\n};\n/**\n * Get sum of data in one dimension\n * @param {string} dim\n * @param {boolean} stack\n */\n\n\nlistProto.getSum = function (dim, stack) {\n var dimData = this._storage[dim];\n var sum = 0;\n\n if (dimData) {\n for (var i = 0, len = this.count(); i < len; i++) {\n var value = this.get(dim, i, stack);\n\n if (!isNaN(value)) {\n sum += value;\n }\n }\n }\n\n return sum;\n};\n/**\n * Retreive the index with given value\n * @param {number} idx\n * @param {number} value\n * @return {number}\n */\n// FIXME Precision of float value\n\n\nlistProto.indexOf = function (dim, value) {\n var storage = this._storage;\n var dimData = storage[dim];\n var indices = this.indices;\n\n if (dimData) {\n for (var i = 0, len = indices.length; i < len; i++) {\n var rawIndex = indices[i];\n\n if (dimData[rawIndex] === value) {\n return i;\n }\n }\n }\n\n return -1;\n};\n/**\n * Retreive the index with given name\n * @param {number} idx\n * @param {number} name\n * @return {number}\n */\n\n\nlistProto.indexOfName = function (name) {\n var indices = this.indices;\n var nameList = this._nameList;\n\n for (var i = 0, len = indices.length; i < len; i++) {\n var rawIndex = indices[i];\n\n if (nameList[rawIndex] === name) {\n return i;\n }\n }\n\n return -1;\n};\n/**\n * Retreive the index with given raw data index\n * @param {number} idx\n * @param {number} name\n * @return {number}\n */\n\n\nlistProto.indexOfRawIndex = function (rawIndex) {\n // Indices are ascending\n var indices = this.indices; // If rawIndex === dataIndex\n\n var rawDataIndex = indices[rawIndex];\n\n if (rawDataIndex != null && rawDataIndex === rawIndex) {\n return rawIndex;\n }\n\n var left = 0;\n var right = indices.length - 1;\n\n while (left <= right) {\n var mid = (left + right) / 2 | 0;\n\n if (indices[mid] < rawIndex) {\n left = mid + 1;\n } else if (indices[mid] > rawIndex) {\n right = mid - 1;\n } else {\n return mid;\n }\n }\n\n return -1;\n};\n/**\n * Retreive the index of nearest value\n * @param {string} dim\n * @param {number} value\n * @param {boolean} stack If given value is after stacked\n * @param {number} [maxDistance=Infinity]\n * @return {Array.} Considere multiple points has the same value.\n */\n\n\nlistProto.indicesOfNearest = function (dim, value, stack, maxDistance) {\n var storage = this._storage;\n var dimData = storage[dim];\n var nearestIndices = [];\n\n if (!dimData) {\n return nearestIndices;\n }\n\n if (maxDistance == null) {\n maxDistance = Infinity;\n }\n\n var minDist = Number.MAX_VALUE;\n var minDiff = -1;\n\n for (var i = 0, len = this.count(); i < len; i++) {\n var diff = value - this.get(dim, i, stack);\n var dist = Math.abs(diff);\n\n if (diff <= maxDistance && dist <= minDist) {\n // For the case of two data are same on xAxis, which has sequence data.\n // Show the nearest index\n // https://github.com/ecomfe/echarts/issues/2869\n if (dist < minDist || diff >= 0 && minDiff < 0) {\n minDist = dist;\n minDiff = diff;\n nearestIndices.length = 0;\n }\n\n nearestIndices.push(i);\n }\n }\n\n return nearestIndices;\n};\n/**\n * Get raw data index\n * @param {number} idx\n * @return {number}\n */\n\n\nlistProto.getRawIndex = function (idx) {\n var rawIdx = this.indices[idx];\n return rawIdx == null ? -1 : rawIdx;\n};\n/**\n * Get raw data item\n * @param {number} idx\n * @return {number}\n */\n\n\nlistProto.getRawDataItem = function (idx) {\n return this._rawData.getItem(this.getRawIndex(idx));\n};\n/**\n * @param {number} idx\n * @param {boolean} [notDefaultIdx=false]\n * @return {string}\n */\n\n\nlistProto.getName = function (idx) {\n return this._nameList[this.indices[idx]] || '';\n};\n/**\n * @param {number} idx\n * @param {boolean} [notDefaultIdx=false]\n * @return {string}\n */\n\n\nlistProto.getId = function (idx) {\n return this._idList[this.indices[idx]] || this.getRawIndex(idx) + '';\n};\n\nfunction normalizeDimensions(dimensions) {\n if (!zrUtil.isArray(dimensions)) {\n dimensions = [dimensions];\n }\n\n return dimensions;\n}\n/**\n * Data iteration\n * @param {string|Array.}\n * @param {Function} cb\n * @param {boolean} [stack=false]\n * @param {*} [context=this]\n *\n * @example\n * list.each('x', function (x, idx) {});\n * list.each(['x', 'y'], function (x, y, idx) {});\n * list.each(function (idx) {})\n */\n\n\nlistProto.each = function (dims, cb, stack, context) {\n if (typeof dims === 'function') {\n context = stack;\n stack = cb;\n cb = dims;\n dims = [];\n }\n\n dims = zrUtil.map(normalizeDimensions(dims), this.getDimension, this);\n var value = [];\n var dimSize = dims.length;\n var indices = this.indices;\n context = context || this;\n\n for (var i = 0; i < indices.length; i++) {\n // Simple optimization\n switch (dimSize) {\n case 0:\n cb.call(context, i);\n break;\n\n case 1:\n cb.call(context, this.get(dims[0], i, stack), i);\n break;\n\n case 2:\n cb.call(context, this.get(dims[0], i, stack), this.get(dims[1], i, stack), i);\n break;\n\n default:\n for (var k = 0; k < dimSize; k++) {\n value[k] = this.get(dims[k], i, stack);\n } // Index\n\n\n value[k] = i;\n cb.apply(context, value);\n }\n }\n};\n/**\n * Data filter\n * @param {string|Array.}\n * @param {Function} cb\n * @param {boolean} [stack=false]\n * @param {*} [context=this]\n */\n\n\nlistProto.filterSelf = function (dimensions, cb, stack, context) {\n if (typeof dimensions === 'function') {\n context = stack;\n stack = cb;\n cb = dimensions;\n dimensions = [];\n }\n\n dimensions = zrUtil.map(normalizeDimensions(dimensions), this.getDimension, this);\n var newIndices = [];\n var value = [];\n var dimSize = dimensions.length;\n var indices = this.indices;\n context = context || this;\n\n for (var i = 0; i < indices.length; i++) {\n var keep; // Simple optimization\n\n if (!dimSize) {\n keep = cb.call(context, i);\n } else if (dimSize === 1) {\n keep = cb.call(context, this.get(dimensions[0], i, stack), i);\n } else {\n for (var k = 0; k < dimSize; k++) {\n value[k] = this.get(dimensions[k], i, stack);\n }\n\n value[k] = i;\n keep = cb.apply(context, value);\n }\n\n if (keep) {\n newIndices.push(indices[i]);\n }\n }\n\n this.indices = newIndices; // Reset data extent\n\n this._extent = {};\n return this;\n};\n/**\n * Data mapping to a plain array\n * @param {string|Array.} [dimensions]\n * @param {Function} cb\n * @param {boolean} [stack=false]\n * @param {*} [context=this]\n * @return {Array}\n */\n\n\nlistProto.mapArray = function (dimensions, cb, stack, context) {\n if (typeof dimensions === 'function') {\n context = stack;\n stack = cb;\n cb = dimensions;\n dimensions = [];\n }\n\n var result = [];\n this.each(dimensions, function () {\n result.push(cb && cb.apply(this, arguments));\n }, stack, context);\n return result;\n};\n\nfunction cloneListForMapAndSample(original, excludeDimensions) {\n var allDimensions = original.dimensions;\n var list = new List(zrUtil.map(allDimensions, original.getDimensionInfo, original), original.hostModel); // FIXME If needs stackedOn, value may already been stacked\n\n transferProperties(list, original);\n var storage = list._storage = {};\n var originalStorage = original._storage; // Init storage\n\n for (var i = 0; i < allDimensions.length; i++) {\n var dim = allDimensions[i];\n var dimStore = originalStorage[dim];\n\n if (zrUtil.indexOf(excludeDimensions, dim) >= 0) {\n storage[dim] = new dimStore.constructor(originalStorage[dim].length);\n } else {\n // Direct reference for other dimensions\n storage[dim] = originalStorage[dim];\n }\n }\n\n return list;\n}\n/**\n * Data mapping to a new List with given dimensions\n * @param {string|Array.} dimensions\n * @param {Function} cb\n * @param {boolean} [stack=false]\n * @param {*} [context=this]\n * @return {Array}\n */\n\n\nlistProto.map = function (dimensions, cb, stack, context) {\n dimensions = zrUtil.map(normalizeDimensions(dimensions), this.getDimension, this);\n var list = cloneListForMapAndSample(this, dimensions); // Following properties are all immutable.\n // So we can reference to the same value\n\n var indices = list.indices = this.indices;\n var storage = list._storage;\n var tmpRetValue = [];\n this.each(dimensions, function () {\n var idx = arguments[arguments.length - 1];\n var retValue = cb && cb.apply(this, arguments);\n\n if (retValue != null) {\n // a number\n if (typeof retValue === 'number') {\n tmpRetValue[0] = retValue;\n retValue = tmpRetValue;\n }\n\n for (var i = 0; i < retValue.length; i++) {\n var dim = dimensions[i];\n var dimStore = storage[dim];\n var rawIdx = indices[idx];\n\n if (dimStore) {\n dimStore[rawIdx] = retValue[i];\n }\n }\n }\n }, stack, context);\n return list;\n};\n/**\n * Large data down sampling on given dimension\n * @param {string} dimension\n * @param {number} rate\n * @param {Function} sampleValue\n * @param {Function} sampleIndex Sample index for name and id\n */\n\n\nlistProto.downSample = function (dimension, rate, sampleValue, sampleIndex) {\n var list = cloneListForMapAndSample(this, [dimension]);\n var storage = this._storage;\n var targetStorage = list._storage;\n var originalIndices = this.indices;\n var indices = list.indices = [];\n var frameValues = [];\n var frameIndices = [];\n var frameSize = Math.floor(1 / rate);\n var dimStore = targetStorage[dimension];\n var len = this.count(); // Copy data from original data\n\n for (var i = 0; i < storage[dimension].length; i++) {\n targetStorage[dimension][i] = storage[dimension][i];\n }\n\n for (var i = 0; i < len; i += frameSize) {\n // Last frame\n if (frameSize > len - i) {\n frameSize = len - i;\n frameValues.length = frameSize;\n }\n\n for (var k = 0; k < frameSize; k++) {\n var idx = originalIndices[i + k];\n frameValues[k] = dimStore[idx];\n frameIndices[k] = idx;\n }\n\n var value = sampleValue(frameValues);\n var idx = frameIndices[sampleIndex(frameValues, value) || 0]; // Only write value on the filtered data\n\n dimStore[idx] = value;\n indices.push(idx);\n }\n\n return list;\n};\n/**\n * Get model of one data item.\n *\n * @param {number} idx\n */\n// FIXME Model proxy ?\n\n\nlistProto.getItemModel = function (idx) {\n var hostModel = this.hostModel;\n idx = this.indices[idx];\n return new Model(this._rawData.getItem(idx), hostModel, hostModel && hostModel.ecModel);\n};\n/**\n * Create a data differ\n * @param {module:echarts/data/List} otherList\n * @return {module:echarts/data/DataDiffer}\n */\n\n\nlistProto.diff = function (otherList) {\n var idList = this._idList;\n var otherIdList = otherList && otherList._idList;\n var val; // Use prefix to avoid index to be the same as otherIdList[idx],\n // which will cause weird udpate animation.\n\n var prefix = 'e\\0\\0';\n return new DataDiffer(otherList ? otherList.indices : [], this.indices, function (idx) {\n return (val = otherIdList[idx]) != null ? val : prefix + idx;\n }, function (idx) {\n return (val = idList[idx]) != null ? val : prefix + idx;\n });\n};\n/**\n * Get visual property.\n * @param {string} key\n */\n\n\nlistProto.getVisual = function (key) {\n var visual = this._visual;\n return visual && visual[key];\n};\n/**\n * Set visual property\n * @param {string|Object} key\n * @param {*} [value]\n *\n * @example\n * setVisual('color', color);\n * setVisual({\n * 'color': color\n * });\n */\n\n\nlistProto.setVisual = function (key, val) {\n if (isObject(key)) {\n for (var name in key) {\n if (key.hasOwnProperty(name)) {\n this.setVisual(name, key[name]);\n }\n }\n\n return;\n }\n\n this._visual = this._visual || {};\n this._visual[key] = val;\n};\n/**\n * Set layout property.\n * @param {string|Object} key\n * @param {*} [val]\n */\n\n\nlistProto.setLayout = function (key, val) {\n if (isObject(key)) {\n for (var name in key) {\n if (key.hasOwnProperty(name)) {\n this.setLayout(name, key[name]);\n }\n }\n\n return;\n }\n\n this._layout[key] = val;\n};\n/**\n * Get layout property.\n * @param {string} key.\n * @return {*}\n */\n\n\nlistProto.getLayout = function (key) {\n return this._layout[key];\n};\n/**\n * Get layout of single data item\n * @param {number} idx\n */\n\n\nlistProto.getItemLayout = function (idx) {\n return this._itemLayouts[idx];\n};\n/**\n * Set layout of single data item\n * @param {number} idx\n * @param {Object} layout\n * @param {boolean=} [merge=false]\n */\n\n\nlistProto.setItemLayout = function (idx, layout, merge) {\n this._itemLayouts[idx] = merge ? zrUtil.extend(this._itemLayouts[idx] || {}, layout) : layout;\n};\n/**\n * Clear all layout of single data item\n */\n\n\nlistProto.clearItemLayouts = function () {\n this._itemLayouts.length = 0;\n};\n/**\n * Get visual property of single data item\n * @param {number} idx\n * @param {string} key\n * @param {boolean} [ignoreParent=false]\n */\n\n\nlistProto.getItemVisual = function (idx, key, ignoreParent) {\n var itemVisual = this._itemVisuals[idx];\n var val = itemVisual && itemVisual[key];\n\n if (val == null && !ignoreParent) {\n // Use global visual property\n return this.getVisual(key);\n }\n\n return val;\n};\n/**\n * Set visual property of single data item\n *\n * @param {number} idx\n * @param {string|Object} key\n * @param {*} [value]\n *\n * @example\n * setItemVisual(0, 'color', color);\n * setItemVisual(0, {\n * 'color': color\n * });\n */\n\n\nlistProto.setItemVisual = function (idx, key, value) {\n var itemVisual = this._itemVisuals[idx] || {};\n this._itemVisuals[idx] = itemVisual;\n\n if (isObject(key)) {\n for (var name in key) {\n if (key.hasOwnProperty(name)) {\n itemVisual[name] = key[name];\n }\n }\n\n return;\n }\n\n itemVisual[key] = value;\n};\n/**\n * Clear itemVisuals and list visual.\n */\n\n\nlistProto.clearAllVisual = function () {\n this._visual = {};\n this._itemVisuals = [];\n};\n\nvar setItemDataAndSeriesIndex = function (child) {\n child.seriesIndex = this.seriesIndex;\n child.dataIndex = this.dataIndex;\n child.dataType = this.dataType;\n};\n/**\n * Set graphic element relative to data. It can be set as null\n * @param {number} idx\n * @param {module:zrender/Element} [el]\n */\n\n\nlistProto.setItemGraphicEl = function (idx, el) {\n var hostModel = this.hostModel;\n\n if (el) {\n // Add data index and series index for indexing the data by element\n // Useful in tooltip\n el.dataIndex = idx;\n el.dataType = this.dataType;\n el.seriesIndex = hostModel && hostModel.seriesIndex;\n\n if (el.type === 'group') {\n el.traverse(setItemDataAndSeriesIndex, el);\n }\n }\n\n this._graphicEls[idx] = el;\n};\n/**\n * @param {number} idx\n * @return {module:zrender/Element}\n */\n\n\nlistProto.getItemGraphicEl = function (idx) {\n return this._graphicEls[idx];\n};\n/**\n * @param {Function} cb\n * @param {*} context\n */\n\n\nlistProto.eachItemGraphicEl = function (cb, context) {\n zrUtil.each(this._graphicEls, function (el, idx) {\n if (el) {\n cb && cb.call(context, el, idx);\n }\n });\n};\n/**\n * Shallow clone a new list except visual and layout properties, and graph elements.\n * New list only change the indices.\n */\n\n\nlistProto.cloneShallow = function () {\n var dimensionInfoList = zrUtil.map(this.dimensions, this.getDimensionInfo, this);\n var list = new List(dimensionInfoList, this.hostModel); // FIXME\n\n list._storage = this._storage;\n transferProperties(list, this); // Clone will not change the data extent and indices\n\n list.indices = this.indices.slice();\n\n if (this._extent) {\n list._extent = zrUtil.extend({}, this._extent);\n }\n\n return list;\n};\n/**\n * Wrap some method to add more feature\n * @param {string} methodName\n * @param {Function} injectFunction\n */\n\n\nlistProto.wrapMethod = function (methodName, injectFunction) {\n var originalMethod = this[methodName];\n\n if (typeof originalMethod !== 'function') {\n return;\n }\n\n this.__wrappedMethods = this.__wrappedMethods || [];\n\n this.__wrappedMethods.push(methodName);\n\n this[methodName] = function () {\n var res = originalMethod.apply(this, arguments);\n return injectFunction.apply(this, [res].concat(zrUtil.slice(arguments)));\n };\n}; // Methods that create a new list based on this list should be listed here.\n// Notice that those method should `RETURN` the new list.\n\n\nlistProto.TRANSFERABLE_METHODS = ['cloneShallow', 'downSample', 'map']; // Methods that change indices of this list should be listed here.\n\nlistProto.CHANGABLE_METHODS = ['filterSelf'];\nvar _default = List;\nmodule.exports = _default;","var _vector = require(\"../../core/vector\");\n\nvar v2Distance = _vector.distance;\n\n/**\n * Catmull-Rom spline 插值折线\n * @module zrender/shape/util/smoothSpline\n * @author pissang (https://www.github.com/pissang)\n * Kener (@Kener-林峰, kener.linfeng@gmail.com)\n * errorrik (errorrik@gmail.com)\n */\n\n/**\n * @inner\n */\nfunction interpolate(p0, p1, p2, p3, t, t2, t3) {\n var v0 = (p2 - p0) * 0.5;\n var v1 = (p3 - p1) * 0.5;\n return (2 * (p1 - p2) + v0 + v1) * t3 + (-3 * (p1 - p2) - 2 * v0 - v1) * t2 + v0 * t + p1;\n}\n/**\n * @alias module:zrender/shape/util/smoothSpline\n * @param {Array} points 线段顶点数组\n * @param {boolean} isLoop\n * @return {Array}\n */\n\n\nfunction _default(points, isLoop) {\n var len = points.length;\n var ret = [];\n var distance = 0;\n\n for (var i = 1; i < len; i++) {\n distance += v2Distance(points[i - 1], points[i]);\n }\n\n var segs = distance / 2;\n segs = segs < len ? len : segs;\n\n for (var i = 0; i < segs; i++) {\n var pos = i / (segs - 1) * (isLoop ? len : len - 1);\n var idx = Math.floor(pos);\n var w = pos - idx;\n var p0;\n var p1 = points[idx % len];\n var p2;\n var p3;\n\n if (!isLoop) {\n p0 = points[idx === 0 ? idx : idx - 1];\n p2 = points[idx > len - 2 ? len - 1 : idx + 1];\n p3 = points[idx > len - 3 ? len - 1 : idx + 2];\n } else {\n p0 = points[(idx - 1 + len) % len];\n p2 = points[(idx + 1) % len];\n p3 = points[(idx + 2) % len];\n }\n\n var w2 = w * w;\n var w3 = w * w2;\n ret.push([interpolate(p0[0], p1[0], p2[0], p3[0], w, w2, w3), interpolate(p0[1], p1[1], p2[1], p3[1], w, w2, w3)]);\n }\n\n return ret;\n}\n\nmodule.exports = _default;","var _config = require(\"../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar TYPE_DELIMITER = '.';\nvar IS_CONTAINER = '___EC__COMPONENT__CONTAINER___';\nvar MEMBER_PRIFIX = '\\0ec_\\0';\n/**\n * Hide private class member.\n * The same behavior as `host[name] = value;` (can be right-value)\n * @public\n */\n\nfunction set(host, name, value) {\n return host[MEMBER_PRIFIX + name] = value;\n}\n/**\n * Hide private class member.\n * The same behavior as `host[name];`\n * @public\n */\n\n\nfunction get(host, name) {\n return host[MEMBER_PRIFIX + name];\n}\n/**\n * For hidden private class member.\n * The same behavior as `host.hasOwnProperty(name);`\n * @public\n */\n\n\nfunction hasOwn(host, name) {\n return host.hasOwnProperty(MEMBER_PRIFIX + name);\n}\n/**\n * Notice, parseClassType('') should returns {main: '', sub: ''}\n * @public\n */\n\n\nfunction parseClassType(componentType) {\n var ret = {\n main: '',\n sub: ''\n };\n\n if (componentType) {\n componentType = componentType.split(TYPE_DELIMITER);\n ret.main = componentType[0] || '';\n ret.sub = componentType[1] || '';\n }\n\n return ret;\n}\n/**\n * @public\n */\n\n\nfunction checkClassType(componentType) {\n zrUtil.assert(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(componentType), 'componentType \"' + componentType + '\" illegal');\n}\n/**\n * @public\n */\n\n\nfunction enableClassExtend(RootClass, mandatoryMethods) {\n RootClass.$constructor = RootClass;\n\n RootClass.extend = function (proto) {\n var superClass = this;\n\n var ExtendedClass = function () {\n if (!proto.$constructor) {\n superClass.apply(this, arguments);\n } else {\n proto.$constructor.apply(this, arguments);\n }\n };\n\n zrUtil.extend(ExtendedClass.prototype, proto);\n ExtendedClass.extend = this.extend;\n ExtendedClass.superCall = superCall;\n ExtendedClass.superApply = superApply;\n zrUtil.inherits(ExtendedClass, this);\n ExtendedClass.superClass = superClass;\n return ExtendedClass;\n };\n} // superCall should have class info, which can not be fetch from 'this'.\n// Consider this case:\n// class A has method f,\n// class B inherits class A, overrides method f, f call superApply('f'),\n// class C inherits class B, do not overrides method f,\n// then when method of class C is called, dead loop occured.\n\n\nfunction superCall(context, methodName) {\n var args = zrUtil.slice(arguments, 2);\n return this.superClass.prototype[methodName].apply(context, args);\n}\n\nfunction superApply(context, methodName, args) {\n return this.superClass.prototype[methodName].apply(context, args);\n}\n/**\n * @param {Object} entity\n * @param {Object} options\n * @param {boolean} [options.registerWhenExtend]\n * @public\n */\n\n\nfunction enableClassManagement(entity, options) {\n options = options || {};\n /**\n * Component model classes\n * key: componentType,\n * value:\n * componentClass, when componentType is 'xxx'\n * or Object., when componentType is 'xxx.yy'\n * @type {Object}\n */\n\n var storage = {};\n\n entity.registerClass = function (Clazz, componentType) {\n if (componentType) {\n checkClassType(componentType);\n componentType = parseClassType(componentType);\n\n if (!componentType.sub) {\n storage[componentType.main] = Clazz;\n } else if (componentType.sub !== IS_CONTAINER) {\n var container = makeContainer(componentType);\n container[componentType.sub] = Clazz;\n }\n }\n\n return Clazz;\n };\n\n entity.getClass = function (componentMainType, subType, throwWhenNotFound) {\n var Clazz = storage[componentMainType];\n\n if (Clazz && Clazz[IS_CONTAINER]) {\n Clazz = subType ? Clazz[subType] : null;\n }\n\n if (throwWhenNotFound && !Clazz) {\n throw new Error(!subType ? componentMainType + '.' + 'type should be specified.' : 'Component ' + componentMainType + '.' + (subType || '') + ' not exists. Load it first.');\n }\n\n return Clazz;\n };\n\n entity.getClassesByMainType = function (componentType) {\n componentType = parseClassType(componentType);\n var result = [];\n var obj = storage[componentType.main];\n\n if (obj && obj[IS_CONTAINER]) {\n zrUtil.each(obj, function (o, type) {\n type !== IS_CONTAINER && result.push(o);\n });\n } else {\n result.push(obj);\n }\n\n return result;\n };\n\n entity.hasClass = function (componentType) {\n // Just consider componentType.main.\n componentType = parseClassType(componentType);\n return !!storage[componentType.main];\n };\n /**\n * @return {Array.} Like ['aa', 'bb'], but can not be ['aa.xx']\n */\n\n\n entity.getAllClassMainTypes = function () {\n var types = [];\n zrUtil.each(storage, function (obj, type) {\n types.push(type);\n });\n return types;\n };\n /**\n * If a main type is container and has sub types\n * @param {string} mainType\n * @return {boolean}\n */\n\n\n entity.hasSubTypes = function (componentType) {\n componentType = parseClassType(componentType);\n var obj = storage[componentType.main];\n return obj && obj[IS_CONTAINER];\n };\n\n entity.parseClassType = parseClassType;\n\n function makeContainer(componentType) {\n var container = storage[componentType.main];\n\n if (!container || !container[IS_CONTAINER]) {\n container = storage[componentType.main] = {};\n container[IS_CONTAINER] = true;\n }\n\n return container;\n }\n\n if (options.registerWhenExtend) {\n var originalExtend = entity.extend;\n\n if (originalExtend) {\n entity.extend = function (proto) {\n var ExtendedClass = originalExtend.call(this, proto);\n return entity.registerClass(ExtendedClass, proto.type);\n };\n }\n }\n\n return entity;\n}\n/**\n * @param {string|Array.} properties\n */\n\n\nfunction setReadOnly(obj, properties) {// FIXME It seems broken in IE8 simulation of IE11\n // if (!zrUtil.isArray(properties)) {\n // properties = properties != null ? [properties] : [];\n // }\n // zrUtil.each(properties, function (prop) {\n // var value = obj[prop];\n // Object.defineProperty\n // && Object.defineProperty(obj, prop, {\n // value: value, writable: false\n // });\n // zrUtil.isArray(obj[prop])\n // && Object.freeze\n // && Object.freeze(obj[prop]);\n // });\n}\n\nexports.set = set;\nexports.get = get;\nexports.hasOwn = hasOwn;\nexports.parseClassType = parseClassType;\nexports.enableClassExtend = enableClassExtend;\nexports.enableClassManagement = enableClassManagement;\nexports.setReadOnly = setReadOnly;","var echarts = require(\"../echarts\");\n\nvar graphic = require(\"../util/graphic\");\n\nvar _layout = require(\"../util/layout\");\n\nvar getLayoutRect = _layout.getLayoutRect;\n// Model\necharts.extendComponentModel({\n type: 'title',\n layoutMode: {\n type: 'box',\n ignoreSize: true\n },\n defaultOption: {\n // 一级层叠\n zlevel: 0,\n // 二级层叠\n z: 6,\n show: true,\n text: '',\n // 超链接跳转\n // link: null,\n // 仅支持self | blank\n target: 'blank',\n subtext: '',\n // 超链接跳转\n // sublink: null,\n // 仅支持self | blank\n subtarget: 'blank',\n // 'center' ¦ 'left' ¦ 'right'\n // ¦ {number}(x坐标,单位px)\n left: 0,\n // 'top' ¦ 'bottom' ¦ 'center'\n // ¦ {number}(y坐标,单位px)\n top: 0,\n // 水平对齐\n // 'auto' | 'left' | 'right' | 'center'\n // 默认根据 left 的位置判断是左对齐还是右对齐\n // textAlign: null\n //\n // 垂直对齐\n // 'auto' | 'top' | 'bottom' | 'middle'\n // 默认根据 top 位置判断是上对齐还是下对齐\n // textBaseline: null\n backgroundColor: 'rgba(0,0,0,0)',\n // 标题边框颜色\n borderColor: '#ccc',\n // 标题边框线宽,单位px,默认为0(无边框)\n borderWidth: 0,\n // 标题内边距,单位px,默认各方向内边距为5,\n // 接受数组分别设定上右下左边距,同css\n padding: 5,\n // 主副标题纵向间隔,单位px,默认为10,\n itemGap: 10,\n textStyle: {\n fontSize: 18,\n fontWeight: 'bolder',\n color: '#333'\n },\n subtextStyle: {\n color: '#aaa'\n }\n }\n}); // View\n\necharts.extendComponentView({\n type: 'title',\n render: function (titleModel, ecModel, api) {\n this.group.removeAll();\n\n if (!titleModel.get('show')) {\n return;\n }\n\n var group = this.group;\n var textStyleModel = titleModel.getModel('textStyle');\n var subtextStyleModel = titleModel.getModel('subtextStyle');\n var textAlign = titleModel.get('textAlign');\n var textBaseline = titleModel.get('textBaseline');\n var textEl = new graphic.Text({\n style: graphic.setTextStyle({}, textStyleModel, {\n text: titleModel.get('text'),\n textFill: textStyleModel.getTextColor()\n }, {\n disableBox: true\n }),\n z2: 10\n });\n var textRect = textEl.getBoundingRect();\n var subText = titleModel.get('subtext');\n var subTextEl = new graphic.Text({\n style: graphic.setTextStyle({}, subtextStyleModel, {\n text: subText,\n textFill: subtextStyleModel.getTextColor(),\n y: textRect.height + titleModel.get('itemGap'),\n textVerticalAlign: 'top'\n }, {\n disableBox: true\n }),\n z2: 10\n });\n var link = titleModel.get('link');\n var sublink = titleModel.get('sublink');\n textEl.silent = !link;\n subTextEl.silent = !sublink;\n\n if (link) {\n textEl.on('click', function () {\n window.open(link, '_' + titleModel.get('target'));\n });\n }\n\n if (sublink) {\n subTextEl.on('click', function () {\n window.open(sublink, '_' + titleModel.get('subtarget'));\n });\n }\n\n group.add(textEl);\n subText && group.add(subTextEl); // If no subText, but add subTextEl, there will be an empty line.\n\n var groupRect = group.getBoundingRect();\n var layoutOption = titleModel.getBoxLayoutParams();\n layoutOption.width = groupRect.width;\n layoutOption.height = groupRect.height;\n var layoutRect = getLayoutRect(layoutOption, {\n width: api.getWidth(),\n height: api.getHeight()\n }, titleModel.get('padding')); // Adjust text align based on position\n\n if (!textAlign) {\n // Align left if title is on the left. center and right is same\n textAlign = titleModel.get('left') || titleModel.get('right');\n\n if (textAlign === 'middle') {\n textAlign = 'center';\n } // Adjust layout by text align\n\n\n if (textAlign === 'right') {\n layoutRect.x += layoutRect.width;\n } else if (textAlign === 'center') {\n layoutRect.x += layoutRect.width / 2;\n }\n }\n\n if (!textBaseline) {\n textBaseline = titleModel.get('top') || titleModel.get('bottom');\n\n if (textBaseline === 'center') {\n textBaseline = 'middle';\n }\n\n if (textBaseline === 'bottom') {\n layoutRect.y += layoutRect.height;\n } else if (textBaseline === 'middle') {\n layoutRect.y += layoutRect.height / 2;\n }\n\n textBaseline = textBaseline || 'top';\n }\n\n group.attr('position', [layoutRect.x, layoutRect.y]);\n var alignStyle = {\n textAlign: textAlign,\n textVerticalAlign: textBaseline\n };\n textEl.setStyle(alignStyle);\n subTextEl.setStyle(alignStyle); // Render background\n // Get groupRect again because textAlign has been changed\n\n groupRect = group.getBoundingRect();\n var padding = layoutRect.margin;\n var style = titleModel.getItemStyle(['color', 'opacity']);\n style.fill = titleModel.get('backgroundColor');\n var rect = new graphic.Rect({\n shape: {\n x: groupRect.x - padding[3],\n y: groupRect.y - padding[0],\n width: groupRect.width + padding[1] + padding[3],\n height: groupRect.height + padding[0] + padding[2],\n r: titleModel.get('borderRadius')\n },\n style: style,\n silent: true\n });\n graphic.subPixelOptimizeRect(rect);\n group.add(rect);\n }\n});","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar modelUtil = require(\"../../util/model\");\n\nfunction _default(option) {\n createParallelIfNeeded(option);\n mergeAxisOptionFromParallel(option);\n}\n/**\n * Create a parallel coordinate if not exists.\n * @inner\n */\n\n\nfunction createParallelIfNeeded(option) {\n if (option.parallel) {\n return;\n }\n\n var hasParallelSeries = false;\n zrUtil.each(option.series, function (seriesOpt) {\n if (seriesOpt && seriesOpt.type === 'parallel') {\n hasParallelSeries = true;\n }\n });\n\n if (hasParallelSeries) {\n option.parallel = [{}];\n }\n}\n/**\n * Merge aixs definition from parallel option (if exists) to axis option.\n * @inner\n */\n\n\nfunction mergeAxisOptionFromParallel(option) {\n var axes = modelUtil.normalizeToArray(option.parallelAxis);\n zrUtil.each(axes, function (axisOption) {\n if (!zrUtil.isObject(axisOption)) {\n return;\n }\n\n var parallelIndex = axisOption.parallelIndex || 0;\n var parallelOption = modelUtil.normalizeToArray(option.parallel)[parallelIndex];\n\n if (parallelOption && parallelOption.parallelAxisDefault) {\n zrUtil.merge(axisOption, parallelOption.parallelAxisDefault, false);\n }\n });\n}\n\nmodule.exports = _default;","var _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nfunction _default(ecModel) {\n ecModel.eachSeriesByType('lines', function (seriesModel) {\n var coordSys = seriesModel.coordinateSystem;\n var lineData = seriesModel.getData(); // FIXME Use data dimensions ?\n\n lineData.each(function (idx) {\n var itemModel = lineData.getItemModel(idx);\n var coords = itemModel.option instanceof Array ? itemModel.option : itemModel.get('coords');\n var pts = [];\n\n if (seriesModel.get('polyline')) {\n for (var i = 0; i < coords.length; i++) {\n pts.push(coordSys.dataToPoint(coords[i]));\n }\n } else {\n pts[0] = coordSys.dataToPoint(coords[0]);\n pts[1] = coordSys.dataToPoint(coords[1]);\n var curveness = itemModel.get('lineStyle.normal.curveness');\n\n if (+curveness) {\n pts[2] = [(pts[0][0] + pts[1][0]) / 2 - (pts[0][1] - pts[1][1]) * curveness, (pts[0][1] + pts[1][1]) / 2 - (pts[1][0] - pts[0][0]) * curveness];\n }\n }\n\n lineData.setItemLayout(idx, pts);\n });\n });\n}\n\nmodule.exports = _default;","var _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar echarts = require(\"../../echarts\");\n\nvar axisPointerModelHelper = require(\"../axisPointer/modelHelper\");\n\n/**\n * Base class of AxisView.\n */\nvar AxisView = echarts.extendComponentView({\n type: 'axis',\n\n /**\n * @private\n */\n _axisPointer: null,\n\n /**\n * @protected\n * @type {string}\n */\n axisPointerClass: null,\n\n /**\n * @override\n */\n render: function (axisModel, ecModel, api, payload) {\n // FIXME\n // This process should proformed after coordinate systems updated\n // (axis scale updated), and should be performed each time update.\n // So put it here temporarily, although it is not appropriate to\n // put a model-writing procedure in `view`.\n this.axisPointerClass && axisPointerModelHelper.fixValue(axisModel);\n AxisView.superApply(this, 'render', arguments);\n updateAxisPointer(this, axisModel, ecModel, api, payload, true);\n },\n\n /**\n * Action handler.\n * @public\n * @param {module:echarts/coord/cartesian/AxisModel} axisModel\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n * @param {Object} payload\n */\n updateAxisPointer: function (axisModel, ecModel, api, payload, force) {\n updateAxisPointer(this, axisModel, ecModel, api, payload, false);\n },\n\n /**\n * @override\n */\n remove: function (ecModel, api) {\n var axisPointer = this._axisPointer;\n axisPointer && axisPointer.remove(api);\n AxisView.superApply(this, 'remove', arguments);\n },\n\n /**\n * @override\n */\n dispose: function (ecModel, api) {\n disposeAxisPointer(this, api);\n AxisView.superApply(this, 'dispose', arguments);\n }\n});\n\nfunction updateAxisPointer(axisView, axisModel, ecModel, api, payload, forceRender) {\n var Clazz = AxisView.getAxisPointerClass(axisView.axisPointerClass);\n\n if (!Clazz) {\n return;\n }\n\n var axisPointerModel = axisPointerModelHelper.getAxisPointerModel(axisModel);\n axisPointerModel ? (axisView._axisPointer || (axisView._axisPointer = new Clazz())).render(axisModel, axisPointerModel, api, forceRender) : disposeAxisPointer(axisView, api);\n}\n\nfunction disposeAxisPointer(axisView, ecModel, api) {\n var axisPointer = axisView._axisPointer;\n axisPointer && axisPointer.dispose(ecModel, api);\n axisView._axisPointer = null;\n}\n\nvar axisPointerClazz = [];\n\nAxisView.registerAxisPointerClass = function (type, clazz) {\n axisPointerClazz[type] = clazz;\n};\n\nAxisView.getAxisPointerClass = function (type) {\n return type && axisPointerClazz[type];\n};\n\nvar _default = AxisView;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nfunction _default(option) {\n var timelineOpt = option && option.timeline;\n\n if (!zrUtil.isArray(timelineOpt)) {\n timelineOpt = timelineOpt ? [timelineOpt] : [];\n }\n\n zrUtil.each(timelineOpt, function (opt) {\n if (!opt) {\n return;\n }\n\n compatibleEC2(opt);\n });\n}\n\nfunction compatibleEC2(opt) {\n var type = opt.type;\n var ec2Types = {\n 'number': 'value',\n 'time': 'time'\n }; // Compatible with ec2\n\n if (ec2Types[type]) {\n opt.axisType = ec2Types[type];\n delete opt.type;\n }\n\n transferItem(opt);\n\n if (has(opt, 'controlPosition')) {\n var controlStyle = opt.controlStyle || (opt.controlStyle = {});\n\n if (!has(controlStyle, 'position')) {\n controlStyle.position = opt.controlPosition;\n }\n\n if (controlStyle.position === 'none' && !has(controlStyle, 'show')) {\n controlStyle.show = false;\n delete controlStyle.position;\n }\n\n delete opt.controlPosition;\n }\n\n zrUtil.each(opt.data || [], function (dataItem) {\n if (zrUtil.isObject(dataItem) && !zrUtil.isArray(dataItem)) {\n if (!has(dataItem, 'value') && has(dataItem, 'name')) {\n // In ec2, using name as value.\n dataItem.value = dataItem.name;\n }\n\n transferItem(dataItem);\n }\n });\n}\n\nfunction transferItem(opt) {\n var itemStyle = opt.itemStyle || (opt.itemStyle = {});\n var itemStyleEmphasis = itemStyle.emphasis || (itemStyle.emphasis = {}); // Transfer label out\n\n var label = opt.label || opt.label || {};\n var labelNormal = label.normal || (label.normal = {});\n var excludeLabelAttr = {\n normal: 1,\n emphasis: 1\n };\n zrUtil.each(label, function (value, name) {\n if (!excludeLabelAttr[name] && !has(labelNormal, name)) {\n labelNormal[name] = value;\n }\n });\n\n if (itemStyleEmphasis.label && !has(label, 'emphasis')) {\n label.emphasis = itemStyleEmphasis.label;\n delete itemStyleEmphasis.label;\n }\n}\n\nfunction has(obj, attr) {\n return obj.hasOwnProperty(attr);\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar Axis = require(\"../Axis\");\n\n/**\n * @constructor module:echarts/coord/single/SingleAxis\n * @extends {module:echarts/coord/Axis}\n * @param {string} dim\n * @param {*} scale\n * @param {Array.} coordExtent\n * @param {string} axisType\n * @param {string} position\n */\nvar SingleAxis = function (dim, scale, coordExtent, axisType, position) {\n Axis.call(this, dim, scale, coordExtent);\n /**\n * Axis type\n * - 'category'\n * - 'value'\n * - 'time'\n * - 'log'\n * @type {string}\n */\n\n this.type = axisType || 'value';\n /**\n * Axis position\n * - 'top'\n * - 'bottom'\n * - 'left'\n * - 'right'\n * @type {string}\n */\n\n this.position = position || 'bottom';\n /**\n * Axis orient\n * - 'horizontal'\n * - 'vertical'\n * @type {[type]}\n */\n\n this.orient = null;\n /**\n * @type {number}\n */\n\n this._labelInterval = null;\n};\n\nSingleAxis.prototype = {\n constructor: SingleAxis,\n\n /**\n * Axis model\n * @type {module:echarts/coord/single/AxisModel}\n */\n model: null,\n\n /**\n * Judge the orient of the axis.\n * @return {boolean}\n */\n isHorizontal: function () {\n var position = this.position;\n return position === 'top' || position === 'bottom';\n },\n\n /**\n * @override\n */\n pointToData: function (point, clamp) {\n return this.coordinateSystem.pointToData(point, clamp)[0];\n },\n\n /**\n * Convert the local coord(processed by dataToCoord())\n * to global coord(concrete pixel coord).\n * designated by module:echarts/coord/single/Single.\n * @type {Function}\n */\n toGlobalCoord: null,\n\n /**\n * Convert the global coord to local coord.\n * designated by module:echarts/coord/single/Single.\n * @type {Function}\n */\n toLocalCoord: null\n};\nzrUtil.inherits(SingleAxis, Axis);\nvar _default = SingleAxis;\nmodule.exports = _default;","function _default(ecModel) {\n var legendModels = ecModel.findComponents({\n mainType: 'legend'\n });\n\n if (!legendModels || !legendModels.length) {\n return;\n }\n\n ecModel.eachSeriesByType('graph', function (graphSeries) {\n var categoriesData = graphSeries.getCategoriesData();\n var graph = graphSeries.getGraph();\n var data = graph.data;\n var categoryNames = categoriesData.mapArray(categoriesData.getName);\n data.filterSelf(function (idx) {\n var model = data.getItemModel(idx);\n var category = model.getShallow('category');\n\n if (category != null) {\n if (typeof category === 'number') {\n category = categoryNames[category];\n } // If in any legend component the status is not selected.\n\n\n for (var i = 0; i < legendModels.length; i++) {\n if (!legendModels[i].isSelected(category)) {\n return false;\n }\n }\n }\n\n return true;\n });\n }, this);\n}\n\nmodule.exports = _default;","var echarts = require(\"../echarts\");\n\nrequire(\"./map/MapSeries\");\n\nrequire(\"./map/MapView\");\n\nrequire(\"../action/geoRoam\");\n\nrequire(\"../coord/geo/geoCreator\");\n\nvar mapSymbolLayout = require(\"./map/mapSymbolLayout\");\n\nvar mapVisual = require(\"./map/mapVisual\");\n\nvar mapDataStatistic = require(\"./map/mapDataStatistic\");\n\nvar backwardCompat = require(\"./map/backwardCompat\");\n\nvar createDataSelectAction = require(\"../action/createDataSelectAction\");\n\necharts.registerLayout(mapSymbolLayout);\necharts.registerVisual(mapVisual);\necharts.registerProcessor(echarts.PRIORITY.PROCESSOR.STATISTIC, mapDataStatistic);\necharts.registerPreprocessor(backwardCompat);\ncreateDataSelectAction('map', [{\n type: 'mapToggleSelect',\n event: 'mapselectchanged',\n method: 'toggleSelected'\n}, {\n type: 'mapSelect',\n event: 'mapselected',\n method: 'select'\n}, {\n type: 'mapUnSelect',\n event: 'mapunselected',\n method: 'unSelect'\n}]);","var createListFromArray = require(\"../helper/createListFromArray\");\n\nvar SeriesModel = require(\"../../model/Series\");\n\nvar _default = SeriesModel.extend({\n type: 'series.effectScatter',\n dependencies: ['grid', 'polar'],\n getInitialData: function (option, ecModel) {\n var list = createListFromArray(option.data, this, ecModel);\n return list;\n },\n brushSelector: 'point',\n defaultOption: {\n coordinateSystem: 'cartesian2d',\n zlevel: 0,\n z: 2,\n legendHoverLink: true,\n effectType: 'ripple',\n progressive: 0,\n // When to show the effect, option: 'render'|'emphasis'\n showEffectOn: 'render',\n // Ripple effect config\n rippleEffect: {\n period: 4,\n // Scale of ripple\n scale: 2.5,\n // Brush type can be fill or stroke\n brushType: 'fill'\n },\n // Cartesian coordinate system\n // xAxisIndex: 0,\n // yAxisIndex: 0,\n // Polar coordinate system\n // polarIndex: 0,\n // Geo coordinate system\n // geoIndex: 0,\n // symbol: null, // 图形类型\n symbolSize: 10 // 图形大小,半宽(半径)参数,当图形为方向或菱形则总宽度为symbolSize * 2\n // symbolRotate: null, // 图形旋转控制\n // large: false,\n // Available when large is true\n // largeThreshold: 2000,\n // itemStyle: {\n // normal: {\n // opacity: 1\n // }\n // }\n\n }\n});\n\nmodule.exports = _default;","var _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar _helper = require(\"./helper\");\n\nvar setLabel = _helper.setLabel;\n\nvar Model = require(\"../../model/Model\");\n\nvar barItemStyle = require(\"./barItemStyle\");\n\nvar BAR_BORDER_WIDTH_QUERY = ['itemStyle', 'normal', 'barBorderWidth']; // FIXME\n// Just for compatible with ec2.\n\nzrUtil.extend(Model.prototype, barItemStyle);\n\nvar _default = echarts.extendChartView({\n type: 'bar',\n render: function (seriesModel, ecModel, api) {\n var coordinateSystemType = seriesModel.get('coordinateSystem');\n\n if (coordinateSystemType === 'cartesian2d' || coordinateSystemType === 'polar') {\n this._render(seriesModel, ecModel, api);\n } else {}\n\n return this.group;\n },\n dispose: zrUtil.noop,\n _render: function (seriesModel, ecModel, api) {\n var group = this.group;\n var data = seriesModel.getData();\n var oldData = this._data;\n var coord = seriesModel.coordinateSystem;\n var baseAxis = coord.getBaseAxis();\n var isHorizontalOrRadial;\n\n if (coord.type === 'cartesian2d') {\n isHorizontalOrRadial = baseAxis.isHorizontal();\n } else if (coord.type === 'polar') {\n isHorizontalOrRadial = baseAxis.dim === 'angle';\n }\n\n var animationModel = seriesModel.isAnimationEnabled() ? seriesModel : null;\n data.diff(oldData).add(function (dataIndex) {\n if (!data.hasValue(dataIndex)) {\n return;\n }\n\n var itemModel = data.getItemModel(dataIndex);\n var layout = getLayout[coord.type](data, dataIndex, itemModel);\n var el = elementCreator[coord.type](data, dataIndex, itemModel, layout, isHorizontalOrRadial, animationModel);\n data.setItemGraphicEl(dataIndex, el);\n group.add(el);\n updateStyle(el, data, dataIndex, itemModel, layout, seriesModel, isHorizontalOrRadial, coord.type === 'polar');\n }).update(function (newIndex, oldIndex) {\n var el = oldData.getItemGraphicEl(oldIndex);\n\n if (!data.hasValue(newIndex)) {\n group.remove(el);\n return;\n }\n\n var itemModel = data.getItemModel(newIndex);\n var layout = getLayout[coord.type](data, newIndex, itemModel);\n\n if (el) {\n graphic.updateProps(el, {\n shape: layout\n }, animationModel, newIndex);\n } else {\n el = elementCreator[coord.type](data, newIndex, itemModel, layout, isHorizontalOrRadial, animationModel, true);\n }\n\n data.setItemGraphicEl(newIndex, el); // Add back\n\n group.add(el);\n updateStyle(el, data, newIndex, itemModel, layout, seriesModel, isHorizontalOrRadial, coord.type === 'polar');\n }).remove(function (dataIndex) {\n var el = oldData.getItemGraphicEl(dataIndex);\n\n if (coord.type === 'cartesian2d') {\n el && removeRect(dataIndex, animationModel, el);\n } else {\n el && removeSector(dataIndex, animationModel, el);\n }\n }).execute();\n this._data = data;\n },\n remove: function (ecModel, api) {\n var group = this.group;\n var data = this._data;\n\n if (ecModel.get('animation')) {\n if (data) {\n data.eachItemGraphicEl(function (el) {\n if (el.type === 'sector') {\n removeSector(el.dataIndex, ecModel, el);\n } else {\n removeRect(el.dataIndex, ecModel, el);\n }\n });\n }\n } else {\n group.removeAll();\n }\n }\n});\n\nvar elementCreator = {\n cartesian2d: function (data, dataIndex, itemModel, layout, isHorizontal, animationModel, isUpdate) {\n var rect = new graphic.Rect({\n shape: zrUtil.extend({}, layout)\n }); // Animation\n\n if (animationModel) {\n var rectShape = rect.shape;\n var animateProperty = isHorizontal ? 'height' : 'width';\n var animateTarget = {};\n rectShape[animateProperty] = 0;\n animateTarget[animateProperty] = layout[animateProperty];\n graphic[isUpdate ? 'updateProps' : 'initProps'](rect, {\n shape: animateTarget\n }, animationModel, dataIndex);\n }\n\n return rect;\n },\n polar: function (data, dataIndex, itemModel, layout, isRadial, animationModel, isUpdate) {\n var sector = new graphic.Sector({\n shape: zrUtil.extend({}, layout)\n }); // Animation\n\n if (animationModel) {\n var sectorShape = sector.shape;\n var animateProperty = isRadial ? 'r' : 'endAngle';\n var animateTarget = {};\n sectorShape[animateProperty] = isRadial ? 0 : layout.startAngle;\n animateTarget[animateProperty] = layout[animateProperty];\n graphic[isUpdate ? 'updateProps' : 'initProps'](sector, {\n shape: animateTarget\n }, animationModel, dataIndex);\n }\n\n return sector;\n }\n};\n\nfunction removeRect(dataIndex, animationModel, el) {\n // Not show text when animating\n el.style.text = null;\n graphic.updateProps(el, {\n shape: {\n width: 0\n }\n }, animationModel, dataIndex, function () {\n el.parent && el.parent.remove(el);\n });\n}\n\nfunction removeSector(dataIndex, animationModel, el) {\n // Not show text when animating\n el.style.text = null;\n graphic.updateProps(el, {\n shape: {\n r: el.shape.r0\n }\n }, animationModel, dataIndex, function () {\n el.parent && el.parent.remove(el);\n });\n}\n\nvar getLayout = {\n cartesian2d: function (data, dataIndex, itemModel) {\n var layout = data.getItemLayout(dataIndex);\n var fixedLineWidth = getLineWidth(itemModel, layout); // fix layout with lineWidth\n\n var signX = layout.width > 0 ? 1 : -1;\n var signY = layout.height > 0 ? 1 : -1;\n return {\n x: layout.x + signX * fixedLineWidth / 2,\n y: layout.y + signY * fixedLineWidth / 2,\n width: layout.width - signX * fixedLineWidth,\n height: layout.height - signY * fixedLineWidth\n };\n },\n polar: function (data, dataIndex, itemModel) {\n var layout = data.getItemLayout(dataIndex);\n return {\n cx: layout.cx,\n cy: layout.cy,\n r0: layout.r0,\n r: layout.r,\n startAngle: layout.startAngle,\n endAngle: layout.endAngle\n };\n }\n};\n\nfunction updateStyle(el, data, dataIndex, itemModel, layout, seriesModel, isHorizontal, isPolar) {\n var color = data.getItemVisual(dataIndex, 'color');\n var opacity = data.getItemVisual(dataIndex, 'opacity');\n var itemStyleModel = itemModel.getModel('itemStyle.normal');\n var hoverStyle = itemModel.getModel('itemStyle.emphasis').getBarItemStyle();\n\n if (!isPolar) {\n el.setShape('r', itemStyleModel.get('barBorderRadius') || 0);\n }\n\n el.useStyle(zrUtil.defaults({\n fill: color,\n opacity: opacity\n }, itemStyleModel.getBarItemStyle()));\n var cursorStyle = itemModel.getShallow('cursor');\n cursorStyle && el.attr('cursor', cursorStyle);\n var labelPositionOutside = isHorizontal ? layout.height > 0 ? 'bottom' : 'top' : layout.width > 0 ? 'left' : 'right';\n\n if (!isPolar) {\n setLabel(el.style, hoverStyle, itemModel, color, seriesModel, dataIndex, labelPositionOutside);\n }\n\n graphic.setHoverStyle(el, hoverStyle);\n} // In case width or height are too small.\n\n\nfunction getLineWidth(itemModel, rawLayout) {\n var lineWidth = itemModel.get(BAR_BORDER_WIDTH_QUERY) || 0;\n return Math.min(lineWidth, Math.abs(rawLayout.width), Math.abs(rawLayout.height));\n}\n\nmodule.exports = _default;","var _curve = require(\"../core/curve\");\n\nvar quadraticProjectPoint = _curve.quadraticProjectPoint;\n\n/**\n * 二次贝塞尔曲线描边包含判断\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} lineWidth\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n */\nfunction containStroke(x0, y0, x1, y1, x2, y2, lineWidth, x, y) {\n if (lineWidth === 0) {\n return false;\n }\n\n var _l = lineWidth; // Quick reject\n\n if (y > y0 + _l && y > y1 + _l && y > y2 + _l || y < y0 - _l && y < y1 - _l && y < y2 - _l || x > x0 + _l && x > x1 + _l && x > x2 + _l || x < x0 - _l && x < x1 - _l && x < x2 - _l) {\n return false;\n }\n\n var d = quadraticProjectPoint(x0, y0, x1, y1, x2, y2, x, y, null);\n return d <= _l / 2;\n}\n\nexports.containStroke = containStroke;","var Component = require(\"../../model/Component\");\n\nComponent.registerSubTypeDefaulter('dataZoom', function () {\n // Default 'slider' when no type specified.\n return 'slider';\n});","var _config = require(\"../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar textContain = require(\"zrender/lib/contain/text\");\n\nvar OrdinalScale = require(\"../scale/Ordinal\");\n\nvar IntervalScale = require(\"../scale/Interval\");\n\nvar Scale = require(\"../scale/Scale\");\n\nvar numberUtil = require(\"../util/number\");\n\nrequire(\"../scale/Time\");\n\nrequire(\"../scale/Log\");\n\n/**\n * Get axis scale extent before niced.\n * Item of returned array can only be number (including Infinity and NaN).\n */\nfunction getScaleExtent(scale, model) {\n var scaleType = scale.type;\n var min = model.getMin();\n var max = model.getMax();\n var fixMin = min != null;\n var fixMax = max != null;\n var originalExtent = scale.getExtent();\n var axisDataLen;\n var boundaryGap;\n var span;\n\n if (scaleType === 'ordinal') {\n axisDataLen = (model.get('data') || []).length;\n } else {\n boundaryGap = model.get('boundaryGap');\n\n if (!zrUtil.isArray(boundaryGap)) {\n boundaryGap = [boundaryGap || 0, boundaryGap || 0];\n }\n\n if (typeof boundaryGap[0] === 'boolean') {\n boundaryGap = [0, 0];\n }\n\n boundaryGap[0] = numberUtil.parsePercent(boundaryGap[0], 1);\n boundaryGap[1] = numberUtil.parsePercent(boundaryGap[1], 1);\n span = originalExtent[1] - originalExtent[0] || Math.abs(originalExtent[0]);\n } // Notice: When min/max is not set (that is, when there are null/undefined,\n // which is the most common case), these cases should be ensured:\n // (1) For 'ordinal', show all axis.data.\n // (2) For others:\n // + `boundaryGap` is applied (if min/max set, boundaryGap is\n // disabled).\n // + If `needCrossZero`, min/max should be zero, otherwise, min/max should\n // be the result that originalExtent enlarged by boundaryGap.\n // (3) If no data, it should be ensured that `scale.setBlank` is set.\n // FIXME\n // (1) When min/max is 'dataMin' or 'dataMax', should boundaryGap be able to used?\n // (2) When `needCrossZero` and all data is positive/negative, should it be ensured\n // that the results processed by boundaryGap are positive/negative?\n\n\n if (min == null) {\n min = scaleType === 'ordinal' ? axisDataLen ? 0 : NaN : originalExtent[0] - boundaryGap[0] * span;\n }\n\n if (max == null) {\n max = scaleType === 'ordinal' ? axisDataLen ? axisDataLen - 1 : NaN : originalExtent[1] + boundaryGap[1] * span;\n }\n\n if (min === 'dataMin') {\n min = originalExtent[0];\n } else if (typeof min === 'function') {\n min = min({\n min: originalExtent[0],\n max: originalExtent[1]\n });\n }\n\n if (max === 'dataMax') {\n max = originalExtent[1];\n } else if (typeof max === 'function') {\n max = max({\n min: originalExtent[0],\n max: originalExtent[1]\n });\n }\n\n (min == null || !isFinite(min)) && (min = NaN);\n (max == null || !isFinite(max)) && (max = NaN);\n scale.setBlank(zrUtil.eqNaN(min) || zrUtil.eqNaN(max)); // Evaluate if axis needs cross zero\n\n if (model.getNeedCrossZero()) {\n // Axis is over zero and min is not set\n if (min > 0 && max > 0 && !fixMin) {\n min = 0;\n } // Axis is under zero and max is not set\n\n\n if (min < 0 && max < 0 && !fixMax) {\n max = 0;\n }\n }\n\n return [min, max];\n}\n\nfunction niceScaleExtent(scale, model) {\n var extent = getScaleExtent(scale, model);\n var fixMin = model.getMin() != null;\n var fixMax = model.getMax() != null;\n var splitNumber = model.get('splitNumber');\n\n if (scale.type === 'log') {\n scale.base = model.get('logBase');\n }\n\n var scaleType = scale.type;\n scale.setExtent(extent[0], extent[1]);\n scale.niceExtent({\n splitNumber: splitNumber,\n fixMin: fixMin,\n fixMax: fixMax,\n minInterval: scaleType === 'interval' || scaleType === 'time' ? model.get('minInterval') : null,\n maxInterval: scaleType === 'interval' || scaleType === 'time' ? model.get('maxInterval') : null\n }); // If some one specified the min, max. And the default calculated interval\n // is not good enough. He can specify the interval. It is often appeared\n // in angle axis with angle 0 - 360. Interval calculated in interval scale is hard\n // to be 60.\n // FIXME\n\n var interval = model.get('interval');\n\n if (interval != null) {\n scale.setInterval && scale.setInterval(interval);\n }\n}\n/**\n * @param {module:echarts/model/Model} model\n * @param {string} [axisType] Default retrieve from model.type\n * @return {module:echarts/scale/*}\n */\n\n\nfunction createScaleByModel(model, axisType) {\n axisType = axisType || model.get('type');\n\n if (axisType) {\n switch (axisType) {\n // Buildin scale\n case 'category':\n return new OrdinalScale(model.getCategories(), [Infinity, -Infinity]);\n\n case 'value':\n return new IntervalScale();\n // Extended scale, like time and log\n\n default:\n return (Scale.getClass(axisType) || IntervalScale).create(model);\n }\n }\n}\n/**\n * Check if the axis corss 0\n */\n\n\nfunction ifAxisCrossZero(axis) {\n var dataExtent = axis.scale.getExtent();\n var min = dataExtent[0];\n var max = dataExtent[1];\n return !(min > 0 && max > 0 || min < 0 && max < 0);\n}\n/**\n * @param {Array.} tickCoords In axis self coordinate.\n * @param {Array.} labels\n * @param {string} font\n * @param {number} axisRotate 0: towards right horizontally, clock-wise is negative.\n * @param {number} [labelRotate=0] 0: towards right horizontally, clock-wise is negative.\n * @return {number}\n */\n\n\nfunction getAxisLabelInterval(tickCoords, labels, font, axisRotate, labelRotate) {\n var textSpaceTakenRect;\n var autoLabelInterval = 0;\n var accumulatedLabelInterval = 0;\n var rotation = (axisRotate - labelRotate) / 180 * Math.PI;\n var step = 1;\n\n if (labels.length > 40) {\n // Simple optimization for large amount of labels\n step = Math.floor(labels.length / 40);\n }\n\n for (var i = 0; i < tickCoords.length; i += step) {\n var tickCoord = tickCoords[i]; // Not precise, do not consider align and vertical align\n // and each distance from axis line yet.\n\n var rect = textContain.getBoundingRect(labels[i], font, 'center', 'top');\n rect.x += tickCoord * Math.cos(rotation);\n rect.y += tickCoord * Math.sin(rotation); // Magic number\n\n rect.width *= 1.3;\n rect.height *= 1.3;\n\n if (!textSpaceTakenRect) {\n textSpaceTakenRect = rect.clone();\n } // There is no space for current label;\n else if (textSpaceTakenRect.intersect(rect)) {\n accumulatedLabelInterval++;\n autoLabelInterval = Math.max(autoLabelInterval, accumulatedLabelInterval);\n } else {\n textSpaceTakenRect.union(rect); // Reset\n\n accumulatedLabelInterval = 0;\n }\n }\n\n if (autoLabelInterval === 0 && step > 1) {\n return step;\n }\n\n return (autoLabelInterval + 1) * step - 1;\n}\n/**\n * @param {Object} axis\n * @param {Function} labelFormatter\n * @return {Array.}\n */\n\n\nfunction getFormattedLabels(axis, labelFormatter) {\n var scale = axis.scale;\n var labels = scale.getTicksLabels();\n var ticks = scale.getTicks();\n\n if (typeof labelFormatter === 'string') {\n labelFormatter = function (tpl) {\n return function (val) {\n return tpl.replace('{value}', val != null ? val : '');\n };\n }(labelFormatter); // Consider empty array\n\n\n return zrUtil.map(labels, labelFormatter);\n } else if (typeof labelFormatter === 'function') {\n return zrUtil.map(ticks, function (tick, idx) {\n return labelFormatter(getAxisRawValue(axis, tick), idx);\n }, this);\n } else {\n return labels;\n }\n}\n\nfunction getAxisRawValue(axis, value) {\n // In category axis with data zoom, tick is not the original\n // index of axis.data. So tick should not be exposed to user\n // in category axis.\n return axis.type === 'category' ? axis.scale.getLabel(value) : value;\n}\n\nexports.getScaleExtent = getScaleExtent;\nexports.niceScaleExtent = niceScaleExtent;\nexports.createScaleByModel = createScaleByModel;\nexports.ifAxisCrossZero = ifAxisCrossZero;\nexports.getAxisLabelInterval = getAxisLabelInterval;\nexports.getFormattedLabels = getFormattedLabels;\nexports.getAxisRawValue = getAxisRawValue;","var guid = require(\"./core/guid\");\n\nvar env = require(\"./core/env\");\n\nvar zrUtil = require(\"./core/util\");\n\nvar Handler = require(\"./Handler\");\n\nvar Storage = require(\"./Storage\");\n\nvar Painter = require(\"./Painter\");\n\nvar Animation = require(\"./animation/Animation\");\n\nvar HandlerProxy = require(\"./dom/HandlerProxy\");\n\n/*!\n* ZRender, a high performance 2d drawing library.\n*\n* Copyright (c) 2013, Baidu Inc.\n* All rights reserved.\n*\n* LICENSE\n* https://github.com/ecomfe/zrender/blob/master/LICENSE.txt\n*/\nvar useVML = !env.canvasSupported;\nvar painterCtors = {\n canvas: Painter\n};\nvar instances = {}; // ZRender实例map索引\n\n/**\n * @type {string}\n */\n\nvar version = '3.7.4';\n/**\n * Initializing a zrender instance\n * @param {HTMLElement} dom\n * @param {Object} opts\n * @param {string} [opts.renderer='canvas'] 'canvas' or 'svg'\n * @param {number} [opts.devicePixelRatio]\n * @param {number|string} [opts.width] Can be 'auto' (the same as null/undefined)\n * @param {number|string} [opts.height] Can be 'auto' (the same as null/undefined)\n * @return {module:zrender/ZRender}\n */\n\nfunction init(dom, opts) {\n var zr = new ZRender(guid(), dom, opts);\n instances[zr.id] = zr;\n return zr;\n}\n/**\n * Dispose zrender instance\n * @param {module:zrender/ZRender} zr\n */\n\n\nfunction dispose(zr) {\n if (zr) {\n zr.dispose();\n } else {\n for (var key in instances) {\n if (instances.hasOwnProperty(key)) {\n instances[key].dispose();\n }\n }\n\n instances = {};\n }\n\n return this;\n}\n/**\n * Get zrender instance by id\n * @param {string} id zrender instance id\n * @return {module:zrender/ZRender}\n */\n\n\nfunction getInstance(id) {\n return instances[id];\n}\n\nfunction registerPainter(name, Ctor) {\n painterCtors[name] = Ctor;\n}\n\nfunction delInstance(id) {\n delete instances[id];\n}\n/**\n * @module zrender/ZRender\n */\n\n/**\n * @constructor\n * @alias module:zrender/ZRender\n * @param {string} id\n * @param {HTMLElement} dom\n * @param {Object} opts\n * @param {string} [opts.renderer='canvas'] 'canvas' or 'svg'\n * @param {number} [opts.devicePixelRatio]\n * @param {number} [opts.width] Can be 'auto' (the same as null/undefined)\n * @param {number} [opts.height] Can be 'auto' (the same as null/undefined)\n */\n\n\nvar ZRender = function (id, dom, opts) {\n opts = opts || {};\n /**\n * @type {HTMLDomElement}\n */\n\n this.dom = dom;\n /**\n * @type {string}\n */\n\n this.id = id;\n var self = this;\n var storage = new Storage();\n var rendererType = opts.renderer; // TODO WebGL\n\n if (useVML) {\n if (!painterCtors.vml) {\n throw new Error('You need to require \\'zrender/vml/vml\\' to support IE8');\n }\n\n rendererType = 'vml';\n } else if (!rendererType || !painterCtors[rendererType]) {\n rendererType = 'canvas';\n }\n\n var painter = new painterCtors[rendererType](dom, storage, opts);\n this.storage = storage;\n this.painter = painter;\n var handerProxy = !env.node ? new HandlerProxy(painter.getViewportRoot()) : null;\n this.handler = new Handler(storage, painter, handerProxy, painter.root);\n /**\n * @type {module:zrender/animation/Animation}\n */\n\n this.animation = new Animation({\n stage: {\n update: zrUtil.bind(this.flush, this)\n }\n });\n this.animation.start();\n /**\n * @type {boolean}\n * @private\n */\n\n this._needsRefresh; // 修改 storage.delFromStorage, 每次删除元素之前删除动画\n // FIXME 有点ugly\n\n var oldDelFromStorage = storage.delFromStorage;\n var oldAddToStorage = storage.addToStorage;\n\n storage.delFromStorage = function (el) {\n oldDelFromStorage.call(storage, el);\n el && el.removeSelfFromZr(self);\n };\n\n storage.addToStorage = function (el) {\n oldAddToStorage.call(storage, el);\n el.addSelfToZr(self);\n };\n};\n\nZRender.prototype = {\n constructor: ZRender,\n\n /**\n * 获取实例唯一标识\n * @return {string}\n */\n getId: function () {\n return this.id;\n },\n\n /**\n * 添加元素\n * @param {module:zrender/Element} el\n */\n add: function (el) {\n this.storage.addRoot(el);\n this._needsRefresh = true;\n },\n\n /**\n * 删除元素\n * @param {module:zrender/Element} el\n */\n remove: function (el) {\n this.storage.delRoot(el);\n this._needsRefresh = true;\n },\n\n /**\n * Change configuration of layer\n * @param {string} zLevel\n * @param {Object} config\n * @param {string} [config.clearColor=0] Clear color\n * @param {string} [config.motionBlur=false] If enable motion blur\n * @param {number} [config.lastFrameAlpha=0.7] Motion blur factor. Larger value cause longer trailer\n */\n configLayer: function (zLevel, config) {\n this.painter.configLayer(zLevel, config);\n this._needsRefresh = true;\n },\n\n /**\n * Repaint the canvas immediately\n */\n refreshImmediately: function () {\n // var start = new Date();\n // Clear needsRefresh ahead to avoid something wrong happens in refresh\n // Or it will cause zrender refreshes again and again.\n this._needsRefresh = false;\n this.painter.refresh();\n /**\n * Avoid trigger zr.refresh in Element#beforeUpdate hook\n */\n\n this._needsRefresh = false; // var end = new Date();\n // var log = document.getElementById('log');\n // if (log) {\n // log.innerHTML = log.innerHTML + '
' + (end - start);\n // }\n },\n\n /**\n * Mark and repaint the canvas in the next frame of browser\n */\n refresh: function () {\n this._needsRefresh = true;\n },\n\n /**\n * Perform all refresh\n */\n flush: function () {\n if (this._needsRefresh) {\n this.refreshImmediately();\n }\n\n if (this._needsRefreshHover) {\n this.refreshHoverImmediately();\n }\n },\n\n /**\n * Add element to hover layer\n * @param {module:zrender/Element} el\n * @param {Object} style\n */\n addHover: function (el, style) {\n if (this.painter.addHover) {\n this.painter.addHover(el, style);\n this.refreshHover();\n }\n },\n\n /**\n * Add element from hover layer\n * @param {module:zrender/Element} el\n */\n removeHover: function (el) {\n if (this.painter.removeHover) {\n this.painter.removeHover(el);\n this.refreshHover();\n }\n },\n\n /**\n * Clear all hover elements in hover layer\n * @param {module:zrender/Element} el\n */\n clearHover: function () {\n if (this.painter.clearHover) {\n this.painter.clearHover();\n this.refreshHover();\n }\n },\n\n /**\n * Refresh hover in next frame\n */\n refreshHover: function () {\n this._needsRefreshHover = true;\n },\n\n /**\n * Refresh hover immediately\n */\n refreshHoverImmediately: function () {\n this._needsRefreshHover = false;\n this.painter.refreshHover && this.painter.refreshHover();\n },\n\n /**\n * Resize the canvas.\n * Should be invoked when container size is changed\n * @param {Object} [opts]\n * @param {number|string} [opts.width] Can be 'auto' (the same as null/undefined)\n * @param {number|string} [opts.height] Can be 'auto' (the same as null/undefined)\n */\n resize: function (opts) {\n opts = opts || {};\n this.painter.resize(opts.width, opts.height);\n this.handler.resize();\n },\n\n /**\n * Stop and clear all animation immediately\n */\n clearAnimation: function () {\n this.animation.clear();\n },\n\n /**\n * Get container width\n */\n getWidth: function () {\n return this.painter.getWidth();\n },\n\n /**\n * Get container height\n */\n getHeight: function () {\n return this.painter.getHeight();\n },\n\n /**\n * Export the canvas as Base64 URL\n * @param {string} type\n * @param {string} [backgroundColor='#fff']\n * @return {string} Base64 URL\n */\n // toDataURL: function(type, backgroundColor) {\n // return this.painter.getRenderedCanvas({\n // backgroundColor: backgroundColor\n // }).toDataURL(type);\n // },\n\n /**\n * Converting a path to image.\n * It has much better performance of drawing image rather than drawing a vector path.\n * @param {module:zrender/graphic/Path} e\n * @param {number} width\n * @param {number} height\n */\n pathToImage: function (e, dpr) {\n return this.painter.pathToImage(e, dpr);\n },\n\n /**\n * Set default cursor\n * @param {string} [cursorStyle='default'] 例如 crosshair\n */\n setCursorStyle: function (cursorStyle) {\n this.handler.setCursorStyle(cursorStyle);\n },\n\n /**\n * Find hovered element\n * @param {number} x\n * @param {number} y\n * @return {Object} {target, topTarget}\n */\n findHover: function (x, y) {\n return this.handler.findHover(x, y);\n },\n\n /**\n * Bind event\n *\n * @param {string} eventName Event name\n * @param {Function} eventHandler Handler function\n * @param {Object} [context] Context object\n */\n on: function (eventName, eventHandler, context) {\n this.handler.on(eventName, eventHandler, context);\n },\n\n /**\n * Unbind event\n * @param {string} eventName Event name\n * @param {Function} [eventHandler] Handler function\n */\n off: function (eventName, eventHandler) {\n this.handler.off(eventName, eventHandler);\n },\n\n /**\n * Trigger event manually\n *\n * @param {string} eventName Event name\n * @param {event=} event Event object\n */\n trigger: function (eventName, event) {\n this.handler.trigger(eventName, event);\n },\n\n /**\n * Clear all objects and the canvas.\n */\n clear: function () {\n this.storage.delRoot();\n this.painter.clear();\n },\n\n /**\n * Dispose self.\n */\n dispose: function () {\n this.animation.stop();\n this.clear();\n this.storage.dispose();\n this.painter.dispose();\n this.handler.dispose();\n this.animation = this.storage = this.painter = this.handler = null;\n delInstance(this.id);\n }\n};\nexports.version = version;\nexports.init = init;\nexports.dispose = dispose;\nexports.getInstance = getInstance;\nexports.registerPainter = registerPainter;","var Polyline = require(\"./Polyline\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar EffectLine = require(\"./EffectLine\");\n\nvar vec2 = require(\"zrender/lib/core/vector\");\n\n/**\n * Provide effect for line\n * @module echarts/chart/helper/EffectLine\n */\n\n/**\n * @constructor\n * @extends {module:echarts/chart/helper/EffectLine}\n * @alias {module:echarts/chart/helper/Polyline}\n */\nfunction EffectPolyline(lineData, idx, seriesScope) {\n EffectLine.call(this, lineData, idx, seriesScope);\n this._lastFrame = 0;\n this._lastFramePercent = 0;\n}\n\nvar effectPolylineProto = EffectPolyline.prototype; // Overwrite\n\neffectPolylineProto.createLine = function (lineData, idx, seriesScope) {\n return new Polyline(lineData, idx, seriesScope);\n}; // Overwrite\n\n\neffectPolylineProto.updateAnimationPoints = function (symbol, points) {\n this._points = points;\n var accLenArr = [0];\n var len = 0;\n\n for (var i = 1; i < points.length; i++) {\n var p1 = points[i - 1];\n var p2 = points[i];\n len += vec2.dist(p1, p2);\n accLenArr.push(len);\n }\n\n if (len === 0) {\n return;\n }\n\n for (var i = 0; i < accLenArr.length; i++) {\n accLenArr[i] /= len;\n }\n\n this._offsets = accLenArr;\n this._length = len;\n}; // Overwrite\n\n\neffectPolylineProto.getLineLength = function (symbol) {\n return this._length;\n}; // Overwrite\n\n\neffectPolylineProto.updateSymbolPosition = function (symbol) {\n var t = symbol.__t;\n var points = this._points;\n var offsets = this._offsets;\n var len = points.length;\n\n if (!offsets) {\n // Has length 0\n return;\n }\n\n var lastFrame = this._lastFrame;\n var frame;\n\n if (t < this._lastFramePercent) {\n // Start from the next frame\n // PENDING start from lastFrame ?\n var start = Math.min(lastFrame + 1, len - 1);\n\n for (frame = start; frame >= 0; frame--) {\n if (offsets[frame] <= t) {\n break;\n }\n } // PENDING really need to do this ?\n\n\n frame = Math.min(frame, len - 2);\n } else {\n for (var frame = lastFrame; frame < len; frame++) {\n if (offsets[frame] > t) {\n break;\n }\n }\n\n frame = Math.min(frame - 1, len - 2);\n }\n\n vec2.lerp(symbol.position, points[frame], points[frame + 1], (t - offsets[frame]) / (offsets[frame + 1] - offsets[frame]));\n var tx = points[frame + 1][0] - points[frame][0];\n var ty = points[frame + 1][1] - points[frame][1];\n symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2;\n this._lastFrame = frame;\n this._lastFramePercent = t;\n symbol.ignore = false;\n};\n\nzrUtil.inherits(EffectPolyline, EffectLine);\nvar _default = EffectPolyline;\nmodule.exports = _default;","var formatUtil = require(\"../../util/format\");\n\nvar BaseAxisPointer = require(\"./BaseAxisPointer\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar viewHelper = require(\"./viewHelper\");\n\nvar matrix = require(\"zrender/lib/core/matrix\");\n\nvar AxisBuilder = require(\"../axis/AxisBuilder\");\n\nvar AxisView = require(\"../axis/AxisView\");\n\nvar PolarAxisPointer = BaseAxisPointer.extend({\n /**\n * @override\n */\n makeElOption: function (elOption, value, axisModel, axisPointerModel, api) {\n var axis = axisModel.axis;\n\n if (axis.dim === 'angle') {\n this.animationThreshold = Math.PI / 18;\n }\n\n var polar = axis.polar;\n var otherAxis = polar.getOtherAxis(axis);\n var otherExtent = otherAxis.getExtent();\n var coordValue;\n coordValue = axis['dataTo' + formatUtil.capitalFirst(axis.dim)](value);\n var axisPointerType = axisPointerModel.get('type');\n\n if (axisPointerType && axisPointerType !== 'none') {\n var elStyle = viewHelper.buildElStyle(axisPointerModel);\n var pointerOption = pointerShapeBuilder[axisPointerType](axis, polar, coordValue, otherExtent, elStyle);\n pointerOption.style = elStyle;\n elOption.graphicKey = pointerOption.type;\n elOption.pointer = pointerOption;\n }\n\n var labelMargin = axisPointerModel.get('label.margin');\n var labelPos = getLabelPosition(value, axisModel, axisPointerModel, polar, labelMargin);\n viewHelper.buildLabelElOption(elOption, axisModel, axisPointerModel, api, labelPos);\n } // Do not support handle, utill any user requires it.\n\n});\n\nfunction getLabelPosition(value, axisModel, axisPointerModel, polar, labelMargin) {\n var axis = axisModel.axis;\n var coord = axis.dataToCoord(value);\n var axisAngle = polar.getAngleAxis().getExtent()[0];\n axisAngle = axisAngle / 180 * Math.PI;\n var radiusExtent = polar.getRadiusAxis().getExtent();\n var position;\n var align;\n var verticalAlign;\n\n if (axis.dim === 'radius') {\n var transform = matrix.create();\n matrix.rotate(transform, transform, axisAngle);\n matrix.translate(transform, transform, [polar.cx, polar.cy]);\n position = graphic.applyTransform([coord, -labelMargin], transform);\n var labelRotation = axisModel.getModel('axisLabel').get('rotate') || 0;\n var labelLayout = AxisBuilder.innerTextLayout(axisAngle, labelRotation * Math.PI / 180, -1);\n align = labelLayout.textAlign;\n verticalAlign = labelLayout.textVerticalAlign;\n } else {\n // angle axis\n var r = radiusExtent[1];\n position = polar.coordToPoint([r + labelMargin, coord]);\n var cx = polar.cx;\n var cy = polar.cy;\n align = Math.abs(position[0] - cx) / r < 0.3 ? 'center' : position[0] > cx ? 'left' : 'right';\n verticalAlign = Math.abs(position[1] - cy) / r < 0.3 ? 'middle' : position[1] > cy ? 'top' : 'bottom';\n }\n\n return {\n position: position,\n align: align,\n verticalAlign: verticalAlign\n };\n}\n\nvar pointerShapeBuilder = {\n line: function (axis, polar, coordValue, otherExtent, elStyle) {\n return axis.dim === 'angle' ? {\n type: 'Line',\n shape: viewHelper.makeLineShape(polar.coordToPoint([otherExtent[0], coordValue]), polar.coordToPoint([otherExtent[1], coordValue]))\n } : {\n type: 'Circle',\n shape: {\n cx: polar.cx,\n cy: polar.cy,\n r: coordValue\n }\n };\n },\n shadow: function (axis, polar, coordValue, otherExtent, elStyle) {\n var bandWidth = axis.getBandWidth();\n var radian = Math.PI / 180;\n return axis.dim === 'angle' ? {\n type: 'Sector',\n shape: viewHelper.makeSectorShape(polar.cx, polar.cy, otherExtent[0], otherExtent[1], // In ECharts y is negative if angle is positive\n (-coordValue - bandWidth / 2) * radian, (-coordValue + bandWidth / 2) * radian)\n } : {\n type: 'Sector',\n shape: viewHelper.makeSectorShape(polar.cx, polar.cy, coordValue - bandWidth / 2, coordValue + bandWidth / 2, 0, Math.PI * 2)\n };\n }\n};\nAxisView.registerAxisPointerClass('PolarAxisPointer', PolarAxisPointer);\nvar _default = PolarAxisPointer;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar geoCoordMap = {\n 'Russia': [100, 60],\n 'United States': [-99, 38],\n 'United States of America': [-99, 38]\n};\n\nfunction _default(geo) {\n zrUtil.each(geo.regions, function (region) {\n var geoCoord = geoCoordMap[region.name];\n\n if (geoCoord) {\n var cp = region.center;\n cp[0] = geoCoord[0];\n cp[1] = geoCoord[1];\n }\n });\n}\n\nmodule.exports = _default;","var _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar AxisBuilder = require(\"../axis/AxisBuilder\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar axisBuilderAttrs = ['axisLine', 'axisTickLabel', 'axisName'];\n\nvar _default = echarts.extendComponentView({\n type: 'radar',\n render: function (radarModel, ecModel, api) {\n var group = this.group;\n group.removeAll();\n\n this._buildAxes(radarModel);\n\n this._buildSplitLineAndArea(radarModel);\n },\n _buildAxes: function (radarModel) {\n var radar = radarModel.coordinateSystem;\n var indicatorAxes = radar.getIndicatorAxes();\n var axisBuilders = zrUtil.map(indicatorAxes, function (indicatorAxis) {\n var axisBuilder = new AxisBuilder(indicatorAxis.model, {\n position: [radar.cx, radar.cy],\n rotation: indicatorAxis.angle,\n labelDirection: -1,\n tickDirection: -1,\n nameDirection: 1\n });\n return axisBuilder;\n });\n zrUtil.each(axisBuilders, function (axisBuilder) {\n zrUtil.each(axisBuilderAttrs, axisBuilder.add, axisBuilder);\n this.group.add(axisBuilder.getGroup());\n }, this);\n },\n _buildSplitLineAndArea: function (radarModel) {\n var radar = radarModel.coordinateSystem;\n var indicatorAxes = radar.getIndicatorAxes();\n\n if (!indicatorAxes.length) {\n return;\n }\n\n var shape = radarModel.get('shape');\n var splitLineModel = radarModel.getModel('splitLine');\n var splitAreaModel = radarModel.getModel('splitArea');\n var lineStyleModel = splitLineModel.getModel('lineStyle');\n var areaStyleModel = splitAreaModel.getModel('areaStyle');\n var showSplitLine = splitLineModel.get('show');\n var showSplitArea = splitAreaModel.get('show');\n var splitLineColors = lineStyleModel.get('color');\n var splitAreaColors = areaStyleModel.get('color');\n splitLineColors = zrUtil.isArray(splitLineColors) ? splitLineColors : [splitLineColors];\n splitAreaColors = zrUtil.isArray(splitAreaColors) ? splitAreaColors : [splitAreaColors];\n var splitLines = [];\n var splitAreas = [];\n\n function getColorIndex(areaOrLine, areaOrLineColorList, idx) {\n var colorIndex = idx % areaOrLineColorList.length;\n areaOrLine[colorIndex] = areaOrLine[colorIndex] || [];\n return colorIndex;\n }\n\n if (shape === 'circle') {\n var ticksRadius = indicatorAxes[0].getTicksCoords();\n var cx = radar.cx;\n var cy = radar.cy;\n\n for (var i = 0; i < ticksRadius.length; i++) {\n if (showSplitLine) {\n var colorIndex = getColorIndex(splitLines, splitLineColors, i);\n splitLines[colorIndex].push(new graphic.Circle({\n shape: {\n cx: cx,\n cy: cy,\n r: ticksRadius[i]\n }\n }));\n }\n\n if (showSplitArea && i < ticksRadius.length - 1) {\n var colorIndex = getColorIndex(splitAreas, splitAreaColors, i);\n splitAreas[colorIndex].push(new graphic.Ring({\n shape: {\n cx: cx,\n cy: cy,\n r0: ticksRadius[i],\n r: ticksRadius[i + 1]\n }\n }));\n }\n }\n } // Polyyon\n else {\n var realSplitNumber;\n var axesTicksPoints = zrUtil.map(indicatorAxes, function (indicatorAxis, idx) {\n var ticksCoords = indicatorAxis.getTicksCoords();\n realSplitNumber = realSplitNumber == null ? ticksCoords.length - 1 : Math.min(ticksCoords.length - 1, realSplitNumber);\n return zrUtil.map(ticksCoords, function (tickCoord) {\n return radar.coordToPoint(tickCoord, idx);\n });\n });\n var prevPoints = [];\n\n for (var i = 0; i <= realSplitNumber; i++) {\n var points = [];\n\n for (var j = 0; j < indicatorAxes.length; j++) {\n points.push(axesTicksPoints[j][i]);\n } // Close\n\n\n if (points[0]) {\n points.push(points[0].slice());\n } else {}\n\n if (showSplitLine) {\n var colorIndex = getColorIndex(splitLines, splitLineColors, i);\n splitLines[colorIndex].push(new graphic.Polyline({\n shape: {\n points: points\n }\n }));\n }\n\n if (showSplitArea && prevPoints) {\n var colorIndex = getColorIndex(splitAreas, splitAreaColors, i - 1);\n splitAreas[colorIndex].push(new graphic.Polygon({\n shape: {\n points: points.concat(prevPoints)\n }\n }));\n }\n\n prevPoints = points.slice().reverse();\n }\n }\n\n var lineStyle = lineStyleModel.getLineStyle();\n var areaStyle = areaStyleModel.getAreaStyle(); // Add splitArea before splitLine\n\n zrUtil.each(splitAreas, function (splitAreas, idx) {\n this.group.add(graphic.mergePath(splitAreas, {\n style: zrUtil.defaults({\n stroke: 'none',\n fill: splitAreaColors[idx % splitAreaColors.length]\n }, areaStyle),\n silent: true\n }));\n }, this);\n zrUtil.each(splitLines, function (splitLines, idx) {\n this.group.add(graphic.mergePath(splitLines, {\n style: zrUtil.defaults({\n fill: 'none',\n stroke: splitLineColors[idx % splitLineColors.length]\n }, lineStyle),\n silent: true\n }));\n }, this);\n }\n});\n\nmodule.exports = _default;","var echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nrequire(\"../component/singleAxis\");\n\nrequire(\"./themeRiver/ThemeRiverSeries\");\n\nrequire(\"./themeRiver/ThemeRiverView\");\n\nvar themeRiverLayout = require(\"./themeRiver/themeRiverLayout\");\n\nvar themeRiverVisual = require(\"./themeRiver/themeRiverVisual\");\n\nvar dataFilter = require(\"../processor/dataFilter\");\n\necharts.registerLayout(themeRiverLayout);\necharts.registerVisual(themeRiverVisual);\necharts.registerProcessor(zrUtil.curry(dataFilter, 'themeRiver'));","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar Model = require(\"./Model\");\n\nvar componentUtil = require(\"../util/component\");\n\nvar clazzUtil = require(\"../util/clazz\");\n\nvar layout = require(\"../util/layout\");\n\nvar boxLayoutMixin = require(\"./mixin/boxLayout\");\n\n/**\n * Component model\n *\n * @module echarts/model/Component\n */\nvar arrayPush = Array.prototype.push;\n/**\n * @alias module:echarts/model/Component\n * @constructor\n * @param {Object} option\n * @param {module:echarts/model/Model} parentModel\n * @param {module:echarts/model/Model} ecModel\n */\n\nvar ComponentModel = Model.extend({\n type: 'component',\n\n /**\n * @readOnly\n * @type {string}\n */\n id: '',\n\n /**\n * @readOnly\n */\n name: '',\n\n /**\n * @readOnly\n * @type {string}\n */\n mainType: '',\n\n /**\n * @readOnly\n * @type {string}\n */\n subType: '',\n\n /**\n * @readOnly\n * @type {number}\n */\n componentIndex: 0,\n\n /**\n * @type {Object}\n * @protected\n */\n defaultOption: null,\n\n /**\n * @type {module:echarts/model/Global}\n * @readOnly\n */\n ecModel: null,\n\n /**\n * key: componentType\n * value: Component model list, can not be null.\n * @type {Object.>}\n * @readOnly\n */\n dependentModels: [],\n\n /**\n * @type {string}\n * @readOnly\n */\n uid: null,\n\n /**\n * Support merge layout params.\n * Only support 'box' now (left/right/top/bottom/width/height).\n * @type {string|Object} Object can be {ignoreSize: true}\n * @readOnly\n */\n layoutMode: null,\n $constructor: function (option, parentModel, ecModel, extraOpt) {\n Model.call(this, option, parentModel, ecModel, extraOpt);\n this.uid = componentUtil.getUID('componentModel');\n },\n init: function (option, parentModel, ecModel, extraOpt) {\n this.mergeDefaultAndTheme(option, ecModel);\n },\n mergeDefaultAndTheme: function (option, ecModel) {\n var layoutMode = this.layoutMode;\n var inputPositionParams = layoutMode ? layout.getLayoutParams(option) : {};\n var themeModel = ecModel.getTheme();\n zrUtil.merge(option, themeModel.get(this.mainType));\n zrUtil.merge(option, this.getDefaultOption());\n\n if (layoutMode) {\n layout.mergeLayoutParam(option, inputPositionParams, layoutMode);\n }\n },\n mergeOption: function (option, extraOpt) {\n zrUtil.merge(this.option, option, true);\n var layoutMode = this.layoutMode;\n\n if (layoutMode) {\n layout.mergeLayoutParam(this.option, option, layoutMode);\n }\n },\n // Hooker after init or mergeOption\n optionUpdated: function (newCptOption, isInit) {},\n getDefaultOption: function () {\n if (!clazzUtil.hasOwn(this, '__defaultOption')) {\n var optList = [];\n var Class = this.constructor;\n\n while (Class) {\n var opt = Class.prototype.defaultOption;\n opt && optList.push(opt);\n Class = Class.superClass;\n }\n\n var defaultOption = {};\n\n for (var i = optList.length - 1; i >= 0; i--) {\n defaultOption = zrUtil.merge(defaultOption, optList[i], true);\n }\n\n clazzUtil.set(this, '__defaultOption', defaultOption);\n }\n\n return clazzUtil.get(this, '__defaultOption');\n },\n getReferringComponents: function (mainType) {\n return this.ecModel.queryComponents({\n mainType: mainType,\n index: this.get(mainType + 'Index', true),\n id: this.get(mainType + 'Id', true)\n });\n }\n}); // Reset ComponentModel.extend, add preConstruct.\n// clazzUtil.enableClassExtend(\n// ComponentModel,\n// function (option, parentModel, ecModel, extraOpt) {\n// // Set dependentModels, componentIndex, name, id, mainType, subType.\n// zrUtil.extend(this, extraOpt);\n// this.uid = componentUtil.getUID('componentModel');\n// // this.setReadOnly([\n// // 'type', 'id', 'uid', 'name', 'mainType', 'subType',\n// // 'dependentModels', 'componentIndex'\n// // ]);\n// }\n// );\n// Add capability of registerClass, getClass, hasClass, registerSubTypeDefaulter and so on.\n\nclazzUtil.enableClassManagement(ComponentModel, {\n registerWhenExtend: true\n});\ncomponentUtil.enableSubTypeDefaulter(ComponentModel); // Add capability of ComponentModel.topologicalTravel.\n\ncomponentUtil.enableTopologicalTravel(ComponentModel, getDependencies);\n\nfunction getDependencies(componentType) {\n var deps = [];\n zrUtil.each(ComponentModel.getClassesByMainType(componentType), function (Clazz) {\n arrayPush.apply(deps, Clazz.prototype.dependencies || []);\n }); // Ensure main type\n\n return zrUtil.map(deps, function (type) {\n return clazzUtil.parseClassType(type).main;\n });\n}\n\nzrUtil.mixin(ComponentModel, boxLayoutMixin);\nvar _default = ComponentModel;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar vector = require(\"zrender/lib/core/vector\");\n\nvar matrix = require(\"zrender/lib/core/matrix\");\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nvar Transformable = require(\"zrender/lib/mixin/Transformable\");\n\n/**\n * Simple view coordinate system\n * Mapping given x, y to transformd view x, y\n */\nvar v2ApplyTransform = vector.applyTransform; // Dummy transform node\n\nfunction TransformDummy() {\n Transformable.call(this);\n}\n\nzrUtil.mixin(TransformDummy, Transformable);\n\nfunction View(name) {\n /**\n * @type {string}\n */\n this.name = name;\n /**\n * @type {Object}\n */\n\n this.zoomLimit;\n Transformable.call(this);\n this._roamTransform = new TransformDummy();\n this._viewTransform = new TransformDummy();\n this._center;\n this._zoom;\n}\n\nView.prototype = {\n constructor: View,\n type: 'view',\n\n /**\n * @param {Array.}\n * @readOnly\n */\n dimensions: ['x', 'y'],\n\n /**\n * Set bounding rect\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n */\n // PENDING to getRect\n setBoundingRect: function (x, y, width, height) {\n this._rect = new BoundingRect(x, y, width, height);\n return this._rect;\n },\n\n /**\n * @return {module:zrender/core/BoundingRect}\n */\n // PENDING to getRect\n getBoundingRect: function () {\n return this._rect;\n },\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n */\n setViewRect: function (x, y, width, height) {\n this.transformTo(x, y, width, height);\n this._viewRect = new BoundingRect(x, y, width, height);\n },\n\n /**\n * Transformed to particular position and size\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n */\n transformTo: function (x, y, width, height) {\n var rect = this.getBoundingRect();\n var viewTransform = this._viewTransform;\n viewTransform.transform = rect.calculateTransform(new BoundingRect(x, y, width, height));\n viewTransform.decomposeTransform();\n\n this._updateTransform();\n },\n\n /**\n * Set center of view\n * @param {Array.} [centerCoord]\n */\n setCenter: function (centerCoord) {\n if (!centerCoord) {\n return;\n }\n\n this._center = centerCoord;\n\n this._updateCenterAndZoom();\n },\n\n /**\n * @param {number} zoom\n */\n setZoom: function (zoom) {\n zoom = zoom || 1;\n var zoomLimit = this.zoomLimit;\n\n if (zoomLimit) {\n if (zoomLimit.max != null) {\n zoom = Math.min(zoomLimit.max, zoom);\n }\n\n if (zoomLimit.min != null) {\n zoom = Math.max(zoomLimit.min, zoom);\n }\n }\n\n this._zoom = zoom;\n\n this._updateCenterAndZoom();\n },\n\n /**\n * Get default center without roam\n */\n getDefaultCenter: function () {\n // Rect before any transform\n var rawRect = this.getBoundingRect();\n var cx = rawRect.x + rawRect.width / 2;\n var cy = rawRect.y + rawRect.height / 2;\n return [cx, cy];\n },\n getCenter: function () {\n return this._center || this.getDefaultCenter();\n },\n getZoom: function () {\n return this._zoom || 1;\n },\n\n /**\n * @return {Array.} data\n * @return {Array.}\n */\n dataToPoint: function (data) {\n var transform = this.transform;\n return transform ? v2ApplyTransform([], data, transform) : [data[0], data[1]];\n },\n\n /**\n * Convert a (x, y) point to (lon, lat) data\n * @param {Array.} point\n * @return {Array.}\n */\n pointToData: function (point) {\n var invTransform = this.invTransform;\n return invTransform ? v2ApplyTransform([], point, invTransform) : [point[0], point[1]];\n },\n\n /**\n * @implements\n * see {module:echarts/CoodinateSystem}\n */\n convertToPixel: zrUtil.curry(doConvert, 'dataToPoint'),\n\n /**\n * @implements\n * see {module:echarts/CoodinateSystem}\n */\n convertFromPixel: zrUtil.curry(doConvert, 'pointToData'),\n\n /**\n * @implements\n * see {module:echarts/CoodinateSystem}\n */\n containPoint: function (point) {\n return this.getViewRectAfterRoam().contain(point[0], point[1]);\n }\n /**\n * @return {number}\n */\n // getScalarScale: function () {\n // // Use determinant square root of transform to mutiply scalar\n // var m = this.transform;\n // var det = Math.sqrt(Math.abs(m[0] * m[3] - m[2] * m[1]));\n // return det;\n // }\n\n};\nzrUtil.mixin(View, Transformable);\n\nfunction doConvert(methodName, ecModel, finder, value) {\n var seriesModel = finder.seriesModel;\n var coordSys = seriesModel ? seriesModel.coordinateSystem : null; // e.g., graph.\n\n return coordSys === this ? coordSys[methodName](value) : null;\n}\n\nvar _default = View;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar SymbolClz = require(\"../helper/Symbol\");\n\nvar _layoutHelper = require(\"./layoutHelper\");\n\nvar radialCoordinate = _layoutHelper.radialCoordinate;\n\nvar echarts = require(\"../../echarts\");\n\n/**\n * @file This file used to draw tree view\n */\nvar _default = echarts.extendChartView({\n type: 'tree',\n\n /**\n * Init the chart\n * @override\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n */\n init: function (ecModel, api) {\n /**\n * @private\n * @type {module:echarts/data/Tree}\n */\n this._oldTree;\n /**\n * @private\n * @type {module:zrender/container/Group}\n */\n\n this._mainGroup = new graphic.Group();\n this.group.add(this._mainGroup);\n },\n render: function (seriesModel, ecModel, api, payload) {\n var data = seriesModel.getData();\n var layoutInfo = seriesModel.layoutInfo;\n var group = this._mainGroup;\n var layout = seriesModel.get('layout');\n\n if (layout === 'radial') {\n group.attr('position', [layoutInfo.x + layoutInfo.width / 2, layoutInfo.y + layoutInfo.height / 2]);\n } else {\n group.attr('position', [layoutInfo.x, layoutInfo.y]);\n }\n\n var oldData = this._data;\n var seriesScope = {\n expandAndCollapse: seriesModel.get('expandAndCollapse'),\n layout: layout,\n orient: seriesModel.get('orient'),\n curvature: seriesModel.get('lineStyle.normal.curveness'),\n symbolRotate: seriesModel.get('symbolRotate'),\n symbolOffset: seriesModel.get('symbolOffset'),\n hoverAnimation: seriesModel.get('hoverAnimation'),\n useNameLabel: true,\n fadeIn: true\n };\n data.diff(oldData).add(function (newIdx) {\n if (symbolNeedsDraw(data, newIdx)) {\n // create node and edge\n updateNode(data, newIdx, null, group, seriesModel, seriesScope);\n }\n }).update(function (newIdx, oldIdx) {\n var symbolEl = oldData.getItemGraphicEl(oldIdx);\n\n if (!symbolNeedsDraw(data, newIdx)) {\n symbolEl && removeNode(data, newIdx, symbolEl, group, seriesModel, seriesScope);\n return;\n } // update node and edge\n\n\n updateNode(data, newIdx, symbolEl, group, seriesModel, seriesScope);\n }).remove(function (oldIdx) {\n var symbolEl = oldData.getItemGraphicEl(oldIdx);\n removeNode(data, oldIdx, symbolEl, group, seriesModel, seriesScope);\n }).execute();\n\n if (seriesScope.expandAndCollapse === true) {\n data.eachItemGraphicEl(function (el, dataIndex) {\n el.off('click').on('click', function () {\n api.dispatchAction({\n type: 'treeExpandAndCollapse',\n seriesId: seriesModel.id,\n dataIndex: dataIndex\n });\n });\n });\n }\n\n this._data = data;\n },\n dispose: function () {},\n remove: function () {\n this._mainGroup.removeAll();\n\n this._data = null;\n }\n});\n\nfunction symbolNeedsDraw(data, dataIndex) {\n var layout = data.getItemLayout(dataIndex);\n return layout && !isNaN(layout.x) && !isNaN(layout.y) && data.getItemVisual(dataIndex, 'symbol') !== 'none';\n}\n\nfunction getTreeNodeStyle(node, itemModel, seriesScope) {\n seriesScope.itemModel = itemModel;\n seriesScope.itemStyle = itemModel.getModel('itemStyle.normal').getItemStyle();\n seriesScope.hoverItemStyle = itemModel.getModel('itemStyle.emphasis').getItemStyle();\n seriesScope.lineStyle = itemModel.getModel('lineStyle.normal').getLineStyle();\n seriesScope.labelModel = itemModel.getModel('label.normal');\n seriesScope.hoverLabelModel = itemModel.getModel('label.emphasis');\n\n if (node.isExpand === false && node.children.length !== 0) {\n seriesScope.symbolInnerColor = seriesScope.itemStyle.fill;\n } else {\n seriesScope.symbolInnerColor = '#fff';\n }\n\n return seriesScope;\n}\n\nfunction updateNode(data, dataIndex, symbolEl, group, seriesModel, seriesScope) {\n var isInit = !symbolEl;\n var node = data.tree.getNodeByDataIndex(dataIndex);\n var itemModel = node.getModel();\n var seriesScope = getTreeNodeStyle(node, itemModel, seriesScope);\n var virtualRoot = data.tree.root;\n var source = node.parentNode === virtualRoot ? node : node.parentNode || node;\n var sourceSymbolEl = data.getItemGraphicEl(source.dataIndex);\n var sourceLayout = source.getLayout();\n var sourceOldLayout = sourceSymbolEl ? {\n x: sourceSymbolEl.position[0],\n y: sourceSymbolEl.position[1],\n rawX: sourceSymbolEl.__radialOldRawX,\n rawY: sourceSymbolEl.__radialOldRawY\n } : sourceLayout;\n var targetLayout = node.getLayout();\n\n if (isInit) {\n symbolEl = new SymbolClz(data, dataIndex, seriesScope);\n symbolEl.attr('position', [sourceOldLayout.x, sourceOldLayout.y]);\n } else {\n symbolEl.updateData(data, dataIndex, seriesScope);\n }\n\n symbolEl.__radialOldRawX = symbolEl.__radialRawX;\n symbolEl.__radialOldRawY = symbolEl.__radialRawY;\n symbolEl.__radialRawX = targetLayout.rawX;\n symbolEl.__radialRawY = targetLayout.rawY;\n group.add(symbolEl);\n data.setItemGraphicEl(dataIndex, symbolEl);\n graphic.updateProps(symbolEl, {\n position: [targetLayout.x, targetLayout.y]\n }, seriesModel);\n var symbolPath = symbolEl.getSymbolPath();\n\n if (seriesScope.layout === 'radial') {\n var realRoot = virtualRoot.children[0];\n var rootLayout = realRoot.getLayout();\n var length = realRoot.children.length;\n var rad;\n var isLeft;\n\n if (targetLayout.x === rootLayout.x && node.isExpand === true) {\n var center = {};\n center.x = (realRoot.children[0].getLayout().x + realRoot.children[length - 1].getLayout().x) / 2;\n center.y = (realRoot.children[0].getLayout().y + realRoot.children[length - 1].getLayout().y) / 2;\n rad = Math.atan2(center.y - rootLayout.y, center.x - rootLayout.x);\n\n if (rad < 0) {\n rad = Math.PI * 2 + rad;\n }\n\n isLeft = center.x < rootLayout.x;\n\n if (isLeft) {\n rad = rad - Math.PI;\n }\n } else {\n rad = Math.atan2(targetLayout.y - rootLayout.y, targetLayout.x - rootLayout.x);\n\n if (rad < 0) {\n rad = Math.PI * 2 + rad;\n }\n\n if (node.children.length === 0 || node.children.length !== 0 && node.isExpand === false) {\n isLeft = targetLayout.x < rootLayout.x;\n\n if (isLeft) {\n rad = rad - Math.PI;\n }\n } else {\n isLeft = targetLayout.x > rootLayout.x;\n\n if (!isLeft) {\n rad = rad - Math.PI;\n }\n }\n }\n\n var textPosition = isLeft ? 'left' : 'right';\n symbolPath.setStyle({\n textPosition: textPosition,\n textRotation: -rad,\n textOrigin: 'center',\n verticalAlign: 'middle'\n });\n }\n\n if (node.parentNode && node.parentNode !== virtualRoot) {\n var edge = symbolEl.__edge;\n\n if (!edge) {\n edge = symbolEl.__edge = new graphic.BezierCurve({\n shape: getEdgeShape(seriesScope, sourceOldLayout, sourceOldLayout),\n style: zrUtil.defaults({\n opacity: 0\n }, seriesScope.lineStyle)\n });\n }\n\n graphic.updateProps(edge, {\n shape: getEdgeShape(seriesScope, sourceLayout, targetLayout),\n style: {\n opacity: 1\n }\n }, seriesModel);\n group.add(edge);\n }\n}\n\nfunction removeNode(data, dataIndex, symbolEl, group, seriesModel, seriesScope) {\n var node = data.tree.getNodeByDataIndex(dataIndex);\n var virtualRoot = data.tree.root;\n var itemModel = node.getModel();\n var seriesScope = getTreeNodeStyle(node, itemModel, seriesScope);\n var source = node.parentNode === virtualRoot ? node : node.parentNode || node;\n var sourceLayout;\n\n while (sourceLayout = source.getLayout(), sourceLayout == null) {\n source = source.parentNode === virtualRoot ? source : source.parentNode || source;\n }\n\n graphic.updateProps(symbolEl, {\n position: [sourceLayout.x + 1, sourceLayout.y + 1]\n }, seriesModel, function () {\n group.remove(symbolEl);\n data.setItemGraphicEl(dataIndex, null);\n });\n symbolEl.fadeOut(null, {\n keepLabel: true\n });\n var edge = symbolEl.__edge;\n\n if (edge) {\n graphic.updateProps(edge, {\n shape: getEdgeShape(seriesScope, sourceLayout, sourceLayout),\n style: {\n opacity: 0\n }\n }, seriesModel, function () {\n group.remove(edge);\n });\n }\n}\n\nfunction getEdgeShape(seriesScope, sourceLayout, targetLayout) {\n var cpx1;\n var cpy1;\n var cpx2;\n var cpy2;\n var orient = seriesScope.orient;\n\n if (seriesScope.layout === 'radial') {\n var x1 = sourceLayout.rawX;\n var y1 = sourceLayout.rawY;\n var x2 = targetLayout.rawX;\n var y2 = targetLayout.rawY;\n var radialCoor1 = radialCoordinate(x1, y1);\n var radialCoor2 = radialCoordinate(x1, y1 + (y2 - y1) * seriesScope.curvature);\n var radialCoor3 = radialCoordinate(x2, y2 + (y1 - y2) * seriesScope.curvature);\n var radialCoor4 = radialCoordinate(x2, y2);\n return {\n x1: radialCoor1.x,\n y1: radialCoor1.y,\n x2: radialCoor4.x,\n y2: radialCoor4.y,\n cpx1: radialCoor2.x,\n cpy1: radialCoor2.y,\n cpx2: radialCoor3.x,\n cpy2: radialCoor3.y\n };\n } else {\n var x1 = sourceLayout.x;\n var y1 = sourceLayout.y;\n var x2 = targetLayout.x;\n var y2 = targetLayout.y;\n\n if (orient === 'horizontal') {\n cpx1 = x1 + (x2 - x1) * seriesScope.curvature;\n cpy1 = y1;\n cpx2 = x2 + (x1 - x2) * seriesScope.curvature;\n cpy2 = y2;\n }\n\n if (orient === 'vertical') {\n cpx1 = x1;\n cpy1 = y1 + (y2 - y1) * seriesScope.curvature;\n cpx2 = x2;\n cpy2 = y2 + (y1 - y2) * seriesScope.curvature;\n }\n\n return {\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2,\n cpx1: cpx1,\n cpy1: cpy1,\n cpx2: cpx2,\n cpy2: cpy2\n };\n }\n}\n\nmodule.exports = _default;","(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['exports', 'echarts'], factory);\n } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {\n // CommonJS\n factory(exports, require('echarts'));\n } else {\n // Browser globals\n factory({}, root.echarts);\n }\n}(this, function (exports, echarts) {\n var log = function (msg) {\n if (typeof console !== 'undefined') {\n console && console.error && console.error(msg);\n }\n }\n if (!echarts) {\n log('ECharts is not Loaded');\n return;\n }\n if (!echarts.registerMap) {\n log('ECharts Map is not loaded')\n return;\n }\n echarts.registerMap('china', {\"type\":\"FeatureCollection\",\"features\":[{\"id\":\"710000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[\"@@°Ü¯Û\"],[\"@@ƛĴÕƊÉɼģºðʀ\\\\ƎsÆNŌÔĚäœnÜƤɊĂǀĆĴžĤNJŨxĚĮǂƺòƌ‚–âÔ®ĮXŦţƸZûЋƕƑGđ¨ĭMó·ęcëƝɉlÝƯֹÅŃ^Ó·śŃNjƏďíåɛGɉ™¿@ăƑŽ¥ĘWǬÏĶŁâ\"],[\"@@\\\\p|WoYG¿¥I†j@¢\"],[\"@@…¡‰@ˆV^RqˆBbAŒnTXeRz¤Lž«³I\"],[\"@@ÆEE—„kWqë @œ\"],[\"@@fced\"]],\"encodeOffsets\":[[[122886,24033]],[[123335,22980]],[[122375,24193]],[[122518,24117]],[[124427,22618]],[[124862,26043]]]},\"properties\":{\"cp\":[121.509062,25.044332],\"name\":\"台湾\",\"childNum\":6}},{\"id\":\"130000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[\"@@o~†Z]‚ªr‰ºc_ħ²G¼s`jΟnüsœłNX_“M`ǽÓnUK…Ĝēs¤­©yrý§uģŒc†JŠ›e\"],[\"@@U`Ts¿m‚\"],[\"@@oºƋÄd–eVŽDJj£€J|Ådz•Ft~žKŨ¸IÆv|”‡¢r}膎onb˜}`RÎÄn°ÒdÞ²„^®’lnÐèĄlðӜ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcœŋ`–ZÔ’¶êqvFƚ†N®ĆTH®¦O’¾ŠIbÐã´BĐɢŴÆíȦp–ĐÞXR€·nndOž¤’OÀĈƒ­Qg˜µFo|gȒęSWb©osx|hYh•gŃfmÖĩnº€T̒Sp›¢dYĤ¶UĈjl’ǐpäìë|³kÛfw²Xjz~ÂqbTŠÑ„ěŨ@|oM‡’zv¢ZrÃVw¬ŧĖ¸fŒ°ÐT€ªqŽs{Sž¯r æÝlNd®²Ğ džiGʂJ™¼lr}~K¨ŸƐÌWö€™ÆŠzRš¤lêmĞL΄’@¡|q]SvK€ÑcwpÏρ†ĿćènĪWlĄkT}ˆJ”¤~ƒÈT„d„™pddʾĬŠ”ŽBVt„EÀ¢ôPĎƗè@~‚k–ü\\\\rÊĔÖæW_§¼F˜†´©òDòj’ˆYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkv‚GpuARhÞÆǶgʊTǼƹS£¨¡ù³ŘÍ]¿Ây™ôEP xX¶¹܇O¡“gÚ¡IwÃ鑦ÅB‡Ï|Ç°…N«úmH¯‹âŸDùŽyŜžŲIÄuШDž•¸dɂ‡‚FŸƒ•›Oh‡đ©OŸ›iÃ`ww^ƒÌkŸ‘ÑH«ƇǤŗĺtFu…{Z}Ö@U‡´…ʚLg®¯Oı°ÃwŸ ^˜—€VbÉs‡ˆmA…ê]]w„§›RRl£‡ȭµu¯b{ÍDěïÿȧŽuT£ġƒěŗƃĝ“Q¨fV†Ƌ•ƅn­a@‘³@šď„yýIĹÊKšŭfċŰóŒxV@tˆƯŒJ”]eƒR¾fe|rHA˜|h~Ėƍl§ÏŠlTíb ØoˆÅbbx³^zÃĶš¶Sj®A”yÂhðk`š«P€”ˈµEF†Û¬Y¨Ļrõqi¼‰Wi°§’б´°^[ˆÀ|ĠO@ÆxO\\\\tŽa\\\\tĕtû{ġŒȧXýĪÓjùÎRb›š^ΛfK[ݏděYfíÙTyŽuUSyŌŏů@Oi½’éŅ­aVcř§ax¹XŻác‡žWU£ôãºQ¨÷Ñws¥qEH‰Ù|‰›šYQoŕÇyáĂ£MðoťÊ‰P¡mšWO¡€v†{ôvîēÜISpÌhp¨ ‘j†deŔQÖj˜X³à™Ĉ[n`Yp@Už–cM`’RKhŒEbœ”pŞlNut®Etq‚nsÁŠgA‹iú‹oH‡qCX‡”hfgu“~ϋWP½¢G^}¯ÅīGCŸÑ^ãziMáļMTÃƘrMc|O_ž¯Ŏ´|‡morDkO\\\\mĆJfl@cĢ¬¢aĦtRıҙ¾ùƀ^juųœK­ƒUFy™—Ɲ…›īÛ÷ąV×qƥV¿aȉd³B›qPBm›aËđŻģm“Å®VŠ¹d^K‡KoŸnYg“¯Xhqa”Ldu¥•ÍpDž¡KąÅƒkĝęěhq‡}HyÓ]¹ǧ£…Í÷¿qᵧš™g‘¤o^á¾ZE‡¤i`ij{n•ƒOl»ŸWÝĔįhg›F[¿¡—ßkOüš_‰€ū‹i„DZàUtėGylƒ}ŒÓM}€jpEC~¡FtoQi‘šHkk{Ãmï‚\"]],\"encodeOffsets\":[[[119712,40641]],[[121616,39981]],[[116462,37237]]]},\"properties\":{\"cp\":[114.502461,38.045474],\"name\":\"河北\",\"childNum\":3}},{\"id\":\"140000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[\"@@Þĩ҃S‰ra}Á€yWix±Üe´lè“ßÓǏok‘ćiµVZģ¡coœ‘TS˹ĪmnÕńe–hZg{gtwªpXaĚThȑp{¶Eh—®RćƑP¿£‘Pmc¸mQÝW•ďȥoÅîɡųAďä³aωJ‘½¥PG­ąSM­™…EÅruµé€‘Yӎ•Ō_d›ĒCo­Èµ]¯_²ÕjāŽK~©ÅØ^ԛkïçămϑk]­±ƒcݯÑÃmQÍ~_a—pm…~ç¡q“ˆu{JÅŧ·Ls}–EyÁÆcI{¤IiCfUc•ƌÃp§]웫vD@¡SÀ‘µM‚ÅwuŽYY‡¡DbÑc¡hƒ×]nkoQdaMç~eD•ÛtT‰©±@¥ù@É¡‰ZcW|WqOJmĩl«ħşvOÓ«IqăV—¥ŸD[mI~Ó¢cehiÍ]Ɠ~ĥqXŠ·eƷœn±“}v•[ěďŽŕ]_‘œ•`‰¹ƒ§ÕōI™o©b­s^}Ét±ū«³p£ÿ·Wµ|¡¥ăFÏs׌¥ŅxŸÊdÒ{ºvĴÎêÌɊ²¶€ü¨|ÞƸµȲ‘LLúÉƎ¤ϊęĔV`„_bª‹S^|ŸdŠzY|dz¥p†ZbÆ£¶ÒK}tĦÔņƠ‚PYzn€ÍvX¶Ěn ĠÔ„zý¦ª˜÷žÑĸَUȌ¸‚dòÜJð´’ìúNM¬ŒXZ´‘¤ŊǸ_tldIš{¦ƀðĠȤ¥NehXnYG‚‡R° ƬDj¬¸|CĞ„Kq‚ºfƐiĺ©ª~ĆOQª ¤@ìǦɌ²æBŒÊ”TœŸ˜ʂōĖ’šĴŞ–ȀœÆÿȄlŤĒö„t”νî¼ĨXhŒ‘˜|ªM¤Ðz\"],\"encodeOffsets\":[[116874,41716]]},\"properties\":{\"cp\":[112.549248,37.857014],\"name\":\"山西\",\"childNum\":1}},{\"id\":\"150000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[\"@@Č^â£Ăh–šĖMÈÄw‚\\\\fŦ°W ¢¾luŸD„wŠ\\\\̀ʉÌÛM…Ā[bӞEn}¶Vc…ê“sƒ–›¯PqƒFB…‰|S•³C|kñ•H‹d‘iÄ¥sˆʼnő…PóÑÑE^‘ÅPpy_YtS™hQ·aHwsOnʼnÚs©iqj›‰€USiº]ïWš‰«gW¡A–R붛ijʕ…Œů`çõh]y»ǃŸǛҤxÒm~zf}pf|ÜroÈzrKÈĵSƧ„ż؜Ġu¦ö\"],[\"@@sKCš…GS|úþX”gp›{ÁX¿Ÿć{ƱȏñZáĔyoÁhA™}ŅĆfdʼn„_¹„Y°ėǩÑ¡H¯¶oMQqð¡Ë™|‘Ñ`ƭŁX½·óۓxğįÅcQ‡ˆ“ƒs«tȋDžF“Ÿù^i‘t«Č¯[›hAi©á¥ÇĚ×l|¹y¯YȵƓ‹ñǙµï‚ċ™Ļ|Dœ™üȭ¶¡˜›oŽäÕG\\\\ďT¿Òõr¯œŸLguÏYęRƩšɷŌO\\\\İТæ^Ŋ IJȶȆbÜGŽĝ¬¿ĚVĎgª^íu½jÿĕęjık@Ľƒ]ėl¥Ë‡ĭûÁ„ƒėéV©±ćn©­ȇžÍq¯½•YÃÔʼn“ÉNѝÅÝy¹NqáʅDǡËñ­ƁYÅy̱os§ȋµʽǘǏƬɱà‘ưN¢ƔÊuľýľώȪƺɂļžxœZĈ}ÌʼnŪ˜ĺœŽĭFЛĽ̅ȣͽÒŵìƩÇϋÿȮǡŏçƑůĕ~Ǎ›¼ȳÐUf†dIxÿ\\\\G ˆzâɏÙOº·pqy£†@ŒŠqþ@Ǟ˽IBäƣzsÂZ†ÁàĻdñ°ŕzéØűzșCìDȐĴĺf®ŽÀľưø@ɜÖÞKĊŇƄ§‚͑těï͡VAġÑÑ»d³öǍÝXĉĕÖ{þĉu¸ËʅğU̎éhɹƆ̗̮ȘNJ֥ड़ࡰţાíϲäʮW¬®ҌeרūȠkɬɻ̼ãüfƠSצɩςåȈHϚÎKdzͲOðÏȆƘ¼CϚǚ࢚˼ФԂ¤ƌžĞ̪Qʤ´¼mȠJˀŸƲÀɠmǐnǔĎȆÞǠN~€ʢĜ‚¶ƌĆĘźʆȬ˪ĚĒ¸ĞGȖƴƀj`ĢçĶāàŃºēĢƒĖćšYŒÀŎüôQÐÂŎŞdžŞêƖš˜oˆDĤÕºÑǘÛˤ³̀gńƘĔÀ^žªƂ`ªt¾äƚêĦĀ¼Ð€Ĕǎ¨Ȕ»͠^ˮÊȦƤøxRrŜH¤¸ÂxDĝŒ|ø˂˜ƮÐ¬ɚwɲFjĔ²Äw°dždÀɞ_ĸdîàŎjʜêTЪŌ‡ŜWÈ|tqĢUB~´°ÎFC•ŽU¼pĀēƄN¦¾O¶ŠłKĊOj“Ě”j´ĜYp˜{¦„ˆSĚÍ\\\\Tš×ªV–÷Ší¨ÅDK°ßtŇĔKš¨ǵÂcḷ̌ĚǣȄĽF‡lġUĵœŇ‹ȣFʉɁƒMğįʏƶɷØŭOǽ«ƽū¹Ʊő̝Ȩ§ȞʘĖiɜɶʦ}¨֪ࠜ̀ƇǬ¹ǨE˦ĥªÔêFŽxúQ„Er´W„rh¤Ɛ \\\\talĈDJ˜Ü|[Pll̚¸ƎGú´Pž¬W¦†^¦–H]prR“n|or¾wLVnÇIujkmon£cX^Bh`¥V”„¦U¤¸}€xRj–[^xN[~ªŠxQ„‚[`ªHÆÂExx^wšN¶Ê˜|¨ì†˜€MrœdYp‚oRzNy˜ÀDs~€bcfÌ`L–¾n‹|¾T‚°c¨È¢a‚r¤–`[|òDŞĔöxElÖdH„ÀI`„Ď\\\\Àì~ƎR¼tf•¦^¢ķ¶e”ÐÚMŒptgj–„ɡČÅyġLû™ŇV®ŠÄÈƀ†Ď°P|ªVV†ªj–¬ĚÒêp¬–E|ŬÂc|ÀtƐK fˆ{ĘFĒœƌXƲąo½Ę‘\\\\¥–o}›Ûu£ç­kX‘{uĩ«āíÓUŅßŢq€Ť¥lyň[€oi{¦‹L‡ń‡ðFȪȖ”ĒL„¿Ì‹ˆfŒ£K£ʺ™oqNŸƒwğc`ue—tOj×°KJ±qƒÆġm‰Ěŗos¬…qehqsuœƒH{¸kH¡Š…ÊRǪÇƌbȆ¢´ä܍¢NìÉʖ¦â©Ż؛Ç@Vu»A—ylßí¹ĵê…ÝlISò³C¹Ìâ„²i¶’Ìoú^H“²CǜңDŽ z¼g^èöŰ_‹‚–†IJĕꄜ}gÁnUI«m‰…„‹]j‡vV¼euhwqA„aW˜ƒ_µj…»çjioQR¹ēÃßt@r³[ÛlćË^ÍÉáG“›OUۗOB±•XŸkŇ¹£k|e]ol™ŸkVͼÕqtaÏõjgÁ£§U^Œ”RLˆËnX°Ç’Bz†^~wfvˆypV ¯„ƫĉ˭ȫƗŷɿÿĿƑ˃ĝÿÃǃßËőó©ǐȍŒĖM×ÍEyx‹þp]Évïè‘vƀnÂĴÖ@‚‰†V~Ĉ™Š³MEˆĸÅĖt—ējyÄDXÄxGQuv_›i¦aBçw‘˛wD™©{ŸtāmQ€{EJ§KPśƘƿ¥@‰sCT•É}ɃwˆƇy±ŸgÑ“}T[÷kÐ禫…SÒ¥¸ëBX½‰HáŵÀğtSÝÂa[ƣ°¯¦P]£ġ“–“Òk®G²„èQ°óMq}EŠóƐÇ\\\\ƒ‡@áügQ͋u¥Fƒ“T՛¿Jû‡]|mvāÎYua^WoÀa·­ząÒot׶CLƗi¯¤mƎHNJ¤îìɾŊìTdåwsRÖgĒųúÍġäÕ}Q¶—ˆ¿A•†‹[¡Œ{d×uQAƒ›M•xV‹vMOmăl«ct[wº_šÇʊŽŸjb£ĦS_é“QZ“_lwgOiýe`YYLq§IÁˆdz£ÙË[ÕªuƏ³ÍT—s·bÁĽäė[›b[ˆŗfãcn¥îC¿÷µ[ŏÀQ­ōšĉm¿Á^£mJVm‡—L[{Ï_£›F¥Ö{ŹA}…×Wu©ÅaųijƳhB{·TQqÙIķˑZđ©Yc|M¡…L•eVUóK_QWk’_ĥ‘¿ãZ•»X\\\\ĴuUƒè‡lG®ěłTĠğDєOrÍd‚ÆÍz]‹±…ŭ©ŸÅ’]ŒÅÐ}UË¥©Tċ™ïxgckfWgi\\\\ÏĒ¥HkµE˜ë{»ÏetcG±ahUiñiWsɁˆ·c–C‚Õk]wȑ|ća}w…VaĚ᠞ŒG°ùnM¬¯†{ȈÐÆA’¥ÄêJxÙ¢”hP¢Ûˆº€µwWOŸóFŽšÁz^ÀŗÎú´§¢T¤ǻƺSė‰ǵhÝÅQgvBHouʝl_o¿Ga{ïq{¥|ſĿHĂ÷aĝÇq‡Z‘ñiñC³ª—…»E`¨åXēÕqÉû[l•}ç@čƘóO¿¡ƒFUsA‰“ʽīccšocƒ‚ƒÇS}„“£‡IS~ălkĩXçmĈ…ŀЂoÐdxÒuL^T{r@¢‘žÍƒĝKén£kQ™‰yšÅõËXŷƏL§~}kqš»IHėDžjĝŸ»ÑÞoŸå°qTt|r©ÏS‹¯·eŨĕx«È[eMˆ¿yuˆ‘pN~¹ÏyN£{©’—g‹ħWí»Í¾s“əšDž_ÃĀɗ±ą™ijĉʍŌŷ—S›É“A‹±åǥɋ@럣R©ąP©}ĹªƏj¹erƒLDĝ·{i«ƫC£µ\"]],\"encodeOffsets\":[[[127444,52594]],[[113793,40312]]]},\"properties\":{\"cp\":[111.670801,40.818311],\"name\":\"内蒙古\",\"childNum\":2}},{\"id\":\"210000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[\"@@L–Ž@@s™a\"],[\"@@MnNm\"],[\"@@d‚c\"],[\"@@eÀ‚C@b‚“‰\"],[\"@@f‡…Xwkbr–Ä`qg\"],[\"@@^jtW‘Q\"],[\"@@~ Y]c\"],[\"@@G`ĔN^_¿Z‚ÃM\"],[\"@@iX¶B‹Y\"],[\"@@„YƒZ\"],[\"@@L_{Epf\"],[\"@@^WqCT\\\\\"],[\"@@\\\\[“‹§t|”¤_\"],[\"@@m`n_\"],[\"@@Ïxnj{q_×^Giip\"],[\"@@@œé^B†‡ntˆaÊU—˜Ÿ]x ¯ÄPIJ­°h€ʙK³†VˆÕ@Y~†|EvĹsDŽ¦­L^p²ŸÒG ’Ël]„xxÄ_˜fT¤Ď¤cŽœP„–C¨¸TVjbgH²sdÎdHt`Bˆ—²¬GJję¶[ÐhjeXdlwhšðSȦªVÊπ‹Æ‘Z˜ÆŶ®²†^ŒÎyÅÎcPqń“ĚDMħĜŁH­ˆk„çvV[ij¼W–‚YÀäĦ’‘`XlžR`žôLUVžfK–¢†{NZdĒª’YĸÌÚJRr¸SA|ƴgŴĴÆbvªØX~†źBŽ|¦ÕœEž¤Ð`\\\\|Kˆ˜UnnI]¤ÀÂĊnŎ™R®Ő¿¶\\\\ÀøíDm¦ÎbŨab‰œaĘ\\\\ľã‚¸a˜tÎSƐ´©v\\\\ÖÚÌǴ¤Â‡¨JKr€Z_Z€fjþhPkx€`Y”’RIŒjJcVf~sCN¤ ˆE‚œhæm‰–sHy¨SðÑÌ\\\\\\\\ŸĐRZk°IS§fqŒßýáЍÙÉÖ[^¯ǤŲ„ê´\\\\¦¬ĆPM¯£Ÿˆ»uïpùzEx€žanµyoluqe¦W^£ÊL}ñrkqWňûP™‰UP¡ôJŠoo·ŒU}£Œ„[·¨@XŒĸŸ“‹‹DXm­Ûݏº‡›GU‹CÁª½{íĂ^cj‡k“¶Ã[q¤“LÉö³cux«zZfƒ²BWÇ®Yß½ve±ÃC•ý£W{Ú^’q^sÑ·¨‹ÍOt“¹·C¥‡GD›rí@wÕKţ݋˜Ÿ«V·i}xËÍ÷‘i©ĝ‡ɝǡ]ƒˆ{c™±OW‹³Ya±Ÿ‰_穂Hžĕoƫ€Ňqƒr³‰Lys[„ñ³¯OS–ďOMisZ†±ÅFC¥Pq{‚Ã[Pg}\\\\—¿ghćO…•k^ģÁFıĉĥM­oEqqZûěʼn³F‘¦oĵ—hŸÕP{¯~TÍlª‰N‰ßY“Ð{Ps{ÃVU™™eĎwk±ʼnVÓ½ŽJãÇÇ»Jm°dhcÀff‘dF~ˆ€ĀeĖ€d`sx² šƒ®EżĀdQ‹Âd^~ăÔHˆ¦\\\\›LKpĄVez¤NP ǹӗR™ÆąJSh­a[¦´Âghwm€BÐ¨źhI|žVVŽ—Ž|p] Â¼èNä¶ÜBÖ¼“L`‚¼bØæŒKV”ŸpoœúNZÞÒKxpw|ÊEMnzEQšŽIZ”ŽZ‡NBˆčÚFÜçmĩ‚WĪñt‘ÞĵÇñZ«uD‚±|Əlij¥ãn·±PmÍa‰–da‡ CL‡Ǒkùó¡³Ï«QaċϑOÃ¥ÕđQȥċƭy‹³ÃA\"]],\"encodeOffsets\":[[[123686,41445]],[[126019,40435]],[[124393,40128]],[[126117,39963]],[[125322,40140]],[[126686,40700]],[[126041,40374]],[[125584,40168]],[[125453,40165]],[[125362,40214]],[[125280,40291]],[[125774,39997]],[[125976,40496]],[[125822,39993]],[[125509,40217]],[[122731,40949]]]},\"properties\":{\"cp\":[123.429096,41.796767],\"name\":\"辽宁\",\"childNum\":16}},{\"id\":\"220000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[\"@@‘p䔳PClƒFbbÍzš€wBG’ĭ€Z„Åi“»ƒlY­ċ²SgŽkÇ£—^S‰“qd¯•‹R…©éŽ£¯S†\\\\cZ¹iűƏCuƍÓX‡oR}“M^o•£…R}oªU­F…uuXHlEŕ‡€Ï©¤ÛmTŽþ¤D–²ÄufàÀ­XXȱAe„yYw¬dvõ´KÊ£”\\\\rµÄl”iˆdā]|DÂVŒœH¹ˆÞ®ÜWnŒC”Œķ W‹§@\\\\¸‹ƒ~¤‹Vp¸‰póIO¢ŠVOšŇürXql~òÉK]¤¥Xrfkvzpm¶bwyFoúvð‡¼¤ N°ąO¥«³[ƒéǡű_°Õ\\\\ÚÊĝŽþâőàerR¨­JYlďQ[ ÏYëЧTGz•tnŠß¡gFkMŸāGÁ¤ia É‰™È¹`\\\\xs€¬dĆkNnuNUŠ–užP@‚vRY¾•–\\\\¢…ŒGªóĄ~RãÖÎĢù‚đŴÕhQŽxtcæëSɽʼníëlj£ƍG£nj°KƘµDsØÑpyƸ®¿bXp‚]vbÍZuĂ{nˆ^IüœÀSք”¦EŒvRÎûh@℈[‚Əȉô~FNr¯ôçR±ƒ­HÑl•’Ģ–^¤¢‚OðŸŒævxsŒ]ÞÁTĠs¶¿âƊGW¾ìA¦·TѬ†è¥€ÏÐJ¨¼ÒÖ¼ƒƦɄxÊ~S–tD@ŠĂ¼Ŵ¡jlºWžvЉˆzƦZЎ²CH— „Axiukd‹ŒGgetqmcžÛ£Ozy¥cE}|…¾cZ…k‚‰¿uŐã[oxGikfeäT@…šSUwpiÚFM©’£è^ڟ‚`@v¶eň†f h˜eP¶žt“äOlÔUgƒÞzŸU`lœ}ÔÆUvØ_Ō¬Öi^ĉi§²ÃŠB~¡Ĉ™ÚEgc|DC_Ȧm²rBx¼MÔ¦ŮdĨÃâYx‘ƘDVÇĺĿg¿cwÅ\\\\¹˜¥Yĭlœ¤žOv†šLjM_a W`zļMž·\\\\swqÝSA‡š—q‰Śij¯Š‘°kŠRē°wx^Đkǂғ„œž“œŽ„‹\\\\]˜nrĂ}²ĊŲÒøãh·M{yMzysěnĒġV·°“G³¼XÀ““™¤¹i´o¤ŃšŸÈ`̃DzÄUĞd\\\\i֚ŒˆmÈBĤÜɲDEh LG¾ƀľ{WaŒYÍȏĢĘÔRîĐj‹}Ǟ“ccj‡oUb½š{“h§Ǿ{K‹ƖµÎ÷žGĀÖŠåưÎs­l›•yiē«‹`姝H¥Ae^§„GK}iã\\\\c]v©ģZ“mÃ|“[M}ģTɟĵ‘Â`À–çm‰‘FK¥ÚíÁbXš³ÌQґHof{‰]e€pt·GŋĜYünĎųVY^’˜ydõkÅZW„«WUa~U·Sb•wGçǑ‚“iW^q‹F‚“›uNĝ—·Ew„‹UtW·Ýďæ©PuqEzwAV•—XR‰ãQ`­©GŒM‡ehc›c”ďϝd‡©ÑW_ϗYƅŒ»…é\\\\ƒɹ~ǙG³mØ©BšuT§Ĥ½¢Ã_ý‘L¡‘ýŸqT^rme™\\\\Pp•ZZbƒyŸ’uybQ—efµ]UhĿDCmûvašÙNSkCwn‰cćfv~…Y‹„ÇG\"],\"encodeOffsets\":[[130196,42528]]},\"properties\":{\"cp\":[125.3245,43.886841],\"name\":\"吉林\",\"childNum\":1}},{\"id\":\"230000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[\"@@ƨƒĶTLÇyqpÇÛqe{~oyen}s‰`q‡iXG”ù]Ëp½“©lɇÁp]Þñ´FÔ^f‘äîºkà˜z¼BUvÈ@\"],[\"@@UƒµNÿ¥īè灋•HÍøƕ¶LŒǽ|g¨|”™Ža¾pViˆdd”~ÈiŒíďÓQġėǐZ΋ŽXb½|ſÃH½ŸKFgɱCģÛÇA‡n™‹jÕc[VĝDZÃ˄Ç_™ £ń³pŽj£º”š¿”»WH´¯”U¸đĢmžtĜyzzNN|g¸÷äűѱĉā~mq^—Œ[ƒ”››”ƒǁÑďlw]¯xQĔ‰¯l‰’€°řĴrŠ™˜BˆÞTxr[tŽ¸ĻN_yŸX`biN™Ku…P›£k‚ZĮ—¦[ºxÆÀdhŽĹŀUÈƗCw’áZħÄŭcÓ¥»NAw±qȥnD`{ChdÙFćš}¢‰A±Äj¨]ĊÕjŋ«×`VuÓś~_kŷVÝyh„“VkÄãPs”Oµ—fŸge‚Ň…µf@u_Ù ÙcŸªNªÙEojVx™T@†ãSefjlwH\\\\pŏäÀvŠŽlY†½d{†F~¦dyz¤PÜndsrhf‹HcŒvlwjFœ£G˜±DύƥY‡yϊu¹XikĿ¦ÏqƗǀOŜ¨LI|FRĂn sª|Cš˜zxAè¥bœfudTrFWÁ¹Am|˜ĔĕsķÆF‡´Nš‰}ć…UŠÕ@Áijſmužç’uð^ÊýowŒFzØÎĕNőžǏȎôªÌŒDŽàĀÄ˄ĞŀƒʀĀƘŸˮȬƬĊ°ƒUŸzou‡xe]}Ž…AyȑW¯ÌmK‡“Q]‹Īºif¸ÄX|sZt|½ÚUΠlkš^p{f¤lˆºlÆW –€A²˜PVܜPH”Êâ]ÎĈÌÜk´\\\\@qàsĔÄQºpRij¼èi†`¶—„bXƒrBgxfv»ŽuUiˆŒ^v~”J¬mVp´£Œ´VWrnP½ì¢BX‚¬h™ŠðX¹^TjVœŠriªj™tŊÄm€tPGx¸bgRšŽsT`ZozÆO]’ÒFô҆Oƒ‡ŊŒvŞ”p’cGŒêŠsx´DR–Œ{A†„EOr°Œ•žx|íœbˆ³Wm~DVjºéNN†Ëܲɶ­GƒxŷCStŸ}]ûō•SmtuÇÃĕN•™āg»šíT«u}ç½BĵÞʣ¥ëÊ¡Mێ³ãȅ¡ƋaǩÈÉQ‰†G¢·lG|›„tvgrrf«†ptęŘnŠÅĢr„I²¯LiØsPf˜_vĠd„xM prʹšL¤‹¤‡eˌƒÀđK“žïÙVY§]I‡óáĥ]ķ†Kˆ¥Œj|pŇ\\\\kzţ¦šnņäÔVĂîĪ¬|vW’®l¤èØr‚˜•xm¶ă~lÄƯĄ̈́öȄEÔ¤ØQĄ–Ą»ƢjȦOǺ¨ìSŖÆƬy”Qœv`–cwƒZSÌ®ü±DŽ]ŀç¬B¬©ńzƺŷɄeeOĨS’Œfm Ċ‚ƀP̎ēz©Ċ‚ÄÕÊmgŸÇsJ¥ƔˆŊśæ’΁Ñqv¿íUOµª‰ÂnĦÁ_½ä@ê텣P}Ġ[@gġ}g“ɊדûÏWXá¢užƻÌsNͽƎÁ§č՛AēeL³àydl›¦ĘVçŁpśdžĽĺſʃQíÜçÛġԏsĕ¬—Ǹ¯YßċġHµ ¡eå`ļƒrĉŘóƢFì“ĎWøxÊk†”ƈdƬv|–I|·©NqńRŀƒ¤é”eŊœŀ›ˆàŀU²ŕƀB‚Q£Ď}L¹Îk@©ĈuǰųǨ”Ú§ƈnTËÇéƟÊcfčŤ^Xm‡—HĊĕË«W·ċëx³ǔķÐċJā‚wİ_ĸ˜Ȁ^ôWr­°oú¬Ħ…ŨK~”ȰCĐ´Ƕ£’fNÎèâw¢XnŮeÂÆĶŽ¾¾xäLĴĘlļO¤ÒĨA¢Êɚ¨®‚ØCÔ ŬGƠ”ƦYĜ‡ĘÜƬDJ—g_ͥœ@čŅĻA“¶¯@wÎqC½Ĉ»NŸăëK™ďÍQ“Ùƫ[«Ãí•gßÔÇOÝáW‘ñuZ“¯ĥ€Ÿŕā¡ÑķJu¤E Ÿå¯°WKɱ_d_}}vyŸõu¬ï¹ÓU±½@gÏ¿rýD‰†g…Cd‰µ—°MFYxw¿CG£‹Rƛ½Õ{]L§{qqąš¿BÇƻğëšܭNJË|c²}Fµ}›ÙRsÓpg±ŠQNqǫŋRwŕnéÑÉKŸ†«SeYR…ŋ‹@{¤SJ}šD Ûǖ֍Ÿ]gr¡µŷjqWÛham³~S«“„›Þ]\"]],\"encodeOffsets\":[[[127123,51780]],[[134456,44547]]]},\"properties\":{\"cp\":[126.642464,45.756967],\"name\":\"黑龙江\",\"childNum\":2}},{\"id\":\"320000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[\"@@cþÅPiŠ`ZŸRu¥É\\\\]~°ŽY`µ†Óƒ^phÁbnÀşúŽòa–ĬºTÖŒb‚˜e¦¦€{¸ZâćNpŒ©žHr|^ˆmjhŠSEb\\\\afv`sz^lkŽlj‹Ätg‹¤D˜­¾Xš¿À’|ДiZ„ȀåB·î}GL¢õcßjaŸyBFµÏC^ĭ•cÙt¿sğH]j{s©HM¢ƒQnDÀ©DaÜތ·jgàiDbPufjDk`dPOîƒhw¡ĥ‡¥šG˜ŸP²ĐobºrY†„î¶aHŢ´ ]´‚rılw³r_{£DB_Ûdåuk|ˆŨ¯F Cºyr{XFy™e³Þċ‡¿Â™kĭB¿„MvÛpm`rÚã”@Ę¹hågËÖƿxnlč¶Åì½Ot¾dJlŠVJʜǀœŞqvnOŠ^ŸJ”Z‘ż·Q}ê͎ÅmµÒ]Žƍ¦Dq}¬R^èĂ´ŀĻĊIԒtžIJyQŐĠMNtœR®òLh‰›Ěs©»œ}OӌGZz¶A\\\\jĨFˆäOĤ˜HYš†JvÞHNiÜaϚɖnFQlšNM¤ˆB´ĄNöɂtp–Ŭdf先‹qm¿QûŠùއÚb¤uŃJŴu»¹Ą•lȖħŴw̌ŵ²ǹǠ͛hĭłƕrçü±Y™xci‡tğ®jű¢KOķ•Coy`å®VTa­_Ā]ŐÝɞï²ʯÊ^]afYǸÃĆēĪȣJđ͍ôƋĝÄ͎ī‰çÛɈǥ£­ÛmY`ó£Z«§°Ó³QafusNıDž_k}¢m[ÝóDµ—¡RLčiXy‡ÅNïă¡¸iĔϑNÌŕoēdōîåŤûHcs}~Ûwbù¹£¦ÓCt‹OPrƒE^ÒoŠg™ĉIµžÛÅʹK…¤½phMŠü`o怆ŀ\"],\"encodeOffsets\":[[121740,32276]]},\"properties\":{\"cp\":[118.767413,32.041544],\"name\":\"江苏\",\"childNum\":1}},{\"id\":\"330000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[\"@@E^dQ]K\"],[\"@@jX^j‡\"],[\"@@sfŠbU‡\"],[\"@@qP\\\\xz[ck\"],[\"@@‘Rƒ¢‚FX}°[s_\"],[\"@@Cbœ\\\\—}\"],[\"@@e|v\\\\la{u\"],[\"@@v~u}\"],[\"@@QxÂF¯}\"],[\"@@¹nŒvÞs¯o\"],[\"@@rSkUEj\"],[\"@@bi­ZŒP\"],[\"@@p[}INf\"],[\"@@À¿€\"],[\"@@¹dnbŒ…\"],[\"@@rSŸBnR\"],[\"@@g~h}\"],[\"@@FlEk\"],[\"@@OdPc\"],[\"@@v[u\\\\\"],[\"@@FjâL~wyoo~›sµL–\\\\\"],[\"@@¬e¹aNˆ\"],[\"@@\\\\nÔ¡q]L³ë\\\\ÿ®ŒQ֎\"],[\"@@ÊA­©[¬\"],[\"@@KxŒv­\"],[\"@@@hlIk]\"],[\"@@pW{o||j\"],[\"@@Md|_mC\"],[\"@@¢…X£ÏylD¼XˆtH\"],[\"@@hlÜ[LykAvyfw^Ež›¤\"],[\"@@fp¤Mus“R\"],[\"@@®_ma~•LÁ¬šZ\"],[\"@@iM„xZ\"],[\"@@ZcYd\"],[\"@@Z~dOSo|A¿qZv\"],[\"@@@`”EN¡v\"],[\"@@|–TY{\"],[\"@@@n@m\"],[\"@@XWkCT\\\\\"],[\"@@ºwšZRkĕWO¢\"],[\"@@™X®±Grƪ\\\\ÔáXq{‹\"],[\"@@ůTG°ĄLHm°UC‹\"],[\"@@¤Ž€aÜx~}dtüGæţŎíĔcŖpMËВjē¢·ðĄÆMzˆjWKĎ¢Q¶˜À_꒔_Bı€i«pZ€gf€¤Nrq]§ĂN®«H±‡yƳí¾×ŸīàLłčŴǝĂíÀBŖÕªˆŠÁŖHŗʼnåqûõi¨hÜ·ƒñt»¹ýv_[«¸m‰YL¯‰Qª…mĉÅdMˆ•gÇjcº«•ęœ¬­K­´ƒB«Âącoċ\\\\xKd¡gěŧ«®á’[~ıxu·Å”KsËɏc¢Ù\\\\ĭƛëbf¹­ģSƒĜkáƉÔ­ĈZB{ŠaM‘µ‰fzʼnfåÂŧįƋǝÊĕġć£g³ne­ą»@­¦S®‚\\\\ßðCšh™iqªĭiAu‡A­µ”_W¥ƣO\\\\lċĢttC¨£t`ˆ™PZäuXßBs‡Ļyek€OđġĵHuXBšµ]׌‡­­\\\\›°®¬F¢¾pµ¼kŘó¬Wät’¸|@ž•L¨¸µr“ºù³Ù~§WI‹ŸZWŽ®’±Ð¨ÒÉx€`‰²pĜ•rOògtÁZ}þÙ]„’¡ŒŸFK‚wsPlU[}¦Rvn`hq¬\\\\”nQ´ĘRWb”‚_ rtČFI֊kŠŠĦPJ¶ÖÀÖJĈĄTĚòžC ²@Pú…Øzœ©PœCÈڜĒ±„hŖ‡l¬â~nm¨f©–iļ«m‡nt–u†ÖZÜÄj“ŠLŽ®E̜Fª²iÊxبžIÈhhst\"],[\"@@o\\\\V’zRZ}y\"],[\"@@†@°¡mۛGĕ¨§Ianá[ýƤjfæ‡ØL–•äGr™\"]],\"encodeOffsets\":[[[125592,31553]],[[125785,31436]],[[125729,31431]],[[125513,31380]],[[125223,30438]],[[125115,30114]],[[124815,29155]],[[124419,28746]],[[124095,28635]],[[124005,28609]],[[125000,30713]],[[125111,30698]],[[125078,30682]],[[125150,30684]],[[124014,28103]],[[125008,31331]],[[125411,31468]],[[125329,31479]],[[125626,30916]],[[125417,30956]],[[125254,30976]],[[125199,30997]],[[125095,31058]],[[125083,30915]],[[124885,31015]],[[125218,30798]],[[124867,30838]],[[124755,30788]],[[124802,30809]],[[125267,30657]],[[125218,30578]],[[125200,30562]],[[124968,30474]],[[125167,30396]],[[124955,29879]],[[124714,29781]],[[124762,29462]],[[124325,28754]],[[123990,28459]],[[125366,31477]],[[125115,30363]],[[125369,31139]],[[122495,31878]],[[125329,30690]],[[125192,30787]]]},\"properties\":{\"cp\":[120.153576,30.287459],\"name\":\"浙江\",\"childNum\":45}},{\"id\":\"340000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[\"@@^iuLX^\"],[\"@@‚e©Ehl\"],[\"@@°ZÆëϵmkǀwÌÕæhºgBĝâqÙĊz›ÖgņtÀÁÊÆá’hEz|WzqD¹€Ÿ°E‡ŧl{ævÜcA`¤C`|´qžxIJkq^³³ŸGšµbƒíZ…¹qpa±ď OH—¦™Ħˆx¢„gPícOl_iCveaOjCh߸i݋bÛªCC¿€m„RV§¢A|t^iĠGÀtÚs–d]ĮÐDE¶zAb àiödK¡~H¸íæAžǿYƒ“j{ď¿‘™À½W—®£ChŒÃsiŒkkly]_teu[bFa‰Tig‡n{]Gqªo‹ĈMYá|·¥f¥—őaSÕė™NµñĞ«ImŒ_m¿Âa]uĜp …Z_§{Cƒäg¤°r[_Yj‰ÆOdý“[ŽI[á·¥“Q_n‡ùgL¾mv™ˊBÜƶĊJhšp“c¹˜O]iŠ]œ¥ jtsggJǧw×jÉ©±›EFˍ­‰Ki”ÛÃÕYv…s•ˆm¬njĻª•§emná}k«ŕˆƒgđ²Ù›DǤ›í¡ªOy›†×Où±@DŸñSęćăÕIÕ¿IµĥO‰‰jNÕËT¡¿tNæŇàåyķrĕq§ÄĩsWÆߎF¶žX®¿‰mŒ™w…RIޓfßoG‘³¾©uyH‘į{Ɓħ¯AFnuP…ÍÔzšŒV—dàôº^Ðæd´€‡oG¤{S‰¬ćxã}›ŧ×Kǥĩ«žÕOEзÖdÖsƘѨ[’Û^Xr¢¼˜§xvěƵ`K”§ tÒ´Cvlo¸fzŨð¾NY´ı~ÉĔē…ßúLÃϖ_ÈÏ|]ÂÏFl”g`bšežž€n¾¢pU‚h~ƴĖ¶_‚r sĄ~cž”ƈ]|r c~`¼{À{ȒiJjz`îÀT¥Û³…]’u}›f…ïQl{skl“oNdŸjŸäËzDvčoQŠďHI¦rb“tHĔ~BmlRš—V_„ħTLnñH±’DžœL‘¼L˜ªl§Ťa¸ŒĚlK²€\\\\RòvDcÎJbt[¤€D@®hh~kt°ǾzÖ@¾ªdb„YhüóZ ň¶vHrľ\\\\ʗJuxAT|dmÀO„‹[ÃԋG·ĚąĐlŪÚpSJ¨ĸˆLvÞcPæķŨŽ®mАˆálŸwKhïgA¢ųƩޖ¤OȜm’°ŒK´\"]],\"encodeOffsets\":[[[121722,32278]],[[119475,30423]],[[119168,35472]]]},\"properties\":{\"cp\":[117.283042,31.86119],\"name\":\"安徽\",\"childNum\":3}},{\"id\":\"350000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[\"@@“zht´‡]\"],[\"@@aj^~ĆG—©O\"],[\"@@ed¨„C}}i\"],[\"@@@vˆPGsQ\"],[\"@@‰sBz‚ddW]Q\"],[\"@@SŽ¨Q“{\"],[\"@@NŽVucW\"],[\"@@qptBAq\"],[\"@@‰’¸[mu\"],[\"@@Q\\\\pD]_\"],[\"@@jSwUadpF\"],[\"@@eXª~ƒ•\"],[\"@@AjvFso\"],[\"@@fT–›_Çí\\\\Ÿ™—v|ba¦jZÆy€°\"],[\"@@IjJi\"],[\"@@wJI€ˆxš«¼AoNe{M­\"],[\"@@K‰±¡Óˆ”ČäeZ\"],[\"@@k¡¹Eh~c®wBk‹UplÀ¡I•~Māe£bN¨gZý¡a±Öcp©PhžI”Ÿ¢Qq…ÇGj‹|¥U™ g[Ky¬ŏ–v@OpˆtÉEŸF„\\\\@ åA¬ˆV{Xģ‰ĐBy…cpě…¼³Ăp·¤ƒ¥o“hqqÚ¡ŅLsƒ^ᗞ§qlŸÀhH¨MCe»åÇGD¥zPO£čÙkJA¼ß–ėu›ĕeûҍiÁŧSW¥˜QŠûŗ½ùěcݧSùĩąSWó«íęACµ›eR—åǃRCÒÇZÍ¢‹ź±^dlsŒtjD¸•‚ZpužÔâÒH¾oLUêÃÔjjēò´ĄW‚ƛ…^Ñ¥‹ĦŸ@Çò–ŠmŒƒOw¡õyJ†yD}¢ďÑÈġfŠZd–a©º²z£šN–ƒjD°Ötj¶¬ZSÎ~¾c°¶Ðm˜x‚O¸¢Pl´žSL|¥žA†ȪĖM’ņIJg®áIJČĒü` ŽQF‡¬h|ÓJ@zµ |ê³È ¸UÖŬŬÀEttĸr‚]€˜ðŽM¤ĶIJHtÏ A’†žĬkvsq‡^aÎbvŒd–™fÊòSD€´Z^’xPsÞrv‹ƞŀ˜jJd×ŘÉ ®A–ΦĤd€xĆqAŒ†ZR”ÀMźŒnĊ»ŒİÐZ— YX–æJŠyĊ²ˆ·¶q§·–K@·{s‘Xãô«lŗ¶»o½E¡­«¢±¨Yˆ®Ø‹¶^A™vWĶGĒĢžPlzfˆļŽtàAvWYãšO_‡¤sD§ssČġ[kƤPX¦Ž`¶“ž®ˆBBvĪjv©šjx[L¥àï[F…¼ÍË»ğV`«•Ip™}ccÅĥZE‹ãoP…´B@ŠD—¸m±“z«Ƴ—¿å³BRضˆœWlâþäą`“]Z£Tc— ĹGµ¶H™m@_©—kŒ‰¾xĨ‡ôȉðX«½đCIbćqK³Á‹Äš¬OAwã»aLʼn‡ËĥW[“ÂGI—ÂNxij¤D¢ŽîĎÎB§°_JœGsƒ¥E@…¤uć…P‘å†cuMuw¢BI¿‡]zG¹guĮck\\\\_\"]],\"encodeOffsets\":[[[123250,27563]],[[122541,27268]],[[123020,27189]],[[122916,27125]],[[122887,26845]],[[122808,26762]],[[122568,25912]],[[122778,26197]],[[122515,26757]],[[122816,26587]],[[123388,27005]],[[122450,26243]],[[122578,25962]],[[121255,25103]],[[120987,24903]],[[122339,25802]],[[121042,25093]],[[122439,26024]]]},\"properties\":{\"cp\":[119.306239,26.075302],\"name\":\"福建\",\"childNum\":18}},{\"id\":\"360000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[\"@@ĢĨƐgļˆ¼ÂMD~ņªe^\\\\^§„ý©j׍cZ†Ø¨zdÒa¶ˆlҍJŒìõ`oz÷@¤u޸´†ôęöY¼‰HČƶajlÞƩ¥éZ[”|h}^U Œ ¥p„ĄžƦO lt¸Æ €Q\\\\€ŠaÆ|CnÂOjt­ĚĤd’ÈŒF`’¶„@Ð딠¦ōҞ¨Sêv†HĢûXD®…QgėWiØPÞìºr¤dž€NĠ¢l–•ĄtZoœCƞÔºCxrpĠV®Ê{f_Y`_ƒeq’’®Aot`@o‚DXfkp¨|Šs¬\\\\D‘ÄSfè©Hn¬…^DhÆyøJh“ØxĢĀLʈ„ƠPżċĄwȠ̦G®ǒĤäTŠÆ~ĦwŠ«|TF¡Šn€c³Ïå¹]ĉđxe{ÎӐ†vOEm°BƂĨİ|G’vz½ª´€H’àp”eJ݆Qšxn‹ÀŠW­žEµàXÅĪt¨ÃĖrÄwÀFÎ|ňÓMå¼ibµ¯»åDT±m[“r«_gŽmQu~¥V\\\\OkxtL E¢‹ƒ‘Ú^~ýê‹Pó–qo슱_Êw§ÑªåƗā¼‹mĉŹ‹¿NQ“…YB‹ąrwģcÍ¥B•Ÿ­ŗÊcØiI—žƝĿuŒqtāwO]‘³YCñTeɕš‹caub͈]trlu€ī…B‘ПGsĵıN£ï—^ķqss¿FūūV՟·´Ç{éĈý‰ÿ›OEˆR_ŸđûIċâJh­ŅıN‘ȩĕB…¦K{Tk³¡OP·wn—µÏd¯}½TÍ«YiµÕsC¯„iM•¤™­•¦¯P|ÿUHv“he¥oFTu‰õ\\\\ŽOSs‹MòđƇiaºćXŸĊĵà·çhƃ÷ǜ{‘ígu^›đg’m[×zkKN‘¶Õ»lčÓ{XSƉv©_ÈëJbVk„ĔVÀ¤P¾ºÈMÖxlò~ªÚàGĂ¢B„±’ÌŒK˜y’áV‡¼Ã~­…`g›ŸsÙfI›Ƌlę¹e|–~udjˆuTlXµf`¿JdŠ[\\\\˜„L‚‘²\"],\"encodeOffsets\":[[116689,26234]]},\"properties\":{\"cp\":[115.892151,28.676493],\"name\":\"江西\",\"childNum\":1}},{\"id\":\"370000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[\"@@Xjd]{K\"],[\"@@itbFHy\"],[\"@@HlGk\"],[\"@@T‚ŒGŸy\"],[\"@@K¬˜•‹U\"],[\"@@WdXc\"],[\"@@PtOs\"],[\"@@•LnXhc\"],[\"@@ppVƒu]Or\"],[\"@@cdzAUa\"],[\"@@udRhnCI‡\"],[\"@@ˆoIƒpR„\"],[\"@@Ľč{fzƤî’Kš–ÎMĮ]†—ZFˆ½Y]â£ph’™š¶¨râøÀ†ÎǨ¤^ºÄ”Gzˆ~grĚĜlĞƄLĆdž¢Îo¦–cv“Kb€gr°Wh”mZp ˆL]LºcU‰Æ­n”żĤÌĒœbAnrOAœ´žȊcÀbƦUØrĆUÜøœĬƞ†š˜Ez„VL®öØBkŖÝĐĖ¹ŧ̄±ÀbÎɜnb²ĦhņBĖ›žįĦåXćì@L¯´ywƕCéõė ƿ¸‘lµ¾Z|†ZWyFYŸ¨Mf~C¿`€à_RÇzwƌfQnny´INoƬˆèôº|sT„JUš›‚L„îVj„ǎ¾Ē؍‚Dz²XPn±ŴPè¸ŔLƔÜƺ_T‘üÃĤBBċȉöA´fa„˜M¨{«M`‡¶d¡ô‰Ö°šmȰBÔjjŒ´PM|”c^d¤u•ƒ¤Û´Œä«ƢfPk¶Môlˆ]Lb„}su^ke{lC‘…M•rDŠÇ­]NÑFsmoõľH‰yGă{{çrnÓE‰‹ƕZGª¹Fj¢ïW…uøCǷ돡ąuhÛ¡^Kx•C`C\\\\bÅxì²ĝÝ¿_N‰īCȽĿåB¥¢·IŖÕy\\\\‡¹kx‡Ã£Č×GDyÕ¤ÁçFQ¡„KtŵƋ]CgÏAùSed‡cÚź—ŠuYfƒyMmhUWpSyGwMPqŀ—›Á¼zK›¶†G•­Y§Ëƒ@–´śÇµƕBmœ@Io‚g——Z¯u‹TMx}C‘‰VK‚ï{éƵP—™_K«™pÛÙqċtkkù]gŽ‹Tğwo•ɁsMõ³ă‡AN£™MRkmEʕč™ÛbMjÝGu…IZ™—GPģ‡ãħE[iµBEuŸDPԛ~ª¼ętŠœ]ŒûG§€¡QMsğNPŏįzs£Ug{đJĿļā³]ç«Qr~¥CƎÑ^n¶ÆéÎR~Ż¸Y’I“] P‰umŝrƿ›‰›Iā‹[x‰edz‹L‘¯v¯s¬ÁY…~}…ťuŁŒg›ƋpÝĄ_ņī¶ÏSR´ÁP~ž¿Cyžċßdwk´Ss•X|t‰`Ä Èð€AªìÎT°¦Dd–€a^lĎDĶÚY°Ž`ĪŴǒˆ”àŠv\\\\ebŒZH„ŖR¬ŢƱùęO•ÑM­³FۃWp[ƒ\"]],\"encodeOffsets\":[[[123806,39303]],[[123821,39266]],[[123742,39256]],[[123702,39203]],[[123649,39066]],[[123847,38933]],[[123580,38839]],[[123894,37288]],[[123043,36624]],[[123344,38676]],[[123522,38857]],[[123628,38858]],[[118260,36742]]]},\"properties\":{\"cp\":[117.000923,36.675807],\"name\":\"山东\",\"childNum\":13}},{\"id\":\"410000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[\"@@•ýL™ùµP³swIÓxcŢĞð†´E®žÚPt†ĴXØx¶˜@«ŕŕQGƒ‹Yfa[şu“ßǩ™đš_X³ijÕčC]kbc•¥CS¯ëÍB©÷‹–³­Siˆ_}m˜YTtž³xlàcȂzÀD}ÂOQ³ÐTĨ¯†ƗòËŖ[hœł‹Ŧv~††}ÂZž«¤lPǕ£ªÝŴÅR§ØnhcŒtâk‡nύ­ľŹUÓÝdKuķ‡I§oTũÙďkęĆH¸ÓŒ\\\\ăŒ¿PcnS{wBIvɘĽ[GqµuŸŇôYgûƒZcaŽ©@½Õǽys¯}lgg@­C\\\\£as€IdÍuCQñ[L±ęk·‹ţb¨©kK—’»›KC²‘òGKmĨS`ƒ˜UQ™nk}AGē”sqaJ¥ĐGR‰ĎpCuÌy ã iMc”plk|tRk†ðœev~^‘´†¦ÜŽSí¿_iyjI|ȑ|¿_»d}qŸ^{“Ƈdă}Ÿtqµ`Ƴĕg}V¡om½fa™Ço³TTj¥„tĠ—Ry”K{ùÓjuµ{t}uËR‘iŸvGŠçJFjµŠÍyqΘàQÂFewixGw½Yŷpµú³XU›½ġy™łå‰kÚwZXˆ·l„¢Á¢K”zO„Λ΀jc¼htoDHr…|­J“½}JZ_¯iPq{tę½ĕ¦Zpĵø«kQ…Ťƒ]MÛfaQpě±ǽ¾]u­Fu‹÷nƒ™čįADp}AjmcEǒaª³o³ÆÍSƇĈÙDIzˑ赟^ˆKLœ—i—Þñ€[œƒaA²zz‰Ì÷Dœ|[šíijgf‚ÕÞd®|`ƒĆ~„oĠƑô³Ŋ‘D×°¯CsŠøÀ«ì‰UMhTº¨¸ǡîS–Ô„DruÂÇZ•ÖEŽ’vPZ„žW”~؋ÐtĄE¢¦Ðy¸bŠô´oŬ¬Ž²Ês~€€]®tªašpŎJ¨Öº„_ŠŔ–`’Ŗ^Ѝ\\\\Ĝu–”~m²Ƹ›¸fW‰ĦrƔ}Î^gjdfÔ¡J}\\\\n C˜¦þWxªJRÔŠu¬ĨĨmF†dM{\\\\d\\\\ŠYÊ¢ú@@¦ª²SŠÜsC–}fNècbpRmlØ^g„d¢aÒ¢CZˆZxvÆ¶N¿’¢T@€uCœ¬^ĊðÄn|žlGl’™Rjsp¢ED}€Fio~ÔNŽ‹„~zkĘHVsDzßjƒŬŒŠŢ`Pûàl¢˜\\\\ÀœEhŽİgÞē X¼Pk–„|m\"],\"encodeOffsets\":[[118256,37017]]},\"properties\":{\"cp\":[113.665412,34.757975],\"name\":\"河南\",\"childNum\":1}},{\"id\":\"420000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[\"@@AB‚\"],[\"@@lskt\"],[\"@@¾«}{ra®pîÃ\\\\™›{øCŠËyyB±„b\\\\›ò˜Ý˜jK›‡L ]ĎĽÌ’JyÚCƈćÎT´Å´pb©È‘dFin~BCo°BĎĚømvŒ®E^vǾ½Ĝ²Ro‚bÜeNŽ„^ĺ£R†¬lĶ÷YoĖ¥Ě¾|sOr°jY`~I”¾®I†{GqpCgyl{‡£œÍƒÍyPL“¡ƒ¡¸kW‡xYlÙ抚ŁĢzœ¾žV´W¶ùŸo¾ZHxjwfx„GNÁ•³Xéæl¶‰EièIH‰ u’jÌQ~v|sv¶Ôi|ú¢Fh˜Qsğ¦ƒSiŠBg™ÐE^ÁÐ{–čnOÂȞUÎóĔ†ÊēIJ}Z³½Mŧïeyp·uk³DsѨŸL“¶_œÅuèw»—€¡WqÜ]\\\\‘Ò§tƗcÕ¸ÕFÏǝĉăxŻČƟO‡ƒKÉġÿ×wg”÷IÅzCg†]m«ªGeçÃTC’«[‰t§{loWeC@ps_Bp‘­r‘„f_``Z|ei¡—oċMqow€¹DƝӛDYpûs•–‹Ykıǃ}s¥ç³[§ŸcYŠ§HK„«Qy‰]¢“wwö€¸ïx¼ņ¾Xv®ÇÀµRĠЋžHMž±cÏd„ƒǍũȅȷ±DSyúĝ£ŤĀàtÖÿï[îb\\\\}pĭÉI±Ñy…¿³x¯N‰o‰|¹H™ÏÛm‹júË~Tš•u˜ęjCöAwě¬R’đl¯ Ñb­‰ŇT†Ŀ_[Œ‘IčĄʿnM¦ğ\\\\É[T·™k¹œ©oĕ@A¾w•ya¥Y\\\\¥Âaz¯ãÁ¡k¥ne£Ûw†E©Êō¶˓uoj_Uƒ¡cF¹­[Wv“P©w—huÕyBF“ƒ`R‹qJUw\\\\i¡{jŸŸEPïÿ½fć…QÑÀQ{ž‚°‡fLԁ~wXg—ītêݾ–ĺ‘Hdˆ³fJd]‹HJ²…E€ƒoU¥†HhwQsƐ»Xmg±çve›]Dm͂PˆoCc¾‹_h”–høYrŊU¶eD°Č_N~øĹĚ·`z’]Äþp¼…äÌQŒv\\\\rCŒé¾TnkžŐڀÜa‡“¼ÝƆĢ¶Ûo…d…ĔňТJq’Pb ¾|JŒ¾fXŠƐîĨ_Z¯À}úƲ‹N_ĒĊ^„‘ĈaŐyp»CÇĕKŠšñL³ŠġMŒ²wrIÒŭxjb[œžn«øœ˜—æˆàƒ ^²­h¯Ú€ŐªÞ¸€Y²ĒVø}Ā^İ™´‚LŠÚm„¥ÀJÞ{JVŒųÞŃx×sxxƈē ģMř–ÚðòIf–Ċ“Œ\\\\Ʈ±ŒdʧĘD†vČ_Àæ~DŒċ´A®µ†¨ØLV¦êHÒ¤\"]],\"encodeOffsets\":[[[113712,34000]],[[115612,30507]],[[113649,34054]]]},\"properties\":{\"cp\":[114.298572,30.584355],\"name\":\"湖北\",\"childNum\":3}},{\"id\":\"430000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[\"@@—n„FTs\"],[\"@@ßÅÆችÔXr—†CO™“…ËR‘ïÿĩ­TooQyšÓ[‹ŅBE¬–ÎÓXa„į§Ã¸G °ITxp‰úxÚij¥Ïš–Ģ¾ŠedžÄ©ĸG…œàGh‚€M¤–Â_U}Ċ}¢pczfŠþg¤€”ÇòAV‘‹M\"],[\"@@©K—ƒA·³CQ±Á«³BUŠƑ¹AŠtćOw™D]ŒJiØSm¯b£‘ylƒ›X…HËѱH•«–‘C^õľA–Å§¤É¥„ïyuǙuA¢^{ÌC´­¦ŷJ£^[†“ª¿‡ĕ~•Ƈ…•N… skóā‡¹¿€ï]ă~÷O§­@—Vm¡‹Qđ¦¢Ĥ{ºjԏŽŒª¥nf´•~ÕoŸž×Ûą‹MąıuZœmZcÒ IJĪ²SÊDŽŶ¨ƚƒ’CÖŎªQؼrŭŽ­«}NÏürʬŒmjr€@ĘrTW ­SsdHzƓ^ÇÂyUi¯DÅYlŹu{hTœ}mĉ–¹¥ě‰Dÿë©ıÓ[Oº£ž“¥ót€ł¹MՄžƪƒ`Pš…Di–ÛUŠ¾Å‌ìˆU’ñB“È£ýhe‰dy¡oċ€`pfmjP~‚kZa…ZsÐd°wj§ƒ@€Ĵ®w~^‚kÀÅKvNmX\\\\¨a“”сqvíó¿F„¤¡@ũÑVw}S@j}¾«pĂr–ªg àÀ²NJ¶¶Dô…K‚|^ª†Ž°LX¾ŴäPĪ±œ£EXd›”^¶›IJÞܓ~‘u¸ǔ˜Ž›MRhsR…e†`ÄofIÔ\\\\Ø  i”ćymnú¨cj ¢»–GČìƊÿШXeĈĀ¾Oð Fi ¢|[jVxrIQŒ„_E”zAN¦zLU`œcªx”OTu RLÄ¢dV„i`p˔vŎµªÉžF~ƒØ€d¢ºgİàw¸Áb[¦Zb¦–z½xBĖ@ªpº›šlS¸Ö\\\\Ĕ[N¥ˀmĎă’J\\\\‹ŀ`€…ňSڊĖÁĐiO“Ĝ«BxDõĚiv—ž–S™Ì}iùŒžÜnšÐºGŠ{Šp°M´w†ÀÒzJ²ò¨ oTçüöoÛÿñŽőФ‚ùTz²CȆȸǎŪƒƑÐc°dPÎŸğ˶[Ƚu¯½WM¡­Éž“’B·rížnZŸÒ `‡¨GA¾\\\\pē˜XhÆRC­üWGġu…T靧Ŏѝ©ò³I±³}_‘‹EÃħg®ęisÁPDmÅ{‰b[Rşs·€kPŸŽƥƒóRo”O‹ŸVŸ~]{g\\\\“êYƪ¦kÝbiċƵŠGZ»Ěõ…ó·³vŝž£ø@pyö_‹ëŽIkѵ‡bcѧy…×dY؎ªiþž¨ƒ[]f]Ņ©C}ÁN‡»hĻħƏ’ĩ\"]],\"encodeOffsets\":[[[115640,30489]],[[112543,27312]],[[116690,26230]]]},\"properties\":{\"cp\":[112.982279,28.19409],\"name\":\"湖南\",\"childNum\":3}},{\"id\":\"440000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[\"@@QdˆAua\"],[\"@@ƒlxDLo\"],[\"@@sbhNLo\"],[\"@@Ă āŸ\"],[\"@@WltO[[\"],[\"@@Krœ]S\"],[\"@@e„„I]y\"],[\"@@I|„Mym\"],[\"@@ƒÛ³LSŒž¼Y\"],[\"@@nvºB–ëui©`¾\"],[\"@@zdšÛ›Jw®\"],[\"@@†°…¯\"],[\"@@a yAª¸ËJIx،@€ĀHAmßV¡o•fu•o\"],[\"@@šs‰ŗÃÔėAƁ›ZšÄ ~°ČP‚‹äh\"],[\"@@‹¶Ý’Ì‚vmĞh­ı‡Q\"],[\"@@HœŠdSjĒ¢D}war…“u«ZqadYM\"],[\"@@elŒ\\\\LqqU\"],[\"@@~rMo\\\\\"],[\"@@f„^ƒC\"],[\"@@øPªoj÷ÍÝħXČx”°Q¨ıXNv\"],[\"@@gÇƳˆŽˆ”oˆŠˆ[~tly\"],[\"@@E–ÆC¿‘\"],[\"@@OŽP\"],[\"@@w‹†đóg‰™ĝ—[³‹¡VÙæÅöM̳¹pÁaËýý©D©Ü“JŹƕģGą¤{Ùū…ǘO²«BƱéA—Ò‰ĥ‡¡«BhlmtÃPµyU¯uc“d·w_bŝcīímGOŽ|KP’ȏ‡ŹãŝIŕŭŕ@Óoo¿ē‹±ß}Ž…ŭ‚ŸIJWÈCőâUâǙI›ğʼn©I›ijEׅÁ”³Aó›wXJþ±ÌŒÜӔĨ£L]ĈÙƺZǾĆĖMĸĤfŒÎĵl•ŨnȈ‘ĐtF”Š–FĤ–‚êk¶œ^k°f¶gŠŽœ}®Fa˜f`vXŲxl˜„¦–ÔÁ²¬ÐŸ¦pqÊ̲ˆi€XŸØRDÎ}†Ä@ZĠ’s„x®AR~®ETtĄZ†–ƈfŠŠHâÒÐA†µ\\\\S¸„^wĖkRzŠalŽŜ|E¨ÈNĀňZTŒ’pBh£\\\\ŒĎƀuXĖtKL–¶G|Ž»ĺEļĞ~ÜĢÛĊrˆO˜Ùîvd]nˆ¬VœÊĜ°R֟pM††–‚ƂªFbwžEÀˆ˜©Œž\\\\…¤]ŸI®¥D³|ˎ]CöAŤ¦…æ’´¥¸Lv¼€•¢ĽBaô–F~—š®²GÌҐEY„„œzk¤’°ahlV՞I^‹šCxĈPŽsB‰ƒºV‰¸@¾ªR²ĨN]´_eavSi‡vc•}p}Đ¼ƌkJœÚe thœ†_¸ ºx±ò_xN›Ë‹²‘@ƒă¡ßH©Ùñ}wkNÕ¹ÇO½¿£ĕ]ly_WìIžÇª`ŠuTÅxYĒÖ¼k֞’µ‚MžjJÚwn\\\\h‘œĒv]îh|’È›Ƅøègž¸Ķß ĉĈWb¹ƀdéʌNTtP[ŠöSvrCZžžaGuœbo´ŖÒÇА~¡zCI…özx¢„Pn‹•‰Èñ @ŒĥÒ¦†]ƞŠV}³ăĔñiiÄÓVépKG½Ä‘ÓávYo–C·sit‹iaÀy„ŧΡÈYDÑům}‰ý|m[węõĉZÅxUO}÷N¹³ĉo_qtă“qwµŁYلǝŕ¹tïÛUïmRCº…ˆĭ|µ›ÕÊK™½R‘ē ó]‘–GªęAx–»HO£|ām‡¡diď×YïYWªʼnOeÚtĐ«zđ¹T…ā‡úE™á²\\\\‹ķÍ}jYàÙÆſ¿Çdğ·ùTßÇţʄ¡XgWÀLJğ·¿ÃˆOj YÇ÷Qě‹i\"]],\"encodeOffsets\":[[[117381,22988]],[[116552,22934]],[[116790,22617]],[[116973,22545]],[[116444,22536]],[[116931,22515]],[[116496,22490]],[[116453,22449]],[[113301,21439]],[[118726,21604]],[[118709,21486]],[[113210,20816]],[[115482,22082]],[[113171,21585]],[[113199,21590]],[[115232,22102]],[[115739,22373]],[[115134,22184]],[[113056,21175]],[[119573,21271]],[[119957,24020]],[[115859,22356]],[[116561,22649]],[[116285,22746]]]},\"properties\":{\"cp\":[113.280637,23.125178],\"name\":\"广东\",\"childNum\":24}},{\"id\":\"450000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[\"@@H– TQ§•A\"],[\"@@ĨʪƒLƒƊDÎĹĐCǦė¸zÚGn£¾›rªŀÜt¬@֛ڈSx~øOŒ˜ŶÐÂæȠ\\\\„ÈÜObĖw^oބLf¬°bI lTØB̈F£Ć¹gñĤaY“t¿¤VSñœK¸¤nM†¼‚JE±„½¸šŠño‹ÜCƆæĪ^ŠĚQÖ¦^‡ˆˆf´Q†üÜʝz¯šlzUĺš@쇀p¶n]sxtx¶@„~ÒĂJb©gk‚{°‚~c°`ԙ¬rV\\\\“la¼¤ôá`¯¹LC†ÆbŒxEræO‚v[H­˜„[~|aB£ÖsºdAĐzNÂðsŽÞƔ…Ĥªbƒ–ab`ho¡³F«èVloŽ¤™ÔRzpp®SŽĪº¨ÖƒºN…ij„d`’a”¦¤F³ºDÎńĀìŠCžĜº¦Ċ•~nS›|gźvZkCÆj°zVÈÁƔ]LÊFZg…čP­kini«‹qǀcz͔Y®¬Ů»qR×ō©DՄ‘§ƙǃŵTÉĩ±ŸıdÑnYY›IJvNĆƌØÜ Öp–}e³¦m‹©iÓ|¹Ÿħņ›|ª¦QF¢Â¬ʖovg¿em‡^ucà÷gՎuŒíÙćĝ}FĻ¼Ĺ{µHK•sLSđƃr‹č¤[Ag‘oS‹ŇYMÿ§Ç{Fśbky‰lQxĕƒ]T·¶[B…ÑÏGáşşƇe€…•ăYSs­FQ}­Bƒw‘tYğÃ@~…C̀Q ×W‡j˱rÉ¥oÏ ±«ÓÂ¥•ƒ€k—ŽwWűŒmcih³K›~‰µh¯e]lµ›él•Eģ‰•E“ďs‡’mǖŧē`ãògK_ÛsUʝ“ćğ¶hŒöŒO¤Ǜn³Žc‘`¡y‹¦C‘ez€YŠwa™–‘[ďĵűMę§]X˜Î_‚훘Û]é’ÛUćİÕBƣ±…dƒy¹T^džûÅÑŦ·‡PĻþÙ`K€¦˜…¢ÍeœĥR¿Œ³£[~Œäu¼dl‰t‚†W¸oRM¢ď\\\\zœ}Æzdvň–{ÎXF¶°Â_„ÒÂÏL©Ö•TmuŸ¼ãl‰›īkiqéfA„·Êµ\\\\őDc¥ÝF“y›Ôć˜c€űH_hL܋êĺШc}rn`½„Ì@¸¶ªVLŒŠhŒ‹\\\\•Ţĺk~ŽĠið°|gŒtTĭĸ^x‘vK˜VGréAé‘bUu›MJ‰VÃO¡…qĂXËS‰ģãlýàŸ_ju‡YÛÒB†œG^˜é֊¶§ŽƒEG”ÅzěƒƯ¤Ek‡N[kdåucé¬dnYpAyČ{`]þ¯T’bÜÈk‚¡Ġ•vŒàh„ÂƄ¢J\"]],\"encodeOffsets\":[[[111707,21520]],[[107619,25527]]]},\"properties\":{\"cp\":[108.320004,22.82402],\"name\":\"广西\",\"childNum\":2}},{\"id\":\"460000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[\"@@š¦Ŝil¢”XƦ‘ƞò–ïè§ŞCêɕrŧůÇąĻõ™·ĉ³œ̅kÇm@ċȧƒŧĥ‰Ľʉ­ƅſ“ȓÒ˦ŝE}ºƑ[ÍĜȋ gÎfǐÏĤ¨êƺ\\\\Ɔ¸ĠĎvʄȀœÐ¾jNðĀÒRŒšZdž™zÐŘΰH¨Ƣb²_Ġ \"],\"encodeOffsets\":[[112750,20508]]},\"properties\":{\"cp\":[110.33119,20.031971],\"name\":\"海南\",\"childNum\":1}},{\"id\":\"510000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[\"@@LqKr\"],[\"@@Š[ĻéV£ž_ţġñpG •réÏ·~ąSfy×͂·ºſƽiÍıƣıĻmHH}siaX@iÇ°ÁÃ×t«ƒ­Tƒ¤J–JJŒyJ•ÈŠ`Ohߦ¡uËhIyCjmÿw…ZG……Ti‹SˆsO‰žB²ŸfNmsPaˆ{M{ŠõE‘^Hj}gYpaeuž¯‘oáwHjÁ½M¡pM“–uå‡mni{fk”\\\\oƒÎqCw†EZ¼K›ĝŠƒAy{m÷L‡wO×SimRI¯rK™õBS«sFe‡]fµ¢óY_ÆPRcue°Cbo׌bd£ŌIHgtrnyPt¦foaXďx›lBowz‹_{ÊéWiêE„GhܸºuFĈIxf®Ž•Y½ĀǙ]¤EyŸF²ċ’w¸¿@g¢§RGv»–áŸW`ÃĵJwi]t¥wO­½a[׈]`Ãi­üL€¦LabbTÀå’c}Íh™Æhˆ‹®BH€î|Ék­¤S†y£„ia©taį·Ɖ`ō¥Uh“O…ƒĝLk}©Fos‰´›Jm„µlŁu—…ø–nÑJWΪ–YÀïAetTžŅ‚ӍG™Ë«bo‰{ıwodƟ½ƒžOġܑµxàNÖ¾P²§HKv¾–]|•B‡ÆåoZ`¡Ø`ÀmºĠ~ÌЧnDž¿¤]wğ@sƒ‰rğu‰~‘Io”[é±¹ ¿žſđӉ@q‹gˆ¹zƱřaí°KtǤV»Ã[ĩǭƑ^ÇÓ@ỗs›Zϕ‹œÅĭ€Ƌ•ěpwDóÖሯneQˌq·•GCœýS]xŸ·ý‹q³•O՜Œ¶Qzßti{ř‰áÍÇWŝŭñzÇW‹pç¿JŒ™‚Xœĩè½cŒF–ÂLiVjx}\\\\N†ŇĖ¥Ge–“JA¼ÄHfÈu~¸Æ«dE³ÉMA|b˜Ò…˜ćhG¬CM‚õŠ„ƤąAvƒüV€éŀ‰_V̳ĐwQj´·ZeÈÁ¨X´Æ¡Qu·»Ÿ“˜ÕZ³ġqDo‰y`L¬gdp°şŠp¦ėìÅĮZŽ°Iä”h‚‘ˆzŠĵœf²å ›ĚрKp‹IN|‹„Ñz]ń……·FU×é»R³™MƒÉ»GM«€ki€™ér™}Ã`¹ăÞmȝnÁîRǀ³ĜoİzŔwǶVÚ£À]ɜ»ĆlƂ²Ġ…þTº·àUȞÏʦ¶†I’«dĽĢdĬ¿–»Ĕ׊h\\\\c¬†ä²GêëĤł¥ÀǿżÃÆMº}BÕĢyFVvw–ˆxBèĻĒ©Ĉ“tCĢɽŠȣ¦āæ·HĽî“ôNԓ~^¤Ɗœu„œ^s¼{TA¼ø°¢İªDè¾Ň¶ÝJ‘®Z´ğ~Sn|ªWÚ©òzPOȸ‚bð¢|‹øĞŠŒœŒQìÛÐ@Ğ™ǎRS¤Á§d…i“´ezÝúØã]Hq„kIŸþËQǦÃsǤ[E¬ÉŪÍxXƒ·ÖƁİlƞ¹ª¹|XÊwn‘ÆƄmÀêErĒtD®ċæcQƒ”E®³^ĭ¥©l}äQto˜ŖÜqƎkµ–„ªÔĻĴ¡@Ċ°B²Èw^^RsºTĀ£ŚæœQP‘JvÄz„^Đ¹Æ¯fLà´GC²‘dt˜­ĀRt¼¤ĦOðğfÔðDŨŁĞƘïžPȆ®âbMüÀXZ ¸£@Ś›»»QÉ­™]d“sÖ×_͖_ÌêŮPrĔĐÕGĂeZÜîĘqBhtO ¤tE[h|Y‹Ô‚ZśÎs´xº±UŒ’ñˆt|O’ĩĠºNbgþŠJy^dÂY Į„]Řz¦gC‚³€R`ĀŠz’¢AjŒ¸CL„¤RÆ»@­Ŏk\\\\Ç´£YW}z@Z}‰Ã¶“oû¶]´^N‡Ò}èN‚ª–P˜Íy¹`S°´†ATe€VamdUĐwʄvĮÕ\\\\ƒu‹Æŗ¨Yp¹àZÂm™Wh{á„}WØǍ•Éüw™ga§áCNęÎ[ĀÕĪgÖɪX˜øx¬½Ů¦¦[€—„NΆL€ÜUÖ´òrÙŠxR^–†J˜k„ijnDX{Uƒ~ET{ļº¦PZc”jF²Ė@Žp˜g€ˆ¨“B{ƒu¨ŦyhoÚD®¯¢˜ WòàFΤ¨GDäz¦kŮPœġq˚¥À]€Ÿ˜eŽâÚ´ªKxī„Pˆ—Ö|æ[xäJÞĥ‚s’NÖ½ž€I†¬nĨY´®Ð—ƐŠ€mD™ŝuäđđEb…e’e_™v¡}ìęNJē}q”É埁T¯µRs¡M@}ůa†a­¯wvƉåZwž\\\\Z{åû^›\"]],\"encodeOffsets\":[[[108815,30935]],[[110617,31811]]]},\"properties\":{\"cp\":[104.065735,30.659462],\"name\":\"四川\",\"childNum\":2}},{\"id\":\"520000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[\"@@†G\\\\†lY£‘in\"],[\"@@q‚|ˆ‚mc¯tχVSÎ\"],[\"@@hÑ£Is‡NgßH†›HªķÃh_¹ƒ¡ĝħń¦uيùŽgS¯JHŸ|sÝÅtÁïyMDč»eÕtA¤{b\\\\}—ƒG®u\\\\åPFq‹wÅaD…žK°ºâ_£ùbµ”mÁ‹ÛœĹM[q|hlaªāI}тƒµ@swtwm^oµˆD鼊yV™ky°ÉžûÛR…³‚‡eˆ‡¥]RՋěħ[ƅåÛDpŒ”J„iV™™‰ÂF²I…»mN·£›LbÒYb—WsÀbŽ™pki™TZĄă¶HŒq`……ĥ_JŸ¯ae«ƒKpÝx]aĕÛPƒÇȟ[ÁåŵÏő—÷Pw}‡TœÙ@Õs«ĿÛq©½œm¤ÙH·yǥĘĉBµĨÕnđ]K„©„œá‹ŸG纍§Õßg‡ǗĦTèƤƺ{¶ÉHÎd¾ŚÊ·OÐjXWrãLyzÉAL¾ę¢bĶėy_qMĔąro¼hĊžw¶øV¤w”²Ĉ]ʚKx|`ź¦ÂÈdr„cȁbe¸›`I¼čTF´¼Óýȃr¹ÍJ©k_șl³´_pН`oÒhŽ¶pa‚^ÓĔ}D»^Xyœ`d˜[Kv…JPhèhCrĂĚÂ^Êƌ wˆZL­Ġ£šÁbrzOIl’MM”ĪŐžËr×ÎeŦŽtw|Œ¢mKjSǘňĂStÎŦEtqFT†¾†E쬬ôxÌO¢Ÿ KŠ³ŀºäY†„”PVgŎ¦Ŋm޼VZwVlŒ„z¤…ž£Tl®ctĽÚó{G­A‡ŒÇgeš~Αd¿æaSba¥KKûj®_ć^\\\\ؾbP®¦x^sxjĶI_Ä X‚⼕Hu¨Qh¡À@Ëô}Ž±žGNìĎlT¸ˆ…`V~R°tbÕĊ`¸úÛtπFDu€[ƒMfqGH·¥yA‰ztMFe|R‚_Gk†ChZeÚ°to˜v`x‹b„ŒDnÐ{E}šZ˜è€x—†NEފREn˜[Pv@{~rĆAB§‚EO¿|UZ~ì„Uf¨J²ĂÝƀ‚sª–B`„s¶œfvö¦ŠÕ~dÔq¨¸º»uù[[§´sb¤¢zþFœ¢Æ…Àhˆ™ÂˆW\\\\ıŽËI݊o±ĭŠ£þˆÊs}¡R]ŒěƒD‚g´VG¢‚j±®è†ºÃmpU[Á›‘Œëº°r›ÜbNu¸}Žº¼‡`ni”ºÔXĄ¤¼Ôdaµ€Á_À…†ftQQgœR—‘·Ǔ’v”}Ýלĵ]µœ“Wc¤F²›OĩųãW½¯K‚©…]€{†LóµCIµ±Mß¿hŸ•©āq¬o‚½ž~@i~TUxŪÒ¢@ƒ£ÀEîôruń‚”“‚b[§nWuMÆLl¿]x}ij­€½\"]],\"encodeOffsets\":[[[112158,27383]],[[112105,27474]],[[112095,27476]]]},\"properties\":{\"cp\":[106.713478,26.578343],\"name\":\"贵州\",\"childNum\":3}},{\"id\":\"530000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[\"@@[„ùx½}ÑRH‘YīĺûsÍn‘iEoã½Ya²ė{c¬ĝg•ĂsA•ØÅwď‚õzFjw}—«Dx¿}UũlŸê™@•HÅ­F‰¨ÇoJ´Ónũuą¡Ã¢pÒŌ“Ø TF²‚xa²ËX€‚cʋlHîAßËŁkŻƑŷÉ©h™W­æßU‡“Ës¡¦}•teèƶStǀÇ}Fd£j‹ĈZĆÆ‹¤T‚č\\\\Dƒ}O÷š£Uˆ§~ŃG™‚åŃDĝ¸œTsd¶¶Bªš¤u¢ŌĎo~t¾ÍŶÒtD¦Ú„iôö‰€z›ØX²ghįh½Û±¯€ÿm·zR¦Ɵ`ªŊÃh¢rOԍ´£Ym¼èêf¯ŪĽn„†cÚbŒw\\\\zlvWžªâˆ ¦g–mĿBş£¢ƹřbĥkǫßeeZkÙIKueT»sVesb‘aĕ  ¶®dNœĄÄpªyŽ¼—„³BE˜®l‡ŽGœŭCœǶwêżĔÂe„pÍÀQƞpC„–¼ŲÈ­AÎô¶R„ä’Q^Øu¬°š_Èôc´¹ò¨P΢hlϦ´Ħ“Æ´sâDŽŲPnÊD^¯°’Upv†}®BP̪–jǬx–Söwlfòªv€qĸ|`H€­viļ€ndĜ­Ćhň•‚em·FyށqóžSį¯‘³X_ĞçêtryvL¤§z„¦c¦¥jnŞk˜ˆlD¤øz½ĜàžĂŧMÅ|áƆàÊcðÂF܎‚áŢ¥\\\\\\\\º™İøÒÐJĴ‡„îD¦zK²ǏÎEh~’CD­hMn^ÌöÄ©ČZÀžaü„fɭyœpį´ěFűk]Ôě¢qlÅĆÙa¶~Äqššê€ljN¬¼H„ÊšNQ´ê¼VظE††^ŃÒyŒƒM{ŒJLoÒœęæŸe±Ķ›y‰’‡gã“¯JYÆĭĘëo¥Š‰o¯hcK«z_pŠrC´ĢÖY”—¼ v¸¢RŽÅW³Â§fǸYi³xR´ďUˊ`êĿU„û€uĆBƒƣö‰N€DH«Ĉg†——Ñ‚aB{ÊNF´¬c·Åv}eÇÃGB»”If•¦HňĕM…~[iwjUÁKE•Ž‹¾dĪçW›šI‹èÀŒoÈXòyŞŮÈXâÎŚŠj|àsRy‹µÖ›–Pr´þŒ ¸^wþTDŔ–Hr¸‹žRÌmf‡żÕâCôox–ĜƌÆĮŒ›Ð–œY˜tâŦÔ@]ÈǮƒ\\\\Ī¼Ä£UsȯLbîƲŚºyh‡rŒŠ@ĒԝƀŸÀ²º\\\\êp“’JŠ}ĠvŠqt„Ġ@^xÀ£È†¨mËÏğ}n¹_¿¢×Y_æpˆÅ–A^{½•Lu¨GO±Õ½ßM¶w’ÁĢۂP‚›Ƣ¼pcIJxŠ|ap̬HšÐŒŊSfsðBZ¿©“XÏÒK•k†÷Eû¿‰S…rEFsÕūk”óVǥʼniTL‚¡n{‹uxţÏh™ôŝ¬ğōN“‘NJkyPaq™Âğ¤K®‡YŸxÉƋÁ]āęDqçgOg†ILu—\\\\_gz—]W¼ž~CÔē]bµogpў_oď`´³Țkl`IªºÎȄqÔþž»E³ĎSJ»œ_f·‚adÇqƒÇc¥Á_Źw{™L^ɱćx“U£µ÷xgĉp»ĆqNē`rĘzaĵĚ¡K½ÊBzyäKXqiWPÏɸ½řÍcÊG|µƕƣG˛÷Ÿk°_^ý|_zċBZocmø¯hhcæ\\\\lˆMFlư£Ĝ„ÆyH“„F¨‰µêÕ]—›HA…àӄ^it `þßäkŠĤÎT~Wlÿ¨„ÔPzUC–NVv [jâôDôď[}ž‰z¿–msSh‹¯{jïğl}šĹ[–őŒ‰gK‹©U·µË@¾ƒm_~q¡f¹…ÅË^»‘f³ø}Q•„¡Ö˳gͱ^ǁ…\\\\ëÃA_—¿bW›Ï[¶ƛ鏝£F{īZgm@|kHǭƁć¦UĔťƒ×ë}ǝƒeďºȡȘÏíBə£āĘPªij¶“ʼnÿ‡y©n‰ď£G¹¡I›Š±LÉĺÑdĉ܇W¥˜‰}g˜Á†{aqÃ¥aŠıęÏZ—ï`\"],\"encodeOffsets\":[[104636,22969]]},\"properties\":{\"cp\":[102.712251,25.040609],\"name\":\"云南\",\"childNum\":1}},{\"id\":\"540000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[\"@@hžľxŽŖ‰xƒÒVŽ†ºÅâAĪÝȆµę¯Ňa±r_w~uSÕň‘qOj]ɄQ…£Z……UDûoY’»©M[‹L¼qãË{V͕çWViŽ]ë©Ä÷àyƛh›ÚU°ŒŒa”d„cQƒ~Mx¥™cc¡ÙaSyF—ցk­ŒuRýq¿Ôµ•QĽ³aG{¿FµëªéĜÿª@¬·–K‰·àariĕĀ«V»Ŷ™Ĵū˜gèLǴŇƶaf‹tŒèBŚ£^Šâ†ǐÝ®–šM¦ÁǞÿ¬LhŸŽJ¾óƾƺcxw‹f]Y…´ƒ¦|œQLn°aœdĊ…œ\\\\¨o’œǀÍŎœ´ĩĀd`tÊQŞŕ|‚¨C^©œĈ¦„¦ÎJĊ{ŽëĎjª²rЉšl`¼Ą[t|¦St辉PŒÜK¸€d˜Ƅı]s¤—î_v¹ÎVòŦj˜£Əsc—¬_Ğ´|Ł˜¦AvŽ¦w`ăaÝaa­¢e¤ı²©ªSªšÈMĄwžÉØŔì@T‘¤—Ę™\\\\õª@”þo´­xA s”ÂtŎKzó´ÇĊµ¢rž^nĊ­Æ¬×üGž¢‚³ {âĊ]š™G‚~bÀgVjzlhǶf€žOšfdŠ‰ªB]pj„•TO–tĊ‚n¤}®¦ƒČ¥d¢¼»ddš”Y¼Žt—¢eȤJ¤}Ǿ¡°§¤AГlc@ĝ”sªćļđAç‡wx•UuzEÖġ~AN¹ÄÅȀŻ¦¿ģŁéì±H…ãd«g[؉¼ēÀ•cīľġ¬cJ‘µ…ÐʥVȝ¸ßS¹†ý±ğkƁ¼ą^ɛ¤Ûÿ‰b[}¬ōõÃ]ËNm®g@•Bg}ÍF±ǐyL¥íCˆƒIij€Ï÷њį[¹¦[⚍EÛïÁÉdƅß{âNÆāŨߝ¾ě÷yC£‡k­´ÓH@¹†TZ¥¢įƒ·ÌAЧ®—Zc…v½ŸZ­¹|ŕWZqgW“|ieZÅYVӁqdq•bc²R@†c‡¥Rã»Ge†ŸeƃīQ•}J[ғK…¬Ə|o’ėjġĠÑN¡ð¯EBčnwôɍėªƒ²•CλŹġǝʅįĭạ̃ūȹ]ΓͧgšsgȽóϧµǛ†ęgſ¶ҍć`ĘąŌJޚä¤rÅň¥ÖÁUětęuůÞiĊÄÀ\\\\Æs¦ÓRb|Â^řÌkÄŷ¶½÷‡f±iMݑ›‰@ĥ°G¬ÃM¥n£Øą‚ğ¯ß”§aëbéüÑOčœk£{\\\\‘eµª×M‘šÉfm«Ƒ{Å׃Gŏǩãy³©WÑăû‚··‘Q—òı}¯ã‰I•éÕÂZ¨īès¶ZÈsŽæĔTŘvŽgÌsN@îá¾ó@‰˜ÙwU±ÉT廣TđŸWxq¹Zo‘b‹s[׌¯cĩv‡Œėŧ³BM|¹k‰ªħ—¥TzNYnݍßpęrñĠĉRS~½ŠěVVŠµ‚õ‡«ŒM££µB•ĉ¥áºae~³AuĐh`Ü³ç@BۘïĿa©|z²Ý¼D”£àč²‹ŸƒIƒû›I ā€óK¥}rÝ_Á´éMaň¨€~ªSĈ½Ž½KÙóĿeƃÆBŽ·¬ën×W|Uº}LJrƳ˜lŒµ`bÔ`QˆˆÐÓ@s¬ñIŒÍ@ûws¡åQÑßÁ`ŋĴ{Ī“T•ÚÅTSij‚‹Yo|Ç[ǾµMW¢ĭiÕØ¿@˜šMh…pÕ]j†éò¿OƇĆƇp€êĉâlØw–ěsˆǩ‚ĵ¸c…bU¹ř¨WavquSMzeo_^gsÏ·¥Ó@~¯¿RiīB™Š\\\\”qTGªÇĜçPoŠÿfñòą¦óQīÈáP•œābß{ƒZŗĸIæńhnszÁCËìñšÏ·ąĚÝUm®ó­L·ăU›Èíoù´Êj°ŁŤ_uµ^‘°Œìǖ@tĶĒ¡Æ‡M³Ģ«˜İĨÅ®ğ†RŽāð“ggheÆ¢z‚Ê©Ô\\\\°ÝĎz~ź¤Pn–MĪÖB£Ÿk™n鄧żćŠ˜ĆK„Ē°¼L¶è‰âz¨u¦¥LDĘz¬ýÎmĘd¾ß”Fz“hg²™Fy¦ĝ¤ċņbΛ@y‚Ąæm°NĮZRÖíŽJ²öLĸÒ¨Y®ƌÐV‰à˜tt_ڀÂyĠzž]Ţh€zĎ{†ĢX”ˆc|šÐqŽšfO¢¤ög‚ÌHNŽ„PKŖœŽ˜Uú´xx[xˆvĐCûĀŠìÖT¬¸^}Ìsòd´_Ž‡KgžLĴ…ÀBon|H@–Êx˜—¦BpŰˆŌ¿fµƌA¾zLjRxŠ¶F”œkĄźRzŀˆ~¶[”´Hnª–VƞuĒ­È¨ƎcƽÌm¸ÁÈM¦x͊ëÀxdžB’šú^´W†£–d„kɾĬpœw‚˂ØɦļĬIŚœÊ•n›Ŕa¸™~J°î”lɌxĤÊÈðhÌ®‚g˜T´øŽàCˆŽÀ^ªerrƘdž¢İP|Ė ŸWœªĦ^¶´ÂL„aT±üWƜ˜ǀRšŶUńšĖ[QhlLüA†‹Ü\\\\†qR›Ą©\"],\"encodeOffsets\":[[90849,37210]]},\"properties\":{\"cp\":[91.132212,29.660361],\"name\":\"西藏\",\"childNum\":1}},{\"id\":\"610000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[\"@@˜p¢—ȮµšûG™Ħ}Ħšðǚ¶òƄ€jɂz°{ºØkÈęâ¦jª‚Bg‚\\\\œċ°s¬Ž’]jžú ‚E”Ȍdž¬s„t‡”RˆÆdĠݎwܔ¸ôW¾ƮłÒ_{’Ìšû¼„jº¹¢GǪÒ¯ĘƒZ`ºŊƒecņąš~BÂgzpâēòYǠȰÌTΨÂWœ|fcŸă§uF—Œ@NŸ¢XLƒŠRMº[ğȣſï|¥J™kc`sʼnǷ’Y¹‹W@µ÷K…ãï³ÛIcñ·VȋڍÒķø©—þ¥ƒy‚ÓŸğęmWµÎumZyOŅƟĥÓ~sÑL¤µaŅY¦ocyZ{‰y c]{ŒTa©ƒ`U_Ěē£ωÊƍKù’K¶ȱÝƷ§{û»ÅÁȹÍéuij|¹cÑd‘ŠìUYƒŽO‘uF–ÕÈYvÁCqӃT•Ǣí§·S¹NgŠV¬ë÷Át‡°Dد’C´ʼnƒópģ}„ċcE˅FŸŸéGU¥×K…§­¶³B‹Č}C¿åċ`wġB·¤őcƭ²ő[Å^axwQO…ÿEËߌ•ĤNĔŸwƇˆÄŠńwĪ­Šo[„_KÓª³“ÙnK‰Çƒěœÿ]ď€ă_d©·©Ýŏ°Ù®g]±„Ÿ‡ß˜å›—¬÷m\\\\›iaǑkěX{¢|ZKlçhLt€Ňîŵ€œè[€É@ƉĄEœ‡tƇÏ˜³­ħZ«mJ…›×¾‘MtÝĦ£IwÄå\\\\Õ{‡˜ƒOwĬ©LÙ³ÙgBƕŀr̛ĢŭO¥lãyC§HÍ£ßEñŸX¡—­°ÙCgpťz‘ˆb`wI„vA|§”‡—hoĕ@E±“iYd¥OĻ¹S|}F@¾oAO²{tfžÜ—¢Fǂ҈W²°BĤh^Wx{@„¬‚­F¸¡„ķn£P|ŸªĴ@^ĠĈæb–Ôc¶l˜Yi…–^Mi˜cĎ°Â[ä€vï¶gv@À“Ĭ·lJ¸sn|¼u~a]’ÆÈtŌºJp’ƒþ£KKf~Š¦UbyäIšĺãn‡Ô¿^­žŵMT–hĠܤko¼Ŏìąǜh`[tŒRd²IJ_œXPrɲ‰l‘‚XžiL§àƒ–¹ŽH˜°Ȧqº®QC—bA†„ŌJ¸ĕÚ³ĺ§ `d¨YjžiZvRĺ±öVKkjGȊĐePОZmļKÀ€‚[ŠŽ`ösìh†ïÎoĬdtKÞ{¬èÒÒBŒÔpIJÇĬJŊ¦±J«ˆY§‹@·pH€µàåVKe›pW†ftsAÅqC·¬ko«pHÆuK@oŸHĆۄķhx“e‘n›S³àǍrqƶRbzy€¸ËАl›¼EºpĤ¼Œx¼½~Ğ’”à@†ÚüdK^ˆmÌSj\"],\"encodeOffsets\":[[110234,38774]]},\"properties\":{\"cp\":[108.948024,34.263161],\"name\":\"陕西\",\"childNum\":1}},{\"id\":\"620000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[\"@@VuUv\"],[\"@@ũ‹EĠtt~nkh`Q‰¦ÅÄÜdw˜Ab×ĠąJˆ¤DüègĺqBqœj°lI¡ĨÒ¤úSHbš‡ŠjΑBŠ°aZˆ¢KJŽ’O[|A£žDx}Nì•HUnrk„ kp€¼Y kMJn[aG‚áÚÏ[½rc†}aQxOgsPMnUs‡nc‹Z…ž–sKúvA›t„Þġ’£®ĀYKdnFwš¢JE°”Latf`¼h¬we|€Æ‡šbj}GA€·~WŽ”—`†¢MC¤tL©IJ°qdf”O‚“bÞĬ¹ttu`^ZúE`Œ[@„Æsîz®¡’C„ƳƜG²“R‘¢R’m”fŽwĸg܃‚ą G@pzJM½mŠhVy¸uÈÔO±¨{LfæU¶ßGĂq\\\\ª¬‡²I‚¥IʼnÈīoı‹ÓÑAçÑ|«LÝcspīðÍg…të_õ‰\\\\ĉñLYnĝg’ŸRǡÁiHLlõUĹ²uQjYi§Z_c¨Ÿ´ĹĖÙ·ŋI…ƒaBD˜­R¹ȥr—¯G•ºß„K¨jWk’ɱŠOq›Wij\\\\a­‹Q\\\\sg_ĆǛōëp»£lğۀgS•ŶN®À]ˆÓäm™ĹãJaz¥V}‰Le¤L„ýo‘¹IsŋÅÇ^‘Žbz…³tmEÁ´aŠ¹cčecÇN•ĊãÁ\\\\č¯—dNj•]j†—ZµkÓda•ćå]ğij@ ©O{¤ĸm¢ƒE·®ƒ«|@Xwg]Aģ±¯‡XǁÑdzªc›wQÚŝñsÕ³ÛV_ýƒ˜¥\\\\ů¥©¾÷w—Ž©WÕÊĩhÿÖÁRo¸V¬âDb¨šhûx–Ê×nj~Zâƒg|šXÁnßYoº§ZÅŘvŒ[„ĭÖʃuďxcVbnUSf…B¯³_Tzº—ΕO©çMÑ~Mˆ³]µ^püµ”ŠÄY~y@X~¤Z³€[Èōl@®Å¼£QKƒ·Di‹¡By‘ÿ‰Q_´D¥hŗyƒ^ŸĭÁZ]cIzý‰ah¹MĪğP‘s{ò‡‹‘²Vw¹t³Ŝˁ[ŽÑ}X\\\\gsFŸ£sPAgěp×ëfYHāďÖqēŭOÏë“dLü•\\\\iŒ”t^c®šRʺ¶—¢H°mˆ‘rYŸ£BŸ¹čIoľu¶uI]vģSQ{ƒUŻ”Å}QÂ|̋°ƅ¤ĩŪU ęĄžÌZҞ\\\\v˜²PĔ»ƢNHƒĂyAmƂwVmž`”]ȏb•”H`‰Ì¢²ILvĜ—H®¤Dlt_„¢JJÄämèÔDëþgºƫ™”aʎÌrêYi~ ÎݤNpÀA¾Ĕ¼b…ð÷’Žˆ‡®‚”üs”zMzÖĖQdȨý†v§Tè|ªH’þa¸|šÐ ƒwKĢx¦ivr^ÿ ¸l öæfƟĴ·PJv}n\\\\h¹¶v†·À|\\\\ƁĚN´Ĝ€çèÁz]ġ¤²¨QÒŨTIl‡ªťØ}¼˗ƦvÄùØE‹’«Fï˛Iq”ōŒTvāÜŏ‚íÛߜÛV—j³âwGăÂíNOŠˆŠPìyV³ʼnĖýZso§HіiYw[߆\\\\X¦¥c]ÔƩÜ·«j‡ÐqvÁ¦m^ċ±R™¦΋ƈťĚgÀ»IïĨʗƮŽ°Ɲ˜ĻþÍAƉſ±tÍEÕÞāNU͗¡\\\\ſčåÒʻĘm ƭÌŹöʥ’ëQ¤µ­ÇcƕªoIýˆ‰Iɐ_mkl³ă‰Ɠ¦j—¡Yz•Ňi–}Msßõ–īʋ —}ƒÁVmŸ_[n}eı­Uĥ¼‘ª•I{ΧDӜƻėoj‘qYhĹT©oūĶ£]ďxĩ‹ǑMĝ‰q`B´ƃ˺Ч—ç~™²ņj@”¥@đ´ί}ĥtPńǾV¬ufӃÉC‹tÓ̻‰…¹£G³€]ƖƾŎĪŪĘ̖¨ʈĢƂlɘ۪üºňUðǜȢƢż̌ȦǼ‚ĤŊɲĖ­Kq´ï¦—ºĒDzņɾªǀÞĈĂD†½ĄĎÌŗĞrôñnŽœN¼â¾ʄľԆ|DŽŽ֦ज़ȗlj̘̭ɺƅêgV̍ʆĠ·ÌĊv|ýĖÕWĊǎÞ´õ¼cÒÒBĢ͢UĜð͒s¨ňƃLĉÕÝ@ɛƯ÷¿Ľ­ĹeȏijëCȚDŲyê×Ŗyò¯ļcÂßY…tÁƤyAã˾J@ǝrý‹‰@¤…rz¸oP¹ɐÚyᐇHŸĀ[Jw…cVeȴϜ»ÈŽĖ}ƒŰŐèȭǢόĀƪÈŶë;Ñ̆ȤМľĮEŔ—ĹŊũ~ËUă{ŸĻƹɁύȩþĽvĽƓÉ@ē„ĽɲßǐƫʾǗĒpäWÐxnsÀ^ƆwW©¦cÅ¡Ji§vúF¶Ž¨c~c¼īŒeXǚ‹\\\\đ¾JŽwÀďksãA‹fÕ¦L}wa‚o”Z’‹D½†Ml«]eÒÅaɲáo½FõÛ]ĻÒ¡wYR£¢rvÓ®y®LF‹LzĈ„ôe]gx}•|KK}xklL]c¦£fRtív¦†PĤoH{tK\"]],\"encodeOffsets\":[[[108619,36299]],[[108589,36341]]]},\"properties\":{\"cp\":[103.823557,36.058039],\"name\":\"甘肃\",\"childNum\":2}},{\"id\":\"630000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[\"@@InJm\"],[\"@@CƒÆ½OŃĦsΰ~Ē³¦@@“Ņiš±è}ؘƄ˹A³r_ĞŠǒNĪŒĐw¤^ŬĵªpĺSZg’rpiƼĘԛ¨C|͖J’©Ħ»®VIJ~f\\\\m `Un„˜~ʌŸ•ĬàöNt•~ňjy–¢Zi˜Ɣ¥ĄŠk´nl`JʇŠJþ©pdƖ®È£¶ìRʦ‘źõƮËnŸʼėæÑƀĎ[‚˜¢VÎĂMÖÝÎF²sƊƀÎBļýƞ—¯ʘƭðħ¼Jh¿ŦęΌƇš¥²Q]Č¥nuÂÏriˆ¸¬ƪÛ^Ó¦d€¥[Wà…x\\\\ZŽjҕ¨GtpþYŊĕ´€zUO뇉P‰îMĄÁxH´á˜iÜUà›îÜՁĂÛSuŎ‹r“œJð̬EŒ‘FÁú×uÃÎkr“Ē{V}İ«O_ÌËĬ©ŽÓŧSRѱ§Ģ£^ÂyèçěM³Ƃę{[¸¿u…ºµ[gt£¸OƤĿéYŸõ·kĀŸq]juw¥Dĩƍ€õÇPéĽG‘ž©ã‡¤G…uȧþRcÕĕNy“yût“ˆ­‡ø‘†ï»a½ē¿BMoį£ŸÍj}éZËqbʍš“Ƭh¹ìÿÓAçãnIáI`ƒks£CG­ě˜Uy×Cy•…’Ÿ@¶ʡÊBnāzG„ơMē¼±O÷õJËĚăVŸĪũƆ£Œ¯{ËL½Ìzż“„VR|ĠTbuvJvµhĻĖH”Aëáa…­OÇðñęNw‡…œľ·L›mI±íĠĩPÉ×®ÿs—’cB³±JKßĊ«`…ađ»·QAmO’‘Vţéÿ¤¹SQt]]Çx€±¯A@ĉij¢Óļ©•ƒl¶ÅÛr—ŕspãRk~¦ª]Į­´“FR„åd­ČsCqđéFn¿Åƃm’Éx{W©ºƝºįkÕƂƑ¸wWūЩÈFž£\\\\tÈ¥ÄRÈýÌJ ƒlGr^×äùyÞ³fj”c†€¨£ÂZ|ǓMĝšÏ@ëÜőR‹›ĝ‰Œ÷¡{aïȷPu°ËXÙ{©TmĠ}Y³’­ÞIňµç½©C¡į÷¯B»|St»›]vƒųƒs»”}MÓ ÿʪƟǭA¡fs˜»PY¼c¡»¦c„ċ­¥£~msĉP•–Siƒ^o©A‰Šec‚™PeǵŽkg‚yUi¿h}aH™šĉ^|ᴟ¡HØûÅ«ĉ®]m€¡qĉ¶³ÈyôōLÁst“BŸ®wn±ă¥HSòėš£˜S’ë@לÊăxÇN©™©T±ª£IJ¡fb®ÞbŽb_Ą¥xu¥B—ž{łĝ³«`d˜Ɛt—¤ťiñžÍUuºí`£˜^tƃIJc—·ÛLO‹½Šsç¥Ts{ă\\\\_»™kϊ±q©čiìĉ|ÍIƒ¥ć¥›€]ª§D{ŝŖÉR_sÿc³Īō›ƿΑ›§p›[ĉ†›c¯bKm›R¥{³„Z†e^ŽŒwx¹dƽŽôIg §Mĕ ƹĴ¿—ǣÜ̓]‹Ý–]snåA{‹eŒƭ`ǻŊĿ\\\\ijŬű”YÂÿ¬jĖqŽßbŠ¸•L«¸©@ěĀ©ê¶ìÀEH|´bRľž–Ó¶rÀQþ‹vl®Õ‚E˜TzÜdb ˜hw¤{LR„ƒd“c‹b¯‹ÙVgœ‚ƜßzÃô쮍^jUèXΖ|UäÌ»rKŽ\\\\ŒªN‘¼pZCü†VY††¤ɃRi^rPҒTÖ}|br°qňbĚ°ªiƶGQ¾²„x¦PœmlŜ‘[Ĥ¡ΞsĦŸÔÏâ\\\\ªÚŒU\\\\f…¢N²§x|¤§„xĔsZPòʛ²SÐqF`ª„VƒÞŜĶƨVZŒÌL`ˆ¢dŐIqr\\\\oäõ–F礻Ŷ×h¹]Clـ\\\\¦ďÌį¬řtTӺƙgQÇÓHţĒ”´ÃbEÄlbʔC”|CˆŮˆk„Ʈ[ʼ¬ňœ´KŮÈΰÌĪ¶ƶlð”ļA†TUvdTŠG†º̼ŠÔ€ŒsÊDԄveOg\"]],\"encodeOffsets\":[[[105308,37219]],[[95370,40081]]]},\"properties\":{\"cp\":[101.778916,36.623178],\"name\":\"青海\",\"childNum\":2}},{\"id\":\"640000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[\"@@KëÀęĞ«OęȿȕŸı]ʼn¡åįÕÔ«Ǵõƪ™ĚQÐZhv K°›öqÀѐS[ÃÖHƖčË‡nL]ûc…Ùß@‚“ĝ‘¾}w»»‹oģF¹œ»kÌÏ·{zPƒ§B­¢íyÅt@ƒ@áš]Yv_ssģ¼i߁”ĻL¾ġsKD£¡N_…“˜X¸}B~Haiˆ™Åf{«x»ge_bs“KF¯¡Ix™mELcÿZ¤­Ģ‘ƒÝœsuBLù•t†ŒYdˆmVtNmtOPhRw~bd…¾qÐ\\\\âÙH\\\\bImlNZŸ»loƒŸqlVm–Gā§~QCw¤™{A\\\\‘PKŸNY‡¯bF‡kC¥’sk‹Šs_Ã\\\\ă«¢ħkJi¯r›rAhĹûç£CU‡ĕĊ_ԗBixÅُĄnªÑaM~ħpOu¥sîeQ¥¤^dkKwlL~{L~–hw^‚ófćƒKyEŒ­K­zuÔ¡qQ¤xZÑ¢^ļöܾEpž±âbÊÑÆ^fk¬…NC¾‘Œ“YpxbK~¥Že֎ŒäBlt¿Đx½I[ĒǙŒWž‹f»Ĭ}d§dµùEuj¨‚IÆ¢¥dXªƅx¿]mtÏwßRĶŒX¢͎vÆzƂZò®ǢÌʆCrâºMÞzžÆMҔÊÓŊZľ–r°Î®Ȉmª²ĈUªĚøºˆĮ¦ÌĘk„^FłĬhĚiĀĖ¾iİbjÕ\"],[\"@@mfwěwMrŢªv@G‰\"]],\"encodeOffsets\":[[[109366,40242]],[[108600,36303]]]},\"properties\":{\"cp\":[106.278179,38.46637],\"name\":\"宁夏\",\"childNum\":2}},{\"id\":\"650000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[\"@@QØĔ²X¨”~ǘBºjʐßØvK”ƔX¨vĊOžÃƒ·¢i@~c—‡ĝe_«”Eš“}QxgɪëÏÃ@sÅyXoŖ{ô«ŸuX…ê•Îf`œC‚¹ÂÿÐGĮÕĞXŪōŸMźÈƺQèĽôe|¿ƸJR¤ĘEjcUóº¯Ĩ_ŘÁMª÷Ð¥Oéȇ¿ÖğǤǷÂF҇zÉx[]­Ĥĝ‰œ¦EP}ûƥé¿İƷTėƫœŕƅ™ƱB»Đ±’ēO…¦E–•}‘`cȺrĦáŖuҞª«IJ‡πdƺÏØZƴwʄ¤ĖGЙǂZĶƒèH¶}ÚZצʥĪï|ÇĦMŔ»İĝLj‹ì¥Βœba­¯¥ǕǚkĆŵĦɑĺƯxūД̵nơʃĽá½M»›òmqóŘĝč˾ăC…ćāƿÝɽ©DZŅ¹đ¥˜³ðLrÁ®ɱĕģʼnǻ̋ȥơŻǛȡVï¹Ň۩ûkɗġƁ§ʇė̕ĩũƽō^ƕŠUv£ƁQï“Ƶkŏ½ΉÃŭdzLқʻ«ƭ\\\\lƒ‡ŭD‡“{ʓDkaFÃÄa“³ŤđÔGRÈƚhSӹŚsİ«ĐË[¥ÚDkº^Øg¼ŵ¸£EÍö•€ůʼnT¡c_‡ËKY‹ƧUśĵ„݃U_©rETÏʜ±OñtYwē¨ƒ{£¨uM³x½şL©Ùá[ÓÐĥ Νtģ¢\\\\‚ś’nkO›w¥±ƒT»ƷFɯàĩÞáB¹Æ…ÑUw„੍žĽw[“mG½Èå~‡Æ÷QyŠěCFmĭZī—ŵVÁ™ƿQƛ—ûXS²‰b½KϽĉS›©ŷXĕŸ{ŽĕK·¥Ɨcqq©f¿]‡ßDõU³h—­gËÇïģÉɋw“k¯í}I·šœbmœÉ–ř›īJɥĻˁ×xo›ɹī‡l•c…¤³Xù]‘™DžA¿w͉ì¥wÇN·ÂËnƾƍdǧđ®Ɲv•Um©³G\\\\“}µĿ‡QyŹl㓛µEw‰LJQ½yƋBe¶ŋÀů‡ož¥A—˜Éw@•{Gpm¿Aij†ŽKLhˆ³`ñcËtW‚±»ÕS‰ëüÿďD‡u\\\\wwwù³—V›LŕƒOMËGh£õP¡™er™Ïd{“‡ġWÁ…č|yšg^ğyÁzÙs`—s|ÉåªÇ}m¢Ń¨`x¥’ù^•}ƒÌ¥H«‰Yªƅ”Aйn~ź¯šf¤áÀz„gŠÇDIԝ´AňĀ҄¶ûEYospõD[{ù°]u›Jq•U•|Soċxţ[õÔĥkŋÞŭZ˺óYËüċrw €ÞkrťË¿XGÉbřaDü·Ē÷Aê[Ää€I®BÕИÞ_¢āĠpŠÛÄȉĖġDKwbm‡ÄNô‡ŠfœƫVÉvi†dz—H‘‹QµâFšù­Âœ³¦{YGžƒd¢ĚÜO „€{Ö¦ÞÍÀPŒ^b–ƾŠlŽ[„vt×ĈÍE˨¡Đ~´î¸ùÎh€uè`¸ŸHÕŔVºwĠââWò‡@{œÙNÝ´ə²ȕn{¿¥{l—÷eé^e’ďˆXj©î\\\\ªÑò˜Üìc\\\\üqˆÕ[Č¡xoÂċªbØ­Œø|€¶ȴZdÆšońéŒGš\\\\”¼C°ÌƁn´nxšÊOĨ’Ūƴĸ¢¸òTxÊǪMīИÖŲÃɎOvˆʦƢ~FŽ‡Rěò—¿ġ~åŊœú‰Nšžš¸qŽ’Ę[Ĕ¶ÂćnÒPĒÜvúĀÊbÖ{Äî¸~Ŕünp¤ÂH¾œĄYÒ©ÊfºmԈĘcDoĬMŬ’˜S¤„s²‚”ʘچžȂVŦ –ŽèW°ªB|IJXŔþÈJĦÆæFĚêŠYĂªĂ]øªŖNÞüA€’fɨJ€˜¯ÎrDDšĤ€`€mz\\\\„§~D¬{vJÂ˜«lµĂb–¤p€ŌŰNĄ¨ĊXW|ų ¿¾ɄĦƐMT”‡òP˜÷fØĶK¢ȝ˔Sô¹òEð­”`Ɩ½ǒÂň×äı–§ĤƝ§C~¡‚hlå‚ǺŦŞkâ’~}ŽFøàIJaĞ‚fƠ¥Ž„Ŕdž˜®U¸ˆźXœv¢aƆúŪtŠųƠjd•ƺŠƺÅìnrh\\\\ĺ¯äɝĦ]èpĄ¦´LƞĬŠ´ƤǬ˼Ēɸ¤rºǼ²¨zÌPðŀbþ¹ļD¢¹œ\\\\ĜÑŚŸ¶ZƄ³àjĨoâŠȴLʉȮŒĐ­ĚăŽÀêZǚŐ¤qȂ\\\\L¢ŌİfÆs|zºeªÙæ§΢{Ā´ƐÚ¬¨Ĵà²łhʺKÞºÖTŠiƢ¾ªì°`öøu®Ê¾ãØ\"],\"encodeOffsets\":[[88824,50096]]},\"properties\":{\"cp\":[87.617733,43.792818],\"name\":\"新疆\",\"childNum\":1}},{\"id\":\"110000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[\"@@ĽOÁ›ûtŷmiÍt_H»Ĩ±d`Š¹­{bw…Yr“³S]§§o¹€qGtm_Sŧ€“oa›‹FLg‘QN_•dV€@Zom_ć\\\\ߚc±x¯oœRcfe…£’o§ËgToÛJíĔóu…|wP¤™XnO¢ÉˆŦ¯rNÄā¤zâŖÈRpŢZŠœÚ{GŠrFt¦Òx§ø¹RóäV¤XdˆżâºWbwŚ¨Ud®bêņ¾‘jnŎGŃŶŠnzÚSeîĜZczî¾i]͜™QaúÍÔiþĩȨWĢ‹ü|Ėu[qb[swP@ÅğP¿{\\\\‡¥A¨Ï‘Ѩj¯ŠX\\\\¯œMK‘pA³[H…īu}}\"],\"encodeOffsets\":[[120023,41045]]},\"properties\":{\"cp\":[116.405285,39.904989],\"name\":\"北京\",\"childNum\":1}},{\"id\":\"120000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[\"@@ŬgX§Ü«E…¶Ḟ“¬O_™ïlÁg“z±AXe™µÄĵ{¶]gitgšIj·›¥îakS€‰¨ÐƎk}ĕ{gB—qGf{¿a†U^fI“ư‹³õ{YƒıëNĿžk©ïËZŏ‘R§òoY×Ógc…ĥs¡bġ«@dekąI[nlPqCnp{ˆō³°`{PNdƗqSÄĻNNâyj]äžÒD ĬH°Æ]~¡HO¾ŒX}ÐxŒgp“gWˆrDGˆŒpù‚Š^L‚ˆrzWxˆZ^¨´T\\\\|~@I‰zƒ–bĤ‹œjeĊªz£®Ĕvě€L†mV¾Ô_ȔNW~zbĬvG†²ZmDM~”~\"],\"encodeOffsets\":[[120237,41215]]},\"properties\":{\"cp\":[117.190182,39.125596],\"name\":\"天津\",\"childNum\":1}},{\"id\":\"310000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[\"@@ɧư¬EpƸÁxc‡\"],[\"@@©„ªƒ\"],[\"@@”MA‹‘š\"],[\"@@Qp݁E§ÉC¾\"],[\"@@bŝՕÕEȣÚƥêImɇǦèÜĠŒÚžÃƌÃ͎ó\"],[\"@@ǜûȬɋŠŭ™×^‰sYŒɍDŋ‘ŽąñCG²«ªč@h–_p¯A{‡oloY€¬j@IJ`•gQڛhr|ǀ^MIJvtbe´R¯Ô¬¨YŽô¤r]ì†Ƭį\"]],\"encodeOffsets\":[[[124702,32062]],[[124547,32200]],[[124808,31991]],[[124726,32110]],[[124903,32376]],[[124438,32149]]]},\"properties\":{\"cp\":[121.472644,31.231706],\"name\":\"上海\",\"childNum\":6}},{\"id\":\"500000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[\"@@vjG~nGŘŬĶȂƀƾ¹¸ØÎezĆT¸}êЖqHŸðqĖ䒊¥^CƒIj–²p…\\\\_ æüY|[YxƊæuž°xb®…Űb@~¢NQt°¶‚S栓Ê~rljĔëĚ¢~šuf`‘‚†fa‚ĔJåĊ„nÖ]„jƎćÊ@Š£¾a®£Ű{ŶĕF‹ègLk{Y|¡ĜWƔtƬJÑxq‹±ĢN´‰òK‰™–LÈüD|s`ŋ’ć]ƒÃ‰`đŒMûƱ½~Y°ħ`ƏíW‰½eI‹½{aŸ‘OIrÏ¡ĕŇa†p†µÜƅġ‘œ^ÖÛbÙŽŏml½S‹êqDu[R‹ãË»†ÿw`»y‘¸_ĺę}÷`M¯ċfCVµqʼn÷Z•gg“Œ`d½pDO‡ÎCnœ^uf²ènh¼WtƏxRGg¦…pV„†FI±ŽG^ŒIc´ec‡’G•ĹÞ½sëĬ„h˜xW‚}Kӈe­Xsbk”F¦›L‘ØgTkïƵNï¶}Gy“w\\\\oñ¡nmĈzjŸ•@™Óc£»Wă¹Ój“_m»ˆ¹·~MvÛaqœ»­‰êœ’\\\\ÂoVnŽÓØ͙²«‹bq¿efE „€‹Ĝ^Qž~ Évý‡ş¤²Į‰pEİ}zcĺƒL‹½‡š¿gņ›¡ýE¡ya£³t\\\\¨\\\\vú»¼§·Ñr_oÒý¥u‚•_n»_ƒ•At©Þűā§IVeëƒY}{VPÀFA¨ąB}q@|Ou—\\\\Fm‰QF݅Mw˜å}]•€|FmϋCaƒwŒu_p—¯sfÙgY…DHl`{QEfNysBŠ¦zG¸rHe‚„N\\\\CvEsÐùÜ_·ÖĉsaQ¯€}_U‡†xÃđŠq›NH¬•Äd^ÝŰR¬ã°wećJEž·vÝ·Hgƒ‚éFXjÉê`|yŒpxkAwœWĐpb¥eOsmzwqChóUQl¥F^laf‹anòsr›EvfQdÁUVf—ÎvÜ^efˆtET¬ôA\\\\œ¢sJŽnQTjP؈xøK|nBz‰„œĞ»LY‚…FDxӄvr“[ehľš•vN”¢o¾NiÂxGp⬐z›bfZo~hGi’]öF|‰|Nb‡tOMn eA±ŠtPT‡LjpYQ|†SH††YĀxinzDJ€Ìg¢và¥Pg‰_–ÇzII‹€II•„£®S¬„Øs쐣ŒN\"],[\"@@ifjN@s\"]],\"encodeOffsets\":[[[109628,30765]],[[111725,31320]]]},\"properties\":{\"cp\":[106.504962,29.533155],\"name\":\"重庆\",\"childNum\":2}},{\"id\":\"810000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[\"@@AlBk\"],[\"@@mŽn\"],[\"@@EpFo\"],[\"@@ea¢pl¸Eõ¹‡hj[ƒ]ÔCΖ@lj˜¡uBXŸ…•´‹AI¹…[‹yDUˆ]W`çwZkmc–…M›žp€Åv›}I‹oJlcaƒfёKŽ°ä¬XJmРđhI®æÔtSHn€Eˆ„ÒrÈc\"],[\"@@rMUw‡AS®€e\"]],\"encodeOffsets\":[[[117111,23002]],[[117072,22876]],[[117045,22887]],[[116975,23082]],[[116882,22747]]]},\"properties\":{\"cp\":[114.173355,22.320048],\"name\":\"香港\",\"childNum\":5}},{\"id\":\"820000\",\"type\":\"Feature\",\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[\"@@kÊd°å§s\"],\"encodeOffsets\":[[116279,22639]]},\"properties\":{\"cp\":[113.54909,22.198951],\"name\":\"澳门\",\"childNum\":1}}],\"UTF8Encoding\":true});\n}));","/**\n * @module zrender/core/util\n */\n// 用于处理merge时无法遍历Date等对象的问题\nvar BUILTIN_OBJECT = {\n '[object Function]': 1,\n '[object RegExp]': 1,\n '[object Date]': 1,\n '[object Error]': 1,\n '[object CanvasGradient]': 1,\n '[object CanvasPattern]': 1,\n // For node-canvas\n '[object Image]': 1,\n '[object Canvas]': 1\n};\nvar TYPED_ARRAY = {\n '[object Int8Array]': 1,\n '[object Uint8Array]': 1,\n '[object Uint8ClampedArray]': 1,\n '[object Int16Array]': 1,\n '[object Uint16Array]': 1,\n '[object Int32Array]': 1,\n '[object Uint32Array]': 1,\n '[object Float32Array]': 1,\n '[object Float64Array]': 1\n};\nvar objToString = Object.prototype.toString;\nvar arrayProto = Array.prototype;\nvar nativeForEach = arrayProto.forEach;\nvar nativeFilter = arrayProto.filter;\nvar nativeSlice = arrayProto.slice;\nvar nativeMap = arrayProto.map;\nvar nativeReduce = arrayProto.reduce; // Avoid assign to an exported variable, for transforming to cjs.\n\nvar methods = {};\n\nfunction $override(name, fn) {\n methods[name] = fn;\n}\n/**\n * Those data types can be cloned:\n * Plain object, Array, TypedArray, number, string, null, undefined.\n * Those data types will be assgined using the orginal data:\n * BUILTIN_OBJECT\n * Instance of user defined class will be cloned to a plain object, without\n * properties in prototype.\n * Other data types is not supported (not sure what will happen).\n *\n * Caution: do not support clone Date, for performance consideration.\n * (There might be a large number of date in `series.data`).\n * So date should not be modified in and out of echarts.\n *\n * @param {*} source\n * @return {*} new\n */\n\n\nfunction clone(source) {\n if (source == null || typeof source != 'object') {\n return source;\n }\n\n var result = source;\n var typeStr = objToString.call(source);\n\n if (typeStr === '[object Array]') {\n result = [];\n\n for (var i = 0, len = source.length; i < len; i++) {\n result[i] = clone(source[i]);\n }\n } else if (TYPED_ARRAY[typeStr]) {\n var Ctor = source.constructor;\n\n if (source.constructor.from) {\n result = Ctor.from(source);\n } else {\n result = new Ctor(source.length);\n\n for (var i = 0, len = source.length; i < len; i++) {\n result[i] = clone(source[i]);\n }\n }\n } else if (!BUILTIN_OBJECT[typeStr] && !isPrimitive(source) && !isDom(source)) {\n result = {};\n\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n result[key] = clone(source[key]);\n }\n }\n }\n\n return result;\n}\n/**\n * @memberOf module:zrender/core/util\n * @param {*} target\n * @param {*} source\n * @param {boolean} [overwrite=false]\n */\n\n\nfunction merge(target, source, overwrite) {\n // We should escapse that source is string\n // and enter for ... in ...\n if (!isObject(source) || !isObject(target)) {\n return overwrite ? clone(source) : target;\n }\n\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n var targetProp = target[key];\n var sourceProp = source[key];\n\n if (isObject(sourceProp) && isObject(targetProp) && !isArray(sourceProp) && !isArray(targetProp) && !isDom(sourceProp) && !isDom(targetProp) && !isBuiltInObject(sourceProp) && !isBuiltInObject(targetProp) && !isPrimitive(sourceProp) && !isPrimitive(targetProp)) {\n // 如果需要递归覆盖,就递归调用merge\n merge(targetProp, sourceProp, overwrite);\n } else if (overwrite || !(key in target)) {\n // 否则只处理overwrite为true,或者在目标对象中没有此属性的情况\n // NOTE,在 target[key] 不存在的时候也是直接覆盖\n target[key] = clone(source[key], true);\n }\n }\n }\n\n return target;\n}\n/**\n * @param {Array} targetAndSources The first item is target, and the rests are source.\n * @param {boolean} [overwrite=false]\n * @return {*} target\n */\n\n\nfunction mergeAll(targetAndSources, overwrite) {\n var result = targetAndSources[0];\n\n for (var i = 1, len = targetAndSources.length; i < len; i++) {\n result = merge(result, targetAndSources[i], overwrite);\n }\n\n return result;\n}\n/**\n * @param {*} target\n * @param {*} source\n * @memberOf module:zrender/core/util\n */\n\n\nfunction extend(target, source) {\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n target[key] = source[key];\n }\n }\n\n return target;\n}\n/**\n * @param {*} target\n * @param {*} source\n * @param {boolean} [overlay=false]\n * @memberOf module:zrender/core/util\n */\n\n\nfunction defaults(target, source, overlay) {\n for (var key in source) {\n if (source.hasOwnProperty(key) && (overlay ? source[key] != null : target[key] == null)) {\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nvar createCanvas = function () {\n return methods.createCanvas();\n};\n\nmethods.createCanvas = function () {\n return document.createElement('canvas');\n}; // FIXME\n\n\nvar _ctx;\n\nfunction getContext() {\n if (!_ctx) {\n // Use util.createCanvas instead of createCanvas\n // because createCanvas may be overwritten in different environment\n _ctx = createCanvas().getContext('2d');\n }\n\n return _ctx;\n}\n/**\n * 查询数组中元素的index\n * @memberOf module:zrender/core/util\n */\n\n\nfunction indexOf(array, value) {\n if (array) {\n if (array.indexOf) {\n return array.indexOf(value);\n }\n\n for (var i = 0, len = array.length; i < len; i++) {\n if (array[i] === value) {\n return i;\n }\n }\n }\n\n return -1;\n}\n/**\n * 构造类继承关系\n *\n * @memberOf module:zrender/core/util\n * @param {Function} clazz 源类\n * @param {Function} baseClazz 基类\n */\n\n\nfunction inherits(clazz, baseClazz) {\n var clazzPrototype = clazz.prototype;\n\n function F() {}\n\n F.prototype = baseClazz.prototype;\n clazz.prototype = new F();\n\n for (var prop in clazzPrototype) {\n clazz.prototype[prop] = clazzPrototype[prop];\n }\n\n clazz.prototype.constructor = clazz;\n clazz.superClass = baseClazz;\n}\n/**\n * @memberOf module:zrender/core/util\n * @param {Object|Function} target\n * @param {Object|Function} sorce\n * @param {boolean} overlay\n */\n\n\nfunction mixin(target, source, overlay) {\n target = 'prototype' in target ? target.prototype : target;\n source = 'prototype' in source ? source.prototype : source;\n defaults(target, source, overlay);\n}\n/**\n * Consider typed array.\n * @param {Array|TypedArray} data\n */\n\n\nfunction isArrayLike(data) {\n if (!data) {\n return;\n }\n\n if (typeof data == 'string') {\n return false;\n }\n\n return typeof data.length == 'number';\n}\n/**\n * 数组或对象遍历\n * @memberOf module:zrender/core/util\n * @param {Object|Array} obj\n * @param {Function} cb\n * @param {*} [context]\n */\n\n\nfunction each(obj, cb, context) {\n if (!(obj && cb)) {\n return;\n }\n\n if (obj.forEach && obj.forEach === nativeForEach) {\n obj.forEach(cb, context);\n } else if (obj.length === +obj.length) {\n for (var i = 0, len = obj.length; i < len; i++) {\n cb.call(context, obj[i], i, obj);\n }\n } else {\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n cb.call(context, obj[key], key, obj);\n }\n }\n }\n}\n/**\n * 数组映射\n * @memberOf module:zrender/core/util\n * @param {Array} obj\n * @param {Function} cb\n * @param {*} [context]\n * @return {Array}\n */\n\n\nfunction map(obj, cb, context) {\n if (!(obj && cb)) {\n return;\n }\n\n if (obj.map && obj.map === nativeMap) {\n return obj.map(cb, context);\n } else {\n var result = [];\n\n for (var i = 0, len = obj.length; i < len; i++) {\n result.push(cb.call(context, obj[i], i, obj));\n }\n\n return result;\n }\n}\n/**\n * @memberOf module:zrender/core/util\n * @param {Array} obj\n * @param {Function} cb\n * @param {Object} [memo]\n * @param {*} [context]\n * @return {Array}\n */\n\n\nfunction reduce(obj, cb, memo, context) {\n if (!(obj && cb)) {\n return;\n }\n\n if (obj.reduce && obj.reduce === nativeReduce) {\n return obj.reduce(cb, memo, context);\n } else {\n for (var i = 0, len = obj.length; i < len; i++) {\n memo = cb.call(context, memo, obj[i], i, obj);\n }\n\n return memo;\n }\n}\n/**\n * 数组过滤\n * @memberOf module:zrender/core/util\n * @param {Array} obj\n * @param {Function} cb\n * @param {*} [context]\n * @return {Array}\n */\n\n\nfunction filter(obj, cb, context) {\n if (!(obj && cb)) {\n return;\n }\n\n if (obj.filter && obj.filter === nativeFilter) {\n return obj.filter(cb, context);\n } else {\n var result = [];\n\n for (var i = 0, len = obj.length; i < len; i++) {\n if (cb.call(context, obj[i], i, obj)) {\n result.push(obj[i]);\n }\n }\n\n return result;\n }\n}\n/**\n * 数组项查找\n * @memberOf module:zrender/core/util\n * @param {Array} obj\n * @param {Function} cb\n * @param {*} [context]\n * @return {*}\n */\n\n\nfunction find(obj, cb, context) {\n if (!(obj && cb)) {\n return;\n }\n\n for (var i = 0, len = obj.length; i < len; i++) {\n if (cb.call(context, obj[i], i, obj)) {\n return obj[i];\n }\n }\n}\n/**\n * @memberOf module:zrender/core/util\n * @param {Function} func\n * @param {*} context\n * @return {Function}\n */\n\n\nfunction bind(func, context) {\n var args = nativeSlice.call(arguments, 2);\n return function () {\n return func.apply(context, args.concat(nativeSlice.call(arguments)));\n };\n}\n/**\n * @memberOf module:zrender/core/util\n * @param {Function} func\n * @return {Function}\n */\n\n\nfunction curry(func) {\n var args = nativeSlice.call(arguments, 1);\n return function () {\n return func.apply(this, args.concat(nativeSlice.call(arguments)));\n };\n}\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\n\n\nfunction isArray(value) {\n return objToString.call(value) === '[object Array]';\n}\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\n\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\n\n\nfunction isString(value) {\n return objToString.call(value) === '[object String]';\n}\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\n\n\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return type === 'function' || !!value && type == 'object';\n}\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\n\n\nfunction isBuiltInObject(value) {\n return !!BUILTIN_OBJECT[objToString.call(value)];\n}\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\n\n\nfunction isDom(value) {\n return typeof value === 'object' && typeof value.nodeType === 'number' && typeof value.ownerDocument === 'object';\n}\n/**\n * Whether is exactly NaN. Notice isNaN('a') returns true.\n * @param {*} value\n * @return {boolean}\n */\n\n\nfunction eqNaN(value) {\n return value !== value;\n}\n/**\n * If value1 is not null, then return value1, otherwise judget rest of values.\n * Low performance.\n * @memberOf module:zrender/core/util\n * @return {*} Final value\n */\n\n\nfunction retrieve(values) {\n for (var i = 0, len = arguments.length; i < len; i++) {\n if (arguments[i] != null) {\n return arguments[i];\n }\n }\n}\n\nfunction retrieve2(value0, value1) {\n return value0 != null ? value0 : value1;\n}\n\nfunction retrieve3(value0, value1, value2) {\n return value0 != null ? value0 : value1 != null ? value1 : value2;\n}\n/**\n * @memberOf module:zrender/core/util\n * @param {Array} arr\n * @param {number} startIndex\n * @param {number} endIndex\n * @return {Array}\n */\n\n\nfunction slice() {\n return Function.call.apply(nativeSlice, arguments);\n}\n/**\n * Normalize css liked array configuration\n * e.g.\n * 3 => [3, 3, 3, 3]\n * [4, 2] => [4, 2, 4, 2]\n * [4, 3, 2] => [4, 3, 2, 3]\n * @param {number|Array.} val\n * @return {Array.}\n */\n\n\nfunction normalizeCssArray(val) {\n if (typeof val === 'number') {\n return [val, val, val, val];\n }\n\n var len = val.length;\n\n if (len === 2) {\n // vertical | horizontal\n return [val[0], val[1], val[0], val[1]];\n } else if (len === 3) {\n // top | horizontal | bottom\n return [val[0], val[1], val[2], val[1]];\n }\n\n return val;\n}\n/**\n * @memberOf module:zrender/core/util\n * @param {boolean} condition\n * @param {string} message\n */\n\n\nfunction assert(condition, message) {\n if (!condition) {\n throw new Error(message);\n }\n}\n\nvar primitiveKey = '__ec_primitive__';\n/**\n * Set an object as primitive to be ignored traversing children in clone or merge\n */\n\nfunction setAsPrimitive(obj) {\n obj[primitiveKey] = true;\n}\n\nfunction isPrimitive(obj) {\n return obj[primitiveKey];\n}\n/**\n * @constructor\n * @param {Object} obj Only apply `ownProperty`.\n */\n\n\nfunction HashMap(obj) {\n obj && each(obj, function (value, key) {\n this.set(key, value);\n }, this);\n} // Add prefix to avoid conflict with Object.prototype.\n\n\nvar HASH_MAP_PREFIX = '_ec_';\nvar HASH_MAP_PREFIX_LENGTH = 4;\nHashMap.prototype = {\n constructor: HashMap,\n // Do not provide `has` method to avoid defining what is `has`.\n // (We usually treat `null` and `undefined` as the same, different\n // from ES6 Map).\n get: function (key) {\n return this[HASH_MAP_PREFIX + key];\n },\n set: function (key, value) {\n this[HASH_MAP_PREFIX + key] = value; // Comparing with invocation chaining, `return value` is more commonly\n // used in this case: `var someVal = map.set('a', genVal());`\n\n return value;\n },\n // Although util.each can be performed on this hashMap directly, user\n // should not use the exposed keys, who are prefixed.\n each: function (cb, context) {\n context !== void 0 && (cb = bind(cb, context));\n\n for (var prefixedKey in this) {\n this.hasOwnProperty(prefixedKey) && cb(this[prefixedKey], prefixedKey.slice(HASH_MAP_PREFIX_LENGTH));\n }\n },\n // Do not use this method if performance sensitive.\n removeKey: function (key) {\n delete this[HASH_MAP_PREFIX + key];\n }\n};\n\nfunction createHashMap(obj) {\n return new HashMap(obj);\n}\n\nfunction noop() {}\n\nexports.$override = $override;\nexports.clone = clone;\nexports.merge = merge;\nexports.mergeAll = mergeAll;\nexports.extend = extend;\nexports.defaults = defaults;\nexports.createCanvas = createCanvas;\nexports.getContext = getContext;\nexports.indexOf = indexOf;\nexports.inherits = inherits;\nexports.mixin = mixin;\nexports.isArrayLike = isArrayLike;\nexports.each = each;\nexports.map = map;\nexports.reduce = reduce;\nexports.filter = filter;\nexports.find = find;\nexports.bind = bind;\nexports.curry = curry;\nexports.isArray = isArray;\nexports.isFunction = isFunction;\nexports.isString = isString;\nexports.isObject = isObject;\nexports.isBuiltInObject = isBuiltInObject;\nexports.isDom = isDom;\nexports.eqNaN = eqNaN;\nexports.retrieve = retrieve;\nexports.retrieve2 = retrieve2;\nexports.retrieve3 = retrieve3;\nexports.slice = slice;\nexports.normalizeCssArray = normalizeCssArray;\nexports.assert = assert;\nexports.setAsPrimitive = setAsPrimitive;\nexports.isPrimitive = isPrimitive;\nexports.createHashMap = createHashMap;\nexports.noop = noop;","/**\n * Traverse the tree from bottom to top and do something\n * @param {module:echarts/data/Tree~TreeNode} root The real root of the tree\n * @param {Function} callback\n */\nfunction eachAfter(root, callback, separation) {\n var nodes = [root];\n var next = [];\n var node;\n\n while (node = nodes.pop()) {\n // jshint ignore:line\n next.push(node);\n\n if (node.isExpand) {\n var children = node.children;\n\n if (children.length) {\n for (var i = 0; i < children.length; i++) {\n nodes.push(children[i]);\n }\n }\n }\n }\n\n while (node = next.pop()) {\n // jshint ignore:line\n callback(node, separation);\n }\n}\n/**\n * Traverse the tree from top to bottom and do something\n * @param {module:echarts/data/Tree~TreeNode} root The real root of the tree\n * @param {Function} callback\n */\n\n\nfunction eachBefore(root, callback) {\n var nodes = [root];\n var node;\n\n while (node = nodes.pop()) {\n // jshint ignore:line\n callback(node);\n\n if (node.isExpand) {\n var children = node.children;\n\n if (children.length) {\n for (var i = children.length - 1; i >= 0; i--) {\n nodes.push(children[i]);\n }\n }\n }\n }\n}\n\nexports.eachAfter = eachAfter;\nexports.eachBefore = eachBefore;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar each = zrUtil.each;\nvar ATTR = '\\0_ec_hist_store';\n/**\n * @param {module:echarts/model/Global} ecModel\n * @param {Object} newSnapshot {dataZoomId, batch: [payloadInfo, ...]}\n */\n\nfunction push(ecModel, newSnapshot) {\n var store = giveStore(ecModel); // If previous dataZoom can not be found,\n // complete an range with current range.\n\n each(newSnapshot, function (batchItem, dataZoomId) {\n var i = store.length - 1;\n\n for (; i >= 0; i--) {\n var snapshot = store[i];\n\n if (snapshot[dataZoomId]) {\n break;\n }\n }\n\n if (i < 0) {\n // No origin range set, create one by current range.\n var dataZoomModel = ecModel.queryComponents({\n mainType: 'dataZoom',\n subType: 'select',\n id: dataZoomId\n })[0];\n\n if (dataZoomModel) {\n var percentRange = dataZoomModel.getPercentRange();\n store[0][dataZoomId] = {\n dataZoomId: dataZoomId,\n start: percentRange[0],\n end: percentRange[1]\n };\n }\n }\n });\n store.push(newSnapshot);\n}\n/**\n * @param {module:echarts/model/Global} ecModel\n * @return {Object} snapshot\n */\n\n\nfunction pop(ecModel) {\n var store = giveStore(ecModel);\n var head = store[store.length - 1];\n store.length > 1 && store.pop(); // Find top for all dataZoom.\n\n var snapshot = {};\n each(head, function (batchItem, dataZoomId) {\n for (var i = store.length - 1; i >= 0; i--) {\n var batchItem = store[i][dataZoomId];\n\n if (batchItem) {\n snapshot[dataZoomId] = batchItem;\n break;\n }\n }\n });\n return snapshot;\n}\n/**\n * @param {module:echarts/model/Global} ecModel\n */\n\n\nfunction clear(ecModel) {\n ecModel[ATTR] = null;\n}\n/**\n * @param {module:echarts/model/Global} ecModel\n * @return {number} records. always >= 1.\n */\n\n\nfunction count(ecModel) {\n return giveStore(ecModel).length;\n}\n/**\n * [{key: dataZoomId, value: {dataZoomId, range}}, ...]\n * History length of each dataZoom may be different.\n * this._history[0] is used to store origin range.\n * @type {Array.}\n */\n\n\nfunction giveStore(ecModel) {\n var store = ecModel[ATTR];\n\n if (!store) {\n store = ecModel[ATTR] = [{}];\n }\n\n return store;\n}\n\nexports.push = push;\nexports.pop = pop;\nexports.clear = clear;\nexports.count = count;","var zrUtil = require(\"zrender/lib/core/util\");\n\n/**\n * Data selectable mixin for chart series.\n * To eanble data select, option of series must have `selectedMode`.\n * And each data item will use `selected` to toggle itself selected status\n */\nvar _default = {\n updateSelectedMap: function (targetList) {\n this._targetList = targetList.slice();\n this._selectTargetMap = zrUtil.reduce(targetList || [], function (targetMap, target) {\n targetMap.set(target.name, target);\n return targetMap;\n }, zrUtil.createHashMap());\n },\n\n /**\n * Either name or id should be passed as input here.\n * If both of them are defined, id is used.\n *\n * @param {string|undefined} name name of data\n * @param {number|undefined} id dataIndex of data\n */\n // PENGING If selectedMode is null ?\n select: function (name, id) {\n var target = id != null ? this._targetList[id] : this._selectTargetMap.get(name);\n var selectedMode = this.get('selectedMode');\n\n if (selectedMode === 'single') {\n this._selectTargetMap.each(function (target) {\n target.selected = false;\n });\n }\n\n target && (target.selected = true);\n },\n\n /**\n * Either name or id should be passed as input here.\n * If both of them are defined, id is used.\n *\n * @param {string|undefined} name name of data\n * @param {number|undefined} id dataIndex of data\n */\n unSelect: function (name, id) {\n var target = id != null ? this._targetList[id] : this._selectTargetMap.get(name); // var selectedMode = this.get('selectedMode');\n // selectedMode !== 'single' && target && (target.selected = false);\n\n target && (target.selected = false);\n },\n\n /**\n * Either name or id should be passed as input here.\n * If both of them are defined, id is used.\n *\n * @param {string|undefined} name name of data\n * @param {number|undefined} id dataIndex of data\n */\n toggleSelected: function (name, id) {\n var target = id != null ? this._targetList[id] : this._selectTargetMap.get(name);\n\n if (target != null) {\n this[target.selected ? 'unSelect' : 'select'](name, id);\n return target.selected;\n }\n },\n\n /**\n * Either name or id should be passed as input here.\n * If both of them are defined, id is used.\n *\n * @param {string|undefined} name name of data\n * @param {number|undefined} id dataIndex of data\n */\n isSelected: function (name, id) {\n var target = id != null ? this._targetList[id] : this._selectTargetMap.get(name);\n return target && target.selected;\n }\n};\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar defaultOption = {\n show: true,\n zlevel: 0,\n // 一级层叠\n z: 0,\n // 二级层叠\n // 反向坐标轴\n inverse: false,\n // 坐标轴名字,默认为空\n name: '',\n // 坐标轴名字位置,支持'start' | 'middle' | 'end'\n nameLocation: 'end',\n // 坐标轴名字旋转,degree。\n nameRotate: null,\n // Adapt to axis rotate, when nameLocation is 'middle'.\n nameTruncate: {\n maxWidth: null,\n ellipsis: '...',\n placeholder: '.'\n },\n // 坐标轴文字样式,默认取全局样式\n nameTextStyle: {},\n // 文字与轴线距离\n nameGap: 15,\n silent: false,\n // Default false to support tooltip.\n triggerEvent: false,\n // Default false to avoid legacy user event listener fail.\n tooltip: {\n show: false\n },\n axisPointer: {},\n // 坐标轴线\n axisLine: {\n // 默认显示,属性show控制显示与否\n show: true,\n onZero: true,\n onZeroAxisIndex: null,\n // 属性lineStyle控制线条样式\n lineStyle: {\n color: '#333',\n width: 1,\n type: 'solid'\n },\n // 坐标轴两端的箭头\n symbol: ['none', 'none'],\n symbolSize: [10, 15]\n },\n // 坐标轴小标记\n axisTick: {\n // 属性show控制显示与否,默认显示\n show: true,\n // 控制小标记是否在grid里\n inside: false,\n // 属性length控制线长\n length: 5,\n // 属性lineStyle控制线条样式\n lineStyle: {\n width: 1\n }\n },\n // 坐标轴文本标签,详见axis.axisLabel\n axisLabel: {\n show: true,\n // 控制文本标签是否在grid里\n inside: false,\n rotate: 0,\n showMinLabel: null,\n // true | false | null (auto)\n showMaxLabel: null,\n // true | false | null (auto)\n margin: 8,\n // formatter: null,\n // 其余属性默认使用全局文本样式,详见TEXTSTYLE\n fontSize: 12\n },\n // 分隔线\n splitLine: {\n // 默认显示,属性show控制显示与否\n show: true,\n // 属性lineStyle(详见lineStyle)控制线条样式\n lineStyle: {\n color: ['#ccc'],\n width: 1,\n type: 'solid'\n }\n },\n // 分隔区域\n splitArea: {\n // 默认不显示,属性show控制显示与否\n show: false,\n // 属性areaStyle(详见areaStyle)控制区域样式\n areaStyle: {\n color: ['rgba(250,250,250,0.3)', 'rgba(200,200,200,0.3)']\n }\n }\n};\nvar axisDefault = {};\naxisDefault.categoryAxis = zrUtil.merge({\n // 类目起始和结束两端空白策略\n boundaryGap: true,\n // splitArea: {\n // show: false\n // },\n splitLine: {\n show: false\n },\n // 坐标轴小标记\n axisTick: {\n // If tick is align with label when boundaryGap is true\n alignWithLabel: false,\n interval: 'auto'\n },\n // 坐标轴文本标签,详见axis.axisLabel\n axisLabel: {\n interval: 'auto'\n }\n}, defaultOption);\naxisDefault.valueAxis = zrUtil.merge({\n // 数值起始和结束两端空白策略\n boundaryGap: [0, 0],\n // 最小值, 设置成 'dataMin' 则从数据中计算最小值\n // min: null,\n // 最大值,设置成 'dataMax' 则从数据中计算最大值\n // max: null,\n // Readonly prop, specifies start value of the range when using data zoom.\n // rangeStart: null\n // Readonly prop, specifies end value of the range when using data zoom.\n // rangeEnd: null\n // 脱离0值比例,放大聚焦到最终_min,_max区间\n // scale: false,\n // 分割段数,默认为5\n splitNumber: 5 // Minimum interval\n // minInterval: null\n // maxInterval: null\n\n}, defaultOption); // FIXME\n\naxisDefault.timeAxis = zrUtil.defaults({\n scale: true,\n min: 'dataMin',\n max: 'dataMax'\n}, axisDefault.valueAxis);\naxisDefault.logAxis = zrUtil.defaults({\n scale: true,\n logBase: 10\n}, axisDefault.valueAxis);\nvar _default = axisDefault;\nmodule.exports = _default;","var _util = require(\"zrender/lib/core/util\");\n\nvar createHashMap = _util.createHashMap;\n\n/**\n * @file Visual encoding for themeRiver view\n * @author Deqing Li(annong035@gmail.com)\n */\nfunction _default(ecModel) {\n ecModel.eachSeriesByType('themeRiver', function (seriesModel) {\n var data = seriesModel.getData();\n var rawData = seriesModel.getRawData();\n var colorList = seriesModel.get('color');\n var idxMap = createHashMap();\n data.each(function (idx) {\n idxMap.set(data.getRawIndex(idx), idx);\n });\n rawData.each(function (rawIndex) {\n var name = rawData.getName(rawIndex);\n var color = colorList[(seriesModel.nameMap.get(name) - 1) % colorList.length];\n rawData.setItemVisual(rawIndex, 'color', color);\n var idx = idxMap.get(rawIndex);\n\n if (idx != null) {\n data.setItemVisual(idx, 'color', color);\n }\n });\n });\n}\n\nmodule.exports = _default;","var _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar SeriesModel = require(\"../../model/Series\");\n\nvar List = require(\"../../data/List\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _format = require(\"../../util/format\");\n\nvar encodeHTML = _format.encodeHTML;\n\nvar CoordinateSystem = require(\"../../CoordinateSystem\");\n\n// Convert [ [{coord: []}, {coord: []}] ]\n// to [ { coords: [[]] } ]\nfunction preprocessOption(seriesOpt) {\n var data = seriesOpt.data;\n\n if (data && data[0] && data[0][0] && data[0][0].coord) {\n seriesOpt.data = zrUtil.map(data, function (itemOpt) {\n var coords = [itemOpt[0].coord, itemOpt[1].coord];\n var target = {\n coords: coords\n };\n\n if (itemOpt[0].name) {\n target.fromName = itemOpt[0].name;\n }\n\n if (itemOpt[1].name) {\n target.toName = itemOpt[1].name;\n }\n\n return zrUtil.mergeAll([target, itemOpt[0], itemOpt[1]]);\n });\n }\n}\n\nvar LinesSeries = SeriesModel.extend({\n type: 'series.lines',\n dependencies: ['grid', 'polar'],\n visualColorAccessPath: 'lineStyle.normal.color',\n init: function (option) {\n // Not using preprocessor because mergeOption may not have series.type\n preprocessOption(option);\n LinesSeries.superApply(this, 'init', arguments);\n },\n mergeOption: function (option) {\n preprocessOption(option);\n LinesSeries.superApply(this, 'mergeOption', arguments);\n },\n getInitialData: function (option, ecModel) {\n var lineData = new List(['value'], this);\n lineData.hasItemOption = false;\n lineData.initData(option.data, [], function (dataItem, dimName, dataIndex, dimIndex) {\n // dataItem is simply coords\n if (dataItem instanceof Array) {\n return NaN;\n } else {\n lineData.hasItemOption = true;\n var value = dataItem.value;\n\n if (value != null) {\n return value instanceof Array ? value[dimIndex] : value;\n }\n }\n });\n return lineData;\n },\n formatTooltip: function (dataIndex) {\n var data = this.getData();\n var itemModel = data.getItemModel(dataIndex);\n var name = itemModel.get('name');\n\n if (name) {\n return name;\n }\n\n var fromName = itemModel.get('fromName');\n var toName = itemModel.get('toName');\n var html = [];\n fromName != null && html.push(fromName);\n toName != null && html.push(toName);\n return encodeHTML(html.join(' > '));\n },\n defaultOption: {\n coordinateSystem: 'geo',\n zlevel: 0,\n z: 2,\n legendHoverLink: true,\n hoverAnimation: true,\n // Cartesian coordinate system\n xAxisIndex: 0,\n yAxisIndex: 0,\n symbol: ['none', 'none'],\n symbolSize: [10, 10],\n // Geo coordinate system\n geoIndex: 0,\n effect: {\n show: false,\n period: 4,\n // Animation delay. support callback\n // delay: 0,\n // If move with constant speed px/sec\n // period will be ignored if this property is > 0,\n constantSpeed: 0,\n symbol: 'circle',\n symbolSize: 3,\n loop: true,\n // Length of trail, 0 - 1\n trailLength: 0.2 // Same with lineStyle.normal.color\n // color\n\n },\n large: false,\n // Available when large is true\n largeThreshold: 2000,\n // If lines are polyline\n // polyline not support curveness, label, animation\n polyline: false,\n label: {\n normal: {\n show: false,\n position: 'end' // distance: 5,\n // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调\n\n }\n },\n lineStyle: {\n normal: {\n opacity: 0.5\n }\n }\n }\n});\nvar _default = LinesSeries;\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar formatUtil = require(\"../../util/format\");\n\nvar layout = require(\"../../util/layout\");\n\nvar VisualMapping = require(\"../../visual/VisualMapping\");\n\nvar _default = echarts.extendComponentView({\n type: 'visualMap',\n\n /**\n * @readOnly\n * @type {Object}\n */\n autoPositionValues: {\n left: 1,\n right: 1,\n top: 1,\n bottom: 1\n },\n init: function (ecModel, api) {\n /**\n * @readOnly\n * @type {module:echarts/model/Global}\n */\n this.ecModel = ecModel;\n /**\n * @readOnly\n * @type {module:echarts/ExtensionAPI}\n */\n\n this.api = api;\n /**\n * @readOnly\n * @type {module:echarts/component/visualMap/visualMapModel}\n */\n\n this.visualMapModel;\n },\n\n /**\n * @protected\n */\n render: function (visualMapModel, ecModel, api, payload) {\n this.visualMapModel = visualMapModel;\n\n if (visualMapModel.get('show') === false) {\n this.group.removeAll();\n return;\n }\n\n this.doRender.apply(this, arguments);\n },\n\n /**\n * @protected\n */\n renderBackground: function (group) {\n var visualMapModel = this.visualMapModel;\n var padding = formatUtil.normalizeCssArray(visualMapModel.get('padding') || 0);\n var rect = group.getBoundingRect();\n group.add(new graphic.Rect({\n z2: -1,\n // Lay background rect on the lowest layer.\n silent: true,\n shape: {\n x: rect.x - padding[3],\n y: rect.y - padding[0],\n width: rect.width + padding[3] + padding[1],\n height: rect.height + padding[0] + padding[2]\n },\n style: {\n fill: visualMapModel.get('backgroundColor'),\n stroke: visualMapModel.get('borderColor'),\n lineWidth: visualMapModel.get('borderWidth')\n }\n }));\n },\n\n /**\n * @protected\n * @param {number} targetValue can be Infinity or -Infinity\n * @param {string=} visualCluster Only can be 'color' 'opacity' 'symbol' 'symbolSize'\n * @param {Object} [opts]\n * @param {string=} [opts.forceState] Specify state, instead of using getValueState method.\n * @param {string=} [opts.convertOpacityToAlpha=false] For color gradient in controller widget.\n * @return {*} Visual value.\n */\n getControllerVisual: function (targetValue, visualCluster, opts) {\n opts = opts || {};\n var forceState = opts.forceState;\n var visualMapModel = this.visualMapModel;\n var visualObj = {}; // Default values.\n\n if (visualCluster === 'symbol') {\n visualObj.symbol = visualMapModel.get('itemSymbol');\n }\n\n if (visualCluster === 'color') {\n var defaultColor = visualMapModel.get('contentColor');\n visualObj.color = defaultColor;\n }\n\n function getter(key) {\n return visualObj[key];\n }\n\n function setter(key, value) {\n visualObj[key] = value;\n }\n\n var mappings = visualMapModel.controllerVisuals[forceState || visualMapModel.getValueState(targetValue)];\n var visualTypes = VisualMapping.prepareVisualTypes(mappings);\n zrUtil.each(visualTypes, function (type) {\n var visualMapping = mappings[type];\n\n if (opts.convertOpacityToAlpha && type === 'opacity') {\n type = 'colorAlpha';\n visualMapping = mappings.__alphaForOpacity;\n }\n\n if (VisualMapping.dependsOn(type, visualCluster)) {\n visualMapping && visualMapping.applyVisual(targetValue, getter, setter);\n }\n });\n return visualObj[visualCluster];\n },\n\n /**\n * @protected\n */\n positionGroup: function (group) {\n var model = this.visualMapModel;\n var api = this.api;\n layout.positionElement(group, model.getBoxLayoutParams(), {\n width: api.getWidth(),\n height: api.getHeight()\n });\n },\n\n /**\n * @protected\n * @abstract\n */\n doRender: zrUtil.noop\n});\n\nmodule.exports = _default;","var _config = require(\"../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/**\n * Graph data structure\n *\n * @module echarts/data/Graph\n * @author Yi Shen(https://www.github.com/pissang)\n */\n// id may be function name of Object, add a prefix to avoid this problem.\nfunction generateNodeKey(id) {\n return '_EC_' + id;\n}\n/**\n * @alias module:echarts/data/Graph\n * @constructor\n * @param {boolean} directed\n */\n\n\nvar Graph = function (directed) {\n /**\n * 是否是有向图\n * @type {boolean}\n * @private\n */\n this._directed = directed || false;\n /**\n * @type {Array.}\n * @readOnly\n */\n\n this.nodes = [];\n /**\n * @type {Array.}\n * @readOnly\n */\n\n this.edges = [];\n /**\n * @type {Object.}\n * @private\n */\n\n this._nodesMap = {};\n /**\n * @type {Object.}\n * @private\n */\n\n this._edgesMap = {};\n /**\n * @type {module:echarts/data/List}\n * @readOnly\n */\n\n this.data;\n /**\n * @type {module:echarts/data/List}\n * @readOnly\n */\n\n this.edgeData;\n};\n\nvar graphProto = Graph.prototype;\n/**\n * @type {string}\n */\n\ngraphProto.type = 'graph';\n/**\n * If is directed graph\n * @return {boolean}\n */\n\ngraphProto.isDirected = function () {\n return this._directed;\n};\n/**\n * Add a new node\n * @param {string} id\n * @param {number} [dataIndex]\n */\n\n\ngraphProto.addNode = function (id, dataIndex) {\n id = id || '' + dataIndex;\n var nodesMap = this._nodesMap;\n\n if (nodesMap[generateNodeKey(id)]) {\n return;\n }\n\n var node = new Node(id, dataIndex);\n node.hostGraph = this;\n this.nodes.push(node);\n nodesMap[generateNodeKey(id)] = node;\n return node;\n};\n/**\n * Get node by data index\n * @param {number} dataIndex\n * @return {module:echarts/data/Graph~Node}\n */\n\n\ngraphProto.getNodeByIndex = function (dataIndex) {\n var rawIdx = this.data.getRawIndex(dataIndex);\n return this.nodes[rawIdx];\n};\n/**\n * Get node by id\n * @param {string} id\n * @return {module:echarts/data/Graph.Node}\n */\n\n\ngraphProto.getNodeById = function (id) {\n return this._nodesMap[generateNodeKey(id)];\n};\n/**\n * Add a new edge\n * @param {number|string|module:echarts/data/Graph.Node} n1\n * @param {number|string|module:echarts/data/Graph.Node} n2\n * @param {number} [dataIndex=-1]\n * @return {module:echarts/data/Graph.Edge}\n */\n\n\ngraphProto.addEdge = function (n1, n2, dataIndex) {\n var nodesMap = this._nodesMap;\n var edgesMap = this._edgesMap; // PNEDING\n\n if (typeof n1 === 'number') {\n n1 = this.nodes[n1];\n }\n\n if (typeof n2 === 'number') {\n n2 = this.nodes[n2];\n }\n\n if (!(n1 instanceof Node)) {\n n1 = nodesMap[generateNodeKey(n1)];\n }\n\n if (!(n2 instanceof Node)) {\n n2 = nodesMap[generateNodeKey(n2)];\n }\n\n if (!n1 || !n2) {\n return;\n }\n\n var key = n1.id + '-' + n2.id; // PENDING\n\n if (edgesMap[key]) {\n return;\n }\n\n var edge = new Edge(n1, n2, dataIndex);\n edge.hostGraph = this;\n\n if (this._directed) {\n n1.outEdges.push(edge);\n n2.inEdges.push(edge);\n }\n\n n1.edges.push(edge);\n\n if (n1 !== n2) {\n n2.edges.push(edge);\n }\n\n this.edges.push(edge);\n edgesMap[key] = edge;\n return edge;\n};\n/**\n * Get edge by data index\n * @param {number} dataIndex\n * @return {module:echarts/data/Graph~Node}\n */\n\n\ngraphProto.getEdgeByIndex = function (dataIndex) {\n var rawIdx = this.edgeData.getRawIndex(dataIndex);\n return this.edges[rawIdx];\n};\n/**\n * Get edge by two linked nodes\n * @param {module:echarts/data/Graph.Node|string} n1\n * @param {module:echarts/data/Graph.Node|string} n2\n * @return {module:echarts/data/Graph.Edge}\n */\n\n\ngraphProto.getEdge = function (n1, n2) {\n if (n1 instanceof Node) {\n n1 = n1.id;\n }\n\n if (n2 instanceof Node) {\n n2 = n2.id;\n }\n\n var edgesMap = this._edgesMap;\n\n if (this._directed) {\n return edgesMap[n1 + '-' + n2];\n } else {\n return edgesMap[n1 + '-' + n2] || edgesMap[n2 + '-' + n1];\n }\n};\n/**\n * Iterate all nodes\n * @param {Function} cb\n * @param {*} [context]\n */\n\n\ngraphProto.eachNode = function (cb, context) {\n var nodes = this.nodes;\n var len = nodes.length;\n\n for (var i = 0; i < len; i++) {\n if (nodes[i].dataIndex >= 0) {\n cb.call(context, nodes[i], i);\n }\n }\n};\n/**\n * Iterate all edges\n * @param {Function} cb\n * @param {*} [context]\n */\n\n\ngraphProto.eachEdge = function (cb, context) {\n var edges = this.edges;\n var len = edges.length;\n\n for (var i = 0; i < len; i++) {\n if (edges[i].dataIndex >= 0 && edges[i].node1.dataIndex >= 0 && edges[i].node2.dataIndex >= 0) {\n cb.call(context, edges[i], i);\n }\n }\n};\n/**\n * Breadth first traverse\n * @param {Function} cb\n * @param {module:echarts/data/Graph.Node} startNode\n * @param {string} [direction='none'] 'none'|'in'|'out'\n * @param {*} [context]\n */\n\n\ngraphProto.breadthFirstTraverse = function (cb, startNode, direction, context) {\n if (!(startNode instanceof Node)) {\n startNode = this._nodesMap[generateNodeKey(startNode)];\n }\n\n if (!startNode) {\n return;\n }\n\n var edgeType = direction === 'out' ? 'outEdges' : direction === 'in' ? 'inEdges' : 'edges';\n\n for (var i = 0; i < this.nodes.length; i++) {\n this.nodes[i].__visited = false;\n }\n\n if (cb.call(context, startNode, null)) {\n return;\n }\n\n var queue = [startNode];\n\n while (queue.length) {\n var currentNode = queue.shift();\n var edges = currentNode[edgeType];\n\n for (var i = 0; i < edges.length; i++) {\n var e = edges[i];\n var otherNode = e.node1 === currentNode ? e.node2 : e.node1;\n\n if (!otherNode.__visited) {\n if (cb.call(context, otherNode, currentNode)) {\n // Stop traversing\n return;\n }\n\n queue.push(otherNode);\n otherNode.__visited = true;\n }\n }\n }\n}; // TODO\n// graphProto.depthFirstTraverse = function (\n// cb, startNode, direction, context\n// ) {\n// };\n// Filter update\n\n\ngraphProto.update = function () {\n var data = this.data;\n var edgeData = this.edgeData;\n var nodes = this.nodes;\n var edges = this.edges;\n\n for (var i = 0, len = nodes.length; i < len; i++) {\n nodes[i].dataIndex = -1;\n }\n\n for (var i = 0, len = data.count(); i < len; i++) {\n nodes[data.getRawIndex(i)].dataIndex = i;\n }\n\n edgeData.filterSelf(function (idx) {\n var edge = edges[edgeData.getRawIndex(idx)];\n return edge.node1.dataIndex >= 0 && edge.node2.dataIndex >= 0;\n }); // Update edge\n\n for (var i = 0, len = edges.length; i < len; i++) {\n edges[i].dataIndex = -1;\n }\n\n for (var i = 0, len = edgeData.count(); i < len; i++) {\n edges[edgeData.getRawIndex(i)].dataIndex = i;\n }\n};\n/**\n * @return {module:echarts/data/Graph}\n */\n\n\ngraphProto.clone = function () {\n var graph = new Graph(this._directed);\n var nodes = this.nodes;\n var edges = this.edges;\n\n for (var i = 0; i < nodes.length; i++) {\n graph.addNode(nodes[i].id, nodes[i].dataIndex);\n }\n\n for (var i = 0; i < edges.length; i++) {\n var e = edges[i];\n graph.addEdge(e.node1.id, e.node2.id, e.dataIndex);\n }\n\n return graph;\n};\n/**\n * @alias module:echarts/data/Graph.Node\n */\n\n\nfunction Node(id, dataIndex) {\n /**\n * @type {string}\n */\n this.id = id == null ? '' : id;\n /**\n * @type {Array.}\n */\n\n this.inEdges = [];\n /**\n * @type {Array.}\n */\n\n this.outEdges = [];\n /**\n * @type {Array.}\n */\n\n this.edges = [];\n /**\n * @type {module:echarts/data/Graph}\n */\n\n this.hostGraph;\n /**\n * @type {number}\n */\n\n this.dataIndex = dataIndex == null ? -1 : dataIndex;\n}\n\nNode.prototype = {\n constructor: Node,\n\n /**\n * @return {number}\n */\n degree: function () {\n return this.edges.length;\n },\n\n /**\n * @return {number}\n */\n inDegree: function () {\n return this.inEdges.length;\n },\n\n /**\n * @return {number}\n */\n outDegree: function () {\n return this.outEdges.length;\n },\n\n /**\n * @param {string} [path]\n * @return {module:echarts/model/Model}\n */\n getModel: function (path) {\n if (this.dataIndex < 0) {\n return;\n }\n\n var graph = this.hostGraph;\n var itemModel = graph.data.getItemModel(this.dataIndex);\n return itemModel.getModel(path);\n }\n};\n/**\n * 图边\n * @alias module:echarts/data/Graph.Edge\n * @param {module:echarts/data/Graph.Node} n1\n * @param {module:echarts/data/Graph.Node} n2\n * @param {number} [dataIndex=-1]\n */\n\nfunction Edge(n1, n2, dataIndex) {\n /**\n * 节点1,如果是有向图则为源节点\n * @type {module:echarts/data/Graph.Node}\n */\n this.node1 = n1;\n /**\n * 节点2,如果是有向图则为目标节点\n * @type {module:echarts/data/Graph.Node}\n */\n\n this.node2 = n2;\n this.dataIndex = dataIndex == null ? -1 : dataIndex;\n}\n/**\n * @param {string} [path]\n * @return {module:echarts/model/Model}\n */\n\n\nEdge.prototype.getModel = function (path) {\n if (this.dataIndex < 0) {\n return;\n }\n\n var graph = this.hostGraph;\n var itemModel = graph.edgeData.getItemModel(this.dataIndex);\n return itemModel.getModel(path);\n};\n\nvar createGraphDataProxyMixin = function (hostName, dataName) {\n return {\n /**\n * @param {string=} [dimension='value'] Default 'value'. can be 'a', 'b', 'c', 'd', 'e'.\n * @return {number}\n */\n getValue: function (dimension) {\n var data = this[hostName][dataName];\n return data.get(data.getDimension(dimension || 'value'), this.dataIndex);\n },\n\n /**\n * @param {Object|string} key\n * @param {*} [value]\n */\n setVisual: function (key, value) {\n this.dataIndex >= 0 && this[hostName][dataName].setItemVisual(this.dataIndex, key, value);\n },\n\n /**\n * @param {string} key\n * @return {boolean}\n */\n getVisual: function (key, ignoreParent) {\n return this[hostName][dataName].getItemVisual(this.dataIndex, key, ignoreParent);\n },\n\n /**\n * @param {Object} layout\n * @return {boolean} [merge=false]\n */\n setLayout: function (layout, merge) {\n this.dataIndex >= 0 && this[hostName][dataName].setItemLayout(this.dataIndex, layout, merge);\n },\n\n /**\n * @return {Object}\n */\n getLayout: function () {\n return this[hostName][dataName].getItemLayout(this.dataIndex);\n },\n\n /**\n * @return {module:zrender/Element}\n */\n getGraphicEl: function () {\n return this[hostName][dataName].getItemGraphicEl(this.dataIndex);\n },\n\n /**\n * @return {number}\n */\n getRawIndex: function () {\n return this[hostName][dataName].getRawIndex(this.dataIndex);\n }\n };\n};\n\nzrUtil.mixin(Node, createGraphDataProxyMixin('hostGraph', 'data'));\nzrUtil.mixin(Edge, createGraphDataProxyMixin('hostGraph', 'edgeData'));\nGraph.Node = Node;\nGraph.Edge = Edge;\nvar _default = Graph;\nmodule.exports = _default;","var graphic = require(\"../../util/graphic\");\n\nvar LineGroup = require(\"./Line\");\n\n/**\n * @module echarts/chart/helper/LineDraw\n */\nfunction isPointNaN(pt) {\n return isNaN(pt[0]) || isNaN(pt[1]);\n}\n\nfunction lineNeedsDraw(pts) {\n return !isPointNaN(pts[0]) && !isPointNaN(pts[1]);\n}\n/**\n * @alias module:echarts/component/marker/LineDraw\n * @constructor\n */\n\n\nfunction LineDraw(ctor) {\n this._ctor = ctor || LineGroup;\n this.group = new graphic.Group();\n}\n\nvar lineDrawProto = LineDraw.prototype;\n/**\n * @param {module:echarts/data/List} lineData\n */\n\nlineDrawProto.updateData = function (lineData) {\n var oldLineData = this._lineData;\n var group = this.group;\n var LineCtor = this._ctor;\n var hostModel = lineData.hostModel;\n var seriesScope = {\n lineStyle: hostModel.getModel('lineStyle.normal').getLineStyle(),\n hoverLineStyle: hostModel.getModel('lineStyle.emphasis').getLineStyle(),\n labelModel: hostModel.getModel('label.normal'),\n hoverLabelModel: hostModel.getModel('label.emphasis')\n };\n lineData.diff(oldLineData).add(function (idx) {\n if (!lineNeedsDraw(lineData.getItemLayout(idx))) {\n return;\n }\n\n var lineGroup = new LineCtor(lineData, idx, seriesScope);\n lineData.setItemGraphicEl(idx, lineGroup);\n group.add(lineGroup);\n }).update(function (newIdx, oldIdx) {\n var lineGroup = oldLineData.getItemGraphicEl(oldIdx);\n\n if (!lineNeedsDraw(lineData.getItemLayout(newIdx))) {\n group.remove(lineGroup);\n return;\n }\n\n if (!lineGroup) {\n lineGroup = new LineCtor(lineData, newIdx, seriesScope);\n } else {\n lineGroup.updateData(lineData, newIdx, seriesScope);\n }\n\n lineData.setItemGraphicEl(newIdx, lineGroup);\n group.add(lineGroup);\n }).remove(function (idx) {\n group.remove(oldLineData.getItemGraphicEl(idx));\n }).execute();\n this._lineData = lineData;\n};\n\nlineDrawProto.updateLayout = function () {\n var lineData = this._lineData;\n lineData.eachItemGraphicEl(function (el, idx) {\n el.updateLayout(lineData, idx);\n }, this);\n};\n\nlineDrawProto.remove = function () {\n this.group.removeAll();\n};\n\nvar _default = LineDraw;\nmodule.exports = _default;","var echarts = require(\"../echarts\");\n\nvar preprocessor = require(\"./visualMap/preprocessor\");\n\nrequire(\"./visualMap/typeDefaulter\");\n\nrequire(\"./visualMap/visualEncoding\");\n\nrequire(\"./visualMap/ContinuousModel\");\n\nrequire(\"./visualMap/ContinuousView\");\n\nrequire(\"./visualMap/visualMapAction\");\n\n/**\n * DataZoom component entry\n */\necharts.registerPreprocessor(preprocessor);","/**\n * 缓动代码来自 https://github.com/sole/tween.js/blob/master/src/Tween.js\n * @see http://sole.github.io/tween.js/examples/03_graphs.html\n * @exports zrender/animation/easing\n */\nvar easing = {\n /**\n * @param {number} k\n * @return {number}\n */\n linear: function (k) {\n return k;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n quadraticIn: function (k) {\n return k * k;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n quadraticOut: function (k) {\n return k * (2 - k);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n quadraticInOut: function (k) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k;\n }\n\n return -0.5 * (--k * (k - 2) - 1);\n },\n // 三次方的缓动(t^3)\n\n /**\n * @param {number} k\n * @return {number}\n */\n cubicIn: function (k) {\n return k * k * k;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n cubicOut: function (k) {\n return --k * k * k + 1;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n cubicInOut: function (k) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k;\n }\n\n return 0.5 * ((k -= 2) * k * k + 2);\n },\n // 四次方的缓动(t^4)\n\n /**\n * @param {number} k\n * @return {number}\n */\n quarticIn: function (k) {\n return k * k * k * k;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n quarticOut: function (k) {\n return 1 - --k * k * k * k;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n quarticInOut: function (k) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k * k;\n }\n\n return -0.5 * ((k -= 2) * k * k * k - 2);\n },\n // 五次方的缓动(t^5)\n\n /**\n * @param {number} k\n * @return {number}\n */\n quinticIn: function (k) {\n return k * k * k * k * k;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n quinticOut: function (k) {\n return --k * k * k * k * k + 1;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n quinticInOut: function (k) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k * k * k;\n }\n\n return 0.5 * ((k -= 2) * k * k * k * k + 2);\n },\n // 正弦曲线的缓动(sin(t))\n\n /**\n * @param {number} k\n * @return {number}\n */\n sinusoidalIn: function (k) {\n return 1 - Math.cos(k * Math.PI / 2);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n sinusoidalOut: function (k) {\n return Math.sin(k * Math.PI / 2);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n sinusoidalInOut: function (k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n },\n // 指数曲线的缓动(2^t)\n\n /**\n * @param {number} k\n * @return {number}\n */\n exponentialIn: function (k) {\n return k === 0 ? 0 : Math.pow(1024, k - 1);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n exponentialOut: function (k) {\n return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n exponentialInOut: function (k) {\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if ((k *= 2) < 1) {\n return 0.5 * Math.pow(1024, k - 1);\n }\n\n return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);\n },\n // 圆形曲线的缓动(sqrt(1-t^2))\n\n /**\n * @param {number} k\n * @return {number}\n */\n circularIn: function (k) {\n return 1 - Math.sqrt(1 - k * k);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n circularOut: function (k) {\n return Math.sqrt(1 - --k * k);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n circularInOut: function (k) {\n if ((k *= 2) < 1) {\n return -0.5 * (Math.sqrt(1 - k * k) - 1);\n }\n\n return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);\n },\n // 创建类似于弹簧在停止前来回振荡的动画\n\n /**\n * @param {number} k\n * @return {number}\n */\n elasticIn: function (k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n return -(a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n elasticOut: function (k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n elasticInOut: function (k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n if ((k *= 2) < 1) {\n return -0.5 * (a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));\n }\n\n return a * Math.pow(2, -10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;\n },\n // 在某一动画开始沿指示的路径进行动画处理前稍稍收回该动画的移动\n\n /**\n * @param {number} k\n * @return {number}\n */\n backIn: function (k) {\n var s = 1.70158;\n return k * k * ((s + 1) * k - s);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n backOut: function (k) {\n var s = 1.70158;\n return --k * k * ((s + 1) * k + s) + 1;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n backInOut: function (k) {\n var s = 1.70158 * 1.525;\n\n if ((k *= 2) < 1) {\n return 0.5 * (k * k * ((s + 1) * k - s));\n }\n\n return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);\n },\n // 创建弹跳效果\n\n /**\n * @param {number} k\n * @return {number}\n */\n bounceIn: function (k) {\n return 1 - easing.bounceOut(1 - k);\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n bounceOut: function (k) {\n if (k < 1 / 2.75) {\n return 7.5625 * k * k;\n } else if (k < 2 / 2.75) {\n return 7.5625 * (k -= 1.5 / 2.75) * k + 0.75;\n } else if (k < 2.5 / 2.75) {\n return 7.5625 * (k -= 2.25 / 2.75) * k + 0.9375;\n } else {\n return 7.5625 * (k -= 2.625 / 2.75) * k + 0.984375;\n }\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n bounceInOut: function (k) {\n if (k < 0.5) {\n return easing.bounceIn(k * 2) * 0.5;\n }\n\n return easing.bounceOut(k * 2 - 1) * 0.5 + 0.5;\n }\n};\nvar _default = easing;\nmodule.exports = _default;","var MapDraw = require(\"../helper/MapDraw\");\n\nvar echarts = require(\"../../echarts\");\n\nvar _default = echarts.extendComponentView({\n type: 'geo',\n init: function (ecModel, api) {\n var mapDraw = new MapDraw(api, true);\n this._mapDraw = mapDraw;\n this.group.add(mapDraw.group);\n },\n render: function (geoModel, ecModel, api, payload) {\n // Not render if it is an toggleSelect action from self\n if (payload && payload.type === 'geoToggleSelect' && payload.from === this.uid) {\n return;\n }\n\n var mapDraw = this._mapDraw;\n\n if (geoModel.get('show')) {\n mapDraw.draw(geoModel, ecModel, api, this, payload);\n } else {\n this._mapDraw.group.removeAll();\n }\n\n this.group.silent = geoModel.get('silent');\n },\n dispose: function () {\n this._mapDraw && this._mapDraw.remove();\n }\n});\n\nmodule.exports = _default;","var echarts = require(\"../../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar eventTool = require(\"zrender/lib/core/event\");\n\nvar lang = require(\"../../../lang\");\n\nvar featureManager = require(\"../featureManager\");\n\nvar dataViewLang = lang.toolbox.dataView;\nvar BLOCK_SPLITER = new Array(60).join('-');\nvar ITEM_SPLITER = '\\t';\n/**\n * Group series into two types\n * 1. on category axis, like line, bar\n * 2. others, like scatter, pie\n * @param {module:echarts/model/Global} ecModel\n * @return {Object}\n * @inner\n */\n\nfunction groupSeries(ecModel) {\n var seriesGroupByCategoryAxis = {};\n var otherSeries = [];\n var meta = [];\n ecModel.eachRawSeries(function (seriesModel) {\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys && (coordSys.type === 'cartesian2d' || coordSys.type === 'polar')) {\n var baseAxis = coordSys.getBaseAxis();\n\n if (baseAxis.type === 'category') {\n var key = baseAxis.dim + '_' + baseAxis.index;\n\n if (!seriesGroupByCategoryAxis[key]) {\n seriesGroupByCategoryAxis[key] = {\n categoryAxis: baseAxis,\n valueAxis: coordSys.getOtherAxis(baseAxis),\n series: []\n };\n meta.push({\n axisDim: baseAxis.dim,\n axisIndex: baseAxis.index\n });\n }\n\n seriesGroupByCategoryAxis[key].series.push(seriesModel);\n } else {\n otherSeries.push(seriesModel);\n }\n } else {\n otherSeries.push(seriesModel);\n }\n });\n return {\n seriesGroupByCategoryAxis: seriesGroupByCategoryAxis,\n other: otherSeries,\n meta: meta\n };\n}\n/**\n * Assemble content of series on cateogory axis\n * @param {Array.} series\n * @return {string}\n * @inner\n */\n\n\nfunction assembleSeriesWithCategoryAxis(series) {\n var tables = [];\n zrUtil.each(series, function (group, key) {\n var categoryAxis = group.categoryAxis;\n var valueAxis = group.valueAxis;\n var valueAxisDim = valueAxis.dim;\n var headers = [' '].concat(zrUtil.map(group.series, function (series) {\n return series.name;\n }));\n var columns = [categoryAxis.model.getCategories()];\n zrUtil.each(group.series, function (series) {\n columns.push(series.getRawData().mapArray(valueAxisDim, function (val) {\n return val;\n }));\n }); // Assemble table content\n\n var lines = [headers.join(ITEM_SPLITER)];\n\n for (var i = 0; i < columns[0].length; i++) {\n var items = [];\n\n for (var j = 0; j < columns.length; j++) {\n items.push(columns[j][i]);\n }\n\n lines.push(items.join(ITEM_SPLITER));\n }\n\n tables.push(lines.join('\\n'));\n });\n return tables.join('\\n\\n' + BLOCK_SPLITER + '\\n\\n');\n}\n/**\n * Assemble content of other series\n * @param {Array.} series\n * @return {string}\n * @inner\n */\n\n\nfunction assembleOtherSeries(series) {\n return zrUtil.map(series, function (series) {\n var data = series.getRawData();\n var lines = [series.name];\n var vals = [];\n data.each(data.dimensions, function () {\n var argLen = arguments.length;\n var dataIndex = arguments[argLen - 1];\n var name = data.getName(dataIndex);\n\n for (var i = 0; i < argLen - 1; i++) {\n vals[i] = arguments[i];\n }\n\n lines.push((name ? name + ITEM_SPLITER : '') + vals.join(ITEM_SPLITER));\n });\n return lines.join('\\n');\n }).join('\\n\\n' + BLOCK_SPLITER + '\\n\\n');\n}\n/**\n * @param {module:echarts/model/Global}\n * @return {Object}\n * @inner\n */\n\n\nfunction getContentFromModel(ecModel) {\n var result = groupSeries(ecModel);\n return {\n value: zrUtil.filter([assembleSeriesWithCategoryAxis(result.seriesGroupByCategoryAxis), assembleOtherSeries(result.other)], function (str) {\n return str.replace(/[\\n\\t\\s]/g, '');\n }).join('\\n\\n' + BLOCK_SPLITER + '\\n\\n'),\n meta: result.meta\n };\n}\n\nfunction trim(str) {\n return str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n}\n/**\n * If a block is tsv format\n */\n\n\nfunction isTSVFormat(block) {\n // Simple method to find out if a block is tsv format\n var firstLine = block.slice(0, block.indexOf('\\n'));\n\n if (firstLine.indexOf(ITEM_SPLITER) >= 0) {\n return true;\n }\n}\n\nvar itemSplitRegex = new RegExp('[' + ITEM_SPLITER + ']+', 'g');\n/**\n * @param {string} tsv\n * @return {Object}\n */\n\nfunction parseTSVContents(tsv) {\n var tsvLines = tsv.split(/\\n+/g);\n var headers = trim(tsvLines.shift()).split(itemSplitRegex);\n var categories = [];\n var series = zrUtil.map(headers, function (header) {\n return {\n name: header,\n data: []\n };\n });\n\n for (var i = 0; i < tsvLines.length; i++) {\n var items = trim(tsvLines[i]).split(itemSplitRegex);\n categories.push(items.shift());\n\n for (var j = 0; j < items.length; j++) {\n series[j] && (series[j].data[i] = items[j]);\n }\n }\n\n return {\n series: series,\n categories: categories\n };\n}\n/**\n * @param {string} str\n * @return {Array.}\n * @inner\n */\n\n\nfunction parseListContents(str) {\n var lines = str.split(/\\n+/g);\n var seriesName = trim(lines.shift());\n var data = [];\n\n for (var i = 0; i < lines.length; i++) {\n var items = trim(lines[i]).split(itemSplitRegex);\n var name = '';\n var value;\n var hasName = false;\n\n if (isNaN(items[0])) {\n // First item is name\n hasName = true;\n name = items[0];\n items = items.slice(1);\n data[i] = {\n name: name,\n value: []\n };\n value = data[i].value;\n } else {\n value = data[i] = [];\n }\n\n for (var j = 0; j < items.length; j++) {\n value.push(+items[j]);\n }\n\n if (value.length === 1) {\n hasName ? data[i].value = value[0] : data[i] = value[0];\n }\n }\n\n return {\n name: seriesName,\n data: data\n };\n}\n/**\n * @param {string} str\n * @param {Array.} blockMetaList\n * @return {Object}\n * @inner\n */\n\n\nfunction parseContents(str, blockMetaList) {\n var blocks = str.split(new RegExp('\\n*' + BLOCK_SPLITER + '\\n*', 'g'));\n var newOption = {\n series: []\n };\n zrUtil.each(blocks, function (block, idx) {\n if (isTSVFormat(block)) {\n var result = parseTSVContents(block);\n var blockMeta = blockMetaList[idx];\n var axisKey = blockMeta.axisDim + 'Axis';\n\n if (blockMeta) {\n newOption[axisKey] = newOption[axisKey] || [];\n newOption[axisKey][blockMeta.axisIndex] = {\n data: result.categories\n };\n newOption.series = newOption.series.concat(result.series);\n }\n } else {\n var result = parseListContents(block);\n newOption.series.push(result);\n }\n });\n return newOption;\n}\n/**\n * @alias {module:echarts/component/toolbox/feature/DataView}\n * @constructor\n * @param {module:echarts/model/Model} model\n */\n\n\nfunction DataView(model) {\n this._dom = null;\n this.model = model;\n}\n\nDataView.defaultOption = {\n show: true,\n readOnly: false,\n optionToContent: null,\n contentToOption: null,\n icon: 'M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28',\n title: zrUtil.clone(dataViewLang.title),\n lang: zrUtil.clone(dataViewLang.lang),\n backgroundColor: '#fff',\n textColor: '#000',\n textareaColor: '#fff',\n textareaBorderColor: '#333',\n buttonColor: '#c23531',\n buttonTextColor: '#fff'\n};\n\nDataView.prototype.onclick = function (ecModel, api) {\n var container = api.getDom();\n var model = this.model;\n\n if (this._dom) {\n container.removeChild(this._dom);\n }\n\n var root = document.createElement('div');\n root.style.cssText = 'position:absolute;left:5px;top:5px;bottom:5px;right:5px;';\n root.style.backgroundColor = model.get('backgroundColor') || '#fff'; // Create elements\n\n var header = document.createElement('h4');\n var lang = model.get('lang') || [];\n header.innerHTML = lang[0] || model.get('title');\n header.style.cssText = 'margin: 10px 20px;';\n header.style.color = model.get('textColor');\n var viewMain = document.createElement('div');\n var textarea = document.createElement('textarea');\n viewMain.style.cssText = 'display:block;width:100%;overflow:auto;';\n var optionToContent = model.get('optionToContent');\n var contentToOption = model.get('contentToOption');\n var result = getContentFromModel(ecModel);\n\n if (typeof optionToContent === 'function') {\n var htmlOrDom = optionToContent(api.getOption());\n\n if (typeof htmlOrDom === 'string') {\n viewMain.innerHTML = htmlOrDom;\n } else if (zrUtil.isDom(htmlOrDom)) {\n viewMain.appendChild(htmlOrDom);\n }\n } else {\n // Use default textarea\n viewMain.appendChild(textarea);\n textarea.readOnly = model.get('readOnly');\n textarea.style.cssText = 'width:100%;height:100%;font-family:monospace;font-size:14px;line-height:1.6rem;';\n textarea.style.color = model.get('textColor');\n textarea.style.borderColor = model.get('textareaBorderColor');\n textarea.style.backgroundColor = model.get('textareaColor');\n textarea.value = result.value;\n }\n\n var blockMetaList = result.meta;\n var buttonContainer = document.createElement('div');\n buttonContainer.style.cssText = 'position:absolute;bottom:0;left:0;right:0;';\n var buttonStyle = 'float:right;margin-right:20px;border:none;' + 'cursor:pointer;padding:2px 5px;font-size:12px;border-radius:3px';\n var closeButton = document.createElement('div');\n var refreshButton = document.createElement('div');\n buttonStyle += ';background-color:' + model.get('buttonColor');\n buttonStyle += ';color:' + model.get('buttonTextColor');\n var self = this;\n\n function close() {\n container.removeChild(root);\n self._dom = null;\n }\n\n eventTool.addEventListener(closeButton, 'click', close);\n eventTool.addEventListener(refreshButton, 'click', function () {\n var newOption;\n\n try {\n if (typeof contentToOption === 'function') {\n newOption = contentToOption(viewMain, api.getOption());\n } else {\n newOption = parseContents(textarea.value, blockMetaList);\n }\n } catch (e) {\n close();\n throw new Error('Data view format error ' + e);\n }\n\n if (newOption) {\n api.dispatchAction({\n type: 'changeDataView',\n newOption: newOption\n });\n }\n\n close();\n });\n closeButton.innerHTML = lang[1];\n refreshButton.innerHTML = lang[2];\n refreshButton.style.cssText = buttonStyle;\n closeButton.style.cssText = buttonStyle;\n !model.get('readOnly') && buttonContainer.appendChild(refreshButton);\n buttonContainer.appendChild(closeButton); // http://stackoverflow.com/questions/6637341/use-tab-to-indent-in-textarea\n\n eventTool.addEventListener(textarea, 'keydown', function (e) {\n if ((e.keyCode || e.which) === 9) {\n // get caret position/selection\n var val = this.value;\n var start = this.selectionStart;\n var end = this.selectionEnd; // set textarea value to: text before caret + tab + text after caret\n\n this.value = val.substring(0, start) + ITEM_SPLITER + val.substring(end); // put caret at right position again\n\n this.selectionStart = this.selectionEnd = start + 1; // prevent the focus lose\n\n eventTool.stop(e);\n }\n });\n root.appendChild(header);\n root.appendChild(viewMain);\n root.appendChild(buttonContainer);\n viewMain.style.height = container.clientHeight - 80 + 'px';\n container.appendChild(root);\n this._dom = root;\n};\n\nDataView.prototype.remove = function (ecModel, api) {\n this._dom && api.getDom().removeChild(this._dom);\n};\n\nDataView.prototype.dispose = function (ecModel, api) {\n this.remove(ecModel, api);\n};\n/**\n * @inner\n */\n\n\nfunction tryMergeDataOption(newData, originalData) {\n return zrUtil.map(newData, function (newVal, idx) {\n var original = originalData && originalData[idx];\n\n if (zrUtil.isObject(original) && !zrUtil.isArray(original)) {\n if (zrUtil.isObject(newVal) && !zrUtil.isArray(newVal)) {\n newVal = newVal.value;\n } // Original data has option\n\n\n return zrUtil.defaults({\n value: newVal\n }, original);\n } else {\n return newVal;\n }\n });\n}\n\nfeatureManager.register('dataView', DataView);\necharts.registerAction({\n type: 'changeDataView',\n event: 'dataViewChanged',\n update: 'prepareAndUpdate'\n}, function (payload, ecModel) {\n var newSeriesOptList = [];\n zrUtil.each(payload.newOption.series, function (seriesOpt) {\n var seriesModel = ecModel.getSeriesByName(seriesOpt.name)[0];\n\n if (!seriesModel) {\n // New created series\n // Geuss the series type\n newSeriesOptList.push(zrUtil.extend({\n // Default is scatter\n type: 'scatter'\n }, seriesOpt));\n } else {\n var originalData = seriesModel.get('data');\n newSeriesOptList.push({\n name: seriesOpt.name,\n data: tryMergeDataOption(seriesOpt.data, originalData)\n });\n }\n });\n ecModel.mergeOption(zrUtil.defaults({\n series: newSeriesOptList\n }, payload.newOption));\n});\nvar _default = DataView;\nmodule.exports = _default;","var Displayable = require(\"./Displayable\");\n\nvar zrUtil = require(\"../core/util\");\n\nvar textContain = require(\"../contain/text\");\n\nvar textHelper = require(\"./helper/text\");\n\n/**\n * @alias zrender/graphic/Text\n * @extends module:zrender/graphic/Displayable\n * @constructor\n * @param {Object} opts\n */\nvar Text = function (opts) {\n // jshint ignore:line\n Displayable.call(this, opts);\n};\n\nText.prototype = {\n constructor: Text,\n type: 'text',\n brush: function (ctx, prevEl) {\n var style = this.style; // Optimize, avoid normalize every time.\n\n this.__dirty && textHelper.normalizeTextStyle(style, true); // Use props with prefix 'text'.\n\n style.fill = style.stroke = style.shadowBlur = style.shadowColor = style.shadowOffsetX = style.shadowOffsetY = null;\n var text = style.text; // Convert to string\n\n text != null && (text += ''); // Always bind style\n\n style.bind(ctx, this, prevEl);\n\n if (!textHelper.needDrawText(text, style)) {\n return;\n }\n\n this.setTransform(ctx);\n textHelper.renderText(this, ctx, text, style);\n this.restoreTransform(ctx);\n },\n getBoundingRect: function () {\n var style = this.style; // Optimize, avoid normalize every time.\n\n this.__dirty && textHelper.normalizeTextStyle(style, true);\n\n if (!this._rect) {\n var text = style.text;\n text != null ? text += '' : text = '';\n var rect = textContain.getBoundingRect(style.text + '', style.font, style.textAlign, style.textVerticalAlign, style.textPadding, style.rich);\n rect.x += style.x || 0;\n rect.y += style.y || 0;\n\n if (textHelper.getStroke(style.textStroke, style.textStrokeWidth)) {\n var w = style.textStrokeWidth;\n rect.x -= w / 2;\n rect.y -= w / 2;\n rect.width += w;\n rect.height += w;\n }\n\n this._rect = rect;\n }\n\n return this._rect;\n }\n};\nzrUtil.inherits(Text, Displayable);\nvar _default = Text;\nmodule.exports = _default;","var echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nfunction _default(seriesType, actionInfos) {\n zrUtil.each(actionInfos, function (actionInfo) {\n actionInfo.update = 'updateView';\n /**\n * @payload\n * @property {string} seriesName\n * @property {string} name\n */\n\n echarts.registerAction(actionInfo, function (payload, ecModel) {\n var selected = {};\n ecModel.eachComponent({\n mainType: 'series',\n subType: seriesType,\n query: payload\n }, function (seriesModel) {\n if (seriesModel[actionInfo.method]) {\n seriesModel[actionInfo.method](payload.name, payload.dataIndex);\n }\n\n var data = seriesModel.getData(); // Create selected map\n\n data.each(function (idx) {\n var name = data.getName(idx);\n selected[name] = seriesModel.isSelected(name) || false;\n });\n });\n return {\n name: payload.name,\n selected: selected\n };\n });\n });\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar Axis = require(\"../Axis\");\n\nfunction IndicatorAxis(dim, scale, radiusExtent) {\n Axis.call(this, dim, scale, radiusExtent);\n /**\n * Axis type\n * - 'category'\n * - 'value'\n * - 'time'\n * - 'log'\n * @type {string}\n */\n\n this.type = 'value';\n this.angle = 0;\n /**\n * Indicator name\n * @type {string}\n */\n\n this.name = '';\n /**\n * @type {module:echarts/model/Model}\n */\n\n this.model;\n}\n\nzrUtil.inherits(IndicatorAxis, Axis);\nvar _default = IndicatorAxis;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\n// Backward compat for radar chart in 2\nfunction _default(option) {\n var polarOptArr = option.polar;\n\n if (polarOptArr) {\n if (!zrUtil.isArray(polarOptArr)) {\n polarOptArr = [polarOptArr];\n }\n\n var polarNotRadar = [];\n zrUtil.each(polarOptArr, function (polarOpt, idx) {\n if (polarOpt.indicator) {\n if (polarOpt.type && !polarOpt.shape) {\n polarOpt.shape = polarOpt.type;\n }\n\n option.radar = option.radar || [];\n\n if (!zrUtil.isArray(option.radar)) {\n option.radar = [option.radar];\n }\n\n option.radar.push(polarOpt);\n } else {\n polarNotRadar.push(polarOpt);\n }\n });\n option.polar = polarNotRadar;\n }\n\n zrUtil.each(option.series, function (seriesOpt) {\n if (seriesOpt && seriesOpt.type === 'radar' && seriesOpt.polarIndex) {\n seriesOpt.radarIndex = seriesOpt.polarIndex;\n }\n });\n}\n\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\nrequire(\"./AxisModel\");\n\nvar _default = echarts.extendComponentModel({\n type: 'polar',\n dependencies: ['polarAxis', 'angleAxis'],\n\n /**\n * @type {module:echarts/coord/polar/Polar}\n */\n coordinateSystem: null,\n\n /**\n * @param {string} axisType\n * @return {module:echarts/coord/polar/AxisModel}\n */\n findAxisModel: function (axisType) {\n var foundAxisModel;\n var ecModel = this.ecModel;\n ecModel.eachComponent(axisType, function (axisModel) {\n if (axisModel.getCoordSysModel() === this) {\n foundAxisModel = axisModel;\n }\n }, this);\n return foundAxisModel;\n },\n defaultOption: {\n zlevel: 0,\n z: 0,\n center: ['50%', '50%'],\n radius: '80%'\n }\n});\n\nmodule.exports = _default;","var _layout = require(\"../../util/layout\");\n\nvar getLayoutRect = _layout.getLayoutRect;\nvar layoutBox = _layout.box;\nvar positionElement = _layout.positionElement;\n\nvar formatUtil = require(\"../../util/format\");\n\nvar graphic = require(\"../../util/graphic\");\n\n/**\n * Layout list like component.\n * It will box layout each items in group of component and then position the whole group in the viewport\n * @param {module:zrender/group/Group} group\n * @param {module:echarts/model/Component} componentModel\n * @param {module:echarts/ExtensionAPI}\n */\nfunction layout(group, componentModel, api) {\n var boxLayoutParams = componentModel.getBoxLayoutParams();\n var padding = componentModel.get('padding');\n var viewportSize = {\n width: api.getWidth(),\n height: api.getHeight()\n };\n var rect = getLayoutRect(boxLayoutParams, viewportSize, padding);\n layoutBox(componentModel.get('orient'), group, componentModel.get('itemGap'), rect.width, rect.height);\n positionElement(group, boxLayoutParams, viewportSize, padding);\n}\n\nfunction makeBackground(rect, componentModel) {\n var padding = formatUtil.normalizeCssArray(componentModel.get('padding'));\n var style = componentModel.getItemStyle(['color', 'opacity']);\n style.fill = componentModel.get('backgroundColor');\n var rect = new graphic.Rect({\n shape: {\n x: rect.x - padding[3],\n y: rect.y - padding[0],\n width: rect.width + padding[1] + padding[3],\n height: rect.height + padding[0] + padding[2],\n r: componentModel.get('borderRadius')\n },\n style: style,\n silent: true,\n z2: -1\n }); // FIXME\n // `subPixelOptimizeRect` may bring some gap between edge of viewpart\n // and background rect when setting like `left: 0`, `top: 0`.\n // graphic.subPixelOptimizeRect(rect);\n\n return rect;\n}\n\nexports.layout = layout;\nexports.makeBackground = makeBackground;","require(\"../coord/polar/polarCreator\");\n\nrequire(\"./axis/RadiusAxisView\");","var View = require(\"../../coord/View\");\n\nvar _layout = require(\"../../util/layout\");\n\nvar getLayoutRect = _layout.getLayoutRect;\n\nvar bbox = require(\"zrender/lib/core/bbox\");\n\n// FIXME Where to create the simple view coordinate system\nfunction getViewRect(seriesModel, api, aspect) {\n var option = seriesModel.getBoxLayoutParams();\n option.aspect = aspect;\n return getLayoutRect(option, {\n width: api.getWidth(),\n height: api.getHeight()\n });\n}\n\nfunction _default(ecModel, api) {\n var viewList = [];\n ecModel.eachSeriesByType('graph', function (seriesModel) {\n var coordSysType = seriesModel.get('coordinateSystem');\n\n if (!coordSysType || coordSysType === 'view') {\n var data = seriesModel.getData();\n var positions = data.mapArray(function (idx) {\n var itemModel = data.getItemModel(idx);\n return [+itemModel.get('x'), +itemModel.get('y')];\n });\n var min = [];\n var max = [];\n bbox.fromPoints(positions, min, max); // If width or height is 0\n\n if (max[0] - min[0] === 0) {\n max[0] += 1;\n min[0] -= 1;\n }\n\n if (max[1] - min[1] === 0) {\n max[1] += 1;\n min[1] -= 1;\n }\n\n var aspect = (max[0] - min[0]) / (max[1] - min[1]); // FIXME If get view rect after data processed?\n\n var viewRect = getViewRect(seriesModel, api, aspect); // Position may be NaN, use view rect instead\n\n if (isNaN(aspect)) {\n min = [viewRect.x, viewRect.y];\n max = [viewRect.x + viewRect.width, viewRect.y + viewRect.height];\n }\n\n var bbWidth = max[0] - min[0];\n var bbHeight = max[1] - min[1];\n var viewWidth = viewRect.width;\n var viewHeight = viewRect.height;\n var viewCoordSys = seriesModel.coordinateSystem = new View();\n viewCoordSys.zoomLimit = seriesModel.get('scaleLimit');\n viewCoordSys.setBoundingRect(min[0], min[1], bbWidth, bbHeight);\n viewCoordSys.setViewRect(viewRect.x, viewRect.y, viewWidth, viewHeight); // Update roam info\n\n viewCoordSys.setCenter(seriesModel.get('center'));\n viewCoordSys.setZoom(seriesModel.get('zoom'));\n viewList.push(viewCoordSys);\n }\n });\n return viewList;\n}\n\nmodule.exports = _default;","var echarts = require(\"../../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar BrushController = require(\"../../helper/BrushController\");\n\nvar BrushTargetManager = require(\"../../helper/BrushTargetManager\");\n\nvar history = require(\"../../dataZoom/history\");\n\nvar sliderMove = require(\"../../helper/sliderMove\");\n\nvar lang = require(\"../../../lang\");\n\nvar featureManager = require(\"../featureManager\");\n\nrequire(\"../../dataZoomSelect\");\n\n// Use dataZoomSelect\nvar dataZoomLang = lang.toolbox.dataZoom;\nvar each = zrUtil.each; // Spectial component id start with \\0ec\\0, see echarts/model/Global.js~hasInnerId\n\nvar DATA_ZOOM_ID_BASE = '\\0_ec_\\0toolbox-dataZoom_';\n\nfunction DataZoom(model, ecModel, api) {\n /**\n * @private\n * @type {module:echarts/component/helper/BrushController}\n */\n (this._brushController = new BrushController(api.getZr())).on('brush', zrUtil.bind(this._onBrush, this)).mount();\n /**\n * @private\n * @type {boolean}\n */\n\n this._isZoomActive;\n}\n\nDataZoom.defaultOption = {\n show: true,\n // Icon group\n icon: {\n zoom: 'M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1',\n back: 'M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26'\n },\n // `zoom`, `back`\n title: zrUtil.clone(dataZoomLang.title)\n};\nvar proto = DataZoom.prototype;\n\nproto.render = function (featureModel, ecModel, api, payload) {\n this.model = featureModel;\n this.ecModel = ecModel;\n this.api = api;\n updateZoomBtnStatus(featureModel, ecModel, this, payload, api);\n updateBackBtnStatus(featureModel, ecModel);\n};\n\nproto.onclick = function (ecModel, api, type) {\n handlers[type].call(this);\n};\n\nproto.remove = function (ecModel, api) {\n this._brushController.unmount();\n};\n\nproto.dispose = function (ecModel, api) {\n this._brushController.dispose();\n};\n/**\n * @private\n */\n\n\nvar handlers = {\n zoom: function () {\n var nextActive = !this._isZoomActive;\n this.api.dispatchAction({\n type: 'takeGlobalCursor',\n key: 'dataZoomSelect',\n dataZoomSelectActive: nextActive\n });\n },\n back: function () {\n this._dispatchZoomAction(history.pop(this.ecModel));\n }\n};\n/**\n * @private\n */\n\nproto._onBrush = function (areas, opt) {\n if (!opt.isEnd || !areas.length) {\n return;\n }\n\n var snapshot = {};\n var ecModel = this.ecModel;\n\n this._brushController.updateCovers([]); // remove cover\n\n\n var brushTargetManager = new BrushTargetManager(retrieveAxisSetting(this.model.option), ecModel, {\n include: ['grid']\n });\n brushTargetManager.matchOutputRanges(areas, ecModel, function (area, coordRange, coordSys) {\n if (coordSys.type !== 'cartesian2d') {\n return;\n }\n\n var brushType = area.brushType;\n\n if (brushType === 'rect') {\n setBatch('x', coordSys, coordRange[0]);\n setBatch('y', coordSys, coordRange[1]);\n } else {\n setBatch({\n lineX: 'x',\n lineY: 'y'\n }[brushType], coordSys, coordRange);\n }\n });\n history.push(ecModel, snapshot);\n\n this._dispatchZoomAction(snapshot);\n\n function setBatch(dimName, coordSys, minMax) {\n var axis = coordSys.getAxis(dimName);\n var axisModel = axis.model;\n var dataZoomModel = findDataZoom(dimName, axisModel, ecModel); // Restrict range.\n\n var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy(axisModel).getMinMaxSpan();\n\n if (minMaxSpan.minValueSpan != null || minMaxSpan.maxValueSpan != null) {\n minMax = sliderMove(0, minMax.slice(), axis.scale.getExtent(), 0, minMaxSpan.minValueSpan, minMaxSpan.maxValueSpan);\n }\n\n dataZoomModel && (snapshot[dataZoomModel.id] = {\n dataZoomId: dataZoomModel.id,\n startValue: minMax[0],\n endValue: minMax[1]\n });\n }\n\n function findDataZoom(dimName, axisModel, ecModel) {\n var found;\n ecModel.eachComponent({\n mainType: 'dataZoom',\n subType: 'select'\n }, function (dzModel) {\n var has = dzModel.getAxisModel(dimName, axisModel.componentIndex);\n has && (found = dzModel);\n });\n return found;\n }\n};\n/**\n * @private\n */\n\n\nproto._dispatchZoomAction = function (snapshot) {\n var batch = []; // Convert from hash map to array.\n\n each(snapshot, function (batchItem, dataZoomId) {\n batch.push(zrUtil.clone(batchItem));\n });\n batch.length && this.api.dispatchAction({\n type: 'dataZoom',\n from: this.uid,\n batch: batch\n });\n};\n\nfunction retrieveAxisSetting(option) {\n var setting = {}; // Compatible with previous setting: null => all axis, false => no axis.\n\n zrUtil.each(['xAxisIndex', 'yAxisIndex'], function (name) {\n setting[name] = option[name];\n setting[name] == null && (setting[name] = 'all');\n (setting[name] === false || setting[name] === 'none') && (setting[name] = []);\n });\n return setting;\n}\n\nfunction updateBackBtnStatus(featureModel, ecModel) {\n featureModel.setIconStatus('back', history.count(ecModel) > 1 ? 'emphasis' : 'normal');\n}\n\nfunction updateZoomBtnStatus(featureModel, ecModel, view, payload, api) {\n var zoomActive = view._isZoomActive;\n\n if (payload && payload.type === 'takeGlobalCursor') {\n zoomActive = payload.key === 'dataZoomSelect' ? payload.dataZoomSelectActive : false;\n }\n\n view._isZoomActive = zoomActive;\n featureModel.setIconStatus('zoom', zoomActive ? 'emphasis' : 'normal');\n var brushTargetManager = new BrushTargetManager(retrieveAxisSetting(featureModel.option), ecModel, {\n include: ['grid']\n });\n\n view._brushController.setPanels(brushTargetManager.makePanelOpts(api, function (targetInfo) {\n return targetInfo.xAxisDeclared && !targetInfo.yAxisDeclared ? 'lineX' : !targetInfo.xAxisDeclared && targetInfo.yAxisDeclared ? 'lineY' : 'rect';\n })).enableBrush(zoomActive ? {\n brushType: 'auto',\n brushStyle: {\n // FIXME user customized?\n lineWidth: 0,\n fill: 'rgba(0,0,0,0.2)'\n }\n } : false);\n}\n\nfeatureManager.register('dataZoom', DataZoom); // Create special dataZoom option for select\n\necharts.registerPreprocessor(function (option) {\n if (!option) {\n return;\n }\n\n var dataZoomOpts = option.dataZoom || (option.dataZoom = []);\n\n if (!zrUtil.isArray(dataZoomOpts)) {\n option.dataZoom = dataZoomOpts = [dataZoomOpts];\n }\n\n var toolboxOpt = option.toolbox;\n\n if (toolboxOpt) {\n // Assume there is only one toolbox\n if (zrUtil.isArray(toolboxOpt)) {\n toolboxOpt = toolboxOpt[0];\n }\n\n if (toolboxOpt && toolboxOpt.feature) {\n var dataZoomOpt = toolboxOpt.feature.dataZoom;\n addForAxis('xAxis', dataZoomOpt);\n addForAxis('yAxis', dataZoomOpt);\n }\n }\n\n function addForAxis(axisName, dataZoomOpt) {\n if (!dataZoomOpt) {\n return;\n } // Try not to modify model, because it is not merged yet.\n\n\n var axisIndicesName = axisName + 'Index';\n var givenAxisIndices = dataZoomOpt[axisIndicesName];\n\n if (givenAxisIndices != null && givenAxisIndices != 'all' && !zrUtil.isArray(givenAxisIndices)) {\n givenAxisIndices = givenAxisIndices === false || givenAxisIndices === 'none' ? [] : [givenAxisIndices];\n }\n\n forEachComponent(axisName, function (axisOpt, axisIndex) {\n if (givenAxisIndices != null && givenAxisIndices != 'all' && zrUtil.indexOf(givenAxisIndices, axisIndex) === -1) {\n return;\n }\n\n var newOpt = {\n type: 'select',\n $fromToolbox: true,\n // Id for merge mapping.\n id: DATA_ZOOM_ID_BASE + axisName + axisIndex\n }; // FIXME\n // Only support one axis now.\n\n newOpt[axisIndicesName] = axisIndex;\n dataZoomOpts.push(newOpt);\n });\n }\n\n function forEachComponent(mainType, cb) {\n var opts = option[mainType];\n\n if (!zrUtil.isArray(opts)) {\n opts = opts ? [opts] : [];\n }\n\n each(opts, cb);\n }\n});\nvar _default = DataZoom;\nmodule.exports = _default;","var ComponentView = require(\"../../view/Component\");\n\nvar _default = ComponentView.extend({\n type: 'dataZoom',\n render: function (dataZoomModel, ecModel, api, payload) {\n this.dataZoomModel = dataZoomModel;\n this.ecModel = ecModel;\n this.api = api;\n },\n\n /**\n * Find the first target coordinate system.\n *\n * @protected\n * @return {Object} {\n * grid: [\n * {model: coord0, axisModels: [axis1, axis3], coordIndex: 1},\n * {model: coord1, axisModels: [axis0, axis2], coordIndex: 0},\n * ...\n * ], // cartesians must not be null/undefined.\n * polar: [\n * {model: coord0, axisModels: [axis4], coordIndex: 0},\n * ...\n * ], // polars must not be null/undefined.\n * singleAxis: [\n * {model: coord0, axisModels: [], coordIndex: 0}\n * ]\n */\n getTargetCoordInfo: function () {\n var dataZoomModel = this.dataZoomModel;\n var ecModel = this.ecModel;\n var coordSysLists = {};\n dataZoomModel.eachTargetAxis(function (dimNames, axisIndex) {\n var axisModel = ecModel.getComponent(dimNames.axis, axisIndex);\n\n if (axisModel) {\n var coordModel = axisModel.getCoordSysModel();\n coordModel && save(coordModel, axisModel, coordSysLists[coordModel.mainType] || (coordSysLists[coordModel.mainType] = []), coordModel.componentIndex);\n }\n }, this);\n\n function save(coordModel, axisModel, store, coordIndex) {\n var item;\n\n for (var i = 0; i < store.length; i++) {\n if (store[i].model === coordModel) {\n item = store[i];\n break;\n }\n }\n\n if (!item) {\n store.push(item = {\n model: coordModel,\n axisModels: [],\n coordIndex: coordIndex\n });\n }\n\n item.axisModels.push(axisModel);\n }\n\n return coordSysLists;\n }\n});\n\nmodule.exports = _default;","var echarts = require(\"../echarts\");\n\nrequire(\"./marker/MarkAreaModel\");\n\nrequire(\"./marker/MarkAreaView\");\n\necharts.registerPreprocessor(function (opt) {\n // Make sure markArea component is enabled\n opt.markArea = opt.markArea || {};\n});","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar vector = require(\"zrender/lib/core/vector\");\n\nvar symbolUtil = require(\"../../util/symbol\");\n\nvar LinePath = require(\"./LinePath\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar _number = require(\"../../util/number\");\n\nvar round = _number.round;\n\n/**\n * @module echarts/chart/helper/Line\n */\nvar SYMBOL_CATEGORIES = ['fromSymbol', 'toSymbol'];\n\nfunction makeSymbolTypeKey(symbolCategory) {\n return '_' + symbolCategory + 'Type';\n}\n/**\n * @inner\n */\n\n\nfunction createSymbol(name, lineData, idx) {\n var color = lineData.getItemVisual(idx, 'color');\n var symbolType = lineData.getItemVisual(idx, name);\n var symbolSize = lineData.getItemVisual(idx, name + 'Size');\n\n if (!symbolType || symbolType === 'none') {\n return;\n }\n\n if (!zrUtil.isArray(symbolSize)) {\n symbolSize = [symbolSize, symbolSize];\n }\n\n var symbolPath = symbolUtil.createSymbol(symbolType, -symbolSize[0] / 2, -symbolSize[1] / 2, symbolSize[0], symbolSize[1], color);\n symbolPath.name = name;\n return symbolPath;\n}\n\nfunction createLine(points) {\n var line = new LinePath({\n name: 'line'\n });\n setLinePoints(line.shape, points);\n return line;\n}\n\nfunction setLinePoints(targetShape, points) {\n var p1 = points[0];\n var p2 = points[1];\n var cp1 = points[2];\n targetShape.x1 = p1[0];\n targetShape.y1 = p1[1];\n targetShape.x2 = p2[0];\n targetShape.y2 = p2[1];\n targetShape.percent = 1;\n\n if (cp1) {\n targetShape.cpx1 = cp1[0];\n targetShape.cpy1 = cp1[1];\n } else {\n targetShape.cpx1 = NaN;\n targetShape.cpy1 = NaN;\n }\n}\n\nfunction updateSymbolAndLabelBeforeLineUpdate() {\n var lineGroup = this;\n var symbolFrom = lineGroup.childOfName('fromSymbol');\n var symbolTo = lineGroup.childOfName('toSymbol');\n var label = lineGroup.childOfName('label'); // Quick reject\n\n if (!symbolFrom && !symbolTo && label.ignore) {\n return;\n }\n\n var invScale = 1;\n var parentNode = this.parent;\n\n while (parentNode) {\n if (parentNode.scale) {\n invScale /= parentNode.scale[0];\n }\n\n parentNode = parentNode.parent;\n }\n\n var line = lineGroup.childOfName('line'); // If line not changed\n // FIXME Parent scale changed\n\n if (!this.__dirty && !line.__dirty) {\n return;\n }\n\n var percent = line.shape.percent;\n var fromPos = line.pointAt(0);\n var toPos = line.pointAt(percent);\n var d = vector.sub([], toPos, fromPos);\n vector.normalize(d, d);\n\n if (symbolFrom) {\n symbolFrom.attr('position', fromPos);\n var tangent = line.tangentAt(0);\n symbolFrom.attr('rotation', Math.PI / 2 - Math.atan2(tangent[1], tangent[0]));\n symbolFrom.attr('scale', [invScale * percent, invScale * percent]);\n }\n\n if (symbolTo) {\n symbolTo.attr('position', toPos);\n var tangent = line.tangentAt(1);\n symbolTo.attr('rotation', -Math.PI / 2 - Math.atan2(tangent[1], tangent[0]));\n symbolTo.attr('scale', [invScale * percent, invScale * percent]);\n }\n\n if (!label.ignore) {\n label.attr('position', toPos);\n var textPosition;\n var textAlign;\n var textVerticalAlign;\n var distance = 5 * invScale; // End\n\n if (label.__position === 'end') {\n textPosition = [d[0] * distance + toPos[0], d[1] * distance + toPos[1]];\n textAlign = d[0] > 0.8 ? 'left' : d[0] < -0.8 ? 'right' : 'center';\n textVerticalAlign = d[1] > 0.8 ? 'top' : d[1] < -0.8 ? 'bottom' : 'middle';\n } // Middle\n else if (label.__position === 'middle') {\n var halfPercent = percent / 2;\n var tangent = line.tangentAt(halfPercent);\n var n = [tangent[1], -tangent[0]];\n var cp = line.pointAt(halfPercent);\n\n if (n[1] > 0) {\n n[0] = -n[0];\n n[1] = -n[1];\n }\n\n textPosition = [cp[0] + n[0] * distance, cp[1] + n[1] * distance];\n textAlign = 'center';\n textVerticalAlign = 'bottom';\n var rotation = -Math.atan2(tangent[1], tangent[0]);\n\n if (toPos[0] < fromPos[0]) {\n rotation = Math.PI + rotation;\n }\n\n label.attr('rotation', rotation);\n } // Start\n else {\n textPosition = [-d[0] * distance + fromPos[0], -d[1] * distance + fromPos[1]];\n textAlign = d[0] > 0.8 ? 'right' : d[0] < -0.8 ? 'left' : 'center';\n textVerticalAlign = d[1] > 0.8 ? 'bottom' : d[1] < -0.8 ? 'top' : 'middle';\n }\n\n label.attr({\n style: {\n // Use the user specified text align and baseline first\n textVerticalAlign: label.__verticalAlign || textVerticalAlign,\n textAlign: label.__textAlign || textAlign\n },\n position: textPosition,\n scale: [invScale, invScale]\n });\n }\n}\n/**\n * @constructor\n * @extends {module:zrender/graphic/Group}\n * @alias {module:echarts/chart/helper/Line}\n */\n\n\nfunction Line(lineData, idx, seriesScope) {\n graphic.Group.call(this);\n\n this._createLine(lineData, idx, seriesScope);\n}\n\nvar lineProto = Line.prototype; // Update symbol position and rotation\n\nlineProto.beforeUpdate = updateSymbolAndLabelBeforeLineUpdate;\n\nlineProto._createLine = function (lineData, idx, seriesScope) {\n var seriesModel = lineData.hostModel;\n var linePoints = lineData.getItemLayout(idx);\n var line = createLine(linePoints);\n line.shape.percent = 0;\n graphic.initProps(line, {\n shape: {\n percent: 1\n }\n }, seriesModel, idx);\n this.add(line);\n var label = new graphic.Text({\n name: 'label'\n });\n this.add(label);\n zrUtil.each(SYMBOL_CATEGORIES, function (symbolCategory) {\n var symbol = createSymbol(symbolCategory, lineData, idx); // symbols must added after line to make sure\n // it will be updated after line#update.\n // Or symbol position and rotation update in line#beforeUpdate will be one frame slow\n\n this.add(symbol);\n this[makeSymbolTypeKey(symbolCategory)] = lineData.getItemVisual(idx, symbolCategory);\n }, this);\n\n this._updateCommonStl(lineData, idx, seriesScope);\n};\n\nlineProto.updateData = function (lineData, idx, seriesScope) {\n var seriesModel = lineData.hostModel;\n var line = this.childOfName('line');\n var linePoints = lineData.getItemLayout(idx);\n var target = {\n shape: {}\n };\n setLinePoints(target.shape, linePoints);\n graphic.updateProps(line, target, seriesModel, idx);\n zrUtil.each(SYMBOL_CATEGORIES, function (symbolCategory) {\n var symbolType = lineData.getItemVisual(idx, symbolCategory);\n var key = makeSymbolTypeKey(symbolCategory); // Symbol changed\n\n if (this[key] !== symbolType) {\n this.remove(this.childOfName(symbolCategory));\n var symbol = createSymbol(symbolCategory, lineData, idx);\n this.add(symbol);\n }\n\n this[key] = symbolType;\n }, this);\n\n this._updateCommonStl(lineData, idx, seriesScope);\n};\n\nlineProto._updateCommonStl = function (lineData, idx, seriesScope) {\n var seriesModel = lineData.hostModel;\n var line = this.childOfName('line');\n var lineStyle = seriesScope && seriesScope.lineStyle;\n var hoverLineStyle = seriesScope && seriesScope.hoverLineStyle;\n var labelModel = seriesScope && seriesScope.labelModel;\n var hoverLabelModel = seriesScope && seriesScope.hoverLabelModel; // Optimization for large dataset\n\n if (!seriesScope || lineData.hasItemOption) {\n var itemModel = lineData.getItemModel(idx);\n lineStyle = itemModel.getModel('lineStyle.normal').getLineStyle();\n hoverLineStyle = itemModel.getModel('lineStyle.emphasis').getLineStyle();\n labelModel = itemModel.getModel('label.normal');\n hoverLabelModel = itemModel.getModel('label.emphasis');\n }\n\n var visualColor = lineData.getItemVisual(idx, 'color');\n var visualOpacity = zrUtil.retrieve3(lineData.getItemVisual(idx, 'opacity'), lineStyle.opacity, 1);\n line.useStyle(zrUtil.defaults({\n strokeNoScale: true,\n fill: 'none',\n stroke: visualColor,\n opacity: visualOpacity\n }, lineStyle));\n line.hoverStyle = hoverLineStyle; // Update symbol\n\n zrUtil.each(SYMBOL_CATEGORIES, function (symbolCategory) {\n var symbol = this.childOfName(symbolCategory);\n\n if (symbol) {\n symbol.setColor(visualColor);\n symbol.setStyle({\n opacity: visualOpacity\n });\n }\n }, this);\n var showLabel = labelModel.getShallow('show');\n var hoverShowLabel = hoverLabelModel.getShallow('show');\n var label = this.childOfName('label');\n var defaultLabelColor;\n var defaultText;\n var normalText;\n var emphasisText;\n\n if (showLabel || hoverShowLabel) {\n var rawVal = seriesModel.getRawValue(idx);\n defaultText = rawVal == null ? defaultText = lineData.getName(idx) : isFinite(rawVal) ? round(rawVal) : rawVal;\n defaultLabelColor = visualColor || '#000';\n normalText = zrUtil.retrieve2(seriesModel.getFormattedLabel(idx, 'normal', lineData.dataType), defaultText);\n emphasisText = zrUtil.retrieve2(seriesModel.getFormattedLabel(idx, 'emphasis', lineData.dataType), normalText);\n } // label.afterUpdate = lineAfterUpdate;\n\n\n if (showLabel) {\n var labelStyle = graphic.setTextStyle(label.style, labelModel, {\n text: normalText\n }, {\n autoColor: defaultLabelColor\n });\n label.__textAlign = labelStyle.textAlign;\n label.__verticalAlign = labelStyle.textVerticalAlign; // 'start', 'middle', 'end'\n\n label.__position = labelModel.get('position') || 'middle';\n } else {\n label.setStyle('text', null);\n }\n\n if (hoverShowLabel) {\n // Only these properties supported in this emphasis style here.\n label.hoverStyle = {\n text: emphasisText,\n textFill: hoverLabelModel.getTextColor(true),\n // For merging hover style to normal style, do not use\n // `hoverLabelModel.getFont()` here.\n fontStyle: hoverLabelModel.getShallow('fontStyle'),\n fontWeight: hoverLabelModel.getShallow('fontWeight'),\n fontSize: hoverLabelModel.getShallow('fontSize'),\n fontFamily: hoverLabelModel.getShallow('fontFamily')\n };\n } else {\n label.hoverStyle = {\n text: null\n };\n }\n\n label.ignore = !showLabel && !hoverShowLabel;\n graphic.setHoverStyle(this);\n};\n\nlineProto.highlight = function () {\n this.trigger('emphasis');\n};\n\nlineProto.downplay = function () {\n this.trigger('normal');\n};\n\nlineProto.updateLayout = function (lineData, idx) {\n this.setLinePoints(lineData.getItemLayout(idx));\n};\n\nlineProto.setLinePoints = function (points) {\n var linePath = this.childOfName('line');\n setLinePoints(linePath.shape, points);\n linePath.dirty();\n};\n\nzrUtil.inherits(Line, graphic.Group);\nvar _default = Line;\nmodule.exports = _default;","var _config = require(\"../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar modelUtil = require(\"../util/model\");\n\nvar Model = require(\"./Model\");\n\nvar ComponentModel = require(\"./Component\");\n\nvar globalDefault = require(\"./globalDefault\");\n\nvar colorPaletteMinin = require(\"./mixin/colorPalette\");\n\n/**\n * ECharts global model\n *\n * @module {echarts/model/Global}\n */\n\n/**\n * Caution: If the mechanism should be changed some day, these cases\n * should be considered:\n *\n * (1) In `merge option` mode, if using the same option to call `setOption`\n * many times, the result should be the same (try our best to ensure that).\n * (2) In `merge option` mode, if a component has no id/name specified, it\n * will be merged by index, and the result sequence of the components is\n * consistent to the original sequence.\n * (3) `reset` feature (in toolbox). Find detailed info in comments about\n * `mergeOption` in module:echarts/model/OptionManager.\n */\nvar each = zrUtil.each;\nvar filter = zrUtil.filter;\nvar map = zrUtil.map;\nvar isArray = zrUtil.isArray;\nvar indexOf = zrUtil.indexOf;\nvar isObject = zrUtil.isObject;\nvar OPTION_INNER_KEY = '\\0_ec_inner';\n/**\n * @alias module:echarts/model/Global\n *\n * @param {Object} option\n * @param {module:echarts/model/Model} parentModel\n * @param {Object} theme\n */\n\nvar GlobalModel = Model.extend({\n constructor: GlobalModel,\n init: function (option, parentModel, theme, optionManager) {\n theme = theme || {};\n this.option = null; // Mark as not initialized.\n\n /**\n * @type {module:echarts/model/Model}\n * @private\n */\n\n this._theme = new Model(theme);\n /**\n * @type {module:echarts/model/OptionManager}\n */\n\n this._optionManager = optionManager;\n },\n setOption: function (option, optionPreprocessorFuncs) {\n zrUtil.assert(!(OPTION_INNER_KEY in option), 'please use chart.getOption()');\n\n this._optionManager.setOption(option, optionPreprocessorFuncs);\n\n this.resetOption(null);\n },\n\n /**\n * @param {string} type null/undefined: reset all.\n * 'recreate': force recreate all.\n * 'timeline': only reset timeline option\n * 'media': only reset media query option\n * @return {boolean} Whether option changed.\n */\n resetOption: function (type) {\n var optionChanged = false;\n var optionManager = this._optionManager;\n\n if (!type || type === 'recreate') {\n var baseOption = optionManager.mountOption(type === 'recreate');\n\n if (!this.option || type === 'recreate') {\n initBase.call(this, baseOption);\n } else {\n this.restoreData();\n this.mergeOption(baseOption);\n }\n\n optionChanged = true;\n }\n\n if (type === 'timeline' || type === 'media') {\n this.restoreData();\n }\n\n if (!type || type === 'recreate' || type === 'timeline') {\n var timelineOption = optionManager.getTimelineOption(this);\n timelineOption && (this.mergeOption(timelineOption), optionChanged = true);\n }\n\n if (!type || type === 'recreate' || type === 'media') {\n var mediaOptions = optionManager.getMediaOption(this, this._api);\n\n if (mediaOptions.length) {\n each(mediaOptions, function (mediaOption) {\n this.mergeOption(mediaOption, optionChanged = true);\n }, this);\n }\n }\n\n return optionChanged;\n },\n\n /**\n * @protected\n */\n mergeOption: function (newOption) {\n var option = this.option;\n var componentsMap = this._componentsMap;\n var newCptTypes = []; // 如果不存在对应的 component model 则直接 merge\n\n each(newOption, function (componentOption, mainType) {\n if (componentOption == null) {\n return;\n }\n\n if (!ComponentModel.hasClass(mainType)) {\n option[mainType] = option[mainType] == null ? zrUtil.clone(componentOption) : zrUtil.merge(option[mainType], componentOption, true);\n } else {\n newCptTypes.push(mainType);\n }\n }); // FIXME OPTION 同步是否要改回原来的\n\n ComponentModel.topologicalTravel(newCptTypes, ComponentModel.getAllClassMainTypes(), visitComponent, this);\n this._seriesIndices = this._seriesIndices || [];\n\n function visitComponent(mainType, dependencies) {\n var newCptOptionList = modelUtil.normalizeToArray(newOption[mainType]);\n var mapResult = modelUtil.mappingToExists(componentsMap.get(mainType), newCptOptionList);\n modelUtil.makeIdAndName(mapResult); // Set mainType and complete subType.\n\n each(mapResult, function (item, index) {\n var opt = item.option;\n\n if (isObject(opt)) {\n item.keyInfo.mainType = mainType;\n item.keyInfo.subType = determineSubType(mainType, opt, item.exist);\n }\n });\n var dependentModels = getComponentsByTypes(componentsMap, dependencies);\n option[mainType] = [];\n componentsMap.set(mainType, []);\n each(mapResult, function (resultItem, index) {\n var componentModel = resultItem.exist;\n var newCptOption = resultItem.option;\n zrUtil.assert(isObject(newCptOption) || componentModel, 'Empty component definition'); // Consider where is no new option and should be merged using {},\n // see removeEdgeAndAdd in topologicalTravel and\n // ComponentModel.getAllClassMainTypes.\n\n if (!newCptOption) {\n componentModel.mergeOption({}, this);\n componentModel.optionUpdated({}, false);\n } else {\n var ComponentModelClass = ComponentModel.getClass(mainType, resultItem.keyInfo.subType, true);\n\n if (componentModel && componentModel instanceof ComponentModelClass) {\n componentModel.name = resultItem.keyInfo.name;\n componentModel.mergeOption(newCptOption, this);\n componentModel.optionUpdated(newCptOption, false);\n } else {\n // PENDING Global as parent ?\n var extraOpt = zrUtil.extend({\n dependentModels: dependentModels,\n componentIndex: index\n }, resultItem.keyInfo);\n componentModel = new ComponentModelClass(newCptOption, this, this, extraOpt);\n zrUtil.extend(componentModel, extraOpt);\n componentModel.init(newCptOption, this, this, extraOpt); // Call optionUpdated after init.\n // newCptOption has been used as componentModel.option\n // and may be merged with theme and default, so pass null\n // to avoid confusion.\n\n componentModel.optionUpdated(null, true);\n }\n }\n\n componentsMap.get(mainType)[index] = componentModel;\n option[mainType][index] = componentModel.option;\n }, this); // Backup series for filtering.\n\n if (mainType === 'series') {\n this._seriesIndices = createSeriesIndices(componentsMap.get('series'));\n }\n }\n },\n\n /**\n * Get option for output (cloned option and inner info removed)\n * @public\n * @return {Object}\n */\n getOption: function () {\n var option = zrUtil.clone(this.option);\n each(option, function (opts, mainType) {\n if (ComponentModel.hasClass(mainType)) {\n var opts = modelUtil.normalizeToArray(opts);\n\n for (var i = opts.length - 1; i >= 0; i--) {\n // Remove options with inner id.\n if (modelUtil.isIdInner(opts[i])) {\n opts.splice(i, 1);\n }\n }\n\n option[mainType] = opts;\n }\n });\n delete option[OPTION_INNER_KEY];\n return option;\n },\n\n /**\n * @return {module:echarts/model/Model}\n */\n getTheme: function () {\n return this._theme;\n },\n\n /**\n * @param {string} mainType\n * @param {number} [idx=0]\n * @return {module:echarts/model/Component}\n */\n getComponent: function (mainType, idx) {\n var list = this._componentsMap.get(mainType);\n\n if (list) {\n return list[idx || 0];\n }\n },\n\n /**\n * If none of index and id and name used, return all components with mainType.\n * @param {Object} condition\n * @param {string} condition.mainType\n * @param {string} [condition.subType] If ignore, only query by mainType\n * @param {number|Array.} [condition.index] Either input index or id or name.\n * @param {string|Array.} [condition.id] Either input index or id or name.\n * @param {string|Array.} [condition.name] Either input index or id or name.\n * @return {Array.}\n */\n queryComponents: function (condition) {\n var mainType = condition.mainType;\n\n if (!mainType) {\n return [];\n }\n\n var index = condition.index;\n var id = condition.id;\n var name = condition.name;\n\n var cpts = this._componentsMap.get(mainType);\n\n if (!cpts || !cpts.length) {\n return [];\n }\n\n var result;\n\n if (index != null) {\n if (!isArray(index)) {\n index = [index];\n }\n\n result = filter(map(index, function (idx) {\n return cpts[idx];\n }), function (val) {\n return !!val;\n });\n } else if (id != null) {\n var isIdArray = isArray(id);\n result = filter(cpts, function (cpt) {\n return isIdArray && indexOf(id, cpt.id) >= 0 || !isIdArray && cpt.id === id;\n });\n } else if (name != null) {\n var isNameArray = isArray(name);\n result = filter(cpts, function (cpt) {\n return isNameArray && indexOf(name, cpt.name) >= 0 || !isNameArray && cpt.name === name;\n });\n } else {\n // Return all components with mainType\n result = cpts.slice();\n }\n\n return filterBySubType(result, condition);\n },\n\n /**\n * The interface is different from queryComponents,\n * which is convenient for inner usage.\n *\n * @usage\n * var result = findComponents(\n * {mainType: 'dataZoom', query: {dataZoomId: 'abc'}}\n * );\n * var result = findComponents(\n * {mainType: 'series', subType: 'pie', query: {seriesName: 'uio'}}\n * );\n * var result = findComponents(\n * {mainType: 'series'},\n * function (model, index) {...}\n * );\n * // result like [component0, componnet1, ...]\n *\n * @param {Object} condition\n * @param {string} condition.mainType Mandatory.\n * @param {string} [condition.subType] Optional.\n * @param {Object} [condition.query] like {xxxIndex, xxxId, xxxName},\n * where xxx is mainType.\n * If query attribute is null/undefined or has no index/id/name,\n * do not filtering by query conditions, which is convenient for\n * no-payload situations or when target of action is global.\n * @param {Function} [condition.filter] parameter: component, return boolean.\n * @return {Array.}\n */\n findComponents: function (condition) {\n var query = condition.query;\n var mainType = condition.mainType;\n var queryCond = getQueryCond(query);\n var result = queryCond ? this.queryComponents(queryCond) : this._componentsMap.get(mainType);\n return doFilter(filterBySubType(result, condition));\n\n function getQueryCond(q) {\n var indexAttr = mainType + 'Index';\n var idAttr = mainType + 'Id';\n var nameAttr = mainType + 'Name';\n return q && (q[indexAttr] != null || q[idAttr] != null || q[nameAttr] != null) ? {\n mainType: mainType,\n // subType will be filtered finally.\n index: q[indexAttr],\n id: q[idAttr],\n name: q[nameAttr]\n } : null;\n }\n\n function doFilter(res) {\n return condition.filter ? filter(res, condition.filter) : res;\n }\n },\n\n /**\n * @usage\n * eachComponent('legend', function (legendModel, index) {\n * ...\n * });\n * eachComponent(function (componentType, model, index) {\n * // componentType does not include subType\n * // (componentType is 'xxx' but not 'xxx.aa')\n * });\n * eachComponent(\n * {mainType: 'dataZoom', query: {dataZoomId: 'abc'}},\n * function (model, index) {...}\n * );\n * eachComponent(\n * {mainType: 'series', subType: 'pie', query: {seriesName: 'uio'}},\n * function (model, index) {...}\n * );\n *\n * @param {string|Object=} mainType When mainType is object, the definition\n * is the same as the method 'findComponents'.\n * @param {Function} cb\n * @param {*} context\n */\n eachComponent: function (mainType, cb, context) {\n var componentsMap = this._componentsMap;\n\n if (typeof mainType === 'function') {\n context = cb;\n cb = mainType;\n componentsMap.each(function (components, componentType) {\n each(components, function (component, index) {\n cb.call(context, componentType, component, index);\n });\n });\n } else if (zrUtil.isString(mainType)) {\n each(componentsMap.get(mainType), cb, context);\n } else if (isObject(mainType)) {\n var queryResult = this.findComponents(mainType);\n each(queryResult, cb, context);\n }\n },\n\n /**\n * @param {string} name\n * @return {Array.}\n */\n getSeriesByName: function (name) {\n var series = this._componentsMap.get('series');\n\n return filter(series, function (oneSeries) {\n return oneSeries.name === name;\n });\n },\n\n /**\n * @param {number} seriesIndex\n * @return {module:echarts/model/Series}\n */\n getSeriesByIndex: function (seriesIndex) {\n return this._componentsMap.get('series')[seriesIndex];\n },\n\n /**\n * @param {string} subType\n * @return {Array.}\n */\n getSeriesByType: function (subType) {\n var series = this._componentsMap.get('series');\n\n return filter(series, function (oneSeries) {\n return oneSeries.subType === subType;\n });\n },\n\n /**\n * @return {Array.}\n */\n getSeries: function () {\n return this._componentsMap.get('series').slice();\n },\n\n /**\n * After filtering, series may be different\n * frome raw series.\n *\n * @param {Function} cb\n * @param {*} context\n */\n eachSeries: function (cb, context) {\n assertSeriesInitialized(this);\n each(this._seriesIndices, function (rawSeriesIndex) {\n var series = this._componentsMap.get('series')[rawSeriesIndex];\n\n cb.call(context, series, rawSeriesIndex);\n }, this);\n },\n\n /**\n * Iterate raw series before filtered.\n *\n * @param {Function} cb\n * @param {*} context\n */\n eachRawSeries: function (cb, context) {\n each(this._componentsMap.get('series'), cb, context);\n },\n\n /**\n * After filtering, series may be different.\n * frome raw series.\n *\n * @parma {string} subType\n * @param {Function} cb\n * @param {*} context\n */\n eachSeriesByType: function (subType, cb, context) {\n assertSeriesInitialized(this);\n each(this._seriesIndices, function (rawSeriesIndex) {\n var series = this._componentsMap.get('series')[rawSeriesIndex];\n\n if (series.subType === subType) {\n cb.call(context, series, rawSeriesIndex);\n }\n }, this);\n },\n\n /**\n * Iterate raw series before filtered of given type.\n *\n * @parma {string} subType\n * @param {Function} cb\n * @param {*} context\n */\n eachRawSeriesByType: function (subType, cb, context) {\n return each(this.getSeriesByType(subType), cb, context);\n },\n\n /**\n * @param {module:echarts/model/Series} seriesModel\n */\n isSeriesFiltered: function (seriesModel) {\n assertSeriesInitialized(this);\n return zrUtil.indexOf(this._seriesIndices, seriesModel.componentIndex) < 0;\n },\n\n /**\n * @return {Array.}\n */\n getCurrentSeriesIndices: function () {\n return (this._seriesIndices || []).slice();\n },\n\n /**\n * @param {Function} cb\n * @param {*} context\n */\n filterSeries: function (cb, context) {\n assertSeriesInitialized(this);\n var filteredSeries = filter(this._componentsMap.get('series'), cb, context);\n this._seriesIndices = createSeriesIndices(filteredSeries);\n },\n restoreData: function () {\n var componentsMap = this._componentsMap;\n this._seriesIndices = createSeriesIndices(componentsMap.get('series'));\n var componentTypes = [];\n componentsMap.each(function (components, componentType) {\n componentTypes.push(componentType);\n });\n ComponentModel.topologicalTravel(componentTypes, ComponentModel.getAllClassMainTypes(), function (componentType, dependencies) {\n each(componentsMap.get(componentType), function (component) {\n component.restoreData();\n });\n });\n }\n});\n/**\n * @inner\n */\n\nfunction mergeTheme(option, theme) {\n zrUtil.each(theme, function (themeItem, name) {\n // 如果有 component model 则把具体的 merge 逻辑交给该 model 处理\n if (!ComponentModel.hasClass(name)) {\n if (typeof themeItem === 'object') {\n option[name] = !option[name] ? zrUtil.clone(themeItem) : zrUtil.merge(option[name], themeItem, false);\n } else {\n if (option[name] == null) {\n option[name] = themeItem;\n }\n }\n }\n });\n}\n\nfunction initBase(baseOption) {\n baseOption = baseOption; // Using OPTION_INNER_KEY to mark that this option can not be used outside,\n // i.e. `chart.setOption(chart.getModel().option);` is forbiden.\n\n this.option = {};\n this.option[OPTION_INNER_KEY] = 1;\n /**\n * Init with series: [], in case of calling findSeries method\n * before series initialized.\n * @type {Object.>}\n * @private\n */\n\n this._componentsMap = zrUtil.createHashMap({\n series: []\n });\n /**\n * Mapping between filtered series list and raw series list.\n * key: filtered series indices, value: raw series indices.\n * @type {Array.}\n * @private\n */\n\n this._seriesIndices = null;\n mergeTheme(baseOption, this._theme.option); // TODO Needs clone when merging to the unexisted property\n\n zrUtil.merge(baseOption, globalDefault, false);\n this.mergeOption(baseOption);\n}\n/**\n * @inner\n * @param {Array.|string} types model types\n * @return {Object} key: {string} type, value: {Array.} models\n */\n\n\nfunction getComponentsByTypes(componentsMap, types) {\n if (!zrUtil.isArray(types)) {\n types = types ? [types] : [];\n }\n\n var ret = {};\n each(types, function (type) {\n ret[type] = (componentsMap.get(type) || []).slice();\n });\n return ret;\n}\n/**\n * @inner\n */\n\n\nfunction determineSubType(mainType, newCptOption, existComponent) {\n var subType = newCptOption.type ? newCptOption.type : existComponent ? existComponent.subType // Use determineSubType only when there is no existComponent.\n : ComponentModel.determineSubType(mainType, newCptOption); // tooltip, markline, markpoint may always has no subType\n\n return subType;\n}\n/**\n * @inner\n */\n\n\nfunction createSeriesIndices(seriesModels) {\n return map(seriesModels, function (series) {\n return series.componentIndex;\n }) || [];\n}\n/**\n * @inner\n */\n\n\nfunction filterBySubType(components, condition) {\n // Using hasOwnProperty for restrict. Consider\n // subType is undefined in user payload.\n return condition.hasOwnProperty('subType') ? filter(components, function (cpt) {\n return cpt.subType === condition.subType;\n }) : components;\n}\n/**\n * @inner\n */\n\n\nfunction assertSeriesInitialized(ecModel) {}\n\nzrUtil.mixin(GlobalModel, colorPaletteMinin);\nvar _default = GlobalModel;\nmodule.exports = _default;","var _config = require(\"../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar modelUtil = require(\"../util/model\");\n\nvar graphicUtil = require(\"../util/graphic\");\n\nvar layoutUtil = require(\"../util/layout\");\n\n// -------------\n// Preprocessor\n// -------------\necharts.registerPreprocessor(function (option) {\n var graphicOption = option.graphic; // Convert\n // {graphic: [{left: 10, type: 'circle'}, ...]}\n // or\n // {graphic: {left: 10, type: 'circle'}}\n // to\n // {graphic: [{elements: [{left: 10, type: 'circle'}, ...]}]}\n\n if (zrUtil.isArray(graphicOption)) {\n if (!graphicOption[0] || !graphicOption[0].elements) {\n option.graphic = [{\n elements: graphicOption\n }];\n } else {\n // Only one graphic instance can be instantiated. (We dont\n // want that too many views are created in echarts._viewMap)\n option.graphic = [option.graphic[0]];\n }\n } else if (graphicOption && !graphicOption.elements) {\n option.graphic = [{\n elements: [graphicOption]\n }];\n }\n}); // ------\n// Model\n// ------\n\nvar GraphicModel = echarts.extendComponentModel({\n type: 'graphic',\n defaultOption: {\n // Extra properties for each elements:\n //\n // left/right/top/bottom: (like 12, '22%', 'center', default undefined)\n // If left/rigth is set, shape.x/shape.cx/position will not be used.\n // If top/bottom is set, shape.y/shape.cy/position will not be used.\n // This mechanism is useful when you want to position a group/element\n // against the right side or the center of this container.\n //\n // width/height: (can only be pixel value, default 0)\n // Only be used to specify contianer(group) size, if needed. And\n // can not be percentage value (like '33%'). See the reason in the\n // layout algorithm below.\n //\n // bounding: (enum: 'all' (default) | 'raw')\n // Specify how to calculate boundingRect when locating.\n // 'all': Get uioned and transformed boundingRect\n // from both itself and its descendants.\n // This mode simplies confining a group of elements in the bounding\n // of their ancester container (e.g., using 'right: 0').\n // 'raw': Only use the boundingRect of itself and before transformed.\n // This mode is similar to css behavior, which is useful when you\n // want an element to be able to overflow its container. (Consider\n // a rotated circle needs to be located in a corner.)\n // Note: elements is always behind its ancestors in this elements array.\n elements: [],\n parentId: null\n },\n\n /**\n * Save el options for the sake of the performance (only update modified graphics).\n * The order is the same as those in option. (ancesters -> descendants)\n *\n * @private\n * @type {Array.}\n */\n _elOptionsToUpdate: null,\n\n /**\n * @override\n */\n mergeOption: function (option) {\n // Prevent default merge to elements\n var elements = this.option.elements;\n this.option.elements = null;\n GraphicModel.superApply(this, 'mergeOption', arguments);\n this.option.elements = elements;\n },\n\n /**\n * @override\n */\n optionUpdated: function (newOption, isInit) {\n var thisOption = this.option;\n var newList = (isInit ? thisOption : newOption).elements;\n var existList = thisOption.elements = isInit ? [] : thisOption.elements;\n var flattenedList = [];\n\n this._flatten(newList, flattenedList);\n\n var mappingResult = modelUtil.mappingToExists(existList, flattenedList);\n modelUtil.makeIdAndName(mappingResult); // Clear elOptionsToUpdate\n\n var elOptionsToUpdate = this._elOptionsToUpdate = [];\n zrUtil.each(mappingResult, function (resultItem, index) {\n var newElOption = resultItem.option;\n\n if (!newElOption) {\n return;\n }\n\n elOptionsToUpdate.push(newElOption);\n setKeyInfoToNewElOption(resultItem, newElOption);\n mergeNewElOptionToExist(existList, index, newElOption);\n setLayoutInfoToExist(existList[index], newElOption);\n }, this); // Clean\n\n for (var i = existList.length - 1; i >= 0; i--) {\n if (existList[i] == null) {\n existList.splice(i, 1);\n } else {\n // $action should be volatile, otherwise option gotten from\n // `getOption` will contain unexpected $action.\n delete existList[i].$action;\n }\n }\n },\n\n /**\n * Convert\n * [{\n * type: 'group',\n * id: 'xx',\n * children: [{type: 'circle'}, {type: 'polygon'}]\n * }]\n * to\n * [\n * {type: 'group', id: 'xx'},\n * {type: 'circle', parentId: 'xx'},\n * {type: 'polygon', parentId: 'xx'}\n * ]\n *\n * @private\n * @param {Array.} optionList option list\n * @param {Array.} result result of flatten\n * @param {Object} parentOption parent option\n */\n _flatten: function (optionList, result, parentOption) {\n zrUtil.each(optionList, function (option) {\n if (!option) {\n return;\n }\n\n if (parentOption) {\n option.parentOption = parentOption;\n }\n\n result.push(option);\n var children = option.children;\n\n if (option.type === 'group' && children) {\n this._flatten(children, result, option);\n } // Deleting for JSON output, and for not affecting group creation.\n\n\n delete option.children;\n }, this);\n },\n // FIXME\n // Pass to view using payload? setOption has a payload?\n useElOptionsToUpdate: function () {\n var els = this._elOptionsToUpdate; // Clear to avoid render duplicately when zooming.\n\n this._elOptionsToUpdate = null;\n return els;\n }\n}); // -----\n// View\n// -----\n\necharts.extendComponentView({\n type: 'graphic',\n\n /**\n * @override\n */\n init: function (ecModel, api) {\n /**\n * @private\n * @type {module:zrender/core/util.HashMap}\n */\n this._elMap = zrUtil.createHashMap();\n /**\n * @private\n * @type {module:echarts/graphic/GraphicModel}\n */\n\n this._lastGraphicModel;\n },\n\n /**\n * @override\n */\n render: function (graphicModel, ecModel, api) {\n // Having leveraged between use cases and algorithm complexity, a very\n // simple layout mechanism is used:\n // The size(width/height) can be determined by itself or its parent (not\n // implemented yet), but can not by its children. (Top-down travel)\n // The location(x/y) can be determined by the bounding rect of itself\n // (can including its descendants or not) and the size of its parent.\n // (Bottom-up travel)\n // When `chart.clear()` or `chart.setOption({...}, true)` with the same id,\n // view will be reused.\n if (graphicModel !== this._lastGraphicModel) {\n this._clear();\n }\n\n this._lastGraphicModel = graphicModel;\n\n this._updateElements(graphicModel, api);\n\n this._relocate(graphicModel, api);\n },\n\n /**\n * Update graphic elements.\n *\n * @private\n * @param {Object} graphicModel graphic model\n * @param {module:echarts/ExtensionAPI} api extension API\n */\n _updateElements: function (graphicModel, api) {\n var elOptionsToUpdate = graphicModel.useElOptionsToUpdate();\n\n if (!elOptionsToUpdate) {\n return;\n }\n\n var elMap = this._elMap;\n var rootGroup = this.group; // Top-down tranverse to assign graphic settings to each elements.\n\n zrUtil.each(elOptionsToUpdate, function (elOption) {\n var $action = elOption.$action;\n var id = elOption.id;\n var existEl = elMap.get(id);\n var parentId = elOption.parentId;\n var targetElParent = parentId != null ? elMap.get(parentId) : rootGroup;\n\n if (elOption.type === 'text') {\n var elOptionStyle = elOption.style; // In top/bottom mode, textVerticalAlign should not be used, which cause\n // inaccurately locating.\n\n if (elOption.hv && elOption.hv[1]) {\n elOptionStyle.textVerticalAlign = elOptionStyle.textBaseline = null;\n } // Compatible with previous setting: both support fill and textFill,\n // stroke and textStroke.\n\n\n !elOptionStyle.hasOwnProperty('textFill') && elOptionStyle.fill && (elOptionStyle.textFill = elOptionStyle.fill);\n !elOptionStyle.hasOwnProperty('textStroke') && elOptionStyle.stroke && (elOptionStyle.textStroke = elOptionStyle.stroke);\n } // Remove unnecessary props to avoid potential problems.\n\n\n var elOptionCleaned = getCleanedElOption(elOption); // For simple, do not support parent change, otherwise reorder is needed.\n\n if (!$action || $action === 'merge') {\n existEl ? existEl.attr(elOptionCleaned) : createEl(id, targetElParent, elOptionCleaned, elMap);\n } else if ($action === 'replace') {\n removeEl(existEl, elMap);\n createEl(id, targetElParent, elOptionCleaned, elMap);\n } else if ($action === 'remove') {\n removeEl(existEl, elMap);\n }\n\n var el = elMap.get(id);\n\n if (el) {\n el.__ecGraphicWidth = elOption.width;\n el.__ecGraphicHeight = elOption.height;\n }\n });\n },\n\n /**\n * Locate graphic elements.\n *\n * @private\n * @param {Object} graphicModel graphic model\n * @param {module:echarts/ExtensionAPI} api extension API\n */\n _relocate: function (graphicModel, api) {\n var elOptions = graphicModel.option.elements;\n var rootGroup = this.group;\n var elMap = this._elMap; // Bottom-up tranvese all elements (consider ec resize) to locate elements.\n\n for (var i = elOptions.length - 1; i >= 0; i--) {\n var elOption = elOptions[i];\n var el = elMap.get(elOption.id);\n\n if (!el) {\n continue;\n }\n\n var parentEl = el.parent;\n var containerInfo = parentEl === rootGroup ? {\n width: api.getWidth(),\n height: api.getHeight()\n } : {\n // Like 'position:absolut' in css, default 0.\n width: parentEl.__ecGraphicWidth || 0,\n height: parentEl.__ecGraphicHeight || 0\n };\n layoutUtil.positionElement(el, elOption, containerInfo, null, {\n hv: elOption.hv,\n boundingMode: elOption.bounding\n });\n }\n },\n\n /**\n * Clear all elements.\n *\n * @private\n */\n _clear: function () {\n var elMap = this._elMap;\n elMap.each(function (el) {\n removeEl(el, elMap);\n });\n this._elMap = zrUtil.createHashMap();\n },\n\n /**\n * @override\n */\n dispose: function () {\n this._clear();\n }\n});\n\nfunction createEl(id, targetElParent, elOption, elMap) {\n var graphicType = elOption.type;\n var Clz = graphicUtil[graphicType.charAt(0).toUpperCase() + graphicType.slice(1)];\n var el = new Clz(elOption);\n targetElParent.add(el);\n elMap.set(id, el);\n el.__ecGraphicId = id;\n}\n\nfunction removeEl(existEl, elMap) {\n var existElParent = existEl && existEl.parent;\n\n if (existElParent) {\n existEl.type === 'group' && existEl.traverse(function (el) {\n removeEl(el, elMap);\n });\n elMap.removeKey(existEl.__ecGraphicId);\n existElParent.remove(existEl);\n }\n} // Remove unnecessary props to avoid potential problems.\n\n\nfunction getCleanedElOption(elOption) {\n elOption = zrUtil.extend({}, elOption);\n zrUtil.each(['id', 'parentId', '$action', 'hv', 'bounding'].concat(layoutUtil.LOCATION_PARAMS), function (name) {\n delete elOption[name];\n });\n return elOption;\n}\n\nfunction isSetLoc(obj, props) {\n var isSet;\n zrUtil.each(props, function (prop) {\n obj[prop] != null && obj[prop] !== 'auto' && (isSet = true);\n });\n return isSet;\n}\n\nfunction setKeyInfoToNewElOption(resultItem, newElOption) {\n var existElOption = resultItem.exist; // Set id and type after id assigned.\n\n newElOption.id = resultItem.keyInfo.id;\n !newElOption.type && existElOption && (newElOption.type = existElOption.type); // Set parent id if not specified\n\n if (newElOption.parentId == null) {\n var newElParentOption = newElOption.parentOption;\n\n if (newElParentOption) {\n newElOption.parentId = newElParentOption.id;\n } else if (existElOption) {\n newElOption.parentId = existElOption.parentId;\n }\n } // Clear\n\n\n newElOption.parentOption = null;\n}\n\nfunction mergeNewElOptionToExist(existList, index, newElOption) {\n // Update existing options, for `getOption` feature.\n var newElOptCopy = zrUtil.extend({}, newElOption);\n var existElOption = existList[index];\n var $action = newElOption.$action || 'merge';\n\n if ($action === 'merge') {\n if (existElOption) {\n // We can ensure that newElOptCopy and existElOption are not\n // the same object, so `merge` will not change newElOptCopy.\n zrUtil.merge(existElOption, newElOptCopy, true); // Rigid body, use ignoreSize.\n\n layoutUtil.mergeLayoutParam(existElOption, newElOptCopy, {\n ignoreSize: true\n }); // Will be used in render.\n\n layoutUtil.copyLayoutParams(newElOption, existElOption);\n } else {\n existList[index] = newElOptCopy;\n }\n } else if ($action === 'replace') {\n existList[index] = newElOptCopy;\n } else if ($action === 'remove') {\n // null will be cleaned later.\n existElOption && (existList[index] = null);\n }\n}\n\nfunction setLayoutInfoToExist(existItem, newElOption) {\n if (!existItem) {\n return;\n }\n\n existItem.hv = newElOption.hv = [// Rigid body, dont care `width`.\n isSetLoc(newElOption, ['left', 'right']), // Rigid body, dont care `height`.\n isSetLoc(newElOption, ['top', 'bottom'])]; // Give default group size. Otherwise layout error may occur.\n\n if (existItem.type === 'group') {\n existItem.width == null && (existItem.width = newElOption.width = 0);\n existItem.height == null && (existItem.height = newElOption.height = 0);\n }\n}","var graphic = require(\"../../util/graphic\");\n\nvar vec2 = require(\"zrender/lib/core/vector\");\n\n/**\n * Line path for bezier and straight line draw\n */\nvar straightLineProto = graphic.Line.prototype;\nvar bezierCurveProto = graphic.BezierCurve.prototype;\n\nfunction isLine(shape) {\n return isNaN(+shape.cpx1) || isNaN(+shape.cpy1);\n}\n\nvar _default = graphic.extendShape({\n type: 'ec-line',\n style: {\n stroke: '#000',\n fill: null\n },\n shape: {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n percent: 1,\n cpx1: null,\n cpy1: null\n },\n buildPath: function (ctx, shape) {\n (isLine(shape) ? straightLineProto : bezierCurveProto).buildPath(ctx, shape);\n },\n pointAt: function (t) {\n return isLine(this.shape) ? straightLineProto.pointAt.call(this, t) : bezierCurveProto.pointAt.call(this, t);\n },\n tangentAt: function (t) {\n var shape = this.shape;\n var p = isLine(shape) ? [shape.x2 - shape.x1, shape.y2 - shape.y1] : bezierCurveProto.tangentAt.call(this, t);\n return vec2.normalize(p, p);\n }\n});\n\nmodule.exports = _default;","function _default(seriesType, defaultSymbolType, legendSymbol, ecModel, api) {\n // Encoding visual for all series include which is filtered for legend drawing\n ecModel.eachRawSeriesByType(seriesType, function (seriesModel) {\n var data = seriesModel.getData();\n var symbolType = seriesModel.get('symbol') || defaultSymbolType;\n var symbolSize = seriesModel.get('symbolSize');\n data.setVisual({\n legendSymbol: legendSymbol || symbolType,\n symbol: symbolType,\n symbolSize: symbolSize\n }); // Only visible series has each data be visual encoded\n\n if (!ecModel.isSeriesFiltered(seriesModel)) {\n if (typeof symbolSize === 'function') {\n data.each(function (idx) {\n var rawValue = seriesModel.getRawValue(idx); // FIXME\n\n var params = seriesModel.getDataParams(idx);\n data.setItemVisual(idx, 'symbolSize', symbolSize(rawValue, params));\n });\n }\n\n data.each(function (idx) {\n var itemModel = data.getItemModel(idx);\n var itemSymbolType = itemModel.getShallow('symbol', true);\n var itemSymbolSize = itemModel.getShallow('symbolSize', true); // If has item symbol\n\n if (itemSymbolType != null) {\n data.setItemVisual(idx, 'symbol', itemSymbolType);\n }\n\n if (itemSymbolSize != null) {\n // PENDING Transform symbolSize ?\n data.setItemVisual(idx, 'symbolSize', itemSymbolSize);\n }\n });\n }\n });\n}\n\nmodule.exports = _default;","function defaultKeyGetter(item) {\n return item;\n}\n/**\n * @param {Array} oldArr\n * @param {Array} newArr\n * @param {Function} oldKeyGetter\n * @param {Function} newKeyGetter\n * @param {Object} [context] Can be visited by this.context in callback.\n */\n\n\nfunction DataDiffer(oldArr, newArr, oldKeyGetter, newKeyGetter, context) {\n this._old = oldArr;\n this._new = newArr;\n this._oldKeyGetter = oldKeyGetter || defaultKeyGetter;\n this._newKeyGetter = newKeyGetter || defaultKeyGetter;\n this.context = context;\n}\n\nDataDiffer.prototype = {\n constructor: DataDiffer,\n\n /**\n * Callback function when add a data\n */\n add: function (func) {\n this._add = func;\n return this;\n },\n\n /**\n * Callback function when update a data\n */\n update: function (func) {\n this._update = func;\n return this;\n },\n\n /**\n * Callback function when remove a data\n */\n remove: function (func) {\n this._remove = func;\n return this;\n },\n execute: function () {\n var oldArr = this._old;\n var newArr = this._new;\n var oldDataIndexMap = {};\n var newDataIndexMap = {};\n var oldDataKeyArr = [];\n var newDataKeyArr = [];\n var i;\n initIndexMap(oldArr, oldDataIndexMap, oldDataKeyArr, '_oldKeyGetter', this);\n initIndexMap(newArr, newDataIndexMap, newDataKeyArr, '_newKeyGetter', this); // Travel by inverted order to make sure order consistency\n // when duplicate keys exists (consider newDataIndex.pop() below).\n // For performance consideration, these code below do not look neat.\n\n for (i = 0; i < oldArr.length; i++) {\n var key = oldDataKeyArr[i];\n var idx = newDataIndexMap[key]; // idx can never be empty array here. see 'set null' logic below.\n\n if (idx != null) {\n // Consider there is duplicate key (for example, use dataItem.name as key).\n // We should make sure every item in newArr and oldArr can be visited.\n var len = idx.length;\n\n if (len) {\n len === 1 && (newDataIndexMap[key] = null);\n idx = idx.unshift();\n } else {\n newDataIndexMap[key] = null;\n }\n\n this._update && this._update(idx, i);\n } else {\n this._remove && this._remove(i);\n }\n }\n\n for (var i = 0; i < newDataKeyArr.length; i++) {\n var key = newDataKeyArr[i];\n\n if (newDataIndexMap.hasOwnProperty(key)) {\n var idx = newDataIndexMap[key];\n\n if (idx == null) {\n continue;\n } // idx can never be empty array here. see 'set null' logic above.\n\n\n if (!idx.length) {\n this._add && this._add(idx);\n } else {\n for (var j = 0, len = idx.length; j < len; j++) {\n this._add && this._add(idx[j]);\n }\n }\n }\n }\n }\n};\n\nfunction initIndexMap(arr, map, keyArr, keyGetterName, dataDiffer) {\n for (var i = 0; i < arr.length; i++) {\n // Add prefix to avoid conflict with Object.prototype.\n var key = '_ec_' + dataDiffer[keyGetterName](arr[i], i);\n var existence = map[key];\n\n if (existence == null) {\n keyArr.push(key);\n map[key] = i;\n } else {\n if (!existence.length) {\n map[key] = existence = [existence];\n }\n\n existence.push(i);\n }\n }\n}\n\nvar _default = DataDiffer;\nmodule.exports = _default;","var layout = require(\"../../util/layout\");\n\nvar nest = require(\"../../util/array/nest\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/**\n * @file The layout algorithm of sankey view\n * @author Deqing Li(annong035@gmail.com)\n */\nfunction _default(ecModel, api, payload) {\n ecModel.eachSeriesByType('sankey', function (seriesModel) {\n var nodeWidth = seriesModel.get('nodeWidth');\n var nodeGap = seriesModel.get('nodeGap');\n var layoutInfo = getViewRect(seriesModel, api);\n seriesModel.layoutInfo = layoutInfo;\n var width = layoutInfo.width;\n var height = layoutInfo.height;\n var graph = seriesModel.getGraph();\n var nodes = graph.nodes;\n var edges = graph.edges;\n computeNodeValues(nodes);\n var filteredNodes = zrUtil.filter(nodes, function (node) {\n return node.getLayout().value === 0;\n });\n var iterations = filteredNodes.length !== 0 ? 0 : seriesModel.get('layoutIterations');\n layoutSankey(nodes, edges, nodeWidth, nodeGap, width, height, iterations);\n });\n}\n/**\n * Get the layout position of the whole view\n *\n * @param {module:echarts/model/Series} seriesModel the model object of sankey series\n * @param {module:echarts/ExtensionAPI} api provide the API list that the developer can call\n * @return {module:zrender/core/BoundingRect} size of rect to draw the sankey view\n */\n\n\nfunction getViewRect(seriesModel, api) {\n return layout.getLayoutRect(seriesModel.getBoxLayoutParams(), {\n width: api.getWidth(),\n height: api.getHeight()\n });\n}\n\nfunction layoutSankey(nodes, edges, nodeWidth, nodeGap, width, height, iterations) {\n computeNodeBreadths(nodes, nodeWidth, width);\n computeNodeDepths(nodes, edges, height, nodeGap, iterations);\n computeEdgeDepths(nodes);\n}\n/**\n * Compute the value of each node by summing the associated edge's value\n *\n * @param {module:echarts/data/Graph~Node} nodes node of sankey view\n */\n\n\nfunction computeNodeValues(nodes) {\n zrUtil.each(nodes, function (node) {\n var value1 = sum(node.outEdges, getEdgeValue);\n var value2 = sum(node.inEdges, getEdgeValue);\n var value = Math.max(value1, value2);\n node.setLayout({\n value: value\n }, true);\n });\n}\n/**\n * Compute the x-position for each node\n *\n * @param {module:echarts/data/Graph~Node} nodes node of sankey view\n * @param {number} nodeWidth the dx of the node\n * @param {number} width the whole width of the area to draw the view\n */\n\n\nfunction computeNodeBreadths(nodes, nodeWidth, width) {\n var remainNodes = nodes;\n var nextNode = null;\n var x = 0;\n var kx = 0;\n\n while (remainNodes.length) {\n nextNode = [];\n\n for (var i = 0, len = remainNodes.length; i < len; i++) {\n var node = remainNodes[i];\n node.setLayout({\n x: x\n }, true);\n node.setLayout({\n dx: nodeWidth\n }, true);\n\n for (var j = 0, lenj = node.outEdges.length; j < lenj; j++) {\n nextNode.push(node.outEdges[j].node2);\n }\n }\n\n remainNodes = nextNode;\n ++x;\n }\n\n moveSinksRight(nodes, x);\n kx = (width - nodeWidth) / (x - 1);\n scaleNodeBreadths(nodes, kx);\n}\n/**\n * All the node without outEgdes are assigned maximum x-position and\n * be aligned in the last column.\n *\n * @param {module:echarts/data/Graph~Node} nodes node of sankey view\n * @param {number} x value (x-1) use to assign to node without outEdges\n * as x-position\n */\n\n\nfunction moveSinksRight(nodes, x) {\n zrUtil.each(nodes, function (node) {\n if (!node.outEdges.length) {\n node.setLayout({\n x: x - 1\n }, true);\n }\n });\n}\n/**\n * Scale node x-position to the width\n *\n * @param {module:echarts/data/Graph~Node} nodes node of sankey view\n * @param {number} kx multiple used to scale nodes\n */\n\n\nfunction scaleNodeBreadths(nodes, kx) {\n zrUtil.each(nodes, function (node) {\n var nodeX = node.getLayout().x * kx;\n node.setLayout({\n x: nodeX\n }, true);\n });\n}\n/**\n * Using Gauss-Seidel iterations method to compute the node depth(y-position)\n *\n * @param {module:echarts/data/Graph~Node} nodes node of sankey view\n * @param {module:echarts/data/Graph~Edge} edges edge of sankey view\n * @param {number} height the whole height of the area to draw the view\n * @param {number} nodeGap the vertical distance between two nodes\n * in the same column.\n * @param {number} iterations the number of iterations for the algorithm\n */\n\n\nfunction computeNodeDepths(nodes, edges, height, nodeGap, iterations) {\n var nodesByBreadth = nest().key(function (d) {\n return d.getLayout().x;\n }).sortKeys(ascending).entries(nodes).map(function (d) {\n return d.values;\n });\n initializeNodeDepth(nodes, nodesByBreadth, edges, height, nodeGap);\n resolveCollisions(nodesByBreadth, nodeGap, height);\n\n for (var alpha = 1; iterations > 0; iterations--) {\n // 0.99 is a experience parameter, ensure that each iterations of\n // changes as small as possible.\n alpha *= 0.99;\n relaxRightToLeft(nodesByBreadth, alpha);\n resolveCollisions(nodesByBreadth, nodeGap, height);\n relaxLeftToRight(nodesByBreadth, alpha);\n resolveCollisions(nodesByBreadth, nodeGap, height);\n }\n}\n/**\n * Compute the original y-position for each node\n *\n * @param {module:echarts/data/Graph~Node} nodes node of sankey view\n * @param {Array.>} nodesByBreadth\n * group by the array of all sankey nodes based on the nodes x-position.\n * @param {module:echarts/data/Graph~Edge} edges edge of sankey view\n * @param {number} height the whole height of the area to draw the view\n * @param {number} nodeGap the vertical distance between two nodes\n */\n\n\nfunction initializeNodeDepth(nodes, nodesByBreadth, edges, height, nodeGap) {\n var kyArray = [];\n zrUtil.each(nodesByBreadth, function (nodes) {\n var n = nodes.length;\n var sum = 0;\n zrUtil.each(nodes, function (node) {\n sum += node.getLayout().value;\n });\n var ky = (height - (n - 1) * nodeGap) / sum;\n kyArray.push(ky);\n });\n kyArray.sort(function (a, b) {\n return a - b;\n });\n var ky0 = kyArray[0];\n zrUtil.each(nodesByBreadth, function (nodes) {\n zrUtil.each(nodes, function (node, i) {\n node.setLayout({\n y: i\n }, true);\n var nodeDy = node.getLayout().value * ky0;\n node.setLayout({\n dy: nodeDy\n }, true);\n });\n });\n zrUtil.each(edges, function (edge) {\n var edgeDy = +edge.getValue() * ky0;\n edge.setLayout({\n dy: edgeDy\n }, true);\n });\n}\n/**\n * Resolve the collision of initialized depth (y-position)\n *\n * @param {Array.>} nodesByBreadth\n * group by the array of all sankey nodes based on the nodes x-position.\n * @param {number} nodeGap the vertical distance between two nodes\n * @param {number} height the whole height of the area to draw the view\n */\n\n\nfunction resolveCollisions(nodesByBreadth, nodeGap, height) {\n zrUtil.each(nodesByBreadth, function (nodes) {\n var node;\n var dy;\n var y0 = 0;\n var n = nodes.length;\n var i;\n nodes.sort(ascendingDepth);\n\n for (i = 0; i < n; i++) {\n node = nodes[i];\n dy = y0 - node.getLayout().y;\n\n if (dy > 0) {\n var nodeY = node.getLayout().y + dy;\n node.setLayout({\n y: nodeY\n }, true);\n }\n\n y0 = node.getLayout().y + node.getLayout().dy + nodeGap;\n } // if the bottommost node goes outside the bounds, push it back up\n\n\n dy = y0 - nodeGap - height;\n\n if (dy > 0) {\n var nodeY = node.getLayout().y - dy;\n node.setLayout({\n y: nodeY\n }, true);\n y0 = node.getLayout().y;\n\n for (i = n - 2; i >= 0; --i) {\n node = nodes[i];\n dy = node.getLayout().y + node.getLayout().dy + nodeGap - y0;\n\n if (dy > 0) {\n nodeY = node.getLayout().y - dy;\n node.setLayout({\n y: nodeY\n }, true);\n }\n\n y0 = node.getLayout().y;\n }\n }\n });\n}\n/**\n * Change the y-position of the nodes, except most the right side nodes\n *\n * @param {Array.>} nodesByBreadth\n * group by the array of all sankey nodes based on the node x-position.\n * @param {number} alpha parameter used to adjust the nodes y-position\n */\n\n\nfunction relaxRightToLeft(nodesByBreadth, alpha) {\n zrUtil.each(nodesByBreadth.slice().reverse(), function (nodes) {\n zrUtil.each(nodes, function (node) {\n if (node.outEdges.length) {\n var y = sum(node.outEdges, weightedTarget) / sum(node.outEdges, getEdgeValue);\n var nodeY = node.getLayout().y + (y - center(node)) * alpha;\n node.setLayout({\n y: nodeY\n }, true);\n }\n });\n });\n}\n\nfunction weightedTarget(edge) {\n return center(edge.node2) * edge.getValue();\n}\n/**\n * Change the y-position of the nodes, except most the left side nodes\n *\n * @param {Array.>} nodesByBreadth\n * group by the array of all sankey nodes based on the node x-position.\n * @param {number} alpha parameter used to adjust the nodes y-position\n */\n\n\nfunction relaxLeftToRight(nodesByBreadth, alpha) {\n zrUtil.each(nodesByBreadth, function (nodes) {\n zrUtil.each(nodes, function (node) {\n if (node.inEdges.length) {\n var y = sum(node.inEdges, weightedSource) / sum(node.inEdges, getEdgeValue);\n var nodeY = node.getLayout().y + (y - center(node)) * alpha;\n node.setLayout({\n y: nodeY\n }, true);\n }\n });\n });\n}\n\nfunction weightedSource(edge) {\n return center(edge.node1) * edge.getValue();\n}\n/**\n * Compute the depth(y-position) of each edge\n *\n * @param {module:echarts/data/Graph~Node} nodes node of sankey view\n */\n\n\nfunction computeEdgeDepths(nodes) {\n zrUtil.each(nodes, function (node) {\n node.outEdges.sort(ascendingTargetDepth);\n node.inEdges.sort(ascendingSourceDepth);\n });\n zrUtil.each(nodes, function (node) {\n var sy = 0;\n var ty = 0;\n zrUtil.each(node.outEdges, function (edge) {\n edge.setLayout({\n sy: sy\n }, true);\n sy += edge.getLayout().dy;\n });\n zrUtil.each(node.inEdges, function (edge) {\n edge.setLayout({\n ty: ty\n }, true);\n ty += edge.getLayout().dy;\n });\n });\n}\n\nfunction ascendingTargetDepth(a, b) {\n return a.node2.getLayout().y - b.node2.getLayout().y;\n}\n\nfunction ascendingSourceDepth(a, b) {\n return a.node1.getLayout().y - b.node1.getLayout().y;\n}\n\nfunction sum(array, f) {\n var sum = 0;\n var len = array.length;\n var i = -1;\n\n while (++i < len) {\n var value = +f.call(array, array[i], i);\n\n if (!isNaN(value)) {\n sum += value;\n }\n }\n\n return sum;\n}\n\nfunction center(node) {\n return node.getLayout().y + node.getLayout().dy / 2;\n}\n\nfunction ascendingDepth(a, b) {\n return a.getLayout().y - b.getLayout().y;\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a === b ? 0 : NaN;\n}\n\nfunction getEdgeValue(edge) {\n return edge.getValue();\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar SymbolDraw = require(\"../../chart/helper/SymbolDraw\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar List = require(\"../../data/List\");\n\nvar markerHelper = require(\"./markerHelper\");\n\nvar MarkerView = require(\"./MarkerView\");\n\nfunction updateMarkerLayout(mpData, seriesModel, api) {\n var coordSys = seriesModel.coordinateSystem;\n mpData.each(function (idx) {\n var itemModel = mpData.getItemModel(idx);\n var point;\n var xPx = numberUtil.parsePercent(itemModel.get('x'), api.getWidth());\n var yPx = numberUtil.parsePercent(itemModel.get('y'), api.getHeight());\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n point = [xPx, yPx];\n } // Chart like bar may have there own marker positioning logic\n else if (seriesModel.getMarkerPosition) {\n // Use the getMarkerPoisition\n point = seriesModel.getMarkerPosition(mpData.getValues(mpData.dimensions, idx));\n } else if (coordSys) {\n var x = mpData.get(coordSys.dimensions[0], idx);\n var y = mpData.get(coordSys.dimensions[1], idx);\n point = coordSys.dataToPoint([x, y]);\n } // Use x, y if has any\n\n\n if (!isNaN(xPx)) {\n point[0] = xPx;\n }\n\n if (!isNaN(yPx)) {\n point[1] = yPx;\n }\n\n mpData.setItemLayout(idx, point);\n });\n}\n\nvar _default = MarkerView.extend({\n type: 'markPoint',\n updateLayout: function (markPointModel, ecModel, api) {\n ecModel.eachSeries(function (seriesModel) {\n var mpModel = seriesModel.markPointModel;\n\n if (mpModel) {\n updateMarkerLayout(mpModel.getData(), seriesModel, api);\n this.markerGroupMap.get(seriesModel.id).updateLayout(mpModel);\n }\n }, this);\n },\n renderSeries: function (seriesModel, mpModel, ecModel, api) {\n var coordSys = seriesModel.coordinateSystem;\n var seriesId = seriesModel.id;\n var seriesData = seriesModel.getData();\n var symbolDrawMap = this.markerGroupMap;\n var symbolDraw = symbolDrawMap.get(seriesId) || symbolDrawMap.set(seriesId, new SymbolDraw());\n var mpData = createList(coordSys, seriesModel, mpModel); // FIXME\n\n mpModel.setData(mpData);\n updateMarkerLayout(mpModel.getData(), seriesModel, api);\n mpData.each(function (idx) {\n var itemModel = mpData.getItemModel(idx);\n var symbolSize = itemModel.getShallow('symbolSize');\n\n if (typeof symbolSize === 'function') {\n // FIXME 这里不兼容 ECharts 2.x,2.x 貌似参数是整个数据?\n symbolSize = symbolSize(mpModel.getRawValue(idx), mpModel.getDataParams(idx));\n }\n\n mpData.setItemVisual(idx, {\n symbolSize: symbolSize,\n color: itemModel.get('itemStyle.normal.color') || seriesData.getVisual('color'),\n symbol: itemModel.getShallow('symbol')\n });\n }); // TODO Text are wrong\n\n symbolDraw.updateData(mpData);\n this.group.add(symbolDraw.group); // Set host model for tooltip\n // FIXME\n\n mpData.eachItemGraphicEl(function (el) {\n el.traverse(function (child) {\n child.dataModel = mpModel;\n });\n });\n symbolDraw.__keep = true;\n symbolDraw.group.silent = mpModel.get('silent') || seriesModel.get('silent');\n }\n});\n/**\n * @inner\n * @param {module:echarts/coord/*} [coordSys]\n * @param {module:echarts/model/Series} seriesModel\n * @param {module:echarts/model/Model} mpModel\n */\n\n\nfunction createList(coordSys, seriesModel, mpModel) {\n var coordDimsInfos;\n\n if (coordSys) {\n coordDimsInfos = zrUtil.map(coordSys && coordSys.dimensions, function (coordDim) {\n var info = seriesModel.getData().getDimensionInfo(seriesModel.coordDimToDataDim(coordDim)[0]) || {}; // In map series data don't have lng and lat dimension. Fallback to same with coordSys\n\n info.name = coordDim;\n return info;\n });\n } else {\n coordDimsInfos = [{\n name: 'value',\n type: 'float'\n }];\n }\n\n var mpData = new List(coordDimsInfos, mpModel);\n var dataOpt = zrUtil.map(mpModel.get('data'), zrUtil.curry(markerHelper.dataTransform, seriesModel));\n\n if (coordSys) {\n dataOpt = zrUtil.filter(dataOpt, zrUtil.curry(markerHelper.dataFilter, coordSys));\n }\n\n mpData.initData(dataOpt, null, coordSys ? markerHelper.dimValueGetter : function (item) {\n return item.value;\n });\n return mpData;\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar ComponentModel = require(\"../../model/Component\");\n\nvar _layout = require(\"../../util/layout\");\n\nvar getLayoutParams = _layout.getLayoutParams;\nvar sizeCalculable = _layout.sizeCalculable;\nvar mergeLayoutParam = _layout.mergeLayoutParam;\nvar CalendarModel = ComponentModel.extend({\n type: 'calendar',\n\n /**\n * @type {module:echarts/coord/calendar/Calendar}\n */\n coordinateSystem: null,\n defaultOption: {\n zlevel: 0,\n z: 2,\n left: 80,\n top: 60,\n cellSize: 20,\n // horizontal vertical\n orient: 'horizontal',\n // month separate line style\n splitLine: {\n show: true,\n lineStyle: {\n color: '#000',\n width: 1,\n type: 'solid'\n }\n },\n // rect style temporarily unused emphasis\n itemStyle: {\n normal: {\n color: '#fff',\n borderWidth: 1,\n borderColor: '#ccc'\n }\n },\n // week text style\n dayLabel: {\n show: true,\n // a week first day\n firstDay: 0,\n // start end\n position: 'start',\n margin: '50%',\n // 50% of cellSize\n nameMap: 'en',\n color: '#000'\n },\n // month text style\n monthLabel: {\n show: true,\n // start end\n position: 'start',\n margin: 5,\n // center or left\n align: 'center',\n // cn en []\n nameMap: 'en',\n formatter: null,\n color: '#000'\n },\n // year text style\n yearLabel: {\n show: true,\n // top bottom left right\n position: null,\n margin: 30,\n formatter: null,\n color: '#ccc',\n fontFamily: 'sans-serif',\n fontWeight: 'bolder',\n fontSize: 20\n }\n },\n\n /**\n * @override\n */\n init: function (option, parentModel, ecModel, extraOpt) {\n var inputPositionParams = getLayoutParams(option);\n CalendarModel.superApply(this, 'init', arguments);\n mergeAndNormalizeLayoutParams(option, inputPositionParams);\n },\n\n /**\n * @override\n */\n mergeOption: function (option, extraOpt) {\n CalendarModel.superApply(this, 'mergeOption', arguments);\n mergeAndNormalizeLayoutParams(this.option, option);\n }\n});\n\nfunction mergeAndNormalizeLayoutParams(target, raw) {\n // Normalize cellSize\n var cellSize = target.cellSize;\n\n if (!zrUtil.isArray(cellSize)) {\n cellSize = target.cellSize = [cellSize, cellSize];\n } else if (cellSize.length === 1) {\n cellSize[1] = cellSize[0];\n }\n\n var ignoreSize = zrUtil.map([0, 1], function (hvIdx) {\n // If user have set `width` or both `left` and `right`, cellSize\n // will be automatically set to 'auto', otherwise the default\n // setting of cellSize will make `width` setting not work.\n if (sizeCalculable(raw, hvIdx)) {\n cellSize[hvIdx] = 'auto';\n }\n\n return cellSize[hvIdx] != null && cellSize[hvIdx] !== 'auto';\n });\n mergeLayoutParam(target, raw, {\n type: 'box',\n ignoreSize: ignoreSize\n });\n}\n\nvar _default = CalendarModel;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar echartsAPIList = ['getDom', 'getZr', 'getWidth', 'getHeight', 'getDevicePixelRatio', 'dispatchAction', 'isDisposed', 'on', 'off', 'getDataURL', 'getConnectedDataURL', 'getModel', 'getOption', 'getViewOfComponentModel', 'getViewOfSeriesModel']; // And `getCoordinateSystems` and `getComponentByElement` will be injected in echarts.js\n\nfunction ExtensionAPI(chartInstance) {\n zrUtil.each(echartsAPIList, function (name) {\n this[name] = zrUtil.bind(chartInstance[name], chartInstance);\n }, this);\n}\n\nvar _default = ExtensionAPI;\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\n/**\n * @payload\n * @property {string} parallelAxisId\n * @property {Array.>} intervals\n */\nvar actionInfo = {\n type: 'axisAreaSelect',\n event: 'axisAreaSelected',\n update: 'updateVisual'\n};\necharts.registerAction(actionInfo, function (payload, ecModel) {\n ecModel.eachComponent({\n mainType: 'parallelAxis',\n query: payload\n }, function (parallelAxisModel) {\n parallelAxisModel.axis.model.setActiveIntervals(payload.intervals);\n });\n});\n/**\n * @payload\n */\n\necharts.registerAction('parallelAxisExpand', function (payload, ecModel) {\n ecModel.eachComponent({\n mainType: 'parallel',\n query: payload\n }, function (parallelModel) {\n parallelModel.setAxisExpand(payload);\n });\n});","var Parallel = require(\"./Parallel\");\n\nvar CoordinateSystem = require(\"../../CoordinateSystem\");\n\n/**\n * Parallel coordinate system creater.\n */\nfunction create(ecModel, api) {\n var coordSysList = [];\n ecModel.eachComponent('parallel', function (parallelModel, idx) {\n var coordSys = new Parallel(parallelModel, ecModel, api);\n coordSys.name = 'parallel_' + idx;\n coordSys.resize(parallelModel, api);\n parallelModel.coordinateSystem = coordSys;\n coordSys.model = parallelModel;\n coordSysList.push(coordSys);\n }); // Inject the coordinateSystems into seriesModel\n\n ecModel.eachSeries(function (seriesModel) {\n if (seriesModel.get('coordinateSystem') === 'parallel') {\n var parallelModel = ecModel.queryComponents({\n mainType: 'parallel',\n index: seriesModel.get('parallelIndex'),\n id: seriesModel.get('parallelId')\n })[0];\n seriesModel.coordinateSystem = parallelModel.coordinateSystem;\n }\n });\n return coordSysList;\n}\n\nCoordinateSystem.register('parallel', {\n create: create\n});","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar numberUtil = require(\"../util/number\");\n\nvar axisHelper = require(\"./axisHelper\");\n\nvar linearMap = numberUtil.linearMap;\n\nfunction fixExtentWithBands(extent, nTick) {\n var size = extent[1] - extent[0];\n var len = nTick;\n var margin = size / len / 2;\n extent[0] += margin;\n extent[1] -= margin;\n}\n\nvar normalizedExtent = [0, 1];\n/**\n * @name module:echarts/coord/CartesianAxis\n * @constructor\n */\n\nvar Axis = function (dim, scale, extent) {\n /**\n * Axis dimension. Such as 'x', 'y', 'z', 'angle', 'radius'\n * @type {string}\n */\n this.dim = dim;\n /**\n * Axis scale\n * @type {module:echarts/coord/scale/*}\n */\n\n this.scale = scale;\n /**\n * @type {Array.}\n * @private\n */\n\n this._extent = extent || [0, 0];\n /**\n * @type {boolean}\n */\n\n this.inverse = false;\n /**\n * Usually true when axis has a ordinal scale\n * @type {boolean}\n */\n\n this.onBand = false;\n /**\n * @private\n * @type {number}\n */\n\n this._labelInterval;\n};\n\nAxis.prototype = {\n constructor: Axis,\n\n /**\n * If axis extent contain given coord\n * @param {number} coord\n * @return {boolean}\n */\n contain: function (coord) {\n var extent = this._extent;\n var min = Math.min(extent[0], extent[1]);\n var max = Math.max(extent[0], extent[1]);\n return coord >= min && coord <= max;\n },\n\n /**\n * If axis extent contain given data\n * @param {number} data\n * @return {boolean}\n */\n containData: function (data) {\n return this.contain(this.dataToCoord(data));\n },\n\n /**\n * Get coord extent.\n * @return {Array.}\n */\n getExtent: function () {\n return this._extent.slice();\n },\n\n /**\n * Get precision used for formatting\n * @param {Array.} [dataExtent]\n * @return {number}\n */\n getPixelPrecision: function (dataExtent) {\n return numberUtil.getPixelPrecision(dataExtent || this.scale.getExtent(), this._extent);\n },\n\n /**\n * Set coord extent\n * @param {number} start\n * @param {number} end\n */\n setExtent: function (start, end) {\n var extent = this._extent;\n extent[0] = start;\n extent[1] = end;\n },\n\n /**\n * Convert data to coord. Data is the rank if it has a ordinal scale\n * @param {number} data\n * @param {boolean} clamp\n * @return {number}\n */\n dataToCoord: function (data, clamp) {\n var extent = this._extent;\n var scale = this.scale;\n data = scale.normalize(data);\n\n if (this.onBand && scale.type === 'ordinal') {\n extent = extent.slice();\n fixExtentWithBands(extent, scale.count());\n }\n\n return linearMap(data, normalizedExtent, extent, clamp);\n },\n\n /**\n * Convert coord to data. Data is the rank if it has a ordinal scale\n * @param {number} coord\n * @param {boolean} clamp\n * @return {number}\n */\n coordToData: function (coord, clamp) {\n var extent = this._extent;\n var scale = this.scale;\n\n if (this.onBand && scale.type === 'ordinal') {\n extent = extent.slice();\n fixExtentWithBands(extent, scale.count());\n }\n\n var t = linearMap(coord, extent, normalizedExtent, clamp);\n return this.scale.scale(t);\n },\n\n /**\n * Convert pixel point to data in axis\n * @param {Array.} point\n * @param {boolean} clamp\n * @return {number} data\n */\n pointToData: function (point, clamp) {// Should be implemented in derived class if necessary.\n },\n\n /**\n * @return {Array.}\n */\n getTicksCoords: function (alignWithLabel) {\n if (this.onBand && !alignWithLabel) {\n var bands = this.getBands();\n var coords = [];\n\n for (var i = 0; i < bands.length; i++) {\n coords.push(bands[i][0]);\n }\n\n if (bands[i - 1]) {\n coords.push(bands[i - 1][1]);\n }\n\n return coords;\n } else {\n return zrUtil.map(this.scale.getTicks(), this.dataToCoord, this);\n }\n },\n\n /**\n * Coords of labels are on the ticks or on the middle of bands\n * @return {Array.}\n */\n getLabelsCoords: function () {\n return zrUtil.map(this.scale.getTicks(), this.dataToCoord, this);\n },\n\n /**\n * Get bands.\n *\n * If axis has labels [1, 2, 3, 4]. Bands on the axis are\n * |---1---|---2---|---3---|---4---|.\n *\n * @return {Array}\n */\n // FIXME Situation when labels is on ticks\n getBands: function () {\n var extent = this.getExtent();\n var bands = [];\n var len = this.scale.count();\n var start = extent[0];\n var end = extent[1];\n var span = end - start;\n\n for (var i = 0; i < len; i++) {\n bands.push([span * i / len + start, span * (i + 1) / len + start]);\n }\n\n return bands;\n },\n\n /**\n * Get width of band\n * @return {number}\n */\n getBandWidth: function () {\n var axisExtent = this._extent;\n var dataExtent = this.scale.getExtent();\n var len = dataExtent[1] - dataExtent[0] + (this.onBand ? 1 : 0); // Fix #2728, avoid NaN when only one data.\n\n len === 0 && (len = 1);\n var size = Math.abs(axisExtent[1] - axisExtent[0]);\n return Math.abs(size) / len;\n },\n\n /**\n * @abstract\n * @return {boolean} Is horizontal\n */\n isHorizontal: null,\n\n /**\n * @abstract\n * @return {number} Get axis rotate, by degree.\n */\n getRotate: null,\n\n /**\n * Get interval of the axis label.\n * To get precise result, at least one of `getRotate` and `isHorizontal`\n * should be implemented.\n * @return {number}\n */\n getLabelInterval: function () {\n var labelInterval = this._labelInterval;\n\n if (!labelInterval) {\n var axisModel = this.model;\n var labelModel = axisModel.getModel('axisLabel');\n labelInterval = labelModel.get('interval');\n\n if (this.type === 'category' && (labelInterval == null || labelInterval === 'auto')) {\n labelInterval = axisHelper.getAxisLabelInterval(zrUtil.map(this.scale.getTicks(), this.dataToCoord, this), axisModel.getFormattedLabels(), labelModel.getFont(), this.getRotate ? this.getRotate() : this.isHorizontal && !this.isHorizontal() ? 90 : 0, labelModel.get('rotate'));\n }\n\n this._labelInterval = labelInterval;\n }\n\n return labelInterval;\n }\n};\nvar _default = Axis;\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar Model = require(\"../../model/Model\");\n\nvar LegendModel = echarts.extendComponentModel({\n type: 'legend.plain',\n dependencies: ['series'],\n layoutMode: {\n type: 'box',\n // legend.width/height are maxWidth/maxHeight actually,\n // whereas realy width/height is calculated by its content.\n // (Setting {left: 10, right: 10} does not make sense).\n // So consider the case:\n // `setOption({legend: {left: 10});`\n // then `setOption({legend: {right: 10});`\n // The previous `left` should be cleared by setting `ignoreSize`.\n ignoreSize: true\n },\n init: function (option, parentModel, ecModel) {\n this.mergeDefaultAndTheme(option, ecModel);\n option.selected = option.selected || {};\n },\n mergeOption: function (option) {\n LegendModel.superCall(this, 'mergeOption', option);\n },\n optionUpdated: function () {\n this._updateData(this.ecModel);\n\n var legendData = this._data; // If selectedMode is single, try to select one\n\n if (legendData[0] && this.get('selectedMode') === 'single') {\n var hasSelected = false; // If has any selected in option.selected\n\n for (var i = 0; i < legendData.length; i++) {\n var name = legendData[i].get('name');\n\n if (this.isSelected(name)) {\n // Force to unselect others\n this.select(name);\n hasSelected = true;\n break;\n }\n } // Try select the first if selectedMode is single\n\n\n !hasSelected && this.select(legendData[0].get('name'));\n }\n },\n _updateData: function (ecModel) {\n var legendData = zrUtil.map(this.get('data') || [], function (dataItem) {\n // Can be string or number\n if (typeof dataItem === 'string' || typeof dataItem === 'number') {\n dataItem = {\n name: dataItem\n };\n }\n\n return new Model(dataItem, this, this.ecModel);\n }, this);\n this._data = legendData;\n var availableNames = zrUtil.map(ecModel.getSeries(), function (series) {\n return series.name;\n });\n ecModel.eachSeries(function (seriesModel) {\n if (seriesModel.legendDataProvider) {\n var data = seriesModel.legendDataProvider();\n availableNames = availableNames.concat(data.mapArray(data.getName));\n }\n });\n /**\n * @type {Array.}\n * @private\n */\n\n this._availableNames = availableNames;\n },\n\n /**\n * @return {Array.}\n */\n getData: function () {\n return this._data;\n },\n\n /**\n * @param {string} name\n */\n select: function (name) {\n var selected = this.option.selected;\n var selectedMode = this.get('selectedMode');\n\n if (selectedMode === 'single') {\n var data = this._data;\n zrUtil.each(data, function (dataItem) {\n selected[dataItem.get('name')] = false;\n });\n }\n\n selected[name] = true;\n },\n\n /**\n * @param {string} name\n */\n unSelect: function (name) {\n if (this.get('selectedMode') !== 'single') {\n this.option.selected[name] = false;\n }\n },\n\n /**\n * @param {string} name\n */\n toggleSelected: function (name) {\n var selected = this.option.selected; // Default is true\n\n if (!selected.hasOwnProperty(name)) {\n selected[name] = true;\n }\n\n this[selected[name] ? 'unSelect' : 'select'](name);\n },\n\n /**\n * @param {string} name\n */\n isSelected: function (name) {\n var selected = this.option.selected;\n return !(selected.hasOwnProperty(name) && !selected[name]) && zrUtil.indexOf(this._availableNames, name) >= 0;\n },\n defaultOption: {\n // 一级层叠\n zlevel: 0,\n // 二级层叠\n z: 4,\n show: true,\n // 布局方式,默认为水平布局,可选为:\n // 'horizontal' | 'vertical'\n orient: 'horizontal',\n left: 'center',\n // right: 'center',\n top: 0,\n // bottom: null,\n // 水平对齐\n // 'auto' | 'left' | 'right'\n // 默认为 'auto', 根据 x 的位置判断是左对齐还是右对齐\n align: 'auto',\n backgroundColor: 'rgba(0,0,0,0)',\n // 图例边框颜色\n borderColor: '#ccc',\n borderRadius: 0,\n // 图例边框线宽,单位px,默认为0(无边框)\n borderWidth: 0,\n // 图例内边距,单位px,默认各方向内边距为5,\n // 接受数组分别设定上右下左边距,同css\n padding: 5,\n // 各个item之间的间隔,单位px,默认为10,\n // 横向布局时为水平间隔,纵向布局时为纵向间隔\n itemGap: 10,\n // 图例图形宽度\n itemWidth: 25,\n // 图例图形高度\n itemHeight: 14,\n // 图例关闭时候的颜色\n inactiveColor: '#ccc',\n textStyle: {\n // 图例文字颜色\n color: '#333'\n },\n // formatter: '',\n // 选择模式,默认开启图例开关\n selectedMode: true,\n // 配置默认选中状态,可配合LEGEND.SELECTED事件做动态数据载入\n // selected: null,\n // 图例内容(详见legend.data,数组中每一项代表一个item\n // data: [],\n // Tooltip 相关配置\n tooltip: {\n show: false\n }\n }\n});\nvar _default = LegendModel;\nmodule.exports = _default;","var PI2 = Math.PI * 2;\n\nfunction normalizeRadian(angle) {\n angle %= PI2;\n\n if (angle < 0) {\n angle += PI2;\n }\n\n return angle;\n}\n\nexports.normalizeRadian = normalizeRadian;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar _model = require(\"../../util/model\");\n\nvar normalizeToArray = _model.normalizeToArray;\n\n/**\n * Complete dimensions by data (guess dimension).\n */\nvar each = zrUtil.each;\nvar isString = zrUtil.isString;\nvar defaults = zrUtil.defaults;\nvar OTHER_DIMS = {\n tooltip: 1,\n label: 1,\n itemName: 1\n};\n/**\n * Complete the dimensions array, by user defined `dimension` and `encode`,\n * and guessing from the data structure.\n * If no 'value' dimension specified, the first no-named dimension will be\n * named as 'value'.\n *\n * @param {Array.} sysDims Necessary dimensions, like ['x', 'y'], which\n * provides not only dim template, but also default order.\n * `name` of each item provides default coord name.\n * [{dimsDef: []}, ...] can be specified to give names.\n * @param {Array} data Data list. [[1, 2, 3], [2, 3, 4]].\n * @param {Object} [opt]\n * @param {Array.} [opt.dimsDef] option.series.dimensions User defined dimensions\n * For example: ['asdf', {name, type}, ...].\n * @param {Object} [opt.encodeDef] option.series.encode {x: 2, y: [3, 1], tooltip: [1, 2], label: 3}\n * @param {string} [opt.extraPrefix] Prefix of name when filling the left dimensions.\n * @param {string} [opt.extraFromZero] If specified, extra dim names will be:\n * extraPrefix + 0, extraPrefix + extraBaseIndex + 1 ...\n * If not specified, extra dim names will be:\n * extraPrefix, extraPrefix + 0, extraPrefix + 1 ...\n * @param {number} [opt.dimCount] If not specified, guess by the first data item.\n * @return {Array.} [{\n * name: string mandatory,\n * coordDim: string mandatory,\n * coordDimIndex: number mandatory,\n * type: string optional,\n * tooltipName: string optional,\n * otherDims: {\n * tooltip: number optional,\n * label: number optional\n * },\n * isExtraCoord: boolean true or undefined.\n * other props ...\n * }]\n */\n\nfunction completeDimensions(sysDims, data, opt) {\n data = data || [];\n opt = opt || {};\n sysDims = (sysDims || []).slice();\n var dimsDef = (opt.dimsDef || []).slice();\n var encodeDef = zrUtil.createHashMap(opt.encodeDef);\n var dataDimNameMap = zrUtil.createHashMap();\n var coordDimNameMap = zrUtil.createHashMap(); // var valueCandidate;\n\n var result = [];\n var dimCount = opt.dimCount;\n\n if (dimCount == null) {\n var value0 = retrieveValue(data[0]);\n dimCount = Math.max(zrUtil.isArray(value0) && value0.length || 1, sysDims.length, dimsDef.length);\n each(sysDims, function (sysDimItem) {\n var sysDimItemDimsDef = sysDimItem.dimsDef;\n sysDimItemDimsDef && (dimCount = Math.max(dimCount, sysDimItemDimsDef.length));\n });\n } // Apply user defined dims (`name` and `type`) and init result.\n\n\n for (var i = 0; i < dimCount; i++) {\n var dimDefItem = isString(dimsDef[i]) ? {\n name: dimsDef[i]\n } : dimsDef[i] || {};\n var userDimName = dimDefItem.name;\n var resultItem = result[i] = {\n otherDims: {}\n }; // Name will be applied later for avoiding duplication.\n\n if (userDimName != null && dataDimNameMap.get(userDimName) == null) {\n // Only if `series.dimensions` is defined in option, tooltipName\n // will be set, and dimension will be diplayed vertically in\n // tooltip by default.\n resultItem.name = resultItem.tooltipName = userDimName;\n dataDimNameMap.set(userDimName, i);\n }\n\n dimDefItem.type != null && (resultItem.type = dimDefItem.type);\n } // Set `coordDim` and `coordDimIndex` by `encodeDef` and normalize `encodeDef`.\n\n\n encodeDef.each(function (dataDims, coordDim) {\n dataDims = encodeDef.set(coordDim, normalizeToArray(dataDims).slice());\n each(dataDims, function (resultDimIdx, coordDimIndex) {\n // The input resultDimIdx can be dim name or index.\n isString(resultDimIdx) && (resultDimIdx = dataDimNameMap.get(resultDimIdx));\n\n if (resultDimIdx != null && resultDimIdx < dimCount) {\n dataDims[coordDimIndex] = resultDimIdx;\n applyDim(result[resultDimIdx], coordDim, coordDimIndex);\n }\n });\n }); // Apply templetes and default order from `sysDims`.\n\n var availDimIdx = 0;\n each(sysDims, function (sysDimItem, sysDimIndex) {\n var coordDim;\n var sysDimItem;\n var sysDimItemDimsDef;\n var sysDimItemOtherDims;\n\n if (isString(sysDimItem)) {\n coordDim = sysDimItem;\n sysDimItem = {};\n } else {\n coordDim = sysDimItem.name;\n sysDimItem = zrUtil.clone(sysDimItem); // `coordDimIndex` should not be set directly.\n\n sysDimItemDimsDef = sysDimItem.dimsDef;\n sysDimItemOtherDims = sysDimItem.otherDims;\n sysDimItem.name = sysDimItem.coordDim = sysDimItem.coordDimIndex = sysDimItem.dimsDef = sysDimItem.otherDims = null;\n }\n\n var dataDims = normalizeToArray(encodeDef.get(coordDim)); // dimensions provides default dim sequences.\n\n if (!dataDims.length) {\n for (var i = 0; i < (sysDimItemDimsDef && sysDimItemDimsDef.length || 1); i++) {\n while (availDimIdx < result.length && result[availDimIdx].coordDim != null) {\n availDimIdx++;\n }\n\n availDimIdx < result.length && dataDims.push(availDimIdx++);\n }\n } // Apply templates.\n\n\n each(dataDims, function (resultDimIdx, coordDimIndex) {\n var resultItem = result[resultDimIdx];\n applyDim(defaults(resultItem, sysDimItem), coordDim, coordDimIndex);\n\n if (resultItem.name == null && sysDimItemDimsDef) {\n resultItem.name = resultItem.tooltipName = sysDimItemDimsDef[coordDimIndex];\n }\n\n sysDimItemOtherDims && defaults(resultItem.otherDims, sysDimItemOtherDims);\n });\n }); // Make sure the first extra dim is 'value'.\n\n var extra = opt.extraPrefix || 'value'; // Set dim `name` and other `coordDim` and other props.\n\n for (var resultDimIdx = 0; resultDimIdx < dimCount; resultDimIdx++) {\n var resultItem = result[resultDimIdx] = result[resultDimIdx] || {};\n var coordDim = resultItem.coordDim;\n coordDim == null && (resultItem.coordDim = genName(extra, coordDimNameMap, opt.extraFromZero), resultItem.coordDimIndex = 0, resultItem.isExtraCoord = true);\n resultItem.name == null && (resultItem.name = genName(resultItem.coordDim, dataDimNameMap));\n resultItem.type == null && guessOrdinal(data, resultDimIdx) && (resultItem.type = 'ordinal');\n }\n\n return result;\n\n function applyDim(resultItem, coordDim, coordDimIndex) {\n if (OTHER_DIMS[coordDim]) {\n resultItem.otherDims[coordDim] = coordDimIndex;\n } else {\n resultItem.coordDim = coordDim;\n resultItem.coordDimIndex = coordDimIndex;\n coordDimNameMap.set(coordDim, true);\n }\n }\n\n function genName(name, map, fromZero) {\n if (fromZero || map.get(name) != null) {\n var i = 0;\n\n while (map.get(name + i) != null) {\n i++;\n }\n\n name += i;\n }\n\n map.set(name, true);\n return name;\n }\n} // The rule should not be complex, otherwise user might not\n// be able to known where the data is wrong.\n\n\nvar guessOrdinal = completeDimensions.guessOrdinal = function (data, dimIndex) {\n for (var i = 0, len = data.length; i < len; i++) {\n var value = retrieveValue(data[i]);\n\n if (!zrUtil.isArray(value)) {\n return false;\n }\n\n var value = value[dimIndex]; // Consider usage convenience, '1', '2' will be treated as \"number\".\n // `isFinit('')` get `true`.\n\n if (value != null && isFinite(value) && value !== '') {\n return false;\n } else if (isString(value) && value !== '-') {\n return true;\n }\n }\n\n return false;\n};\n\nfunction retrieveValue(o) {\n return zrUtil.isArray(o) ? o : zrUtil.isObject(o) ? o.value : o;\n}\n\nvar _default = completeDimensions;\nmodule.exports = _default;","function _default(ecModel) {\n ecModel.eachSeriesByType('radar', function (seriesModel) {\n var data = seriesModel.getData();\n var points = [];\n var coordSys = seriesModel.coordinateSystem;\n\n if (!coordSys) {\n return;\n }\n\n function pointsConverter(val, idx) {\n points[idx] = points[idx] || [];\n points[idx][i] = coordSys.dataToPoint(val, i);\n }\n\n for (var i = 0; i < coordSys.getIndicatorAxes().length; i++) {\n var dim = data.dimensions[i];\n data.each(dim, pointsConverter);\n }\n\n data.each(function (idx) {\n // Close polygon\n points[idx][0] && points[idx].push(points[idx][0].slice());\n data.setItemLayout(idx, points[idx]);\n });\n });\n}\n\nmodule.exports = _default;","var svgURI = 'http://www.w3.org/2000/svg';\n\nfunction createElement(name) {\n return document.createElementNS(svgURI, name);\n}\n\nexports.createElement = createElement;","function windingLine(x0, y0, x1, y1, x, y) {\n if (y > y0 && y > y1 || y < y0 && y < y1) {\n return 0;\n } // Ignore horizontal line\n\n\n if (y1 === y0) {\n return 0;\n }\n\n var dir = y1 < y0 ? 1 : -1;\n var t = (y - y0) / (y1 - y0); // Avoid winding error when intersection point is the connect point of two line of polygon\n\n if (t === 1 || t === 0) {\n dir = y1 < y0 ? 0.5 : -0.5;\n }\n\n var x_ = t * (x1 - x0) + x0;\n return x_ > x ? dir : 0;\n}\n\nmodule.exports = windingLine;","var zrUtil = require(\"zrender/lib/core/util\");\n\nfunction retrieveTargetInfo(payload, seriesModel) {\n if (payload && (payload.type === 'treemapZoomToNode' || payload.type === 'treemapRootToNode')) {\n var root = seriesModel.getData().tree.root;\n var targetNode = payload.targetNode;\n\n if (targetNode && root.contains(targetNode)) {\n return {\n node: targetNode\n };\n }\n\n var targetNodeId = payload.targetNodeId;\n\n if (targetNodeId != null && (targetNode = root.getNodeById(targetNodeId))) {\n return {\n node: targetNode\n };\n }\n }\n} // Not includes the given node at the last item.\n\n\nfunction getPathToRoot(node) {\n var path = [];\n\n while (node) {\n node = node.parentNode;\n node && path.push(node);\n }\n\n return path.reverse();\n}\n\nfunction aboveViewRoot(viewRoot, node) {\n var viewPath = getPathToRoot(viewRoot);\n return zrUtil.indexOf(viewPath, node) >= 0;\n} // From root to the input node (the input node will be included).\n\n\nfunction wrapTreePathInfo(node, seriesModel) {\n var treePathInfo = [];\n\n while (node) {\n var nodeDataIndex = node.dataIndex;\n treePathInfo.push({\n name: node.name,\n dataIndex: nodeDataIndex,\n value: seriesModel.getRawValue(nodeDataIndex)\n });\n node = node.parentNode;\n }\n\n treePathInfo.reverse();\n return treePathInfo;\n}\n\nexports.retrieveTargetInfo = retrieveTargetInfo;\nexports.getPathToRoot = getPathToRoot;\nexports.aboveViewRoot = aboveViewRoot;\nexports.wrapTreePathInfo = wrapTreePathInfo;","var echarts = require(\"../../echarts\");\n\nvar List = require(\"../../data/List\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _model = require(\"../../util/model\");\n\nvar defaultEmphasis = _model.defaultEmphasis;\n\nvar Model = require(\"../../model/Model\");\n\nvar _format = require(\"../../util/format\");\n\nvar encodeHTML = _format.encodeHTML;\n\nvar createGraphFromNodeEdge = require(\"../helper/createGraphFromNodeEdge\");\n\nvar GraphSeries = echarts.extendSeriesModel({\n type: 'series.graph',\n init: function (option) {\n GraphSeries.superApply(this, 'init', arguments); // Provide data for legend select\n\n this.legendDataProvider = function () {\n return this._categoriesData;\n };\n\n this.fillDataTextStyle(option.edges || option.links);\n\n this._updateCategoriesData();\n },\n mergeOption: function (option) {\n GraphSeries.superApply(this, 'mergeOption', arguments);\n this.fillDataTextStyle(option.edges || option.links);\n\n this._updateCategoriesData();\n },\n mergeDefaultAndTheme: function (option) {\n GraphSeries.superApply(this, 'mergeDefaultAndTheme', arguments);\n defaultEmphasis(option.edgeLabel, ['show']);\n },\n getInitialData: function (option, ecModel) {\n var edges = option.edges || option.links || [];\n var nodes = option.data || option.nodes || [];\n var self = this;\n\n if (nodes && edges) {\n return createGraphFromNodeEdge(nodes, edges, this, true, beforeLink).data;\n }\n\n function beforeLink(nodeData, edgeData) {\n // Overwrite nodeData.getItemModel to\n nodeData.wrapMethod('getItemModel', function (model) {\n var categoriesModels = self._categoriesModels;\n var categoryIdx = model.getShallow('category');\n var categoryModel = categoriesModels[categoryIdx];\n\n if (categoryModel) {\n categoryModel.parentModel = model.parentModel;\n model.parentModel = categoryModel;\n }\n\n return model;\n });\n var edgeLabelModel = self.getModel('edgeLabel'); // For option `edgeLabel` can be found by label.xxx.xxx on item mode.\n\n var fakeSeriesModel = new Model({\n label: edgeLabelModel.option\n }, edgeLabelModel.parentModel, ecModel);\n edgeData.wrapMethod('getItemModel', function (model) {\n model.customizeGetParent(edgeGetParent);\n return model;\n });\n\n function edgeGetParent(path) {\n path = this.parsePath(path);\n return path && path[0] === 'label' ? fakeSeriesModel : this.parentModel;\n }\n }\n },\n\n /**\n * @return {module:echarts/data/Graph}\n */\n getGraph: function () {\n return this.getData().graph;\n },\n\n /**\n * @return {module:echarts/data/List}\n */\n getEdgeData: function () {\n return this.getGraph().edgeData;\n },\n\n /**\n * @return {module:echarts/data/List}\n */\n getCategoriesData: function () {\n return this._categoriesData;\n },\n\n /**\n * @override\n */\n formatTooltip: function (dataIndex, multipleSeries, dataType) {\n if (dataType === 'edge') {\n var nodeData = this.getData();\n var params = this.getDataParams(dataIndex, dataType);\n var edge = nodeData.graph.getEdgeByIndex(dataIndex);\n var sourceName = nodeData.getName(edge.node1.dataIndex);\n var targetName = nodeData.getName(edge.node2.dataIndex);\n var html = [];\n sourceName != null && html.push(sourceName);\n targetName != null && html.push(targetName);\n html = encodeHTML(html.join(' > '));\n\n if (params.value) {\n html += ' : ' + encodeHTML(params.value);\n }\n\n return html;\n } else {\n // dataType === 'node' or empty\n return GraphSeries.superApply(this, 'formatTooltip', arguments);\n }\n },\n _updateCategoriesData: function () {\n var categories = zrUtil.map(this.option.categories || [], function (category) {\n // Data must has value\n return category.value != null ? category : zrUtil.extend({\n value: 0\n }, category);\n });\n var categoriesData = new List(['value'], this);\n categoriesData.initData(categories);\n this._categoriesData = categoriesData;\n this._categoriesModels = categoriesData.mapArray(function (idx) {\n return categoriesData.getItemModel(idx, true);\n });\n },\n setZoom: function (zoom) {\n this.option.zoom = zoom;\n },\n setCenter: function (center) {\n this.option.center = center;\n },\n isAnimationEnabled: function () {\n return GraphSeries.superCall(this, 'isAnimationEnabled') // Not enable animation when do force layout\n && !(this.get('layout') === 'force' && this.get('force.layoutAnimation'));\n },\n defaultOption: {\n zlevel: 0,\n z: 2,\n coordinateSystem: 'view',\n // Default option for all coordinate systems\n // xAxisIndex: 0,\n // yAxisIndex: 0,\n // polarIndex: 0,\n // geoIndex: 0,\n legendHoverLink: true,\n hoverAnimation: true,\n layout: null,\n focusNodeAdjacency: false,\n // Configuration of circular layout\n circular: {\n rotateLabel: false\n },\n // Configuration of force directed layout\n force: {\n initLayout: null,\n // Node repulsion. Can be an array to represent range.\n repulsion: [0, 50],\n gravity: 0.1,\n // Edge length. Can be an array to represent range.\n edgeLength: 30,\n layoutAnimation: true\n },\n left: 'center',\n top: 'center',\n // right: null,\n // bottom: null,\n // width: '80%',\n // height: '80%',\n symbol: 'circle',\n symbolSize: 10,\n edgeSymbol: ['none', 'none'],\n edgeSymbolSize: 10,\n edgeLabel: {\n normal: {\n position: 'middle'\n },\n emphasis: {}\n },\n draggable: false,\n roam: false,\n // Default on center of graph\n center: null,\n zoom: 1,\n // Symbol size scale ratio in roam\n nodeScaleRatio: 0.6,\n // cursor: null,\n // categories: [],\n // data: []\n // Or\n // nodes: []\n //\n // links: []\n // Or\n // edges: []\n label: {\n normal: {\n show: false,\n formatter: '{b}'\n },\n emphasis: {\n show: true\n }\n },\n itemStyle: {\n normal: {},\n emphasis: {}\n },\n lineStyle: {\n normal: {\n color: '#aaa',\n width: 1,\n curveness: 0,\n opacity: 0.5\n },\n emphasis: {}\n }\n }\n});\nvar _default = GraphSeries;\nmodule.exports = _default;","var Path = require(\"../Path\");\n\nvar polyHelper = require(\"../helper/poly\");\n\n/**\n * 多边形\n * @module zrender/shape/Polygon\n */\nvar _default = Path.extend({\n type: 'polygon',\n shape: {\n points: null,\n smooth: false,\n smoothConstraint: null\n },\n buildPath: function (ctx, shape) {\n polyHelper.buildPath(ctx, shape, true);\n }\n});\n\nmodule.exports = _default;","function _default(seriesType, ecModel) {\n ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n var data = seriesModel.getData();\n var coordSys = seriesModel.coordinateSystem;\n\n if (!coordSys) {\n return;\n }\n\n var dims = [];\n var coordDims = coordSys.dimensions;\n\n for (var i = 0; i < coordDims.length; i++) {\n dims.push(seriesModel.coordDimToDataDim(coordSys.dimensions[i])[0]);\n }\n\n if (dims.length === 1) {\n data.each(dims[0], function (x, idx) {\n // Also {Array.}, not undefined to avoid if...else... statement\n data.setItemLayout(idx, isNaN(x) ? [NaN, NaN] : coordSys.dataToPoint(x));\n });\n } else if (dims.length === 2) {\n data.each(dims, function (x, y, idx) {\n // Also {Array.}, not undefined to avoid if...else... statement\n data.setItemLayout(idx, isNaN(x) || isNaN(y) ? [NaN, NaN] : coordSys.dataToPoint([x, y]));\n }, true);\n }\n });\n}\n\nmodule.exports = _default;","var ORIGIN_METHOD = '\\0__throttleOriginMethod';\nvar RATE = '\\0__throttleRate';\nvar THROTTLE_TYPE = '\\0__throttleType';\n/**\n * @public\n * @param {(Function)} fn\n * @param {number} [delay=0] Unit: ms.\n * @param {boolean} [debounce=false]\n * true: If call interval less than `delay`, only the last call works.\n * false: If call interval less than `delay, call works on fixed rate.\n * @return {(Function)} throttled fn.\n */\n\nfunction throttle(fn, delay, debounce) {\n var currCall;\n var lastCall = 0;\n var lastExec = 0;\n var timer = null;\n var diff;\n var scope;\n var args;\n var debounceNextCall;\n delay = delay || 0;\n\n function exec() {\n lastExec = new Date().getTime();\n timer = null;\n fn.apply(scope, args || []);\n }\n\n var cb = function () {\n currCall = new Date().getTime();\n scope = this;\n args = arguments;\n var thisDelay = debounceNextCall || delay;\n var thisDebounce = debounceNextCall || debounce;\n debounceNextCall = null;\n diff = currCall - (thisDebounce ? lastCall : lastExec) - thisDelay;\n clearTimeout(timer);\n\n if (thisDebounce) {\n timer = setTimeout(exec, thisDelay);\n } else {\n if (diff >= 0) {\n exec();\n } else {\n timer = setTimeout(exec, -diff);\n }\n }\n\n lastCall = currCall;\n };\n /**\n * Clear throttle.\n * @public\n */\n\n\n cb.clear = function () {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n };\n /**\n * Enable debounce once.\n */\n\n\n cb.debounceNextCall = function (debounceDelay) {\n debounceNextCall = debounceDelay;\n };\n\n return cb;\n}\n/**\n * Create throttle method or update throttle rate.\n *\n * @example\n * ComponentView.prototype.render = function () {\n * ...\n * throttle.createOrUpdate(\n * this,\n * '_dispatchAction',\n * this.model.get('throttle'),\n * 'fixRate'\n * );\n * };\n * ComponentView.prototype.remove = function () {\n * throttle.clear(this, '_dispatchAction');\n * };\n * ComponentView.prototype.dispose = function () {\n * throttle.clear(this, '_dispatchAction');\n * };\n *\n * @public\n * @param {Object} obj\n * @param {string} fnAttr\n * @param {number} [rate]\n * @param {string} [throttleType='fixRate'] 'fixRate' or 'debounce'\n * @return {Function} throttled function.\n */\n\n\nfunction createOrUpdate(obj, fnAttr, rate, throttleType) {\n var fn = obj[fnAttr];\n\n if (!fn) {\n return;\n }\n\n var originFn = fn[ORIGIN_METHOD] || fn;\n var lastThrottleType = fn[THROTTLE_TYPE];\n var lastRate = fn[RATE];\n\n if (lastRate !== rate || lastThrottleType !== throttleType) {\n if (rate == null || !throttleType) {\n return obj[fnAttr] = originFn;\n }\n\n fn = obj[fnAttr] = throttle(originFn, rate, throttleType === 'debounce');\n fn[ORIGIN_METHOD] = originFn;\n fn[THROTTLE_TYPE] = throttleType;\n fn[RATE] = rate;\n }\n\n return fn;\n}\n/**\n * Clear throttle. Example see throttle.createOrUpdate.\n *\n * @public\n * @param {Object} obj\n * @param {string} fnAttr\n */\n\n\nfunction clear(obj, fnAttr) {\n var fn = obj[fnAttr];\n\n if (fn && fn[ORIGIN_METHOD]) {\n obj[fnAttr] = fn[ORIGIN_METHOD];\n }\n}\n\nexports.throttle = throttle;\nexports.createOrUpdate = createOrUpdate;\nexports.clear = clear;","var echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _default = echarts.extendComponentView({\n type: 'marker',\n init: function () {\n /**\n * Markline grouped by series\n * @private\n * @type {module:zrender/core/util.HashMap}\n */\n this.markerGroupMap = zrUtil.createHashMap();\n },\n render: function (markerModel, ecModel, api) {\n var markerGroupMap = this.markerGroupMap;\n markerGroupMap.each(function (item) {\n item.__keep = false;\n });\n var markerModelKey = this.type + 'Model';\n ecModel.eachSeries(function (seriesModel) {\n var markerModel = seriesModel[markerModelKey];\n markerModel && this.renderSeries(seriesModel, markerModel, ecModel, api);\n }, this);\n markerGroupMap.each(function (item) {\n !item.__keep && this.group.remove(item.group);\n }, this);\n },\n renderSeries: function () {}\n});\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar _clazz = require(\"./clazz\");\n\nvar parseClassType = _clazz.parseClassType;\nvar base = 0;\nvar DELIMITER = '_';\n/**\n * @public\n * @param {string} type\n * @return {string}\n */\n\nfunction getUID(type) {\n // Considering the case of crossing js context,\n // use Math.random to make id as unique as possible.\n return [type || '', base++, Math.random()].join(DELIMITER);\n}\n/**\n * @inner\n */\n\n\nfunction enableSubTypeDefaulter(entity) {\n var subTypeDefaulters = {};\n\n entity.registerSubTypeDefaulter = function (componentType, defaulter) {\n componentType = parseClassType(componentType);\n subTypeDefaulters[componentType.main] = defaulter;\n };\n\n entity.determineSubType = function (componentType, option) {\n var type = option.type;\n\n if (!type) {\n var componentTypeMain = parseClassType(componentType).main;\n\n if (entity.hasSubTypes(componentType) && subTypeDefaulters[componentTypeMain]) {\n type = subTypeDefaulters[componentTypeMain](option);\n }\n }\n\n return type;\n };\n\n return entity;\n}\n/**\n * Topological travel on Activity Network (Activity On Vertices).\n * Dependencies is defined in Model.prototype.dependencies, like ['xAxis', 'yAxis'].\n *\n * If 'xAxis' or 'yAxis' is absent in componentTypeList, just ignore it in topology.\n *\n * If there is circle dependencey, Error will be thrown.\n *\n */\n\n\nfunction enableTopologicalTravel(entity, dependencyGetter) {\n /**\n * @public\n * @param {Array.} targetNameList Target Component type list.\n * Can be ['aa', 'bb', 'aa.xx']\n * @param {Array.} fullNameList By which we can build dependency graph.\n * @param {Function} callback Params: componentType, dependencies.\n * @param {Object} context Scope of callback.\n */\n entity.topologicalTravel = function (targetNameList, fullNameList, callback, context) {\n if (!targetNameList.length) {\n return;\n }\n\n var result = makeDepndencyGraph(fullNameList);\n var graph = result.graph;\n var stack = result.noEntryList;\n var targetNameSet = {};\n zrUtil.each(targetNameList, function (name) {\n targetNameSet[name] = true;\n });\n\n while (stack.length) {\n var currComponentType = stack.pop();\n var currVertex = graph[currComponentType];\n var isInTargetNameSet = !!targetNameSet[currComponentType];\n\n if (isInTargetNameSet) {\n callback.call(context, currComponentType, currVertex.originalDeps.slice());\n delete targetNameSet[currComponentType];\n }\n\n zrUtil.each(currVertex.successor, isInTargetNameSet ? removeEdgeAndAdd : removeEdge);\n }\n\n zrUtil.each(targetNameSet, function () {\n throw new Error('Circle dependency may exists');\n });\n\n function removeEdge(succComponentType) {\n graph[succComponentType].entryCount--;\n\n if (graph[succComponentType].entryCount === 0) {\n stack.push(succComponentType);\n }\n } // Consider this case: legend depends on series, and we call\n // chart.setOption({series: [...]}), where only series is in option.\n // If we do not have 'removeEdgeAndAdd', legendModel.mergeOption will\n // not be called, but only sereis.mergeOption is called. Thus legend\n // have no chance to update its local record about series (like which\n // name of series is available in legend).\n\n\n function removeEdgeAndAdd(succComponentType) {\n targetNameSet[succComponentType] = true;\n removeEdge(succComponentType);\n }\n };\n /**\n * DepndencyGraph: {Object}\n * key: conponentType,\n * value: {\n * successor: [conponentTypes...],\n * originalDeps: [conponentTypes...],\n * entryCount: {number}\n * }\n */\n\n\n function makeDepndencyGraph(fullNameList) {\n var graph = {};\n var noEntryList = [];\n zrUtil.each(fullNameList, function (name) {\n var thisItem = createDependencyGraphItem(graph, name);\n var originalDeps = thisItem.originalDeps = dependencyGetter(name);\n var availableDeps = getAvailableDependencies(originalDeps, fullNameList);\n thisItem.entryCount = availableDeps.length;\n\n if (thisItem.entryCount === 0) {\n noEntryList.push(name);\n }\n\n zrUtil.each(availableDeps, function (dependentName) {\n if (zrUtil.indexOf(thisItem.predecessor, dependentName) < 0) {\n thisItem.predecessor.push(dependentName);\n }\n\n var thatItem = createDependencyGraphItem(graph, dependentName);\n\n if (zrUtil.indexOf(thatItem.successor, dependentName) < 0) {\n thatItem.successor.push(name);\n }\n });\n });\n return {\n graph: graph,\n noEntryList: noEntryList\n };\n }\n\n function createDependencyGraphItem(graph, name) {\n if (!graph[name]) {\n graph[name] = {\n predecessor: [],\n successor: []\n };\n }\n\n return graph[name];\n }\n\n function getAvailableDependencies(originalDeps, fullNameList) {\n var availableDeps = [];\n zrUtil.each(originalDeps, function (dep) {\n zrUtil.indexOf(fullNameList, dep) >= 0 && availableDeps.push(dep);\n });\n return availableDeps;\n }\n}\n\nexports.getUID = getUID;\nexports.enableSubTypeDefaulter = enableSubTypeDefaulter;\nexports.enableTopologicalTravel = enableTopologicalTravel;","var platform = ''; // Navigator not exists in node\n\nif (typeof navigator !== 'undefined') {\n platform = navigator.platform || '';\n}\n\nvar _default = {\n // 全图默认背景\n // backgroundColor: 'rgba(0,0,0,0)',\n // https://dribbble.com/shots/1065960-Infographic-Pie-chart-visualization\n // color: ['#5793f3', '#d14a61', '#fd9c35', '#675bba', '#fec42c', '#dd4444', '#d4df5a', '#cd4870'],\n // 浅色\n // color: ['#bcd3bb', '#e88f70', '#edc1a5', '#9dc5c8', '#e1e8c8', '#7b7c68', '#e5b5b5', '#f0b489', '#928ea8', '#bda29a'],\n // color: ['#cc5664', '#9bd6ec', '#ea946e', '#8acaaa', '#f1ec64', '#ee8686', '#a48dc1', '#5da6bc', '#b9dcae'],\n // 深色\n color: ['#c23531', '#2f4554', '#61a0a8', '#d48265', '#91c7ae', '#749f83', '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3'],\n // 默认需要 Grid 配置项\n // grid: {},\n // 主题,主题\n textStyle: {\n // color: '#000',\n // decoration: 'none',\n // PENDING\n fontFamily: platform.match(/^Win/) ? 'Microsoft YaHei' : 'sans-serif',\n // fontFamily: 'Arial, Verdana, sans-serif',\n fontSize: 12,\n fontStyle: 'normal',\n fontWeight: 'normal'\n },\n // http://blogs.adobe.com/webplatform/2014/02/24/using-blend-modes-in-html-canvas/\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation\n // Default is source-over\n blendMode: null,\n animation: 'auto',\n animationDuration: 1000,\n animationDurationUpdate: 300,\n animationEasing: 'exponentialOut',\n animationEasingUpdate: 'cubicOut',\n animationThreshold: 2000,\n // Configuration for progressive/incremental rendering\n progressiveThreshold: 3000,\n progressive: 400,\n // Threshold of if use single hover layer to optimize.\n // It is recommended that `hoverLayerThreshold` is equivalent to or less than\n // `progressiveThreshold`, otherwise hover will cause restart of progressive,\n // which is unexpected.\n // see example .\n hoverLayerThreshold: 3000,\n // See: module:echarts/scale/Time\n useUTC: false\n};\nmodule.exports = _default;","var env = require(\"../../core/env\");\n\n// Fix weird bug in some version of IE11 (like 11.0.9600.178**),\n// where exception \"unexpected call to method or property access\"\n// might be thrown when calling ctx.fill or ctx.stroke after a path\n// whose area size is zero is drawn and ctx.clip() is called and\n// shadowBlur is set. See #4572, #3112, #5777.\n// (e.g.,\n// ctx.moveTo(10, 10);\n// ctx.lineTo(20, 10);\n// ctx.closePath();\n// ctx.clip();\n// ctx.shadowBlur = 10;\n// ...\n// ctx.fill();\n// )\nvar shadowTemp = [['shadowBlur', 0], ['shadowColor', '#000'], ['shadowOffsetX', 0], ['shadowOffsetY', 0]];\n\nfunction _default(orignalBrush) {\n // version string can be: '11.0'\n return env.browser.ie && env.browser.version >= 11 ? function () {\n var clipPaths = this.__clipPaths;\n var style = this.style;\n var modified;\n\n if (clipPaths) {\n for (var i = 0; i < clipPaths.length; i++) {\n var clipPath = clipPaths[i];\n var shape = clipPath && clipPath.shape;\n var type = clipPath && clipPath.type;\n\n if (shape && (type === 'sector' && shape.startAngle === shape.endAngle || type === 'rect' && (!shape.width || !shape.height))) {\n for (var j = 0; j < shadowTemp.length; j++) {\n // It is save to put shadowTemp static, because shadowTemp\n // will be all modified each item brush called.\n shadowTemp[j][2] = style[shadowTemp[j][0]];\n style[shadowTemp[j][0]] = shadowTemp[j][1];\n }\n\n modified = true;\n break;\n }\n }\n }\n\n orignalBrush.apply(this, arguments);\n\n if (modified) {\n for (var j = 0; j < shadowTemp.length; j++) {\n style[shadowTemp[j][0]] = shadowTemp[j][2];\n }\n }\n } : orignalBrush;\n}\n\nmodule.exports = _default;","var numberUtil = require(\"../util/number\");\n\nvar formatUtil = require(\"../util/format\");\n\nvar Scale = require(\"./Scale\");\n\nvar helper = require(\"./helper\");\n\n/**\n * Interval scale\n * @module echarts/scale/Interval\n */\nvar roundNumber = numberUtil.round;\n/**\n * @alias module:echarts/coord/scale/Interval\n * @constructor\n */\n\nvar IntervalScale = Scale.extend({\n type: 'interval',\n _interval: 0,\n _intervalPrecision: 2,\n setExtent: function (start, end) {\n var thisExtent = this._extent; //start,end may be a Number like '25',so...\n\n if (!isNaN(start)) {\n thisExtent[0] = parseFloat(start);\n }\n\n if (!isNaN(end)) {\n thisExtent[1] = parseFloat(end);\n }\n },\n unionExtent: function (other) {\n var extent = this._extent;\n other[0] < extent[0] && (extent[0] = other[0]);\n other[1] > extent[1] && (extent[1] = other[1]); // unionExtent may called by it's sub classes\n\n IntervalScale.prototype.setExtent.call(this, extent[0], extent[1]);\n },\n\n /**\n * Get interval\n */\n getInterval: function () {\n return this._interval;\n },\n\n /**\n * Set interval\n */\n setInterval: function (interval) {\n this._interval = interval; // Dropped auto calculated niceExtent and use user setted extent\n // We assume user wan't to set both interval, min, max to get a better result\n\n this._niceExtent = this._extent.slice();\n this._intervalPrecision = helper.getIntervalPrecision(interval);\n },\n\n /**\n * @return {Array.}\n */\n getTicks: function () {\n return helper.intervalScaleGetTicks(this._interval, this._extent, this._niceExtent, this._intervalPrecision);\n },\n\n /**\n * @return {Array.}\n */\n getTicksLabels: function () {\n var labels = [];\n var ticks = this.getTicks();\n\n for (var i = 0; i < ticks.length; i++) {\n labels.push(this.getLabel(ticks[i]));\n }\n\n return labels;\n },\n\n /**\n * @param {number} data\n * @param {Object} [opt]\n * @param {number|string} [opt.precision] If 'auto', use nice presision.\n * @param {boolean} [opt.pad] returns 1.50 but not 1.5 if precision is 2.\n * @return {string}\n */\n getLabel: function (data, opt) {\n if (data == null) {\n return '';\n }\n\n var precision = opt && opt.precision;\n\n if (precision == null) {\n precision = numberUtil.getPrecisionSafe(data) || 0;\n } else if (precision === 'auto') {\n // Should be more precise then tick.\n precision = this._intervalPrecision;\n } // (1) If `precision` is set, 12.005 should be display as '12.00500'.\n // (2) Use roundNumber (toFixed) to avoid scientific notation like '3.5e-7'.\n\n\n data = roundNumber(data, precision, true);\n return formatUtil.addCommas(data);\n },\n\n /**\n * Update interval and extent of intervals for nice ticks\n *\n * @param {number} [splitNumber = 5] Desired number of ticks\n * @param {number} [minInterval]\n * @param {number} [maxInterval]\n */\n niceTicks: function (splitNumber, minInterval, maxInterval) {\n splitNumber = splitNumber || 5;\n var extent = this._extent;\n var span = extent[1] - extent[0];\n\n if (!isFinite(span)) {\n return;\n } // User may set axis min 0 and data are all negative\n // FIXME If it needs to reverse ?\n\n\n if (span < 0) {\n span = -span;\n extent.reverse();\n }\n\n var result = helper.intervalScaleNiceTicks(extent, splitNumber, minInterval, maxInterval);\n this._intervalPrecision = result.intervalPrecision;\n this._interval = result.interval;\n this._niceExtent = result.niceTickExtent;\n },\n\n /**\n * Nice extent.\n * @param {Object} opt\n * @param {number} [opt.splitNumber = 5] Given approx tick number\n * @param {boolean} [opt.fixMin=false]\n * @param {boolean} [opt.fixMax=false]\n * @param {boolean} [opt.minInterval]\n * @param {boolean} [opt.maxInterval]\n */\n niceExtent: function (opt) {\n var extent = this._extent; // If extent start and end are same, expand them\n\n if (extent[0] === extent[1]) {\n if (extent[0] !== 0) {\n // Expand extent\n var expandSize = extent[0]; // In the fowllowing case\n // Axis has been fixed max 100\n // Plus data are all 100 and axis extent are [100, 100].\n // Extend to the both side will cause expanded max is larger than fixed max.\n // So only expand to the smaller side.\n\n if (!opt.fixMax) {\n extent[1] += expandSize / 2;\n extent[0] -= expandSize / 2;\n } else {\n extent[0] -= expandSize / 2;\n }\n } else {\n extent[1] = 1;\n }\n }\n\n var span = extent[1] - extent[0]; // If there are no data and extent are [Infinity, -Infinity]\n\n if (!isFinite(span)) {\n extent[0] = 0;\n extent[1] = 1;\n }\n\n this.niceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval); // var extent = this._extent;\n\n var interval = this._interval;\n\n if (!opt.fixMin) {\n extent[0] = roundNumber(Math.floor(extent[0] / interval) * interval);\n }\n\n if (!opt.fixMax) {\n extent[1] = roundNumber(Math.ceil(extent[1] / interval) * interval);\n }\n }\n});\n/**\n * @return {module:echarts/scale/Time}\n */\n\nIntervalScale.create = function () {\n return new IntervalScale();\n};\n\nvar _default = IntervalScale;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar Scale = require(\"./Scale\");\n\nvar numberUtil = require(\"../util/number\");\n\nvar IntervalScale = require(\"./Interval\");\n\n/**\n * Log scale\n * @module echarts/scale/Log\n */\n// Use some method of IntervalScale\nvar scaleProto = Scale.prototype;\nvar intervalScaleProto = IntervalScale.prototype;\nvar getPrecisionSafe = numberUtil.getPrecisionSafe;\nvar roundingErrorFix = numberUtil.round;\nvar mathFloor = Math.floor;\nvar mathCeil = Math.ceil;\nvar mathPow = Math.pow;\nvar mathLog = Math.log;\nvar LogScale = Scale.extend({\n type: 'log',\n base: 10,\n $constructor: function () {\n Scale.apply(this, arguments);\n this._originalScale = new IntervalScale();\n },\n\n /**\n * @return {Array.}\n */\n getTicks: function () {\n var originalScale = this._originalScale;\n var extent = this._extent;\n var originalExtent = originalScale.getExtent();\n return zrUtil.map(intervalScaleProto.getTicks.call(this), function (val) {\n var powVal = numberUtil.round(mathPow(this.base, val)); // Fix #4158\n\n powVal = val === extent[0] && originalScale.__fixMin ? fixRoundingError(powVal, originalExtent[0]) : powVal;\n powVal = val === extent[1] && originalScale.__fixMax ? fixRoundingError(powVal, originalExtent[1]) : powVal;\n return powVal;\n }, this);\n },\n\n /**\n * @param {number} val\n * @return {string}\n */\n getLabel: intervalScaleProto.getLabel,\n\n /**\n * @param {number} val\n * @return {number}\n */\n scale: function (val) {\n val = scaleProto.scale.call(this, val);\n return mathPow(this.base, val);\n },\n\n /**\n * @param {number} start\n * @param {number} end\n */\n setExtent: function (start, end) {\n var base = this.base;\n start = mathLog(start) / mathLog(base);\n end = mathLog(end) / mathLog(base);\n intervalScaleProto.setExtent.call(this, start, end);\n },\n\n /**\n * @return {number} end\n */\n getExtent: function () {\n var base = this.base;\n var extent = scaleProto.getExtent.call(this);\n extent[0] = mathPow(base, extent[0]);\n extent[1] = mathPow(base, extent[1]); // Fix #4158\n\n var originalScale = this._originalScale;\n var originalExtent = originalScale.getExtent();\n originalScale.__fixMin && (extent[0] = fixRoundingError(extent[0], originalExtent[0]));\n originalScale.__fixMax && (extent[1] = fixRoundingError(extent[1], originalExtent[1]));\n return extent;\n },\n\n /**\n * @param {Array.} extent\n */\n unionExtent: function (extent) {\n this._originalScale.unionExtent(extent);\n\n var base = this.base;\n extent[0] = mathLog(extent[0]) / mathLog(base);\n extent[1] = mathLog(extent[1]) / mathLog(base);\n scaleProto.unionExtent.call(this, extent);\n },\n\n /**\n * @override\n */\n unionExtentFromData: function (data, dim) {\n this.unionExtent(data.getDataExtent(dim, true, function (val) {\n return val > 0;\n }));\n },\n\n /**\n * Update interval and extent of intervals for nice ticks\n * @param {number} [approxTickNum = 10] Given approx tick number\n */\n niceTicks: function (approxTickNum) {\n approxTickNum = approxTickNum || 10;\n var extent = this._extent;\n var span = extent[1] - extent[0];\n\n if (span === Infinity || span <= 0) {\n return;\n }\n\n var interval = numberUtil.quantity(span);\n var err = approxTickNum / span * interval; // Filter ticks to get closer to the desired count.\n\n if (err <= 0.5) {\n interval *= 10;\n } // Interval should be integer\n\n\n while (!isNaN(interval) && Math.abs(interval) < 1 && Math.abs(interval) > 0) {\n interval *= 10;\n }\n\n var niceExtent = [numberUtil.round(mathCeil(extent[0] / interval) * interval), numberUtil.round(mathFloor(extent[1] / interval) * interval)];\n this._interval = interval;\n this._niceExtent = niceExtent;\n },\n\n /**\n * Nice extent.\n * @override\n */\n niceExtent: function (opt) {\n intervalScaleProto.niceExtent.call(this, opt);\n var originalScale = this._originalScale;\n originalScale.__fixMin = opt.fixMin;\n originalScale.__fixMax = opt.fixMax;\n }\n});\nzrUtil.each(['contain', 'normalize'], function (methodName) {\n LogScale.prototype[methodName] = function (val) {\n val = mathLog(val) / mathLog(this.base);\n return scaleProto[methodName].call(this, val);\n };\n});\n\nLogScale.create = function () {\n return new LogScale();\n};\n\nfunction fixRoundingError(val, originalVal) {\n return roundingErrorFix(val, getPrecisionSafe(originalVal));\n}\n\nvar _default = LogScale;\nmodule.exports = _default;","var Path = require(\"../Path\");\n\n/**\n * 圆弧\n * @module zrender/graphic/shape/Arc\n */\nvar _default = Path.extend({\n type: 'arc',\n shape: {\n cx: 0,\n cy: 0,\n r: 0,\n startAngle: 0,\n endAngle: Math.PI * 2,\n clockwise: true\n },\n style: {\n stroke: '#000',\n fill: null\n },\n buildPath: function (ctx, shape) {\n var x = shape.cx;\n var y = shape.cy;\n var r = Math.max(shape.r, 0);\n var startAngle = shape.startAngle;\n var endAngle = shape.endAngle;\n var clockwise = shape.clockwise;\n var unitX = Math.cos(startAngle);\n var unitY = Math.sin(startAngle);\n ctx.moveTo(unitX * r + x, unitY * r + y);\n ctx.arc(x, y, r, startAngle, endAngle, !clockwise);\n }\n});\n\nmodule.exports = _default;","var echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nrequire(\"../component/radar\");\n\nrequire(\"./radar/RadarSeries\");\n\nrequire(\"./radar/RadarView\");\n\nvar dataColor = require(\"../visual/dataColor\");\n\nvar visualSymbol = require(\"../visual/symbol\");\n\nvar radarLayout = require(\"./radar/radarLayout\");\n\nvar dataFilter = require(\"../processor/dataFilter\");\n\nvar backwardCompat = require(\"./radar/backwardCompat\");\n\n// Must use radar component\necharts.registerVisual(zrUtil.curry(dataColor, 'radar'));\necharts.registerVisual(zrUtil.curry(visualSymbol, 'radar', 'circle', null));\necharts.registerLayout(radarLayout);\necharts.registerProcessor(zrUtil.curry(dataFilter, 'radar'));\necharts.registerPreprocessor(backwardCompat);","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar colorUtil = require(\"zrender/lib/tool/color\");\n\nvar List = require(\"../../data/List\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar markerHelper = require(\"./markerHelper\");\n\nvar MarkerView = require(\"./MarkerView\");\n\n// TODO Better on polar\nvar markAreaTransform = function (seriesModel, coordSys, maModel, item) {\n var lt = markerHelper.dataTransform(seriesModel, item[0]);\n var rb = markerHelper.dataTransform(seriesModel, item[1]);\n var retrieve = zrUtil.retrieve; // FIXME make sure lt is less than rb\n\n var ltCoord = lt.coord;\n var rbCoord = rb.coord;\n ltCoord[0] = retrieve(ltCoord[0], -Infinity);\n ltCoord[1] = retrieve(ltCoord[1], -Infinity);\n rbCoord[0] = retrieve(rbCoord[0], Infinity);\n rbCoord[1] = retrieve(rbCoord[1], Infinity); // Merge option into one\n\n var result = zrUtil.mergeAll([{}, lt, rb]);\n result.coord = [lt.coord, rb.coord];\n result.x0 = lt.x;\n result.y0 = lt.y;\n result.x1 = rb.x;\n result.y1 = rb.y;\n return result;\n};\n\nfunction isInifinity(val) {\n return !isNaN(val) && !isFinite(val);\n} // If a markArea has one dim\n\n\nfunction ifMarkLineHasOnlyDim(dimIndex, fromCoord, toCoord, coordSys) {\n var otherDimIndex = 1 - dimIndex;\n return isInifinity(fromCoord[otherDimIndex]) && isInifinity(toCoord[otherDimIndex]);\n}\n\nfunction markAreaFilter(coordSys, item) {\n var fromCoord = item.coord[0];\n var toCoord = item.coord[1];\n\n if (coordSys.type === 'cartesian2d') {\n // In case\n // {\n // markArea: {\n // data: [{ yAxis: 2 }]\n // }\n // }\n if (fromCoord && toCoord && (ifMarkLineHasOnlyDim(1, fromCoord, toCoord, coordSys) || ifMarkLineHasOnlyDim(0, fromCoord, toCoord, coordSys))) {\n return true;\n }\n }\n\n return markerHelper.dataFilter(coordSys, {\n coord: fromCoord,\n x: item.x0,\n y: item.y0\n }) || markerHelper.dataFilter(coordSys, {\n coord: toCoord,\n x: item.x1,\n y: item.y1\n });\n} // dims can be ['x0', 'y0'], ['x1', 'y1'], ['x0', 'y1'], ['x1', 'y0']\n\n\nfunction getSingleMarkerEndPoint(data, idx, dims, seriesModel, api) {\n var coordSys = seriesModel.coordinateSystem;\n var itemModel = data.getItemModel(idx);\n var point;\n var xPx = numberUtil.parsePercent(itemModel.get(dims[0]), api.getWidth());\n var yPx = numberUtil.parsePercent(itemModel.get(dims[1]), api.getHeight());\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n point = [xPx, yPx];\n } else {\n // Chart like bar may have there own marker positioning logic\n if (seriesModel.getMarkerPosition) {\n // Use the getMarkerPoisition\n point = seriesModel.getMarkerPosition(data.getValues(dims, idx));\n } else {\n var x = data.get(dims[0], idx);\n var y = data.get(dims[1], idx);\n point = coordSys.dataToPoint([x, y], true);\n }\n\n if (coordSys.type === 'cartesian2d') {\n var xAxis = coordSys.getAxis('x');\n var yAxis = coordSys.getAxis('y');\n var x = data.get(dims[0], idx);\n var y = data.get(dims[1], idx);\n\n if (isInifinity(x)) {\n point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[dims[0] === 'x0' ? 0 : 1]);\n } else if (isInifinity(y)) {\n point[1] = yAxis.toGlobalCoord(yAxis.getExtent()[dims[1] === 'y0' ? 0 : 1]);\n }\n } // Use x, y if has any\n\n\n if (!isNaN(xPx)) {\n point[0] = xPx;\n }\n\n if (!isNaN(yPx)) {\n point[1] = yPx;\n }\n }\n\n return point;\n}\n\nvar dimPermutations = [['x0', 'y0'], ['x1', 'y0'], ['x1', 'y1'], ['x0', 'y1']];\nMarkerView.extend({\n type: 'markArea',\n updateLayout: function (markAreaModel, ecModel, api) {\n ecModel.eachSeries(function (seriesModel) {\n var maModel = seriesModel.markAreaModel;\n\n if (maModel) {\n var areaData = maModel.getData();\n areaData.each(function (idx) {\n var points = zrUtil.map(dimPermutations, function (dim) {\n return getSingleMarkerEndPoint(areaData, idx, dim, seriesModel, api);\n }); // Layout\n\n areaData.setItemLayout(idx, points);\n var el = areaData.getItemGraphicEl(idx);\n el.setShape('points', points);\n });\n }\n }, this);\n },\n renderSeries: function (seriesModel, maModel, ecModel, api) {\n var coordSys = seriesModel.coordinateSystem;\n var seriesName = seriesModel.name;\n var seriesData = seriesModel.getData();\n var areaGroupMap = this.markerGroupMap;\n var polygonGroup = areaGroupMap.get(seriesName) || areaGroupMap.set(seriesName, {\n group: new graphic.Group()\n });\n this.group.add(polygonGroup.group);\n polygonGroup.__keep = true;\n var areaData = createList(coordSys, seriesModel, maModel); // Line data for tooltip and formatter\n\n maModel.setData(areaData); // Update visual and layout of line\n\n areaData.each(function (idx) {\n // Layout\n areaData.setItemLayout(idx, zrUtil.map(dimPermutations, function (dim) {\n return getSingleMarkerEndPoint(areaData, idx, dim, seriesModel, api);\n })); // Visual\n\n areaData.setItemVisual(idx, {\n color: seriesData.getVisual('color')\n });\n });\n areaData.diff(polygonGroup.__data).add(function (idx) {\n var polygon = new graphic.Polygon({\n shape: {\n points: areaData.getItemLayout(idx)\n }\n });\n areaData.setItemGraphicEl(idx, polygon);\n polygonGroup.group.add(polygon);\n }).update(function (newIdx, oldIdx) {\n var polygon = polygonGroup.__data.getItemGraphicEl(oldIdx);\n\n graphic.updateProps(polygon, {\n shape: {\n points: areaData.getItemLayout(newIdx)\n }\n }, maModel, newIdx);\n polygonGroup.group.add(polygon);\n areaData.setItemGraphicEl(newIdx, polygon);\n }).remove(function (idx) {\n var polygon = polygonGroup.__data.getItemGraphicEl(idx);\n\n polygonGroup.group.remove(polygon);\n }).execute();\n areaData.eachItemGraphicEl(function (polygon, idx) {\n var itemModel = areaData.getItemModel(idx);\n var labelModel = itemModel.getModel('label.normal');\n var labelHoverModel = itemModel.getModel('label.emphasis');\n var color = areaData.getItemVisual(idx, 'color');\n polygon.useStyle(zrUtil.defaults(itemModel.getModel('itemStyle.normal').getItemStyle(), {\n fill: colorUtil.modifyAlpha(color, 0.4),\n stroke: color\n }));\n polygon.hoverStyle = itemModel.getModel('itemStyle.emphasis').getItemStyle();\n graphic.setLabelStyle(polygon.style, polygon.hoverStyle, labelModel, labelHoverModel, {\n labelFetcher: maModel,\n labelDataIndex: idx,\n defaultText: areaData.getName(idx) || '',\n isRectText: true,\n autoColor: color\n });\n graphic.setHoverStyle(polygon, {});\n polygon.dataModel = maModel;\n });\n polygonGroup.__data = areaData;\n polygonGroup.group.silent = maModel.get('silent') || seriesModel.get('silent');\n }\n});\n/**\n * @inner\n * @param {module:echarts/coord/*} coordSys\n * @param {module:echarts/model/Series} seriesModel\n * @param {module:echarts/model/Model} mpModel\n */\n\nfunction createList(coordSys, seriesModel, maModel) {\n var coordDimsInfos;\n var areaData;\n var dims = ['x0', 'y0', 'x1', 'y1'];\n\n if (coordSys) {\n coordDimsInfos = zrUtil.map(coordSys && coordSys.dimensions, function (coordDim) {\n var info = seriesModel.getData().getDimensionInfo(seriesModel.coordDimToDataDim(coordDim)[0]) || {}; // In map series data don't have lng and lat dimension. Fallback to same with coordSys\n\n info.name = coordDim;\n return info;\n });\n areaData = new List(zrUtil.map(dims, function (dim, idx) {\n return {\n name: dim,\n type: coordDimsInfos[idx % 2].type\n };\n }), maModel);\n } else {\n coordDimsInfos = [{\n name: 'value',\n type: 'float'\n }];\n areaData = new List(coordDimsInfos, maModel);\n }\n\n var optData = zrUtil.map(maModel.get('data'), zrUtil.curry(markAreaTransform, seriesModel, coordSys, maModel));\n\n if (coordSys) {\n optData = zrUtil.filter(optData, zrUtil.curry(markAreaFilter, coordSys));\n }\n\n var dimValueGetter = coordSys ? function (item, dimName, dataIndex, dimIndex) {\n return item.coord[Math.floor(dimIndex / 2)][dimIndex % 2];\n } : function (item) {\n return item.value;\n };\n areaData.initData(optData, null, dimValueGetter);\n areaData.hasItemOption = true;\n return areaData;\n}","var echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar featureManager = require(\"./featureManager\");\n\nvar ToolboxModel = echarts.extendComponentModel({\n type: 'toolbox',\n layoutMode: {\n type: 'box',\n ignoreSize: true\n },\n mergeDefaultAndTheme: function (option) {\n ToolboxModel.superApply(this, 'mergeDefaultAndTheme', arguments);\n zrUtil.each(this.option.feature, function (featureOpt, featureName) {\n var Feature = featureManager.get(featureName);\n Feature && zrUtil.merge(featureOpt, Feature.defaultOption);\n });\n },\n defaultOption: {\n show: true,\n z: 6,\n zlevel: 0,\n orient: 'horizontal',\n left: 'right',\n top: 'top',\n // right\n // bottom\n backgroundColor: 'transparent',\n borderColor: '#ccc',\n borderRadius: 0,\n borderWidth: 0,\n padding: 5,\n itemSize: 15,\n itemGap: 8,\n showTitle: true,\n iconStyle: {\n normal: {\n borderColor: '#666',\n color: 'none'\n },\n emphasis: {\n borderColor: '#3E98C5'\n } // textStyle: {},\n // feature\n\n }\n }\n});\nvar _default = ToolboxModel;\nmodule.exports = _default;","require(\"./AxisModel\");\n\nvar ComponentModel = require(\"../../model/Component\");\n\n// Grid 是在有直角坐标系的时候必须要存在的\n// 所以这里也要被 Cartesian2D 依赖\nvar _default = ComponentModel.extend({\n type: 'grid',\n dependencies: ['xAxis', 'yAxis'],\n layoutMode: 'box',\n\n /**\n * @type {module:echarts/coord/cartesian/Grid}\n */\n coordinateSystem: null,\n defaultOption: {\n show: false,\n zlevel: 0,\n z: 0,\n left: '10%',\n top: 60,\n right: '10%',\n bottom: 60,\n // If grid size contain label\n containLabel: false,\n // width: {totalWidth} - left - right,\n // height: {totalHeight} - top - bottom,\n backgroundColor: 'rgba(0,0,0,0)',\n borderWidth: 1,\n borderColor: '#ccc'\n }\n});\n\nmodule.exports = _default;","require(\"./graphic\");\n\nvar _zrender = require(\"../zrender\");\n\nvar registerPainter = _zrender.registerPainter;\n\nvar Painter = require(\"./Painter\");\n\nregisterPainter('svg', Painter);","function _default(ecModel) {\n var legendModels = ecModel.findComponents({\n mainType: 'legend'\n });\n\n if (legendModels && legendModels.length) {\n ecModel.filterSeries(function (series) {\n // If in any legend component the status is not selected.\n // Because in legend series is assumed selected when it is not in the legend data.\n for (var i = 0; i < legendModels.length; i++) {\n if (!legendModels[i].isSelected(series.name)) {\n return false;\n }\n }\n\n return true;\n });\n }\n}\n\nmodule.exports = _default;","var VisualMapping = require(\"../../visual/VisualMapping\");\n\nvar zrColor = require(\"zrender/lib/tool/color\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar isArray = zrUtil.isArray;\nvar ITEM_STYLE_NORMAL = 'itemStyle.normal';\n\nfunction _default(ecModel, api, payload) {\n var condition = {\n mainType: 'series',\n subType: 'treemap',\n query: payload\n };\n ecModel.eachComponent(condition, function (seriesModel) {\n var tree = seriesModel.getData().tree;\n var root = tree.root;\n var seriesItemStyleModel = seriesModel.getModel(ITEM_STYLE_NORMAL);\n\n if (root.isRemoved()) {\n return;\n }\n\n var levelItemStyles = zrUtil.map(tree.levelModels, function (levelModel) {\n return levelModel ? levelModel.get(ITEM_STYLE_NORMAL) : null;\n });\n travelTree(root, // Visual should calculate from tree root but not view root.\n {}, levelItemStyles, seriesItemStyleModel, seriesModel.getViewRoot().getAncestors(), seriesModel);\n });\n}\n\nfunction travelTree(node, designatedVisual, levelItemStyles, seriesItemStyleModel, viewRootAncestors, seriesModel) {\n var nodeModel = node.getModel();\n var nodeLayout = node.getLayout(); // Optimize\n\n if (!nodeLayout || nodeLayout.invisible || !nodeLayout.isInView) {\n return;\n }\n\n var nodeItemStyleModel = node.getModel(ITEM_STYLE_NORMAL);\n var levelItemStyle = levelItemStyles[node.depth];\n var visuals = buildVisuals(nodeItemStyleModel, designatedVisual, levelItemStyle, seriesItemStyleModel); // calculate border color\n\n var borderColor = nodeItemStyleModel.get('borderColor');\n var borderColorSaturation = nodeItemStyleModel.get('borderColorSaturation');\n var thisNodeColor;\n\n if (borderColorSaturation != null) {\n // For performance, do not always execute 'calculateColor'.\n thisNodeColor = calculateColor(visuals, node);\n borderColor = calculateBorderColor(borderColorSaturation, thisNodeColor);\n }\n\n node.setVisual('borderColor', borderColor);\n var viewChildren = node.viewChildren;\n\n if (!viewChildren || !viewChildren.length) {\n thisNodeColor = calculateColor(visuals, node); // Apply visual to this node.\n\n node.setVisual('color', thisNodeColor);\n } else {\n var mapping = buildVisualMapping(node, nodeModel, nodeLayout, nodeItemStyleModel, visuals, viewChildren); // Designate visual to children.\n\n zrUtil.each(viewChildren, function (child, index) {\n // If higher than viewRoot, only ancestors of viewRoot is needed to visit.\n if (child.depth >= viewRootAncestors.length || child === viewRootAncestors[child.depth]) {\n var childVisual = mapVisual(nodeModel, visuals, child, index, mapping, seriesModel);\n travelTree(child, childVisual, levelItemStyles, seriesItemStyleModel, viewRootAncestors, seriesModel);\n }\n });\n }\n}\n\nfunction buildVisuals(nodeItemStyleModel, designatedVisual, levelItemStyle, seriesItemStyleModel) {\n var visuals = zrUtil.extend({}, designatedVisual);\n zrUtil.each(['color', 'colorAlpha', 'colorSaturation'], function (visualName) {\n // Priority: thisNode > thisLevel > parentNodeDesignated > seriesModel\n var val = nodeItemStyleModel.get(visualName, true); // Ignore parent\n\n val == null && levelItemStyle && (val = levelItemStyle[visualName]);\n val == null && (val = designatedVisual[visualName]);\n val == null && (val = seriesItemStyleModel.get(visualName));\n val != null && (visuals[visualName] = val);\n });\n return visuals;\n}\n\nfunction calculateColor(visuals) {\n var color = getValueVisualDefine(visuals, 'color');\n\n if (color) {\n var colorAlpha = getValueVisualDefine(visuals, 'colorAlpha');\n var colorSaturation = getValueVisualDefine(visuals, 'colorSaturation');\n\n if (colorSaturation) {\n color = zrColor.modifyHSL(color, null, null, colorSaturation);\n }\n\n if (colorAlpha) {\n color = zrColor.modifyAlpha(color, colorAlpha);\n }\n\n return color;\n }\n}\n\nfunction calculateBorderColor(borderColorSaturation, thisNodeColor) {\n return thisNodeColor != null ? zrColor.modifyHSL(thisNodeColor, null, null, borderColorSaturation) : null;\n}\n\nfunction getValueVisualDefine(visuals, name) {\n var value = visuals[name];\n\n if (value != null && value !== 'none') {\n return value;\n }\n}\n\nfunction buildVisualMapping(node, nodeModel, nodeLayout, nodeItemStyleModel, visuals, viewChildren) {\n if (!viewChildren || !viewChildren.length) {\n return;\n }\n\n var rangeVisual = getRangeVisual(nodeModel, 'color') || visuals.color != null && visuals.color !== 'none' && (getRangeVisual(nodeModel, 'colorAlpha') || getRangeVisual(nodeModel, 'colorSaturation'));\n\n if (!rangeVisual) {\n return;\n }\n\n var visualMin = nodeModel.get('visualMin');\n var visualMax = nodeModel.get('visualMax');\n var dataExtent = nodeLayout.dataExtent.slice();\n visualMin != null && visualMin < dataExtent[0] && (dataExtent[0] = visualMin);\n visualMax != null && visualMax > dataExtent[1] && (dataExtent[1] = visualMax);\n var colorMappingBy = nodeModel.get('colorMappingBy');\n var opt = {\n type: rangeVisual.name,\n dataExtent: dataExtent,\n visual: rangeVisual.range\n };\n\n if (opt.type === 'color' && (colorMappingBy === 'index' || colorMappingBy === 'id')) {\n opt.mappingMethod = 'category';\n opt.loop = true; // categories is ordinal, so do not set opt.categories.\n } else {\n opt.mappingMethod = 'linear';\n }\n\n var mapping = new VisualMapping(opt);\n mapping.__drColorMappingBy = colorMappingBy;\n return mapping;\n} // Notice: If we dont have the attribute 'colorRange', but only use\n// attribute 'color' to represent both concepts of 'colorRange' and 'color',\n// (It means 'colorRange' when 'color' is Array, means 'color' when not array),\n// this problem will be encountered:\n// If a level-1 node dont have children, and its siblings has children,\n// and colorRange is set on level-1, then the node can not be colored.\n// So we separate 'colorRange' and 'color' to different attributes.\n\n\nfunction getRangeVisual(nodeModel, name) {\n // 'colorRange', 'colorARange', 'colorSRange'.\n // If not exsits on this node, fetch from levels and series.\n var range = nodeModel.get(name);\n return isArray(range) && range.length ? {\n name: name,\n range: range\n } : null;\n}\n\nfunction mapVisual(nodeModel, visuals, child, index, mapping, seriesModel) {\n var childVisuals = zrUtil.extend({}, visuals);\n\n if (mapping) {\n var mappingType = mapping.type;\n var colorMappingBy = mappingType === 'color' && mapping.__drColorMappingBy;\n var value = colorMappingBy === 'index' ? index : colorMappingBy === 'id' ? seriesModel.mapIdToIndex(child.getId()) : child.getValue(nodeModel.get('visualDimension'));\n childVisuals[mappingType] = mapping.mapValueToVisual(value);\n }\n\n return childVisuals;\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar indexOf = zrUtil.indexOf;\n\nfunction hasXOrY(item) {\n return !(isNaN(parseFloat(item.x)) && isNaN(parseFloat(item.y)));\n}\n\nfunction hasXAndY(item) {\n return !isNaN(parseFloat(item.x)) && !isNaN(parseFloat(item.y));\n}\n\nfunction getPrecision(data, valueAxisDim, dataIndex) {\n var precision = -1;\n\n do {\n precision = Math.max(numberUtil.getPrecision(data.get(valueAxisDim, dataIndex)), precision);\n data = data.stackedOn;\n } while (data);\n\n return precision;\n}\n\nfunction markerTypeCalculatorWithExtent(mlType, data, otherDataDim, targetDataDim, otherCoordIndex, targetCoordIndex) {\n var coordArr = [];\n var value = numCalculate(data, targetDataDim, mlType);\n var dataIndex = data.indicesOfNearest(targetDataDim, value, true)[0];\n coordArr[otherCoordIndex] = data.get(otherDataDim, dataIndex, true);\n coordArr[targetCoordIndex] = data.get(targetDataDim, dataIndex, true);\n var precision = getPrecision(data, targetDataDim, dataIndex);\n precision = Math.min(precision, 20);\n\n if (precision >= 0) {\n coordArr[targetCoordIndex] = +coordArr[targetCoordIndex].toFixed(precision);\n }\n\n return coordArr;\n}\n\nvar curry = zrUtil.curry; // TODO Specified percent\n\nvar markerTypeCalculator = {\n /**\n * @method\n * @param {module:echarts/data/List} data\n * @param {string} baseAxisDim\n * @param {string} valueAxisDim\n */\n min: curry(markerTypeCalculatorWithExtent, 'min'),\n\n /**\n * @method\n * @param {module:echarts/data/List} data\n * @param {string} baseAxisDim\n * @param {string} valueAxisDim\n */\n max: curry(markerTypeCalculatorWithExtent, 'max'),\n\n /**\n * @method\n * @param {module:echarts/data/List} data\n * @param {string} baseAxisDim\n * @param {string} valueAxisDim\n */\n average: curry(markerTypeCalculatorWithExtent, 'average')\n};\n/**\n * Transform markPoint data item to format used in List by do the following\n * 1. Calculate statistic like `max`, `min`, `average`\n * 2. Convert `item.xAxis`, `item.yAxis` to `item.coord` array\n * @param {module:echarts/model/Series} seriesModel\n * @param {module:echarts/coord/*} [coordSys]\n * @param {Object} item\n * @return {Object}\n */\n\nfunction dataTransform(seriesModel, item) {\n var data = seriesModel.getData();\n var coordSys = seriesModel.coordinateSystem; // 1. If not specify the position with pixel directly\n // 2. If `coord` is not a data array. Which uses `xAxis`,\n // `yAxis` to specify the coord on each dimension\n // parseFloat first because item.x and item.y can be percent string like '20%'\n\n if (item && !hasXAndY(item) && !zrUtil.isArray(item.coord) && coordSys) {\n var dims = coordSys.dimensions;\n var axisInfo = getAxisInfo(item, data, coordSys, seriesModel); // Clone the option\n // Transform the properties xAxis, yAxis, radiusAxis, angleAxis, geoCoord to value\n\n item = zrUtil.clone(item);\n\n if (item.type && markerTypeCalculator[item.type] && axisInfo.baseAxis && axisInfo.valueAxis) {\n var otherCoordIndex = indexOf(dims, axisInfo.baseAxis.dim);\n var targetCoordIndex = indexOf(dims, axisInfo.valueAxis.dim);\n item.coord = markerTypeCalculator[item.type](data, axisInfo.baseDataDim, axisInfo.valueDataDim, otherCoordIndex, targetCoordIndex); // Force to use the value of calculated value.\n\n item.value = item.coord[targetCoordIndex];\n } else {\n // FIXME Only has one of xAxis and yAxis.\n var coord = [item.xAxis != null ? item.xAxis : item.radiusAxis, item.yAxis != null ? item.yAxis : item.angleAxis]; // Each coord support max, min, average\n\n for (var i = 0; i < 2; i++) {\n if (markerTypeCalculator[coord[i]]) {\n var dataDim = seriesModel.coordDimToDataDim(dims[i])[0];\n coord[i] = numCalculate(data, dataDim, coord[i]);\n }\n }\n\n item.coord = coord;\n }\n }\n\n return item;\n}\n\nfunction getAxisInfo(item, data, coordSys, seriesModel) {\n var ret = {};\n\n if (item.valueIndex != null || item.valueDim != null) {\n ret.valueDataDim = item.valueIndex != null ? data.getDimension(item.valueIndex) : item.valueDim;\n ret.valueAxis = coordSys.getAxis(seriesModel.dataDimToCoordDim(ret.valueDataDim));\n ret.baseAxis = coordSys.getOtherAxis(ret.valueAxis);\n ret.baseDataDim = seriesModel.coordDimToDataDim(ret.baseAxis.dim)[0];\n } else {\n ret.baseAxis = seriesModel.getBaseAxis();\n ret.valueAxis = coordSys.getOtherAxis(ret.baseAxis);\n ret.baseDataDim = seriesModel.coordDimToDataDim(ret.baseAxis.dim)[0];\n ret.valueDataDim = seriesModel.coordDimToDataDim(ret.valueAxis.dim)[0];\n }\n\n return ret;\n}\n/**\n * Filter data which is out of coordinateSystem range\n * [dataFilter description]\n * @param {module:echarts/coord/*} [coordSys]\n * @param {Object} item\n * @return {boolean}\n */\n\n\nfunction dataFilter(coordSys, item) {\n // Alwalys return true if there is no coordSys\n return coordSys && coordSys.containData && item.coord && !hasXOrY(item) ? coordSys.containData(item.coord) : true;\n}\n\nfunction dimValueGetter(item, dimName, dataIndex, dimIndex) {\n // x, y, radius, angle\n if (dimIndex < 2) {\n return item.coord && item.coord[dimIndex];\n }\n\n return item.value;\n}\n\nfunction numCalculate(data, valueDataDim, type) {\n if (type === 'average') {\n var sum = 0;\n var count = 0;\n data.each(valueDataDim, function (val, idx) {\n if (!isNaN(val)) {\n sum += val;\n count++;\n }\n }, true);\n return sum / count;\n } else {\n return data.getDataExtent(valueDataDim, true)[type === 'max' ? 1 : 0];\n }\n}\n\nexports.dataTransform = dataTransform;\nexports.getAxisInfo = getAxisInfo;\nexports.dataFilter = dataFilter;\nexports.dimValueGetter = dimValueGetter;\nexports.numCalculate = numCalculate;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar Axis = require(\"../Axis\");\n\nfunction RadiusAxis(scale, radiusExtent) {\n Axis.call(this, 'radius', scale, radiusExtent);\n /**\n * Axis type\n * - 'category'\n * - 'value'\n * - 'time'\n * - 'log'\n * @type {string}\n */\n\n this.type = 'category';\n}\n\nRadiusAxis.prototype = {\n constructor: RadiusAxis,\n\n /**\n * @override\n */\n pointToData: function (point, clamp) {\n return this.polar.pointToData(point, clamp)[this.dim === 'radius' ? 0 : 1];\n },\n dataToRadius: Axis.prototype.dataToCoord,\n radiusToData: Axis.prototype.coordToData\n};\nzrUtil.inherits(RadiusAxis, Axis);\nvar _default = RadiusAxis;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar SeriesModel = require(\"../../model/Series\");\n\nvar Tree = require(\"../../data/Tree\");\n\nvar Model = require(\"../../model/Model\");\n\nvar _format = require(\"../../util/format\");\n\nvar encodeHTML = _format.encodeHTML;\nvar addCommas = _format.addCommas;\n\nvar _helper = require(\"./helper\");\n\nvar wrapTreePathInfo = _helper.wrapTreePathInfo;\n\nvar _default = SeriesModel.extend({\n type: 'series.treemap',\n layoutMode: 'box',\n dependencies: ['grid', 'polar'],\n\n /**\n * @type {module:echarts/data/Tree~Node}\n */\n _viewRoot: null,\n defaultOption: {\n // Disable progressive rendering\n progressive: 0,\n hoverLayerThreshold: Infinity,\n // center: ['50%', '50%'], // not supported in ec3.\n // size: ['80%', '80%'], // deprecated, compatible with ec2.\n left: 'center',\n top: 'middle',\n right: null,\n bottom: null,\n width: '80%',\n height: '80%',\n sort: true,\n // Can be null or false or true\n // (order by desc default, asc not supported yet (strange effect))\n clipWindow: 'origin',\n // Size of clipped window when zooming. 'origin' or 'fullscreen'\n squareRatio: 0.5 * (1 + Math.sqrt(5)),\n // golden ratio\n leafDepth: null,\n // Nodes on depth from root are regarded as leaves.\n // Count from zero (zero represents only view root).\n drillDownIcon: '▶',\n // Use html character temporarily because it is complicated\n // to align specialized icon. ▷▶❒❐▼✚\n zoomToNodeRatio: 0.32 * 0.32,\n // Be effective when using zoomToNode. Specify the proportion of the\n // target node area in the view area.\n roam: true,\n // true, false, 'scale' or 'zoom', 'move'.\n nodeClick: 'zoomToNode',\n // Leaf node click behaviour: 'zoomToNode', 'link', false.\n // If leafDepth is set and clicking a node which has children but\n // be on left depth, the behaviour would be changing root. Otherwise\n // use behavious defined above.\n animation: true,\n animationDurationUpdate: 900,\n animationEasing: 'quinticInOut',\n breadcrumb: {\n show: true,\n height: 22,\n left: 'center',\n top: 'bottom',\n // right\n // bottom\n emptyItemWidth: 25,\n // Width of empty node.\n itemStyle: {\n normal: {\n color: 'rgba(0,0,0,0.7)',\n //'#5793f3',\n borderColor: 'rgba(255,255,255,0.7)',\n borderWidth: 1,\n shadowColor: 'rgba(150,150,150,1)',\n shadowBlur: 3,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n textStyle: {\n color: '#fff'\n }\n },\n emphasis: {\n textStyle: {}\n }\n }\n },\n label: {\n normal: {\n show: true,\n // Do not use textDistance, for ellipsis rect just the same as treemap node rect.\n distance: 0,\n padding: 5,\n position: 'inside',\n // Can be [5, '5%'] or position stirng like 'insideTopLeft', ...\n // formatter: null,\n color: '#fff',\n ellipsis: true // align\n // verticalAlign\n\n }\n },\n upperLabel: {\n // Label when node is parent.\n normal: {\n show: false,\n position: [0, '50%'],\n height: 20,\n // formatter: null,\n color: '#fff',\n ellipsis: true,\n // align: null,\n verticalAlign: 'middle'\n },\n emphasis: {\n show: true,\n position: [0, '50%'],\n color: '#fff',\n ellipsis: true,\n verticalAlign: 'middle'\n }\n },\n itemStyle: {\n normal: {\n color: null,\n // Can be 'none' if not necessary.\n colorAlpha: null,\n // Can be 'none' if not necessary.\n colorSaturation: null,\n // Can be 'none' if not necessary.\n borderWidth: 0,\n gapWidth: 0,\n borderColor: '#fff',\n borderColorSaturation: null // If specified, borderColor will be ineffective, and the\n // border color is evaluated by color of current node and\n // borderColorSaturation.\n\n },\n emphasis: {}\n },\n visualDimension: 0,\n // Can be 0, 1, 2, 3.\n visualMin: null,\n visualMax: null,\n color: [],\n // + treemapSeries.color should not be modified. Please only modified\n // level[n].color (if necessary).\n // + Specify color list of each level. level[0].color would be global\n // color list if not specified. (see method `setDefault`).\n // + But set as a empty array to forbid fetch color from global palette\n // when using nodeModel.get('color'), otherwise nodes on deep level\n // will always has color palette set and are not able to inherit color\n // from parent node.\n // + TreemapSeries.color can not be set as 'none', otherwise effect\n // legend color fetching (see seriesColor.js).\n colorAlpha: null,\n // Array. Specify color alpha range of each level, like [0.2, 0.8]\n colorSaturation: null,\n // Array. Specify color saturation of each level, like [0.2, 0.5]\n colorMappingBy: 'index',\n // 'value' or 'index' or 'id'.\n visibleMin: 10,\n // If area less than this threshold (unit: pixel^2), node will not\n // be rendered. Only works when sort is 'asc' or 'desc'.\n childrenVisibleMin: null,\n // If area of a node less than this threshold (unit: pixel^2),\n // grandchildren will not show.\n // Why grandchildren? If not grandchildren but children,\n // some siblings show children and some not,\n // the appearance may be mess and not consistent,\n levels: [] // Each item: {\n // visibleMin, itemStyle, visualDimension, label\n // }\n // data: {\n // value: [],\n // children: [],\n // link: 'http://xxx.xxx.xxx',\n // target: 'blank' or 'self'\n // }\n\n },\n\n /**\n * @override\n */\n getInitialData: function (option, ecModel) {\n // Create a virtual root.\n var root = {\n name: option.name,\n children: option.data\n };\n completeTreeValue(root);\n var levels = option.levels || [];\n levels = option.levels = setDefault(levels, ecModel);\n var treeOption = {};\n treeOption.levels = levels; // Make sure always a new tree is created when setOption,\n // in TreemapView, we check whether oldTree === newTree\n // to choose mappings approach among old shapes and new shapes.\n\n return Tree.createTree(root, this, treeOption).data;\n },\n optionUpdated: function () {\n this.resetViewRoot();\n },\n\n /**\n * @override\n * @param {number} dataIndex\n * @param {boolean} [mutipleSeries=false]\n */\n formatTooltip: function (dataIndex) {\n var data = this.getData();\n var value = this.getRawValue(dataIndex);\n var formattedValue = zrUtil.isArray(value) ? addCommas(value[0]) : addCommas(value);\n var name = data.getName(dataIndex);\n return encodeHTML(name + ': ' + formattedValue);\n },\n\n /**\n * Add tree path to tooltip param\n *\n * @override\n * @param {number} dataIndex\n * @return {Object}\n */\n getDataParams: function (dataIndex) {\n var params = SeriesModel.prototype.getDataParams.apply(this, arguments);\n var node = this.getData().tree.getNodeByDataIndex(dataIndex);\n params.treePathInfo = wrapTreePathInfo(node, this);\n return params;\n },\n\n /**\n * @public\n * @param {Object} layoutInfo {\n * x: containerGroup x\n * y: containerGroup y\n * width: containerGroup width\n * height: containerGroup height\n * }\n */\n setLayoutInfo: function (layoutInfo) {\n /**\n * @readOnly\n * @type {Object}\n */\n this.layoutInfo = this.layoutInfo || {};\n zrUtil.extend(this.layoutInfo, layoutInfo);\n },\n\n /**\n * @param {string} id\n * @return {number} index\n */\n mapIdToIndex: function (id) {\n // A feature is implemented:\n // index is monotone increasing with the sequence of\n // input id at the first time.\n // This feature can make sure that each data item and its\n // mapped color have the same index between data list and\n // color list at the beginning, which is useful for user\n // to adjust data-color mapping.\n\n /**\n * @private\n * @type {Object}\n */\n var idIndexMap = this._idIndexMap;\n\n if (!idIndexMap) {\n idIndexMap = this._idIndexMap = zrUtil.createHashMap();\n /**\n * @private\n * @type {number}\n */\n\n this._idIndexMapCount = 0;\n }\n\n var index = idIndexMap.get(id);\n\n if (index == null) {\n idIndexMap.set(id, index = this._idIndexMapCount++);\n }\n\n return index;\n },\n getViewRoot: function () {\n return this._viewRoot;\n },\n\n /**\n * @param {module:echarts/data/Tree~Node} [viewRoot]\n */\n resetViewRoot: function (viewRoot) {\n viewRoot ? this._viewRoot = viewRoot : viewRoot = this._viewRoot;\n var root = this.getData().tree.root;\n\n if (!viewRoot || viewRoot !== root && !root.contains(viewRoot)) {\n this._viewRoot = root;\n }\n }\n});\n/**\n * @param {Object} dataNode\n */\n\n\nfunction completeTreeValue(dataNode) {\n // Postorder travel tree.\n // If value of none-leaf node is not set,\n // calculate it by suming up the value of all children.\n var sum = 0;\n zrUtil.each(dataNode.children, function (child) {\n completeTreeValue(child);\n var childValue = child.value;\n zrUtil.isArray(childValue) && (childValue = childValue[0]);\n sum += childValue;\n });\n var thisValue = dataNode.value;\n\n if (zrUtil.isArray(thisValue)) {\n thisValue = thisValue[0];\n }\n\n if (thisValue == null || isNaN(thisValue)) {\n thisValue = sum;\n } // Value should not less than 0.\n\n\n if (thisValue < 0) {\n thisValue = 0;\n }\n\n zrUtil.isArray(dataNode.value) ? dataNode.value[0] = thisValue : dataNode.value = thisValue;\n}\n/**\n * set default to level configuration\n */\n\n\nfunction setDefault(levels, ecModel) {\n var globalColorList = ecModel.get('color');\n\n if (!globalColorList) {\n return;\n }\n\n levels = levels || [];\n var hasColorDefine;\n zrUtil.each(levels, function (levelDefine) {\n var model = new Model(levelDefine);\n var modelColor = model.get('color');\n\n if (model.get('itemStyle.normal.color') || modelColor && modelColor !== 'none') {\n hasColorDefine = true;\n }\n });\n\n if (!hasColorDefine) {\n var level0 = levels[0] || (levels[0] = {});\n level0.color = globalColorList.slice();\n }\n\n return levels;\n}\n\nmodule.exports = _default;","var ComponentView = require(\"../../view/Component\");\n\nvar _default = ComponentView.extend({\n type: 'timeline'\n});\n\nmodule.exports = _default;","require(\"../coord/calendar/Calendar\");\n\nrequire(\"../coord/calendar/CalendarModel\");\n\nrequire(\"./calendar/CalendarView\");","var zrUtil = require(\"zrender/lib/core/util\");\n\nfunction _default(option) {\n // Save geoCoord\n var mapSeries = [];\n zrUtil.each(option.series, function (seriesOpt) {\n if (seriesOpt && seriesOpt.type === 'map') {\n mapSeries.push(seriesOpt);\n seriesOpt.map = seriesOpt.map || seriesOpt.mapType; // Put x, y, width, height, x2, y2 in the top level\n\n zrUtil.defaults(seriesOpt, seriesOpt.mapLocation);\n }\n });\n}\n\nmodule.exports = _default;","var numberUtil = require(\"../util/number\");\n\n/**\n * For testable.\n */\nvar roundNumber = numberUtil.round;\n/**\n * @param {Array.} extent Both extent[0] and extent[1] should be valid number.\n * Should be extent[0] < extent[1].\n * @param {number} splitNumber splitNumber should be >= 1.\n * @param {number} [minInterval]\n * @param {number} [maxInterval]\n * @return {Object} {interval, intervalPrecision, niceTickExtent}\n */\n\nfunction intervalScaleNiceTicks(extent, splitNumber, minInterval, maxInterval) {\n var result = {};\n var span = extent[1] - extent[0];\n var interval = result.interval = numberUtil.nice(span / splitNumber, true);\n\n if (minInterval != null && interval < minInterval) {\n interval = result.interval = minInterval;\n }\n\n if (maxInterval != null && interval > maxInterval) {\n interval = result.interval = maxInterval;\n } // Tow more digital for tick.\n\n\n var precision = result.intervalPrecision = getIntervalPrecision(interval); // Niced extent inside original extent\n\n var niceTickExtent = result.niceTickExtent = [roundNumber(Math.ceil(extent[0] / interval) * interval, precision), roundNumber(Math.floor(extent[1] / interval) * interval, precision)];\n fixExtent(niceTickExtent, extent);\n return result;\n}\n/**\n * @param {number} interval\n * @return {number} interval precision\n */\n\n\nfunction getIntervalPrecision(interval) {\n // Tow more digital for tick.\n return numberUtil.getPrecisionSafe(interval) + 2;\n}\n\nfunction clamp(niceTickExtent, idx, extent) {\n niceTickExtent[idx] = Math.max(Math.min(niceTickExtent[idx], extent[1]), extent[0]);\n} // In some cases (e.g., splitNumber is 1), niceTickExtent may be out of extent.\n\n\nfunction fixExtent(niceTickExtent, extent) {\n !isFinite(niceTickExtent[0]) && (niceTickExtent[0] = extent[0]);\n !isFinite(niceTickExtent[1]) && (niceTickExtent[1] = extent[1]);\n clamp(niceTickExtent, 0, extent);\n clamp(niceTickExtent, 1, extent);\n\n if (niceTickExtent[0] > niceTickExtent[1]) {\n niceTickExtent[0] = niceTickExtent[1];\n }\n}\n\nfunction intervalScaleGetTicks(interval, extent, niceTickExtent, intervalPrecision) {\n var ticks = []; // If interval is 0, return [];\n\n if (!interval) {\n return ticks;\n } // Consider this case: using dataZoom toolbox, zoom and zoom.\n\n\n var safeLimit = 10000;\n\n if (extent[0] < niceTickExtent[0]) {\n ticks.push(extent[0]);\n }\n\n var tick = niceTickExtent[0];\n\n while (tick <= niceTickExtent[1]) {\n ticks.push(tick); // Avoid rounding error\n\n tick = roundNumber(tick + interval, intervalPrecision);\n\n if (tick === ticks[ticks.length - 1]) {\n // Consider out of safe float point, e.g.,\n // -3711126.9907707 + 2e-10 === -3711126.9907707\n break;\n }\n\n if (ticks.length > safeLimit) {\n return [];\n }\n } // Consider this case: the last item of ticks is smaller\n // than niceTickExtent[1] and niceTickExtent[1] === extent[1].\n\n\n if (extent[1] > (ticks.length ? ticks[ticks.length - 1] : niceTickExtent[1])) {\n ticks.push(extent[1]);\n }\n\n return ticks;\n}\n\nexports.intervalScaleNiceTicks = intervalScaleNiceTicks;\nexports.getIntervalPrecision = getIntervalPrecision;\nexports.fixExtent = fixExtent;\nexports.intervalScaleGetTicks = intervalScaleGetTicks;","var echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar barLayoutGrid = require(\"../layout/barGrid\");\n\nrequire(\"../coord/cartesian/Grid\");\n\nrequire(\"./bar/BarSeries\");\n\nrequire(\"./bar/BarView\");\n\nrequire(\"../component/gridSimple\");\n\n// In case developer forget to include grid component\necharts.registerLayout(zrUtil.curry(barLayoutGrid, 'bar')); // Visual coding for legend\n\necharts.registerVisual(function (ecModel) {\n ecModel.eachSeriesByType('bar', function (seriesModel) {\n var data = seriesModel.getData();\n data.setVisual('legendSymbol', 'roundRect');\n });\n});","var vec2 = require(\"zrender/lib/core/vector\");\n\nfunction circularLayout(seriesModel) {\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys && coordSys.type !== 'view') {\n return;\n }\n\n var rect = coordSys.getBoundingRect();\n var nodeData = seriesModel.getData();\n var graph = nodeData.graph;\n var angle = 0;\n var sum = nodeData.getSum('value');\n var unitAngle = Math.PI * 2 / (sum || nodeData.count());\n var cx = rect.width / 2 + rect.x;\n var cy = rect.height / 2 + rect.y;\n var r = Math.min(rect.width, rect.height) / 2;\n graph.eachNode(function (node) {\n var value = node.getValue('value');\n angle += unitAngle * (sum ? value : 1) / 2;\n node.setLayout([r * Math.cos(angle) + cx, r * Math.sin(angle) + cy]);\n angle += unitAngle * (sum ? value : 1) / 2;\n });\n nodeData.setLayout({\n cx: cx,\n cy: cy\n });\n graph.eachEdge(function (edge) {\n var curveness = edge.getModel().get('lineStyle.normal.curveness') || 0;\n var p1 = vec2.clone(edge.node1.getLayout());\n var p2 = vec2.clone(edge.node2.getLayout());\n var cp1;\n var x12 = (p1[0] + p2[0]) / 2;\n var y12 = (p1[1] + p2[1]) / 2;\n\n if (+curveness) {\n curveness *= 3;\n cp1 = [cx * curveness + x12 * (1 - curveness), cy * curveness + y12 * (1 - curveness)];\n }\n\n edge.setLayout([p1, p2, cp1]);\n });\n}\n\nexports.circularLayout = circularLayout;","var echarts = require(\"../echarts\");\n\nrequire(\"./marker/MarkLineModel\");\n\nrequire(\"./marker/MarkLineView\");\n\necharts.registerPreprocessor(function (opt) {\n // Make sure markLine component is enabled\n opt.markLine = opt.markLine || {};\n});","/**\n * 线段包含判断\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} lineWidth\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n */\nfunction containStroke(x0, y0, x1, y1, lineWidth, x, y) {\n if (lineWidth === 0) {\n return false;\n }\n\n var _l = lineWidth;\n var _a = 0;\n var _b = x0; // Quick reject\n\n if (y > y0 + _l && y > y1 + _l || y < y0 - _l && y < y1 - _l || x > x0 + _l && x > x1 + _l || x < x0 - _l && x < x1 - _l) {\n return false;\n }\n\n if (x0 !== x1) {\n _a = (y0 - y1) / (x0 - x1);\n _b = (x0 * y1 - x1 * y0) / (x0 - x1);\n } else {\n return Math.abs(x - x0) <= _l / 2;\n }\n\n var tmp = _a * x - y + _b;\n\n var _s = tmp * tmp / (_a * _a + 1);\n\n return _s <= _l / 2 * _l / 2;\n}\n\nexports.containStroke = containStroke;","var echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar SymbolDraw = require(\"../helper/SymbolDraw\");\n\nvar LineDraw = require(\"../helper/LineDraw\");\n\nvar RoamController = require(\"../../component/helper/RoamController\");\n\nvar roamHelper = require(\"../../component/helper/roamHelper\");\n\nvar _cursorHelper = require(\"../../component/helper/cursorHelper\");\n\nvar onIrrelevantElement = _cursorHelper.onIrrelevantElement;\n\nvar graphic = require(\"../../util/graphic\");\n\nvar adjustEdge = require(\"./adjustEdge\");\n\nvar nodeOpacityPath = ['itemStyle', 'normal', 'opacity'];\nvar lineOpacityPath = ['lineStyle', 'normal', 'opacity'];\n\nfunction getItemOpacity(item, opacityPath) {\n return item.getVisual('opacity') || item.getModel().get(opacityPath);\n}\n\nfunction fadeOutItem(item, opacityPath, opacityRatio) {\n var el = item.getGraphicEl();\n var opacity = getItemOpacity(item, opacityPath);\n\n if (opacityRatio != null) {\n opacity == null && (opacity = 1);\n opacity *= opacityRatio;\n }\n\n el.downplay && el.downplay();\n el.traverse(function (child) {\n if (child.type !== 'group') {\n child.setStyle('opacity', opacity);\n }\n });\n}\n\nfunction fadeInItem(item, opacityPath) {\n var opacity = getItemOpacity(item, opacityPath);\n var el = item.getGraphicEl();\n el.highlight && el.highlight();\n el.traverse(function (child) {\n if (child.type !== 'group') {\n child.setStyle('opacity', opacity);\n }\n });\n}\n\nvar _default = echarts.extendChartView({\n type: 'graph',\n init: function (ecModel, api) {\n var symbolDraw = new SymbolDraw();\n var lineDraw = new LineDraw();\n var group = this.group;\n this._controller = new RoamController(api.getZr());\n this._controllerHost = {\n target: group\n };\n group.add(symbolDraw.group);\n group.add(lineDraw.group);\n this._symbolDraw = symbolDraw;\n this._lineDraw = lineDraw;\n this._firstRender = true;\n },\n render: function (seriesModel, ecModel, api) {\n var coordSys = seriesModel.coordinateSystem;\n this._model = seriesModel;\n this._nodeScaleRatio = seriesModel.get('nodeScaleRatio');\n var symbolDraw = this._symbolDraw;\n var lineDraw = this._lineDraw;\n var group = this.group;\n\n if (coordSys.type === 'view') {\n var groupNewProp = {\n position: coordSys.position,\n scale: coordSys.scale\n };\n\n if (this._firstRender) {\n group.attr(groupNewProp);\n } else {\n graphic.updateProps(group, groupNewProp, seriesModel);\n }\n } // Fix edge contact point with node\n\n\n adjustEdge(seriesModel.getGraph(), this._getNodeGlobalScale(seriesModel));\n var data = seriesModel.getData();\n symbolDraw.updateData(data);\n var edgeData = seriesModel.getEdgeData();\n lineDraw.updateData(edgeData);\n\n this._updateNodeAndLinkScale();\n\n this._updateController(seriesModel, ecModel, api);\n\n clearTimeout(this._layoutTimeout);\n var forceLayout = seriesModel.forceLayout;\n var layoutAnimation = seriesModel.get('force.layoutAnimation');\n\n if (forceLayout) {\n this._startForceLayoutIteration(forceLayout, layoutAnimation);\n }\n\n data.eachItemGraphicEl(function (el, idx) {\n var itemModel = data.getItemModel(idx); // Update draggable\n\n el.off('drag').off('dragend');\n var draggable = data.getItemModel(idx).get('draggable');\n\n if (draggable) {\n el.on('drag', function () {\n if (forceLayout) {\n forceLayout.warmUp();\n !this._layouting && this._startForceLayoutIteration(forceLayout, layoutAnimation);\n forceLayout.setFixed(idx); // Write position back to layout\n\n data.setItemLayout(idx, el.position);\n }\n }, this).on('dragend', function () {\n if (forceLayout) {\n forceLayout.setUnfixed(idx);\n }\n }, this);\n }\n\n el.setDraggable(draggable && forceLayout);\n el.off('mouseover', el.__focusNodeAdjacency);\n el.off('mouseout', el.__unfocusNodeAdjacency);\n\n if (itemModel.get('focusNodeAdjacency')) {\n el.on('mouseover', el.__focusNodeAdjacency = function () {\n api.dispatchAction({\n type: 'focusNodeAdjacency',\n seriesId: seriesModel.id,\n dataIndex: el.dataIndex\n });\n });\n el.on('mouseout', el.__unfocusNodeAdjacency = function () {\n api.dispatchAction({\n type: 'unfocusNodeAdjacency',\n seriesId: seriesModel.id\n });\n });\n }\n }, this);\n data.graph.eachEdge(function (edge) {\n var el = edge.getGraphicEl();\n el.off('mouseover', el.__focusNodeAdjacency);\n el.off('mouseout', el.__unfocusNodeAdjacency);\n\n if (edge.getModel().get('focusNodeAdjacency')) {\n el.on('mouseover', el.__focusNodeAdjacency = function () {\n api.dispatchAction({\n type: 'focusNodeAdjacency',\n seriesId: seriesModel.id,\n edgeDataIndex: edge.dataIndex\n });\n });\n el.on('mouseout', el.__unfocusNodeAdjacency = function () {\n api.dispatchAction({\n type: 'unfocusNodeAdjacency',\n seriesId: seriesModel.id\n });\n });\n }\n });\n var circularRotateLabel = seriesModel.get('layout') === 'circular' && seriesModel.get('circular.rotateLabel');\n var cx = data.getLayout('cx');\n var cy = data.getLayout('cy');\n data.eachItemGraphicEl(function (el, idx) {\n var symbolPath = el.getSymbolPath();\n\n if (circularRotateLabel) {\n var pos = data.getItemLayout(idx);\n var rad = Math.atan2(pos[1] - cy, pos[0] - cx);\n\n if (rad < 0) {\n rad = Math.PI * 2 + rad;\n }\n\n var isLeft = pos[0] < cx;\n\n if (isLeft) {\n rad = rad - Math.PI;\n }\n\n var textPosition = isLeft ? 'left' : 'right';\n symbolPath.setStyle({\n textRotation: -rad,\n textPosition: textPosition,\n textOrigin: 'center'\n });\n symbolPath.hoverStyle && (symbolPath.hoverStyle.textPosition = textPosition);\n } else {\n symbolPath.setStyle({\n textRotation: 0\n });\n }\n });\n this._firstRender = false;\n },\n dispose: function () {\n this._controller && this._controller.dispose();\n this._controllerHost = {};\n },\n focusNodeAdjacency: function (seriesModel, ecModel, api, payload) {\n var data = this._model.getData();\n\n var graph = data.graph;\n var dataIndex = payload.dataIndex;\n var edgeDataIndex = payload.edgeDataIndex;\n var node = graph.getNodeByIndex(dataIndex);\n var edge = graph.getEdgeByIndex(edgeDataIndex);\n\n if (!node && !edge) {\n return;\n }\n\n graph.eachNode(function (node) {\n fadeOutItem(node, nodeOpacityPath, 0.1);\n });\n graph.eachEdge(function (edge) {\n fadeOutItem(edge, lineOpacityPath, 0.1);\n });\n\n if (node) {\n fadeInItem(node, nodeOpacityPath);\n zrUtil.each(node.edges, function (adjacentEdge) {\n if (adjacentEdge.dataIndex < 0) {\n return;\n }\n\n fadeInItem(adjacentEdge, lineOpacityPath);\n fadeInItem(adjacentEdge.node1, nodeOpacityPath);\n fadeInItem(adjacentEdge.node2, nodeOpacityPath);\n });\n }\n\n if (edge) {\n fadeInItem(edge, lineOpacityPath);\n fadeInItem(edge.node1, nodeOpacityPath);\n fadeInItem(edge.node2, nodeOpacityPath);\n }\n },\n unfocusNodeAdjacency: function (seriesModel, ecModel, api, payload) {\n var graph = this._model.getData().graph;\n\n graph.eachNode(function (node) {\n fadeOutItem(node, nodeOpacityPath);\n });\n graph.eachEdge(function (edge) {\n fadeOutItem(edge, lineOpacityPath);\n });\n },\n _startForceLayoutIteration: function (forceLayout, layoutAnimation) {\n var self = this;\n\n (function step() {\n forceLayout.step(function (stopped) {\n self.updateLayout(self._model);\n (self._layouting = !stopped) && (layoutAnimation ? self._layoutTimeout = setTimeout(step, 16) : step());\n });\n })();\n },\n _updateController: function (seriesModel, ecModel, api) {\n var controller = this._controller;\n var controllerHost = this._controllerHost;\n var group = this.group;\n controller.setPointerChecker(function (e, x, y) {\n var rect = group.getBoundingRect();\n rect.applyTransform(group.transform);\n return rect.contain(x, y) && !onIrrelevantElement(e, api, seriesModel);\n });\n\n if (seriesModel.coordinateSystem.type !== 'view') {\n controller.disable();\n return;\n }\n\n controller.enable(seriesModel.get('roam'));\n controllerHost.zoomLimit = seriesModel.get('scaleLimit');\n controllerHost.zoom = seriesModel.coordinateSystem.getZoom();\n controller.off('pan').off('zoom').on('pan', function (dx, dy) {\n roamHelper.updateViewOnPan(controllerHost, dx, dy);\n api.dispatchAction({\n seriesId: seriesModel.id,\n type: 'graphRoam',\n dx: dx,\n dy: dy\n });\n }).on('zoom', function (zoom, mouseX, mouseY) {\n roamHelper.updateViewOnZoom(controllerHost, zoom, mouseX, mouseY);\n api.dispatchAction({\n seriesId: seriesModel.id,\n type: 'graphRoam',\n zoom: zoom,\n originX: mouseX,\n originY: mouseY\n });\n\n this._updateNodeAndLinkScale();\n\n adjustEdge(seriesModel.getGraph(), this._getNodeGlobalScale(seriesModel));\n\n this._lineDraw.updateLayout();\n }, this);\n },\n _updateNodeAndLinkScale: function () {\n var seriesModel = this._model;\n var data = seriesModel.getData();\n\n var nodeScale = this._getNodeGlobalScale(seriesModel);\n\n var invScale = [nodeScale, nodeScale];\n data.eachItemGraphicEl(function (el, idx) {\n el.attr('scale', invScale);\n });\n },\n _getNodeGlobalScale: function (seriesModel) {\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys.type !== 'view') {\n return 1;\n }\n\n var nodeScaleRatio = this._nodeScaleRatio;\n var groupScale = coordSys.scale;\n var groupZoom = groupScale && groupScale[0] || 1; // Scale node when zoom changes\n\n var roamZoom = coordSys.getZoom();\n var nodeScale = (roamZoom - 1) * nodeScaleRatio + 1;\n return nodeScale / groupZoom;\n },\n updateLayout: function (seriesModel) {\n adjustEdge(seriesModel.getGraph(), this._getNodeGlobalScale(seriesModel));\n\n this._symbolDraw.updateLayout();\n\n this._lineDraw.updateLayout();\n },\n remove: function (ecModel, api) {\n this._symbolDraw && this._symbolDraw.remove();\n this._lineDraw && this._lineDraw.remove();\n }\n});\n\nmodule.exports = _default;","var vec2 = require(\"./vector\");\n\nvar matrix = require(\"./matrix\");\n\n/**\n * @module echarts/core/BoundingRect\n */\nvar v2ApplyTransform = vec2.applyTransform;\nvar mathMin = Math.min;\nvar mathMax = Math.max;\n/**\n * @alias module:echarts/core/BoundingRect\n */\n\nfunction BoundingRect(x, y, width, height) {\n if (width < 0) {\n x = x + width;\n width = -width;\n }\n\n if (height < 0) {\n y = y + height;\n height = -height;\n }\n /**\n * @type {number}\n */\n\n\n this.x = x;\n /**\n * @type {number}\n */\n\n this.y = y;\n /**\n * @type {number}\n */\n\n this.width = width;\n /**\n * @type {number}\n */\n\n this.height = height;\n}\n\nBoundingRect.prototype = {\n constructor: BoundingRect,\n\n /**\n * @param {module:echarts/core/BoundingRect} other\n */\n union: function (other) {\n var x = mathMin(other.x, this.x);\n var y = mathMin(other.y, this.y);\n this.width = mathMax(other.x + other.width, this.x + this.width) - x;\n this.height = mathMax(other.y + other.height, this.y + this.height) - y;\n this.x = x;\n this.y = y;\n },\n\n /**\n * @param {Array.} m\n * @methods\n */\n applyTransform: function () {\n var lt = [];\n var rb = [];\n var lb = [];\n var rt = [];\n return function (m) {\n // In case usage like this\n // el.getBoundingRect().applyTransform(el.transform)\n // And element has no transform\n if (!m) {\n return;\n }\n\n lt[0] = lb[0] = this.x;\n lt[1] = rt[1] = this.y;\n rb[0] = rt[0] = this.x + this.width;\n rb[1] = lb[1] = this.y + this.height;\n v2ApplyTransform(lt, lt, m);\n v2ApplyTransform(rb, rb, m);\n v2ApplyTransform(lb, lb, m);\n v2ApplyTransform(rt, rt, m);\n this.x = mathMin(lt[0], rb[0], lb[0], rt[0]);\n this.y = mathMin(lt[1], rb[1], lb[1], rt[1]);\n var maxX = mathMax(lt[0], rb[0], lb[0], rt[0]);\n var maxY = mathMax(lt[1], rb[1], lb[1], rt[1]);\n this.width = maxX - this.x;\n this.height = maxY - this.y;\n };\n }(),\n\n /**\n * Calculate matrix of transforming from self to target rect\n * @param {module:zrender/core/BoundingRect} b\n * @return {Array.}\n */\n calculateTransform: function (b) {\n var a = this;\n var sx = b.width / a.width;\n var sy = b.height / a.height;\n var m = matrix.create(); // 矩阵右乘\n\n matrix.translate(m, m, [-a.x, -a.y]);\n matrix.scale(m, m, [sx, sy]);\n matrix.translate(m, m, [b.x, b.y]);\n return m;\n },\n\n /**\n * @param {(module:echarts/core/BoundingRect|Object)} b\n * @return {boolean}\n */\n intersect: function (b) {\n if (!b) {\n return false;\n }\n\n if (!(b instanceof BoundingRect)) {\n // Normalize negative width/height.\n b = BoundingRect.create(b);\n }\n\n var a = this;\n var ax0 = a.x;\n var ax1 = a.x + a.width;\n var ay0 = a.y;\n var ay1 = a.y + a.height;\n var bx0 = b.x;\n var bx1 = b.x + b.width;\n var by0 = b.y;\n var by1 = b.y + b.height;\n return !(ax1 < bx0 || bx1 < ax0 || ay1 < by0 || by1 < ay0);\n },\n contain: function (x, y) {\n var rect = this;\n return x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height;\n },\n\n /**\n * @return {module:echarts/core/BoundingRect}\n */\n clone: function () {\n return new BoundingRect(this.x, this.y, this.width, this.height);\n },\n\n /**\n * Copy from another rect\n */\n copy: function (other) {\n this.x = other.x;\n this.y = other.y;\n this.width = other.width;\n this.height = other.height;\n },\n plain: function () {\n return {\n x: this.x,\n y: this.y,\n width: this.width,\n height: this.height\n };\n }\n};\n/**\n * @param {Object|module:zrender/core/BoundingRect} rect\n * @param {number} rect.x\n * @param {number} rect.y\n * @param {number} rect.width\n * @param {number} rect.height\n * @return {module:zrender/core/BoundingRect}\n */\n\nBoundingRect.create = function (rect) {\n return new BoundingRect(rect.x, rect.y, rect.width, rect.height);\n};\n\nvar _default = BoundingRect;\nmodule.exports = _default;","var _default = typeof window !== 'undefined' && (window.requestAnimationFrame && window.requestAnimationFrame.bind(window) || // https://github.com/ecomfe/zrender/issues/189#issuecomment-224919809\nwindow.msRequestAnimationFrame && window.msRequestAnimationFrame.bind(window) || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame) || function (func) {\n setTimeout(func, 16);\n};\n\nmodule.exports = _default;","// Pick color from palette for each data item.\n// Applicable for charts that require applying color palette\n// in data level (like pie, funnel, chord).\nfunction _default(seriesType, ecModel) {\n // Pie and funnel may use diferrent scope\n var paletteScope = {};\n ecModel.eachRawSeriesByType(seriesType, function (seriesModel) {\n var dataAll = seriesModel.getRawData();\n var idxMap = {};\n\n if (!ecModel.isSeriesFiltered(seriesModel)) {\n var data = seriesModel.getData();\n data.each(function (idx) {\n var rawIdx = data.getRawIndex(idx);\n idxMap[rawIdx] = idx;\n });\n dataAll.each(function (rawIdx) {\n var filteredIdx = idxMap[rawIdx]; // If series.itemStyle.normal.color is a function. itemVisual may be encoded\n\n var singleDataColor = filteredIdx != null && data.getItemVisual(filteredIdx, 'color', true);\n\n if (!singleDataColor) {\n // FIXME Performance\n var itemModel = dataAll.getItemModel(rawIdx);\n var color = itemModel.get('itemStyle.normal.color') || seriesModel.getColorFromPalette(dataAll.getName(rawIdx), paletteScope); // Legend may use the visual info in data before processed\n\n dataAll.setItemVisual(rawIdx, 'color', color); // Data is not filtered\n\n if (filteredIdx != null) {\n data.setItemVisual(filteredIdx, 'color', color);\n }\n } else {\n // Set data all color for legend\n dataAll.setItemVisual(rawIdx, 'color', singleDataColor);\n }\n });\n }\n });\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../util/graphic\");\n\nvar PI = Math.PI;\n/**\n * @param {module:echarts/ExtensionAPI} api\n * @param {Object} [opts]\n * @param {string} [opts.text]\n * @param {string} [opts.color]\n * @param {string} [opts.textColor]\n * @return {module:zrender/Element}\n */\n\nfunction _default(api, opts) {\n opts = opts || {};\n zrUtil.defaults(opts, {\n text: 'loading',\n color: '#c23531',\n textColor: '#000',\n maskColor: 'rgba(255, 255, 255, 0.8)',\n zlevel: 0\n });\n var mask = new graphic.Rect({\n style: {\n fill: opts.maskColor\n },\n zlevel: opts.zlevel,\n z: 10000\n });\n var arc = new graphic.Arc({\n shape: {\n startAngle: -PI / 2,\n endAngle: -PI / 2 + 0.1,\n r: 10\n },\n style: {\n stroke: opts.color,\n lineCap: 'round',\n lineWidth: 5\n },\n zlevel: opts.zlevel,\n z: 10001\n });\n var labelRect = new graphic.Rect({\n style: {\n fill: 'none',\n text: opts.text,\n textPosition: 'right',\n textDistance: 10,\n textFill: opts.textColor\n },\n zlevel: opts.zlevel,\n z: 10001\n });\n arc.animateShape(true).when(1000, {\n endAngle: PI * 3 / 2\n }).start('circularInOut');\n arc.animateShape(true).when(1000, {\n startAngle: PI * 3 / 2\n }).delay(300).start('circularInOut');\n var group = new graphic.Group();\n group.add(arc);\n group.add(labelRect);\n group.add(mask); // Inject resize\n\n group.resize = function () {\n var cx = api.getWidth() / 2;\n var cy = api.getHeight() / 2;\n arc.setShape({\n cx: cx,\n cy: cy\n });\n var r = arc.shape.r;\n labelRect.setShape({\n x: cx - r,\n y: cy - r,\n width: r * 2,\n height: r * 2\n });\n mask.setShape({\n x: 0,\n y: 0,\n width: api.getWidth(),\n height: api.getHeight()\n });\n };\n\n group.resize();\n return group;\n}\n\nmodule.exports = _default;","var makeStyleMapper = require(\"./makeStyleMapper\");\n\nvar getAreaStyle = makeStyleMapper([['fill', 'color'], ['shadowBlur'], ['shadowOffsetX'], ['shadowOffsetY'], ['opacity'], ['shadowColor']]);\nvar _default = {\n getAreaStyle: function (excludes, includes) {\n return getAreaStyle(this, excludes, includes);\n }\n};\nmodule.exports = _default;","var _vector = require(\"../../core/vector\");\n\nvar v2Min = _vector.min;\nvar v2Max = _vector.max;\nvar v2Scale = _vector.scale;\nvar v2Distance = _vector.distance;\nvar v2Add = _vector.add;\nvar v2Clone = _vector.clone;\nvar v2Sub = _vector.sub;\n\n/**\n * 贝塞尔平滑曲线\n * @module zrender/shape/util/smoothBezier\n * @author pissang (https://www.github.com/pissang)\n * Kener (@Kener-林峰, kener.linfeng@gmail.com)\n * errorrik (errorrik@gmail.com)\n */\n\n/**\n * 贝塞尔平滑曲线\n * @alias module:zrender/shape/util/smoothBezier\n * @param {Array} points 线段顶点数组\n * @param {number} smooth 平滑等级, 0-1\n * @param {boolean} isLoop\n * @param {Array} constraint 将计算出来的控制点约束在一个包围盒内\n * 比如 [[0, 0], [100, 100]], 这个包围盒会与\n * 整个折线的包围盒做一个并集用来约束控制点。\n * @param {Array} 计算出来的控制点数组\n */\nfunction _default(points, smooth, isLoop, constraint) {\n var cps = [];\n var v = [];\n var v1 = [];\n var v2 = [];\n var prevPoint;\n var nextPoint;\n var min, max;\n\n if (constraint) {\n min = [Infinity, Infinity];\n max = [-Infinity, -Infinity];\n\n for (var i = 0, len = points.length; i < len; i++) {\n v2Min(min, min, points[i]);\n v2Max(max, max, points[i]);\n } // 与指定的包围盒做并集\n\n\n v2Min(min, min, constraint[0]);\n v2Max(max, max, constraint[1]);\n }\n\n for (var i = 0, len = points.length; i < len; i++) {\n var point = points[i];\n\n if (isLoop) {\n prevPoint = points[i ? i - 1 : len - 1];\n nextPoint = points[(i + 1) % len];\n } else {\n if (i === 0 || i === len - 1) {\n cps.push(v2Clone(points[i]));\n continue;\n } else {\n prevPoint = points[i - 1];\n nextPoint = points[i + 1];\n }\n }\n\n v2Sub(v, nextPoint, prevPoint); // use degree to scale the handle length\n\n v2Scale(v, v, smooth);\n var d0 = v2Distance(point, prevPoint);\n var d1 = v2Distance(point, nextPoint);\n var sum = d0 + d1;\n\n if (sum !== 0) {\n d0 /= sum;\n d1 /= sum;\n }\n\n v2Scale(v1, v, -d0);\n v2Scale(v2, v, d1);\n var cp0 = v2Add([], point, v1);\n var cp1 = v2Add([], point, v2);\n\n if (constraint) {\n v2Max(cp0, cp0, min);\n v2Min(cp0, cp0, max);\n v2Max(cp1, cp1, min);\n v2Min(cp1, cp1, max);\n }\n\n cps.push(cp0);\n cps.push(cp1);\n }\n\n if (isLoop) {\n cps.push(cps.shift());\n }\n\n return cps;\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nvar _number = require(\"../../util/number\");\n\nvar parsePercent = _number.parsePercent;\nvar MAX_SAFE_INTEGER = _number.MAX_SAFE_INTEGER;\n\nvar layout = require(\"../../util/layout\");\n\nvar helper = require(\"./helper\");\n\nvar mathMax = Math.max;\nvar mathMin = Math.min;\nvar retrieveValue = zrUtil.retrieve;\nvar each = zrUtil.each;\nvar PATH_BORDER_WIDTH = ['itemStyle', 'normal', 'borderWidth'];\nvar PATH_GAP_WIDTH = ['itemStyle', 'normal', 'gapWidth'];\nvar PATH_UPPER_LABEL_SHOW = ['upperLabel', 'normal', 'show'];\nvar PATH_UPPER_LABEL_HEIGHT = ['upperLabel', 'normal', 'height'];\n/**\n * @public\n */\n\nfunction _default(ecModel, api, payload) {\n // Layout result in each node:\n // {x, y, width, height, area, borderWidth}\n var condition = {\n mainType: 'series',\n subType: 'treemap',\n query: payload\n };\n ecModel.eachComponent(condition, function (seriesModel) {\n var ecWidth = api.getWidth();\n var ecHeight = api.getHeight();\n var seriesOption = seriesModel.option;\n var layoutInfo = layout.getLayoutRect(seriesModel.getBoxLayoutParams(), {\n width: api.getWidth(),\n height: api.getHeight()\n });\n var size = seriesOption.size || []; // Compatible with ec2.\n\n var containerWidth = parsePercent(retrieveValue(layoutInfo.width, size[0]), ecWidth);\n var containerHeight = parsePercent(retrieveValue(layoutInfo.height, size[1]), ecHeight); // Fetch payload info.\n\n var payloadType = payload && payload.type;\n var targetInfo = helper.retrieveTargetInfo(payload, seriesModel);\n var rootRect = payloadType === 'treemapRender' || payloadType === 'treemapMove' ? payload.rootRect : null;\n var viewRoot = seriesModel.getViewRoot();\n var viewAbovePath = helper.getPathToRoot(viewRoot);\n\n if (payloadType !== 'treemapMove') {\n var rootSize = payloadType === 'treemapZoomToNode' ? estimateRootSize(seriesModel, targetInfo, viewRoot, containerWidth, containerHeight) : rootRect ? [rootRect.width, rootRect.height] : [containerWidth, containerHeight];\n var sort = seriesOption.sort;\n\n if (sort && sort !== 'asc' && sort !== 'desc') {\n sort = 'desc';\n }\n\n var options = {\n squareRatio: seriesOption.squareRatio,\n sort: sort,\n leafDepth: seriesOption.leafDepth\n }; // layout should be cleared because using updateView but not update.\n\n viewRoot.hostTree.clearLayouts(); // TODO\n // optimize: if out of view clip, do not layout.\n // But take care that if do not render node out of view clip,\n // how to calculate start po\n\n var viewRootLayout = {\n x: 0,\n y: 0,\n width: rootSize[0],\n height: rootSize[1],\n area: rootSize[0] * rootSize[1]\n };\n viewRoot.setLayout(viewRootLayout);\n squarify(viewRoot, options, false, 0); // Supplement layout.\n\n var viewRootLayout = viewRoot.getLayout();\n each(viewAbovePath, function (node, index) {\n var childValue = (viewAbovePath[index + 1] || viewRoot).getValue();\n node.setLayout(zrUtil.extend({\n dataExtent: [childValue, childValue],\n borderWidth: 0,\n upperHeight: 0\n }, viewRootLayout));\n });\n }\n\n var treeRoot = seriesModel.getData().tree.root;\n treeRoot.setLayout(calculateRootPosition(layoutInfo, rootRect, targetInfo), true);\n seriesModel.setLayoutInfo(layoutInfo); // FIXME\n // 现在没有clip功能,暂时取ec高宽。\n\n prunning(treeRoot, // Transform to base element coordinate system.\n new BoundingRect(-layoutInfo.x, -layoutInfo.y, ecWidth, ecHeight), viewAbovePath, viewRoot, 0);\n });\n}\n/**\n * Layout treemap with squarify algorithm.\n * @see https://graphics.ethz.ch/teaching/scivis_common/Literature/squarifiedTreeMaps.pdf\n * @see https://github.com/mbostock/d3/blob/master/src/layout/treemap.js\n *\n * @protected\n * @param {module:echarts/data/Tree~TreeNode} node\n * @param {Object} options\n * @param {string} options.sort 'asc' or 'desc'\n * @param {number} options.squareRatio\n * @param {boolean} hideChildren\n * @param {number} depth\n */\n\n\nfunction squarify(node, options, hideChildren, depth) {\n var width;\n var height;\n\n if (node.isRemoved()) {\n return;\n }\n\n var thisLayout = node.getLayout();\n width = thisLayout.width;\n height = thisLayout.height; // Considering border and gap\n\n var nodeModel = node.getModel();\n var borderWidth = nodeModel.get(PATH_BORDER_WIDTH);\n var halfGapWidth = nodeModel.get(PATH_GAP_WIDTH) / 2;\n var upperLabelHeight = getUpperLabelHeight(nodeModel);\n var upperHeight = Math.max(borderWidth, upperLabelHeight);\n var layoutOffset = borderWidth - halfGapWidth;\n var layoutOffsetUpper = upperHeight - halfGapWidth;\n var nodeModel = node.getModel();\n node.setLayout({\n borderWidth: borderWidth,\n upperHeight: upperHeight,\n upperLabelHeight: upperLabelHeight\n }, true);\n width = mathMax(width - 2 * layoutOffset, 0);\n height = mathMax(height - layoutOffset - layoutOffsetUpper, 0);\n var totalArea = width * height;\n var viewChildren = initChildren(node, nodeModel, totalArea, options, hideChildren, depth);\n\n if (!viewChildren.length) {\n return;\n }\n\n var rect = {\n x: layoutOffset,\n y: layoutOffsetUpper,\n width: width,\n height: height\n };\n var rowFixedLength = mathMin(width, height);\n var best = Infinity; // the best row score so far\n\n var row = [];\n row.area = 0;\n\n for (var i = 0, len = viewChildren.length; i < len;) {\n var child = viewChildren[i];\n row.push(child);\n row.area += child.getLayout().area;\n var score = worst(row, rowFixedLength, options.squareRatio); // continue with this orientation\n\n if (score <= best) {\n i++;\n best = score;\n } // abort, and try a different orientation\n else {\n row.area -= row.pop().getLayout().area;\n position(row, rowFixedLength, rect, halfGapWidth, false);\n rowFixedLength = mathMin(rect.width, rect.height);\n row.length = row.area = 0;\n best = Infinity;\n }\n }\n\n if (row.length) {\n position(row, rowFixedLength, rect, halfGapWidth, true);\n }\n\n if (!hideChildren) {\n var childrenVisibleMin = nodeModel.get('childrenVisibleMin');\n\n if (childrenVisibleMin != null && totalArea < childrenVisibleMin) {\n hideChildren = true;\n }\n }\n\n for (var i = 0, len = viewChildren.length; i < len; i++) {\n squarify(viewChildren[i], options, hideChildren, depth + 1);\n }\n}\n/**\n * Set area to each child, and calculate data extent for visual coding.\n */\n\n\nfunction initChildren(node, nodeModel, totalArea, options, hideChildren, depth) {\n var viewChildren = node.children || [];\n var orderBy = options.sort;\n orderBy !== 'asc' && orderBy !== 'desc' && (orderBy = null);\n var overLeafDepth = options.leafDepth != null && options.leafDepth <= depth; // leafDepth has higher priority.\n\n if (hideChildren && !overLeafDepth) {\n return node.viewChildren = [];\n } // Sort children, order by desc.\n\n\n viewChildren = zrUtil.filter(viewChildren, function (child) {\n return !child.isRemoved();\n });\n sort(viewChildren, orderBy);\n var info = statistic(nodeModel, viewChildren, orderBy);\n\n if (info.sum === 0) {\n return node.viewChildren = [];\n }\n\n info.sum = filterByThreshold(nodeModel, totalArea, info.sum, orderBy, viewChildren);\n\n if (info.sum === 0) {\n return node.viewChildren = [];\n } // Set area to each child.\n\n\n for (var i = 0, len = viewChildren.length; i < len; i++) {\n var area = viewChildren[i].getValue() / info.sum * totalArea; // Do not use setLayout({...}, true), because it is needed to clear last layout.\n\n viewChildren[i].setLayout({\n area: area\n });\n }\n\n if (overLeafDepth) {\n viewChildren.length && node.setLayout({\n isLeafRoot: true\n }, true);\n viewChildren.length = 0;\n }\n\n node.viewChildren = viewChildren;\n node.setLayout({\n dataExtent: info.dataExtent\n }, true);\n return viewChildren;\n}\n/**\n * Consider 'visibleMin'. Modify viewChildren and get new sum.\n */\n\n\nfunction filterByThreshold(nodeModel, totalArea, sum, orderBy, orderedChildren) {\n // visibleMin is not supported yet when no option.sort.\n if (!orderBy) {\n return sum;\n }\n\n var visibleMin = nodeModel.get('visibleMin');\n var len = orderedChildren.length;\n var deletePoint = len; // Always travel from little value to big value.\n\n for (var i = len - 1; i >= 0; i--) {\n var value = orderedChildren[orderBy === 'asc' ? len - i - 1 : i].getValue();\n\n if (value / sum * totalArea < visibleMin) {\n deletePoint = i;\n sum -= value;\n }\n }\n\n orderBy === 'asc' ? orderedChildren.splice(0, len - deletePoint) : orderedChildren.splice(deletePoint, len - deletePoint);\n return sum;\n}\n/**\n * Sort\n */\n\n\nfunction sort(viewChildren, orderBy) {\n if (orderBy) {\n viewChildren.sort(function (a, b) {\n var diff = orderBy === 'asc' ? a.getValue() - b.getValue() : b.getValue() - a.getValue();\n return diff === 0 ? orderBy === 'asc' ? a.dataIndex - b.dataIndex : b.dataIndex - a.dataIndex : diff;\n });\n }\n\n return viewChildren;\n}\n/**\n * Statistic\n */\n\n\nfunction statistic(nodeModel, children, orderBy) {\n // Calculate sum.\n var sum = 0;\n\n for (var i = 0, len = children.length; i < len; i++) {\n sum += children[i].getValue();\n } // Statistic data extent for latter visual coding.\n // Notice: data extent should be calculate based on raw children\n // but not filtered view children, otherwise visual mapping will not\n // be stable when zoom (where children is filtered by visibleMin).\n\n\n var dimension = nodeModel.get('visualDimension');\n var dataExtent; // The same as area dimension.\n\n if (!children || !children.length) {\n dataExtent = [NaN, NaN];\n } else if (dimension === 'value' && orderBy) {\n dataExtent = [children[children.length - 1].getValue(), children[0].getValue()];\n orderBy === 'asc' && dataExtent.reverse();\n } // Other dimension.\n else {\n var dataExtent = [Infinity, -Infinity];\n each(children, function (child) {\n var value = child.getValue(dimension);\n value < dataExtent[0] && (dataExtent[0] = value);\n value > dataExtent[1] && (dataExtent[1] = value);\n });\n }\n\n return {\n sum: sum,\n dataExtent: dataExtent\n };\n}\n/**\n * Computes the score for the specified row,\n * as the worst aspect ratio.\n */\n\n\nfunction worst(row, rowFixedLength, ratio) {\n var areaMax = 0;\n var areaMin = Infinity;\n\n for (var i = 0, area, len = row.length; i < len; i++) {\n area = row[i].getLayout().area;\n\n if (area) {\n area < areaMin && (areaMin = area);\n area > areaMax && (areaMax = area);\n }\n }\n\n var squareArea = row.area * row.area;\n var f = rowFixedLength * rowFixedLength * ratio;\n return squareArea ? mathMax(f * areaMax / squareArea, squareArea / (f * areaMin)) : Infinity;\n}\n/**\n * Positions the specified row of nodes. Modifies `rect`.\n */\n\n\nfunction position(row, rowFixedLength, rect, halfGapWidth, flush) {\n // When rowFixedLength === rect.width,\n // it is horizontal subdivision,\n // rowFixedLength is the width of the subdivision,\n // rowOtherLength is the height of the subdivision,\n // and nodes will be positioned from left to right.\n // wh[idx0WhenH] means: when horizontal,\n // wh[idx0WhenH] => wh[0] => 'width'.\n // xy[idx1WhenH] => xy[1] => 'y'.\n var idx0WhenH = rowFixedLength === rect.width ? 0 : 1;\n var idx1WhenH = 1 - idx0WhenH;\n var xy = ['x', 'y'];\n var wh = ['width', 'height'];\n var last = rect[xy[idx0WhenH]];\n var rowOtherLength = rowFixedLength ? row.area / rowFixedLength : 0;\n\n if (flush || rowOtherLength > rect[wh[idx1WhenH]]) {\n rowOtherLength = rect[wh[idx1WhenH]]; // over+underflow\n }\n\n for (var i = 0, rowLen = row.length; i < rowLen; i++) {\n var node = row[i];\n var nodeLayout = {};\n var step = rowOtherLength ? node.getLayout().area / rowOtherLength : 0;\n var wh1 = nodeLayout[wh[idx1WhenH]] = mathMax(rowOtherLength - 2 * halfGapWidth, 0); // We use Math.max/min to avoid negative width/height when considering gap width.\n\n var remain = rect[xy[idx0WhenH]] + rect[wh[idx0WhenH]] - last;\n var modWH = i === rowLen - 1 || remain < step ? remain : step;\n var wh0 = nodeLayout[wh[idx0WhenH]] = mathMax(modWH - 2 * halfGapWidth, 0);\n nodeLayout[xy[idx1WhenH]] = rect[xy[idx1WhenH]] + mathMin(halfGapWidth, wh1 / 2);\n nodeLayout[xy[idx0WhenH]] = last + mathMin(halfGapWidth, wh0 / 2);\n last += modWH;\n node.setLayout(nodeLayout, true);\n }\n\n rect[xy[idx1WhenH]] += rowOtherLength;\n rect[wh[idx1WhenH]] -= rowOtherLength;\n} // Return [containerWidth, containerHeight] as defualt.\n\n\nfunction estimateRootSize(seriesModel, targetInfo, viewRoot, containerWidth, containerHeight) {\n // If targetInfo.node exists, we zoom to the node,\n // so estimate whold width and heigth by target node.\n var currNode = (targetInfo || {}).node;\n var defaultSize = [containerWidth, containerHeight];\n\n if (!currNode || currNode === viewRoot) {\n return defaultSize;\n }\n\n var parent;\n var viewArea = containerWidth * containerHeight;\n var area = viewArea * seriesModel.option.zoomToNodeRatio;\n\n while (parent = currNode.parentNode) {\n // jshint ignore:line\n var sum = 0;\n var siblings = parent.children;\n\n for (var i = 0, len = siblings.length; i < len; i++) {\n sum += siblings[i].getValue();\n }\n\n var currNodeValue = currNode.getValue();\n\n if (currNodeValue === 0) {\n return defaultSize;\n }\n\n area *= sum / currNodeValue; // Considering border, suppose aspect ratio is 1.\n\n var parentModel = parent.getModel();\n var borderWidth = parentModel.get(PATH_BORDER_WIDTH);\n var upperHeight = Math.max(borderWidth, getUpperLabelHeight(parentModel, borderWidth));\n area += 4 * borderWidth * borderWidth + (3 * borderWidth + upperHeight) * Math.pow(area, 0.5);\n area > MAX_SAFE_INTEGER && (area = MAX_SAFE_INTEGER);\n currNode = parent;\n }\n\n area < viewArea && (area = viewArea);\n var scale = Math.pow(area / viewArea, 0.5);\n return [containerWidth * scale, containerHeight * scale];\n} // Root postion base on coord of containerGroup\n\n\nfunction calculateRootPosition(layoutInfo, rootRect, targetInfo) {\n if (rootRect) {\n return {\n x: rootRect.x,\n y: rootRect.y\n };\n }\n\n var defaultPosition = {\n x: 0,\n y: 0\n };\n\n if (!targetInfo) {\n return defaultPosition;\n } // If targetInfo is fetched by 'retrieveTargetInfo',\n // old tree and new tree are the same tree,\n // so the node still exists and we can visit it.\n\n\n var targetNode = targetInfo.node;\n var layout = targetNode.getLayout();\n\n if (!layout) {\n return defaultPosition;\n } // Transform coord from local to container.\n\n\n var targetCenter = [layout.width / 2, layout.height / 2];\n var node = targetNode;\n\n while (node) {\n var nodeLayout = node.getLayout();\n targetCenter[0] += nodeLayout.x;\n targetCenter[1] += nodeLayout.y;\n node = node.parentNode;\n }\n\n return {\n x: layoutInfo.width / 2 - targetCenter[0],\n y: layoutInfo.height / 2 - targetCenter[1]\n };\n} // Mark nodes visible for prunning when visual coding and rendering.\n// Prunning depends on layout and root position, so we have to do it after layout.\n\n\nfunction prunning(node, clipRect, viewAbovePath, viewRoot, depth) {\n var nodeLayout = node.getLayout();\n var nodeInViewAbovePath = viewAbovePath[depth];\n var isAboveViewRoot = nodeInViewAbovePath && nodeInViewAbovePath === node;\n\n if (nodeInViewAbovePath && !isAboveViewRoot || depth === viewAbovePath.length && node !== viewRoot) {\n return;\n }\n\n node.setLayout({\n // isInView means: viewRoot sub tree + viewAbovePath\n isInView: true,\n // invisible only means: outside view clip so that the node can not\n // see but still layout for animation preparation but not render.\n invisible: !isAboveViewRoot && !clipRect.intersect(nodeLayout),\n isAboveViewRoot: isAboveViewRoot\n }, true); // Transform to child coordinate.\n\n var childClipRect = new BoundingRect(clipRect.x - nodeLayout.x, clipRect.y - nodeLayout.y, clipRect.width, clipRect.height);\n each(node.viewChildren || [], function (child) {\n prunning(child, childClipRect, viewAbovePath, viewRoot, depth + 1);\n });\n}\n\nfunction getUpperLabelHeight(model) {\n return model.get(PATH_UPPER_LABEL_SHOW) ? model.get(PATH_UPPER_LABEL_HEIGHT) : 0;\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar _number = require(\"../util/number\");\n\nvar parsePercent = _number.parsePercent;\nvar STACK_PREFIX = '__ec_stack_';\n\nfunction getSeriesStackId(seriesModel) {\n return seriesModel.get('stack') || STACK_PREFIX + seriesModel.seriesIndex;\n}\n\nfunction getAxisKey(axis) {\n return axis.dim + axis.index;\n}\n/**\n * @param {Object} opt\n * @param {module:echarts/coord/Axis} opt.axis Only support category axis currently.\n * @param {number} opt.count Positive interger.\n * @param {number} [opt.barWidth]\n * @param {number} [opt.barMaxWidth]\n * @param {number} [opt.barGap]\n * @param {number} [opt.barCategoryGap]\n * @return {Object} {width, offset, offsetCenter} If axis.type is not 'category', return undefined.\n */\n\n\nfunction getLayoutOnAxis(opt, api) {\n var params = [];\n var baseAxis = opt.axis;\n var axisKey = 'axis0';\n\n if (baseAxis.type !== 'category') {\n return;\n }\n\n var bandWidth = baseAxis.getBandWidth();\n\n for (var i = 0; i < opt.count || 0; i++) {\n params.push(zrUtil.defaults({\n bandWidth: bandWidth,\n axisKey: axisKey,\n stackId: STACK_PREFIX + i\n }, opt));\n }\n\n var widthAndOffsets = doCalBarWidthAndOffset(params, api);\n var result = [];\n\n for (var i = 0; i < opt.count; i++) {\n var item = widthAndOffsets[axisKey][STACK_PREFIX + i];\n item.offsetCenter = item.offset + item.width / 2;\n result.push(item);\n }\n\n return result;\n}\n\nfunction calBarWidthAndOffset(barSeries, api) {\n var seriesInfoList = zrUtil.map(barSeries, function (seriesModel) {\n var data = seriesModel.getData();\n var cartesian = seriesModel.coordinateSystem;\n var baseAxis = cartesian.getBaseAxis();\n var axisExtent = baseAxis.getExtent();\n var bandWidth = baseAxis.type === 'category' ? baseAxis.getBandWidth() : Math.abs(axisExtent[1] - axisExtent[0]) / data.count();\n var barWidth = parsePercent(seriesModel.get('barWidth'), bandWidth);\n var barMaxWidth = parsePercent(seriesModel.get('barMaxWidth'), bandWidth);\n var barGap = seriesModel.get('barGap');\n var barCategoryGap = seriesModel.get('barCategoryGap');\n return {\n bandWidth: bandWidth,\n barWidth: barWidth,\n barMaxWidth: barMaxWidth,\n barGap: barGap,\n barCategoryGap: barCategoryGap,\n axisKey: getAxisKey(baseAxis),\n stackId: getSeriesStackId(seriesModel)\n };\n });\n return doCalBarWidthAndOffset(seriesInfoList, api);\n}\n\nfunction doCalBarWidthAndOffset(seriesInfoList, api) {\n // Columns info on each category axis. Key is cartesian name\n var columnsMap = {};\n zrUtil.each(seriesInfoList, function (seriesInfo, idx) {\n var axisKey = seriesInfo.axisKey;\n var bandWidth = seriesInfo.bandWidth;\n var columnsOnAxis = columnsMap[axisKey] || {\n bandWidth: bandWidth,\n remainedWidth: bandWidth,\n autoWidthCount: 0,\n categoryGap: '20%',\n gap: '30%',\n stacks: {}\n };\n var stacks = columnsOnAxis.stacks;\n columnsMap[axisKey] = columnsOnAxis;\n var stackId = seriesInfo.stackId;\n\n if (!stacks[stackId]) {\n columnsOnAxis.autoWidthCount++;\n }\n\n stacks[stackId] = stacks[stackId] || {\n width: 0,\n maxWidth: 0\n }; // Caution: In a single coordinate system, these barGrid attributes\n // will be shared by series. Consider that they have default values,\n // only the attributes set on the last series will work.\n // Do not change this fact unless there will be a break change.\n // TODO\n\n var barWidth = seriesInfo.barWidth;\n\n if (barWidth && !stacks[stackId].width) {\n // See #6312, do not restrict width.\n stacks[stackId].width = barWidth;\n barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth);\n columnsOnAxis.remainedWidth -= barWidth;\n }\n\n var barMaxWidth = seriesInfo.barMaxWidth;\n barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth);\n var barGap = seriesInfo.barGap;\n barGap != null && (columnsOnAxis.gap = barGap);\n var barCategoryGap = seriesInfo.barCategoryGap;\n barCategoryGap != null && (columnsOnAxis.categoryGap = barCategoryGap);\n });\n var result = {};\n zrUtil.each(columnsMap, function (columnsOnAxis, coordSysName) {\n result[coordSysName] = {};\n var stacks = columnsOnAxis.stacks;\n var bandWidth = columnsOnAxis.bandWidth;\n var categoryGap = parsePercent(columnsOnAxis.categoryGap, bandWidth);\n var barGapPercent = parsePercent(columnsOnAxis.gap, 1);\n var remainedWidth = columnsOnAxis.remainedWidth;\n var autoWidthCount = columnsOnAxis.autoWidthCount;\n var autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n autoWidth = Math.max(autoWidth, 0); // Find if any auto calculated bar exceeded maxBarWidth\n\n zrUtil.each(stacks, function (column, stack) {\n var maxWidth = column.maxWidth;\n\n if (maxWidth && maxWidth < autoWidth) {\n maxWidth = Math.min(maxWidth, remainedWidth);\n\n if (column.width) {\n maxWidth = Math.min(maxWidth, column.width);\n }\n\n remainedWidth -= maxWidth;\n column.width = maxWidth;\n autoWidthCount--;\n }\n }); // Recalculate width again\n\n autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n autoWidth = Math.max(autoWidth, 0);\n var widthSum = 0;\n var lastColumn;\n zrUtil.each(stacks, function (column, idx) {\n if (!column.width) {\n column.width = autoWidth;\n }\n\n lastColumn = column;\n widthSum += column.width * (1 + barGapPercent);\n });\n\n if (lastColumn) {\n widthSum -= lastColumn.width * barGapPercent;\n }\n\n var offset = -widthSum / 2;\n zrUtil.each(stacks, function (column, stackId) {\n result[coordSysName][stackId] = result[coordSysName][stackId] || {\n offset: offset,\n width: column.width\n };\n offset += column.width * (1 + barGapPercent);\n });\n });\n return result;\n}\n/**\n * @param {string} seriesType\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n */\n\n\nfunction barLayoutGrid(seriesType, ecModel, api) {\n var barWidthAndOffset = calBarWidthAndOffset(zrUtil.filter(ecModel.getSeriesByType(seriesType), function (seriesModel) {\n return !ecModel.isSeriesFiltered(seriesModel) && seriesModel.coordinateSystem && seriesModel.coordinateSystem.type === 'cartesian2d';\n }));\n var lastStackCoords = {};\n var lastStackCoordsOrigin = {};\n ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n // Check series coordinate, do layout for cartesian2d only\n if (seriesModel.coordinateSystem.type !== 'cartesian2d') {\n return;\n }\n\n var data = seriesModel.getData();\n var cartesian = seriesModel.coordinateSystem;\n var baseAxis = cartesian.getBaseAxis();\n var stackId = getSeriesStackId(seriesModel);\n var columnLayoutInfo = barWidthAndOffset[getAxisKey(baseAxis)][stackId];\n var columnOffset = columnLayoutInfo.offset;\n var columnWidth = columnLayoutInfo.width;\n var valueAxis = cartesian.getOtherAxis(baseAxis);\n var barMinHeight = seriesModel.get('barMinHeight') || 0;\n var valueAxisStart = baseAxis.onZero ? valueAxis.toGlobalCoord(valueAxis.dataToCoord(0)) : valueAxis.getGlobalExtent()[0];\n var coordDims = [seriesModel.coordDimToDataDim('x')[0], seriesModel.coordDimToDataDim('y')[0]];\n var coords = data.mapArray(coordDims, function (x, y) {\n return cartesian.dataToPoint([x, y]);\n }, true);\n lastStackCoords[stackId] = lastStackCoords[stackId] || [];\n lastStackCoordsOrigin[stackId] = lastStackCoordsOrigin[stackId] || []; // Fix #4243\n\n data.setLayout({\n offset: columnOffset,\n size: columnWidth\n });\n data.each(seriesModel.coordDimToDataDim(valueAxis.dim)[0], function (value, idx) {\n if (isNaN(value)) {\n return;\n }\n\n if (!lastStackCoords[stackId][idx]) {\n lastStackCoords[stackId][idx] = {\n p: valueAxisStart,\n // Positive stack\n n: valueAxisStart // Negative stack\n\n };\n lastStackCoordsOrigin[stackId][idx] = {\n p: valueAxisStart,\n // Positive stack\n n: valueAxisStart // Negative stack\n\n };\n }\n\n var sign = value >= 0 ? 'p' : 'n';\n var coord = coords[idx];\n var lastCoord = lastStackCoords[stackId][idx][sign];\n var lastCoordOrigin = lastStackCoordsOrigin[stackId][idx][sign];\n var x;\n var y;\n var width;\n var height;\n\n if (valueAxis.isHorizontal()) {\n x = lastCoord;\n y = coord[1] + columnOffset;\n width = coord[0] - lastCoordOrigin;\n height = columnWidth;\n lastStackCoordsOrigin[stackId][idx][sign] += width;\n\n if (Math.abs(width) < barMinHeight) {\n width = (width < 0 ? -1 : 1) * barMinHeight;\n }\n\n lastStackCoords[stackId][idx][sign] += width;\n } else {\n x = coord[0] + columnOffset;\n y = lastCoord;\n width = columnWidth;\n height = coord[1] - lastCoordOrigin;\n lastStackCoordsOrigin[stackId][idx][sign] += height;\n\n if (Math.abs(height) < barMinHeight) {\n // Include zero to has a positive bar\n height = (height <= 0 ? -1 : 1) * barMinHeight;\n }\n\n lastStackCoords[stackId][idx][sign] += height;\n }\n\n data.setItemLayout(idx, {\n x: x,\n y: y,\n width: width,\n height: height\n });\n }, true);\n }, this);\n}\n\nbarLayoutGrid.getLayoutOnAxis = getLayoutOnAxis;\nvar _default = barLayoutGrid;\nmodule.exports = _default;","var textHelper = require(\"../helper/text\");\n\nvar BoundingRect = require(\"../../core/BoundingRect\");\n\n/**\n * Mixin for drawing text in a element bounding rect\n * @module zrender/mixin/RectText\n */\nvar tmpRect = new BoundingRect();\n\nvar RectText = function () {};\n\nRectText.prototype = {\n constructor: RectText,\n\n /**\n * Draw text in a rect with specified position.\n * @param {CanvasRenderingContext2D} ctx\n * @param {Object} rect Displayable rect\n */\n drawRectText: function (ctx, rect) {\n var style = this.style;\n rect = style.textRect || rect; // Optimize, avoid normalize every time.\n\n this.__dirty && textHelper.normalizeTextStyle(style, true);\n var text = style.text; // Convert to string\n\n text != null && (text += '');\n\n if (!textHelper.needDrawText(text, style)) {\n return;\n } // FIXME\n\n\n ctx.save(); // Transform rect to view space\n\n var transform = this.transform;\n\n if (!style.transformText) {\n if (transform) {\n tmpRect.copy(rect);\n tmpRect.applyTransform(transform);\n rect = tmpRect;\n }\n } else {\n this.setTransform(ctx);\n } // transformText and textRotation can not be used at the same time.\n\n\n textHelper.renderText(this, ctx, text, style, rect);\n ctx.restore();\n }\n};\nvar _default = RectText;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar axisDefault = require(\"./axisDefault\");\n\nvar ComponentModel = require(\"../model/Component\");\n\nvar _layout = require(\"../util/layout\");\n\nvar getLayoutParams = _layout.getLayoutParams;\nvar mergeLayoutParam = _layout.mergeLayoutParam;\n// FIXME axisType is fixed ?\nvar AXIS_TYPES = ['value', 'category', 'time', 'log'];\n/**\n * Generate sub axis model class\n * @param {string} axisName 'x' 'y' 'radius' 'angle' 'parallel'\n * @param {module:echarts/model/Component} BaseAxisModelClass\n * @param {Function} axisTypeDefaulter\n * @param {Object} [extraDefaultOption]\n */\n\nfunction _default(axisName, BaseAxisModelClass, axisTypeDefaulter, extraDefaultOption) {\n zrUtil.each(AXIS_TYPES, function (axisType) {\n BaseAxisModelClass.extend({\n type: axisName + 'Axis.' + axisType,\n mergeDefaultAndTheme: function (option, ecModel) {\n var layoutMode = this.layoutMode;\n var inputPositionParams = layoutMode ? getLayoutParams(option) : {};\n var themeModel = ecModel.getTheme();\n zrUtil.merge(option, themeModel.get(axisType + 'Axis'));\n zrUtil.merge(option, this.getDefaultOption());\n option.type = axisTypeDefaulter(axisName, option);\n\n if (layoutMode) {\n mergeLayoutParam(option, inputPositionParams, layoutMode);\n }\n },\n defaultOption: zrUtil.mergeAll([{}, axisDefault[axisType + 'Axis'], extraDefaultOption], true)\n });\n });\n ComponentModel.registerSubTypeDefaulter(axisName + 'Axis', zrUtil.curry(axisTypeDefaulter, axisName));\n}\n\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar helper = require(\"./helper\");\n\necharts.registerAction('dataZoom', function (payload, ecModel) {\n var linkedNodesFinder = helper.createLinkedNodesFinder(zrUtil.bind(ecModel.eachComponent, ecModel, 'dataZoom'), helper.eachAxisDim, function (model, dimNames) {\n return model.get(dimNames.axisIndex);\n });\n var effectedModels = [];\n ecModel.eachComponent({\n mainType: 'dataZoom',\n query: payload\n }, function (model, index) {\n effectedModels.push.apply(effectedModels, linkedNodesFinder(model).nodes);\n });\n zrUtil.each(effectedModels, function (dataZoomModel, index) {\n dataZoomModel.setRawRange({\n start: payload.start,\n end: payload.end,\n startValue: payload.startValue,\n endValue: payload.endValue\n });\n });\n});","var _util = require(\"./util\");\n\nvar normalizeRadian = _util.normalizeRadian;\nvar PI2 = Math.PI * 2;\n/**\n * 圆弧描边包含判断\n * @param {number} cx\n * @param {number} cy\n * @param {number} r\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean} anticlockwise\n * @param {number} lineWidth\n * @param {number} x\n * @param {number} y\n * @return {Boolean}\n */\n\nfunction containStroke(cx, cy, r, startAngle, endAngle, anticlockwise, lineWidth, x, y) {\n if (lineWidth === 0) {\n return false;\n }\n\n var _l = lineWidth;\n x -= cx;\n y -= cy;\n var d = Math.sqrt(x * x + y * y);\n\n if (d - _l > r || d + _l < r) {\n return false;\n }\n\n if (Math.abs(startAngle - endAngle) % PI2 < 1e-4) {\n // Is a circle\n return true;\n }\n\n if (anticlockwise) {\n var tmp = startAngle;\n startAngle = normalizeRadian(endAngle);\n endAngle = normalizeRadian(tmp);\n } else {\n startAngle = normalizeRadian(startAngle);\n endAngle = normalizeRadian(endAngle);\n }\n\n if (startAngle > endAngle) {\n endAngle += PI2;\n }\n\n var angle = Math.atan2(y, x);\n\n if (angle < 0) {\n angle += PI2;\n }\n\n return angle >= startAngle && angle <= endAngle || angle + PI2 >= startAngle && angle + PI2 <= endAngle;\n}\n\nexports.containStroke = containStroke;","var Definable = require(\"./Definable\");\n\nvar zrUtil = require(\"../../core/util\");\n\nvar matrix = require(\"../../core/matrix\");\n\n/**\n * @file Manages SVG clipPath elements.\n * @author Zhang Wenli\n */\n\n/**\n * Manages SVG clipPath elements.\n *\n * @class\n * @extends Definable\n * @param {SVGElement} svgRoot root of SVG document\n */\nfunction ClippathManager(svgRoot) {\n Definable.call(this, svgRoot, 'clipPath', '__clippath_in_use__');\n}\n\nzrUtil.inherits(ClippathManager, Definable);\n/**\n * Update clipPath.\n *\n * @param {Displayable} displayable displayable element\n */\n\nClippathManager.prototype.update = function (displayable) {\n var svgEl = this.getSvgElement(displayable);\n\n if (svgEl) {\n this.updateDom(svgEl, displayable.__clipPaths, false);\n }\n\n var textEl = this.getTextSvgElement(displayable);\n\n if (textEl) {\n // Make another clipPath for text, since it's transform\n // matrix is not the same with svgElement\n this.updateDom(textEl, displayable.__clipPaths, true);\n }\n\n this.markUsed(displayable);\n};\n/**\n * Create an SVGElement of displayable and create a of its\n * clipPath\n *\n * @param {Displayable} parentEl parent element\n * @param {ClipPath[]} clipPaths clipPaths of parent element\n * @param {boolean} isText if parent element is Text\n */\n\n\nClippathManager.prototype.updateDom = function (parentEl, clipPaths, isText) {\n if (clipPaths && clipPaths.length > 0) {\n // Has clipPath, create with the first clipPath\n var defs = this.getDefs(true);\n var clipPath = clipPaths[0];\n var clipPathEl;\n var id;\n var dom = isText ? '_textDom' : '_dom';\n\n if (clipPath[dom]) {\n // Use a dom that is already in \n id = clipPath[dom].getAttribute('id');\n clipPathEl = clipPath[dom]; // Use a dom that is already in \n\n if (!defs.contains(clipPathEl)) {\n // This happens when set old clipPath that has\n // been previously removed\n defs.appendChild(clipPathEl);\n }\n } else {\n // New \n id = 'zr-clip-' + this.nextId;\n ++this.nextId;\n clipPathEl = this.createElement('clipPath');\n clipPathEl.setAttribute('id', id);\n defs.appendChild(clipPathEl);\n clipPath[dom] = clipPathEl;\n } // Build path and add to \n\n\n var svgProxy = this.getSvgProxy(clipPath);\n\n if (clipPath.transform && clipPath.parent.invTransform && !isText) {\n /**\n * If a clipPath has a parent with transform, the transform\n * of parent should not be considered when setting transform\n * of clipPath. So we need to transform back from parent's\n * transform, which is done by multiplying parent's inverse\n * transform.\n */\n // Store old transform\n var transform = Array.prototype.slice.call(clipPath.transform); // Transform back from parent, and brush path\n\n matrix.mul(clipPath.transform, clipPath.parent.invTransform, clipPath.transform);\n svgProxy.brush(clipPath); // Set back transform of clipPath\n\n clipPath.transform = transform;\n } else {\n svgProxy.brush(clipPath);\n }\n\n var pathEl = this.getSvgElement(clipPath);\n /**\n * Use `cloneNode()` here to appendChild to multiple parents,\n * which may happend when Text and other shapes are using the same\n * clipPath. Since Text will create an extra clipPath DOM due to\n * different transform rules.\n */\n\n clipPathEl.appendChild(pathEl.cloneNode());\n parentEl.setAttribute('clip-path', 'url(#' + id + ')');\n\n if (clipPaths.length > 1) {\n // Make the other clipPaths recursively\n this.updateDom(clipPathEl, clipPaths.slice(1), isText);\n }\n } else {\n // No clipPath\n if (parentEl) {\n parentEl.setAttribute('clip-path', 'none');\n }\n }\n};\n/**\n * Mark a single clipPath to be used\n *\n * @param {Displayable} displayable displayable element\n */\n\n\nClippathManager.prototype.markUsed = function (displayable) {\n var that = this;\n\n if (displayable.__clipPaths && displayable.__clipPaths.length > 0) {\n zrUtil.each(displayable.__clipPaths, function (clipPath) {\n if (clipPath._dom) {\n Definable.prototype.markUsed.call(that, clipPath._dom);\n }\n\n if (clipPath._textDom) {\n Definable.prototype.markUsed.call(that, clipPath._textDom);\n }\n });\n }\n};\n\nvar _default = ClippathManager;\nmodule.exports = _default;","var SeriesModel = require(\"../../model/Series\");\n\nvar List = require(\"../../data/List\");\n\nvar completeDimensions = require(\"../../data/helper/completeDimensions\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _format = require(\"../../util/format\");\n\nvar encodeHTML = _format.encodeHTML;\nvar RadarSeries = SeriesModel.extend({\n type: 'series.radar',\n dependencies: ['radar'],\n // Overwrite\n init: function (option) {\n RadarSeries.superApply(this, 'init', arguments); // Enable legend selection for each data item\n // Use a function instead of direct access because data reference may changed\n\n this.legendDataProvider = function () {\n return this.getRawData();\n };\n },\n getInitialData: function (option, ecModel) {\n var data = option.data || [];\n var dimensions = completeDimensions([], data, {\n extraPrefix: 'indicator_',\n extraFromZero: true\n });\n var list = new List(dimensions, this);\n list.initData(data);\n return list;\n },\n formatTooltip: function (dataIndex) {\n var value = this.getRawValue(dataIndex);\n var coordSys = this.coordinateSystem;\n var indicatorAxes = coordSys.getIndicatorAxes();\n var name = this.getData().getName(dataIndex);\n return encodeHTML(name === '' ? this.name : name) + '
' + zrUtil.map(indicatorAxes, function (axis, idx) {\n return encodeHTML(axis.name + ' : ' + value[idx]);\n }).join('
');\n },\n defaultOption: {\n zlevel: 0,\n z: 2,\n coordinateSystem: 'radar',\n legendHoverLink: true,\n radarIndex: 0,\n lineStyle: {\n normal: {\n width: 2,\n type: 'solid'\n }\n },\n label: {\n normal: {\n position: 'top'\n }\n },\n // areaStyle: {\n // },\n // itemStyle: {}\n symbol: 'emptyCircle',\n symbolSize: 4 // symbolRotate: null\n\n }\n});\nvar _default = RadarSeries;\nmodule.exports = _default;","var Component = require(\"../../model/Component\");\n\nComponent.registerSubTypeDefaulter('timeline', function () {\n // Only slider now.\n return 'slider';\n});","var commonLayout = require(\"./commonLayout\");\n\nfunction _default(ecModel, api) {\n ecModel.eachSeriesByType('tree', function (seriesModel) {\n commonLayout(seriesModel, api);\n });\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"./graphic\");\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\n// Symbol factory\n\n/**\n * Triangle shape\n * @inner\n */\nvar Triangle = graphic.extendShape({\n type: 'triangle',\n shape: {\n cx: 0,\n cy: 0,\n width: 0,\n height: 0\n },\n buildPath: function (path, shape) {\n var cx = shape.cx;\n var cy = shape.cy;\n var width = shape.width / 2;\n var height = shape.height / 2;\n path.moveTo(cx, cy - height);\n path.lineTo(cx + width, cy + height);\n path.lineTo(cx - width, cy + height);\n path.closePath();\n }\n});\n/**\n * Diamond shape\n * @inner\n */\n\nvar Diamond = graphic.extendShape({\n type: 'diamond',\n shape: {\n cx: 0,\n cy: 0,\n width: 0,\n height: 0\n },\n buildPath: function (path, shape) {\n var cx = shape.cx;\n var cy = shape.cy;\n var width = shape.width / 2;\n var height = shape.height / 2;\n path.moveTo(cx, cy - height);\n path.lineTo(cx + width, cy);\n path.lineTo(cx, cy + height);\n path.lineTo(cx - width, cy);\n path.closePath();\n }\n});\n/**\n * Pin shape\n * @inner\n */\n\nvar Pin = graphic.extendShape({\n type: 'pin',\n shape: {\n // x, y on the cusp\n x: 0,\n y: 0,\n width: 0,\n height: 0\n },\n buildPath: function (path, shape) {\n var x = shape.x;\n var y = shape.y;\n var w = shape.width / 5 * 3; // Height must be larger than width\n\n var h = Math.max(w, shape.height);\n var r = w / 2; // Dist on y with tangent point and circle center\n\n var dy = r * r / (h - r);\n var cy = y - h + r + dy;\n var angle = Math.asin(dy / r); // Dist on x with tangent point and circle center\n\n var dx = Math.cos(angle) * r;\n var tanX = Math.sin(angle);\n var tanY = Math.cos(angle);\n var cpLen = r * 0.6;\n var cpLen2 = r * 0.7;\n path.moveTo(x - dx, cy + dy);\n path.arc(x, cy, r, Math.PI - angle, Math.PI * 2 + angle);\n path.bezierCurveTo(x + dx - tanX * cpLen, cy + dy + tanY * cpLen, x, y - cpLen2, x, y);\n path.bezierCurveTo(x, y - cpLen2, x - dx + tanX * cpLen, cy + dy + tanY * cpLen, x - dx, cy + dy);\n path.closePath();\n }\n});\n/**\n * Arrow shape\n * @inner\n */\n\nvar Arrow = graphic.extendShape({\n type: 'arrow',\n shape: {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n },\n buildPath: function (ctx, shape) {\n var height = shape.height;\n var width = shape.width;\n var x = shape.x;\n var y = shape.y;\n var dx = width / 3 * 2;\n ctx.moveTo(x, y);\n ctx.lineTo(x + dx, y + height);\n ctx.lineTo(x, y + height / 4 * 3);\n ctx.lineTo(x - dx, y + height);\n ctx.lineTo(x, y);\n ctx.closePath();\n }\n});\n/**\n * Map of path contructors\n * @type {Object.}\n */\n\nvar symbolCtors = {\n line: graphic.Line,\n rect: graphic.Rect,\n roundRect: graphic.Rect,\n square: graphic.Rect,\n circle: graphic.Circle,\n diamond: Diamond,\n pin: Pin,\n arrow: Arrow,\n triangle: Triangle\n};\nvar symbolShapeMakers = {\n line: function (x, y, w, h, shape) {\n // FIXME\n shape.x1 = x;\n shape.y1 = y + h / 2;\n shape.x2 = x + w;\n shape.y2 = y + h / 2;\n },\n rect: function (x, y, w, h, shape) {\n shape.x = x;\n shape.y = y;\n shape.width = w;\n shape.height = h;\n },\n roundRect: function (x, y, w, h, shape) {\n shape.x = x;\n shape.y = y;\n shape.width = w;\n shape.height = h;\n shape.r = Math.min(w, h) / 4;\n },\n square: function (x, y, w, h, shape) {\n var size = Math.min(w, h);\n shape.x = x;\n shape.y = y;\n shape.width = size;\n shape.height = size;\n },\n circle: function (x, y, w, h, shape) {\n // Put circle in the center of square\n shape.cx = x + w / 2;\n shape.cy = y + h / 2;\n shape.r = Math.min(w, h) / 2;\n },\n diamond: function (x, y, w, h, shape) {\n shape.cx = x + w / 2;\n shape.cy = y + h / 2;\n shape.width = w;\n shape.height = h;\n },\n pin: function (x, y, w, h, shape) {\n shape.x = x + w / 2;\n shape.y = y + h / 2;\n shape.width = w;\n shape.height = h;\n },\n arrow: function (x, y, w, h, shape) {\n shape.x = x + w / 2;\n shape.y = y + h / 2;\n shape.width = w;\n shape.height = h;\n },\n triangle: function (x, y, w, h, shape) {\n shape.cx = x + w / 2;\n shape.cy = y + h / 2;\n shape.width = w;\n shape.height = h;\n }\n};\nvar symbolBuildProxies = {};\nzrUtil.each(symbolCtors, function (Ctor, name) {\n symbolBuildProxies[name] = new Ctor();\n});\nvar SymbolClz = graphic.extendShape({\n type: 'symbol',\n shape: {\n symbolType: '',\n x: 0,\n y: 0,\n width: 0,\n height: 0\n },\n beforeBrush: function () {\n var style = this.style;\n var shape = this.shape; // FIXME\n\n if (shape.symbolType === 'pin' && style.textPosition === 'inside') {\n style.textPosition = ['50%', '40%'];\n style.textAlign = 'center';\n style.textVerticalAlign = 'middle';\n }\n },\n buildPath: function (ctx, shape, inBundle) {\n var symbolType = shape.symbolType;\n var proxySymbol = symbolBuildProxies[symbolType];\n\n if (shape.symbolType !== 'none') {\n if (!proxySymbol) {\n // Default rect\n symbolType = 'rect';\n proxySymbol = symbolBuildProxies[symbolType];\n }\n\n symbolShapeMakers[symbolType](shape.x, shape.y, shape.width, shape.height, proxySymbol.shape);\n proxySymbol.buildPath(ctx, proxySymbol.shape, inBundle);\n }\n }\n}); // Provide setColor helper method to avoid determine if set the fill or stroke outside\n\nfunction symbolPathSetColor(color, innerColor) {\n if (this.type !== 'image') {\n var symbolStyle = this.style;\n var symbolShape = this.shape;\n\n if (symbolShape && symbolShape.symbolType === 'line') {\n symbolStyle.stroke = color;\n } else if (this.__isEmptyBrush) {\n symbolStyle.stroke = color;\n symbolStyle.fill = innerColor || '#fff';\n } else {\n // FIXME 判断图形默认是填充还是描边,使用 onlyStroke ?\n symbolStyle.fill && (symbolStyle.fill = color);\n symbolStyle.stroke && (symbolStyle.stroke = color);\n }\n\n this.dirty(false);\n }\n}\n/**\n * Create a symbol element with given symbol configuration: shape, x, y, width, height, color\n * @param {string} symbolType\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @param {string} color\n * @param {boolean} [keepAspect=false] whether to keep the ratio of w/h,\n * for path and image only.\n */\n\n\nfunction createSymbol(symbolType, x, y, w, h, color, keepAspect) {\n // TODO Support image object, DynamicImage.\n var isEmpty = symbolType.indexOf('empty') === 0;\n\n if (isEmpty) {\n symbolType = symbolType.substr(5, 1).toLowerCase() + symbolType.substr(6);\n }\n\n var symbolPath;\n\n if (symbolType.indexOf('image://') === 0) {\n symbolPath = graphic.makeImage(symbolType.slice(8), new BoundingRect(x, y, w, h), keepAspect ? 'center' : 'cover');\n } else if (symbolType.indexOf('path://') === 0) {\n symbolPath = graphic.makePath(symbolType.slice(7), {}, new BoundingRect(x, y, w, h), keepAspect ? 'center' : 'cover');\n } else {\n symbolPath = new SymbolClz({\n shape: {\n symbolType: symbolType,\n x: x,\n y: y,\n width: w,\n height: h\n }\n });\n }\n\n symbolPath.__isEmptyBrush = isEmpty;\n symbolPath.setColor = symbolPathSetColor;\n symbolPath.setColor(color);\n return symbolPath;\n}\n\nexports.createSymbol = createSymbol;","var DataZoomModel = require(\"./DataZoomModel\");\n\nvar _default = DataZoomModel.extend({\n type: 'dataZoom.inside',\n\n /**\n * @protected\n */\n defaultOption: {\n disabled: false,\n // Whether disable this inside zoom.\n zoomLock: false,\n // Whether disable zoom but only pan.\n zoomOnMouseWheel: true,\n // Can be: true / false / 'shift' / 'ctrl' / 'alt'.\n moveOnMouseMove: true,\n // Can be: true / false / 'shift' / 'ctrl' / 'alt'.\n preventDefaultMouseMove: true\n }\n});\n\nmodule.exports = _default;","var graphic = require(\"../../util/graphic\");\n\nvar lineContain = require(\"zrender/lib/contain/line\");\n\nvar quadraticContain = require(\"zrender/lib/contain/quadratic\");\n\n// TODO Batch by color\nvar LargeLineShape = graphic.extendShape({\n shape: {\n polyline: false,\n segs: []\n },\n buildPath: function (path, shape) {\n var segs = shape.segs;\n var isPolyline = shape.polyline;\n\n for (var i = 0; i < segs.length; i++) {\n var seg = segs[i];\n\n if (isPolyline) {\n path.moveTo(seg[0][0], seg[0][1]);\n\n for (var j = 1; j < seg.length; j++) {\n path.lineTo(seg[j][0], seg[j][1]);\n }\n } else {\n path.moveTo(seg[0][0], seg[0][1]);\n\n if (seg.length > 2) {\n path.quadraticCurveTo(seg[2][0], seg[2][1], seg[1][0], seg[1][1]);\n } else {\n path.lineTo(seg[1][0], seg[1][1]);\n }\n }\n }\n },\n findDataIndex: function (x, y) {\n var shape = this.shape;\n var segs = shape.segs;\n var isPolyline = shape.polyline;\n var lineWidth = Math.max(this.style.lineWidth, 1); // Not consider transform\n\n for (var i = 0; i < segs.length; i++) {\n var seg = segs[i];\n\n if (isPolyline) {\n for (var j = 1; j < seg.length; j++) {\n if (lineContain.containStroke(seg[j - 1][0], seg[j - 1][1], seg[j][0], seg[j][1], lineWidth, x, y)) {\n return i;\n }\n }\n } else {\n if (seg.length > 2) {\n if (quadraticContain.containStroke(seg[0][0], seg[0][1], seg[2][0], seg[2][1], seg[1][0], seg[1][1], lineWidth, x, y)) {\n return i;\n }\n } else {\n if (lineContain.containStroke(seg[0][0], seg[0][1], seg[1][0], seg[1][1], lineWidth, x, y)) {\n return i;\n }\n }\n }\n }\n\n return -1;\n }\n});\n\nfunction LargeLineDraw() {\n this.group = new graphic.Group();\n this._lineEl = new LargeLineShape();\n}\n\nvar largeLineProto = LargeLineDraw.prototype;\n/**\n * Update symbols draw by new data\n * @param {module:echarts/data/List} data\n */\n\nlargeLineProto.updateData = function (data) {\n this.group.removeAll();\n var lineEl = this._lineEl;\n var seriesModel = data.hostModel;\n lineEl.setShape({\n segs: data.mapArray(data.getItemLayout),\n polyline: seriesModel.get('polyline')\n });\n lineEl.useStyle(seriesModel.getModel('lineStyle.normal').getLineStyle());\n var visualColor = data.getVisual('color');\n\n if (visualColor) {\n lineEl.setStyle('stroke', visualColor);\n }\n\n lineEl.setStyle('fill'); // Enable tooltip\n // PENDING May have performance issue when path is extremely large\n\n lineEl.seriesIndex = seriesModel.seriesIndex;\n lineEl.on('mousemove', function (e) {\n lineEl.dataIndex = null;\n var dataIndex = lineEl.findDataIndex(e.offsetX, e.offsetY);\n\n if (dataIndex > 0) {\n // Provide dataIndex for tooltip\n lineEl.dataIndex = dataIndex;\n }\n }); // Add back\n\n this.group.add(lineEl);\n};\n\nlargeLineProto.updateLayout = function (seriesModel) {\n var data = seriesModel.getData();\n\n this._lineEl.setShape({\n segs: data.mapArray(data.getItemLayout)\n });\n};\n\nlargeLineProto.remove = function () {\n this.group.removeAll();\n};\n\nvar _default = LargeLineDraw;\nmodule.exports = _default;","var echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nrequire(\"./funnel/FunnelSeries\");\n\nrequire(\"./funnel/FunnelView\");\n\nvar dataColor = require(\"../visual/dataColor\");\n\nvar funnelLayout = require(\"./funnel/funnelLayout\");\n\nvar dataFilter = require(\"../processor/dataFilter\");\n\necharts.registerVisual(zrUtil.curry(dataColor, 'funnel'));\necharts.registerLayout(funnelLayout);\necharts.registerProcessor(zrUtil.curry(dataFilter, 'funnel'));","var echarts = require(\"../../echarts\");\n\nvar ATTR = '\\0_ec_interaction_mutex';\n\nfunction take(zr, resourceKey, userKey) {\n var store = getStore(zr);\n store[resourceKey] = userKey;\n}\n\nfunction release(zr, resourceKey, userKey) {\n var store = getStore(zr);\n var uKey = store[resourceKey];\n\n if (uKey === userKey) {\n store[resourceKey] = null;\n }\n}\n\nfunction isTaken(zr, resourceKey) {\n return !!getStore(zr)[resourceKey];\n}\n\nfunction getStore(zr) {\n return zr[ATTR] || (zr[ATTR] = {});\n}\n/**\n * payload: {\n * type: 'takeGlobalCursor',\n * key: 'dataZoomSelect', or 'brush', or ...,\n * If no userKey, release global cursor.\n * }\n */\n\n\necharts.registerAction({\n type: 'takeGlobalCursor',\n event: 'globalCursorTaken',\n update: 'update'\n}, function () {});\nexports.take = take;\nexports.release = release;\nexports.isTaken = isTaken;","var echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar MapDraw = require(\"../../component/helper/MapDraw\");\n\nvar _default = echarts.extendChartView({\n type: 'map',\n render: function (mapModel, ecModel, api, payload) {\n // Not render if it is an toggleSelect action from self\n if (payload && payload.type === 'mapToggleSelect' && payload.from === this.uid) {\n return;\n }\n\n var group = this.group;\n group.removeAll();\n\n if (mapModel.getHostGeoModel()) {\n return;\n } // Not update map if it is an roam action from self\n\n\n if (!(payload && payload.type === 'geoRoam' && payload.componentType === 'series' && payload.seriesId === mapModel.id)) {\n if (mapModel.needsDrawMap) {\n var mapDraw = this._mapDraw || new MapDraw(api, true);\n group.add(mapDraw.group);\n mapDraw.draw(mapModel, ecModel, api, this, payload);\n this._mapDraw = mapDraw;\n } else {\n // Remove drawed map\n this._mapDraw && this._mapDraw.remove();\n this._mapDraw = null;\n }\n } else {\n var mapDraw = this._mapDraw;\n mapDraw && group.add(mapDraw.group);\n }\n\n mapModel.get('showLegendSymbol') && ecModel.getComponent('legend') && this._renderSymbols(mapModel, ecModel, api);\n },\n remove: function () {\n this._mapDraw && this._mapDraw.remove();\n this._mapDraw = null;\n this.group.removeAll();\n },\n dispose: function () {\n this._mapDraw && this._mapDraw.remove();\n this._mapDraw = null;\n },\n _renderSymbols: function (mapModel, ecModel, api) {\n var originalData = mapModel.originalData;\n var group = this.group;\n originalData.each('value', function (value, idx) {\n if (isNaN(value)) {\n return;\n }\n\n var layout = originalData.getItemLayout(idx);\n\n if (!layout || !layout.point) {\n // Not exists in map\n return;\n }\n\n var point = layout.point;\n var offset = layout.offset;\n var circle = new graphic.Circle({\n style: {\n // Because the special of map draw.\n // Which needs statistic of multiple series and draw on one map.\n // And each series also need a symbol with legend color\n //\n // Layout and visual are put one the different data\n fill: mapModel.getData().getVisual('color')\n },\n shape: {\n cx: point[0] + offset * 9,\n cy: point[1],\n r: 3\n },\n silent: true,\n // Do not overlap the first series, on which labels are displayed.\n z2: !offset ? 10 : 8\n }); // First data on the same region\n\n if (!offset) {\n var fullData = mapModel.mainSeries.getData();\n var name = originalData.getName(idx);\n var fullIndex = fullData.indexOfName(name);\n var itemModel = originalData.getItemModel(idx);\n var labelModel = itemModel.getModel('label.normal');\n var hoverLabelModel = itemModel.getModel('label.emphasis');\n var polygonGroups = fullData.getItemGraphicEl(fullIndex);\n var normalText = zrUtil.retrieve2(mapModel.getFormattedLabel(idx, 'normal'), name);\n var emphasisText = zrUtil.retrieve2(mapModel.getFormattedLabel(idx, 'emphasis'), normalText);\n\n var onEmphasis = function () {\n var hoverStyle = graphic.setTextStyle({}, hoverLabelModel, {\n text: hoverLabelModel.get('show') ? emphasisText : null\n }, {\n isRectText: true,\n useInsideStyle: false\n }, true);\n circle.style.extendFrom(hoverStyle); // Make label upper than others if overlaps.\n\n circle.__mapOriginalZ2 = circle.z2;\n circle.z2 += 1;\n };\n\n var onNormal = function () {\n graphic.setTextStyle(circle.style, labelModel, {\n text: labelModel.get('show') ? normalText : null,\n textPosition: labelModel.getShallow('position') || 'bottom'\n }, {\n isRectText: true,\n useInsideStyle: false\n });\n\n if (circle.__mapOriginalZ2 != null) {\n circle.z2 = circle.__mapOriginalZ2;\n circle.__mapOriginalZ2 = null;\n }\n };\n\n polygonGroups.on('mouseover', onEmphasis).on('mouseout', onNormal).on('emphasis', onEmphasis).on('normal', onNormal);\n onNormal();\n }\n\n group.add(circle);\n });\n }\n});\n\nmodule.exports = _default;","var _util = require(\"../../core/util\");\n\nvar retrieve2 = _util.retrieve2;\nvar retrieve3 = _util.retrieve3;\nvar each = _util.each;\nvar normalizeCssArray = _util.normalizeCssArray;\nvar isString = _util.isString;\nvar isObject = _util.isObject;\n\nvar textContain = require(\"../../contain/text\");\n\nvar roundRectHelper = require(\"./roundRect\");\n\nvar imageHelper = require(\"./image\");\n\n// TODO: Have not support 'start', 'end' yet.\nvar VALID_TEXT_ALIGN = {\n left: 1,\n right: 1,\n center: 1\n};\nvar VALID_TEXT_VERTICAL_ALIGN = {\n top: 1,\n bottom: 1,\n middle: 1\n};\n/**\n * @param {module:zrender/graphic/Style} style\n * @return {module:zrender/graphic/Style} The input style.\n */\n\nfunction normalizeTextStyle(style) {\n normalizeStyle(style);\n each(style.rich, normalizeStyle);\n return style;\n}\n\nfunction normalizeStyle(style) {\n if (style) {\n style.font = textContain.makeFont(style);\n var textAlign = style.textAlign;\n textAlign === 'middle' && (textAlign = 'center');\n style.textAlign = textAlign == null || VALID_TEXT_ALIGN[textAlign] ? textAlign : 'left'; // Compatible with textBaseline.\n\n var textVerticalAlign = style.textVerticalAlign || style.textBaseline;\n textVerticalAlign === 'center' && (textVerticalAlign = 'middle');\n style.textVerticalAlign = textVerticalAlign == null || VALID_TEXT_VERTICAL_ALIGN[textVerticalAlign] ? textVerticalAlign : 'top';\n var textPadding = style.textPadding;\n\n if (textPadding) {\n style.textPadding = normalizeCssArray(style.textPadding);\n }\n }\n}\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {string} text\n * @param {module:zrender/graphic/Style} style\n * @param {Object|boolean} [rect] {x, y, width, height}\n * If set false, rect text is not used.\n */\n\n\nfunction renderText(hostEl, ctx, text, style, rect) {\n style.rich ? renderRichText(hostEl, ctx, text, style, rect) : renderPlainText(hostEl, ctx, text, style, rect);\n}\n\nfunction renderPlainText(hostEl, ctx, text, style, rect) {\n var font = setCtx(ctx, 'font', style.font || textContain.DEFAULT_FONT);\n var textPadding = style.textPadding;\n var contentBlock = hostEl.__textCotentBlock;\n\n if (!contentBlock || hostEl.__dirty) {\n contentBlock = hostEl.__textCotentBlock = textContain.parsePlainText(text, font, textPadding, style.truncate);\n }\n\n var outerHeight = contentBlock.outerHeight;\n var textLines = contentBlock.lines;\n var lineHeight = contentBlock.lineHeight;\n var boxPos = getBoxPosition(outerHeight, style, rect);\n var baseX = boxPos.baseX;\n var baseY = boxPos.baseY;\n var textAlign = boxPos.textAlign;\n var textVerticalAlign = boxPos.textVerticalAlign; // Origin of textRotation should be the base point of text drawing.\n\n applyTextRotation(ctx, style, rect, baseX, baseY);\n var boxY = textContain.adjustTextY(baseY, outerHeight, textVerticalAlign);\n var textX = baseX;\n var textY = boxY;\n var needDrawBg = needDrawBackground(style);\n\n if (needDrawBg || textPadding) {\n // Consider performance, do not call getTextWidth util necessary.\n var textWidth = textContain.getWidth(text, font);\n var outerWidth = textWidth;\n textPadding && (outerWidth += textPadding[1] + textPadding[3]);\n var boxX = textContain.adjustTextX(baseX, outerWidth, textAlign);\n needDrawBg && drawBackground(hostEl, ctx, style, boxX, boxY, outerWidth, outerHeight);\n\n if (textPadding) {\n textX = getTextXForPadding(baseX, textAlign, textPadding);\n textY += textPadding[0];\n }\n }\n\n setCtx(ctx, 'textAlign', textAlign || 'left'); // Force baseline to be \"middle\". Otherwise, if using \"top\", the\n // text will offset downward a little bit in font \"Microsoft YaHei\".\n\n setCtx(ctx, 'textBaseline', 'middle'); // Always set shadowBlur and shadowOffset to avoid leak from displayable.\n\n setCtx(ctx, 'shadowBlur', style.textShadowBlur || 0);\n setCtx(ctx, 'shadowColor', style.textShadowColor || 'transparent');\n setCtx(ctx, 'shadowOffsetX', style.textShadowOffsetX || 0);\n setCtx(ctx, 'shadowOffsetY', style.textShadowOffsetY || 0); // `textBaseline` is set as 'middle'.\n\n textY += lineHeight / 2;\n var textStrokeWidth = style.textStrokeWidth;\n var textStroke = getStroke(style.textStroke, textStrokeWidth);\n var textFill = getFill(style.textFill);\n\n if (textStroke) {\n setCtx(ctx, 'lineWidth', textStrokeWidth);\n setCtx(ctx, 'strokeStyle', textStroke);\n }\n\n if (textFill) {\n setCtx(ctx, 'fillStyle', textFill);\n }\n\n for (var i = 0; i < textLines.length; i++) {\n // Fill after stroke so the outline will not cover the main part.\n textStroke && ctx.strokeText(textLines[i], textX, textY);\n textFill && ctx.fillText(textLines[i], textX, textY);\n textY += lineHeight;\n }\n}\n\nfunction renderRichText(hostEl, ctx, text, style, rect) {\n var contentBlock = hostEl.__textCotentBlock;\n\n if (!contentBlock || hostEl.__dirty) {\n contentBlock = hostEl.__textCotentBlock = textContain.parseRichText(text, style);\n }\n\n drawRichText(hostEl, ctx, contentBlock, style, rect);\n}\n\nfunction drawRichText(hostEl, ctx, contentBlock, style, rect) {\n var contentWidth = contentBlock.width;\n var outerWidth = contentBlock.outerWidth;\n var outerHeight = contentBlock.outerHeight;\n var textPadding = style.textPadding;\n var boxPos = getBoxPosition(outerHeight, style, rect);\n var baseX = boxPos.baseX;\n var baseY = boxPos.baseY;\n var textAlign = boxPos.textAlign;\n var textVerticalAlign = boxPos.textVerticalAlign; // Origin of textRotation should be the base point of text drawing.\n\n applyTextRotation(ctx, style, rect, baseX, baseY);\n var boxX = textContain.adjustTextX(baseX, outerWidth, textAlign);\n var boxY = textContain.adjustTextY(baseY, outerHeight, textVerticalAlign);\n var xLeft = boxX;\n var lineTop = boxY;\n\n if (textPadding) {\n xLeft += textPadding[3];\n lineTop += textPadding[0];\n }\n\n var xRight = xLeft + contentWidth;\n needDrawBackground(style) && drawBackground(hostEl, ctx, style, boxX, boxY, outerWidth, outerHeight);\n\n for (var i = 0; i < contentBlock.lines.length; i++) {\n var line = contentBlock.lines[i];\n var tokens = line.tokens;\n var tokenCount = tokens.length;\n var lineHeight = line.lineHeight;\n var usedWidth = line.width;\n var leftIndex = 0;\n var lineXLeft = xLeft;\n var lineXRight = xRight;\n var rightIndex = tokenCount - 1;\n var token;\n\n while (leftIndex < tokenCount && (token = tokens[leftIndex], !token.textAlign || token.textAlign === 'left')) {\n placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXLeft, 'left');\n usedWidth -= token.width;\n lineXLeft += token.width;\n leftIndex++;\n }\n\n while (rightIndex >= 0 && (token = tokens[rightIndex], token.textAlign === 'right')) {\n placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXRight, 'right');\n usedWidth -= token.width;\n lineXRight -= token.width;\n rightIndex--;\n } // The other tokens are placed as textAlign 'center' if there is enough space.\n\n\n lineXLeft += (contentWidth - (lineXLeft - xLeft) - (xRight - lineXRight) - usedWidth) / 2;\n\n while (leftIndex <= rightIndex) {\n token = tokens[leftIndex]; // Consider width specified by user, use 'center' rather than 'left'.\n\n placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXLeft + token.width / 2, 'center');\n lineXLeft += token.width;\n leftIndex++;\n }\n\n lineTop += lineHeight;\n }\n}\n\nfunction applyTextRotation(ctx, style, rect, x, y) {\n // textRotation only apply in RectText.\n if (rect && style.textRotation) {\n var origin = style.textOrigin;\n\n if (origin === 'center') {\n x = rect.width / 2 + rect.x;\n y = rect.height / 2 + rect.y;\n } else if (origin) {\n x = origin[0] + rect.x;\n y = origin[1] + rect.y;\n }\n\n ctx.translate(x, y); // Positive: anticlockwise\n\n ctx.rotate(-style.textRotation);\n ctx.translate(-x, -y);\n }\n}\n\nfunction placeToken(hostEl, ctx, token, style, lineHeight, lineTop, x, textAlign) {\n var tokenStyle = style.rich[token.styleName] || {}; // 'ctx.textBaseline' is always set as 'middle', for sake of\n // the bias of \"Microsoft YaHei\".\n\n var textVerticalAlign = token.textVerticalAlign;\n var y = lineTop + lineHeight / 2;\n\n if (textVerticalAlign === 'top') {\n y = lineTop + token.height / 2;\n } else if (textVerticalAlign === 'bottom') {\n y = lineTop + lineHeight - token.height / 2;\n }\n\n !token.isLineHolder && needDrawBackground(tokenStyle) && drawBackground(hostEl, ctx, tokenStyle, textAlign === 'right' ? x - token.width : textAlign === 'center' ? x - token.width / 2 : x, y - token.height / 2, token.width, token.height);\n var textPadding = token.textPadding;\n\n if (textPadding) {\n x = getTextXForPadding(x, textAlign, textPadding);\n y -= token.height / 2 - textPadding[2] - token.textHeight / 2;\n }\n\n setCtx(ctx, 'shadowBlur', retrieve3(tokenStyle.textShadowBlur, style.textShadowBlur, 0));\n setCtx(ctx, 'shadowColor', tokenStyle.textShadowColor || style.textShadowColor || 'transparent');\n setCtx(ctx, 'shadowOffsetX', retrieve3(tokenStyle.textShadowOffsetX, style.textShadowOffsetX, 0));\n setCtx(ctx, 'shadowOffsetY', retrieve3(tokenStyle.textShadowOffsetY, style.textShadowOffsetY, 0));\n setCtx(ctx, 'textAlign', textAlign); // Force baseline to be \"middle\". Otherwise, if using \"top\", the\n // text will offset downward a little bit in font \"Microsoft YaHei\".\n\n setCtx(ctx, 'textBaseline', 'middle');\n setCtx(ctx, 'font', token.font || textContain.DEFAULT_FONT);\n var textStroke = getStroke(tokenStyle.textStroke || style.textStroke, textStrokeWidth);\n var textFill = getFill(tokenStyle.textFill || style.textFill);\n var textStrokeWidth = retrieve2(tokenStyle.textStrokeWidth, style.textStrokeWidth); // Fill after stroke so the outline will not cover the main part.\n\n if (textStroke) {\n setCtx(ctx, 'lineWidth', textStrokeWidth);\n setCtx(ctx, 'strokeStyle', textStroke);\n ctx.strokeText(token.text, x, y);\n }\n\n if (textFill) {\n setCtx(ctx, 'fillStyle', textFill);\n ctx.fillText(token.text, x, y);\n }\n}\n\nfunction needDrawBackground(style) {\n return style.textBackgroundColor || style.textBorderWidth && style.textBorderColor;\n} // style: {textBackgroundColor, textBorderWidth, textBorderColor, textBorderRadius}\n// shape: {x, y, width, height}\n\n\nfunction drawBackground(hostEl, ctx, style, x, y, width, height) {\n var textBackgroundColor = style.textBackgroundColor;\n var textBorderWidth = style.textBorderWidth;\n var textBorderColor = style.textBorderColor;\n var isPlainBg = isString(textBackgroundColor);\n setCtx(ctx, 'shadowBlur', style.textBoxShadowBlur || 0);\n setCtx(ctx, 'shadowColor', style.textBoxShadowColor || 'transparent');\n setCtx(ctx, 'shadowOffsetX', style.textBoxShadowOffsetX || 0);\n setCtx(ctx, 'shadowOffsetY', style.textBoxShadowOffsetY || 0);\n\n if (isPlainBg || textBorderWidth && textBorderColor) {\n ctx.beginPath();\n var textBorderRadius = style.textBorderRadius;\n\n if (!textBorderRadius) {\n ctx.rect(x, y, width, height);\n } else {\n roundRectHelper.buildPath(ctx, {\n x: x,\n y: y,\n width: width,\n height: height,\n r: textBorderRadius\n });\n }\n\n ctx.closePath();\n }\n\n if (isPlainBg) {\n setCtx(ctx, 'fillStyle', textBackgroundColor);\n ctx.fill();\n } else if (isObject(textBackgroundColor)) {\n var image = textBackgroundColor.image;\n image = imageHelper.createOrUpdateImage(image, null, hostEl, onBgImageLoaded, textBackgroundColor);\n\n if (image && imageHelper.isImageReady(image)) {\n ctx.drawImage(image, x, y, width, height);\n }\n }\n\n if (textBorderWidth && textBorderColor) {\n setCtx(ctx, 'lineWidth', textBorderWidth);\n setCtx(ctx, 'strokeStyle', textBorderColor);\n ctx.stroke();\n }\n}\n\nfunction onBgImageLoaded(image, textBackgroundColor) {\n // Replace image, so that `contain/text.js#parseRichText`\n // will get correct result in next tick.\n textBackgroundColor.image = image;\n}\n\nfunction getBoxPosition(blockHeiht, style, rect) {\n var baseX = style.x || 0;\n var baseY = style.y || 0;\n var textAlign = style.textAlign;\n var textVerticalAlign = style.textVerticalAlign; // Text position represented by coord\n\n if (rect) {\n var textPosition = style.textPosition;\n\n if (textPosition instanceof Array) {\n // Percent\n baseX = rect.x + parsePercent(textPosition[0], rect.width);\n baseY = rect.y + parsePercent(textPosition[1], rect.height);\n } else {\n var res = textContain.adjustTextPositionOnRect(textPosition, rect, style.textDistance);\n baseX = res.x;\n baseY = res.y; // Default align and baseline when has textPosition\n\n textAlign = textAlign || res.textAlign;\n textVerticalAlign = textVerticalAlign || res.textVerticalAlign;\n } // textOffset is only support in RectText, otherwise\n // we have to adjust boundingRect for textOffset.\n\n\n var textOffset = style.textOffset;\n\n if (textOffset) {\n baseX += textOffset[0];\n baseY += textOffset[1];\n }\n }\n\n return {\n baseX: baseX,\n baseY: baseY,\n textAlign: textAlign,\n textVerticalAlign: textVerticalAlign\n };\n}\n\nfunction setCtx(ctx, prop, value) {\n // FIXME ??? performance try\n // if (ctx.__currentValues[prop] !== value) {\n // ctx[prop] = ctx.__currentValues[prop] = value;\n ctx[prop] = value; // }\n\n return ctx[prop];\n}\n/**\n * @param {string} [stroke] If specified, do not check style.textStroke.\n * @param {string} [lineWidth] If specified, do not check style.textStroke.\n * @param {number} style\n */\n\n\nfunction getStroke(stroke, lineWidth) {\n return stroke == null || lineWidth <= 0 || stroke === 'transparent' || stroke === 'none' ? null // TODO pattern and gradient?\n : stroke.image || stroke.colorStops ? '#000' : stroke;\n}\n\nfunction getFill(fill) {\n return fill == null || fill === 'none' ? null // TODO pattern and gradient?\n : fill.image || fill.colorStops ? '#000' : fill;\n}\n\nfunction parsePercent(value, maxValue) {\n if (typeof value === 'string') {\n if (value.lastIndexOf('%') >= 0) {\n return parseFloat(value) / 100 * maxValue;\n }\n\n return parseFloat(value);\n }\n\n return value;\n}\n\nfunction getTextXForPadding(x, textAlign, textPadding) {\n return textAlign === 'right' ? x - textPadding[1] : textAlign === 'center' ? x + textPadding[3] / 2 - textPadding[1] / 2 : x + textPadding[3];\n}\n/**\n * @param {string} text\n * @param {module:zrender/Style} style\n * @return {boolean}\n */\n\n\nfunction needDrawText(text, style) {\n return text != null && (text || style.textBackgroundColor || style.textBorderWidth && style.textBorderColor || style.textPadding);\n}\n\nexports.normalizeTextStyle = normalizeTextStyle;\nexports.renderText = renderText;\nexports.getStroke = getStroke;\nexports.getFill = getFill;\nexports.needDrawText = needDrawText;","var PointerPath = require(\"./PointerPath\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar ChartView = require(\"../../view/Chart\");\n\nvar _number = require(\"../../util/number\");\n\nvar parsePercent = _number.parsePercent;\nvar round = _number.round;\nvar linearMap = _number.linearMap;\n\nfunction parsePosition(seriesModel, api) {\n var center = seriesModel.get('center');\n var width = api.getWidth();\n var height = api.getHeight();\n var size = Math.min(width, height);\n var cx = parsePercent(center[0], api.getWidth());\n var cy = parsePercent(center[1], api.getHeight());\n var r = parsePercent(seriesModel.get('radius'), size / 2);\n return {\n cx: cx,\n cy: cy,\n r: r\n };\n}\n\nfunction formatLabel(label, labelFormatter) {\n if (labelFormatter) {\n if (typeof labelFormatter === 'string') {\n label = labelFormatter.replace('{value}', label != null ? label : '');\n } else if (typeof labelFormatter === 'function') {\n label = labelFormatter(label);\n }\n }\n\n return label;\n}\n\nvar PI2 = Math.PI * 2;\nvar GaugeView = ChartView.extend({\n type: 'gauge',\n render: function (seriesModel, ecModel, api) {\n this.group.removeAll();\n var colorList = seriesModel.get('axisLine.lineStyle.color');\n var posInfo = parsePosition(seriesModel, api);\n\n this._renderMain(seriesModel, ecModel, api, colorList, posInfo);\n },\n dispose: function () {},\n _renderMain: function (seriesModel, ecModel, api, colorList, posInfo) {\n var group = this.group;\n var axisLineModel = seriesModel.getModel('axisLine');\n var lineStyleModel = axisLineModel.getModel('lineStyle');\n var clockwise = seriesModel.get('clockwise');\n var startAngle = -seriesModel.get('startAngle') / 180 * Math.PI;\n var endAngle = -seriesModel.get('endAngle') / 180 * Math.PI;\n var angleRangeSpan = (endAngle - startAngle) % PI2;\n var prevEndAngle = startAngle;\n var axisLineWidth = lineStyleModel.get('width');\n\n for (var i = 0; i < colorList.length; i++) {\n // Clamp\n var percent = Math.min(Math.max(colorList[i][0], 0), 1);\n var endAngle = startAngle + angleRangeSpan * percent;\n var sector = new graphic.Sector({\n shape: {\n startAngle: prevEndAngle,\n endAngle: endAngle,\n cx: posInfo.cx,\n cy: posInfo.cy,\n clockwise: clockwise,\n r0: posInfo.r - axisLineWidth,\n r: posInfo.r\n },\n silent: true\n });\n sector.setStyle({\n fill: colorList[i][1]\n });\n sector.setStyle(lineStyleModel.getLineStyle( // Because we use sector to simulate arc\n // so the properties for stroking are useless\n ['color', 'borderWidth', 'borderColor']));\n group.add(sector);\n prevEndAngle = endAngle;\n }\n\n var getColor = function (percent) {\n // Less than 0\n if (percent <= 0) {\n return colorList[0][1];\n }\n\n for (var i = 0; i < colorList.length; i++) {\n if (colorList[i][0] >= percent && (i === 0 ? 0 : colorList[i - 1][0]) < percent) {\n return colorList[i][1];\n }\n } // More than 1\n\n\n return colorList[i - 1][1];\n };\n\n if (!clockwise) {\n var tmp = startAngle;\n startAngle = endAngle;\n endAngle = tmp;\n }\n\n this._renderTicks(seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise);\n\n this._renderPointer(seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise);\n\n this._renderTitle(seriesModel, ecModel, api, getColor, posInfo);\n\n this._renderDetail(seriesModel, ecModel, api, getColor, posInfo);\n },\n _renderTicks: function (seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise) {\n var group = this.group;\n var cx = posInfo.cx;\n var cy = posInfo.cy;\n var r = posInfo.r;\n var minVal = +seriesModel.get('min');\n var maxVal = +seriesModel.get('max');\n var splitLineModel = seriesModel.getModel('splitLine');\n var tickModel = seriesModel.getModel('axisTick');\n var labelModel = seriesModel.getModel('axisLabel');\n var splitNumber = seriesModel.get('splitNumber');\n var subSplitNumber = tickModel.get('splitNumber');\n var splitLineLen = parsePercent(splitLineModel.get('length'), r);\n var tickLen = parsePercent(tickModel.get('length'), r);\n var angle = startAngle;\n var step = (endAngle - startAngle) / splitNumber;\n var subStep = step / subSplitNumber;\n var splitLineStyle = splitLineModel.getModel('lineStyle').getLineStyle();\n var tickLineStyle = tickModel.getModel('lineStyle').getLineStyle();\n\n for (var i = 0; i <= splitNumber; i++) {\n var unitX = Math.cos(angle);\n var unitY = Math.sin(angle); // Split line\n\n if (splitLineModel.get('show')) {\n var splitLine = new graphic.Line({\n shape: {\n x1: unitX * r + cx,\n y1: unitY * r + cy,\n x2: unitX * (r - splitLineLen) + cx,\n y2: unitY * (r - splitLineLen) + cy\n },\n style: splitLineStyle,\n silent: true\n });\n\n if (splitLineStyle.stroke === 'auto') {\n splitLine.setStyle({\n stroke: getColor(i / splitNumber)\n });\n }\n\n group.add(splitLine);\n } // Label\n\n\n if (labelModel.get('show')) {\n var label = formatLabel(round(i / splitNumber * (maxVal - minVal) + minVal), labelModel.get('formatter'));\n var distance = labelModel.get('distance');\n var autoColor = getColor(i / splitNumber);\n group.add(new graphic.Text({\n style: graphic.setTextStyle({}, labelModel, {\n text: label,\n x: unitX * (r - splitLineLen - distance) + cx,\n y: unitY * (r - splitLineLen - distance) + cy,\n textVerticalAlign: unitY < -0.4 ? 'top' : unitY > 0.4 ? 'bottom' : 'middle',\n textAlign: unitX < -0.4 ? 'left' : unitX > 0.4 ? 'right' : 'center'\n }, {\n autoColor: autoColor\n }),\n silent: true\n }));\n } // Axis tick\n\n\n if (tickModel.get('show') && i !== splitNumber) {\n for (var j = 0; j <= subSplitNumber; j++) {\n var unitX = Math.cos(angle);\n var unitY = Math.sin(angle);\n var tickLine = new graphic.Line({\n shape: {\n x1: unitX * r + cx,\n y1: unitY * r + cy,\n x2: unitX * (r - tickLen) + cx,\n y2: unitY * (r - tickLen) + cy\n },\n silent: true,\n style: tickLineStyle\n });\n\n if (tickLineStyle.stroke === 'auto') {\n tickLine.setStyle({\n stroke: getColor((i + j / subSplitNumber) / splitNumber)\n });\n }\n\n group.add(tickLine);\n angle += subStep;\n }\n\n angle -= subStep;\n } else {\n angle += step;\n }\n }\n },\n _renderPointer: function (seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise) {\n var group = this.group;\n var oldData = this._data;\n\n if (!seriesModel.get('pointer.show')) {\n // Remove old element\n oldData && oldData.eachItemGraphicEl(function (el) {\n group.remove(el);\n });\n return;\n }\n\n var valueExtent = [+seriesModel.get('min'), +seriesModel.get('max')];\n var angleExtent = [startAngle, endAngle];\n var data = seriesModel.getData();\n data.diff(oldData).add(function (idx) {\n var pointer = new PointerPath({\n shape: {\n angle: startAngle\n }\n });\n graphic.initProps(pointer, {\n shape: {\n angle: linearMap(data.get('value', idx), valueExtent, angleExtent, true)\n }\n }, seriesModel);\n group.add(pointer);\n data.setItemGraphicEl(idx, pointer);\n }).update(function (newIdx, oldIdx) {\n var pointer = oldData.getItemGraphicEl(oldIdx);\n graphic.updateProps(pointer, {\n shape: {\n angle: linearMap(data.get('value', newIdx), valueExtent, angleExtent, true)\n }\n }, seriesModel);\n group.add(pointer);\n data.setItemGraphicEl(newIdx, pointer);\n }).remove(function (idx) {\n var pointer = oldData.getItemGraphicEl(idx);\n group.remove(pointer);\n }).execute();\n data.eachItemGraphicEl(function (pointer, idx) {\n var itemModel = data.getItemModel(idx);\n var pointerModel = itemModel.getModel('pointer');\n pointer.setShape({\n x: posInfo.cx,\n y: posInfo.cy,\n width: parsePercent(pointerModel.get('width'), posInfo.r),\n r: parsePercent(pointerModel.get('length'), posInfo.r)\n });\n pointer.useStyle(itemModel.getModel('itemStyle.normal').getItemStyle());\n\n if (pointer.style.fill === 'auto') {\n pointer.setStyle('fill', getColor(linearMap(data.get('value', idx), valueExtent, [0, 1], true)));\n }\n\n graphic.setHoverStyle(pointer, itemModel.getModel('itemStyle.emphasis').getItemStyle());\n });\n this._data = data;\n },\n _renderTitle: function (seriesModel, ecModel, api, getColor, posInfo) {\n var titleModel = seriesModel.getModel('title');\n\n if (titleModel.get('show')) {\n var offsetCenter = titleModel.get('offsetCenter');\n var x = posInfo.cx + parsePercent(offsetCenter[0], posInfo.r);\n var y = posInfo.cy + parsePercent(offsetCenter[1], posInfo.r);\n var minVal = +seriesModel.get('min');\n var maxVal = +seriesModel.get('max');\n var value = seriesModel.getData().get('value', 0);\n var autoColor = getColor(linearMap(value, [minVal, maxVal], [0, 1], true));\n this.group.add(new graphic.Text({\n silent: true,\n style: graphic.setTextStyle({}, titleModel, {\n x: x,\n y: y,\n // FIXME First data name ?\n text: seriesModel.getData().getName(0),\n textAlign: 'center',\n textVerticalAlign: 'middle'\n }, {\n autoColor: autoColor,\n forceRich: true\n })\n }));\n }\n },\n _renderDetail: function (seriesModel, ecModel, api, getColor, posInfo) {\n var detailModel = seriesModel.getModel('detail');\n var minVal = +seriesModel.get('min');\n var maxVal = +seriesModel.get('max');\n\n if (detailModel.get('show')) {\n var offsetCenter = detailModel.get('offsetCenter');\n var x = posInfo.cx + parsePercent(offsetCenter[0], posInfo.r);\n var y = posInfo.cy + parsePercent(offsetCenter[1], posInfo.r);\n var width = parsePercent(detailModel.get('width'), posInfo.r);\n var height = parsePercent(detailModel.get('height'), posInfo.r);\n var value = seriesModel.getData().get('value', 0);\n var autoColor = getColor(linearMap(value, [minVal, maxVal], [0, 1], true));\n this.group.add(new graphic.Text({\n silent: true,\n style: graphic.setTextStyle({}, detailModel, {\n x: x,\n y: y,\n text: formatLabel( // FIXME First data name ?\n value, detailModel.get('formatter')),\n textWidth: isNaN(width) ? null : width,\n textHeight: isNaN(height) ? null : height,\n textAlign: 'center',\n textVerticalAlign: 'middle'\n }, {\n autoColor: autoColor,\n forceRich: true\n })\n }));\n }\n }\n});\nvar _default = GaugeView;\nmodule.exports = _default;","var echarts = require(\"../echarts\");\n\nrequire(\"./lines/LinesSeries\");\n\nrequire(\"./lines/LinesView\");\n\nvar linesLayout = require(\"./lines/linesLayout\");\n\nvar linesVisual = require(\"./lines/linesVisual\");\n\necharts.registerLayout(linesLayout);\necharts.registerVisual(linesVisual);","// Fix for 钓鱼岛\n// var Region = require('../Region');\n// var zrUtil = require('zrender/src/core/util');\n// var geoCoord = [126, 25];\nvar points = [[[123.45165252685547, 25.73527164402261], [123.49731445312499, 25.73527164402261], [123.49731445312499, 25.750734064600884], [123.45165252685547, 25.750734064600884], [123.45165252685547, 25.73527164402261]]];\n\nfunction _default(geo) {\n if (geo.map === 'china') {\n for (var i = 0, len = geo.regions.length; i < len; ++i) {\n if (geo.regions[i].name === '台湾') {\n geo.regions[i].geometries.push({\n type: 'polygon',\n exterior: points[0]\n });\n }\n }\n }\n}\n\nmodule.exports = _default;","var env = require(\"../core/env\");\n\nvar _vector = require(\"../core/vector\");\n\nvar applyTransform = _vector.applyTransform;\n\nvar BoundingRect = require(\"../core/BoundingRect\");\n\nvar colorTool = require(\"../tool/color\");\n\nvar textContain = require(\"../contain/text\");\n\nvar textHelper = require(\"../graphic/helper/text\");\n\nvar RectText = require(\"../graphic/mixin/RectText\");\n\nvar Displayable = require(\"../graphic/Displayable\");\n\nvar ZImage = require(\"../graphic/Image\");\n\nvar Text = require(\"../graphic/Text\");\n\nvar Path = require(\"../graphic/Path\");\n\nvar PathProxy = require(\"../core/PathProxy\");\n\nvar Gradient = require(\"../graphic/Gradient\");\n\nvar vmlCore = require(\"./core\");\n\n// http://www.w3.org/TR/NOTE-VML\n// TODO Use proxy like svg instead of overwrite brush methods\nvar CMD = PathProxy.CMD;\nvar round = Math.round;\nvar sqrt = Math.sqrt;\nvar abs = Math.abs;\nvar cos = Math.cos;\nvar sin = Math.sin;\nvar mathMax = Math.max;\n\nif (!env.canvasSupported) {\n var comma = ',';\n var imageTransformPrefix = 'progid:DXImageTransform.Microsoft';\n var Z = 21600;\n var Z2 = Z / 2;\n var ZLEVEL_BASE = 100000;\n var Z_BASE = 1000;\n\n var initRootElStyle = function (el) {\n el.style.cssText = 'position:absolute;left:0;top:0;width:1px;height:1px;';\n el.coordsize = Z + ',' + Z;\n el.coordorigin = '0,0';\n };\n\n var encodeHtmlAttribute = function (s) {\n return String(s).replace(/&/g, '&').replace(/\"/g, '"');\n };\n\n var rgb2Str = function (r, g, b) {\n return 'rgb(' + [r, g, b].join(',') + ')';\n };\n\n var append = function (parent, child) {\n if (child && parent && child.parentNode !== parent) {\n parent.appendChild(child);\n }\n };\n\n var remove = function (parent, child) {\n if (child && parent && child.parentNode === parent) {\n parent.removeChild(child);\n }\n };\n\n var getZIndex = function (zlevel, z, z2) {\n // z 的取值范围为 [0, 1000]\n return (parseFloat(zlevel) || 0) * ZLEVEL_BASE + (parseFloat(z) || 0) * Z_BASE + z2;\n };\n\n var parsePercent = function (value, maxValue) {\n if (typeof value === 'string') {\n if (value.lastIndexOf('%') >= 0) {\n return parseFloat(value) / 100 * maxValue;\n }\n\n return parseFloat(value);\n }\n\n return value;\n };\n /***************************************************\n * PATH\n **************************************************/\n\n\n var setColorAndOpacity = function (el, color, opacity) {\n var colorArr = colorTool.parse(color);\n opacity = +opacity;\n\n if (isNaN(opacity)) {\n opacity = 1;\n }\n\n if (colorArr) {\n el.color = rgb2Str(colorArr[0], colorArr[1], colorArr[2]);\n el.opacity = opacity * colorArr[3];\n }\n };\n\n var getColorAndAlpha = function (color) {\n var colorArr = colorTool.parse(color);\n return [rgb2Str(colorArr[0], colorArr[1], colorArr[2]), colorArr[3]];\n };\n\n var updateFillNode = function (el, style, zrEl) {\n // TODO pattern\n var fill = style.fill;\n\n if (fill != null) {\n // Modified from excanvas\n if (fill instanceof Gradient) {\n var gradientType;\n var angle = 0;\n var focus = [0, 0]; // additional offset\n\n var shift = 0; // scale factor for offset\n\n var expansion = 1;\n var rect = zrEl.getBoundingRect();\n var rectWidth = rect.width;\n var rectHeight = rect.height;\n\n if (fill.type === 'linear') {\n gradientType = 'gradient';\n var transform = zrEl.transform;\n var p0 = [fill.x * rectWidth, fill.y * rectHeight];\n var p1 = [fill.x2 * rectWidth, fill.y2 * rectHeight];\n\n if (transform) {\n applyTransform(p0, p0, transform);\n applyTransform(p1, p1, transform);\n }\n\n var dx = p1[0] - p0[0];\n var dy = p1[1] - p0[1];\n angle = Math.atan2(dx, dy) * 180 / Math.PI; // The angle should be a non-negative number.\n\n if (angle < 0) {\n angle += 360;\n } // Very small angles produce an unexpected result because they are\n // converted to a scientific notation string.\n\n\n if (angle < 1e-6) {\n angle = 0;\n }\n } else {\n gradientType = 'gradientradial';\n var p0 = [fill.x * rectWidth, fill.y * rectHeight];\n var transform = zrEl.transform;\n var scale = zrEl.scale;\n var width = rectWidth;\n var height = rectHeight;\n focus = [// Percent in bounding rect\n (p0[0] - rect.x) / width, (p0[1] - rect.y) / height];\n\n if (transform) {\n applyTransform(p0, p0, transform);\n }\n\n width /= scale[0] * Z;\n height /= scale[1] * Z;\n var dimension = mathMax(width, height);\n shift = 2 * 0 / dimension;\n expansion = 2 * fill.r / dimension - shift;\n } // We need to sort the color stops in ascending order by offset,\n // otherwise IE won't interpret it correctly.\n\n\n var stops = fill.colorStops.slice();\n stops.sort(function (cs1, cs2) {\n return cs1.offset - cs2.offset;\n });\n var length = stops.length; // Color and alpha list of first and last stop\n\n var colorAndAlphaList = [];\n var colors = [];\n\n for (var i = 0; i < length; i++) {\n var stop = stops[i];\n var colorAndAlpha = getColorAndAlpha(stop.color);\n colors.push(stop.offset * expansion + shift + ' ' + colorAndAlpha[0]);\n\n if (i === 0 || i === length - 1) {\n colorAndAlphaList.push(colorAndAlpha);\n }\n }\n\n if (length >= 2) {\n var color1 = colorAndAlphaList[0][0];\n var color2 = colorAndAlphaList[1][0];\n var opacity1 = colorAndAlphaList[0][1] * style.opacity;\n var opacity2 = colorAndAlphaList[1][1] * style.opacity;\n el.type = gradientType;\n el.method = 'none';\n el.focus = '100%';\n el.angle = angle;\n el.color = color1;\n el.color2 = color2;\n el.colors = colors.join(','); // When colors attribute is used, the meanings of opacity and o:opacity2\n // are reversed.\n\n el.opacity = opacity2; // FIXME g_o_:opacity ?\n\n el.opacity2 = opacity1;\n }\n\n if (gradientType === 'radial') {\n el.focusposition = focus.join(',');\n }\n } else {\n // FIXME Change from Gradient fill to color fill\n setColorAndOpacity(el, fill, style.opacity);\n }\n }\n };\n\n var updateStrokeNode = function (el, style) {\n // if (style.lineJoin != null) {\n // el.joinstyle = style.lineJoin;\n // }\n // if (style.miterLimit != null) {\n // el.miterlimit = style.miterLimit * Z;\n // }\n // if (style.lineCap != null) {\n // el.endcap = style.lineCap;\n // }\n if (style.lineDash != null) {\n el.dashstyle = style.lineDash.join(' ');\n }\n\n if (style.stroke != null && !(style.stroke instanceof Gradient)) {\n setColorAndOpacity(el, style.stroke, style.opacity);\n }\n };\n\n var updateFillAndStroke = function (vmlEl, type, style, zrEl) {\n var isFill = type == 'fill';\n var el = vmlEl.getElementsByTagName(type)[0]; // Stroke must have lineWidth\n\n if (style[type] != null && style[type] !== 'none' && (isFill || !isFill && style.lineWidth)) {\n vmlEl[isFill ? 'filled' : 'stroked'] = 'true'; // FIXME Remove before updating, or set `colors` will throw error\n\n if (style[type] instanceof Gradient) {\n remove(vmlEl, el);\n }\n\n if (!el) {\n el = vmlCore.createNode(type);\n }\n\n isFill ? updateFillNode(el, style, zrEl) : updateStrokeNode(el, style);\n append(vmlEl, el);\n } else {\n vmlEl[isFill ? 'filled' : 'stroked'] = 'false';\n remove(vmlEl, el);\n }\n };\n\n var points = [[], [], []];\n\n var pathDataToString = function (path, m) {\n var M = CMD.M;\n var C = CMD.C;\n var L = CMD.L;\n var A = CMD.A;\n var Q = CMD.Q;\n var str = [];\n var nPoint;\n var cmdStr;\n var cmd;\n var i;\n var xi;\n var yi;\n var data = path.data;\n var dataLength = path.len();\n\n for (i = 0; i < dataLength;) {\n cmd = data[i++];\n cmdStr = '';\n nPoint = 0;\n\n switch (cmd) {\n case M:\n cmdStr = ' m ';\n nPoint = 1;\n xi = data[i++];\n yi = data[i++];\n points[0][0] = xi;\n points[0][1] = yi;\n break;\n\n case L:\n cmdStr = ' l ';\n nPoint = 1;\n xi = data[i++];\n yi = data[i++];\n points[0][0] = xi;\n points[0][1] = yi;\n break;\n\n case Q:\n case C:\n cmdStr = ' c ';\n nPoint = 3;\n var x1 = data[i++];\n var y1 = data[i++];\n var x2 = data[i++];\n var y2 = data[i++];\n var x3;\n var y3;\n\n if (cmd === Q) {\n // Convert quadratic to cubic using degree elevation\n x3 = x2;\n y3 = y2;\n x2 = (x2 + 2 * x1) / 3;\n y2 = (y2 + 2 * y1) / 3;\n x1 = (xi + 2 * x1) / 3;\n y1 = (yi + 2 * y1) / 3;\n } else {\n x3 = data[i++];\n y3 = data[i++];\n }\n\n points[0][0] = x1;\n points[0][1] = y1;\n points[1][0] = x2;\n points[1][1] = y2;\n points[2][0] = x3;\n points[2][1] = y3;\n xi = x3;\n yi = y3;\n break;\n\n case A:\n var x = 0;\n var y = 0;\n var sx = 1;\n var sy = 1;\n var angle = 0;\n\n if (m) {\n // Extract SRT from matrix\n x = m[4];\n y = m[5];\n sx = sqrt(m[0] * m[0] + m[1] * m[1]);\n sy = sqrt(m[2] * m[2] + m[3] * m[3]);\n angle = Math.atan2(-m[1] / sy, m[0] / sx);\n }\n\n var cx = data[i++];\n var cy = data[i++];\n var rx = data[i++];\n var ry = data[i++];\n var startAngle = data[i++] + angle;\n var endAngle = data[i++] + startAngle + angle; // FIXME\n // var psi = data[i++];\n\n i++;\n var clockwise = data[i++];\n var x0 = cx + cos(startAngle) * rx;\n var y0 = cy + sin(startAngle) * ry;\n var x1 = cx + cos(endAngle) * rx;\n var y1 = cy + sin(endAngle) * ry;\n var type = clockwise ? ' wa ' : ' at ';\n\n if (Math.abs(x0 - x1) < 1e-4) {\n // IE won't render arches drawn counter clockwise if x0 == x1.\n if (Math.abs(endAngle - startAngle) > 1e-2) {\n // Offset x0 by 1/80 of a pixel. Use something\n // that can be represented in binary\n if (clockwise) {\n x0 += 270 / Z;\n }\n } else {\n // Avoid case draw full circle\n if (Math.abs(y0 - cy) < 1e-4) {\n if (clockwise && x0 < cx || !clockwise && x0 > cx) {\n y1 -= 270 / Z;\n } else {\n y1 += 270 / Z;\n }\n } else if (clockwise && y0 < cy || !clockwise && y0 > cy) {\n x1 += 270 / Z;\n } else {\n x1 -= 270 / Z;\n }\n }\n }\n\n str.push(type, round(((cx - rx) * sx + x) * Z - Z2), comma, round(((cy - ry) * sy + y) * Z - Z2), comma, round(((cx + rx) * sx + x) * Z - Z2), comma, round(((cy + ry) * sy + y) * Z - Z2), comma, round((x0 * sx + x) * Z - Z2), comma, round((y0 * sy + y) * Z - Z2), comma, round((x1 * sx + x) * Z - Z2), comma, round((y1 * sy + y) * Z - Z2));\n xi = x1;\n yi = y1;\n break;\n\n case CMD.R:\n var p0 = points[0];\n var p1 = points[1]; // x0, y0\n\n p0[0] = data[i++];\n p0[1] = data[i++]; // x1, y1\n\n p1[0] = p0[0] + data[i++];\n p1[1] = p0[1] + data[i++];\n\n if (m) {\n applyTransform(p0, p0, m);\n applyTransform(p1, p1, m);\n }\n\n p0[0] = round(p0[0] * Z - Z2);\n p1[0] = round(p1[0] * Z - Z2);\n p0[1] = round(p0[1] * Z - Z2);\n p1[1] = round(p1[1] * Z - Z2);\n str.push( // x0, y0\n ' m ', p0[0], comma, p0[1], // x1, y0\n ' l ', p1[0], comma, p0[1], // x1, y1\n ' l ', p1[0], comma, p1[1], // x0, y1\n ' l ', p0[0], comma, p1[1]);\n break;\n\n case CMD.Z:\n // FIXME Update xi, yi\n str.push(' x ');\n }\n\n if (nPoint > 0) {\n str.push(cmdStr);\n\n for (var k = 0; k < nPoint; k++) {\n var p = points[k];\n m && applyTransform(p, p, m); // 不 round 会非常慢\n\n str.push(round(p[0] * Z - Z2), comma, round(p[1] * Z - Z2), k < nPoint - 1 ? comma : '');\n }\n }\n }\n\n return str.join('');\n }; // Rewrite the original path method\n\n\n Path.prototype.brushVML = function (vmlRoot) {\n var style = this.style;\n var vmlEl = this._vmlEl;\n\n if (!vmlEl) {\n vmlEl = vmlCore.createNode('shape');\n initRootElStyle(vmlEl);\n this._vmlEl = vmlEl;\n }\n\n updateFillAndStroke(vmlEl, 'fill', style, this);\n updateFillAndStroke(vmlEl, 'stroke', style, this);\n var m = this.transform;\n var needTransform = m != null;\n var strokeEl = vmlEl.getElementsByTagName('stroke')[0];\n\n if (strokeEl) {\n var lineWidth = style.lineWidth; // Get the line scale.\n // Determinant of this.m_ means how much the area is enlarged by the\n // transformation. So its square root can be used as a scale factor\n // for width.\n\n if (needTransform && !style.strokeNoScale) {\n var det = m[0] * m[3] - m[1] * m[2];\n lineWidth *= sqrt(abs(det));\n }\n\n strokeEl.weight = lineWidth + 'px';\n }\n\n var path = this.path || (this.path = new PathProxy());\n\n if (this.__dirtyPath) {\n path.beginPath();\n this.buildPath(path, this.shape);\n path.toStatic();\n this.__dirtyPath = false;\n }\n\n vmlEl.path = pathDataToString(path, this.transform);\n vmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2); // Append to root\n\n append(vmlRoot, vmlEl); // Text\n\n if (style.text != null) {\n this.drawRectText(vmlRoot, this.getBoundingRect());\n } else {\n this.removeRectText(vmlRoot);\n }\n };\n\n Path.prototype.onRemove = function (vmlRoot) {\n remove(vmlRoot, this._vmlEl);\n this.removeRectText(vmlRoot);\n };\n\n Path.prototype.onAdd = function (vmlRoot) {\n append(vmlRoot, this._vmlEl);\n this.appendRectText(vmlRoot);\n };\n /***************************************************\n * IMAGE\n **************************************************/\n\n\n var isImage = function (img) {\n // FIXME img instanceof Image 如果 img 是一个字符串的时候,IE8 下会报错\n return typeof img === 'object' && img.tagName && img.tagName.toUpperCase() === 'IMG'; // return img instanceof Image;\n }; // Rewrite the original path method\n\n\n ZImage.prototype.brushVML = function (vmlRoot) {\n var style = this.style;\n var image = style.image; // Image original width, height\n\n var ow;\n var oh;\n\n if (isImage(image)) {\n var src = image.src;\n\n if (src === this._imageSrc) {\n ow = this._imageWidth;\n oh = this._imageHeight;\n } else {\n var imageRuntimeStyle = image.runtimeStyle;\n var oldRuntimeWidth = imageRuntimeStyle.width;\n var oldRuntimeHeight = imageRuntimeStyle.height;\n imageRuntimeStyle.width = 'auto';\n imageRuntimeStyle.height = 'auto'; // get the original size\n\n ow = image.width;\n oh = image.height; // and remove overides\n\n imageRuntimeStyle.width = oldRuntimeWidth;\n imageRuntimeStyle.height = oldRuntimeHeight; // Caching image original width, height and src\n\n this._imageSrc = src;\n this._imageWidth = ow;\n this._imageHeight = oh;\n }\n\n image = src;\n } else {\n if (image === this._imageSrc) {\n ow = this._imageWidth;\n oh = this._imageHeight;\n }\n }\n\n if (!image) {\n return;\n }\n\n var x = style.x || 0;\n var y = style.y || 0;\n var dw = style.width;\n var dh = style.height;\n var sw = style.sWidth;\n var sh = style.sHeight;\n var sx = style.sx || 0;\n var sy = style.sy || 0;\n var hasCrop = sw && sh;\n var vmlEl = this._vmlEl;\n\n if (!vmlEl) {\n // FIXME 使用 group 在 left, top 都不是 0 的时候就无法显示了。\n // vmlEl = vmlCore.createNode('group');\n vmlEl = vmlCore.doc.createElement('div');\n initRootElStyle(vmlEl);\n this._vmlEl = vmlEl;\n }\n\n var vmlElStyle = vmlEl.style;\n var hasRotation = false;\n var m;\n var scaleX = 1;\n var scaleY = 1;\n\n if (this.transform) {\n m = this.transform;\n scaleX = sqrt(m[0] * m[0] + m[1] * m[1]);\n scaleY = sqrt(m[2] * m[2] + m[3] * m[3]);\n hasRotation = m[1] || m[2];\n }\n\n if (hasRotation) {\n // If filters are necessary (rotation exists), create them\n // filters are bog-slow, so only create them if abbsolutely necessary\n // The following check doesn't account for skews (which don't exist\n // in the canvas spec (yet) anyway.\n // From excanvas\n var p0 = [x, y];\n var p1 = [x + dw, y];\n var p2 = [x, y + dh];\n var p3 = [x + dw, y + dh];\n applyTransform(p0, p0, m);\n applyTransform(p1, p1, m);\n applyTransform(p2, p2, m);\n applyTransform(p3, p3, m);\n var maxX = mathMax(p0[0], p1[0], p2[0], p3[0]);\n var maxY = mathMax(p0[1], p1[1], p2[1], p3[1]);\n var transformFilter = [];\n transformFilter.push('M11=', m[0] / scaleX, comma, 'M12=', m[2] / scaleY, comma, 'M21=', m[1] / scaleX, comma, 'M22=', m[3] / scaleY, comma, 'Dx=', round(x * scaleX + m[4]), comma, 'Dy=', round(y * scaleY + m[5]));\n vmlElStyle.padding = '0 ' + round(maxX) + 'px ' + round(maxY) + 'px 0'; // FIXME DXImageTransform 在 IE11 的兼容模式下不起作用\n\n vmlElStyle.filter = imageTransformPrefix + '.Matrix(' + transformFilter.join('') + ', SizingMethod=clip)';\n } else {\n if (m) {\n x = x * scaleX + m[4];\n y = y * scaleY + m[5];\n }\n\n vmlElStyle.filter = '';\n vmlElStyle.left = round(x) + 'px';\n vmlElStyle.top = round(y) + 'px';\n }\n\n var imageEl = this._imageEl;\n var cropEl = this._cropEl;\n\n if (!imageEl) {\n imageEl = vmlCore.doc.createElement('div');\n this._imageEl = imageEl;\n }\n\n var imageELStyle = imageEl.style;\n\n if (hasCrop) {\n // Needs know image original width and height\n if (!(ow && oh)) {\n var tmpImage = new Image();\n var self = this;\n\n tmpImage.onload = function () {\n tmpImage.onload = null;\n ow = tmpImage.width;\n oh = tmpImage.height; // Adjust image width and height to fit the ratio destinationSize / sourceSize\n\n imageELStyle.width = round(scaleX * ow * dw / sw) + 'px';\n imageELStyle.height = round(scaleY * oh * dh / sh) + 'px'; // Caching image original width, height and src\n\n self._imageWidth = ow;\n self._imageHeight = oh;\n self._imageSrc = image;\n };\n\n tmpImage.src = image;\n } else {\n imageELStyle.width = round(scaleX * ow * dw / sw) + 'px';\n imageELStyle.height = round(scaleY * oh * dh / sh) + 'px';\n }\n\n if (!cropEl) {\n cropEl = vmlCore.doc.createElement('div');\n cropEl.style.overflow = 'hidden';\n this._cropEl = cropEl;\n }\n\n var cropElStyle = cropEl.style;\n cropElStyle.width = round((dw + sx * dw / sw) * scaleX);\n cropElStyle.height = round((dh + sy * dh / sh) * scaleY);\n cropElStyle.filter = imageTransformPrefix + '.Matrix(Dx=' + -sx * dw / sw * scaleX + ',Dy=' + -sy * dh / sh * scaleY + ')';\n\n if (!cropEl.parentNode) {\n vmlEl.appendChild(cropEl);\n }\n\n if (imageEl.parentNode != cropEl) {\n cropEl.appendChild(imageEl);\n }\n } else {\n imageELStyle.width = round(scaleX * dw) + 'px';\n imageELStyle.height = round(scaleY * dh) + 'px';\n vmlEl.appendChild(imageEl);\n\n if (cropEl && cropEl.parentNode) {\n vmlEl.removeChild(cropEl);\n this._cropEl = null;\n }\n }\n\n var filterStr = '';\n var alpha = style.opacity;\n\n if (alpha < 1) {\n filterStr += '.Alpha(opacity=' + round(alpha * 100) + ') ';\n }\n\n filterStr += imageTransformPrefix + '.AlphaImageLoader(src=' + image + ', SizingMethod=scale)';\n imageELStyle.filter = filterStr;\n vmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2); // Append to root\n\n append(vmlRoot, vmlEl); // Text\n\n if (style.text != null) {\n this.drawRectText(vmlRoot, this.getBoundingRect());\n }\n };\n\n ZImage.prototype.onRemove = function (vmlRoot) {\n remove(vmlRoot, this._vmlEl);\n this._vmlEl = null;\n this._cropEl = null;\n this._imageEl = null;\n this.removeRectText(vmlRoot);\n };\n\n ZImage.prototype.onAdd = function (vmlRoot) {\n append(vmlRoot, this._vmlEl);\n this.appendRectText(vmlRoot);\n };\n /***************************************************\n * TEXT\n **************************************************/\n\n\n var DEFAULT_STYLE_NORMAL = 'normal';\n var fontStyleCache = {};\n var fontStyleCacheCount = 0;\n var MAX_FONT_CACHE_SIZE = 100;\n var fontEl = document.createElement('div');\n\n var getFontStyle = function (fontString) {\n var fontStyle = fontStyleCache[fontString];\n\n if (!fontStyle) {\n // Clear cache\n if (fontStyleCacheCount > MAX_FONT_CACHE_SIZE) {\n fontStyleCacheCount = 0;\n fontStyleCache = {};\n }\n\n var style = fontEl.style;\n var fontFamily;\n\n try {\n style.font = fontString;\n fontFamily = style.fontFamily.split(',')[0];\n } catch (e) {}\n\n fontStyle = {\n style: style.fontStyle || DEFAULT_STYLE_NORMAL,\n variant: style.fontVariant || DEFAULT_STYLE_NORMAL,\n weight: style.fontWeight || DEFAULT_STYLE_NORMAL,\n size: parseFloat(style.fontSize || 12) | 0,\n family: fontFamily || 'Microsoft YaHei'\n };\n fontStyleCache[fontString] = fontStyle;\n fontStyleCacheCount++;\n }\n\n return fontStyle;\n };\n\n var textMeasureEl; // Overwrite measure text method\n\n textContain.$override('measureText', function (text, textFont) {\n var doc = vmlCore.doc;\n\n if (!textMeasureEl) {\n textMeasureEl = doc.createElement('div');\n textMeasureEl.style.cssText = 'position:absolute;top:-20000px;left:0;' + 'padding:0;margin:0;border:none;white-space:pre;';\n vmlCore.doc.body.appendChild(textMeasureEl);\n }\n\n try {\n textMeasureEl.style.font = textFont;\n } catch (ex) {// Ignore failures to set to invalid font.\n }\n\n textMeasureEl.innerHTML = ''; // Don't use innerHTML or innerText because they allow markup/whitespace.\n\n textMeasureEl.appendChild(doc.createTextNode(text));\n return {\n width: textMeasureEl.offsetWidth\n };\n });\n var tmpRect = new BoundingRect();\n\n var drawRectText = function (vmlRoot, rect, textRect, fromTextEl) {\n var style = this.style; // Optimize, avoid normalize every time.\n\n this.__dirty && textHelper.normalizeTextStyle(style, true);\n var text = style.text; // Convert to string\n\n text != null && (text += '');\n\n if (!text) {\n return;\n } // Convert rich text to plain text. Rich text is not supported in\n // IE8-, but tags in rich text template will be removed.\n\n\n if (style.rich) {\n var contentBlock = textContain.parseRichText(text, style);\n text = [];\n\n for (var i = 0; i < contentBlock.lines.length; i++) {\n var tokens = contentBlock.lines[i].tokens;\n var textLine = [];\n\n for (var j = 0; j < tokens.length; j++) {\n textLine.push(tokens[j].text);\n }\n\n text.push(textLine.join(''));\n }\n\n text = text.join('\\n');\n }\n\n var x;\n var y;\n var align = style.textAlign;\n var verticalAlign = style.textVerticalAlign;\n var fontStyle = getFontStyle(style.font); // FIXME encodeHtmlAttribute ?\n\n var font = fontStyle.style + ' ' + fontStyle.variant + ' ' + fontStyle.weight + ' ' + fontStyle.size + 'px \"' + fontStyle.family + '\"';\n textRect = textRect || textContain.getBoundingRect(text, font, align, verticalAlign); // Transform rect to view space\n\n var m = this.transform; // Ignore transform for text in other element\n\n if (m && !fromTextEl) {\n tmpRect.copy(rect);\n tmpRect.applyTransform(m);\n rect = tmpRect;\n }\n\n if (!fromTextEl) {\n var textPosition = style.textPosition;\n var distance = style.textDistance; // Text position represented by coord\n\n if (textPosition instanceof Array) {\n x = rect.x + parsePercent(textPosition[0], rect.width);\n y = rect.y + parsePercent(textPosition[1], rect.height);\n align = align || 'left';\n } else {\n var res = textContain.adjustTextPositionOnRect(textPosition, rect, distance);\n x = res.x;\n y = res.y; // Default align and baseline when has textPosition\n\n align = align || res.textAlign;\n verticalAlign = verticalAlign || res.textVerticalAlign;\n }\n } else {\n x = rect.x;\n y = rect.y;\n }\n\n x = textContain.adjustTextX(x, textRect.width, align);\n y = textContain.adjustTextY(y, textRect.height, verticalAlign); // Force baseline 'middle'\n\n y += textRect.height / 2; // var fontSize = fontStyle.size;\n // 1.75 is an arbitrary number, as there is no info about the text baseline\n // switch (baseline) {\n // case 'hanging':\n // case 'top':\n // y += fontSize / 1.75;\n // break;\n // case 'middle':\n // break;\n // default:\n // // case null:\n // // case 'alphabetic':\n // // case 'ideographic':\n // // case 'bottom':\n // y -= fontSize / 2.25;\n // break;\n // }\n // switch (align) {\n // case 'left':\n // break;\n // case 'center':\n // x -= textRect.width / 2;\n // break;\n // case 'right':\n // x -= textRect.width;\n // break;\n // case 'end':\n // align = elementStyle.direction == 'ltr' ? 'right' : 'left';\n // break;\n // case 'start':\n // align = elementStyle.direction == 'rtl' ? 'right' : 'left';\n // break;\n // default:\n // align = 'left';\n // }\n\n var createNode = vmlCore.createNode;\n var textVmlEl = this._textVmlEl;\n var pathEl;\n var textPathEl;\n var skewEl;\n\n if (!textVmlEl) {\n textVmlEl = createNode('line');\n pathEl = createNode('path');\n textPathEl = createNode('textpath');\n skewEl = createNode('skew'); // FIXME Why here is not cammel case\n // Align 'center' seems wrong\n\n textPathEl.style['v-text-align'] = 'left';\n initRootElStyle(textVmlEl);\n pathEl.textpathok = true;\n textPathEl.on = true;\n textVmlEl.from = '0 0';\n textVmlEl.to = '1000 0.05';\n append(textVmlEl, skewEl);\n append(textVmlEl, pathEl);\n append(textVmlEl, textPathEl);\n this._textVmlEl = textVmlEl;\n } else {\n // 这里是在前面 appendChild 保证顺序的前提下\n skewEl = textVmlEl.firstChild;\n pathEl = skewEl.nextSibling;\n textPathEl = pathEl.nextSibling;\n }\n\n var coords = [x, y];\n var textVmlElStyle = textVmlEl.style; // Ignore transform for text in other element\n\n if (m && fromTextEl) {\n applyTransform(coords, coords, m);\n skewEl.on = true;\n skewEl.matrix = m[0].toFixed(3) + comma + m[2].toFixed(3) + comma + m[1].toFixed(3) + comma + m[3].toFixed(3) + ',0,0'; // Text position\n\n skewEl.offset = (round(coords[0]) || 0) + ',' + (round(coords[1]) || 0); // Left top point as origin\n\n skewEl.origin = '0 0';\n textVmlElStyle.left = '0px';\n textVmlElStyle.top = '0px';\n } else {\n skewEl.on = false;\n textVmlElStyle.left = round(x) + 'px';\n textVmlElStyle.top = round(y) + 'px';\n }\n\n textPathEl.string = encodeHtmlAttribute(text); // TODO\n\n try {\n textPathEl.style.font = font;\n } // Error font format\n catch (e) {}\n\n updateFillAndStroke(textVmlEl, 'fill', {\n fill: style.textFill,\n opacity: style.opacity\n }, this);\n updateFillAndStroke(textVmlEl, 'stroke', {\n stroke: style.textStroke,\n opacity: style.opacity,\n lineDash: style.lineDash\n }, this);\n textVmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2); // Attached to root\n\n append(vmlRoot, textVmlEl);\n };\n\n var removeRectText = function (vmlRoot) {\n remove(vmlRoot, this._textVmlEl);\n this._textVmlEl = null;\n };\n\n var appendRectText = function (vmlRoot) {\n append(vmlRoot, this._textVmlEl);\n };\n\n var list = [RectText, Displayable, ZImage, Path, Text]; // In case Displayable has been mixed in RectText\n\n for (var i = 0; i < list.length; i++) {\n var proto = list[i].prototype;\n proto.drawRectText = drawRectText;\n proto.removeRectText = removeRectText;\n proto.appendRectText = appendRectText;\n }\n\n Text.prototype.brushVML = function (vmlRoot) {\n var style = this.style;\n\n if (style.text != null) {\n this.drawRectText(vmlRoot, {\n x: style.x || 0,\n y: style.y || 0,\n width: 0,\n height: 0\n }, this.getBoundingRect(), true);\n } else {\n this.removeRectText(vmlRoot);\n }\n };\n\n Text.prototype.onRemove = function (vmlRoot) {\n this.removeRectText(vmlRoot);\n };\n\n Text.prototype.onAdd = function (vmlRoot) {\n this.appendRectText(vmlRoot);\n };\n}","var polygonContain = require(\"zrender/lib/contain/polygon\");\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\n// Key of the first level is brushType: `line`, `rect`, `polygon`.\n// Key of the second level is chart element type: `point`, `rect`.\n// See moudule:echarts/component/helper/BrushController\n// function param:\n// {Object} itemLayout fetch from data.getItemLayout(dataIndex)\n// {Object} selectors {point: selector, rect: selector, ...}\n// {Object} area {range: [[], [], ..], boudingRect}\n// function return:\n// {boolean} Whether in the given brush.\nvar selector = {\n lineX: getLineSelectors(0),\n lineY: getLineSelectors(1),\n rect: {\n point: function (itemLayout, selectors, area) {\n return itemLayout && area.boundingRect.contain(itemLayout[0], itemLayout[1]);\n },\n rect: function (itemLayout, selectors, area) {\n return itemLayout && area.boundingRect.intersect(itemLayout);\n }\n },\n polygon: {\n point: function (itemLayout, selectors, area) {\n return itemLayout && area.boundingRect.contain(itemLayout[0], itemLayout[1]) && polygonContain.contain(area.range, itemLayout[0], itemLayout[1]);\n },\n rect: function (itemLayout, selectors, area) {\n var points = area.range;\n\n if (!itemLayout || points.length <= 1) {\n return false;\n }\n\n var x = itemLayout.x;\n var y = itemLayout.y;\n var width = itemLayout.width;\n var height = itemLayout.height;\n var p = points[0];\n\n if (polygonContain.contain(points, x, y) || polygonContain.contain(points, x + width, y) || polygonContain.contain(points, x, y + height) || polygonContain.contain(points, x + width, y + height) || BoundingRect.create(itemLayout).contain(p[0], p[1]) || lineIntersectPolygon(x, y, x + width, y, points) || lineIntersectPolygon(x, y, x, y + height, points) || lineIntersectPolygon(x + width, y, x + width, y + height, points) || lineIntersectPolygon(x, y + height, x + width, y + height, points)) {\n return true;\n }\n }\n }\n};\n\nfunction getLineSelectors(xyIndex) {\n var xy = ['x', 'y'];\n var wh = ['width', 'height'];\n return {\n point: function (itemLayout, selectors, area) {\n if (itemLayout) {\n var range = area.range;\n var p = itemLayout[xyIndex];\n return inLineRange(p, range);\n }\n },\n rect: function (itemLayout, selectors, area) {\n if (itemLayout) {\n var range = area.range;\n var layoutRange = [itemLayout[xy[xyIndex]], itemLayout[xy[xyIndex]] + itemLayout[wh[xyIndex]]];\n layoutRange[1] < layoutRange[0] && layoutRange.reverse();\n return inLineRange(layoutRange[0], range) || inLineRange(layoutRange[1], range) || inLineRange(range[0], layoutRange) || inLineRange(range[1], layoutRange);\n }\n }\n };\n}\n\nfunction inLineRange(p, range) {\n return range[0] <= p && p <= range[1];\n}\n\nfunction lineIntersectPolygon(lx, ly, l2x, l2y, points) {\n for (var i = 0, p2 = points[points.length - 1]; i < points.length; i++) {\n var p = points[i];\n\n if (lineIntersect(lx, ly, l2x, l2y, p[0], p[1], p2[0], p2[1])) {\n return true;\n }\n\n p2 = p;\n }\n} // Code from with some fix.\n// See \n\n\nfunction lineIntersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y) {\n var delta = determinant(a2x - a1x, b1x - b2x, a2y - a1y, b1y - b2y);\n\n if (nearZero(delta)) {\n // parallel\n return false;\n }\n\n var namenda = determinant(b1x - a1x, b1x - b2x, b1y - a1y, b1y - b2y) / delta;\n\n if (namenda < 0 || namenda > 1) {\n return false;\n }\n\n var miu = determinant(a2x - a1x, b1x - a1x, a2y - a1y, b1y - a1y) / delta;\n\n if (miu < 0 || miu > 1) {\n return false;\n }\n\n return true;\n}\n\nfunction nearZero(val) {\n return val <= 1e-6 && val >= -1e-6;\n}\n\nfunction determinant(v1, v2, v3, v4) {\n return v1 * v4 - v2 * v3;\n}\n\nvar _default = selector;\nmodule.exports = _default;","var MarkerModel = require(\"./MarkerModel\");\n\nvar _default = MarkerModel.extend({\n type: 'markPoint',\n defaultOption: {\n zlevel: 0,\n z: 5,\n symbol: 'pin',\n symbolSize: 50,\n //symbolRotate: 0,\n //symbolOffset: [0, 0]\n tooltip: {\n trigger: 'item'\n },\n label: {\n normal: {\n show: true,\n position: 'inside'\n },\n emphasis: {\n show: true\n }\n },\n itemStyle: {\n normal: {\n borderWidth: 2\n }\n }\n }\n});\n\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\nvar _default = echarts.extendComponentModel({\n type: 'tooltip',\n dependencies: ['axisPointer'],\n defaultOption: {\n zlevel: 0,\n z: 8,\n show: true,\n // tooltip主体内容\n showContent: true,\n // 'trigger' only works on coordinate system.\n // 'item' | 'axis' | 'none'\n trigger: 'item',\n // 'click' | 'mousemove' | 'none'\n triggerOn: 'mousemove|click',\n alwaysShowContent: false,\n displayMode: 'single',\n // 'single' | 'multipleByCoordSys'\n // 位置 {Array} | {Function}\n // position: null\n // Consider triggered from axisPointer handle, verticalAlign should be 'middle'\n // align: null,\n // verticalAlign: null,\n // 是否约束 content 在 viewRect 中。默认 false 是为了兼容以前版本。\n confine: false,\n // 内容格式器:{string}(Template) ¦ {Function}\n // formatter: null\n showDelay: 0,\n // 隐藏延迟,单位ms\n hideDelay: 100,\n // 动画变换时间,单位s\n transitionDuration: 0.4,\n enterable: false,\n // 提示背景颜色,默认为透明度为0.7的黑色\n backgroundColor: 'rgba(50,50,50,0.7)',\n // 提示边框颜色\n borderColor: '#333',\n // 提示边框圆角,单位px,默认为4\n borderRadius: 4,\n // 提示边框线宽,单位px,默认为0(无边框)\n borderWidth: 0,\n // 提示内边距,单位px,默认各方向内边距为5,\n // 接受数组分别设定上右下左边距,同css\n padding: 5,\n // Extra css text\n extraCssText: '',\n // 坐标轴指示器,坐标轴触发有效\n axisPointer: {\n // 默认为直线\n // 可选为:'line' | 'shadow' | 'cross'\n type: 'line',\n // type 为 line 的时候有效,指定 tooltip line 所在的轴,可选\n // 可选 'x' | 'y' | 'angle' | 'radius' | 'auto'\n // 默认 'auto',会选择类型为 cateogry 的轴,对于双数值轴,笛卡尔坐标系会默认选择 x 轴\n // 极坐标系会默认选择 angle 轴\n axis: 'auto',\n animation: 'auto',\n animationDurationUpdate: 200,\n animationEasingUpdate: 'exponentialOut',\n crossStyle: {\n color: '#999',\n width: 1,\n type: 'dashed',\n // TODO formatter\n textStyle: {} // lineStyle and shadowStyle should not be specified here,\n // otherwise it will always override those styles on option.axisPointer.\n\n }\n },\n textStyle: {\n color: '#fff',\n fontSize: 14\n }\n }\n});\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar Axis = require(\"../Axis\");\n\nfunction AngleAxis(scale, angleExtent) {\n angleExtent = angleExtent || [0, 360];\n Axis.call(this, 'angle', scale, angleExtent);\n /**\n * Axis type\n * - 'category'\n * - 'value'\n * - 'time'\n * - 'log'\n * @type {string}\n */\n\n this.type = 'category';\n}\n\nAngleAxis.prototype = {\n constructor: AngleAxis,\n\n /**\n * @override\n */\n pointToData: function (point, clamp) {\n return this.polar.pointToData(point, clamp)[this.dim === 'radius' ? 0 : 1];\n },\n dataToAngle: Axis.prototype.dataToCoord,\n angleToData: Axis.prototype.coordToData\n};\nzrUtil.inherits(AngleAxis, Axis);\nvar _default = AngleAxis;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nfunction dataToCoordSize(dataSize, dataItem) {\n // dataItem is necessary in log axis.\n dataItem = dataItem || [0, 0];\n return zrUtil.map(['x', 'y'], function (dim, dimIdx) {\n var axis = this.getAxis(dim);\n var val = dataItem[dimIdx];\n var halfSize = dataSize[dimIdx] / 2;\n return axis.type === 'category' ? axis.getBandWidth() : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize));\n }, this);\n}\n\nfunction _default(coordSys) {\n var rect = coordSys.grid.getRect();\n return {\n coordSys: {\n // The name exposed to user is always 'cartesian2d' but not 'grid'.\n type: 'cartesian2d',\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height\n },\n api: {\n coord: zrUtil.bind(coordSys.dataToPoint, coordSys),\n size: zrUtil.bind(dataToCoordSize, coordSys)\n }\n };\n}\n\nmodule.exports = _default;","var echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nrequire(\"../coord/cartesian/Grid\");\n\nrequire(\"./bar/PictorialBarSeries\");\n\nrequire(\"./bar/PictorialBarView\");\n\nvar barLayoutGrid = require(\"../layout/barGrid\");\n\nvar visualSymbol = require(\"../visual/symbol\");\n\nrequire(\"../component/gridSimple\");\n\n// In case developer forget to include grid component\necharts.registerLayout(zrUtil.curry(barLayoutGrid, 'pictorialBar'));\necharts.registerVisual(zrUtil.curry(visualSymbol, 'pictorialBar', 'roundRect', null));","var echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar visualSolution = require(\"../../visual/visualSolution\");\n\nvar VisualMapping = require(\"../../visual/VisualMapping\");\n\necharts.registerVisual(echarts.PRIORITY.VISUAL.COMPONENT, function (ecModel) {\n ecModel.eachComponent('visualMap', function (visualMapModel) {\n processSingleVisualMap(visualMapModel, ecModel);\n });\n prepareVisualMeta(ecModel);\n});\n\nfunction processSingleVisualMap(visualMapModel, ecModel) {\n visualMapModel.eachTargetSeries(function (seriesModel) {\n var data = seriesModel.getData();\n visualSolution.applyVisual(visualMapModel.stateList, visualMapModel.targetVisuals, data, visualMapModel.getValueState, visualMapModel, visualMapModel.getDataDimension(data));\n });\n} // Only support color.\n\n\nfunction prepareVisualMeta(ecModel) {\n ecModel.eachSeries(function (seriesModel) {\n var data = seriesModel.getData();\n var visualMetaList = [];\n ecModel.eachComponent('visualMap', function (visualMapModel) {\n if (visualMapModel.isTargetSeries(seriesModel)) {\n var visualMeta = visualMapModel.getVisualMeta(zrUtil.bind(getColorVisual, null, seriesModel, visualMapModel)) || {\n stops: [],\n outerColors: []\n };\n visualMeta.dimension = visualMapModel.getDataDimension(data);\n visualMetaList.push(visualMeta);\n }\n }); // console.log(JSON.stringify(visualMetaList.map(a => a.stops)));\n\n seriesModel.getData().setVisual('visualMeta', visualMetaList);\n });\n} // FIXME\n// performance and export for heatmap?\n// value can be Infinity or -Infinity\n\n\nfunction getColorVisual(seriesModel, visualMapModel, value, valueState) {\n var mappings = visualMapModel.targetVisuals[valueState];\n var visualTypes = VisualMapping.prepareVisualTypes(mappings);\n var resultVisual = {\n color: seriesModel.getData().getVisual('color') // default color.\n\n };\n\n for (var i = 0, len = visualTypes.length; i < len; i++) {\n var type = visualTypes[i];\n var mapping = mappings[type === 'opacity' ? '__alphaForOpacity' : type];\n mapping && mapping.applyVisual(value, getVisual, setVisual);\n }\n\n return resultVisual.color;\n\n function getVisual(key) {\n return resultVisual[key];\n }\n\n function setVisual(key, value) {\n resultVisual[key] = value;\n }\n}","var opacityAccessPath = ['lineStyle', 'normal', 'opacity'];\n\nfunction _default(ecModel) {\n ecModel.eachSeriesByType('parallel', function (seriesModel) {\n var itemStyleModel = seriesModel.getModel('itemStyle.normal');\n var lineStyleModel = seriesModel.getModel('lineStyle.normal');\n var globalColors = ecModel.get('color');\n var color = lineStyleModel.get('color') || itemStyleModel.get('color') || globalColors[seriesModel.seriesIndex % globalColors.length];\n var inactiveOpacity = seriesModel.get('inactiveOpacity');\n var activeOpacity = seriesModel.get('activeOpacity');\n var lineStyle = seriesModel.getModel('lineStyle.normal').getLineStyle();\n var coordSys = seriesModel.coordinateSystem;\n var data = seriesModel.getData();\n var opacityMap = {\n normal: lineStyle.opacity,\n active: activeOpacity,\n inactive: inactiveOpacity\n };\n coordSys.eachActiveState(data, function (activeState, dataIndex) {\n var itemModel = data.getItemModel(dataIndex);\n var opacity = opacityMap[activeState];\n\n if (activeState === 'normal') {\n var itemOpacity = itemModel.get(opacityAccessPath, true);\n itemOpacity != null && (opacity = itemOpacity);\n }\n\n data.setItemVisual(dataIndex, 'opacity', opacity);\n });\n data.setVisual('color', color);\n });\n}\n\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\nvar SymbolDraw = require(\"../helper/SymbolDraw\");\n\nvar LargeSymbolDraw = require(\"../helper/LargeSymbolDraw\");\n\necharts.extendChartView({\n type: 'scatter',\n init: function () {\n this._normalSymbolDraw = new SymbolDraw();\n this._largeSymbolDraw = new LargeSymbolDraw();\n },\n render: function (seriesModel, ecModel, api) {\n var data = seriesModel.getData();\n var largeSymbolDraw = this._largeSymbolDraw;\n var normalSymbolDraw = this._normalSymbolDraw;\n var group = this.group;\n var symbolDraw = seriesModel.get('large') && data.count() > seriesModel.get('largeThreshold') ? largeSymbolDraw : normalSymbolDraw;\n this._symbolDraw = symbolDraw;\n symbolDraw.updateData(data);\n group.add(symbolDraw.group);\n group.remove(symbolDraw === largeSymbolDraw ? normalSymbolDraw.group : largeSymbolDraw.group);\n },\n updateLayout: function (seriesModel) {\n this._symbolDraw.updateLayout(seriesModel);\n },\n remove: function (ecModel, api) {\n this._symbolDraw && this._symbolDraw.remove(api, true);\n },\n dispose: function () {}\n});","var Path = require(\"../Path\");\n\nvar vec2 = require(\"../../core/vector\");\n\nvar _curve = require(\"../../core/curve\");\n\nvar quadraticSubdivide = _curve.quadraticSubdivide;\nvar cubicSubdivide = _curve.cubicSubdivide;\nvar quadraticAt = _curve.quadraticAt;\nvar cubicAt = _curve.cubicAt;\nvar quadraticDerivativeAt = _curve.quadraticDerivativeAt;\nvar cubicDerivativeAt = _curve.cubicDerivativeAt;\n\n/**\n * 贝塞尔曲线\n * @module zrender/shape/BezierCurve\n */\nvar out = [];\n\nfunction someVectorAt(shape, t, isTangent) {\n var cpx2 = shape.cpx2;\n var cpy2 = shape.cpy2;\n\n if (cpx2 === null || cpy2 === null) {\n return [(isTangent ? cubicDerivativeAt : cubicAt)(shape.x1, shape.cpx1, shape.cpx2, shape.x2, t), (isTangent ? cubicDerivativeAt : cubicAt)(shape.y1, shape.cpy1, shape.cpy2, shape.y2, t)];\n } else {\n return [(isTangent ? quadraticDerivativeAt : quadraticAt)(shape.x1, shape.cpx1, shape.x2, t), (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.y1, shape.cpy1, shape.y2, t)];\n }\n}\n\nvar _default = Path.extend({\n type: 'bezier-curve',\n shape: {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n cpx1: 0,\n cpy1: 0,\n // cpx2: 0,\n // cpy2: 0\n // Curve show percent, for animating\n percent: 1\n },\n style: {\n stroke: '#000',\n fill: null\n },\n buildPath: function (ctx, shape) {\n var x1 = shape.x1;\n var y1 = shape.y1;\n var x2 = shape.x2;\n var y2 = shape.y2;\n var cpx1 = shape.cpx1;\n var cpy1 = shape.cpy1;\n var cpx2 = shape.cpx2;\n var cpy2 = shape.cpy2;\n var percent = shape.percent;\n\n if (percent === 0) {\n return;\n }\n\n ctx.moveTo(x1, y1);\n\n if (cpx2 == null || cpy2 == null) {\n if (percent < 1) {\n quadraticSubdivide(x1, cpx1, x2, percent, out);\n cpx1 = out[1];\n x2 = out[2];\n quadraticSubdivide(y1, cpy1, y2, percent, out);\n cpy1 = out[1];\n y2 = out[2];\n }\n\n ctx.quadraticCurveTo(cpx1, cpy1, x2, y2);\n } else {\n if (percent < 1) {\n cubicSubdivide(x1, cpx1, cpx2, x2, percent, out);\n cpx1 = out[1];\n cpx2 = out[2];\n x2 = out[3];\n cubicSubdivide(y1, cpy1, cpy2, y2, percent, out);\n cpy1 = out[1];\n cpy2 = out[2];\n y2 = out[3];\n }\n\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n }\n },\n\n /**\n * Get point at percent\n * @param {number} t\n * @return {Array.}\n */\n pointAt: function (t) {\n return someVectorAt(this.shape, t, false);\n },\n\n /**\n * Get tangent at percent\n * @param {number} t\n * @return {Array.}\n */\n tangentAt: function (t) {\n var p = someVectorAt(this.shape, t, true);\n return vec2.normalize(p, p);\n }\n});\n\nmodule.exports = _default;","var _circularLayoutHelper = require(\"./circularLayoutHelper\");\n\nvar circularLayout = _circularLayoutHelper.circularLayout;\n\nfunction _default(ecModel) {\n ecModel.eachSeriesByType('graph', function (seriesModel) {\n if (seriesModel.get('layout') === 'circular') {\n circularLayout(seriesModel);\n }\n });\n}\n\nmodule.exports = _default;","var completeDimensions = require(\"../../data/helper/completeDimensions\");\n\nvar SeriesModel = require(\"../../model/Series\");\n\nvar List = require(\"../../data/List\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _format = require(\"../../util/format\");\n\nvar encodeHTML = _format.encodeHTML;\n\nvar nest = require(\"../../util/array/nest\");\n\n/**\n * @file Define the themeRiver view's series model\n * @author Deqing Li(annong035@gmail.com)\n */\nvar DATA_NAME_INDEX = 2;\nvar ThemeRiverSeries = SeriesModel.extend({\n type: 'series.themeRiver',\n dependencies: ['singleAxis'],\n\n /**\n * @readOnly\n * @type {module:zrender/core/util#HashMap}\n */\n nameMap: null,\n\n /**\n * @override\n */\n init: function (option) {\n ThemeRiverSeries.superApply(this, 'init', arguments); // Put this function here is for the sake of consistency of code style.\n // Enable legend selection for each data item\n // Use a function instead of direct access because data reference may changed\n\n this.legendDataProvider = function () {\n return this.getRawData();\n };\n },\n\n /**\n * If there is no value of a certain point in the time for some event,set it value to 0.\n *\n * @param {Array} data initial data in the option\n * @return {Array}\n */\n fixData: function (data) {\n var rawDataLength = data.length; // grouped data by name\n\n var dataByName = nest().key(function (dataItem) {\n return dataItem[2];\n }).entries(data); // data group in each layer\n\n var layData = zrUtil.map(dataByName, function (d) {\n return {\n name: d.key,\n dataList: d.values\n };\n });\n var layerNum = layData.length;\n var largestLayer = -1;\n var index = -1;\n\n for (var i = 0; i < layerNum; ++i) {\n var len = layData[i].dataList.length;\n\n if (len > largestLayer) {\n largestLayer = len;\n index = i;\n }\n }\n\n for (var k = 0; k < layerNum; ++k) {\n if (k === index) {\n continue;\n }\n\n var name = layData[k].name;\n\n for (var j = 0; j < largestLayer; ++j) {\n var timeValue = layData[index].dataList[j][0];\n var length = layData[k].dataList.length;\n var keyIndex = -1;\n\n for (var l = 0; l < length; ++l) {\n var value = layData[k].dataList[l][0];\n\n if (value === timeValue) {\n keyIndex = l;\n break;\n }\n }\n\n if (keyIndex === -1) {\n data[rawDataLength] = [];\n data[rawDataLength][0] = timeValue;\n data[rawDataLength][1] = 0;\n data[rawDataLength][2] = name;\n rawDataLength++;\n }\n }\n }\n\n return data;\n },\n\n /**\n * @override\n * @param {Object} option the initial option that user gived\n * @param {module:echarts/model/Model} ecModel the model object for themeRiver option\n * @return {module:echarts/data/List}\n */\n getInitialData: function (option, ecModel) {\n var dimensions = [];\n var singleAxisModel = ecModel.queryComponents({\n mainType: 'singleAxis',\n index: this.get('singleAxisIndex'),\n id: this.get('singleAxisId')\n })[0];\n var axisType = singleAxisModel.get('type');\n dimensions = [{\n name: 'time',\n // FIXME common?\n type: axisType === 'category' ? 'ordinal' : axisType === 'time' ? 'time' : 'float'\n }, {\n name: 'value',\n type: 'float'\n }, {\n name: 'name',\n type: 'ordinal'\n }]; // filter the data item with the value of label is undefined\n\n var filterData = zrUtil.filter(option.data, function (dataItem) {\n return dataItem[2] !== undefined;\n });\n var data = this.fixData(filterData || []);\n var nameList = [];\n var nameMap = this.nameMap = zrUtil.createHashMap();\n var count = 0;\n\n for (var i = 0; i < data.length; ++i) {\n nameList.push(data[i][DATA_NAME_INDEX]);\n\n if (!nameMap.get(data[i][DATA_NAME_INDEX])) {\n nameMap.set(data[i][DATA_NAME_INDEX], count);\n count++;\n }\n }\n\n dimensions = completeDimensions(dimensions, data);\n var list = new List(dimensions, this);\n list.initData(data, nameList);\n return list;\n },\n\n /**\n * Used by single coordinate\n *\n * @param {string} axisDim the dimension for single coordinate\n * @return {Array. } specified dimensions on the axis.\n */\n coordDimToDataDim: function (axisDim) {\n return ['time'];\n },\n\n /**\n * The raw data is divided into multiple layers and each layer\n * has same name.\n *\n * @return {Array.>}\n */\n getLayerSeries: function () {\n var data = this.getData();\n var lenCount = data.count();\n var indexArr = [];\n\n for (var i = 0; i < lenCount; ++i) {\n indexArr[i] = i;\n } // data group by name\n\n\n var dataByName = nest().key(function (index) {\n return data.get('name', index);\n }).entries(indexArr);\n var layerSeries = zrUtil.map(dataByName, function (d) {\n return {\n name: d.key,\n indices: d.values\n };\n });\n\n for (var j = 0; j < layerSeries.length; ++j) {\n layerSeries[j].indices.sort(comparer);\n }\n\n function comparer(index1, index2) {\n return data.get('time', index1) - data.get('time', index2);\n }\n\n return layerSeries;\n },\n\n /**\n * Get data indices for show tooltip content\n *\n * @param {Array.|string} dim single coordinate dimension\n * @param {number} value axis value\n * @param {module:echarts/coord/single/SingleAxis} baseAxis single Axis used\n * the themeRiver.\n * @return {Object} {dataIndices, nestestValue}\n */\n getAxisTooltipData: function (dim, value, baseAxis) {\n if (!zrUtil.isArray(dim)) {\n dim = dim ? [dim] : [];\n }\n\n var data = this.getData();\n var layerSeries = this.getLayerSeries();\n var indices = [];\n var layerNum = layerSeries.length;\n var nestestValue;\n\n for (var i = 0; i < layerNum; ++i) {\n var minDist = Number.MAX_VALUE;\n var nearestIdx = -1;\n var pointNum = layerSeries[i].indices.length;\n\n for (var j = 0; j < pointNum; ++j) {\n var theValue = data.get(dim[0], layerSeries[i].indices[j]);\n var dist = Math.abs(theValue - value);\n\n if (dist <= minDist) {\n nestestValue = theValue;\n minDist = dist;\n nearestIdx = layerSeries[i].indices[j];\n }\n }\n\n indices.push(nearestIdx);\n }\n\n return {\n dataIndices: indices,\n nestestValue: nestestValue\n };\n },\n\n /**\n * @override\n * @param {number} dataIndex index of data\n */\n formatTooltip: function (dataIndex) {\n var data = this.getData();\n var htmlName = data.get('name', dataIndex);\n var htmlValue = data.get('value', dataIndex);\n\n if (isNaN(htmlValue) || htmlValue == null) {\n htmlValue = '-';\n }\n\n return encodeHTML(htmlName + ' : ' + htmlValue);\n },\n defaultOption: {\n zlevel: 0,\n z: 2,\n coordinateSystem: 'singleAxis',\n // gap in axis's orthogonal orientation\n boundaryGap: ['10%', '10%'],\n // legendHoverLink: true,\n singleAxisIndex: 0,\n animationEasing: 'linear',\n label: {\n normal: {\n margin: 4,\n textAlign: 'right',\n show: true,\n position: 'left',\n color: '#000',\n fontSize: 11\n },\n emphasis: {\n show: true\n }\n }\n }\n});\nvar _default = ThemeRiverSeries;\nmodule.exports = _default;","var _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar echarts = require(\"../../echarts\");\n\nvar LineDraw = require(\"../helper/LineDraw\");\n\nvar EffectLine = require(\"../helper/EffectLine\");\n\nvar Line = require(\"../helper/Line\");\n\nvar Polyline = require(\"../helper/Polyline\");\n\nvar EffectPolyline = require(\"../helper/EffectPolyline\");\n\nvar LargeLineDraw = require(\"../helper/LargeLineDraw\");\n\nvar _default = echarts.extendChartView({\n type: 'lines',\n init: function () {},\n render: function (seriesModel, ecModel, api) {\n var data = seriesModel.getData();\n var lineDraw = this._lineDraw;\n var hasEffect = seriesModel.get('effect.show');\n var isPolyline = seriesModel.get('polyline');\n var isLarge = seriesModel.get('large') && data.count() >= seriesModel.get('largeThreshold');\n\n if (hasEffect !== this._hasEffet || isPolyline !== this._isPolyline || isLarge !== this._isLarge) {\n if (lineDraw) {\n lineDraw.remove();\n }\n\n lineDraw = this._lineDraw = isLarge ? new LargeLineDraw() : new LineDraw(isPolyline ? hasEffect ? EffectPolyline : Polyline : hasEffect ? EffectLine : Line);\n this._hasEffet = hasEffect;\n this._isPolyline = isPolyline;\n this._isLarge = isLarge;\n }\n\n var zlevel = seriesModel.get('zlevel');\n var trailLength = seriesModel.get('effect.trailLength');\n var zr = api.getZr(); // Avoid the drag cause ghost shadow\n // FIXME Better way ?\n // SVG doesn't support\n\n var isSvg = zr.painter.getType() === 'svg';\n\n if (!isSvg) {\n zr.painter.getLayer(zlevel).clear(true);\n } // Config layer with motion blur\n\n\n if (this._lastZlevel != null && !isSvg) {\n zr.configLayer(this._lastZlevel, {\n motionBlur: false\n });\n }\n\n if (hasEffect && trailLength) {\n if (!isSvg) {\n zr.configLayer(zlevel, {\n motionBlur: true,\n lastFrameAlpha: Math.max(Math.min(trailLength / 10 + 0.9, 1), 0)\n });\n }\n }\n\n this.group.add(lineDraw.group);\n lineDraw.updateData(data);\n this._lastZlevel = zlevel;\n },\n updateLayout: function (seriesModel, ecModel, api) {\n this._lineDraw.updateLayout(seriesModel); // Not use motion when dragging or zooming\n\n\n var zr = api.getZr();\n var isSvg = zr.painter.getType() === 'svg';\n\n if (!isSvg) {\n zr.painter.getLayer(this._lastZlevel).clear(true);\n }\n },\n remove: function (ecModel, api) {\n this._lineDraw && this._lineDraw.remove(api, true); // Clear motion when lineDraw is removed\n\n var zr = api.getZr();\n var isSvg = zr.painter.getType() === 'svg';\n\n if (!isSvg) {\n zr.painter.getLayer(this._lastZlevel).clear(true);\n }\n },\n dispose: function () {}\n});\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar DEFAULT_TOOLBOX_BTNS = ['rect', 'polygon', 'keep', 'clear'];\n\nfunction _default(option, isNew) {\n var brushComponents = option && option.brush;\n\n if (!zrUtil.isArray(brushComponents)) {\n brushComponents = brushComponents ? [brushComponents] : [];\n }\n\n if (!brushComponents.length) {\n return;\n }\n\n var brushComponentSpecifiedBtns = [];\n zrUtil.each(brushComponents, function (brushOpt) {\n var tbs = brushOpt.hasOwnProperty('toolbox') ? brushOpt.toolbox : [];\n\n if (tbs instanceof Array) {\n brushComponentSpecifiedBtns = brushComponentSpecifiedBtns.concat(tbs);\n }\n });\n var toolbox = option && option.toolbox;\n\n if (zrUtil.isArray(toolbox)) {\n toolbox = toolbox[0];\n }\n\n if (!toolbox) {\n toolbox = {\n feature: {}\n };\n option.toolbox = [toolbox];\n }\n\n var toolboxFeature = toolbox.feature || (toolbox.feature = {});\n var toolboxBrush = toolboxFeature.brush || (toolboxFeature.brush = {});\n var brushTypes = toolboxBrush.type || (toolboxBrush.type = []);\n brushTypes.push.apply(brushTypes, brushComponentSpecifiedBtns);\n removeDuplicate(brushTypes);\n\n if (isNew && !brushTypes.length) {\n brushTypes.push.apply(brushTypes, DEFAULT_TOOLBOX_BTNS);\n }\n}\n\nfunction removeDuplicate(arr) {\n var map = {};\n zrUtil.each(arr, function (val) {\n map[val] = 1;\n });\n arr.length = 0;\n zrUtil.each(map, function (flag, val) {\n arr.push(val);\n });\n}\n\nmodule.exports = _default;","require(\"../coord/cartesian/AxisModel\");\n\nrequire(\"./axis/CartesianAxisView\");","var util = require(\"./core/util\");\n\nvar env = require(\"./core/env\");\n\nvar Group = require(\"./container/Group\");\n\nvar timsort = require(\"./core/timsort\");\n\n/**\n * Storage内容仓库模块\n * @module zrender/Storage\n * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)\n * @author errorrik (errorrik@gmail.com)\n * @author pissang (https://github.com/pissang/)\n */\n// Use timsort because in most case elements are partially sorted\n// https://jsfiddle.net/pissang/jr4x7mdm/8/\nfunction shapeCompareFunc(a, b) {\n if (a.zlevel === b.zlevel) {\n if (a.z === b.z) {\n // if (a.z2 === b.z2) {\n // // FIXME Slow has renderidx compare\n // // http://stackoverflow.com/questions/20883421/sorting-in-javascript-should-every-compare-function-have-a-return-0-statement\n // // https://github.com/v8/v8/blob/47cce544a31ed5577ffe2963f67acb4144ee0232/src/js/array.js#L1012\n // return a.__renderidx - b.__renderidx;\n // }\n return a.z2 - b.z2;\n }\n\n return a.z - b.z;\n }\n\n return a.zlevel - b.zlevel;\n}\n/**\n * 内容仓库 (M)\n * @alias module:zrender/Storage\n * @constructor\n */\n\n\nvar Storage = function () {\n // jshint ignore:line\n this._roots = [];\n this._displayList = [];\n this._displayListLen = 0;\n};\n\nStorage.prototype = {\n constructor: Storage,\n\n /**\n * @param {Function} cb\n *\n */\n traverse: function (cb, context) {\n for (var i = 0; i < this._roots.length; i++) {\n this._roots[i].traverse(cb, context);\n }\n },\n\n /**\n * 返回所有图形的绘制队列\n * @param {boolean} [update=false] 是否在返回前更新该数组\n * @param {boolean} [includeIgnore=false] 是否包含 ignore 的数组, 在 update 为 true 的时候有效\n *\n * 详见{@link module:zrender/graphic/Displayable.prototype.updateDisplayList}\n * @return {Array.}\n */\n getDisplayList: function (update, includeIgnore) {\n includeIgnore = includeIgnore || false;\n\n if (update) {\n this.updateDisplayList(includeIgnore);\n }\n\n return this._displayList;\n },\n\n /**\n * 更新图形的绘制队列。\n * 每次绘制前都会调用,该方法会先深度优先遍历整个树,更新所有Group和Shape的变换并且把所有可见的Shape保存到数组中,\n * 最后根据绘制的优先级(zlevel > z > 插入顺序)排序得到绘制队列\n * @param {boolean} [includeIgnore=false] 是否包含 ignore 的数组\n */\n updateDisplayList: function (includeIgnore) {\n this._displayListLen = 0;\n var roots = this._roots;\n var displayList = this._displayList;\n\n for (var i = 0, len = roots.length; i < len; i++) {\n this._updateAndAddDisplayable(roots[i], null, includeIgnore);\n }\n\n displayList.length = this._displayListLen; // for (var i = 0, len = displayList.length; i < len; i++) {\n // displayList[i].__renderidx = i;\n // }\n // displayList.sort(shapeCompareFunc);\n\n env.canvasSupported && timsort(displayList, shapeCompareFunc);\n },\n _updateAndAddDisplayable: function (el, clipPaths, includeIgnore) {\n if (el.ignore && !includeIgnore) {\n return;\n }\n\n el.beforeUpdate();\n\n if (el.__dirty) {\n el.update();\n }\n\n el.afterUpdate();\n var userSetClipPath = el.clipPath;\n\n if (userSetClipPath) {\n // FIXME 效率影响\n if (clipPaths) {\n clipPaths = clipPaths.slice();\n } else {\n clipPaths = [];\n }\n\n var currentClipPath = userSetClipPath;\n var parentClipPath = el; // Recursively add clip path\n\n while (currentClipPath) {\n // clipPath 的变换是基于使用这个 clipPath 的元素\n currentClipPath.parent = parentClipPath;\n currentClipPath.updateTransform();\n clipPaths.push(currentClipPath);\n parentClipPath = currentClipPath;\n currentClipPath = currentClipPath.clipPath;\n }\n }\n\n if (el.isGroup) {\n var children = el._children;\n\n for (var i = 0; i < children.length; i++) {\n var child = children[i]; // Force to mark as dirty if group is dirty\n // FIXME __dirtyPath ?\n\n if (el.__dirty) {\n child.__dirty = true;\n }\n\n this._updateAndAddDisplayable(child, clipPaths, includeIgnore);\n } // Mark group clean here\n\n\n el.__dirty = false;\n } else {\n el.__clipPaths = clipPaths;\n this._displayList[this._displayListLen++] = el;\n }\n },\n\n /**\n * 添加图形(Shape)或者组(Group)到根节点\n * @param {module:zrender/Element} el\n */\n addRoot: function (el) {\n if (el.__storage === this) {\n return;\n }\n\n if (el instanceof Group) {\n el.addChildrenToStorage(this);\n }\n\n this.addToStorage(el);\n\n this._roots.push(el);\n },\n\n /**\n * 删除指定的图形(Shape)或者组(Group)\n * @param {string|Array.} [el] 如果为空清空整个Storage\n */\n delRoot: function (el) {\n if (el == null) {\n // 不指定el清空\n for (var i = 0; i < this._roots.length; i++) {\n var root = this._roots[i];\n\n if (root instanceof Group) {\n root.delChildrenFromStorage(this);\n }\n }\n\n this._roots = [];\n this._displayList = [];\n this._displayListLen = 0;\n return;\n }\n\n if (el instanceof Array) {\n for (var i = 0, l = el.length; i < l; i++) {\n this.delRoot(el[i]);\n }\n\n return;\n }\n\n var idx = util.indexOf(this._roots, el);\n\n if (idx >= 0) {\n this.delFromStorage(el);\n\n this._roots.splice(idx, 1);\n\n if (el instanceof Group) {\n el.delChildrenFromStorage(this);\n }\n }\n },\n addToStorage: function (el) {\n el.__storage = this;\n el.dirty(false);\n return this;\n },\n delFromStorage: function (el) {\n if (el) {\n el.__storage = null;\n }\n\n return this;\n },\n\n /**\n * 清空并且释放Storage\n */\n dispose: function () {\n this._renderList = this._roots = null;\n },\n displayableSortFunc: shapeCompareFunc\n};\nvar _default = Storage;\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar AxisBuilder = require(\"./AxisBuilder\");\n\nvar BrushController = require(\"../helper/BrushController\");\n\nvar brushHelper = require(\"../helper/brushHelper\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar elementList = ['axisLine', 'axisTickLabel', 'axisName'];\nvar AxisView = echarts.extendComponentView({\n type: 'parallelAxis',\n\n /**\n * @override\n */\n init: function (ecModel, api) {\n AxisView.superApply(this, 'init', arguments);\n /**\n * @type {module:echarts/component/helper/BrushController}\n */\n\n (this._brushController = new BrushController(api.getZr())).on('brush', zrUtil.bind(this._onBrush, this));\n },\n\n /**\n * @override\n */\n render: function (axisModel, ecModel, api, payload) {\n if (fromAxisAreaSelect(axisModel, ecModel, payload)) {\n return;\n }\n\n this.axisModel = axisModel;\n this.api = api;\n this.group.removeAll();\n var oldAxisGroup = this._axisGroup;\n this._axisGroup = new graphic.Group();\n this.group.add(this._axisGroup);\n\n if (!axisModel.get('show')) {\n return;\n }\n\n var coordSysModel = getCoordSysModel(axisModel, ecModel);\n var coordSys = coordSysModel.coordinateSystem;\n var areaSelectStyle = axisModel.getAreaSelectStyle();\n var areaWidth = areaSelectStyle.width;\n var dim = axisModel.axis.dim;\n var axisLayout = coordSys.getAxisLayout(dim);\n var builderOpt = zrUtil.extend({\n strokeContainThreshold: areaWidth\n }, axisLayout);\n var axisBuilder = new AxisBuilder(axisModel, builderOpt);\n zrUtil.each(elementList, axisBuilder.add, axisBuilder);\n\n this._axisGroup.add(axisBuilder.getGroup());\n\n this._refreshBrushController(builderOpt, areaSelectStyle, axisModel, coordSysModel, areaWidth, api);\n\n var animationModel = payload && payload.animation === false ? null : axisModel;\n graphic.groupTransition(oldAxisGroup, this._axisGroup, animationModel);\n },\n\n /**\n * @override\n */\n updateVisual: function (axisModel, ecModel, api, payload) {\n this._brushController && this._brushController.updateCovers(getCoverInfoList(axisModel));\n },\n _refreshBrushController: function (builderOpt, areaSelectStyle, axisModel, coordSysModel, areaWidth, api) {\n // After filtering, axis may change, select area needs to be update.\n var extent = axisModel.axis.getExtent();\n var extentLen = extent[1] - extent[0];\n var extra = Math.min(30, Math.abs(extentLen) * 0.1); // Arbitrary value.\n // width/height might be negative, which will be\n // normalized in BoundingRect.\n\n var rect = graphic.BoundingRect.create({\n x: extent[0],\n y: -areaWidth / 2,\n width: extentLen,\n height: areaWidth\n });\n rect.x -= extra;\n rect.width += 2 * extra;\n\n this._brushController.mount({\n enableGlobalPan: true,\n rotation: builderOpt.rotation,\n position: builderOpt.position\n }).setPanels([{\n panelId: 'pl',\n clipPath: brushHelper.makeRectPanelClipPath(rect),\n isTargetByCursor: brushHelper.makeRectIsTargetByCursor(rect, api, coordSysModel),\n getLinearBrushOtherExtent: brushHelper.makeLinearBrushOtherExtent(rect, 0)\n }]).enableBrush({\n brushType: 'lineX',\n brushStyle: areaSelectStyle,\n removeOnClick: true\n }).updateCovers(getCoverInfoList(axisModel));\n },\n _onBrush: function (coverInfoList, opt) {\n // Do not cache these object, because the mey be changed.\n var axisModel = this.axisModel;\n var axis = axisModel.axis;\n var intervals = zrUtil.map(coverInfoList, function (coverInfo) {\n return [axis.coordToData(coverInfo.range[0], true), axis.coordToData(coverInfo.range[1], true)];\n }); // If realtime is true, action is not dispatched on drag end, because\n // the drag end emits the same params with the last drag move event,\n // and may have some delay when using touch pad.\n\n if (!axisModel.option.realtime === opt.isEnd || opt.removeOnClick) {\n // jshint ignore:line\n this.api.dispatchAction({\n type: 'axisAreaSelect',\n parallelAxisId: axisModel.id,\n intervals: intervals\n });\n }\n },\n\n /**\n * @override\n */\n dispose: function () {\n this._brushController.dispose();\n }\n});\n\nfunction fromAxisAreaSelect(axisModel, ecModel, payload) {\n return payload && payload.type === 'axisAreaSelect' && ecModel.findComponents({\n mainType: 'parallelAxis',\n query: payload\n })[0] === axisModel;\n}\n\nfunction getCoverInfoList(axisModel) {\n var axis = axisModel.axis;\n return zrUtil.map(axisModel.activeIntervals, function (interval) {\n return {\n brushType: 'lineX',\n panelId: 'pl',\n range: [axis.dataToCoord(interval[0], true), axis.dataToCoord(interval[1], true)]\n };\n });\n}\n\nfunction getCoordSysModel(axisModel, ecModel) {\n return ecModel.getComponent('parallel', axisModel.get('parallelIndex'));\n}\n\nvar _default = AxisView;\nmodule.exports = _default;","require(\"./toolbox/ToolboxModel\");\n\nrequire(\"./toolbox/ToolboxView\");\n\nrequire(\"./toolbox/feature/SaveAsImage\");\n\nrequire(\"./toolbox/feature/MagicType\");\n\nrequire(\"./toolbox/feature/DataView\");\n\nrequire(\"./toolbox/feature/DataZoom\");\n\nrequire(\"./toolbox/feature/Restore\");","var Group = require(\"zrender/lib/container/Group\");\n\nvar componentUtil = require(\"../util/component\");\n\nvar clazzUtil = require(\"../util/clazz\");\n\nvar Component = function () {\n /**\n * @type {module:zrender/container/Group}\n * @readOnly\n */\n this.group = new Group();\n /**\n * @type {string}\n * @readOnly\n */\n\n this.uid = componentUtil.getUID('viewComponent');\n};\n\nComponent.prototype = {\n constructor: Component,\n init: function (ecModel, api) {},\n render: function (componentModel, ecModel, api, payload) {},\n dispose: function () {}\n};\nvar componentProto = Component.prototype;\n\ncomponentProto.updateView = componentProto.updateLayout = componentProto.updateVisual = function (seriesModel, ecModel, api, payload) {// Do nothing;\n}; // Enable Component.extend.\n\n\nclazzUtil.enableClassExtend(Component); // Enable capability of registerClass, getClass, hasClass, registerSubTypeDefaulter and so on.\n\nclazzUtil.enableClassManagement(Component, {\n registerWhenExtend: true\n});\nvar _default = Component;\nmodule.exports = _default;","var Definable = require(\"./Definable\");\n\nvar zrUtil = require(\"../../core/util\");\n\nvar zrLog = require(\"../../core/log\");\n\n/**\n * @file Manages SVG gradient elements.\n * @author Zhang Wenli\n */\n\n/**\n * Manages SVG gradient elements.\n *\n * @class\n * @extends Definable\n * @param {SVGElement} svgRoot root of SVG document\n */\nfunction GradientManager(svgRoot) {\n Definable.call(this, svgRoot, ['linearGradient', 'radialGradient'], '__gradient_in_use__');\n}\n\nzrUtil.inherits(GradientManager, Definable);\n/**\n * Create new gradient DOM for fill or stroke if not exist,\n * but will not update gradient if exists.\n *\n * @param {SvgElement} svgElement SVG element to paint\n * @param {Displayable} displayable zrender displayable element\n */\n\nGradientManager.prototype.addWithoutUpdate = function (svgElement, displayable) {\n if (displayable && displayable.style) {\n var that = this;\n zrUtil.each(['fill', 'stroke'], function (fillOrStroke) {\n if (displayable.style[fillOrStroke] && (displayable.style[fillOrStroke].type === 'linear' || displayable.style[fillOrStroke].type === 'radial')) {\n var gradient = displayable.style[fillOrStroke];\n var defs = that.getDefs(true); // Create dom in if not exists\n\n var dom;\n\n if (gradient._dom) {\n // Gradient exists\n dom = gradient._dom;\n\n if (!defs.contains(gradient._dom)) {\n // _dom is no longer in defs, recreate\n that.addDom(dom);\n }\n } else {\n // New dom\n dom = that.add(gradient);\n }\n\n that.markUsed(displayable);\n var id = dom.getAttribute('id');\n svgElement.setAttribute(fillOrStroke, 'url(#' + id + ')');\n }\n });\n }\n};\n/**\n * Add a new gradient tag in \n *\n * @param {Gradient} gradient zr gradient instance\n * @return {SVGLinearGradientElement | SVGRadialGradientElement}\n * created DOM\n */\n\n\nGradientManager.prototype.add = function (gradient) {\n var dom;\n\n if (gradient.type === 'linear') {\n dom = this.createElement('linearGradient');\n } else if (gradient.type === 'radial') {\n dom = this.createElement('radialGradient');\n } else {\n zrLog('Illegal gradient type.');\n return null;\n } // Set dom id with gradient id, since each gradient instance\n // will have no more than one dom element.\n // id may exists before for those dirty elements, in which case\n // id should remain the same, and other attributes should be\n // updated.\n\n\n gradient.id = gradient.id || this.nextId++;\n dom.setAttribute('id', 'zr-gradient-' + gradient.id);\n this.updateDom(gradient, dom);\n this.addDom(dom);\n return dom;\n};\n/**\n * Update gradient.\n *\n * @param {Gradient} gradient zr gradient instance\n */\n\n\nGradientManager.prototype.update = function (gradient) {\n var that = this;\n Definable.prototype.update.call(this, gradient, function () {\n var type = gradient.type;\n var tagName = gradient._dom.tagName;\n\n if (type === 'linear' && tagName === 'linearGradient' || type === 'radial' && tagName === 'radialGradient') {\n // Gradient type is not changed, update gradient\n that.updateDom(gradient, gradient._dom);\n } else {\n // Remove and re-create if type is changed\n that.removeDom(gradient);\n that.add(gradient);\n }\n });\n};\n/**\n * Update gradient dom\n *\n * @param {Gradient} gradient zr gradient instance\n * @param {SVGLinearGradientElement | SVGRadialGradientElement} dom\n * DOM to update\n */\n\n\nGradientManager.prototype.updateDom = function (gradient, dom) {\n if (gradient.type === 'linear') {\n dom.setAttribute('x1', gradient.x);\n dom.setAttribute('y1', gradient.y);\n dom.setAttribute('x2', gradient.x2);\n dom.setAttribute('y2', gradient.y2);\n } else if (gradient.type === 'radial') {\n dom.setAttribute('cx', gradient.x);\n dom.setAttribute('cy', gradient.y);\n dom.setAttribute('r', gradient.r);\n } else {\n zrLog('Illegal gradient type.');\n return;\n }\n\n if (gradient.global) {\n // x1, x2, y1, y2 in range of 0 to canvas width or height\n dom.setAttribute('gradientUnits', 'userSpaceOnUse');\n } else {\n // x1, x2, y1, y2 in range of 0 to 1\n dom.setAttribute('gradientUnits', 'objectBoundingBox');\n } // Remove color stops if exists\n\n\n dom.innerHTML = ''; // Add color stops\n\n var colors = gradient.colorStops;\n\n for (var i = 0, len = colors.length; i < len; ++i) {\n var stop = this.createElement('stop');\n stop.setAttribute('offset', colors[i].offset * 100 + '%');\n stop.setAttribute('stop-color', colors[i].color);\n dom.appendChild(stop);\n } // Store dom element in gradient, to avoid creating multiple\n // dom instances for the same gradient element\n\n\n gradient._dom = dom;\n};\n/**\n * Mark a single gradient to be used\n *\n * @param {Displayable} displayable displayable element\n */\n\n\nGradientManager.prototype.markUsed = function (displayable) {\n if (displayable.style) {\n var gradient = displayable.style.fill;\n\n if (gradient && gradient._dom) {\n Definable.prototype.markUsed.call(this, gradient._dom);\n }\n\n gradient = displayable.style.stroke;\n\n if (gradient && gradient._dom) {\n Definable.prototype.markUsed.call(this, gradient._dom);\n }\n }\n};\n\nvar _default = GradientManager;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar each = zrUtil.each;\n\nfunction _default(option) {\n var visualMap = option && option.visualMap;\n\n if (!zrUtil.isArray(visualMap)) {\n visualMap = visualMap ? [visualMap] : [];\n }\n\n each(visualMap, function (opt) {\n if (!opt) {\n return;\n } // rename splitList to pieces\n\n\n if (has(opt, 'splitList') && !has(opt, 'pieces')) {\n opt.pieces = opt.splitList;\n delete opt.splitList;\n }\n\n var pieces = opt.pieces;\n\n if (pieces && zrUtil.isArray(pieces)) {\n each(pieces, function (piece) {\n if (zrUtil.isObject(piece)) {\n if (has(piece, 'start') && !has(piece, 'min')) {\n piece.min = piece.start;\n }\n\n if (has(piece, 'end') && !has(piece, 'max')) {\n piece.max = piece.end;\n }\n }\n });\n }\n });\n}\n\nfunction has(obj, name) {\n return obj && obj.hasOwnProperty && obj.hasOwnProperty(name);\n}\n\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar DataDiffer = require(\"../../data/DataDiffer\");\n\nvar helper = require(\"./helper\");\n\nvar Breadcrumb = require(\"./Breadcrumb\");\n\nvar RoamController = require(\"../../component/helper/RoamController\");\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nvar matrix = require(\"zrender/lib/core/matrix\");\n\nvar animationUtil = require(\"../../util/animation\");\n\nvar makeStyleMapper = require(\"../../model/mixin/makeStyleMapper\");\n\nvar bind = zrUtil.bind;\nvar Group = graphic.Group;\nvar Rect = graphic.Rect;\nvar each = zrUtil.each;\nvar DRAG_THRESHOLD = 3;\nvar PATH_LABEL_NOAMAL = ['label', 'normal'];\nvar PATH_LABEL_EMPHASIS = ['label', 'emphasis'];\nvar PATH_UPPERLABEL_NORMAL = ['upperLabel', 'normal'];\nvar PATH_UPPERLABEL_EMPHASIS = ['upperLabel', 'emphasis'];\nvar Z_BASE = 10; // Should bigger than every z.\n\nvar Z_BG = 1;\nvar Z_CONTENT = 2;\nvar getItemStyleEmphasis = makeStyleMapper([['fill', 'color'], // `borderColor` and `borderWidth` has been occupied,\n// so use `stroke` to indicate the stroke of the rect.\n['stroke', 'strokeColor'], ['lineWidth', 'strokeWidth'], ['shadowBlur'], ['shadowOffsetX'], ['shadowOffsetY'], ['shadowColor']]);\n\nvar getItemStyleNormal = function (model) {\n // Normal style props should include emphasis style props.\n var itemStyle = getItemStyleEmphasis(model); // Clear styles set by emphasis.\n\n itemStyle.stroke = itemStyle.fill = itemStyle.lineWidth = null;\n return itemStyle;\n};\n\nvar _default = echarts.extendChartView({\n type: 'treemap',\n\n /**\n * @override\n */\n init: function (o, api) {\n /**\n * @private\n * @type {module:zrender/container/Group}\n */\n this._containerGroup;\n /**\n * @private\n * @type {Object.>}\n */\n\n this._storage = createStorage();\n /**\n * @private\n * @type {module:echarts/data/Tree}\n */\n\n this._oldTree;\n /**\n * @private\n * @type {module:echarts/chart/treemap/Breadcrumb}\n */\n\n this._breadcrumb;\n /**\n * @private\n * @type {module:echarts/component/helper/RoamController}\n */\n\n this._controller;\n /**\n * 'ready', 'animating'\n * @private\n */\n\n this._state = 'ready';\n },\n\n /**\n * @override\n */\n render: function (seriesModel, ecModel, api, payload) {\n var models = ecModel.findComponents({\n mainType: 'series',\n subType: 'treemap',\n query: payload\n });\n\n if (zrUtil.indexOf(models, seriesModel) < 0) {\n return;\n }\n\n this.seriesModel = seriesModel;\n this.api = api;\n this.ecModel = ecModel;\n var targetInfo = helper.retrieveTargetInfo(payload, seriesModel);\n var payloadType = payload && payload.type;\n var layoutInfo = seriesModel.layoutInfo;\n var isInit = !this._oldTree;\n var thisStorage = this._storage; // Mark new root when action is treemapRootToNode.\n\n var reRoot = payloadType === 'treemapRootToNode' && targetInfo && thisStorage ? {\n rootNodeGroup: thisStorage.nodeGroup[targetInfo.node.getRawIndex()],\n direction: payload.direction\n } : null;\n\n var containerGroup = this._giveContainerGroup(layoutInfo);\n\n var renderResult = this._doRender(containerGroup, seriesModel, reRoot);\n\n !isInit && (!payloadType || payloadType === 'treemapZoomToNode' || payloadType === 'treemapRootToNode') ? this._doAnimation(containerGroup, renderResult, seriesModel, reRoot) : renderResult.renderFinally();\n\n this._resetController(api);\n\n this._renderBreadcrumb(seriesModel, api, targetInfo);\n },\n\n /**\n * @private\n */\n _giveContainerGroup: function (layoutInfo) {\n var containerGroup = this._containerGroup;\n\n if (!containerGroup) {\n // FIXME\n // 加一层containerGroup是为了clip,但是现在clip功能并没有实现。\n containerGroup = this._containerGroup = new Group();\n\n this._initEvents(containerGroup);\n\n this.group.add(containerGroup);\n }\n\n containerGroup.attr('position', [layoutInfo.x, layoutInfo.y]);\n return containerGroup;\n },\n\n /**\n * @private\n */\n _doRender: function (containerGroup, seriesModel, reRoot) {\n var thisTree = seriesModel.getData().tree;\n var oldTree = this._oldTree; // Clear last shape records.\n\n var lastsForAnimation = createStorage();\n var thisStorage = createStorage();\n var oldStorage = this._storage;\n var willInvisibleEls = [];\n var doRenderNode = zrUtil.curry(renderNode, seriesModel, thisStorage, oldStorage, reRoot, lastsForAnimation, willInvisibleEls); // Notice: when thisTree and oldTree are the same tree (see list.cloneShallow),\n // the oldTree is actually losted, so we can not find all of the old graphic\n // elements from tree. So we use this stragegy: make element storage, move\n // from old storage to new storage, clear old storage.\n\n dualTravel(thisTree.root ? [thisTree.root] : [], oldTree && oldTree.root ? [oldTree.root] : [], containerGroup, thisTree === oldTree || !oldTree, 0); // Process all removing.\n\n var willDeleteEls = clearStorage(oldStorage);\n this._oldTree = thisTree;\n this._storage = thisStorage;\n return {\n lastsForAnimation: lastsForAnimation,\n willDeleteEls: willDeleteEls,\n renderFinally: renderFinally\n };\n\n function dualTravel(thisViewChildren, oldViewChildren, parentGroup, sameTree, depth) {\n // When 'render' is triggered by action,\n // 'this' and 'old' may be the same tree,\n // we use rawIndex in that case.\n if (sameTree) {\n oldViewChildren = thisViewChildren;\n each(thisViewChildren, function (child, index) {\n !child.isRemoved() && processNode(index, index);\n });\n } // Diff hierarchically (diff only in each subtree, but not whole).\n // because, consistency of view is important.\n else {\n new DataDiffer(oldViewChildren, thisViewChildren, getKey, getKey).add(processNode).update(processNode).remove(zrUtil.curry(processNode, null)).execute();\n }\n\n function getKey(node) {\n // Identify by name or raw index.\n return node.getId();\n }\n\n function processNode(newIndex, oldIndex) {\n var thisNode = newIndex != null ? thisViewChildren[newIndex] : null;\n var oldNode = oldIndex != null ? oldViewChildren[oldIndex] : null;\n var group = doRenderNode(thisNode, oldNode, parentGroup, depth);\n group && dualTravel(thisNode && thisNode.viewChildren || [], oldNode && oldNode.viewChildren || [], group, sameTree, depth + 1);\n }\n }\n\n function clearStorage(storage) {\n var willDeleteEls = createStorage();\n storage && each(storage, function (store, storageName) {\n var delEls = willDeleteEls[storageName];\n each(store, function (el) {\n el && (delEls.push(el), el.__tmWillDelete = 1);\n });\n });\n return willDeleteEls;\n }\n\n function renderFinally() {\n each(willDeleteEls, function (els) {\n each(els, function (el) {\n el.parent && el.parent.remove(el);\n });\n });\n each(willInvisibleEls, function (el) {\n el.invisible = true; // Setting invisible is for optimizing, so no need to set dirty,\n // just mark as invisible.\n\n el.dirty();\n });\n }\n },\n\n /**\n * @private\n */\n _doAnimation: function (containerGroup, renderResult, seriesModel, reRoot) {\n if (!seriesModel.get('animation')) {\n return;\n }\n\n var duration = seriesModel.get('animationDurationUpdate');\n var easing = seriesModel.get('animationEasing');\n var animationWrap = animationUtil.createWrap(); // Make delete animations.\n\n each(renderResult.willDeleteEls, function (store, storageName) {\n each(store, function (el, rawIndex) {\n if (el.invisible) {\n return;\n }\n\n var parent = el.parent; // Always has parent, and parent is nodeGroup.\n\n var target;\n\n if (reRoot && reRoot.direction === 'drillDown') {\n target = parent === reRoot.rootNodeGroup // This is the content element of view root.\n // Only `content` will enter this branch, because\n // `background` and `nodeGroup` will not be deleted.\n ? {\n shape: {\n x: 0,\n y: 0,\n width: parent.__tmNodeWidth,\n height: parent.__tmNodeHeight\n },\n style: {\n opacity: 0\n } // Others.\n\n } : {\n style: {\n opacity: 0\n }\n };\n } else {\n var targetX = 0;\n var targetY = 0;\n\n if (!parent.__tmWillDelete) {\n // Let node animate to right-bottom corner, cooperating with fadeout,\n // which is appropriate for user understanding.\n // Divided by 2 for reRoot rolling up effect.\n targetX = parent.__tmNodeWidth / 2;\n targetY = parent.__tmNodeHeight / 2;\n }\n\n target = storageName === 'nodeGroup' ? {\n position: [targetX, targetY],\n style: {\n opacity: 0\n }\n } : {\n shape: {\n x: targetX,\n y: targetY,\n width: 0,\n height: 0\n },\n style: {\n opacity: 0\n }\n };\n }\n\n target && animationWrap.add(el, target, duration, easing);\n });\n }); // Make other animations\n\n each(this._storage, function (store, storageName) {\n each(store, function (el, rawIndex) {\n var last = renderResult.lastsForAnimation[storageName][rawIndex];\n var target = {};\n\n if (!last) {\n return;\n }\n\n if (storageName === 'nodeGroup') {\n if (last.old) {\n target.position = el.position.slice();\n el.attr('position', last.old);\n }\n } else {\n if (last.old) {\n target.shape = zrUtil.extend({}, el.shape);\n el.setShape(last.old);\n }\n\n if (last.fadein) {\n el.setStyle('opacity', 0);\n target.style = {\n opacity: 1\n };\n } // When animation is stopped for succedent animation starting,\n // el.style.opacity might not be 1\n else if (el.style.opacity !== 1) {\n target.style = {\n opacity: 1\n };\n }\n }\n\n animationWrap.add(el, target, duration, easing);\n });\n }, this);\n this._state = 'animating';\n animationWrap.done(bind(function () {\n this._state = 'ready';\n renderResult.renderFinally();\n }, this)).start();\n },\n\n /**\n * @private\n */\n _resetController: function (api) {\n var controller = this._controller; // Init controller.\n\n if (!controller) {\n controller = this._controller = new RoamController(api.getZr());\n controller.enable(this.seriesModel.get('roam'));\n controller.on('pan', bind(this._onPan, this));\n controller.on('zoom', bind(this._onZoom, this));\n }\n\n var rect = new BoundingRect(0, 0, api.getWidth(), api.getHeight());\n controller.setPointerChecker(function (e, x, y) {\n return rect.contain(x, y);\n });\n },\n\n /**\n * @private\n */\n _clearController: function () {\n var controller = this._controller;\n\n if (controller) {\n controller.dispose();\n controller = null;\n }\n },\n\n /**\n * @private\n */\n _onPan: function (dx, dy) {\n if (this._state !== 'animating' && (Math.abs(dx) > DRAG_THRESHOLD || Math.abs(dy) > DRAG_THRESHOLD)) {\n // These param must not be cached.\n var root = this.seriesModel.getData().tree.root;\n\n if (!root) {\n return;\n }\n\n var rootLayout = root.getLayout();\n\n if (!rootLayout) {\n return;\n }\n\n this.api.dispatchAction({\n type: 'treemapMove',\n from: this.uid,\n seriesId: this.seriesModel.id,\n rootRect: {\n x: rootLayout.x + dx,\n y: rootLayout.y + dy,\n width: rootLayout.width,\n height: rootLayout.height\n }\n });\n }\n },\n\n /**\n * @private\n */\n _onZoom: function (scale, mouseX, mouseY) {\n if (this._state !== 'animating') {\n // These param must not be cached.\n var root = this.seriesModel.getData().tree.root;\n\n if (!root) {\n return;\n }\n\n var rootLayout = root.getLayout();\n\n if (!rootLayout) {\n return;\n }\n\n var rect = new BoundingRect(rootLayout.x, rootLayout.y, rootLayout.width, rootLayout.height);\n var layoutInfo = this.seriesModel.layoutInfo; // Transform mouse coord from global to containerGroup.\n\n mouseX -= layoutInfo.x;\n mouseY -= layoutInfo.y; // Scale root bounding rect.\n\n var m = matrix.create();\n matrix.translate(m, m, [-mouseX, -mouseY]);\n matrix.scale(m, m, [scale, scale]);\n matrix.translate(m, m, [mouseX, mouseY]);\n rect.applyTransform(m);\n this.api.dispatchAction({\n type: 'treemapRender',\n from: this.uid,\n seriesId: this.seriesModel.id,\n rootRect: {\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height\n }\n });\n }\n },\n\n /**\n * @private\n */\n _initEvents: function (containerGroup) {\n containerGroup.on('click', function (e) {\n if (this._state !== 'ready') {\n return;\n }\n\n var nodeClick = this.seriesModel.get('nodeClick', true);\n\n if (!nodeClick) {\n return;\n }\n\n var targetInfo = this.findTarget(e.offsetX, e.offsetY);\n\n if (!targetInfo) {\n return;\n }\n\n var node = targetInfo.node;\n\n if (node.getLayout().isLeafRoot) {\n this._rootToNode(targetInfo);\n } else {\n if (nodeClick === 'zoomToNode') {\n this._zoomToNode(targetInfo);\n } else if (nodeClick === 'link') {\n var itemModel = node.hostTree.data.getItemModel(node.dataIndex);\n var link = itemModel.get('link', true);\n var linkTarget = itemModel.get('target', true) || 'blank';\n link && window.open(link, linkTarget);\n }\n }\n }, this);\n },\n\n /**\n * @private\n */\n _renderBreadcrumb: function (seriesModel, api, targetInfo) {\n if (!targetInfo) {\n targetInfo = seriesModel.get('leafDepth', true) != null ? {\n node: seriesModel.getViewRoot() // FIXME\n // better way?\n // Find breadcrumb tail on center of containerGroup.\n\n } : this.findTarget(api.getWidth() / 2, api.getHeight() / 2);\n\n if (!targetInfo) {\n targetInfo = {\n node: seriesModel.getData().tree.root\n };\n }\n }\n\n (this._breadcrumb || (this._breadcrumb = new Breadcrumb(this.group))).render(seriesModel, api, targetInfo.node, bind(onSelect, this));\n\n function onSelect(node) {\n if (this._state !== 'animating') {\n helper.aboveViewRoot(seriesModel.getViewRoot(), node) ? this._rootToNode({\n node: node\n }) : this._zoomToNode({\n node: node\n });\n }\n }\n },\n\n /**\n * @override\n */\n remove: function () {\n this._clearController();\n\n this._containerGroup && this._containerGroup.removeAll();\n this._storage = createStorage();\n this._state = 'ready';\n this._breadcrumb && this._breadcrumb.remove();\n },\n dispose: function () {\n this._clearController();\n },\n\n /**\n * @private\n */\n _zoomToNode: function (targetInfo) {\n this.api.dispatchAction({\n type: 'treemapZoomToNode',\n from: this.uid,\n seriesId: this.seriesModel.id,\n targetNode: targetInfo.node\n });\n },\n\n /**\n * @private\n */\n _rootToNode: function (targetInfo) {\n this.api.dispatchAction({\n type: 'treemapRootToNode',\n from: this.uid,\n seriesId: this.seriesModel.id,\n targetNode: targetInfo.node\n });\n },\n\n /**\n * @public\n * @param {number} x Global coord x.\n * @param {number} y Global coord y.\n * @return {Object} info If not found, return undefined;\n * @return {number} info.node Target node.\n * @return {number} info.offsetX x refer to target node.\n * @return {number} info.offsetY y refer to target node.\n */\n findTarget: function (x, y) {\n var targetInfo;\n var viewRoot = this.seriesModel.getViewRoot();\n viewRoot.eachNode({\n attr: 'viewChildren',\n order: 'preorder'\n }, function (node) {\n var bgEl = this._storage.background[node.getRawIndex()]; // If invisible, there might be no element.\n\n\n if (bgEl) {\n var point = bgEl.transformCoordToLocal(x, y);\n var shape = bgEl.shape; // For performance consideration, dont use 'getBoundingRect'.\n\n if (shape.x <= point[0] && point[0] <= shape.x + shape.width && shape.y <= point[1] && point[1] <= shape.y + shape.height) {\n targetInfo = {\n node: node,\n offsetX: point[0],\n offsetY: point[1]\n };\n } else {\n return false; // Suppress visit subtree.\n }\n }\n }, this);\n return targetInfo;\n }\n});\n/**\n * @inner\n */\n\n\nfunction createStorage() {\n return {\n nodeGroup: [],\n background: [],\n content: []\n };\n}\n/**\n * @inner\n * @return Return undefined means do not travel further.\n */\n\n\nfunction renderNode(seriesModel, thisStorage, oldStorage, reRoot, lastsForAnimation, willInvisibleEls, thisNode, oldNode, parentGroup, depth) {\n // Whether under viewRoot.\n if (!thisNode) {\n // Deleting nodes will be performed finally. This method just find\n // element from old storage, or create new element, set them to new\n // storage, and set styles.\n return;\n } // -------------------------------------------------------------------\n // Start of closure variables available in \"Procedures in renderNode\".\n\n\n var thisLayout = thisNode.getLayout();\n\n if (!thisLayout || !thisLayout.isInView) {\n return;\n }\n\n var thisWidth = thisLayout.width;\n var thisHeight = thisLayout.height;\n var borderWidth = thisLayout.borderWidth;\n var thisInvisible = thisLayout.invisible;\n var thisRawIndex = thisNode.getRawIndex();\n var oldRawIndex = oldNode && oldNode.getRawIndex();\n var thisViewChildren = thisNode.viewChildren;\n var upperHeight = thisLayout.upperHeight;\n var isParent = thisViewChildren && thisViewChildren.length;\n var itemStyleNormalModel = thisNode.getModel('itemStyle.normal');\n var itemStyleEmphasisModel = thisNode.getModel('itemStyle.emphasis'); // End of closure ariables available in \"Procedures in renderNode\".\n // -----------------------------------------------------------------\n // Node group\n\n var group = giveGraphic('nodeGroup', Group);\n\n if (!group) {\n return;\n }\n\n parentGroup.add(group); // x,y are not set when el is above view root.\n\n group.attr('position', [thisLayout.x || 0, thisLayout.y || 0]);\n group.__tmNodeWidth = thisWidth;\n group.__tmNodeHeight = thisHeight;\n\n if (thisLayout.isAboveViewRoot) {\n return group;\n } // Background\n\n\n var bg = giveGraphic('background', Rect, depth, Z_BG);\n bg && renderBackground(group, bg, isParent && thisLayout.upperHeight); // No children, render content.\n\n if (!isParent) {\n var content = giveGraphic('content', Rect, depth, Z_CONTENT);\n content && renderContent(group, content);\n }\n\n return group; // ----------------------------\n // | Procedures in renderNode |\n // ----------------------------\n\n function renderBackground(group, bg, useUpperLabel) {\n // For tooltip.\n bg.dataIndex = thisNode.dataIndex;\n bg.seriesIndex = seriesModel.seriesIndex;\n bg.setShape({\n x: 0,\n y: 0,\n width: thisWidth,\n height: thisHeight\n });\n var visualBorderColor = thisNode.getVisual('borderColor', true);\n var emphasisBorderColor = itemStyleEmphasisModel.get('borderColor');\n updateStyle(bg, function () {\n var normalStyle = getItemStyleNormal(itemStyleNormalModel);\n normalStyle.fill = visualBorderColor;\n var emphasisStyle = getItemStyleEmphasis(itemStyleEmphasisModel);\n emphasisStyle.fill = emphasisBorderColor;\n\n if (useUpperLabel) {\n var upperLabelWidth = thisWidth - 2 * borderWidth;\n prepareText(normalStyle, emphasisStyle, visualBorderColor, upperLabelWidth, upperHeight, {\n x: borderWidth,\n y: 0,\n width: upperLabelWidth,\n height: upperHeight\n });\n } // For old bg.\n else {\n normalStyle.text = emphasisStyle.text = null;\n }\n\n bg.setStyle(normalStyle);\n graphic.setHoverStyle(bg, emphasisStyle);\n });\n group.add(bg);\n }\n\n function renderContent(group, content) {\n // For tooltip.\n content.dataIndex = thisNode.dataIndex;\n content.seriesIndex = seriesModel.seriesIndex;\n var contentWidth = Math.max(thisWidth - 2 * borderWidth, 0);\n var contentHeight = Math.max(thisHeight - 2 * borderWidth, 0);\n content.culling = true;\n content.setShape({\n x: borderWidth,\n y: borderWidth,\n width: contentWidth,\n height: contentHeight\n });\n var visualColor = thisNode.getVisual('color', true);\n updateStyle(content, function () {\n var normalStyle = getItemStyleNormal(itemStyleNormalModel);\n normalStyle.fill = visualColor;\n var emphasisStyle = getItemStyleEmphasis(itemStyleEmphasisModel);\n prepareText(normalStyle, emphasisStyle, visualColor, contentWidth, contentHeight);\n content.setStyle(normalStyle);\n graphic.setHoverStyle(content, emphasisStyle);\n });\n group.add(content);\n }\n\n function updateStyle(element, cb) {\n if (!thisInvisible) {\n // If invisible, do not set visual, otherwise the element will\n // change immediately before animation. We think it is OK to\n // remain its origin color when moving out of the view window.\n cb();\n\n if (!element.__tmWillVisible) {\n element.invisible = false;\n }\n } else {\n // Delay invisible setting utill animation finished,\n // avoid element vanish suddenly before animation.\n !element.invisible && willInvisibleEls.push(element);\n }\n }\n\n function prepareText(normalStyle, emphasisStyle, visualColor, width, height, upperLabelRect) {\n var nodeModel = thisNode.getModel();\n var text = zrUtil.retrieve(seriesModel.getFormattedLabel(thisNode.dataIndex, 'normal', null, null, upperLabelRect ? 'upperLabel' : 'label'), nodeModel.get('name'));\n\n if (!upperLabelRect && thisLayout.isLeafRoot) {\n var iconChar = seriesModel.get('drillDownIcon', true);\n text = iconChar ? iconChar + ' ' + text : text;\n }\n\n var normalLabelModel = nodeModel.getModel(upperLabelRect ? PATH_UPPERLABEL_NORMAL : PATH_LABEL_NOAMAL);\n var emphasisLabelModel = nodeModel.getModel(upperLabelRect ? PATH_UPPERLABEL_EMPHASIS : PATH_LABEL_EMPHASIS);\n var isShow = normalLabelModel.getShallow('show');\n graphic.setLabelStyle(normalStyle, emphasisStyle, normalLabelModel, emphasisLabelModel, {\n defaultText: isShow ? text : null,\n autoColor: visualColor,\n isRectText: true\n });\n upperLabelRect && (normalStyle.textRect = zrUtil.clone(upperLabelRect));\n normalStyle.truncate = isShow && normalLabelModel.get('ellipsis') ? {\n outerWidth: width,\n outerHeight: height,\n minChar: 2\n } : null;\n }\n\n function giveGraphic(storageName, Ctor, depth, z) {\n var element = oldRawIndex != null && oldStorage[storageName][oldRawIndex];\n var lasts = lastsForAnimation[storageName];\n\n if (element) {\n // Remove from oldStorage\n oldStorage[storageName][oldRawIndex] = null;\n prepareAnimationWhenHasOld(lasts, element, storageName);\n } // If invisible and no old element, do not create new element (for optimizing).\n else if (!thisInvisible) {\n element = new Ctor({\n z: calculateZ(depth, z)\n });\n element.__tmDepth = depth;\n element.__tmStorageName = storageName;\n prepareAnimationWhenNoOld(lasts, element, storageName);\n } // Set to thisStorage\n\n\n return thisStorage[storageName][thisRawIndex] = element;\n }\n\n function prepareAnimationWhenHasOld(lasts, element, storageName) {\n var lastCfg = lasts[thisRawIndex] = {};\n lastCfg.old = storageName === 'nodeGroup' ? element.position.slice() : zrUtil.extend({}, element.shape);\n } // If a element is new, we need to find the animation start point carefully,\n // otherwise it will looks strange when 'zoomToNode'.\n\n\n function prepareAnimationWhenNoOld(lasts, element, storageName) {\n var lastCfg = lasts[thisRawIndex] = {};\n var parentNode = thisNode.parentNode;\n\n if (parentNode && (!reRoot || reRoot.direction === 'drillDown')) {\n var parentOldX = 0;\n var parentOldY = 0; // New nodes appear from right-bottom corner in 'zoomToNode' animation.\n // For convenience, get old bounding rect from background.\n\n var parentOldBg = lastsForAnimation.background[parentNode.getRawIndex()];\n\n if (!reRoot && parentOldBg && parentOldBg.old) {\n parentOldX = parentOldBg.old.width;\n parentOldY = parentOldBg.old.height;\n } // When no parent old shape found, its parent is new too,\n // so we can just use {x:0, y:0}.\n\n\n lastCfg.old = storageName === 'nodeGroup' ? [0, parentOldY] : {\n x: parentOldX,\n y: parentOldY,\n width: 0,\n height: 0\n };\n } // Fade in, user can be aware that these nodes are new.\n\n\n lastCfg.fadein = storageName !== 'nodeGroup';\n }\n} // We can not set all backgroud with the same z, Because the behaviour of\n// drill down and roll up differ background creation sequence from tree\n// hierarchy sequence, which cause that lowser background element overlap\n// upper ones. So we calculate z based on depth.\n// Moreover, we try to shrink down z interval to [0, 1] to avoid that\n// treemap with large z overlaps other components.\n\n\nfunction calculateZ(depth, zInLevel) {\n var zb = depth * Z_BASE + zInLevel;\n return (zb - 1) / zb;\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar Model = require(\"../../model/Model\");\n\nvar AxisView = require(\"./AxisView\");\n\nvar elementList = ['axisLine', 'axisLabel', 'axisTick', 'splitLine', 'splitArea'];\n\nfunction getAxisLineShape(polar, rExtent, angle) {\n rExtent[1] > rExtent[0] && (rExtent = rExtent.slice().reverse());\n var start = polar.coordToPoint([rExtent[0], angle]);\n var end = polar.coordToPoint([rExtent[1], angle]);\n return {\n x1: start[0],\n y1: start[1],\n x2: end[0],\n y2: end[1]\n };\n}\n\nfunction getRadiusIdx(polar) {\n var radiusAxis = polar.getRadiusAxis();\n return radiusAxis.inverse ? 0 : 1;\n}\n\nvar _default = AxisView.extend({\n type: 'angleAxis',\n axisPointerClass: 'PolarAxisPointer',\n render: function (angleAxisModel, ecModel) {\n this.group.removeAll();\n\n if (!angleAxisModel.get('show')) {\n return;\n }\n\n var angleAxis = angleAxisModel.axis;\n var polar = angleAxis.polar;\n var radiusExtent = polar.getRadiusAxis().getExtent();\n var ticksAngles = angleAxis.getTicksCoords();\n\n if (angleAxis.type !== 'category') {\n // Remove the last tick which will overlap the first tick\n ticksAngles.pop();\n }\n\n zrUtil.each(elementList, function (name) {\n if (angleAxisModel.get(name + '.show') && (!angleAxis.scale.isBlank() || name === 'axisLine')) {\n this['_' + name](angleAxisModel, polar, ticksAngles, radiusExtent);\n }\n }, this);\n },\n\n /**\n * @private\n */\n _axisLine: function (angleAxisModel, polar, ticksAngles, radiusExtent) {\n var lineStyleModel = angleAxisModel.getModel('axisLine.lineStyle');\n var circle = new graphic.Circle({\n shape: {\n cx: polar.cx,\n cy: polar.cy,\n r: radiusExtent[getRadiusIdx(polar)]\n },\n style: lineStyleModel.getLineStyle(),\n z2: 1,\n silent: true\n });\n circle.style.fill = null;\n this.group.add(circle);\n },\n\n /**\n * @private\n */\n _axisTick: function (angleAxisModel, polar, ticksAngles, radiusExtent) {\n var tickModel = angleAxisModel.getModel('axisTick');\n var tickLen = (tickModel.get('inside') ? -1 : 1) * tickModel.get('length');\n var radius = radiusExtent[getRadiusIdx(polar)];\n var lines = zrUtil.map(ticksAngles, function (tickAngle) {\n return new graphic.Line({\n shape: getAxisLineShape(polar, [radius, radius + tickLen], tickAngle)\n });\n });\n this.group.add(graphic.mergePath(lines, {\n style: zrUtil.defaults(tickModel.getModel('lineStyle').getLineStyle(), {\n stroke: angleAxisModel.get('axisLine.lineStyle.color')\n })\n }));\n },\n\n /**\n * @private\n */\n _axisLabel: function (angleAxisModel, polar, ticksAngles, radiusExtent) {\n var axis = angleAxisModel.axis;\n var categoryData = angleAxisModel.get('data');\n var labelModel = angleAxisModel.getModel('axisLabel');\n var labels = angleAxisModel.getFormattedLabels();\n var labelMargin = labelModel.get('margin');\n var labelsAngles = axis.getLabelsCoords(); // Use length of ticksAngles because it may remove the last tick to avoid overlapping\n\n for (var i = 0; i < ticksAngles.length; i++) {\n var r = radiusExtent[getRadiusIdx(polar)];\n var p = polar.coordToPoint([r + labelMargin, labelsAngles[i]]);\n var cx = polar.cx;\n var cy = polar.cy;\n var labelTextAlign = Math.abs(p[0] - cx) / r < 0.3 ? 'center' : p[0] > cx ? 'left' : 'right';\n var labelTextVerticalAlign = Math.abs(p[1] - cy) / r < 0.3 ? 'middle' : p[1] > cy ? 'top' : 'bottom';\n\n if (categoryData && categoryData[i] && categoryData[i].textStyle) {\n labelModel = new Model(categoryData[i].textStyle, labelModel, labelModel.ecModel);\n }\n\n var textEl = new graphic.Text({\n silent: true\n });\n this.group.add(textEl);\n graphic.setTextStyle(textEl.style, labelModel, {\n x: p[0],\n y: p[1],\n textFill: labelModel.getTextColor() || angleAxisModel.get('axisLine.lineStyle.color'),\n text: labels[i],\n textAlign: labelTextAlign,\n textVerticalAlign: labelTextVerticalAlign\n });\n }\n },\n\n /**\n * @private\n */\n _splitLine: function (angleAxisModel, polar, ticksAngles, radiusExtent) {\n var splitLineModel = angleAxisModel.getModel('splitLine');\n var lineStyleModel = splitLineModel.getModel('lineStyle');\n var lineColors = lineStyleModel.get('color');\n var lineCount = 0;\n lineColors = lineColors instanceof Array ? lineColors : [lineColors];\n var splitLines = [];\n\n for (var i = 0; i < ticksAngles.length; i++) {\n var colorIndex = lineCount++ % lineColors.length;\n splitLines[colorIndex] = splitLines[colorIndex] || [];\n splitLines[colorIndex].push(new graphic.Line({\n shape: getAxisLineShape(polar, radiusExtent, ticksAngles[i])\n }));\n } // Simple optimization\n // Batching the lines if color are the same\n\n\n for (var i = 0; i < splitLines.length; i++) {\n this.group.add(graphic.mergePath(splitLines[i], {\n style: zrUtil.defaults({\n stroke: lineColors[i % lineColors.length]\n }, lineStyleModel.getLineStyle()),\n silent: true,\n z: angleAxisModel.get('z')\n }));\n }\n },\n\n /**\n * @private\n */\n _splitArea: function (angleAxisModel, polar, ticksAngles, radiusExtent) {\n var splitAreaModel = angleAxisModel.getModel('splitArea');\n var areaStyleModel = splitAreaModel.getModel('areaStyle');\n var areaColors = areaStyleModel.get('color');\n var lineCount = 0;\n areaColors = areaColors instanceof Array ? areaColors : [areaColors];\n var splitAreas = [];\n var RADIAN = Math.PI / 180;\n var prevAngle = -ticksAngles[0] * RADIAN;\n var r0 = Math.min(radiusExtent[0], radiusExtent[1]);\n var r1 = Math.max(radiusExtent[0], radiusExtent[1]);\n var clockwise = angleAxisModel.get('clockwise');\n\n for (var i = 1; i < ticksAngles.length; i++) {\n var colorIndex = lineCount++ % areaColors.length;\n splitAreas[colorIndex] = splitAreas[colorIndex] || [];\n splitAreas[colorIndex].push(new graphic.Sector({\n shape: {\n cx: polar.cx,\n cy: polar.cy,\n r0: r0,\n r: r1,\n startAngle: prevAngle,\n endAngle: -ticksAngles[i] * RADIAN,\n clockwise: clockwise\n },\n silent: true\n }));\n prevAngle = -ticksAngles[i] * RADIAN;\n } // Simple optimization\n // Batching the lines if color are the same\n\n\n for (var i = 0; i < splitAreas.length; i++) {\n this.group.add(graphic.mergePath(splitAreas[i], {\n style: zrUtil.defaults({\n fill: areaColors[i % areaColors.length]\n }, areaStyleModel.getAreaStyle()),\n silent: true\n }));\n }\n }\n});\n\nmodule.exports = _default;","var makeStyleMapper = require(\"../../model/mixin/makeStyleMapper\");\n\nvar getBarItemStyle = makeStyleMapper([['fill', 'color'], ['stroke', 'borderColor'], ['lineWidth', 'borderWidth'], // Compatitable with 2\n['stroke', 'barBorderColor'], ['lineWidth', 'barBorderWidth'], ['opacity'], ['shadowBlur'], ['shadowOffsetX'], ['shadowOffsetY'], ['shadowColor']]);\nvar _default = {\n getBarItemStyle: function (excludes) {\n var style = getBarItemStyle(this, excludes);\n\n if (this.getBorderLineDash) {\n var lineDash = this.getBorderLineDash();\n lineDash && (style.lineDash = lineDash);\n }\n\n return style;\n }\n};\nmodule.exports = _default;","var zrender = require(\"zrender/lib/zrender\");\n\nexports.zrender = zrender;\n\nvar matrix = require(\"zrender/lib/core/matrix\");\n\nexports.matrix = matrix;\n\nvar vector = require(\"zrender/lib/core/vector\");\n\nexports.vector = vector;\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar colorTool = require(\"zrender/lib/tool/color\");\n\nexports.color = colorTool;\n\nvar graphic = require(\"./util/graphic\");\n\nexports.graphic = graphic;\n\nvar numberUtil = require(\"./util/number\");\n\nexports.number = numberUtil;\n\nvar formatUtil = require(\"./util/format\");\n\nexports.format = formatUtil;\n\nvar _throttle = require(\"./util/throttle\");\n\nvar throttle = _throttle.throttle;\nexports.throttle = _throttle.throttle;\n\nvar ecHelper = require(\"./helper\");\n\nexports.helper = ecHelper;\n\nvar _List = require(\"./data/List\");\n\nexports.List = _List;\n\nvar _Model = require(\"./model/Model\");\n\nexports.Model = _Model;\n\nvar _Axis = require(\"./coord/Axis\");\n\nexports.Axis = _Axis;\n\nvar _env = require(\"zrender/lib/core/env\");\n\nexports.env = _env;\n\nvar _parseGeoJson = require(\"./coord/geo/parseGeoJson\");\n\nexports.parseGeoJson = _parseGeoJson;\n\n/**\n * Do not mount those modules on 'src/echarts' for better tree shaking.\n */\nvar ecUtil = {};\nzrUtil.each(['map', 'each', 'filter', 'indexOf', 'inherits', 'reduce', 'filter', 'bind', 'curry', 'isArray', 'isString', 'isObject', 'isFunction', 'extend', 'defaults', 'clone', 'merge'], function (name) {\n ecUtil[name] = zrUtil[name];\n});\nexports.util = ecUtil;","var echarts = require(\"../../echarts\");\n\n/**\n * payload: {\n * brushIndex: number, or,\n * brushId: string, or,\n * brushName: string,\n * globalRanges: Array\n * }\n */\necharts.registerAction({\n type: 'brush',\n event: 'brush',\n update: 'updateView'\n}, function (payload, ecModel) {\n ecModel.eachComponent({\n mainType: 'brush',\n query: payload\n }, function (brushModel) {\n brushModel.setAreas(payload.areas);\n });\n});\n/**\n * payload: {\n * brushComponents: [\n * {\n * brushId,\n * brushIndex,\n * brushName,\n * series: [\n * {\n * seriesId,\n * seriesIndex,\n * seriesName,\n * rawIndices: [21, 34, ...]\n * },\n * ...\n * ]\n * },\n * ...\n * ]\n * }\n */\n\necharts.registerAction({\n type: 'brushSelect',\n event: 'brushSelected',\n update: 'none'\n}, function () {});","var textContain = require(\"zrender/lib/contain/text\");\n\n// FIXME emphasis label position is not same with normal label position\nfunction adjustSingleSide(list, cx, cy, r, dir, viewWidth, viewHeight) {\n list.sort(function (a, b) {\n return a.y - b.y;\n }); // 压\n\n function shiftDown(start, end, delta, dir) {\n for (var j = start; j < end; j++) {\n list[j].y += delta;\n\n if (j > start && j + 1 < end && list[j + 1].y > list[j].y + list[j].height) {\n shiftUp(j, delta / 2);\n return;\n }\n }\n\n shiftUp(end - 1, delta / 2);\n } // 弹\n\n\n function shiftUp(end, delta) {\n for (var j = end; j >= 0; j--) {\n list[j].y -= delta;\n\n if (j > 0 && list[j].y > list[j - 1].y + list[j - 1].height) {\n break;\n }\n }\n }\n\n function changeX(list, isDownList, cx, cy, r, dir) {\n var lastDeltaX = dir > 0 ? isDownList // 右侧\n ? Number.MAX_VALUE // 下\n : 0 // 上\n : isDownList // 左侧\n ? Number.MAX_VALUE // 下\n : 0; // 上\n\n for (var i = 0, l = list.length; i < l; i++) {\n // Not change x for center label\n if (list[i].position === 'center') {\n continue;\n }\n\n var deltaY = Math.abs(list[i].y - cy);\n var length = list[i].len;\n var length2 = list[i].len2;\n var deltaX = deltaY < r + length ? Math.sqrt((r + length + length2) * (r + length + length2) - deltaY * deltaY) : Math.abs(list[i].x - cx);\n\n if (isDownList && deltaX >= lastDeltaX) {\n // 右下,左下\n deltaX = lastDeltaX - 10;\n }\n\n if (!isDownList && deltaX <= lastDeltaX) {\n // 右上,左上\n deltaX = lastDeltaX + 10;\n }\n\n list[i].x = cx + deltaX * dir;\n lastDeltaX = deltaX;\n }\n }\n\n var lastY = 0;\n var delta;\n var len = list.length;\n var upList = [];\n var downList = [];\n\n for (var i = 0; i < len; i++) {\n delta = list[i].y - lastY;\n\n if (delta < 0) {\n shiftDown(i, len, -delta, dir);\n }\n\n lastY = list[i].y + list[i].height;\n }\n\n if (viewHeight - lastY < 0) {\n shiftUp(len - 1, lastY - viewHeight);\n }\n\n for (var i = 0; i < len; i++) {\n if (list[i].y >= cy) {\n downList.push(list[i]);\n } else {\n upList.push(list[i]);\n }\n }\n\n changeX(upList, false, cx, cy, r, dir);\n changeX(downList, true, cx, cy, r, dir);\n}\n\nfunction avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight) {\n var leftList = [];\n var rightList = [];\n\n for (var i = 0; i < labelLayoutList.length; i++) {\n if (labelLayoutList[i].x < cx) {\n leftList.push(labelLayoutList[i]);\n } else {\n rightList.push(labelLayoutList[i]);\n }\n }\n\n adjustSingleSide(rightList, cx, cy, r, 1, viewWidth, viewHeight);\n adjustSingleSide(leftList, cx, cy, r, -1, viewWidth, viewHeight);\n\n for (var i = 0; i < labelLayoutList.length; i++) {\n var linePoints = labelLayoutList[i].linePoints;\n\n if (linePoints) {\n var dist = linePoints[1][0] - linePoints[2][0];\n\n if (labelLayoutList[i].x < cx) {\n linePoints[2][0] = labelLayoutList[i].x + 3;\n } else {\n linePoints[2][0] = labelLayoutList[i].x - 3;\n }\n\n linePoints[1][1] = linePoints[2][1] = labelLayoutList[i].y;\n linePoints[1][0] = linePoints[2][0] + dist;\n }\n }\n}\n\nfunction _default(seriesModel, r, viewWidth, viewHeight) {\n var data = seriesModel.getData();\n var labelLayoutList = [];\n var cx;\n var cy;\n var hasLabelRotate = false;\n data.each(function (idx) {\n var layout = data.getItemLayout(idx);\n var itemModel = data.getItemModel(idx);\n var labelModel = itemModel.getModel('label.normal'); // Use position in normal or emphasis\n\n var labelPosition = labelModel.get('position') || itemModel.get('label.emphasis.position');\n var labelLineModel = itemModel.getModel('labelLine.normal');\n var labelLineLen = labelLineModel.get('length');\n var labelLineLen2 = labelLineModel.get('length2');\n var midAngle = (layout.startAngle + layout.endAngle) / 2;\n var dx = Math.cos(midAngle);\n var dy = Math.sin(midAngle);\n var textX;\n var textY;\n var linePoints;\n var textAlign;\n cx = layout.cx;\n cy = layout.cy;\n var isLabelInside = labelPosition === 'inside' || labelPosition === 'inner';\n\n if (labelPosition === 'center') {\n textX = layout.cx;\n textY = layout.cy;\n textAlign = 'center';\n } else {\n var x1 = (isLabelInside ? (layout.r + layout.r0) / 2 * dx : layout.r * dx) + cx;\n var y1 = (isLabelInside ? (layout.r + layout.r0) / 2 * dy : layout.r * dy) + cy;\n textX = x1 + dx * 3;\n textY = y1 + dy * 3;\n\n if (!isLabelInside) {\n // For roseType\n var x2 = x1 + dx * (labelLineLen + r - layout.r);\n var y2 = y1 + dy * (labelLineLen + r - layout.r);\n var x3 = x2 + (dx < 0 ? -1 : 1) * labelLineLen2;\n var y3 = y2;\n textX = x3 + (dx < 0 ? -5 : 5);\n textY = y3;\n linePoints = [[x1, y1], [x2, y2], [x3, y3]];\n }\n\n textAlign = isLabelInside ? 'center' : dx > 0 ? 'left' : 'right';\n }\n\n var font = labelModel.getFont();\n var labelRotate = labelModel.get('rotate') ? dx < 0 ? -midAngle + Math.PI : -midAngle : 0;\n var text = seriesModel.getFormattedLabel(idx, 'normal') || data.getName(idx);\n var textRect = textContain.getBoundingRect(text, font, textAlign, 'top');\n hasLabelRotate = !!labelRotate;\n layout.label = {\n x: textX,\n y: textY,\n position: labelPosition,\n height: textRect.height,\n len: labelLineLen,\n len2: labelLineLen2,\n linePoints: linePoints,\n textAlign: textAlign,\n verticalAlign: 'middle',\n rotation: labelRotate,\n inside: isLabelInside\n }; // Not layout the inside label\n\n if (!isLabelInside) {\n labelLayoutList.push(layout.label);\n }\n });\n\n if (!hasLabelRotate && seriesModel.get('avoidLabelOverlap')) {\n avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight);\n }\n}\n\nmodule.exports = _default;","var Component = require(\"../../model/Component\");\n\nComponent.registerSubTypeDefaulter('visualMap', function (option) {\n // Compatible with ec2, when splitNumber === 0, continuous visualMap will be used.\n return !option.categories && (!(option.pieces ? option.pieces.length > 0 : option.splitNumber > 0) || option.calculable) ? 'continuous' : 'piecewise';\n});","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar AxisBuilder = require(\"./AxisBuilder\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar singleAxisHelper = require(\"./singleAxisHelper\");\n\nvar AxisView = require(\"./AxisView\");\n\nvar getInterval = AxisBuilder.getInterval;\nvar ifIgnoreOnTick = AxisBuilder.ifIgnoreOnTick;\nvar axisBuilderAttrs = ['axisLine', 'axisTickLabel', 'axisName'];\nvar selfBuilderAttr = 'splitLine';\nvar SingleAxisView = AxisView.extend({\n type: 'singleAxis',\n axisPointerClass: 'SingleAxisPointer',\n render: function (axisModel, ecModel, api, payload) {\n var group = this.group;\n group.removeAll();\n var layout = singleAxisHelper.layout(axisModel);\n var axisBuilder = new AxisBuilder(axisModel, layout);\n zrUtil.each(axisBuilderAttrs, axisBuilder.add, axisBuilder);\n group.add(axisBuilder.getGroup());\n\n if (axisModel.get(selfBuilderAttr + '.show')) {\n this['_' + selfBuilderAttr](axisModel, layout.labelInterval);\n }\n\n SingleAxisView.superCall(this, 'render', axisModel, ecModel, api, payload);\n },\n _splitLine: function (axisModel, labelInterval) {\n var axis = axisModel.axis;\n\n if (axis.scale.isBlank()) {\n return;\n }\n\n var splitLineModel = axisModel.getModel('splitLine');\n var lineStyleModel = splitLineModel.getModel('lineStyle');\n var lineWidth = lineStyleModel.get('width');\n var lineColors = lineStyleModel.get('color');\n var lineInterval = getInterval(splitLineModel, labelInterval);\n lineColors = lineColors instanceof Array ? lineColors : [lineColors];\n var gridRect = axisModel.coordinateSystem.getRect();\n var isHorizontal = axis.isHorizontal();\n var splitLines = [];\n var lineCount = 0;\n var ticksCoords = axis.getTicksCoords();\n var p1 = [];\n var p2 = [];\n var showMinLabel = axisModel.get('axisLabel.showMinLabel');\n var showMaxLabel = axisModel.get('axisLabel.showMaxLabel');\n\n for (var i = 0; i < ticksCoords.length; ++i) {\n if (ifIgnoreOnTick(axis, i, lineInterval, ticksCoords.length, showMinLabel, showMaxLabel)) {\n continue;\n }\n\n var tickCoord = axis.toGlobalCoord(ticksCoords[i]);\n\n if (isHorizontal) {\n p1[0] = tickCoord;\n p1[1] = gridRect.y;\n p2[0] = tickCoord;\n p2[1] = gridRect.y + gridRect.height;\n } else {\n p1[0] = gridRect.x;\n p1[1] = tickCoord;\n p2[0] = gridRect.x + gridRect.width;\n p2[1] = tickCoord;\n }\n\n var colorIndex = lineCount++ % lineColors.length;\n splitLines[colorIndex] = splitLines[colorIndex] || [];\n splitLines[colorIndex].push(new graphic.Line(graphic.subPixelOptimizeLine({\n shape: {\n x1: p1[0],\n y1: p1[1],\n x2: p2[0],\n y2: p2[1]\n },\n style: {\n lineWidth: lineWidth\n },\n silent: true\n })));\n }\n\n for (var i = 0; i < splitLines.length; ++i) {\n this.group.add(graphic.mergePath(splitLines[i], {\n style: {\n stroke: lineColors[i % lineColors.length],\n lineDash: lineStyleModel.getLineDash(lineWidth),\n lineWidth: lineWidth\n },\n silent: true\n }));\n }\n }\n});\nvar _default = SingleAxisView;\nmodule.exports = _default;","var Animator = require(\"../animation/Animator\");\n\nvar log = require(\"../core/log\");\n\nvar _util = require(\"../core/util\");\n\nvar isString = _util.isString;\nvar isFunction = _util.isFunction;\nvar isObject = _util.isObject;\nvar isArrayLike = _util.isArrayLike;\nvar indexOf = _util.indexOf;\n\n/**\n * @alias modue:zrender/mixin/Animatable\n * @constructor\n */\nvar Animatable = function () {\n /**\n * @type {Array.}\n * @readOnly\n */\n this.animators = [];\n};\n\nAnimatable.prototype = {\n constructor: Animatable,\n\n /**\n * 动画\n *\n * @param {string} path The path to fetch value from object, like 'a.b.c'.\n * @param {boolean} [loop] Whether to loop animation.\n * @return {module:zrender/animation/Animator}\n * @example:\n * el.animate('style', false)\n * .when(1000, {x: 10} )\n * .done(function(){ // Animation done })\n * .start()\n */\n animate: function (path, loop) {\n var target;\n var animatingShape = false;\n var el = this;\n var zr = this.__zr;\n\n if (path) {\n var pathSplitted = path.split('.');\n var prop = el; // If animating shape\n\n animatingShape = pathSplitted[0] === 'shape';\n\n for (var i = 0, l = pathSplitted.length; i < l; i++) {\n if (!prop) {\n continue;\n }\n\n prop = prop[pathSplitted[i]];\n }\n\n if (prop) {\n target = prop;\n }\n } else {\n target = el;\n }\n\n if (!target) {\n log('Property \"' + path + '\" is not existed in element ' + el.id);\n return;\n }\n\n var animators = el.animators;\n var animator = new Animator(target, loop);\n animator.during(function (target) {\n el.dirty(animatingShape);\n }).done(function () {\n // FIXME Animator will not be removed if use `Animator#stop` to stop animation\n animators.splice(indexOf(animators, animator), 1);\n });\n animators.push(animator); // If animate after added to the zrender\n\n if (zr) {\n zr.animation.addAnimator(animator);\n }\n\n return animator;\n },\n\n /**\n * 停止动画\n * @param {boolean} forwardToLast If move to last frame before stop\n */\n stopAnimation: function (forwardToLast) {\n var animators = this.animators;\n var len = animators.length;\n\n for (var i = 0; i < len; i++) {\n animators[i].stop(forwardToLast);\n }\n\n animators.length = 0;\n return this;\n },\n\n /**\n * Caution: this method will stop previous animation.\n * So do not use this method to one element twice before\n * animation starts, unless you know what you are doing.\n * @param {Object} target\n * @param {number} [time=500] Time in ms\n * @param {string} [easing='linear']\n * @param {number} [delay=0]\n * @param {Function} [callback]\n * @param {Function} [forceAnimate] Prevent stop animation and callback\n * immediently when target values are the same as current values.\n *\n * @example\n * // Animate position\n * el.animateTo({\n * position: [10, 10]\n * }, function () { // done })\n *\n * // Animate shape, style and position in 100ms, delayed 100ms, with cubicOut easing\n * el.animateTo({\n * shape: {\n * width: 500\n * },\n * style: {\n * fill: 'red'\n * }\n * position: [10, 10]\n * }, 100, 100, 'cubicOut', function () { // done })\n */\n // TODO Return animation key\n animateTo: function (target, time, delay, easing, callback, forceAnimate) {\n // animateTo(target, time, easing, callback);\n if (isString(delay)) {\n callback = easing;\n easing = delay;\n delay = 0;\n } // animateTo(target, time, delay, callback);\n else if (isFunction(easing)) {\n callback = easing;\n easing = 'linear';\n delay = 0;\n } // animateTo(target, time, callback);\n else if (isFunction(delay)) {\n callback = delay;\n delay = 0;\n } // animateTo(target, callback)\n else if (isFunction(time)) {\n callback = time;\n time = 500;\n } // animateTo(target)\n else if (!time) {\n time = 500;\n } // Stop all previous animations\n\n\n this.stopAnimation();\n\n this._animateToShallow('', this, target, time, delay); // Animators may be removed immediately after start\n // if there is nothing to animate\n\n\n var animators = this.animators.slice();\n var count = animators.length;\n\n function done() {\n count--;\n\n if (!count) {\n callback && callback();\n }\n } // No animators. This should be checked before animators[i].start(),\n // because 'done' may be executed immediately if no need to animate.\n\n\n if (!count) {\n callback && callback();\n } // Start after all animators created\n // Incase any animator is done immediately when all animation properties are not changed\n\n\n for (var i = 0; i < animators.length; i++) {\n animators[i].done(done).start(easing, forceAnimate);\n }\n },\n\n /**\n * @private\n * @param {string} path=''\n * @param {Object} source=this\n * @param {Object} target\n * @param {number} [time=500]\n * @param {number} [delay=0]\n *\n * @example\n * // Animate position\n * el._animateToShallow({\n * position: [10, 10]\n * })\n *\n * // Animate shape, style and position in 100ms, delayed 100ms\n * el._animateToShallow({\n * shape: {\n * width: 500\n * },\n * style: {\n * fill: 'red'\n * }\n * position: [10, 10]\n * }, 100, 100)\n */\n _animateToShallow: function (path, source, target, time, delay) {\n var objShallow = {};\n var propertyCount = 0;\n\n for (var name in target) {\n if (!target.hasOwnProperty(name)) {\n continue;\n }\n\n if (source[name] != null) {\n if (isObject(target[name]) && !isArrayLike(target[name])) {\n this._animateToShallow(path ? path + '.' + name : name, source[name], target[name], time, delay);\n } else {\n objShallow[name] = target[name];\n propertyCount++;\n }\n } else if (target[name] != null) {\n // Attr directly if not has property\n // FIXME, if some property not needed for element ?\n if (!path) {\n this.attr(name, target[name]);\n } else {\n // Shape or style\n var props = {};\n props[path] = {};\n props[path][name] = target[name];\n this.attr(props);\n }\n }\n }\n\n if (propertyCount > 0) {\n this.animate(path, false).when(time == null ? 500 : time, objShallow).delay(delay || 0);\n }\n\n return this;\n }\n};\nvar _default = Animatable;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar SeriesModel = require(\"../../model/Series\");\n\nvar _whiskerBoxCommon = require(\"../helper/whiskerBoxCommon\");\n\nvar seriesModelMixin = _whiskerBoxCommon.seriesModelMixin;\nvar CandlestickSeries = SeriesModel.extend({\n type: 'series.candlestick',\n dependencies: ['xAxis', 'yAxis', 'grid'],\n\n /**\n * @readOnly\n */\n defaultValueDimensions: ['open', 'close', 'lowest', 'highest'],\n\n /**\n * @type {Array.}\n * @readOnly\n */\n dimensions: null,\n\n /**\n * @override\n */\n defaultOption: {\n zlevel: 0,\n // 一级层叠\n z: 2,\n // 二级层叠\n coordinateSystem: 'cartesian2d',\n legendHoverLink: true,\n hoverAnimation: true,\n // xAxisIndex: 0,\n // yAxisIndex: 0,\n layout: null,\n // 'horizontal' or 'vertical'\n itemStyle: {\n normal: {\n color: '#c23531',\n // 阳线 positive\n color0: '#314656',\n // 阴线 negative '#c23531', '#314656'\n borderWidth: 1,\n // FIXME\n // ec2中使用的是lineStyle.color 和 lineStyle.color0\n borderColor: '#c23531',\n borderColor0: '#314656'\n },\n emphasis: {\n borderWidth: 2\n }\n },\n barMaxWidth: null,\n barMinWidth: null,\n barWidth: null,\n animationUpdate: false,\n animationEasing: 'linear',\n animationDuration: 300\n },\n\n /**\n * Get dimension for shadow in dataZoom\n * @return {string} dimension name\n */\n getShadowDim: function () {\n return 'open';\n },\n brushSelector: function (dataIndex, data, selectors) {\n var itemLayout = data.getItemLayout(dataIndex);\n return selectors.rect(itemLayout.brushRect);\n }\n});\nzrUtil.mixin(CandlestickSeries, seriesModelMixin, true);\nvar _default = CandlestickSeries;\nmodule.exports = _default;","var _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar modelUtil = require(\"../../util/model\");\n\nvar brushHelper = require(\"./brushHelper\");\n\nvar each = zrUtil.each;\nvar indexOf = zrUtil.indexOf;\nvar curry = zrUtil.curry;\nvar COORD_CONVERTS = ['dataToPoint', 'pointToData']; // FIXME\n// how to genarialize to more coordinate systems.\n\nvar INCLUDE_FINDER_MAIN_TYPES = ['grid', 'xAxis', 'yAxis', 'geo', 'graph', 'polar', 'radiusAxis', 'angleAxis', 'bmap'];\n/**\n * [option in constructor]:\n * {\n * Index/Id/Name of geo, xAxis, yAxis, grid: See util/model#parseFinder.\n * }\n *\n *\n * [targetInfo]:\n *\n * There can be multiple axes in a single targetInfo. Consider the case\n * of `grid` component, a targetInfo represents a grid which contains one or more\n * cartesian and one or more axes. And consider the case of parallel system,\n * which has multiple axes in a coordinate system.\n * Can be {\n * panelId: ...,\n * coordSys: ,\n * coordSyses: all cartesians.\n * gridModel: \n * xAxes: correspond to coordSyses on index\n * yAxes: correspond to coordSyses on index\n * }\n * or {\n * panelId: ...,\n * coordSys: \n * coordSyses: []\n * geoModel: \n * }\n *\n *\n * [panelOpt]:\n *\n * Make from targetInfo. Input to BrushController.\n * {\n * panelId: ...,\n * rect: ...\n * }\n *\n *\n * [area]:\n *\n * Generated by BrushController or user input.\n * {\n * panelId: Used to locate coordInfo directly. If user inpput, no panelId.\n * brushType: determine how to convert to/from coord('rect' or 'polygon' or 'lineX/Y').\n * Index/Id/Name of geo, xAxis, yAxis, grid: See util/model#parseFinder.\n * range: pixel range.\n * coordRange: representitive coord range (the first one of coordRanges).\n * coordRanges: coord ranges, used in multiple cartesian in one grid.\n * }\n */\n\n/**\n * @param {Object} option contains Index/Id/Name of xAxis/yAxis/geo/grid\n * Each can be {number|Array.}. like: {xAxisIndex: [3, 4]}\n * @param {module:echarts/model/Global} ecModel\n * @param {Object} [opt]\n * @param {Array.} [opt.include] include coordinate system types.\n */\n\nfunction BrushTargetManager(option, ecModel, opt) {\n /**\n * @private\n * @type {Array.}\n */\n var targetInfoList = this._targetInfoList = [];\n var info = {};\n var foundCpts = parseFinder(ecModel, option);\n each(targetInfoBuilders, function (builder, type) {\n if (!opt || !opt.include || indexOf(opt.include, type) >= 0) {\n builder(foundCpts, targetInfoList, info);\n }\n });\n}\n\nvar proto = BrushTargetManager.prototype;\n\nproto.setOutputRanges = function (areas, ecModel) {\n this.matchOutputRanges(areas, ecModel, function (area, coordRange, coordSys) {\n (area.coordRanges || (area.coordRanges = [])).push(coordRange); // area.coordRange is the first of area.coordRanges\n\n if (!area.coordRange) {\n area.coordRange = coordRange; // In 'category' axis, coord to pixel is not reversible, so we can not\n // rebuild range by coordRange accrately, which may bring trouble when\n // brushing only one item. So we use __rangeOffset to rebuilding range\n // by coordRange. And this it only used in brush component so it is no\n // need to be adapted to coordRanges.\n\n var result = coordConvert[area.brushType](0, coordSys, coordRange);\n area.__rangeOffset = {\n offset: diffProcessor[area.brushType](result.values, area.range, [1, 1]),\n xyMinMax: result.xyMinMax\n };\n }\n });\n};\n\nproto.matchOutputRanges = function (areas, ecModel, cb) {\n each(areas, function (area) {\n var targetInfo = this.findTargetInfo(area, ecModel);\n\n if (targetInfo && targetInfo !== true) {\n zrUtil.each(targetInfo.coordSyses, function (coordSys) {\n var result = coordConvert[area.brushType](1, coordSys, area.range);\n cb(area, result.values, coordSys, ecModel);\n });\n }\n }, this);\n};\n\nproto.setInputRanges = function (areas, ecModel) {\n each(areas, function (area) {\n var targetInfo = this.findTargetInfo(area, ecModel);\n area.range = area.range || []; // convert coordRange to global range and set panelId.\n\n if (targetInfo && targetInfo !== true) {\n area.panelId = targetInfo.panelId; // (1) area.range shoule always be calculate from coordRange but does\n // not keep its original value, for the sake of the dataZoom scenario,\n // where area.coordRange remains unchanged but area.range may be changed.\n // (2) Only support converting one coordRange to pixel range in brush\n // component. So do not consider `coordRanges`.\n // (3) About __rangeOffset, see comment above.\n\n var result = coordConvert[area.brushType](0, targetInfo.coordSys, area.coordRange);\n var rangeOffset = area.__rangeOffset;\n area.range = rangeOffset ? diffProcessor[area.brushType](result.values, rangeOffset.offset, getScales(result.xyMinMax, rangeOffset.xyMinMax)) : result.values;\n }\n }, this);\n};\n\nproto.makePanelOpts = function (api, getDefaultBrushType) {\n return zrUtil.map(this._targetInfoList, function (targetInfo) {\n var rect = targetInfo.getPanelRect();\n return {\n panelId: targetInfo.panelId,\n defaultBrushType: getDefaultBrushType && getDefaultBrushType(targetInfo),\n clipPath: brushHelper.makeRectPanelClipPath(rect),\n isTargetByCursor: brushHelper.makeRectIsTargetByCursor(rect, api, targetInfo.coordSysModel),\n getLinearBrushOtherExtent: brushHelper.makeLinearBrushOtherExtent(rect)\n };\n });\n};\n\nproto.controlSeries = function (area, seriesModel, ecModel) {\n // Check whether area is bound in coord, and series do not belong to that coord.\n // If do not do this check, some brush (like lineX) will controll all axes.\n var targetInfo = this.findTargetInfo(area, ecModel);\n return targetInfo === true || targetInfo && indexOf(targetInfo.coordSyses, seriesModel.coordinateSystem) >= 0;\n};\n/**\n * If return Object, a coord found.\n * If reutrn true, global found.\n * Otherwise nothing found.\n *\n * @param {Object} area\n * @param {Array} targetInfoList\n * @return {Object|boolean}\n */\n\n\nproto.findTargetInfo = function (area, ecModel) {\n var targetInfoList = this._targetInfoList;\n var foundCpts = parseFinder(ecModel, area);\n\n for (var i = 0; i < targetInfoList.length; i++) {\n var targetInfo = targetInfoList[i];\n var areaPanelId = area.panelId;\n\n if (areaPanelId) {\n if (targetInfo.panelId === areaPanelId) {\n return targetInfo;\n }\n } else {\n for (var i = 0; i < targetInfoMatchers.length; i++) {\n if (targetInfoMatchers[i](foundCpts, targetInfo)) {\n return targetInfo;\n }\n }\n }\n }\n\n return true;\n};\n\nfunction formatMinMax(minMax) {\n minMax[0] > minMax[1] && minMax.reverse();\n return minMax;\n}\n\nfunction parseFinder(ecModel, option) {\n return modelUtil.parseFinder(ecModel, option, {\n includeMainTypes: INCLUDE_FINDER_MAIN_TYPES\n });\n}\n\nvar targetInfoBuilders = {\n grid: function (foundCpts, targetInfoList) {\n var xAxisModels = foundCpts.xAxisModels;\n var yAxisModels = foundCpts.yAxisModels;\n var gridModels = foundCpts.gridModels; // Remove duplicated.\n\n var gridModelMap = zrUtil.createHashMap();\n var xAxesHas = {};\n var yAxesHas = {};\n\n if (!xAxisModels && !yAxisModels && !gridModels) {\n return;\n }\n\n each(xAxisModels, function (axisModel) {\n var gridModel = axisModel.axis.grid.model;\n gridModelMap.set(gridModel.id, gridModel);\n xAxesHas[gridModel.id] = true;\n });\n each(yAxisModels, function (axisModel) {\n var gridModel = axisModel.axis.grid.model;\n gridModelMap.set(gridModel.id, gridModel);\n yAxesHas[gridModel.id] = true;\n });\n each(gridModels, function (gridModel) {\n gridModelMap.set(gridModel.id, gridModel);\n xAxesHas[gridModel.id] = true;\n yAxesHas[gridModel.id] = true;\n });\n gridModelMap.each(function (gridModel) {\n var grid = gridModel.coordinateSystem;\n var cartesians = [];\n each(grid.getCartesians(), function (cartesian, index) {\n if (indexOf(xAxisModels, cartesian.getAxis('x').model) >= 0 || indexOf(yAxisModels, cartesian.getAxis('y').model) >= 0) {\n cartesians.push(cartesian);\n }\n });\n targetInfoList.push({\n panelId: 'grid--' + gridModel.id,\n gridModel: gridModel,\n coordSysModel: gridModel,\n // Use the first one as the representitive coordSys.\n coordSys: cartesians[0],\n coordSyses: cartesians,\n getPanelRect: panelRectBuilder.grid,\n xAxisDeclared: xAxesHas[gridModel.id],\n yAxisDeclared: yAxesHas[gridModel.id]\n });\n });\n },\n geo: function (foundCpts, targetInfoList) {\n each(foundCpts.geoModels, function (geoModel) {\n var coordSys = geoModel.coordinateSystem;\n targetInfoList.push({\n panelId: 'geo--' + geoModel.id,\n geoModel: geoModel,\n coordSysModel: geoModel,\n coordSys: coordSys,\n coordSyses: [coordSys],\n getPanelRect: panelRectBuilder.geo\n });\n });\n }\n};\nvar targetInfoMatchers = [// grid\nfunction (foundCpts, targetInfo) {\n var xAxisModel = foundCpts.xAxisModel;\n var yAxisModel = foundCpts.yAxisModel;\n var gridModel = foundCpts.gridModel;\n !gridModel && xAxisModel && (gridModel = xAxisModel.axis.grid.model);\n !gridModel && yAxisModel && (gridModel = yAxisModel.axis.grid.model);\n return gridModel && gridModel === targetInfo.gridModel;\n}, // geo\nfunction (foundCpts, targetInfo) {\n var geoModel = foundCpts.geoModel;\n return geoModel && geoModel === targetInfo.geoModel;\n}];\nvar panelRectBuilder = {\n grid: function () {\n // grid is not Transformable.\n return this.coordSys.grid.getRect().clone();\n },\n geo: function () {\n var coordSys = this.coordSys;\n var rect = coordSys.getBoundingRect().clone(); // geo roam and zoom transform\n\n rect.applyTransform(graphic.getTransform(coordSys));\n return rect;\n }\n};\nvar coordConvert = {\n lineX: curry(axisConvert, 0),\n lineY: curry(axisConvert, 1),\n rect: function (to, coordSys, rangeOrCoordRange) {\n var xminymin = coordSys[COORD_CONVERTS[to]]([rangeOrCoordRange[0][0], rangeOrCoordRange[1][0]]);\n var xmaxymax = coordSys[COORD_CONVERTS[to]]([rangeOrCoordRange[0][1], rangeOrCoordRange[1][1]]);\n var values = [formatMinMax([xminymin[0], xmaxymax[0]]), formatMinMax([xminymin[1], xmaxymax[1]])];\n return {\n values: values,\n xyMinMax: values\n };\n },\n polygon: function (to, coordSys, rangeOrCoordRange) {\n var xyMinMax = [[Infinity, -Infinity], [Infinity, -Infinity]];\n var values = zrUtil.map(rangeOrCoordRange, function (item) {\n var p = coordSys[COORD_CONVERTS[to]](item);\n xyMinMax[0][0] = Math.min(xyMinMax[0][0], p[0]);\n xyMinMax[1][0] = Math.min(xyMinMax[1][0], p[1]);\n xyMinMax[0][1] = Math.max(xyMinMax[0][1], p[0]);\n xyMinMax[1][1] = Math.max(xyMinMax[1][1], p[1]);\n return p;\n });\n return {\n values: values,\n xyMinMax: xyMinMax\n };\n }\n};\n\nfunction axisConvert(axisNameIndex, to, coordSys, rangeOrCoordRange) {\n var axis = coordSys.getAxis(['x', 'y'][axisNameIndex]);\n var values = formatMinMax(zrUtil.map([0, 1], function (i) {\n return to ? axis.coordToData(axis.toLocalCoord(rangeOrCoordRange[i])) : axis.toGlobalCoord(axis.dataToCoord(rangeOrCoordRange[i]));\n }));\n var xyMinMax = [];\n xyMinMax[axisNameIndex] = values;\n xyMinMax[1 - axisNameIndex] = [NaN, NaN];\n return {\n values: values,\n xyMinMax: xyMinMax\n };\n}\n\nvar diffProcessor = {\n lineX: curry(axisDiffProcessor, 0),\n lineY: curry(axisDiffProcessor, 1),\n rect: function (values, refer, scales) {\n return [[values[0][0] - scales[0] * refer[0][0], values[0][1] - scales[0] * refer[0][1]], [values[1][0] - scales[1] * refer[1][0], values[1][1] - scales[1] * refer[1][1]]];\n },\n polygon: function (values, refer, scales) {\n return zrUtil.map(values, function (item, idx) {\n return [item[0] - scales[0] * refer[idx][0], item[1] - scales[1] * refer[idx][1]];\n });\n }\n};\n\nfunction axisDiffProcessor(axisNameIndex, values, refer, scales) {\n return [values[0] - scales[axisNameIndex] * refer[0], values[1] - scales[axisNameIndex] * refer[1]];\n} // We have to process scale caused by dataZoom manually,\n// although it might be not accurate.\n\n\nfunction getScales(xyMinMaxCurr, xyMinMaxOrigin) {\n var sizeCurr = getSize(xyMinMaxCurr);\n var sizeOrigin = getSize(xyMinMaxOrigin);\n var scales = [sizeCurr[0] / sizeOrigin[0], sizeCurr[1] / sizeOrigin[1]];\n isNaN(scales[0]) && (scales[0] = 1);\n isNaN(scales[1]) && (scales[1] = 1);\n return scales;\n}\n\nfunction getSize(xyMinMax) {\n return xyMinMax ? [xyMinMax[0][1] - xyMinMax[0][0], xyMinMax[1][1] - xyMinMax[1][0]] : [NaN, NaN];\n}\n\nvar _default = BrushTargetManager;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar Region = require(\"./Region\");\n\n/**\n * Parse and decode geo json\n * @module echarts/coord/geo/parseGeoJson\n */\nfunction decode(json) {\n if (!json.UTF8Encoding) {\n return json;\n }\n\n var encodeScale = json.UTF8Scale;\n\n if (encodeScale == null) {\n encodeScale = 1024;\n }\n\n var features = json.features;\n\n for (var f = 0; f < features.length; f++) {\n var feature = features[f];\n var geometry = feature.geometry;\n var coordinates = geometry.coordinates;\n var encodeOffsets = geometry.encodeOffsets;\n\n for (var c = 0; c < coordinates.length; c++) {\n var coordinate = coordinates[c];\n\n if (geometry.type === 'Polygon') {\n coordinates[c] = decodePolygon(coordinate, encodeOffsets[c], encodeScale);\n } else if (geometry.type === 'MultiPolygon') {\n for (var c2 = 0; c2 < coordinate.length; c2++) {\n var polygon = coordinate[c2];\n coordinate[c2] = decodePolygon(polygon, encodeOffsets[c][c2], encodeScale);\n }\n }\n }\n } // Has been decoded\n\n\n json.UTF8Encoding = false;\n return json;\n}\n\nfunction decodePolygon(coordinate, encodeOffsets, encodeScale) {\n var result = [];\n var prevX = encodeOffsets[0];\n var prevY = encodeOffsets[1];\n\n for (var i = 0; i < coordinate.length; i += 2) {\n var x = coordinate.charCodeAt(i) - 64;\n var y = coordinate.charCodeAt(i + 1) - 64; // ZigZag decoding\n\n x = x >> 1 ^ -(x & 1);\n y = y >> 1 ^ -(y & 1); // Delta deocding\n\n x += prevX;\n y += prevY;\n prevX = x;\n prevY = y; // Dequantize\n\n result.push([x / encodeScale, y / encodeScale]);\n }\n\n return result;\n}\n/**\n * @alias module:echarts/coord/geo/parseGeoJson\n * @param {Object} geoJson\n * @return {module:zrender/container/Group}\n */\n\n\nfunction _default(geoJson) {\n decode(geoJson);\n return zrUtil.map(zrUtil.filter(geoJson.features, function (featureObj) {\n // Output of mapshaper may have geometry null\n return featureObj.geometry && featureObj.properties && featureObj.geometry.coordinates.length > 0;\n }), function (featureObj) {\n var properties = featureObj.properties;\n var geo = featureObj.geometry;\n var coordinates = geo.coordinates;\n var geometries = [];\n\n if (geo.type === 'Polygon') {\n geometries.push({\n type: 'polygon',\n // According to the GeoJSON specification.\n // First must be exterior, and the rest are all interior(holes).\n exterior: coordinates[0],\n interiors: coordinates.slice(1)\n });\n }\n\n if (geo.type === 'MultiPolygon') {\n zrUtil.each(coordinates, function (item) {\n if (item[0]) {\n geometries.push({\n type: 'polygon',\n exterior: item[0],\n interiors: item.slice(1)\n });\n }\n });\n }\n\n var region = new Region(properties.name, geometries, properties.cp);\n region.properties = properties;\n return region;\n });\n}\n\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\necharts.registerAction({\n type: 'treeExpandAndCollapse',\n event: 'treeExpandAndCollapse',\n update: 'update'\n}, function (payload, ecModel) {\n ecModel.eachComponent({\n mainType: 'series',\n subType: 'tree',\n query: payload\n }, function (seriesModel) {\n var dataIndex = payload.dataIndex;\n var tree = seriesModel.getData().tree;\n var node = tree.getNodeByDataIndex(dataIndex);\n node.isExpand = !node.isExpand;\n });\n});","var echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nrequire(\"./pie/PieSeries\");\n\nrequire(\"./pie/PieView\");\n\nvar createDataSelectAction = require(\"../action/createDataSelectAction\");\n\nvar dataColor = require(\"../visual/dataColor\");\n\nvar pieLayout = require(\"./pie/pieLayout\");\n\nvar dataFilter = require(\"../processor/dataFilter\");\n\ncreateDataSelectAction('pie', [{\n type: 'pieToggleSelect',\n event: 'pieselectchanged',\n method: 'toggleSelected'\n}, {\n type: 'pieSelect',\n event: 'pieselected',\n method: 'select'\n}, {\n type: 'pieUnSelect',\n event: 'pieunselected',\n method: 'unSelect'\n}]);\necharts.registerVisual(zrUtil.curry(dataColor, 'pie'));\necharts.registerLayout(zrUtil.curry(pieLayout, 'pie'));\necharts.registerProcessor(zrUtil.curry(dataFilter, 'pie'));","var echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar BrushController = require(\"../helper/BrushController\");\n\nvar _default = echarts.extendComponentView({\n type: 'brush',\n init: function (ecModel, api) {\n /**\n * @readOnly\n * @type {module:echarts/model/Global}\n */\n this.ecModel = ecModel;\n /**\n * @readOnly\n * @type {module:echarts/ExtensionAPI}\n */\n\n this.api = api;\n /**\n * @readOnly\n * @type {module:echarts/component/brush/BrushModel}\n */\n\n this.model;\n /**\n * @private\n * @type {module:echarts/component/helper/BrushController}\n */\n\n (this._brushController = new BrushController(api.getZr())).on('brush', zrUtil.bind(this._onBrush, this)).mount();\n },\n\n /**\n * @override\n */\n render: function (brushModel) {\n this.model = brushModel;\n return updateController.apply(this, arguments);\n },\n\n /**\n * @override\n */\n updateView: updateController,\n\n /**\n * @override\n */\n updateLayout: updateController,\n\n /**\n * @override\n */\n updateVisual: updateController,\n\n /**\n * @override\n */\n dispose: function () {\n this._brushController.dispose();\n },\n\n /**\n * @private\n */\n _onBrush: function (areas, opt) {\n var modelId = this.model.id;\n this.model.brushTargetManager.setOutputRanges(areas, this.ecModel); // Action is not dispatched on drag end, because the drag end\n // emits the same params with the last drag move event, and\n // may have some delay when using touch pad, which makes\n // animation not smooth (when using debounce).\n\n (!opt.isEnd || opt.removeOnClick) && this.api.dispatchAction({\n type: 'brush',\n brushId: modelId,\n areas: zrUtil.clone(areas),\n $from: modelId\n });\n }\n});\n\nfunction updateController(brushModel, ecModel, api, payload) {\n // Do not update controller when drawing.\n (!payload || payload.$from !== brushModel.id) && this._brushController.setPanels(brushModel.brushTargetManager.makePanelOpts(api)).enableBrush(brushModel.brushOption).updateCovers(brushModel.areas.slice());\n}\n\nmodule.exports = _default;","require(\"../coord/parallel/parallelCreator\");\n\nrequire(\"./axis/parallelAxisAction\");\n\nrequire(\"./axis/ParallelAxisView\");","var IRRELEVANT_EXCLUDES = {\n 'axisPointer': 1,\n 'tooltip': 1,\n 'brush': 1\n};\n/**\n * Avoid that: mouse click on a elements that is over geo or graph,\n * but roam is triggered.\n */\n\nfunction onIrrelevantElement(e, api, targetCoordSysModel) {\n var model = api.getComponentByElement(e.topTarget); // If model is axisModel, it works only if it is injected with coordinateSystem.\n\n var coordSys = model && model.coordinateSystem;\n return model && model !== targetCoordSysModel && !IRRELEVANT_EXCLUDES[model.mainType] && coordSys && coordSys.model !== targetCoordSysModel;\n}\n\nexports.onIrrelevantElement = onIrrelevantElement;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar ComponentModel = require(\"../../model/Component\");\n\nvar axisModelCreator = require(\"../axisModelCreator\");\n\nvar axisModelCommonMixin = require(\"../axisModelCommonMixin\");\n\nvar AxisModel = ComponentModel.extend({\n type: 'singleAxis',\n layoutMode: 'box',\n\n /**\n * @type {module:echarts/coord/single/SingleAxis}\n */\n axis: null,\n\n /**\n * @type {module:echarts/coord/single/Single}\n */\n coordinateSystem: null,\n\n /**\n * @override\n */\n getCoordSysModel: function () {\n return this;\n }\n});\nvar defaultOption = {\n left: '5%',\n top: '5%',\n right: '5%',\n bottom: '5%',\n type: 'value',\n position: 'bottom',\n orient: 'horizontal',\n axisLine: {\n show: true,\n lineStyle: {\n width: 2,\n type: 'solid'\n }\n },\n // Single coordinate system and single axis is the,\n // which is used as the parent tooltip model.\n // same model, so we set default tooltip show as true.\n tooltip: {\n show: true\n },\n axisTick: {\n show: true,\n length: 6,\n lineStyle: {\n width: 2\n }\n },\n axisLabel: {\n show: true,\n interval: 'auto'\n },\n splitLine: {\n show: true,\n lineStyle: {\n type: 'dashed',\n opacity: 0.2\n }\n }\n};\n\nfunction getAxisType(axisName, option) {\n return option.type || (option.data ? 'category' : 'value');\n}\n\nzrUtil.merge(AxisModel.prototype, axisModelCommonMixin);\naxisModelCreator('single', AxisModel, getAxisType, defaultOption);\nvar _default = AxisModel;\nmodule.exports = _default;","var _model = require(\"../../util/model\");\n\nvar otherDimToDataDim = _model.otherDimToDataDim;\n\n/**\n * @module echarts/chart/helper/Symbol\n */\nfunction findLabelValueDim(data) {\n var valueDim;\n var labelDims = otherDimToDataDim(data, 'label');\n\n if (labelDims.length) {\n valueDim = labelDims[0];\n } else {\n // Get last value dim\n var dimensions = data.dimensions.slice();\n var dataType;\n\n while (dimensions.length && (valueDim = dimensions.pop(), dataType = data.getDimensionInfo(valueDim).type, dataType === 'ordinal' || dataType === 'time')) {} // jshint ignore:line\n\n }\n\n return valueDim;\n}\n\nexports.findLabelValueDim = findLabelValueDim;","var Path = require(\"../Path\");\n\nvar roundRectHelper = require(\"../helper/roundRect\");\n\n/**\n * 矩形\n * @module zrender/graphic/shape/Rect\n */\nvar _default = Path.extend({\n type: 'rect',\n shape: {\n // 左上、右上、右下、左下角的半径依次为r1、r2、r3、r4\n // r缩写为1 相当于 [1, 1, 1, 1]\n // r缩写为[1] 相当于 [1, 1, 1, 1]\n // r缩写为[1, 2] 相当于 [1, 2, 1, 2]\n // r缩写为[1, 2, 3] 相当于 [1, 2, 3, 2]\n r: 0,\n x: 0,\n y: 0,\n width: 0,\n height: 0\n },\n buildPath: function (ctx, shape) {\n var x = shape.x;\n var y = shape.y;\n var width = shape.width;\n var height = shape.height;\n\n if (!shape.r) {\n ctx.rect(x, y, width, height);\n } else {\n roundRectHelper.buildPath(ctx, shape);\n }\n\n ctx.closePath();\n return;\n }\n});\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar _symbol = require(\"../../util/symbol\");\n\nvar createSymbol = _symbol.createSymbol;\n\nvar _graphic = require(\"../../util/graphic\");\n\nvar Group = _graphic.Group;\n\nvar _number = require(\"../../util/number\");\n\nvar parsePercent = _number.parsePercent;\n\nvar SymbolClz = require(\"./Symbol\");\n\n/**\n * Symbol with ripple effect\n * @module echarts/chart/helper/EffectSymbol\n */\nvar EFFECT_RIPPLE_NUMBER = 3;\n\nfunction normalizeSymbolSize(symbolSize) {\n if (!zrUtil.isArray(symbolSize)) {\n symbolSize = [+symbolSize, +symbolSize];\n }\n\n return symbolSize;\n}\n\nfunction updateRipplePath(rippleGroup, effectCfg) {\n rippleGroup.eachChild(function (ripplePath) {\n ripplePath.attr({\n z: effectCfg.z,\n zlevel: effectCfg.zlevel,\n style: {\n stroke: effectCfg.brushType === 'stroke' ? effectCfg.color : null,\n fill: effectCfg.brushType === 'fill' ? effectCfg.color : null\n }\n });\n });\n}\n/**\n * @constructor\n * @param {module:echarts/data/List} data\n * @param {number} idx\n * @extends {module:zrender/graphic/Group}\n */\n\n\nfunction EffectSymbol(data, idx) {\n Group.call(this);\n var symbol = new SymbolClz(data, idx);\n var rippleGroup = new Group();\n this.add(symbol);\n this.add(rippleGroup);\n\n rippleGroup.beforeUpdate = function () {\n this.attr(symbol.getScale());\n };\n\n this.updateData(data, idx);\n}\n\nvar effectSymbolProto = EffectSymbol.prototype;\n\neffectSymbolProto.stopEffectAnimation = function () {\n this.childAt(1).removeAll();\n};\n\neffectSymbolProto.startEffectAnimation = function (effectCfg) {\n var symbolType = effectCfg.symbolType;\n var color = effectCfg.color;\n var rippleGroup = this.childAt(1);\n\n for (var i = 0; i < EFFECT_RIPPLE_NUMBER; i++) {\n // var ripplePath = createSymbol(\n // symbolType, -0.5, -0.5, 1, 1, color\n // );\n // If width/height are set too small (e.g., set to 1) on ios10\n // and macOS Sierra, a circle stroke become a rect, no matter what\n // the scale is set. So we set width/height as 2. See #4136.\n var ripplePath = createSymbol(symbolType, -1, -1, 2, 2, color);\n ripplePath.attr({\n style: {\n strokeNoScale: true\n },\n z2: 99,\n silent: true,\n scale: [0.5, 0.5]\n });\n var delay = -i / EFFECT_RIPPLE_NUMBER * effectCfg.period + effectCfg.effectOffset; // TODO Configurable effectCfg.period\n\n ripplePath.animate('', true).when(effectCfg.period, {\n scale: [effectCfg.rippleScale / 2, effectCfg.rippleScale / 2]\n }).delay(delay).start();\n ripplePath.animateStyle(true).when(effectCfg.period, {\n opacity: 0\n }).delay(delay).start();\n rippleGroup.add(ripplePath);\n }\n\n updateRipplePath(rippleGroup, effectCfg);\n};\n/**\n * Update effect symbol\n */\n\n\neffectSymbolProto.updateEffectAnimation = function (effectCfg) {\n var oldEffectCfg = this._effectCfg;\n var rippleGroup = this.childAt(1); // Must reinitialize effect if following configuration changed\n\n var DIFFICULT_PROPS = ['symbolType', 'period', 'rippleScale'];\n\n for (var i = 0; i < DIFFICULT_PROPS.length; i++) {\n var propName = DIFFICULT_PROPS[i];\n\n if (oldEffectCfg[propName] !== effectCfg[propName]) {\n this.stopEffectAnimation();\n this.startEffectAnimation(effectCfg);\n return;\n }\n }\n\n updateRipplePath(rippleGroup, effectCfg);\n};\n/**\n * Highlight symbol\n */\n\n\neffectSymbolProto.highlight = function () {\n this.trigger('emphasis');\n};\n/**\n * Downplay symbol\n */\n\n\neffectSymbolProto.downplay = function () {\n this.trigger('normal');\n};\n/**\n * Update symbol properties\n * @param {module:echarts/data/List} data\n * @param {number} idx\n */\n\n\neffectSymbolProto.updateData = function (data, idx) {\n var seriesModel = data.hostModel;\n this.childAt(0).updateData(data, idx);\n var rippleGroup = this.childAt(1);\n var itemModel = data.getItemModel(idx);\n var symbolType = data.getItemVisual(idx, 'symbol');\n var symbolSize = normalizeSymbolSize(data.getItemVisual(idx, 'symbolSize'));\n var color = data.getItemVisual(idx, 'color');\n rippleGroup.attr('scale', symbolSize);\n rippleGroup.traverse(function (ripplePath) {\n ripplePath.attr({\n fill: color\n });\n });\n var symbolOffset = itemModel.getShallow('symbolOffset');\n\n if (symbolOffset) {\n var pos = rippleGroup.position;\n pos[0] = parsePercent(symbolOffset[0], symbolSize[0]);\n pos[1] = parsePercent(symbolOffset[1], symbolSize[1]);\n }\n\n rippleGroup.rotation = (itemModel.getShallow('symbolRotate') || 0) * Math.PI / 180 || 0;\n var effectCfg = {};\n effectCfg.showEffectOn = seriesModel.get('showEffectOn');\n effectCfg.rippleScale = itemModel.get('rippleEffect.scale');\n effectCfg.brushType = itemModel.get('rippleEffect.brushType');\n effectCfg.period = itemModel.get('rippleEffect.period') * 1000;\n effectCfg.effectOffset = idx / data.count();\n effectCfg.z = itemModel.getShallow('z') || 0;\n effectCfg.zlevel = itemModel.getShallow('zlevel') || 0;\n effectCfg.symbolType = symbolType;\n effectCfg.color = color;\n this.off('mouseover').off('mouseout').off('emphasis').off('normal');\n\n if (effectCfg.showEffectOn === 'render') {\n this._effectCfg ? this.updateEffectAnimation(effectCfg) : this.startEffectAnimation(effectCfg);\n this._effectCfg = effectCfg;\n } else {\n // Not keep old effect config\n this._effectCfg = null;\n this.stopEffectAnimation();\n var symbol = this.childAt(0);\n\n var onEmphasis = function () {\n symbol.highlight();\n\n if (effectCfg.showEffectOn !== 'render') {\n this.startEffectAnimation(effectCfg);\n }\n };\n\n var onNormal = function () {\n symbol.downplay();\n\n if (effectCfg.showEffectOn !== 'render') {\n this.stopEffectAnimation();\n }\n };\n\n this.on('mouseover', onEmphasis, this).on('mouseout', onNormal, this).on('emphasis', onEmphasis, this).on('normal', onNormal, this);\n }\n\n this._effectCfg = effectCfg;\n};\n\neffectSymbolProto.fadeOut = function (cb) {\n this.off('mouseover').off('mouseout').off('emphasis').off('normal');\n cb && cb();\n};\n\nzrUtil.inherits(EffectSymbol, Group);\nvar _default = EffectSymbol;\nmodule.exports = _default;","var graphic = require(\"../../util/graphic\");\n\nvar _symbol = require(\"../../util/symbol\");\n\nvar createSymbol = _symbol.createSymbol;\n// TODO Batch by color\nvar LargeSymbolPath = graphic.extendShape({\n shape: {\n points: null,\n sizes: null\n },\n symbolProxy: null,\n buildPath: function (path, shape) {\n var points = shape.points;\n var sizes = shape.sizes;\n var symbolProxy = this.symbolProxy;\n var symbolProxyShape = symbolProxy.shape;\n\n for (var i = 0; i < points.length; i++) {\n var pt = points[i];\n\n if (isNaN(pt[0]) || isNaN(pt[1])) {\n continue;\n }\n\n var size = sizes[i];\n\n if (size[0] < 4) {\n // Optimize for small symbol\n path.rect(pt[0] - size[0] / 2, pt[1] - size[1] / 2, size[0], size[1]);\n } else {\n symbolProxyShape.x = pt[0] - size[0] / 2;\n symbolProxyShape.y = pt[1] - size[1] / 2;\n symbolProxyShape.width = size[0];\n symbolProxyShape.height = size[1];\n symbolProxy.buildPath(path, symbolProxyShape, true);\n }\n }\n },\n findDataIndex: function (x, y) {\n var shape = this.shape;\n var points = shape.points;\n var sizes = shape.sizes; // Not consider transform\n // Treat each element as a rect\n // top down traverse\n\n for (var i = points.length - 1; i >= 0; i--) {\n var pt = points[i];\n var size = sizes[i];\n var x0 = pt[0] - size[0] / 2;\n var y0 = pt[1] - size[1] / 2;\n\n if (x >= x0 && y >= y0 && x <= x0 + size[0] && y <= y0 + size[1]) {\n // i is dataIndex\n return i;\n }\n }\n\n return -1;\n }\n});\n\nfunction LargeSymbolDraw() {\n this.group = new graphic.Group();\n this._symbolEl = new LargeSymbolPath({// rectHover: true,\n // cursor: 'default'\n });\n}\n\nvar largeSymbolProto = LargeSymbolDraw.prototype;\n/**\n * Update symbols draw by new data\n * @param {module:echarts/data/List} data\n */\n\nlargeSymbolProto.updateData = function (data) {\n this.group.removeAll();\n var symbolEl = this._symbolEl;\n var seriesModel = data.hostModel;\n symbolEl.setShape({\n points: data.mapArray(data.getItemLayout),\n sizes: data.mapArray(function (idx) {\n var size = data.getItemVisual(idx, 'symbolSize');\n\n if (!(size instanceof Array)) {\n size = [size, size];\n }\n\n return size;\n })\n }); // Create symbolProxy to build path for each data\n\n symbolEl.symbolProxy = createSymbol(data.getVisual('symbol'), 0, 0, 0, 0); // Use symbolProxy setColor method\n\n symbolEl.setColor = symbolEl.symbolProxy.setColor;\n symbolEl.useStyle(seriesModel.getModel('itemStyle.normal').getItemStyle(['color']));\n var visualColor = data.getVisual('color');\n\n if (visualColor) {\n symbolEl.setColor(visualColor);\n } // Enable tooltip\n // PENDING May have performance issue when path is extremely large\n\n\n symbolEl.seriesIndex = seriesModel.seriesIndex;\n symbolEl.on('mousemove', function (e) {\n symbolEl.dataIndex = null;\n var dataIndex = symbolEl.findDataIndex(e.offsetX, e.offsetY);\n\n if (dataIndex >= 0) {\n // Provide dataIndex for tooltip\n symbolEl.dataIndex = dataIndex;\n }\n }); // Add back\n\n this.group.add(symbolEl);\n};\n\nlargeSymbolProto.updateLayout = function (seriesModel) {\n var data = seriesModel.getData();\n\n this._symbolEl.setShape({\n points: data.mapArray(data.getItemLayout)\n });\n};\n\nlargeSymbolProto.remove = function () {\n this.group.removeAll();\n};\n\nvar _default = LargeSymbolDraw;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar modelUtil = require(\"../util/model\");\n\nvar ComponentModel = require(\"./Component\");\n\n/**\n * ECharts option manager\n *\n * @module {echarts/model/OptionManager}\n */\nvar each = zrUtil.each;\nvar clone = zrUtil.clone;\nvar map = zrUtil.map;\nvar merge = zrUtil.merge;\nvar QUERY_REG = /^(min|max)?(.+)$/;\n/**\n * TERM EXPLANATIONS:\n *\n * [option]:\n *\n * An object that contains definitions of components. For example:\n * var option = {\n * title: {...},\n * legend: {...},\n * visualMap: {...},\n * series: [\n * {data: [...]},\n * {data: [...]},\n * ...\n * ]\n * };\n *\n * [rawOption]:\n *\n * An object input to echarts.setOption. 'rawOption' may be an\n * 'option', or may be an object contains multi-options. For example:\n * var option = {\n * baseOption: {\n * title: {...},\n * legend: {...},\n * series: [\n * {data: [...]},\n * {data: [...]},\n * ...\n * ]\n * },\n * timeline: {...},\n * options: [\n * {title: {...}, series: {data: [...]}},\n * {title: {...}, series: {data: [...]}},\n * ...\n * ],\n * media: [\n * {\n * query: {maxWidth: 320},\n * option: {series: {x: 20}, visualMap: {show: false}}\n * },\n * {\n * query: {minWidth: 320, maxWidth: 720},\n * option: {series: {x: 500}, visualMap: {show: true}}\n * },\n * {\n * option: {series: {x: 1200}, visualMap: {show: true}}\n * }\n * ]\n * };\n *\n * @alias module:echarts/model/OptionManager\n * @param {module:echarts/ExtensionAPI} api\n */\n\nfunction OptionManager(api) {\n /**\n * @private\n * @type {module:echarts/ExtensionAPI}\n */\n this._api = api;\n /**\n * @private\n * @type {Array.}\n */\n\n this._timelineOptions = [];\n /**\n * @private\n * @type {Array.}\n */\n\n this._mediaList = [];\n /**\n * @private\n * @type {Object}\n */\n\n this._mediaDefault;\n /**\n * -1, means default.\n * empty means no media.\n * @private\n * @type {Array.}\n */\n\n this._currentMediaIndices = [];\n /**\n * @private\n * @type {Object}\n */\n\n this._optionBackup;\n /**\n * @private\n * @type {Object}\n */\n\n this._newBaseOption;\n} // timeline.notMerge is not supported in ec3. Firstly there is rearly\n// case that notMerge is needed. Secondly supporting 'notMerge' requires\n// rawOption cloned and backuped when timeline changed, which does no\n// good to performance. What's more, that both timeline and setOption\n// method supply 'notMerge' brings complex and some problems.\n// Consider this case:\n// (step1) chart.setOption({timeline: {notMerge: false}, ...}, false);\n// (step2) chart.setOption({timeline: {notMerge: true}, ...}, false);\n\n\nOptionManager.prototype = {\n constructor: OptionManager,\n\n /**\n * @public\n * @param {Object} rawOption Raw option.\n * @param {module:echarts/model/Global} ecModel\n * @param {Array.} optionPreprocessorFuncs\n * @return {Object} Init option\n */\n setOption: function (rawOption, optionPreprocessorFuncs) {\n rawOption = clone(rawOption, true); // FIXME\n // 如果 timeline options 或者 media 中设置了某个属性,而baseOption中没有设置,则进行警告。\n\n var oldOptionBackup = this._optionBackup;\n var newParsedOption = parseRawOption.call(this, rawOption, optionPreprocessorFuncs, !oldOptionBackup);\n this._newBaseOption = newParsedOption.baseOption; // For setOption at second time (using merge mode);\n\n if (oldOptionBackup) {\n // Only baseOption can be merged.\n mergeOption(oldOptionBackup.baseOption, newParsedOption.baseOption); // For simplicity, timeline options and media options do not support merge,\n // that is, if you `setOption` twice and both has timeline options, the latter\n // timeline opitons will not be merged to the formers, but just substitude them.\n\n if (newParsedOption.timelineOptions.length) {\n oldOptionBackup.timelineOptions = newParsedOption.timelineOptions;\n }\n\n if (newParsedOption.mediaList.length) {\n oldOptionBackup.mediaList = newParsedOption.mediaList;\n }\n\n if (newParsedOption.mediaDefault) {\n oldOptionBackup.mediaDefault = newParsedOption.mediaDefault;\n }\n } else {\n this._optionBackup = newParsedOption;\n }\n },\n\n /**\n * @param {boolean} isRecreate\n * @return {Object}\n */\n mountOption: function (isRecreate) {\n var optionBackup = this._optionBackup; // TODO\n // 如果没有reset功能则不clone。\n\n this._timelineOptions = map(optionBackup.timelineOptions, clone);\n this._mediaList = map(optionBackup.mediaList, clone);\n this._mediaDefault = clone(optionBackup.mediaDefault);\n this._currentMediaIndices = [];\n return clone(isRecreate // this._optionBackup.baseOption, which is created at the first `setOption`\n // called, and is merged into every new option by inner method `mergeOption`\n // each time `setOption` called, can be only used in `isRecreate`, because\n // its reliability is under suspicion. In other cases option merge is\n // performed by `model.mergeOption`.\n ? optionBackup.baseOption : this._newBaseOption);\n },\n\n /**\n * @param {module:echarts/model/Global} ecModel\n * @return {Object}\n */\n getTimelineOption: function (ecModel) {\n var option;\n var timelineOptions = this._timelineOptions;\n\n if (timelineOptions.length) {\n // getTimelineOption can only be called after ecModel inited,\n // so we can get currentIndex from timelineModel.\n var timelineModel = ecModel.getComponent('timeline');\n\n if (timelineModel) {\n option = clone(timelineOptions[timelineModel.getCurrentIndex()], true);\n }\n }\n\n return option;\n },\n\n /**\n * @param {module:echarts/model/Global} ecModel\n * @return {Array.}\n */\n getMediaOption: function (ecModel) {\n var ecWidth = this._api.getWidth();\n\n var ecHeight = this._api.getHeight();\n\n var mediaList = this._mediaList;\n var mediaDefault = this._mediaDefault;\n var indices = [];\n var result = []; // No media defined.\n\n if (!mediaList.length && !mediaDefault) {\n return result;\n } // Multi media may be applied, the latter defined media has higher priority.\n\n\n for (var i = 0, len = mediaList.length; i < len; i++) {\n if (applyMediaQuery(mediaList[i].query, ecWidth, ecHeight)) {\n indices.push(i);\n }\n } // FIXME\n // 是否mediaDefault应该强制用户设置,否则可能修改不能回归。\n\n\n if (!indices.length && mediaDefault) {\n indices = [-1];\n }\n\n if (indices.length && !indicesEquals(indices, this._currentMediaIndices)) {\n result = map(indices, function (index) {\n return clone(index === -1 ? mediaDefault.option : mediaList[index].option);\n });\n } // Otherwise return nothing.\n\n\n this._currentMediaIndices = indices;\n return result;\n }\n};\n\nfunction parseRawOption(rawOption, optionPreprocessorFuncs, isNew) {\n var timelineOptions = [];\n var mediaList = [];\n var mediaDefault;\n var baseOption; // Compatible with ec2.\n\n var timelineOpt = rawOption.timeline;\n\n if (rawOption.baseOption) {\n baseOption = rawOption.baseOption;\n } // For timeline\n\n\n if (timelineOpt || rawOption.options) {\n baseOption = baseOption || {};\n timelineOptions = (rawOption.options || []).slice();\n } // For media query\n\n\n if (rawOption.media) {\n baseOption = baseOption || {};\n var media = rawOption.media;\n each(media, function (singleMedia) {\n if (singleMedia && singleMedia.option) {\n if (singleMedia.query) {\n mediaList.push(singleMedia);\n } else if (!mediaDefault) {\n // Use the first media default.\n mediaDefault = singleMedia;\n }\n }\n });\n } // For normal option\n\n\n if (!baseOption) {\n baseOption = rawOption;\n } // Set timelineOpt to baseOption in ec3,\n // which is convenient for merge option.\n\n\n if (!baseOption.timeline) {\n baseOption.timeline = timelineOpt;\n } // Preprocess.\n\n\n each([baseOption].concat(timelineOptions).concat(zrUtil.map(mediaList, function (media) {\n return media.option;\n })), function (option) {\n each(optionPreprocessorFuncs, function (preProcess) {\n preProcess(option, isNew);\n });\n });\n return {\n baseOption: baseOption,\n timelineOptions: timelineOptions,\n mediaDefault: mediaDefault,\n mediaList: mediaList\n };\n}\n/**\n * @see \n * Support: width, height, aspectRatio\n * Can use max or min as prefix.\n */\n\n\nfunction applyMediaQuery(query, ecWidth, ecHeight) {\n var realMap = {\n width: ecWidth,\n height: ecHeight,\n aspectratio: ecWidth / ecHeight // lowser case for convenientce.\n\n };\n var applicatable = true;\n zrUtil.each(query, function (value, attr) {\n var matched = attr.match(QUERY_REG);\n\n if (!matched || !matched[1] || !matched[2]) {\n return;\n }\n\n var operator = matched[1];\n var realAttr = matched[2].toLowerCase();\n\n if (!compare(realMap[realAttr], value, operator)) {\n applicatable = false;\n }\n });\n return applicatable;\n}\n\nfunction compare(real, expect, operator) {\n if (operator === 'min') {\n return real >= expect;\n } else if (operator === 'max') {\n return real <= expect;\n } else {\n // Equals\n return real === expect;\n }\n}\n\nfunction indicesEquals(indices1, indices2) {\n // indices is always order by asc and has only finite number.\n return indices1.join(',') === indices2.join(',');\n}\n/**\n * Consider case:\n * `chart.setOption(opt1);`\n * Then user do some interaction like dataZoom, dataView changing.\n * `chart.setOption(opt2);`\n * Then user press 'reset button' in toolbox.\n *\n * After doing that all of the interaction effects should be reset, the\n * chart should be the same as the result of invoke\n * `chart.setOption(opt1); chart.setOption(opt2);`.\n *\n * Although it is not able ensure that\n * `chart.setOption(opt1); chart.setOption(opt2);` is equivalents to\n * `chart.setOption(merge(opt1, opt2));` exactly,\n * this might be the only simple way to implement that feature.\n *\n * MEMO: We've considered some other approaches:\n * 1. Each model handle its self restoration but not uniform treatment.\n * (Too complex in logic and error-prone)\n * 2. Use a shadow ecModel. (Performace expensive)\n */\n\n\nfunction mergeOption(oldOption, newOption) {\n newOption = newOption || {};\n each(newOption, function (newCptOpt, mainType) {\n if (newCptOpt == null) {\n return;\n }\n\n var oldCptOpt = oldOption[mainType];\n\n if (!ComponentModel.hasClass(mainType)) {\n oldOption[mainType] = merge(oldCptOpt, newCptOpt, true);\n } else {\n newCptOpt = modelUtil.normalizeToArray(newCptOpt);\n oldCptOpt = modelUtil.normalizeToArray(oldCptOpt);\n var mapResult = modelUtil.mappingToExists(oldCptOpt, newCptOpt);\n oldOption[mainType] = map(mapResult, function (item) {\n return item.option && item.exist ? merge(item.exist, item.option, true) : item.exist || item.option;\n });\n }\n });\n}\n\nvar _default = OptionManager;\nmodule.exports = _default;","var Path = require(\"../Path\");\n\n/**\n * 直线\n * @module zrender/graphic/shape/Line\n */\nvar _default = Path.extend({\n type: 'line',\n shape: {\n // Start point\n x1: 0,\n y1: 0,\n // End point\n x2: 0,\n y2: 0,\n percent: 1\n },\n style: {\n stroke: '#000',\n fill: null\n },\n buildPath: function (ctx, shape) {\n var x1 = shape.x1;\n var y1 = shape.y1;\n var x2 = shape.x2;\n var y2 = shape.y2;\n var percent = shape.percent;\n\n if (percent === 0) {\n return;\n }\n\n ctx.moveTo(x1, y1);\n\n if (percent < 1) {\n x2 = x1 * (1 - percent) + x2 * percent;\n y2 = y1 * (1 - percent) + y2 * percent;\n }\n\n ctx.lineTo(x2, y2);\n },\n\n /**\n * Get point at percent\n * @param {number} percent\n * @return {Array.}\n */\n pointAt: function (p) {\n var shape = this.shape;\n return [shape.x1 * (1 - p) + shape.x2 * p, shape.y1 * (1 - p) + shape.y2 * p];\n }\n});\n\nmodule.exports = _default;","var createListFromArray = require(\"../helper/createListFromArray\");\n\nvar SeriesModel = require(\"../../model/Series\");\n\nvar _default = SeriesModel.extend({\n type: 'series.scatter',\n dependencies: ['grid', 'polar', 'geo', 'singleAxis', 'calendar'],\n getInitialData: function (option, ecModel) {\n return createListFromArray(option.data, this, ecModel);\n },\n brushSelector: 'point',\n defaultOption: {\n coordinateSystem: 'cartesian2d',\n zlevel: 0,\n z: 2,\n legendHoverLink: true,\n hoverAnimation: true,\n // Cartesian coordinate system\n // xAxisIndex: 0,\n // yAxisIndex: 0,\n // Polar coordinate system\n // polarIndex: 0,\n // Geo coordinate system\n // geoIndex: 0,\n // symbol: null, // 图形类型\n symbolSize: 10,\n // 图形大小,半宽(半径)参数,当图形为方向或菱形则总宽度为symbolSize * 2\n // symbolRotate: null, // 图形旋转控制\n large: false,\n // Available when large is true\n largeThreshold: 2000,\n // cursor: null,\n // label: {\n // normal: {\n // show: false\n // distance: 5,\n // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调\n // position: 默认自适应,水平布局为'top',垂直布局为'right',可选为\n // 'inside'|'left'|'right'|'top'|'bottom'\n // 默认使用全局文本样式,详见TEXTSTYLE\n // }\n // },\n itemStyle: {\n normal: {\n opacity: 0.8 // color: 各异\n\n }\n }\n }\n});\n\nmodule.exports = _default;","// TODO Draggable for group\n// FIXME Draggable on element which has parent rotation or scale\nfunction Draggable() {\n this.on('mousedown', this._dragStart, this);\n this.on('mousemove', this._drag, this);\n this.on('mouseup', this._dragEnd, this);\n this.on('globalout', this._dragEnd, this); // this._dropTarget = null;\n // this._draggingTarget = null;\n // this._x = 0;\n // this._y = 0;\n}\n\nDraggable.prototype = {\n constructor: Draggable,\n _dragStart: function (e) {\n var draggingTarget = e.target;\n\n if (draggingTarget && draggingTarget.draggable) {\n this._draggingTarget = draggingTarget;\n draggingTarget.dragging = true;\n this._x = e.offsetX;\n this._y = e.offsetY;\n this.dispatchToElement(param(draggingTarget, e), 'dragstart', e.event);\n }\n },\n _drag: function (e) {\n var draggingTarget = this._draggingTarget;\n\n if (draggingTarget) {\n var x = e.offsetX;\n var y = e.offsetY;\n var dx = x - this._x;\n var dy = y - this._y;\n this._x = x;\n this._y = y;\n draggingTarget.drift(dx, dy, e);\n this.dispatchToElement(param(draggingTarget, e), 'drag', e.event);\n var dropTarget = this.findHover(x, y, draggingTarget).target;\n var lastDropTarget = this._dropTarget;\n this._dropTarget = dropTarget;\n\n if (draggingTarget !== dropTarget) {\n if (lastDropTarget && dropTarget !== lastDropTarget) {\n this.dispatchToElement(param(lastDropTarget, e), 'dragleave', e.event);\n }\n\n if (dropTarget && dropTarget !== lastDropTarget) {\n this.dispatchToElement(param(dropTarget, e), 'dragenter', e.event);\n }\n }\n }\n },\n _dragEnd: function (e) {\n var draggingTarget = this._draggingTarget;\n\n if (draggingTarget) {\n draggingTarget.dragging = false;\n }\n\n this.dispatchToElement(param(draggingTarget, e), 'dragend', e.event);\n\n if (this._dropTarget) {\n this.dispatchToElement(param(this._dropTarget, e), 'drop', e.event);\n }\n\n this._draggingTarget = null;\n this._dropTarget = null;\n }\n};\n\nfunction param(target, e) {\n return {\n target: target,\n topTarget: e && e.topTarget\n };\n}\n\nvar _default = Draggable;\nmodule.exports = _default;","var echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar axisPointerModelHelper = require(\"./axisPointer/modelHelper\");\n\nvar axisTrigger = require(\"./axisPointer/axisTrigger\");\n\nrequire(\"./axisPointer/AxisPointerModel\");\n\nrequire(\"./axisPointer/AxisPointerView\");\n\nrequire(\"./axisPointer/CartesianAxisPointer\");\n\n// CartesianAxisPointer is not supposed to be required here. But consider\n// echarts.simple.js and online build tooltip, which only require gridSimple,\n// CartesianAxisPointer should be able to required somewhere.\necharts.registerPreprocessor(function (option) {\n // Always has a global axisPointerModel for default setting.\n if (option) {\n (!option.axisPointer || option.axisPointer.length === 0) && (option.axisPointer = {});\n var link = option.axisPointer.link; // Normalize to array to avoid object mergin. But if link\n // is not set, remain null/undefined, otherwise it will\n // override existent link setting.\n\n if (link && !zrUtil.isArray(link)) {\n option.axisPointer.link = [link];\n }\n }\n}); // This process should proformed after coordinate systems created\n// and series data processed. So put it on statistic processing stage.\n\necharts.registerProcessor(echarts.PRIORITY.PROCESSOR.STATISTIC, function (ecModel, api) {\n // Build axisPointerModel, mergin tooltip.axisPointer model for each axis.\n // allAxesInfo should be updated when setOption performed.\n ecModel.getComponent('axisPointer').coordSysAxesInfo = axisPointerModelHelper.collect(ecModel, api);\n}); // Broadcast to all views.\n\necharts.registerAction({\n type: 'updateAxisPointer',\n event: 'updateAxisPointer',\n update: ':updateAxisPointer'\n}, axisTrigger);","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar _layout = require(\"../../util/layout\");\n\nvar getLayoutRect = _layout.getLayoutRect;\n\n/**\n * @param {module:echarts/component/visualMap/VisualMapModel} visualMapModel\\\n * @param {module:echarts/ExtensionAPI} api\n * @param {Array.} itemSize always [short, long]\n * @return {string} 'left' or 'right' or 'top' or 'bottom'\n */\nfunction getItemAlign(visualMapModel, api, itemSize) {\n var modelOption = visualMapModel.option;\n var itemAlign = modelOption.align;\n\n if (itemAlign != null && itemAlign !== 'auto') {\n return itemAlign;\n } // Auto decision align.\n\n\n var ecSize = {\n width: api.getWidth(),\n height: api.getHeight()\n };\n var realIndex = modelOption.orient === 'horizontal' ? 1 : 0;\n var paramsSet = [['left', 'right', 'width'], ['top', 'bottom', 'height']];\n var reals = paramsSet[realIndex];\n var fakeValue = [0, null, 10];\n var layoutInput = {};\n\n for (var i = 0; i < 3; i++) {\n layoutInput[paramsSet[1 - realIndex][i]] = fakeValue[i];\n layoutInput[reals[i]] = i === 2 ? itemSize[0] : modelOption[reals[i]];\n }\n\n var rParam = [['x', 'width', 3], ['y', 'height', 0]][realIndex];\n var rect = getLayoutRect(layoutInput, ecSize, modelOption.padding);\n return reals[(rect.margin[rParam[2]] || 0) + rect[rParam[0]] + rect[rParam[1]] * 0.5 < ecSize[rParam[1]] * 0.5 ? 0 : 1];\n}\n/**\n * Prepare dataIndex for outside usage, where dataIndex means rawIndex, and\n * dataIndexInside means filtered index.\n */\n\n\nfunction convertDataIndex(batch) {\n zrUtil.each(batch || [], function (batchItem) {\n if (batch.dataIndex != null) {\n batch.dataIndexInside = batch.dataIndex;\n batch.dataIndex = null;\n }\n });\n return batch;\n}\n\nexports.getItemAlign = getItemAlign;\nexports.convertDataIndex = convertDataIndex;","var Displayable = require(\"./Displayable\");\n\nvar zrUtil = require(\"../core/util\");\n\nvar PathProxy = require(\"../core/PathProxy\");\n\nvar pathContain = require(\"../contain/path\");\n\nvar Pattern = require(\"./Pattern\");\n\nvar getCanvasPattern = Pattern.prototype.getCanvasPattern;\nvar abs = Math.abs;\nvar pathProxyForDraw = new PathProxy(true);\n/**\n * @alias module:zrender/graphic/Path\n * @extends module:zrender/graphic/Displayable\n * @constructor\n * @param {Object} opts\n */\n\nfunction Path(opts) {\n Displayable.call(this, opts);\n /**\n * @type {module:zrender/core/PathProxy}\n * @readOnly\n */\n\n this.path = null;\n}\n\nPath.prototype = {\n constructor: Path,\n type: 'path',\n __dirtyPath: true,\n strokeContainThreshold: 5,\n brush: function (ctx, prevEl) {\n var style = this.style;\n var path = this.path || pathProxyForDraw;\n var hasStroke = style.hasStroke();\n var hasFill = style.hasFill();\n var fill = style.fill;\n var stroke = style.stroke;\n var hasFillGradient = hasFill && !!fill.colorStops;\n var hasStrokeGradient = hasStroke && !!stroke.colorStops;\n var hasFillPattern = hasFill && !!fill.image;\n var hasStrokePattern = hasStroke && !!stroke.image;\n style.bind(ctx, this, prevEl);\n this.setTransform(ctx);\n\n if (this.__dirty) {\n var rect; // Update gradient because bounding rect may changed\n\n if (hasFillGradient) {\n rect = rect || this.getBoundingRect();\n this._fillGradient = style.getGradient(ctx, fill, rect);\n }\n\n if (hasStrokeGradient) {\n rect = rect || this.getBoundingRect();\n this._strokeGradient = style.getGradient(ctx, stroke, rect);\n }\n } // Use the gradient or pattern\n\n\n if (hasFillGradient) {\n // PENDING If may have affect the state\n ctx.fillStyle = this._fillGradient;\n } else if (hasFillPattern) {\n ctx.fillStyle = getCanvasPattern.call(fill, ctx);\n }\n\n if (hasStrokeGradient) {\n ctx.strokeStyle = this._strokeGradient;\n } else if (hasStrokePattern) {\n ctx.strokeStyle = getCanvasPattern.call(stroke, ctx);\n }\n\n var lineDash = style.lineDash;\n var lineDashOffset = style.lineDashOffset;\n var ctxLineDash = !!ctx.setLineDash; // Update path sx, sy\n\n var scale = this.getGlobalScale();\n path.setScale(scale[0], scale[1]); // Proxy context\n // Rebuild path in following 2 cases\n // 1. Path is dirty\n // 2. Path needs javascript implemented lineDash stroking.\n // In this case, lineDash information will not be saved in PathProxy\n\n if (this.__dirtyPath || lineDash && !ctxLineDash && hasStroke) {\n path.beginPath(ctx); // Setting line dash before build path\n\n if (lineDash && !ctxLineDash) {\n path.setLineDash(lineDash);\n path.setLineDashOffset(lineDashOffset);\n }\n\n this.buildPath(path, this.shape, false); // Clear path dirty flag\n\n if (this.path) {\n this.__dirtyPath = false;\n }\n } else {\n // Replay path building\n ctx.beginPath();\n this.path.rebuildPath(ctx);\n }\n\n hasFill && path.fill(ctx);\n\n if (lineDash && ctxLineDash) {\n ctx.setLineDash(lineDash);\n ctx.lineDashOffset = lineDashOffset;\n }\n\n hasStroke && path.stroke(ctx);\n\n if (lineDash && ctxLineDash) {\n // PENDING\n // Remove lineDash\n ctx.setLineDash([]);\n }\n\n this.restoreTransform(ctx); // Draw rect text\n\n if (style.text != null) {\n this.drawRectText(ctx, this.getBoundingRect());\n }\n },\n // When bundling path, some shape may decide if use moveTo to begin a new subpath or closePath\n // Like in circle\n buildPath: function (ctx, shapeCfg, inBundle) {},\n createPathProxy: function () {\n this.path = new PathProxy();\n },\n getBoundingRect: function () {\n var rect = this._rect;\n var style = this.style;\n var needsUpdateRect = !rect;\n\n if (needsUpdateRect) {\n var path = this.path;\n\n if (!path) {\n // Create path on demand.\n path = this.path = new PathProxy();\n }\n\n if (this.__dirtyPath) {\n path.beginPath();\n this.buildPath(path, this.shape, false);\n }\n\n rect = path.getBoundingRect();\n }\n\n this._rect = rect;\n\n if (style.hasStroke()) {\n // Needs update rect with stroke lineWidth when\n // 1. Element changes scale or lineWidth\n // 2. Shape is changed\n var rectWithStroke = this._rectWithStroke || (this._rectWithStroke = rect.clone());\n\n if (this.__dirty || needsUpdateRect) {\n rectWithStroke.copy(rect); // FIXME Must after updateTransform\n\n var w = style.lineWidth; // PENDING, Min line width is needed when line is horizontal or vertical\n\n var lineScale = style.strokeNoScale ? this.getLineScale() : 1; // Only add extra hover lineWidth when there are no fill\n\n if (!style.hasFill()) {\n w = Math.max(w, this.strokeContainThreshold || 4);\n } // Consider line width\n // Line scale can't be 0;\n\n\n if (lineScale > 1e-10) {\n rectWithStroke.width += w / lineScale;\n rectWithStroke.height += w / lineScale;\n rectWithStroke.x -= w / lineScale / 2;\n rectWithStroke.y -= w / lineScale / 2;\n }\n } // Return rect with stroke\n\n\n return rectWithStroke;\n }\n\n return rect;\n },\n contain: function (x, y) {\n var localPos = this.transformCoordToLocal(x, y);\n var rect = this.getBoundingRect();\n var style = this.style;\n x = localPos[0];\n y = localPos[1];\n\n if (rect.contain(x, y)) {\n var pathData = this.path.data;\n\n if (style.hasStroke()) {\n var lineWidth = style.lineWidth;\n var lineScale = style.strokeNoScale ? this.getLineScale() : 1; // Line scale can't be 0;\n\n if (lineScale > 1e-10) {\n // Only add extra hover lineWidth when there are no fill\n if (!style.hasFill()) {\n lineWidth = Math.max(lineWidth, this.strokeContainThreshold);\n }\n\n if (pathContain.containStroke(pathData, lineWidth / lineScale, x, y)) {\n return true;\n }\n }\n }\n\n if (style.hasFill()) {\n return pathContain.contain(pathData, x, y);\n }\n }\n\n return false;\n },\n\n /**\n * @param {boolean} dirtyPath\n */\n dirty: function (dirtyPath) {\n if (dirtyPath == null) {\n dirtyPath = true;\n } // Only mark dirty, not mark clean\n\n\n if (dirtyPath) {\n this.__dirtyPath = dirtyPath;\n this._rect = null;\n }\n\n this.__dirty = true;\n this.__zr && this.__zr.refresh(); // Used as a clipping path\n\n if (this.__clipTarget) {\n this.__clipTarget.dirty();\n }\n },\n\n /**\n * Alias for animate('shape')\n * @param {boolean} loop\n */\n animateShape: function (loop) {\n return this.animate('shape', loop);\n },\n // Overwrite attrKV\n attrKV: function (key, value) {\n // FIXME\n if (key === 'shape') {\n this.setShape(value);\n this.__dirtyPath = true;\n this._rect = null;\n } else {\n Displayable.prototype.attrKV.call(this, key, value);\n }\n },\n\n /**\n * @param {Object|string} key\n * @param {*} value\n */\n setShape: function (key, value) {\n var shape = this.shape; // Path from string may not have shape\n\n if (shape) {\n if (zrUtil.isObject(key)) {\n for (var name in key) {\n if (key.hasOwnProperty(name)) {\n shape[name] = key[name];\n }\n }\n } else {\n shape[key] = value;\n }\n\n this.dirty(true);\n }\n\n return this;\n },\n getLineScale: function () {\n var m = this.transform; // Get the line scale.\n // Determinant of `m` means how much the area is enlarged by the\n // transformation. So its square root can be used as a scale factor\n // for width.\n\n return m && abs(m[0] - 1) > 1e-10 && abs(m[3] - 1) > 1e-10 ? Math.sqrt(abs(m[0] * m[3] - m[2] * m[1])) : 1;\n }\n};\n/**\n * 扩展一个 Path element, 比如星形,圆等。\n * Extend a path element\n * @param {Object} props\n * @param {string} props.type Path type\n * @param {Function} props.init Initialize\n * @param {Function} props.buildPath Overwrite buildPath method\n * @param {Object} [props.style] Extended default style config\n * @param {Object} [props.shape] Extended default shape config\n */\n\nPath.extend = function (defaults) {\n var Sub = function (opts) {\n Path.call(this, opts);\n\n if (defaults.style) {\n // Extend default style\n this.style.extendFrom(defaults.style, false);\n } // Extend default shape\n\n\n var defaultShape = defaults.shape;\n\n if (defaultShape) {\n this.shape = this.shape || {};\n var thisShape = this.shape;\n\n for (var name in defaultShape) {\n if (!thisShape.hasOwnProperty(name) && defaultShape.hasOwnProperty(name)) {\n thisShape[name] = defaultShape[name];\n }\n }\n }\n\n defaults.init && defaults.init.call(this, opts);\n };\n\n zrUtil.inherits(Sub, Path); // FIXME 不能 extend position, rotation 等引用对象\n\n for (var name in defaults) {\n // Extending prototype values and methods\n if (name !== 'style' && name !== 'shape') {\n Sub.prototype[name] = defaults[name];\n }\n }\n\n return Sub;\n};\n\nzrUtil.inherits(Path, Displayable);\nvar _default = Path;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar Cartesian = require(\"./Cartesian\");\n\nfunction Cartesian2D(name) {\n Cartesian.call(this, name);\n}\n\nCartesian2D.prototype = {\n constructor: Cartesian2D,\n type: 'cartesian2d',\n\n /**\n * @type {Array.}\n * @readOnly\n */\n dimensions: ['x', 'y'],\n\n /**\n * Base axis will be used on stacking.\n *\n * @return {module:echarts/coord/cartesian/Axis2D}\n */\n getBaseAxis: function () {\n return this.getAxesByScale('ordinal')[0] || this.getAxesByScale('time')[0] || this.getAxis('x');\n },\n\n /**\n * If contain point\n * @param {Array.} point\n * @return {boolean}\n */\n containPoint: function (point) {\n var axisX = this.getAxis('x');\n var axisY = this.getAxis('y');\n return axisX.contain(axisX.toLocalCoord(point[0])) && axisY.contain(axisY.toLocalCoord(point[1]));\n },\n\n /**\n * If contain data\n * @param {Array.} data\n * @return {boolean}\n */\n containData: function (data) {\n return this.getAxis('x').containData(data[0]) && this.getAxis('y').containData(data[1]);\n },\n\n /**\n * @param {Array.} data\n * @param {boolean} [clamp=false]\n * @return {Array.}\n */\n dataToPoint: function (data, clamp) {\n var xAxis = this.getAxis('x');\n var yAxis = this.getAxis('y');\n return [xAxis.toGlobalCoord(xAxis.dataToCoord(data[0], clamp)), yAxis.toGlobalCoord(yAxis.dataToCoord(data[1], clamp))];\n },\n\n /**\n * @param {Array.} point\n * @param {boolean} [clamp=false]\n * @return {Array.}\n */\n pointToData: function (point, clamp) {\n var xAxis = this.getAxis('x');\n var yAxis = this.getAxis('y');\n return [xAxis.coordToData(xAxis.toLocalCoord(point[0]), clamp), yAxis.coordToData(yAxis.toLocalCoord(point[1]), clamp)];\n },\n\n /**\n * Get other axis\n * @param {module:echarts/coord/cartesian/Axis2D} axis\n */\n getOtherAxis: function (axis) {\n return this.getAxis(axis.dim === 'x' ? 'y' : 'x');\n }\n};\nzrUtil.inherits(Cartesian2D, Cartesian);\nvar _default = Cartesian2D;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar helper = require(\"./helper\");\n\nvar each = zrUtil.each;\nvar asc = numberUtil.asc;\n/**\n * Operate single axis.\n * One axis can only operated by one axis operator.\n * Different dataZoomModels may be defined to operate the same axis.\n * (i.e. 'inside' data zoom and 'slider' data zoom components)\n * So dataZoomModels share one axisProxy in that case.\n *\n * @class\n */\n\nvar AxisProxy = function (dimName, axisIndex, dataZoomModel, ecModel) {\n /**\n * @private\n * @type {string}\n */\n this._dimName = dimName;\n /**\n * @private\n */\n\n this._axisIndex = axisIndex;\n /**\n * @private\n * @type {Array.}\n */\n\n this._valueWindow;\n /**\n * @private\n * @type {Array.}\n */\n\n this._percentWindow;\n /**\n * @private\n * @type {Array.}\n */\n\n this._dataExtent;\n /**\n * {minSpan, maxSpan, minValueSpan, maxValueSpan}\n * @private\n * @type {Object}\n */\n\n this._minMaxSpan;\n /**\n * @readOnly\n * @type {module: echarts/model/Global}\n */\n\n this.ecModel = ecModel;\n /**\n * @private\n * @type {module: echarts/component/dataZoom/DataZoomModel}\n */\n\n this._dataZoomModel = dataZoomModel;\n};\n\nAxisProxy.prototype = {\n constructor: AxisProxy,\n\n /**\n * Whether the axisProxy is hosted by dataZoomModel.\n *\n * @public\n * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel\n * @return {boolean}\n */\n hostedBy: function (dataZoomModel) {\n return this._dataZoomModel === dataZoomModel;\n },\n\n /**\n * @return {Array.} Value can only be NaN or finite value.\n */\n getDataValueWindow: function () {\n return this._valueWindow.slice();\n },\n\n /**\n * @return {Array.}\n */\n getDataPercentWindow: function () {\n return this._percentWindow.slice();\n },\n\n /**\n * @public\n * @param {number} axisIndex\n * @return {Array} seriesModels\n */\n getTargetSeriesModels: function () {\n var seriesModels = [];\n var ecModel = this.ecModel;\n ecModel.eachSeries(function (seriesModel) {\n if (helper.isCoordSupported(seriesModel.get('coordinateSystem'))) {\n var dimName = this._dimName;\n var axisModel = ecModel.queryComponents({\n mainType: dimName + 'Axis',\n index: seriesModel.get(dimName + 'AxisIndex'),\n id: seriesModel.get(dimName + 'AxisId')\n })[0];\n\n if (this._axisIndex === (axisModel && axisModel.componentIndex)) {\n seriesModels.push(seriesModel);\n }\n }\n }, this);\n return seriesModels;\n },\n getAxisModel: function () {\n return this.ecModel.getComponent(this._dimName + 'Axis', this._axisIndex);\n },\n getOtherAxisModel: function () {\n var axisDim = this._dimName;\n var ecModel = this.ecModel;\n var axisModel = this.getAxisModel();\n var isCartesian = axisDim === 'x' || axisDim === 'y';\n var otherAxisDim;\n var coordSysIndexName;\n\n if (isCartesian) {\n coordSysIndexName = 'gridIndex';\n otherAxisDim = axisDim === 'x' ? 'y' : 'x';\n } else {\n coordSysIndexName = 'polarIndex';\n otherAxisDim = axisDim === 'angle' ? 'radius' : 'angle';\n }\n\n var foundOtherAxisModel;\n ecModel.eachComponent(otherAxisDim + 'Axis', function (otherAxisModel) {\n if ((otherAxisModel.get(coordSysIndexName) || 0) === (axisModel.get(coordSysIndexName) || 0)) {\n foundOtherAxisModel = otherAxisModel;\n }\n });\n return foundOtherAxisModel;\n },\n getMinMaxSpan: function () {\n return zrUtil.clone(this._minMaxSpan);\n },\n\n /**\n * Only calculate by given range and this._dataExtent, do not change anything.\n *\n * @param {Object} opt\n * @param {number} [opt.start]\n * @param {number} [opt.end]\n * @param {number} [opt.startValue]\n * @param {number} [opt.endValue]\n */\n calculateDataWindow: function (opt) {\n var dataExtent = this._dataExtent;\n var axisModel = this.getAxisModel();\n var scale = axisModel.axis.scale;\n\n var rangePropMode = this._dataZoomModel.getRangePropMode();\n\n var percentExtent = [0, 100];\n var percentWindow = [opt.start, opt.end];\n var valueWindow = [];\n each(['startValue', 'endValue'], function (prop) {\n valueWindow.push(opt[prop] != null ? scale.parse(opt[prop]) : null);\n }); // Normalize bound.\n\n each([0, 1], function (idx) {\n var boundValue = valueWindow[idx];\n var boundPercent = percentWindow[idx]; // Notice: dataZoom is based either on `percentProp` ('start', 'end') or\n // on `valueProp` ('startValue', 'endValue'). The former one is suitable\n // for cases that a dataZoom component controls multiple axes with different\n // unit or extent, and the latter one is suitable for accurate zoom by pixel\n // (e.g., in dataZoomSelect). `valueProp` can be calculated from `percentProp`,\n // but it is awkward that `percentProp` can not be obtained from `valueProp`\n // accurately (because all of values that are overflow the `dataExtent` will\n // be calculated to percent '100%'). So we have to use\n // `dataZoom.getRangePropMode()` to mark which prop is used.\n // `rangePropMode` is updated only when setOption or dispatchAction, otherwise\n // it remains its original value.\n\n if (rangePropMode[idx] === 'percent') {\n if (boundPercent == null) {\n boundPercent = percentExtent[idx];\n } // Use scale.parse to math round for category or time axis.\n\n\n boundValue = scale.parse(numberUtil.linearMap(boundPercent, percentExtent, dataExtent, true));\n } else {\n // Calculating `percent` from `value` may be not accurate, because\n // This calculation can not be inversed, because all of values that\n // are overflow the `dataExtent` will be calculated to percent '100%'\n boundPercent = numberUtil.linearMap(boundValue, dataExtent, percentExtent, true);\n } // valueWindow[idx] = round(boundValue);\n // percentWindow[idx] = round(boundPercent);\n\n\n valueWindow[idx] = boundValue;\n percentWindow[idx] = boundPercent;\n });\n return {\n valueWindow: asc(valueWindow),\n percentWindow: asc(percentWindow)\n };\n },\n\n /**\n * Notice: reset should not be called before series.restoreData() called,\n * so it is recommanded to be called in \"process stage\" but not \"model init\n * stage\".\n *\n * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel\n */\n reset: function (dataZoomModel) {\n if (dataZoomModel !== this._dataZoomModel) {\n return;\n } // Culculate data window and data extent, and record them.\n\n\n this._dataExtent = calculateDataExtent(this, this._dimName, this.getTargetSeriesModels());\n var dataWindow = this.calculateDataWindow(dataZoomModel.option);\n this._valueWindow = dataWindow.valueWindow;\n this._percentWindow = dataWindow.percentWindow;\n setMinMaxSpan(this); // Update axis setting then.\n\n setAxisModel(this);\n },\n\n /**\n * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel\n */\n restore: function (dataZoomModel) {\n if (dataZoomModel !== this._dataZoomModel) {\n return;\n }\n\n this._valueWindow = this._percentWindow = null;\n setAxisModel(this, true);\n },\n\n /**\n * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel\n */\n filterData: function (dataZoomModel) {\n if (dataZoomModel !== this._dataZoomModel) {\n return;\n }\n\n var axisDim = this._dimName;\n var seriesModels = this.getTargetSeriesModels();\n var filterMode = dataZoomModel.get('filterMode');\n var valueWindow = this._valueWindow;\n\n if (filterMode === 'none') {\n return;\n } // FIXME\n // Toolbox may has dataZoom injected. And if there are stacked bar chart\n // with NaN data, NaN will be filtered and stack will be wrong.\n // So we need to force the mode to be set empty.\n // In fect, it is not a big deal that do not support filterMode-'filter'\n // when using toolbox#dataZoom, utill tooltip#dataZoom support \"single axis\n // selection\" some day, which might need \"adapt to data extent on the\n // otherAxis\", which is disabled by filterMode-'empty'.\n\n\n var otherAxisModel = this.getOtherAxisModel();\n\n if (dataZoomModel.get('$fromToolbox') && otherAxisModel && otherAxisModel.get('type') === 'category') {\n filterMode = 'empty';\n } // Process series data\n\n\n each(seriesModels, function (seriesModel) {\n var seriesData = seriesModel.getData();\n var dataDims = seriesModel.coordDimToDataDim(axisDim);\n\n if (filterMode === 'weakFilter') {\n seriesData && seriesData.filterSelf(function (dataIndex) {\n var leftOut;\n var rightOut;\n var hasValue;\n\n for (var i = 0; i < dataDims.length; i++) {\n var value = seriesData.get(dataDims[i], dataIndex);\n var thisHasValue = !isNaN(value);\n var thisLeftOut = value < valueWindow[0];\n var thisRightOut = value > valueWindow[1];\n\n if (thisHasValue && !thisLeftOut && !thisRightOut) {\n return true;\n }\n\n thisHasValue && (hasValue = true);\n thisLeftOut && (leftOut = true);\n thisRightOut && (rightOut = true);\n } // If both left out and right out, do not filter.\n\n\n return hasValue && leftOut && rightOut;\n });\n } else {\n seriesData && each(dataDims, function (dim) {\n if (filterMode === 'empty') {\n seriesModel.setData(seriesData.map(dim, function (value) {\n return !isInWindow(value) ? NaN : value;\n }));\n } else {\n seriesData.filterSelf(dim, isInWindow);\n }\n });\n }\n });\n\n function isInWindow(value) {\n return value >= valueWindow[0] && value <= valueWindow[1];\n }\n }\n};\n\nfunction calculateDataExtent(axisProxy, axisDim, seriesModels) {\n var dataExtent = [Infinity, -Infinity];\n each(seriesModels, function (seriesModel) {\n var seriesData = seriesModel.getData();\n\n if (seriesData) {\n each(seriesModel.coordDimToDataDim(axisDim), function (dim) {\n var seriesExtent = seriesData.getDataExtent(dim);\n seriesExtent[0] < dataExtent[0] && (dataExtent[0] = seriesExtent[0]);\n seriesExtent[1] > dataExtent[1] && (dataExtent[1] = seriesExtent[1]);\n });\n }\n });\n\n if (dataExtent[1] < dataExtent[0]) {\n dataExtent = [NaN, NaN];\n } // It is important to get \"consistent\" extent when more then one axes is\n // controlled by a `dataZoom`, otherwise those axes will not be synchronized\n // when zooming. But it is difficult to know what is \"consistent\", considering\n // axes have different type or even different meanings (For example, two\n // time axes are used to compare data of the same date in different years).\n // So basically dataZoom just obtains extent by series.data (in category axis\n // extent can be obtained from axis.data).\n // Nevertheless, user can set min/max/scale on axes to make extent of axes\n // consistent.\n\n\n fixExtentByAxis(axisProxy, dataExtent);\n return dataExtent;\n}\n\nfunction fixExtentByAxis(axisProxy, dataExtent) {\n var axisModel = axisProxy.getAxisModel();\n var min = axisModel.getMin(true); // For category axis, if min/max/scale are not set, extent is determined\n // by axis.data by default.\n\n var isCategoryAxis = axisModel.get('type') === 'category';\n var axisDataLen = isCategoryAxis && (axisModel.get('data') || []).length;\n\n if (min != null && min !== 'dataMin' && typeof min !== 'function') {\n dataExtent[0] = min;\n } else if (isCategoryAxis) {\n dataExtent[0] = axisDataLen > 0 ? 0 : NaN;\n }\n\n var max = axisModel.getMax(true);\n\n if (max != null && max !== 'dataMax' && typeof max !== 'function') {\n dataExtent[1] = max;\n } else if (isCategoryAxis) {\n dataExtent[1] = axisDataLen > 0 ? axisDataLen - 1 : NaN;\n }\n\n if (!axisModel.get('scale', true)) {\n dataExtent[0] > 0 && (dataExtent[0] = 0);\n dataExtent[1] < 0 && (dataExtent[1] = 0);\n } // For value axis, if min/max/scale are not set, we just use the extent obtained\n // by series data, which may be a little different from the extent calculated by\n // `axisHelper.getScaleExtent`. But the different just affects the experience a\n // little when zooming. So it will not be fixed until some users require it strongly.\n\n\n return dataExtent;\n}\n\nfunction setAxisModel(axisProxy, isRestore) {\n var axisModel = axisProxy.getAxisModel();\n var percentWindow = axisProxy._percentWindow;\n var valueWindow = axisProxy._valueWindow;\n\n if (!percentWindow) {\n return;\n } // [0, 500]: arbitrary value, guess axis extent.\n\n\n var precision = numberUtil.getPixelPrecision(valueWindow, [0, 500]);\n precision = Math.min(precision, 20); // isRestore or isFull\n\n var useOrigin = isRestore || percentWindow[0] === 0 && percentWindow[1] === 100;\n axisModel.setRange(useOrigin ? null : +valueWindow[0].toFixed(precision), useOrigin ? null : +valueWindow[1].toFixed(precision));\n}\n\nfunction setMinMaxSpan(axisProxy) {\n var minMaxSpan = axisProxy._minMaxSpan = {};\n var dataZoomModel = axisProxy._dataZoomModel;\n each(['min', 'max'], function (minMax) {\n minMaxSpan[minMax + 'Span'] = dataZoomModel.get(minMax + 'Span'); // minValueSpan and maxValueSpan has higher priority than minSpan and maxSpan\n\n var valueSpan = dataZoomModel.get(minMax + 'ValueSpan');\n\n if (valueSpan != null) {\n minMaxSpan[minMax + 'ValueSpan'] = valueSpan;\n valueSpan = axisProxy.getAxisModel().axis.scale.parse(valueSpan);\n\n if (valueSpan != null) {\n var dataExtent = axisProxy._dataExtent;\n minMaxSpan[minMax + 'Span'] = numberUtil.linearMap(dataExtent[0] + valueSpan, dataExtent, [0, 100], true);\n }\n }\n });\n}\n\nvar _default = AxisProxy;\nmodule.exports = _default;","require(\"./gridSimple\");\n\nrequire(\"./axisPointer/CartesianAxisPointer\");\n\nrequire(\"./axisPointer\");","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar Model = require(\"../../model/Model\");\n\nvar each = zrUtil.each;\nvar curry = zrUtil.curry; // Build axisPointerModel, mergin tooltip.axisPointer model for each axis.\n// allAxesInfo should be updated when setOption performed.\n\nfunction collect(ecModel, api) {\n var result = {\n /**\n * key: makeKey(axis.model)\n * value: {\n * axis,\n * coordSys,\n * axisPointerModel,\n * triggerTooltip,\n * involveSeries,\n * snap,\n * seriesModels,\n * seriesDataCount\n * }\n */\n axesInfo: {},\n seriesInvolved: false,\n\n /**\n * key: makeKey(coordSys.model)\n * value: Object: key makeKey(axis.model), value: axisInfo\n */\n coordSysAxesInfo: {},\n coordSysMap: {}\n };\n collectAxesInfo(result, ecModel, api); // Check seriesInvolved for performance, in case too many series in some chart.\n\n result.seriesInvolved && collectSeriesInfo(result, ecModel);\n return result;\n}\n\nfunction collectAxesInfo(result, ecModel, api) {\n var globalTooltipModel = ecModel.getComponent('tooltip');\n var globalAxisPointerModel = ecModel.getComponent('axisPointer'); // links can only be set on global.\n\n var linksOption = globalAxisPointerModel.get('link', true) || [];\n var linkGroups = []; // Collect axes info.\n\n each(api.getCoordinateSystems(), function (coordSys) {\n // Some coordinate system do not support axes, like geo.\n if (!coordSys.axisPointerEnabled) {\n return;\n }\n\n var coordSysKey = makeKey(coordSys.model);\n var axesInfoInCoordSys = result.coordSysAxesInfo[coordSysKey] = {};\n result.coordSysMap[coordSysKey] = coordSys; // Set tooltip (like 'cross') is a convienent way to show axisPointer\n // for user. So we enable seting tooltip on coordSys model.\n\n var coordSysModel = coordSys.model;\n var baseTooltipModel = coordSysModel.getModel('tooltip', globalTooltipModel);\n each(coordSys.getAxes(), curry(saveTooltipAxisInfo, false, null)); // If axis tooltip used, choose tooltip axis for each coordSys.\n // Notice this case: coordSys is `grid` but not `cartesian2D` here.\n\n if (coordSys.getTooltipAxes && globalTooltipModel // If tooltip.showContent is set as false, tooltip will not\n // show but axisPointer will show as normal.\n && baseTooltipModel.get('show')) {\n // Compatible with previous logic. But series.tooltip.trigger: 'axis'\n // or series.data[n].tooltip.trigger: 'axis' are not support any more.\n var triggerAxis = baseTooltipModel.get('trigger') === 'axis';\n var cross = baseTooltipModel.get('axisPointer.type') === 'cross';\n var tooltipAxes = coordSys.getTooltipAxes(baseTooltipModel.get('axisPointer.axis'));\n\n if (triggerAxis || cross) {\n each(tooltipAxes.baseAxes, curry(saveTooltipAxisInfo, cross ? 'cross' : true, triggerAxis));\n }\n\n if (cross) {\n each(tooltipAxes.otherAxes, curry(saveTooltipAxisInfo, 'cross', false));\n }\n } // fromTooltip: true | false | 'cross'\n // triggerTooltip: true | false | null\n\n\n function saveTooltipAxisInfo(fromTooltip, triggerTooltip, axis) {\n var axisPointerModel = axis.model.getModel('axisPointer', globalAxisPointerModel);\n var axisPointerShow = axisPointerModel.get('show');\n\n if (!axisPointerShow || axisPointerShow === 'auto' && !fromTooltip && !isHandleTrigger(axisPointerModel)) {\n return;\n }\n\n if (triggerTooltip == null) {\n triggerTooltip = axisPointerModel.get('triggerTooltip');\n }\n\n axisPointerModel = fromTooltip ? makeAxisPointerModel(axis, baseTooltipModel, globalAxisPointerModel, ecModel, fromTooltip, triggerTooltip) : axisPointerModel;\n var snap = axisPointerModel.get('snap');\n var key = makeKey(axis.model);\n var involveSeries = triggerTooltip || snap || axis.type === 'category'; // If result.axesInfo[key] exist, override it (tooltip has higher priority).\n\n var axisInfo = result.axesInfo[key] = {\n key: key,\n axis: axis,\n coordSys: coordSys,\n axisPointerModel: axisPointerModel,\n triggerTooltip: triggerTooltip,\n involveSeries: involveSeries,\n snap: snap,\n useHandle: isHandleTrigger(axisPointerModel),\n seriesModels: []\n };\n axesInfoInCoordSys[key] = axisInfo;\n result.seriesInvolved |= involveSeries;\n var groupIndex = getLinkGroupIndex(linksOption, axis);\n\n if (groupIndex != null) {\n var linkGroup = linkGroups[groupIndex] || (linkGroups[groupIndex] = {\n axesInfo: {}\n });\n linkGroup.axesInfo[key] = axisInfo;\n linkGroup.mapper = linksOption[groupIndex].mapper;\n axisInfo.linkGroup = linkGroup;\n }\n }\n });\n}\n\nfunction makeAxisPointerModel(axis, baseTooltipModel, globalAxisPointerModel, ecModel, fromTooltip, triggerTooltip) {\n var tooltipAxisPointerModel = baseTooltipModel.getModel('axisPointer');\n var volatileOption = {};\n each(['type', 'snap', 'lineStyle', 'shadowStyle', 'label', 'animation', 'animationDurationUpdate', 'animationEasingUpdate', 'z'], function (field) {\n volatileOption[field] = zrUtil.clone(tooltipAxisPointerModel.get(field));\n }); // category axis do not auto snap, otherwise some tick that do not\n // has value can not be hovered. value/time/log axis default snap if\n // triggered from tooltip and trigger tooltip.\n\n volatileOption.snap = axis.type !== 'category' && !!triggerTooltip; // Compatibel with previous behavior, tooltip axis do not show label by default.\n // Only these properties can be overrided from tooltip to axisPointer.\n\n if (tooltipAxisPointerModel.get('type') === 'cross') {\n volatileOption.type = 'line';\n }\n\n var labelOption = volatileOption.label || (volatileOption.label = {}); // Follow the convention, do not show label when triggered by tooltip by default.\n\n labelOption.show == null && (labelOption.show = false);\n\n if (fromTooltip === 'cross') {\n // When 'cross', both axes show labels.\n labelOption.show = true; // If triggerTooltip, this is a base axis, which should better not use cross style\n // (cross style is dashed by default)\n\n if (!triggerTooltip) {\n var crossStyle = volatileOption.lineStyle = tooltipAxisPointerModel.get('crossStyle');\n crossStyle && zrUtil.defaults(labelOption, crossStyle.textStyle);\n }\n }\n\n return axis.model.getModel('axisPointer', new Model(volatileOption, globalAxisPointerModel, ecModel));\n}\n\nfunction collectSeriesInfo(result, ecModel) {\n // Prepare data for axis trigger\n ecModel.eachSeries(function (seriesModel) {\n // Notice this case: this coordSys is `cartesian2D` but not `grid`.\n var coordSys = seriesModel.coordinateSystem;\n var seriesTooltipTrigger = seriesModel.get('tooltip.trigger', true);\n var seriesTooltipShow = seriesModel.get('tooltip.show', true);\n\n if (!coordSys || seriesTooltipTrigger === 'none' || seriesTooltipTrigger === false || seriesTooltipTrigger === 'item' || seriesTooltipShow === false || seriesModel.get('axisPointer.show', true) === false) {\n return;\n }\n\n each(result.coordSysAxesInfo[makeKey(coordSys.model)], function (axisInfo) {\n var axis = axisInfo.axis;\n\n if (coordSys.getAxis(axis.dim) === axis) {\n axisInfo.seriesModels.push(seriesModel);\n axisInfo.seriesDataCount == null && (axisInfo.seriesDataCount = 0);\n axisInfo.seriesDataCount += seriesModel.getData().count();\n }\n });\n }, this);\n}\n/**\n * For example:\n * {\n * axisPointer: {\n * links: [{\n * xAxisIndex: [2, 4],\n * yAxisIndex: 'all'\n * }, {\n * xAxisId: ['a5', 'a7'],\n * xAxisName: 'xxx'\n * }]\n * }\n * }\n */\n\n\nfunction getLinkGroupIndex(linksOption, axis) {\n var axisModel = axis.model;\n var dim = axis.dim;\n\n for (var i = 0; i < linksOption.length; i++) {\n var linkOption = linksOption[i] || {};\n\n if (checkPropInLink(linkOption[dim + 'AxisId'], axisModel.id) || checkPropInLink(linkOption[dim + 'AxisIndex'], axisModel.componentIndex) || checkPropInLink(linkOption[dim + 'AxisName'], axisModel.name)) {\n return i;\n }\n }\n}\n\nfunction checkPropInLink(linkPropValue, axisPropValue) {\n return linkPropValue === 'all' || zrUtil.isArray(linkPropValue) && zrUtil.indexOf(linkPropValue, axisPropValue) >= 0 || linkPropValue === axisPropValue;\n}\n\nfunction fixValue(axisModel) {\n var axisInfo = getAxisInfo(axisModel);\n\n if (!axisInfo) {\n return;\n }\n\n var axisPointerModel = axisInfo.axisPointerModel;\n var scale = axisInfo.axis.scale;\n var option = axisPointerModel.option;\n var status = axisPointerModel.get('status');\n var value = axisPointerModel.get('value'); // Parse init value for category and time axis.\n\n if (value != null) {\n value = scale.parse(value);\n }\n\n var useHandle = isHandleTrigger(axisPointerModel); // If `handle` used, `axisPointer` will always be displayed, so value\n // and status should be initialized.\n\n if (status == null) {\n option.status = useHandle ? 'show' : 'hide';\n }\n\n var extent = scale.getExtent().slice();\n extent[0] > extent[1] && extent.reverse();\n\n if ( // Pick a value on axis when initializing.\n value == null // If both `handle` and `dataZoom` are used, value may be out of axis extent,\n // where we should re-pick a value to keep `handle` displaying normally.\n || value > extent[1]) {\n // Make handle displayed on the end of the axis when init, which looks better.\n value = extent[1];\n }\n\n if (value < extent[0]) {\n value = extent[0];\n }\n\n option.value = value;\n\n if (useHandle) {\n option.status = axisInfo.axis.scale.isBlank() ? 'hide' : 'show';\n }\n}\n\nfunction getAxisInfo(axisModel) {\n var coordSysAxesInfo = (axisModel.ecModel.getComponent('axisPointer') || {}).coordSysAxesInfo;\n return coordSysAxesInfo && coordSysAxesInfo.axesInfo[makeKey(axisModel)];\n}\n\nfunction getAxisPointerModel(axisModel) {\n var axisInfo = getAxisInfo(axisModel);\n return axisInfo && axisInfo.axisPointerModel;\n}\n\nfunction isHandleTrigger(axisPointerModel) {\n return !!axisPointerModel.get('handle.show');\n}\n/**\n * @param {module:echarts/model/Model} model\n * @return {string} unique key\n */\n\n\nfunction makeKey(model) {\n return model.type + '||' + model.id;\n}\n\nexports.collect = collect;\nexports.fixValue = fixValue;\nexports.getAxisInfo = getAxisInfo;\nexports.getAxisPointerModel = getAxisPointerModel;\nexports.makeKey = makeKey;","var zrUtil = require(\"zrender/lib/core/util\");\n\n/**\n * @file defines echarts Heatmap Chart\n * @author Ovilia (me@zhangwenli.com)\n * Inspired by https://github.com/mourner/simpleheat\n *\n * @module\n */\nvar GRADIENT_LEVELS = 256;\n/**\n * Heatmap Chart\n *\n * @class\n */\n\nfunction Heatmap() {\n var canvas = zrUtil.createCanvas();\n this.canvas = canvas;\n this.blurSize = 30;\n this.pointSize = 20;\n this.maxOpacity = 1;\n this.minOpacity = 0;\n this._gradientPixels = {};\n}\n\nHeatmap.prototype = {\n /**\n * Renders Heatmap and returns the rendered canvas\n * @param {Array} data array of data, each has x, y, value\n * @param {number} width canvas width\n * @param {number} height canvas height\n */\n update: function (data, width, height, normalize, colorFunc, isInRange) {\n var brush = this._getBrush();\n\n var gradientInRange = this._getGradient(data, colorFunc, 'inRange');\n\n var gradientOutOfRange = this._getGradient(data, colorFunc, 'outOfRange');\n\n var r = this.pointSize + this.blurSize;\n var canvas = this.canvas;\n var ctx = canvas.getContext('2d');\n var len = data.length;\n canvas.width = width;\n canvas.height = height;\n\n for (var i = 0; i < len; ++i) {\n var p = data[i];\n var x = p[0];\n var y = p[1];\n var value = p[2]; // calculate alpha using value\n\n var alpha = normalize(value); // draw with the circle brush with alpha\n\n ctx.globalAlpha = alpha;\n ctx.drawImage(brush, x - r, y - r);\n }\n\n if (!canvas.width || !canvas.height) {\n // Avoid \"Uncaught DOMException: Failed to execute 'getImageData' on\n // 'CanvasRenderingContext2D': The source height is 0.\"\n return canvas;\n } // colorize the canvas using alpha value and set with gradient\n\n\n var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n var pixels = imageData.data;\n var offset = 0;\n var pixelLen = pixels.length;\n var minOpacity = this.minOpacity;\n var maxOpacity = this.maxOpacity;\n var diffOpacity = maxOpacity - minOpacity;\n\n while (offset < pixelLen) {\n var alpha = pixels[offset + 3] / 256;\n var gradientOffset = Math.floor(alpha * (GRADIENT_LEVELS - 1)) * 4; // Simple optimize to ignore the empty data\n\n if (alpha > 0) {\n var gradient = isInRange(alpha) ? gradientInRange : gradientOutOfRange; // Any alpha > 0 will be mapped to [minOpacity, maxOpacity]\n\n alpha > 0 && (alpha = alpha * diffOpacity + minOpacity);\n pixels[offset++] = gradient[gradientOffset];\n pixels[offset++] = gradient[gradientOffset + 1];\n pixels[offset++] = gradient[gradientOffset + 2];\n pixels[offset++] = gradient[gradientOffset + 3] * alpha * 256;\n } else {\n offset += 4;\n }\n }\n\n ctx.putImageData(imageData, 0, 0);\n return canvas;\n },\n\n /**\n * get canvas of a black circle brush used for canvas to draw later\n * @private\n * @returns {Object} circle brush canvas\n */\n _getBrush: function () {\n var brushCanvas = this._brushCanvas || (this._brushCanvas = zrUtil.createCanvas()); // set brush size\n\n var r = this.pointSize + this.blurSize;\n var d = r * 2;\n brushCanvas.width = d;\n brushCanvas.height = d;\n var ctx = brushCanvas.getContext('2d');\n ctx.clearRect(0, 0, d, d); // in order to render shadow without the distinct circle,\n // draw the distinct circle in an invisible place,\n // and use shadowOffset to draw shadow in the center of the canvas\n\n ctx.shadowOffsetX = d;\n ctx.shadowBlur = this.blurSize; // draw the shadow in black, and use alpha and shadow blur to generate\n // color in color map\n\n ctx.shadowColor = '#000'; // draw circle in the left to the canvas\n\n ctx.beginPath();\n ctx.arc(-r, r, this.pointSize, 0, Math.PI * 2, true);\n ctx.closePath();\n ctx.fill();\n return brushCanvas;\n },\n\n /**\n * get gradient color map\n * @private\n */\n _getGradient: function (data, colorFunc, state) {\n var gradientPixels = this._gradientPixels;\n var pixelsSingleState = gradientPixels[state] || (gradientPixels[state] = new Uint8ClampedArray(256 * 4));\n var color = [0, 0, 0, 0];\n var off = 0;\n\n for (var i = 0; i < 256; i++) {\n colorFunc[state](i / 255, true, color);\n pixelsSingleState[off++] = color[0];\n pixelsSingleState[off++] = color[1];\n pixelsSingleState[off++] = color[2];\n pixelsSingleState[off++] = color[3];\n }\n\n return pixelsSingleState;\n }\n};\nvar _default = Heatmap;\nmodule.exports = _default;","var _event = require(\"../core/event\");\n\nvar addEventListener = _event.addEventListener;\nvar removeEventListener = _event.removeEventListener;\nvar normalizeEvent = _event.normalizeEvent;\n\nvar zrUtil = require(\"../core/util\");\n\nvar Eventful = require(\"../mixin/Eventful\");\n\nvar env = require(\"../core/env\");\n\nvar GestureMgr = require(\"../core/GestureMgr\");\n\nvar TOUCH_CLICK_DELAY = 300;\nvar mouseHandlerNames = ['click', 'dblclick', 'mousewheel', 'mouseout', 'mouseup', 'mousedown', 'mousemove', 'contextmenu'];\nvar touchHandlerNames = ['touchstart', 'touchend', 'touchmove'];\nvar pointerEventNames = {\n pointerdown: 1,\n pointerup: 1,\n pointermove: 1,\n pointerout: 1\n};\nvar pointerHandlerNames = zrUtil.map(mouseHandlerNames, function (name) {\n var nm = name.replace('mouse', 'pointer');\n return pointerEventNames[nm] ? nm : name;\n});\n\nfunction eventNameFix(name) {\n return name === 'mousewheel' && env.browser.firefox ? 'DOMMouseScroll' : name;\n}\n\nfunction processGesture(proxy, event, stage) {\n var gestureMgr = proxy._gestureMgr;\n stage === 'start' && gestureMgr.clear();\n var gestureInfo = gestureMgr.recognize(event, proxy.handler.findHover(event.zrX, event.zrY, null).target, proxy.dom);\n stage === 'end' && gestureMgr.clear(); // Do not do any preventDefault here. Upper application do that if necessary.\n\n if (gestureInfo) {\n var type = gestureInfo.type;\n event.gestureEvent = type;\n proxy.handler.dispatchToElement({\n target: gestureInfo.target\n }, type, gestureInfo.event);\n }\n} // function onMSGestureChange(proxy, event) {\n// if (event.translationX || event.translationY) {\n// // mousemove is carried by MSGesture to reduce the sensitivity.\n// proxy.handler.dispatchToElement(event.target, 'mousemove', event);\n// }\n// if (event.scale !== 1) {\n// event.pinchX = event.offsetX;\n// event.pinchY = event.offsetY;\n// event.pinchScale = event.scale;\n// proxy.handler.dispatchToElement(event.target, 'pinch', event);\n// }\n// }\n\n/**\n * Prevent mouse event from being dispatched after Touch Events action\n * @see \n * 1. Mobile browsers dispatch mouse events 300ms after touchend.\n * 2. Chrome for Android dispatch mousedown for long-touch about 650ms\n * Result: Blocking Mouse Events for 700ms.\n */\n\n\nfunction setTouchTimer(instance) {\n instance._touching = true;\n clearTimeout(instance._touchTimer);\n instance._touchTimer = setTimeout(function () {\n instance._touching = false;\n }, 700);\n}\n\nvar domHandlers = {\n /**\n * Mouse move handler\n * @inner\n * @param {Event} event\n */\n mousemove: function (event) {\n event = normalizeEvent(this.dom, event);\n this.trigger('mousemove', event);\n },\n\n /**\n * Mouse out handler\n * @inner\n * @param {Event} event\n */\n mouseout: function (event) {\n event = normalizeEvent(this.dom, event);\n var element = event.toElement || event.relatedTarget;\n\n if (element != this.dom) {\n while (element && element.nodeType != 9) {\n // 忽略包含在root中的dom引起的mouseOut\n if (element === this.dom) {\n return;\n }\n\n element = element.parentNode;\n }\n }\n\n this.trigger('mouseout', event);\n },\n\n /**\n * Touch开始响应函数\n * @inner\n * @param {Event} event\n */\n touchstart: function (event) {\n // Default mouse behaviour should not be disabled here.\n // For example, page may needs to be slided.\n event = normalizeEvent(this.dom, event); // Mark touch, which is useful in distinguish touch and\n // mouse event in upper applicatoin.\n\n event.zrByTouch = true;\n this._lastTouchMoment = new Date();\n processGesture(this, event, 'start'); // In touch device, trigger `mousemove`(`mouseover`) should\n // be triggered, and must before `mousedown` triggered.\n\n domHandlers.mousemove.call(this, event);\n domHandlers.mousedown.call(this, event);\n setTouchTimer(this);\n },\n\n /**\n * Touch移动响应函数\n * @inner\n * @param {Event} event\n */\n touchmove: function (event) {\n event = normalizeEvent(this.dom, event); // Mark touch, which is useful in distinguish touch and\n // mouse event in upper applicatoin.\n\n event.zrByTouch = true;\n processGesture(this, event, 'change'); // Mouse move should always be triggered no matter whether\n // there is gestrue event, because mouse move and pinch may\n // be used at the same time.\n\n domHandlers.mousemove.call(this, event);\n setTouchTimer(this);\n },\n\n /**\n * Touch结束响应函数\n * @inner\n * @param {Event} event\n */\n touchend: function (event) {\n event = normalizeEvent(this.dom, event); // Mark touch, which is useful in distinguish touch and\n // mouse event in upper applicatoin.\n\n event.zrByTouch = true;\n processGesture(this, event, 'end');\n domHandlers.mouseup.call(this, event); // Do not trigger `mouseout` here, in spite of `mousemove`(`mouseover`) is\n // triggered in `touchstart`. This seems to be illogical, but by this mechanism,\n // we can conveniently implement \"hover style\" in both PC and touch device just\n // by listening to `mouseover` to add \"hover style\" and listening to `mouseout`\n // to remove \"hover style\" on an element, without any additional code for\n // compatibility. (`mouseout` will not be triggered in `touchend`, so \"hover\n // style\" will remain for user view)\n // click event should always be triggered no matter whether\n // there is gestrue event. System click can not be prevented.\n\n if (+new Date() - this._lastTouchMoment < TOUCH_CLICK_DELAY) {\n domHandlers.click.call(this, event);\n }\n\n setTouchTimer(this);\n },\n pointerdown: function (event) {\n domHandlers.mousedown.call(this, event); // if (useMSGuesture(this, event)) {\n // this._msGesture.addPointer(event.pointerId);\n // }\n },\n pointermove: function (event) {\n // FIXME\n // pointermove is so sensitive that it always triggered when\n // tap(click) on touch screen, which affect some judgement in\n // upper application. So, we dont support mousemove on MS touch\n // device yet.\n if (!isPointerFromTouch(event)) {\n domHandlers.mousemove.call(this, event);\n }\n },\n pointerup: function (event) {\n domHandlers.mouseup.call(this, event);\n },\n pointerout: function (event) {\n // pointerout will be triggered when tap on touch screen\n // (IE11+/Edge on MS Surface) after click event triggered,\n // which is inconsistent with the mousout behavior we defined\n // in touchend. So we unify them.\n // (check domHandlers.touchend for detailed explanation)\n if (!isPointerFromTouch(event)) {\n domHandlers.mouseout.call(this, event);\n }\n }\n};\n\nfunction isPointerFromTouch(event) {\n var pointerType = event.pointerType;\n return pointerType === 'pen' || pointerType === 'touch';\n} // function useMSGuesture(handlerProxy, event) {\n// return isPointerFromTouch(event) && !!handlerProxy._msGesture;\n// }\n// Common handlers\n\n\nzrUtil.each(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name) {\n domHandlers[name] = function (event) {\n event = normalizeEvent(this.dom, event);\n this.trigger(name, event);\n };\n});\n/**\n * 为控制类实例初始化dom 事件处理函数\n *\n * @inner\n * @param {module:zrender/Handler} instance 控制类实例\n */\n\nfunction initDomHandler(instance) {\n zrUtil.each(touchHandlerNames, function (name) {\n instance._handlers[name] = zrUtil.bind(domHandlers[name], instance);\n });\n zrUtil.each(pointerHandlerNames, function (name) {\n instance._handlers[name] = zrUtil.bind(domHandlers[name], instance);\n });\n zrUtil.each(mouseHandlerNames, function (name) {\n instance._handlers[name] = makeMouseHandler(domHandlers[name], instance);\n });\n\n function makeMouseHandler(fn, instance) {\n return function () {\n if (instance._touching) {\n return;\n }\n\n return fn.apply(instance, arguments);\n };\n }\n}\n\nfunction HandlerDomProxy(dom) {\n Eventful.call(this);\n this.dom = dom;\n /**\n * @private\n * @type {boolean}\n */\n\n this._touching = false;\n /**\n * @private\n * @type {number}\n */\n\n this._touchTimer;\n /**\n * @private\n * @type {module:zrender/core/GestureMgr}\n */\n\n this._gestureMgr = new GestureMgr();\n this._handlers = {};\n initDomHandler(this);\n\n if (env.pointerEventsSupported) {\n // Only IE11+/Edge\n // 1. On devices that both enable touch and mouse (e.g., MS Surface and lenovo X240),\n // IE11+/Edge do not trigger touch event, but trigger pointer event and mouse event\n // at the same time.\n // 2. On MS Surface, it probablely only trigger mousedown but no mouseup when tap on\n // screen, which do not occurs in pointer event.\n // So we use pointer event to both detect touch gesture and mouse behavior.\n mountHandlers(pointerHandlerNames, this); // FIXME\n // Note: MS Gesture require CSS touch-action set. But touch-action is not reliable,\n // which does not prevent defuault behavior occasionally (which may cause view port\n // zoomed in but use can not zoom it back). And event.preventDefault() does not work.\n // So we have to not to use MSGesture and not to support touchmove and pinch on MS\n // touch screen. And we only support click behavior on MS touch screen now.\n // MS Gesture Event is only supported on IE11+/Edge and on Windows 8+.\n // We dont support touch on IE on win7.\n // See \n // if (typeof MSGesture === 'function') {\n // (this._msGesture = new MSGesture()).target = dom; // jshint ignore:line\n // dom.addEventListener('MSGestureChange', onMSGestureChange);\n // }\n } else {\n if (env.touchEventsSupported) {\n mountHandlers(touchHandlerNames, this); // Handler of 'mouseout' event is needed in touch mode, which will be mounted below.\n // addEventListener(root, 'mouseout', this._mouseoutHandler);\n } // 1. Considering some devices that both enable touch and mouse event (like on MS Surface\n // and lenovo X240, @see #2350), we make mouse event be always listened, otherwise\n // mouse event can not be handle in those devices.\n // 2. On MS Surface, Chrome will trigger both touch event and mouse event. How to prevent\n // mouseevent after touch event triggered, see `setTouchTimer`.\n\n\n mountHandlers(mouseHandlerNames, this);\n }\n\n function mountHandlers(handlerNames, instance) {\n zrUtil.each(handlerNames, function (name) {\n addEventListener(dom, eventNameFix(name), instance._handlers[name]);\n }, instance);\n }\n}\n\nvar handlerDomProxyProto = HandlerDomProxy.prototype;\n\nhandlerDomProxyProto.dispose = function () {\n var handlerNames = mouseHandlerNames.concat(touchHandlerNames);\n\n for (var i = 0; i < handlerNames.length; i++) {\n var name = handlerNames[i];\n removeEventListener(this.dom, eventNameFix(name), this._handlers[name]);\n }\n};\n\nhandlerDomProxyProto.setCursor = function (cursorStyle) {\n this.dom.style.cursor = cursorStyle || 'default';\n};\n\nzrUtil.mixin(HandlerDomProxy, Eventful);\nvar _default = HandlerDomProxy;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nfunction _default(ecModel) {\n var processedMapType = {};\n ecModel.eachSeriesByType('map', function (mapSeries) {\n var mapType = mapSeries.getMapType();\n\n if (mapSeries.getHostGeoModel() || processedMapType[mapType]) {\n return;\n }\n\n var mapSymbolOffsets = {};\n zrUtil.each(mapSeries.seriesGroup, function (subMapSeries) {\n var geo = subMapSeries.coordinateSystem;\n var data = subMapSeries.originalData;\n\n if (subMapSeries.get('showLegendSymbol') && ecModel.getComponent('legend')) {\n data.each('value', function (value, idx) {\n var name = data.getName(idx);\n var region = geo.getRegion(name); // If input series.data is [11, 22, '-'/null/undefined, 44],\n // it will be filled with NaN: [11, 22, NaN, 44] and NaN will\n // not be drawn. So here must validate if value is NaN.\n\n if (!region || isNaN(value)) {\n return;\n }\n\n var offset = mapSymbolOffsets[name] || 0;\n var point = geo.dataToPoint(region.center);\n mapSymbolOffsets[name] = offset + 1;\n data.setItemLayout(idx, {\n point: point,\n offset: offset\n });\n });\n }\n }); // Show label of those region not has legendSymbol(which is offset 0)\n\n var data = mapSeries.getData();\n data.each(function (idx) {\n var name = data.getName(idx);\n var layout = data.getItemLayout(idx) || {};\n layout.showLabel = !mapSymbolOffsets[name];\n data.setItemLayout(idx, layout);\n });\n processedMapType[mapType] = true;\n });\n}\n\nmodule.exports = _default;","module.exports = __webpack_public_path__ + \"img/About_item_5.83ec8b4b.jpg\";","var zrUtil = require(\"zrender/lib/core/util\");\n\n/**\n * Cartesian coordinate system\n * @module echarts/coord/Cartesian\n *\n */\nfunction dimAxisMapper(dim) {\n return this._axes[dim];\n}\n/**\n * @alias module:echarts/coord/Cartesian\n * @constructor\n */\n\n\nvar Cartesian = function (name) {\n this._axes = {};\n this._dimList = [];\n /**\n * @type {string}\n */\n\n this.name = name || '';\n};\n\nCartesian.prototype = {\n constructor: Cartesian,\n type: 'cartesian',\n\n /**\n * Get axis\n * @param {number|string} dim\n * @return {module:echarts/coord/Cartesian~Axis}\n */\n getAxis: function (dim) {\n return this._axes[dim];\n },\n\n /**\n * Get axes list\n * @return {Array.}\n */\n getAxes: function () {\n return zrUtil.map(this._dimList, dimAxisMapper, this);\n },\n\n /**\n * Get axes list by given scale type\n */\n getAxesByScale: function (scaleType) {\n scaleType = scaleType.toLowerCase();\n return zrUtil.filter(this.getAxes(), function (axis) {\n return axis.scale.type === scaleType;\n });\n },\n\n /**\n * Add axis\n * @param {module:echarts/coord/Cartesian.Axis}\n */\n addAxis: function (axis) {\n var dim = axis.dim;\n this._axes[dim] = axis;\n\n this._dimList.push(dim);\n },\n\n /**\n * Convert data to coord in nd space\n * @param {Array.|Object.} val\n * @return {Array.|Object.}\n */\n dataToCoord: function (val) {\n return this._dataCoordConvert(val, 'dataToCoord');\n },\n\n /**\n * Convert coord in nd space to data\n * @param {Array.|Object.} val\n * @return {Array.|Object.}\n */\n coordToData: function (val) {\n return this._dataCoordConvert(val, 'coordToData');\n },\n _dataCoordConvert: function (input, method) {\n var dimList = this._dimList;\n var output = input instanceof Array ? [] : {};\n\n for (var i = 0; i < dimList.length; i++) {\n var dim = dimList[i];\n var axis = this._axes[dim];\n output[dim] = axis[method](input[dim]);\n }\n\n return output;\n }\n};\nvar _default = Cartesian;\nmodule.exports = _default;","module.exports = __webpack_public_path__ + \"img/About_item_4.623bcc99.jpg\";","var SeriesModel = require(\"../../model/Series\");\n\nvar createGraphFromNodeEdge = require(\"../helper/createGraphFromNodeEdge\");\n\nvar _format = require(\"../../util/format\");\n\nvar encodeHTML = _format.encodeHTML;\n\n/**\n * @file Get initial data and define sankey view's series model\n * @author Deqing Li(annong035@gmail.com)\n */\nvar SankeySeries = SeriesModel.extend({\n type: 'series.sankey',\n layoutInfo: null,\n\n /**\n * Init a graph data structure from data in option series\n *\n * @param {Object} option the object used to config echarts view\n * @return {module:echarts/data/List} storage initial data\n */\n getInitialData: function (option) {\n var links = option.edges || option.links;\n var nodes = option.data || option.nodes;\n\n if (nodes && links) {\n var graph = createGraphFromNodeEdge(nodes, links, this, true);\n return graph.data;\n }\n },\n\n /**\n * Return the graphic data structure\n *\n * @return {module:echarts/data/Graph} graphic data structure\n */\n getGraph: function () {\n return this.getData().graph;\n },\n\n /**\n * Get edge data of graphic data structure\n *\n * @return {module:echarts/data/List} data structure of list\n */\n getEdgeData: function () {\n return this.getGraph().edgeData;\n },\n\n /**\n * @override\n */\n formatTooltip: function (dataIndex, multipleSeries, dataType) {\n // dataType === 'node' or empty do not show tooltip by default\n if (dataType === 'edge') {\n var params = this.getDataParams(dataIndex, dataType);\n var rawDataOpt = params.data;\n var html = rawDataOpt.source + ' -- ' + rawDataOpt.target;\n\n if (params.value) {\n html += ' : ' + params.value;\n }\n\n return encodeHTML(html);\n }\n\n return SankeySeries.superCall(this, 'formatTooltip', dataIndex, multipleSeries);\n },\n defaultOption: {\n zlevel: 0,\n z: 2,\n coordinateSystem: 'view',\n layout: null,\n // the position of the whole view\n left: '5%',\n top: '5%',\n right: '20%',\n bottom: '5%',\n // the dx of the node\n nodeWidth: 20,\n // the vertical distance between two nodes\n nodeGap: 8,\n // the number of iterations to change the position of the node\n layoutIterations: 32,\n label: {\n normal: {\n show: true,\n position: 'right',\n color: '#000',\n fontSize: 12\n },\n emphasis: {\n show: true\n }\n },\n itemStyle: {\n normal: {\n borderWidth: 1,\n borderColor: '#333'\n }\n },\n lineStyle: {\n normal: {\n color: '#314656',\n opacity: 0.2,\n curveness: 0.5\n },\n emphasis: {\n opacity: 0.6\n }\n },\n animationEasing: 'linear',\n animationDuration: 1000\n }\n});\nvar _default = SankeySeries;\nmodule.exports = _default;","var echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nrequire(\"../coord/geo/GeoModel\");\n\nrequire(\"../coord/geo/geoCreator\");\n\nrequire(\"./geo/GeoView\");\n\nrequire(\"../action/geoRoam\");\n\nfunction makeAction(method, actionInfo) {\n actionInfo.update = 'updateView';\n echarts.registerAction(actionInfo, function (payload, ecModel) {\n var selected = {};\n ecModel.eachComponent({\n mainType: 'geo',\n query: payload\n }, function (geoModel) {\n geoModel[method](payload.name);\n var geo = geoModel.coordinateSystem;\n zrUtil.each(geo.regions, function (region) {\n selected[region.name] = geoModel.isSelected(region.name) || false;\n });\n });\n return {\n selected: selected,\n name: payload.name\n };\n });\n}\n\nmakeAction('toggleSelected', {\n type: 'geoToggleSelect',\n event: 'geoselectchanged'\n});\nmakeAction('select', {\n type: 'geoSelect',\n event: 'geoselected'\n});\nmakeAction('unSelect', {\n type: 'geoUnSelect',\n event: 'geounselected'\n});","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar layout = require(\"../../util/layout\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar CoordinateSystem = require(\"../../CoordinateSystem\");\n\n// (24*60*60*1000)\nvar PROXIMATE_ONE_DAY = 86400000;\n/**\n * Calendar\n *\n * @constructor\n *\n * @param {Object} calendarModel calendarModel\n * @param {Object} ecModel ecModel\n * @param {Object} api api\n */\n\nfunction Calendar(calendarModel, ecModel, api) {\n this._model = calendarModel;\n}\n\nCalendar.prototype = {\n constructor: Calendar,\n type: 'calendar',\n dimensions: ['time', 'value'],\n // Required in createListFromData\n getDimensionsInfo: function () {\n return [{\n name: 'time',\n type: 'time'\n }];\n },\n getRangeInfo: function () {\n return this._rangeInfo;\n },\n getModel: function () {\n return this._model;\n },\n getRect: function () {\n return this._rect;\n },\n getCellWidth: function () {\n return this._sw;\n },\n getCellHeight: function () {\n return this._sh;\n },\n getOrient: function () {\n return this._orient;\n },\n\n /**\n * getFirstDayOfWeek\n *\n * @example\n * 0 : start at Sunday\n * 1 : start at Monday\n *\n * @return {number}\n */\n getFirstDayOfWeek: function () {\n return this._firstDayOfWeek;\n },\n\n /**\n * get date info\n *\n * @param {string|number} date date\n * @return {Object}\n * {\n * y: string, local full year, eg., '1940',\n * m: string, local month, from '01' ot '12',\n * d: string, local date, from '01' to '31' (if exists),\n * day: It is not date.getDay(). It is the location of the cell in a week, from 0 to 6,\n * time: timestamp,\n * formatedDate: string, yyyy-MM-dd,\n * date: original date object.\n * }\n */\n getDateInfo: function (date) {\n date = numberUtil.parseDate(date);\n var y = date.getFullYear();\n var m = date.getMonth() + 1;\n m = m < 10 ? '0' + m : m;\n var d = date.getDate();\n d = d < 10 ? '0' + d : d;\n var day = date.getDay();\n day = Math.abs((day + 7 - this.getFirstDayOfWeek()) % 7);\n return {\n y: y,\n m: m,\n d: d,\n day: day,\n time: date.getTime(),\n formatedDate: y + '-' + m + '-' + d,\n date: date\n };\n },\n getNextNDay: function (date, n) {\n n = n || 0;\n\n if (n === 0) {\n return this.getDateInfo(date);\n }\n\n date = new Date(this.getDateInfo(date).time);\n date.setDate(date.getDate() + n);\n return this.getDateInfo(date);\n },\n update: function (ecModel, api) {\n this._firstDayOfWeek = +this._model.getModel('dayLabel').get('firstDay');\n this._orient = this._model.get('orient');\n this._lineWidth = this._model.getModel('itemStyle.normal').getItemStyle().lineWidth || 0;\n this._rangeInfo = this._getRangeInfo(this._initRangeOption());\n var weeks = this._rangeInfo.weeks || 1;\n var whNames = ['width', 'height'];\n\n var cellSize = this._model.get('cellSize').slice();\n\n var layoutParams = this._model.getBoxLayoutParams();\n\n var cellNumbers = this._orient === 'horizontal' ? [weeks, 7] : [7, weeks];\n zrUtil.each([0, 1], function (idx) {\n if (cellSizeSpecified(cellSize, idx)) {\n layoutParams[whNames[idx]] = cellSize[idx] * cellNumbers[idx];\n }\n });\n var whGlobal = {\n width: api.getWidth(),\n height: api.getHeight()\n };\n var calendarRect = this._rect = layout.getLayoutRect(layoutParams, whGlobal);\n zrUtil.each([0, 1], function (idx) {\n if (!cellSizeSpecified(cellSize, idx)) {\n cellSize[idx] = calendarRect[whNames[idx]] / cellNumbers[idx];\n }\n });\n\n function cellSizeSpecified(cellSize, idx) {\n return cellSize[idx] != null && cellSize[idx] !== 'auto';\n }\n\n this._sw = cellSize[0];\n this._sh = cellSize[1];\n },\n\n /**\n * Convert a time data(time, value) item to (x, y) point.\n *\n * @override\n * @param {Array|number} data data\n * @param {boolean} [clamp=true] out of range\n * @return {Array} point\n */\n dataToPoint: function (data, clamp) {\n zrUtil.isArray(data) && (data = data[0]);\n clamp == null && (clamp = true);\n var dayInfo = this.getDateInfo(data);\n var range = this._rangeInfo;\n var date = dayInfo.formatedDate; // if not in range return [NaN, NaN]\n\n if (clamp && !(dayInfo.time >= range.start.time && dayInfo.time <= range.end.time)) {\n return [NaN, NaN];\n }\n\n var week = dayInfo.day;\n\n var nthWeek = this._getRangeInfo([range.start.time, date]).nthWeek;\n\n if (this._orient === 'vertical') {\n return [this._rect.x + week * this._sw + this._sw / 2, this._rect.y + nthWeek * this._sh + this._sh / 2];\n }\n\n return [this._rect.x + nthWeek * this._sw + this._sw / 2, this._rect.y + week * this._sh + this._sh / 2];\n },\n\n /**\n * Convert a (x, y) point to time data\n *\n * @override\n * @param {string} point point\n * @return {string} data\n */\n pointToData: function (point) {\n var date = this.pointToDate(point);\n return date && date.time;\n },\n\n /**\n * Convert a time date item to (x, y) four point.\n *\n * @param {Array} data date[0] is date\n * @param {boolean} [clamp=true] out of range\n * @return {Object} point\n */\n dataToRect: function (data, clamp) {\n var point = this.dataToPoint(data, clamp);\n return {\n contentShape: {\n x: point[0] - (this._sw - this._lineWidth) / 2,\n y: point[1] - (this._sh - this._lineWidth) / 2,\n width: this._sw - this._lineWidth,\n height: this._sh - this._lineWidth\n },\n center: point,\n tl: [point[0] - this._sw / 2, point[1] - this._sh / 2],\n tr: [point[0] + this._sw / 2, point[1] - this._sh / 2],\n br: [point[0] + this._sw / 2, point[1] + this._sh / 2],\n bl: [point[0] - this._sw / 2, point[1] + this._sh / 2]\n };\n },\n\n /**\n * Convert a (x, y) point to time date\n *\n * @param {Array} point point\n * @return {Object} date\n */\n pointToDate: function (point) {\n var nthX = Math.floor((point[0] - this._rect.x) / this._sw) + 1;\n var nthY = Math.floor((point[1] - this._rect.y) / this._sh) + 1;\n var range = this._rangeInfo.range;\n\n if (this._orient === 'vertical') {\n return this._getDateByWeeksAndDay(nthY, nthX - 1, range);\n }\n\n return this._getDateByWeeksAndDay(nthX, nthY - 1, range);\n },\n\n /**\n * @inheritDoc\n */\n convertToPixel: zrUtil.curry(doConvert, 'dataToPoint'),\n\n /**\n * @inheritDoc\n */\n convertFromPixel: zrUtil.curry(doConvert, 'pointToData'),\n\n /**\n * initRange\n *\n * @private\n * @return {Array} [start, end]\n */\n _initRangeOption: function () {\n var range = this._model.get('range');\n\n var rg = range;\n\n if (zrUtil.isArray(rg) && rg.length === 1) {\n rg = rg[0];\n }\n\n if (/^\\d{4}$/.test(rg)) {\n range = [rg + '-01-01', rg + '-12-31'];\n }\n\n if (/^\\d{4}[\\/|-]\\d{1,2}$/.test(rg)) {\n var start = this.getDateInfo(rg);\n var firstDay = start.date;\n firstDay.setMonth(firstDay.getMonth() + 1);\n var end = this.getNextNDay(firstDay, -1);\n range = [start.formatedDate, end.formatedDate];\n }\n\n if (/^\\d{4}[\\/|-]\\d{1,2}[\\/|-]\\d{1,2}$/.test(rg)) {\n range = [rg, rg];\n }\n\n var tmp = this._getRangeInfo(range);\n\n if (tmp.start.time > tmp.end.time) {\n range.reverse();\n }\n\n return range;\n },\n\n /**\n * range info\n *\n * @private\n * @param {Array} range range ['2017-01-01', '2017-07-08']\n * If range[0] > range[1], they will not be reversed.\n * @return {Object} obj\n */\n _getRangeInfo: function (range) {\n range = [this.getDateInfo(range[0]), this.getDateInfo(range[1])];\n var reversed;\n\n if (range[0].time > range[1].time) {\n reversed = true;\n range.reverse();\n }\n\n var allDay = Math.floor(range[1].time / PROXIMATE_ONE_DAY) - Math.floor(range[0].time / PROXIMATE_ONE_DAY) + 1; // Consider case:\n // Firstly set system timezone as \"Time Zone: America/Toronto\",\n // ```\n // var first = new Date(1478412000000 - 3600 * 1000 * 2.5);\n // var second = new Date(1478412000000);\n // var allDays = Math.floor(second / ONE_DAY) - Math.floor(first / ONE_DAY) + 1;\n // ```\n // will get wrong result because of DST. So we should fix it.\n\n var date = new Date(range[0].time);\n var startDateNum = date.getDate();\n var endDateNum = range[1].date.getDate();\n date.setDate(startDateNum + allDay - 1); // The bias can not over a month, so just compare date.\n\n if (date.getDate() !== endDateNum) {\n var sign = date.getTime() - range[1].time > 0 ? 1 : -1;\n\n while (date.getDate() !== endDateNum && (date.getTime() - range[1].time) * sign > 0) {\n allDay -= sign;\n date.setDate(startDateNum + allDay - 1);\n }\n }\n\n var weeks = Math.floor((allDay + range[0].day + 6) / 7);\n var nthWeek = reversed ? -weeks + 1 : weeks - 1;\n reversed && range.reverse();\n return {\n range: [range[0].formatedDate, range[1].formatedDate],\n start: range[0],\n end: range[1],\n allDay: allDay,\n weeks: weeks,\n // From 0.\n nthWeek: nthWeek,\n fweek: range[0].day,\n lweek: range[1].day\n };\n },\n\n /**\n * get date by nthWeeks and week day in range\n *\n * @private\n * @param {number} nthWeek the week\n * @param {number} day the week day\n * @param {Array} range [d1, d2]\n * @return {Object}\n */\n _getDateByWeeksAndDay: function (nthWeek, day, range) {\n var rangeInfo = this._getRangeInfo(range);\n\n if (nthWeek > rangeInfo.weeks || nthWeek === 0 && day < rangeInfo.fweek || nthWeek === rangeInfo.weeks && day > rangeInfo.lweek) {\n return false;\n }\n\n var nthDay = (nthWeek - 1) * 7 - rangeInfo.fweek + day;\n var date = new Date(rangeInfo.start.time);\n date.setDate(rangeInfo.start.d + nthDay);\n return this.getDateInfo(date);\n }\n};\nCalendar.dimensions = Calendar.prototype.dimensions;\nCalendar.getDimensionsInfo = Calendar.prototype.getDimensionsInfo;\n\nCalendar.create = function (ecModel, api) {\n var calendarList = [];\n ecModel.eachComponent('calendar', function (calendarModel) {\n var calendar = new Calendar(calendarModel, ecModel, api);\n calendarList.push(calendar);\n calendarModel.coordinateSystem = calendar;\n });\n ecModel.eachSeries(function (calendarSeries) {\n if (calendarSeries.get('coordinateSystem') === 'calendar') {\n // Inject coordinate system\n calendarSeries.coordinateSystem = calendarList[calendarSeries.get('calendarIndex') || 0];\n }\n });\n return calendarList;\n};\n\nfunction doConvert(methodName, ecModel, finder, value) {\n var calendarModel = finder.calendarModel;\n var seriesModel = finder.seriesModel;\n var coordSys = calendarModel ? calendarModel.coordinateSystem : seriesModel ? seriesModel.coordinateSystem : null;\n return coordSys === this ? coordSys[methodName](value) : null;\n}\n\nCoordinateSystem.register('calendar', Calendar);\nvar _default = Calendar;\nmodule.exports = _default;","var echarts = require(\"../echarts\");\n\nrequire(\"./legend/LegendModel\");\n\nrequire(\"./legend/legendAction\");\n\nrequire(\"./legend/LegendView\");\n\nvar legendFilter = require(\"./legend/legendFilter\");\n\nvar Component = require(\"../model/Component\");\n\n// Do not contain scrollable legend, for sake of file size.\n// Series Filter\necharts.registerProcessor(legendFilter);\nComponent.registerSubTypeDefaulter('legend', function () {\n // Default 'plain' when no type specified.\n return 'plain';\n});","var util = require(\"./core/util\");\n\nvar vec2 = require(\"./core/vector\");\n\nvar Draggable = require(\"./mixin/Draggable\");\n\nvar Eventful = require(\"./mixin/Eventful\");\n\n/**\n * Handler\n * @module zrender/Handler\n * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)\n * errorrik (errorrik@gmail.com)\n * pissang (shenyi.914@gmail.com)\n */\nvar SILENT = 'silent';\n\nfunction makeEventPacket(eveType, targetInfo, event) {\n return {\n type: eveType,\n event: event,\n // target can only be an element that is not silent.\n target: targetInfo.target,\n // topTarget can be a silent element.\n topTarget: targetInfo.topTarget,\n cancelBubble: false,\n offsetX: event.zrX,\n offsetY: event.zrY,\n gestureEvent: event.gestureEvent,\n pinchX: event.pinchX,\n pinchY: event.pinchY,\n pinchScale: event.pinchScale,\n wheelDelta: event.zrDelta,\n zrByTouch: event.zrByTouch,\n which: event.which\n };\n}\n\nfunction EmptyProxy() {}\n\nEmptyProxy.prototype.dispose = function () {};\n\nvar handlerNames = ['click', 'dblclick', 'mousewheel', 'mouseout', 'mouseup', 'mousedown', 'mousemove', 'contextmenu'];\n/**\n * @alias module:zrender/Handler\n * @constructor\n * @extends module:zrender/mixin/Eventful\n * @param {module:zrender/Storage} storage Storage instance.\n * @param {module:zrender/Painter} painter Painter instance.\n * @param {module:zrender/dom/HandlerProxy} proxy HandlerProxy instance.\n * @param {HTMLElement} painterRoot painter.root (not painter.getViewportRoot()).\n */\n\nvar Handler = function (storage, painter, proxy, painterRoot) {\n Eventful.call(this);\n this.storage = storage;\n this.painter = painter;\n this.painterRoot = painterRoot;\n proxy = proxy || new EmptyProxy();\n /**\n * Proxy of event. can be Dom, WebGLSurface, etc.\n */\n\n this.proxy = proxy; // Attach handler\n\n proxy.handler = this;\n /**\n * {target, topTarget, x, y}\n * @private\n * @type {Object}\n */\n\n this._hovered = {};\n /**\n * @private\n * @type {Date}\n */\n\n this._lastTouchMoment;\n /**\n * @private\n * @type {number}\n */\n\n this._lastX;\n /**\n * @private\n * @type {number}\n */\n\n this._lastY;\n Draggable.call(this);\n util.each(handlerNames, function (name) {\n proxy.on && proxy.on(name, this[name], this);\n }, this);\n};\n\nHandler.prototype = {\n constructor: Handler,\n mousemove: function (event) {\n var x = event.zrX;\n var y = event.zrY;\n var lastHovered = this._hovered;\n var lastHoveredTarget = lastHovered.target; // If lastHoveredTarget is removed from zr (detected by '__zr') by some API call\n // (like 'setOption' or 'dispatchAction') in event handlers, we should find\n // lastHovered again here. Otherwise 'mouseout' can not be triggered normally.\n // See #6198.\n\n if (lastHoveredTarget && !lastHoveredTarget.__zr) {\n lastHovered = this.findHover(lastHovered.x, lastHovered.y);\n lastHoveredTarget = lastHovered.target;\n }\n\n var hovered = this._hovered = this.findHover(x, y);\n var hoveredTarget = hovered.target;\n var proxy = this.proxy;\n proxy.setCursor && proxy.setCursor(hoveredTarget ? hoveredTarget.cursor : 'default'); // Mouse out on previous hovered element\n\n if (lastHoveredTarget && hoveredTarget !== lastHoveredTarget) {\n this.dispatchToElement(lastHovered, 'mouseout', event);\n } // Mouse moving on one element\n\n\n this.dispatchToElement(hovered, 'mousemove', event); // Mouse over on a new element\n\n if (hoveredTarget && hoveredTarget !== lastHoveredTarget) {\n this.dispatchToElement(hovered, 'mouseover', event);\n }\n },\n mouseout: function (event) {\n this.dispatchToElement(this._hovered, 'mouseout', event); // There might be some doms created by upper layer application\n // at the same level of painter.getViewportRoot() (e.g., tooltip\n // dom created by echarts), where 'globalout' event should not\n // be triggered when mouse enters these doms. (But 'mouseout'\n // should be triggered at the original hovered element as usual).\n\n var element = event.toElement || event.relatedTarget;\n var innerDom;\n\n do {\n element = element && element.parentNode;\n } while (element && element.nodeType != 9 && !(innerDom = element === this.painterRoot));\n\n !innerDom && this.trigger('globalout', {\n event: event\n });\n },\n\n /**\n * Resize\n */\n resize: function (event) {\n this._hovered = {};\n },\n\n /**\n * Dispatch event\n * @param {string} eventName\n * @param {event=} eventArgs\n */\n dispatch: function (eventName, eventArgs) {\n var handler = this[eventName];\n handler && handler.call(this, eventArgs);\n },\n\n /**\n * Dispose\n */\n dispose: function () {\n this.proxy.dispose();\n this.storage = this.proxy = this.painter = null;\n },\n\n /**\n * 设置默认的cursor style\n * @param {string} [cursorStyle='default'] 例如 crosshair\n */\n setCursorStyle: function (cursorStyle) {\n var proxy = this.proxy;\n proxy.setCursor && proxy.setCursor(cursorStyle);\n },\n\n /**\n * 事件分发代理\n *\n * @private\n * @param {Object} targetInfo {target, topTarget} 目标图形元素\n * @param {string} eventName 事件名称\n * @param {Object} event 事件对象\n */\n dispatchToElement: function (targetInfo, eventName, event) {\n targetInfo = targetInfo || {};\n var el = targetInfo.target;\n\n if (el && el.silent) {\n return;\n }\n\n var eventHandler = 'on' + eventName;\n var eventPacket = makeEventPacket(eventName, targetInfo, event);\n\n while (el) {\n el[eventHandler] && (eventPacket.cancelBubble = el[eventHandler].call(el, eventPacket));\n el.trigger(eventName, eventPacket);\n el = el.parent;\n\n if (eventPacket.cancelBubble) {\n break;\n }\n }\n\n if (!eventPacket.cancelBubble) {\n // 冒泡到顶级 zrender 对象\n this.trigger(eventName, eventPacket); // 分发事件到用户自定义层\n // 用户有可能在全局 click 事件中 dispose,所以需要判断下 painter 是否存在\n\n this.painter && this.painter.eachOtherLayer(function (layer) {\n if (typeof layer[eventHandler] == 'function') {\n layer[eventHandler].call(layer, eventPacket);\n }\n\n if (layer.trigger) {\n layer.trigger(eventName, eventPacket);\n }\n });\n }\n },\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {module:zrender/graphic/Displayable} exclude\n * @return {model:zrender/Element}\n * @method\n */\n findHover: function (x, y, exclude) {\n var list = this.storage.getDisplayList();\n var out = {\n x: x,\n y: y\n };\n\n for (var i = list.length - 1; i >= 0; i--) {\n var hoverCheckResult;\n\n if (list[i] !== exclude // getDisplayList may include ignored item in VML mode\n && !list[i].ignore && (hoverCheckResult = isHover(list[i], x, y))) {\n !out.topTarget && (out.topTarget = list[i]);\n\n if (hoverCheckResult !== SILENT) {\n out.target = list[i];\n break;\n }\n }\n }\n\n return out;\n }\n}; // Common handlers\n\nutil.each(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name) {\n Handler.prototype[name] = function (event) {\n // Find hover again to avoid click event is dispatched manually. Or click is triggered without mouseover\n var hovered = this.findHover(event.zrX, event.zrY);\n var hoveredTarget = hovered.target;\n\n if (name === 'mousedown') {\n this._downEl = hoveredTarget;\n this._downPoint = [event.zrX, event.zrY]; // In case click triggered before mouseup\n\n this._upEl = hoveredTarget;\n } else if (name === 'mosueup') {\n this._upEl = hoveredTarget;\n } else if (name === 'click') {\n if (this._downEl !== this._upEl // Original click event is triggered on the whole canvas element,\n // including the case that `mousedown` - `mousemove` - `mouseup`,\n // which should be filtered, otherwise it will bring trouble to\n // pan and zoom.\n || !this._downPoint // Arbitrary value\n || vec2.dist(this._downPoint, [event.zrX, event.zrY]) > 4) {\n return;\n }\n\n this._downPoint = null;\n }\n\n this.dispatchToElement(hovered, name, event);\n };\n});\n\nfunction isHover(displayable, x, y) {\n if (displayable[displayable.rectHover ? 'rectContain' : 'contain'](x, y)) {\n var el = displayable;\n var isSilent;\n\n while (el) {\n // If clipped by ancestor.\n // FIXME: If clipPath has neither stroke nor fill,\n // el.clipPath.contain(x, y) will always return false.\n if (el.clipPath && !el.clipPath.contain(x, y)) {\n return false;\n }\n\n if (el.silent) {\n isSilent = true;\n }\n\n el = el.parent;\n }\n\n return isSilent ? SILENT : true;\n }\n\n return false;\n}\n\nutil.mixin(Handler, Eventful);\nutil.mixin(Handler, Draggable);\nvar _default = Handler;\nmodule.exports = _default;","var _simpleLayoutHelper = require(\"./simpleLayoutHelper\");\n\nvar simpleLayout = _simpleLayoutHelper.simpleLayout;\nvar simpleLayoutEdge = _simpleLayoutHelper.simpleLayoutEdge;\n\nfunction _default(ecModel, api) {\n ecModel.eachSeriesByType('graph', function (seriesModel) {\n var layout = seriesModel.get('layout');\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys && coordSys.type !== 'view') {\n var data = seriesModel.getData();\n var dimensions = coordSys.dimensions;\n data.each(dimensions, function () {\n var hasValue;\n var args = arguments;\n var value = [];\n\n for (var i = 0; i < dimensions.length; i++) {\n if (!isNaN(args[i])) {\n hasValue = true;\n }\n\n value.push(args[i]);\n }\n\n var idx = args[args.length - 1];\n\n if (hasValue) {\n data.setItemLayout(idx, coordSys.dataToPoint(value));\n } else {\n // Also {Array.}, not undefined to avoid if...else... statement\n data.setItemLayout(idx, [NaN, NaN]);\n }\n });\n simpleLayoutEdge(data.graph);\n } else if (!layout || layout === 'none') {\n simpleLayout(seriesModel);\n }\n });\n}\n\nmodule.exports = _default;","var echarts = require(\"../../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar lang = require(\"../../../lang\");\n\nvar featureManager = require(\"../featureManager\");\n\nvar magicTypeLang = lang.toolbox.magicType;\n\nfunction MagicType(model) {\n this.model = model;\n}\n\nMagicType.defaultOption = {\n show: true,\n type: [],\n // Icon group\n icon: {\n line: 'M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4',\n bar: 'M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7',\n stack: 'M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z',\n // jshint ignore:line\n tiled: 'M2.3,2.2h22.8V25H2.3V2.2z M35,2.2h22.8V25H35V2.2zM2.3,35h22.8v22.8H2.3V35z M35,35h22.8v22.8H35V35z'\n },\n // `line`, `bar`, `stack`, `tiled`\n title: zrUtil.clone(magicTypeLang.title),\n option: {},\n seriesIndex: {}\n};\nvar proto = MagicType.prototype;\n\nproto.getIcons = function () {\n var model = this.model;\n var availableIcons = model.get('icon');\n var icons = {};\n zrUtil.each(model.get('type'), function (type) {\n if (availableIcons[type]) {\n icons[type] = availableIcons[type];\n }\n });\n return icons;\n};\n\nvar seriesOptGenreator = {\n 'line': function (seriesType, seriesId, seriesModel, model) {\n if (seriesType === 'bar') {\n return zrUtil.merge({\n id: seriesId,\n type: 'line',\n // Preserve data related option\n data: seriesModel.get('data'),\n stack: seriesModel.get('stack'),\n markPoint: seriesModel.get('markPoint'),\n markLine: seriesModel.get('markLine')\n }, model.get('option.line') || {}, true);\n }\n },\n 'bar': function (seriesType, seriesId, seriesModel, model) {\n if (seriesType === 'line') {\n return zrUtil.merge({\n id: seriesId,\n type: 'bar',\n // Preserve data related option\n data: seriesModel.get('data'),\n stack: seriesModel.get('stack'),\n markPoint: seriesModel.get('markPoint'),\n markLine: seriesModel.get('markLine')\n }, model.get('option.bar') || {}, true);\n }\n },\n 'stack': function (seriesType, seriesId, seriesModel, model) {\n if (seriesType === 'line' || seriesType === 'bar') {\n return zrUtil.merge({\n id: seriesId,\n stack: '__ec_magicType_stack__'\n }, model.get('option.stack') || {}, true);\n }\n },\n 'tiled': function (seriesType, seriesId, seriesModel, model) {\n if (seriesType === 'line' || seriesType === 'bar') {\n return zrUtil.merge({\n id: seriesId,\n stack: ''\n }, model.get('option.tiled') || {}, true);\n }\n }\n};\nvar radioTypes = [['line', 'bar'], ['stack', 'tiled']];\n\nproto.onclick = function (ecModel, api, type) {\n var model = this.model;\n var seriesIndex = model.get('seriesIndex.' + type); // Not supported magicType\n\n if (!seriesOptGenreator[type]) {\n return;\n }\n\n var newOption = {\n series: []\n };\n\n var generateNewSeriesTypes = function (seriesModel) {\n var seriesType = seriesModel.subType;\n var seriesId = seriesModel.id;\n var newSeriesOpt = seriesOptGenreator[type](seriesType, seriesId, seriesModel, model);\n\n if (newSeriesOpt) {\n // PENDING If merge original option?\n zrUtil.defaults(newSeriesOpt, seriesModel.option);\n newOption.series.push(newSeriesOpt);\n } // Modify boundaryGap\n\n\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys && coordSys.type === 'cartesian2d' && (type === 'line' || type === 'bar')) {\n var categoryAxis = coordSys.getAxesByScale('ordinal')[0];\n\n if (categoryAxis) {\n var axisDim = categoryAxis.dim;\n var axisType = axisDim + 'Axis';\n var axisModel = ecModel.queryComponents({\n mainType: axisType,\n index: seriesModel.get(name + 'Index'),\n id: seriesModel.get(name + 'Id')\n })[0];\n var axisIndex = axisModel.componentIndex;\n newOption[axisType] = newOption[axisType] || [];\n\n for (var i = 0; i <= axisIndex; i++) {\n newOption[axisType][axisIndex] = newOption[axisType][axisIndex] || {};\n }\n\n newOption[axisType][axisIndex].boundaryGap = type === 'bar' ? true : false;\n }\n }\n };\n\n zrUtil.each(radioTypes, function (radio) {\n if (zrUtil.indexOf(radio, type) >= 0) {\n zrUtil.each(radio, function (item) {\n model.setIconStatus(item, 'normal');\n });\n }\n });\n model.setIconStatus(type, 'emphasis');\n ecModel.eachComponent({\n mainType: 'series',\n query: seriesIndex == null ? null : {\n seriesIndex: seriesIndex\n }\n }, generateNewSeriesTypes);\n api.dispatchAction({\n type: 'changeMagicType',\n currentType: type,\n newOption: newOption\n });\n};\n\necharts.registerAction({\n type: 'changeMagicType',\n event: 'magicTypeChanged',\n update: 'prepareAndUpdate'\n}, function (payload, ecModel) {\n ecModel.mergeOption(payload.newOption);\n});\nfeatureManager.register('magicType', MagicType);\nvar _default = MagicType;\nmodule.exports = _default;","var env = require(\"../core/env\");\n\nvar urn = 'urn:schemas-microsoft-com:vml';\nvar win = typeof window === 'undefined' ? null : window;\nvar vmlInited = false;\nvar doc = win && win.document;\n\nfunction createNode(tagName) {\n return doCreateNode(tagName);\n} // Avoid assign to an exported variable, for transforming to cjs.\n\n\nvar doCreateNode;\n\nif (doc && !env.canvasSupported) {\n try {\n !doc.namespaces.zrvml && doc.namespaces.add('zrvml', urn);\n\n doCreateNode = function (tagName) {\n return doc.createElement('');\n };\n } catch (e) {\n doCreateNode = function (tagName) {\n return doc.createElement('<' + tagName + ' xmlns=\"' + urn + '\" class=\"zrvml\">');\n };\n }\n} // From raphael\n\n\nfunction initVML() {\n if (vmlInited || !doc) {\n return;\n }\n\n vmlInited = true;\n var styleSheets = doc.styleSheets;\n\n if (styleSheets.length < 31) {\n doc.createStyleSheet().addRule('.zrvml', 'behavior:url(#default#VML)');\n } else {\n // http://msdn.microsoft.com/en-us/library/ms531194%28VS.85%29.aspx\n styleSheets[0].addRule('.zrvml', 'behavior:url(#default#VML)');\n }\n}\n\nexports.doc = doc;\nexports.createNode = createNode;\nexports.initVML = initVML;","function _default(seriesType, ecModel) {\n var legendModels = ecModel.findComponents({\n mainType: 'legend'\n });\n\n if (!legendModels || !legendModels.length) {\n return;\n }\n\n ecModel.eachSeriesByType(seriesType, function (series) {\n var data = series.getData();\n data.filterSelf(function (idx) {\n var name = data.getName(idx); // If in any legend component the status is not selected.\n\n for (var i = 0; i < legendModels.length; i++) {\n if (!legendModels[i].isSelected(name)) {\n return false;\n }\n }\n\n return true;\n }, this);\n }, this);\n}\n\nmodule.exports = _default;","var Path = require(\"../Path\");\n\nvar polyHelper = require(\"../helper/poly\");\n\n/**\n * @module zrender/graphic/shape/Polyline\n */\nvar _default = Path.extend({\n type: 'polyline',\n shape: {\n points: null,\n smooth: false,\n smoothConstraint: null\n },\n style: {\n stroke: '#000',\n fill: null\n },\n buildPath: function (ctx, shape) {\n polyHelper.buildPath(ctx, shape, false);\n }\n});\n\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\nvar globalListener = require(\"./globalListener\");\n\nvar AxisPointerView = echarts.extendComponentView({\n type: 'axisPointer',\n render: function (globalAxisPointerModel, ecModel, api) {\n var globalTooltipModel = ecModel.getComponent('tooltip');\n var triggerOn = globalAxisPointerModel.get('triggerOn') || globalTooltipModel && globalTooltipModel.get('triggerOn') || 'mousemove|click'; // Register global listener in AxisPointerView to enable\n // AxisPointerView to be independent to Tooltip.\n\n globalListener.register('axisPointer', api, function (currTrigger, e, dispatchAction) {\n // If 'none', it is not controlled by mouse totally.\n if (triggerOn !== 'none' && (currTrigger === 'leave' || triggerOn.indexOf(currTrigger) >= 0)) {\n dispatchAction({\n type: 'updateAxisPointer',\n currTrigger: currTrigger,\n x: e && e.offsetX,\n y: e && e.offsetY\n });\n }\n });\n },\n\n /**\n * @override\n */\n remove: function (ecModel, api) {\n globalListener.unregister(api.getZr(), 'axisPointer');\n AxisPointerView.superApply(this._model, 'remove', arguments);\n },\n\n /**\n * @override\n */\n dispose: function (ecModel, api) {\n globalListener.unregister('axisPointer', api);\n AxisPointerView.superApply(this._model, 'dispose', arguments);\n }\n});\nvar _default = AxisPointerView;\nmodule.exports = _default;","var Path = require(\"./Path\");\n\n// CompoundPath to improve performance\nvar _default = Path.extend({\n type: 'compound',\n shape: {\n paths: null\n },\n _updatePathDirty: function () {\n var dirtyPath = this.__dirtyPath;\n var paths = this.shape.paths;\n\n for (var i = 0; i < paths.length; i++) {\n // Mark as dirty if any subpath is dirty\n dirtyPath = dirtyPath || paths[i].__dirtyPath;\n }\n\n this.__dirtyPath = dirtyPath;\n this.__dirty = this.__dirty || dirtyPath;\n },\n beforeBrush: function () {\n this._updatePathDirty();\n\n var paths = this.shape.paths || [];\n var scale = this.getGlobalScale(); // Update path scale\n\n for (var i = 0; i < paths.length; i++) {\n if (!paths[i].path) {\n paths[i].createPathProxy();\n }\n\n paths[i].path.setScale(scale[0], scale[1]);\n }\n },\n buildPath: function (ctx, shape) {\n var paths = shape.paths || [];\n\n for (var i = 0; i < paths.length; i++) {\n paths[i].buildPath(ctx, paths[i].shape, true);\n }\n },\n afterBrush: function () {\n var paths = this.shape.paths || [];\n\n for (var i = 0; i < paths.length; i++) {\n paths[i].__dirtyPath = false;\n }\n },\n getBoundingRect: function () {\n this._updatePathDirty();\n\n return Path.prototype.getBoundingRect.call(this);\n }\n});\n\nmodule.exports = _default;","var Path = require(\"zrender/lib/graphic/Path\");\n\nvar vec2 = require(\"zrender/lib/core/vector\");\n\nvar fixClipWithShadow = require(\"zrender/lib/graphic/helper/fixClipWithShadow\");\n\n// Poly path support NaN point\nvar vec2Min = vec2.min;\nvar vec2Max = vec2.max;\nvar scaleAndAdd = vec2.scaleAndAdd;\nvar v2Copy = vec2.copy; // Temporary variable\n\nvar v = [];\nvar cp0 = [];\nvar cp1 = [];\n\nfunction isPointNull(p) {\n return isNaN(p[0]) || isNaN(p[1]);\n}\n\nfunction drawSegment(ctx, points, start, segLen, allLen, dir, smoothMin, smoothMax, smooth, smoothMonotone, connectNulls) {\n var prevIdx = 0;\n var idx = start;\n\n for (var k = 0; k < segLen; k++) {\n var p = points[idx];\n\n if (idx >= allLen || idx < 0) {\n break;\n }\n\n if (isPointNull(p)) {\n if (connectNulls) {\n idx += dir;\n continue;\n }\n\n break;\n }\n\n if (idx === start) {\n ctx[dir > 0 ? 'moveTo' : 'lineTo'](p[0], p[1]);\n v2Copy(cp0, p);\n } else {\n if (smooth > 0) {\n var nextIdx = idx + dir;\n var nextP = points[nextIdx];\n\n if (connectNulls) {\n // Find next point not null\n while (nextP && isPointNull(points[nextIdx])) {\n nextIdx += dir;\n nextP = points[nextIdx];\n }\n }\n\n var ratioNextSeg = 0.5;\n var prevP = points[prevIdx];\n var nextP = points[nextIdx]; // Last point\n\n if (!nextP || isPointNull(nextP)) {\n v2Copy(cp1, p);\n } else {\n // If next data is null in not connect case\n if (isPointNull(nextP) && !connectNulls) {\n nextP = p;\n }\n\n vec2.sub(v, nextP, prevP);\n var lenPrevSeg;\n var lenNextSeg;\n\n if (smoothMonotone === 'x' || smoothMonotone === 'y') {\n var dim = smoothMonotone === 'x' ? 0 : 1;\n lenPrevSeg = Math.abs(p[dim] - prevP[dim]);\n lenNextSeg = Math.abs(p[dim] - nextP[dim]);\n } else {\n lenPrevSeg = vec2.dist(p, prevP);\n lenNextSeg = vec2.dist(p, nextP);\n } // Use ratio of seg length\n\n\n ratioNextSeg = lenNextSeg / (lenNextSeg + lenPrevSeg);\n scaleAndAdd(cp1, p, v, -smooth * (1 - ratioNextSeg));\n } // Smooth constraint\n\n\n vec2Min(cp0, cp0, smoothMax);\n vec2Max(cp0, cp0, smoothMin);\n vec2Min(cp1, cp1, smoothMax);\n vec2Max(cp1, cp1, smoothMin);\n ctx.bezierCurveTo(cp0[0], cp0[1], cp1[0], cp1[1], p[0], p[1]); // cp0 of next segment\n\n scaleAndAdd(cp0, p, v, smooth * ratioNextSeg);\n } else {\n ctx.lineTo(p[0], p[1]);\n }\n }\n\n prevIdx = idx;\n idx += dir;\n }\n\n return k;\n}\n\nfunction getBoundingBox(points, smoothConstraint) {\n var ptMin = [Infinity, Infinity];\n var ptMax = [-Infinity, -Infinity];\n\n if (smoothConstraint) {\n for (var i = 0; i < points.length; i++) {\n var pt = points[i];\n\n if (pt[0] < ptMin[0]) {\n ptMin[0] = pt[0];\n }\n\n if (pt[1] < ptMin[1]) {\n ptMin[1] = pt[1];\n }\n\n if (pt[0] > ptMax[0]) {\n ptMax[0] = pt[0];\n }\n\n if (pt[1] > ptMax[1]) {\n ptMax[1] = pt[1];\n }\n }\n }\n\n return {\n min: smoothConstraint ? ptMin : ptMax,\n max: smoothConstraint ? ptMax : ptMin\n };\n}\n\nvar Polyline = Path.extend({\n type: 'ec-polyline',\n shape: {\n points: [],\n smooth: 0,\n smoothConstraint: true,\n smoothMonotone: null,\n connectNulls: false\n },\n style: {\n fill: null,\n stroke: '#000'\n },\n brush: fixClipWithShadow(Path.prototype.brush),\n buildPath: function (ctx, shape) {\n var points = shape.points;\n var i = 0;\n var len = points.length;\n var result = getBoundingBox(points, shape.smoothConstraint);\n\n if (shape.connectNulls) {\n // Must remove first and last null values avoid draw error in polygon\n for (; len > 0; len--) {\n if (!isPointNull(points[len - 1])) {\n break;\n }\n }\n\n for (; i < len; i++) {\n if (!isPointNull(points[i])) {\n break;\n }\n }\n }\n\n while (i < len) {\n i += drawSegment(ctx, points, i, len, len, 1, result.min, result.max, shape.smooth, shape.smoothMonotone, shape.connectNulls) + 1;\n }\n }\n});\nvar Polygon = Path.extend({\n type: 'ec-polygon',\n shape: {\n points: [],\n // Offset between stacked base points and points\n stackedOnPoints: [],\n smooth: 0,\n stackedOnSmooth: 0,\n smoothConstraint: true,\n smoothMonotone: null,\n connectNulls: false\n },\n brush: fixClipWithShadow(Path.prototype.brush),\n buildPath: function (ctx, shape) {\n var points = shape.points;\n var stackedOnPoints = shape.stackedOnPoints;\n var i = 0;\n var len = points.length;\n var smoothMonotone = shape.smoothMonotone;\n var bbox = getBoundingBox(points, shape.smoothConstraint);\n var stackedOnBBox = getBoundingBox(stackedOnPoints, shape.smoothConstraint);\n\n if (shape.connectNulls) {\n // Must remove first and last null values avoid draw error in polygon\n for (; len > 0; len--) {\n if (!isPointNull(points[len - 1])) {\n break;\n }\n }\n\n for (; i < len; i++) {\n if (!isPointNull(points[i])) {\n break;\n }\n }\n }\n\n while (i < len) {\n var k = drawSegment(ctx, points, i, len, len, 1, bbox.min, bbox.max, shape.smooth, smoothMonotone, shape.connectNulls);\n drawSegment(ctx, stackedOnPoints, i + k - 1, k, len, -1, stackedOnBBox.min, stackedOnBBox.max, shape.stackedOnSmooth, smoothMonotone, shape.connectNulls);\n i += k + 1;\n ctx.closePath();\n }\n }\n});\nexports.Polyline = Polyline;\nexports.Polygon = Polygon;","// Simple LRU cache use doubly linked list\n// @module zrender/core/LRU\n\n/**\n * Simple double linked list. Compared with array, it has O(1) remove operation.\n * @constructor\n */\nvar LinkedList = function () {\n /**\n * @type {module:zrender/core/LRU~Entry}\n */\n this.head = null;\n /**\n * @type {module:zrender/core/LRU~Entry}\n */\n\n this.tail = null;\n this._len = 0;\n};\n\nvar linkedListProto = LinkedList.prototype;\n/**\n * Insert a new value at the tail\n * @param {} val\n * @return {module:zrender/core/LRU~Entry}\n */\n\nlinkedListProto.insert = function (val) {\n var entry = new Entry(val);\n this.insertEntry(entry);\n return entry;\n};\n/**\n * Insert an entry at the tail\n * @param {module:zrender/core/LRU~Entry} entry\n */\n\n\nlinkedListProto.insertEntry = function (entry) {\n if (!this.head) {\n this.head = this.tail = entry;\n } else {\n this.tail.next = entry;\n entry.prev = this.tail;\n entry.next = null;\n this.tail = entry;\n }\n\n this._len++;\n};\n/**\n * Remove entry.\n * @param {module:zrender/core/LRU~Entry} entry\n */\n\n\nlinkedListProto.remove = function (entry) {\n var prev = entry.prev;\n var next = entry.next;\n\n if (prev) {\n prev.next = next;\n } else {\n // Is head\n this.head = next;\n }\n\n if (next) {\n next.prev = prev;\n } else {\n // Is tail\n this.tail = prev;\n }\n\n entry.next = entry.prev = null;\n this._len--;\n};\n/**\n * @return {number}\n */\n\n\nlinkedListProto.len = function () {\n return this._len;\n};\n/**\n * Clear list\n */\n\n\nlinkedListProto.clear = function () {\n this.head = this.tail = null;\n this._len = 0;\n};\n/**\n * @constructor\n * @param {} val\n */\n\n\nvar Entry = function (val) {\n /**\n * @type {}\n */\n this.value = val;\n /**\n * @type {module:zrender/core/LRU~Entry}\n */\n\n this.next;\n /**\n * @type {module:zrender/core/LRU~Entry}\n */\n\n this.prev;\n};\n/**\n * LRU Cache\n * @constructor\n * @alias module:zrender/core/LRU\n */\n\n\nvar LRU = function (maxSize) {\n this._list = new LinkedList();\n this._map = {};\n this._maxSize = maxSize || 10;\n this._lastRemovedEntry = null;\n};\n\nvar LRUProto = LRU.prototype;\n/**\n * @param {string} key\n * @param {} value\n * @return {} Removed value\n */\n\nLRUProto.put = function (key, value) {\n var list = this._list;\n var map = this._map;\n var removed = null;\n\n if (map[key] == null) {\n var len = list.len(); // Reuse last removed entry\n\n var entry = this._lastRemovedEntry;\n\n if (len >= this._maxSize && len > 0) {\n // Remove the least recently used\n var leastUsedEntry = list.head;\n list.remove(leastUsedEntry);\n delete map[leastUsedEntry.key];\n removed = leastUsedEntry.value;\n this._lastRemovedEntry = leastUsedEntry;\n }\n\n if (entry) {\n entry.value = value;\n } else {\n entry = new Entry(value);\n }\n\n entry.key = key;\n list.insertEntry(entry);\n map[key] = entry;\n }\n\n return removed;\n};\n/**\n * @param {string} key\n * @return {}\n */\n\n\nLRUProto.get = function (key) {\n var entry = this._map[key];\n var list = this._list;\n\n if (entry != null) {\n // Put the latest used entry in the tail\n if (entry !== list.tail) {\n list.remove(entry);\n list.insertEntry(entry);\n }\n\n return entry.value;\n }\n};\n/**\n * Clear the cache\n */\n\n\nLRUProto.clear = function () {\n this._list.clear();\n\n this._map = {};\n};\n\nvar _default = LRU;\nmodule.exports = _default;","var guid = require(\"./core/guid\");\n\nvar Eventful = require(\"./mixin/Eventful\");\n\nvar Transformable = require(\"./mixin/Transformable\");\n\nvar Animatable = require(\"./mixin/Animatable\");\n\nvar zrUtil = require(\"./core/util\");\n\n/**\n * @alias module:zrender/Element\n * @constructor\n * @extends {module:zrender/mixin/Animatable}\n * @extends {module:zrender/mixin/Transformable}\n * @extends {module:zrender/mixin/Eventful}\n */\nvar Element = function (opts) {\n // jshint ignore:line\n Transformable.call(this, opts);\n Eventful.call(this, opts);\n Animatable.call(this, opts);\n /**\n * 画布元素ID\n * @type {string}\n */\n\n this.id = opts.id || guid();\n};\n\nElement.prototype = {\n /**\n * 元素类型\n * Element type\n * @type {string}\n */\n type: 'element',\n\n /**\n * 元素名字\n * Element name\n * @type {string}\n */\n name: '',\n\n /**\n * ZRender 实例对象,会在 element 添加到 zrender 实例中后自动赋值\n * ZRender instance will be assigned when element is associated with zrender\n * @name module:/zrender/Element#__zr\n * @type {module:zrender/ZRender}\n */\n __zr: null,\n\n /**\n * 图形是否忽略,为true时忽略图形的绘制以及事件触发\n * If ignore drawing and events of the element object\n * @name module:/zrender/Element#ignore\n * @type {boolean}\n * @default false\n */\n ignore: false,\n\n /**\n * 用于裁剪的路径(shape),所有 Group 内的路径在绘制时都会被这个路径裁剪\n * 该路径会继承被裁减对象的变换\n * @type {module:zrender/graphic/Path}\n * @see http://www.w3.org/TR/2dcontext/#clipping-region\n * @readOnly\n */\n clipPath: null,\n\n /**\n * Drift element\n * @param {number} dx dx on the global space\n * @param {number} dy dy on the global space\n */\n drift: function (dx, dy) {\n switch (this.draggable) {\n case 'horizontal':\n dy = 0;\n break;\n\n case 'vertical':\n dx = 0;\n break;\n }\n\n var m = this.transform;\n\n if (!m) {\n m = this.transform = [1, 0, 0, 1, 0, 0];\n }\n\n m[4] += dx;\n m[5] += dy;\n this.decomposeTransform();\n this.dirty(false);\n },\n\n /**\n * Hook before update\n */\n beforeUpdate: function () {},\n\n /**\n * Hook after update\n */\n afterUpdate: function () {},\n\n /**\n * Update each frame\n */\n update: function () {\n this.updateTransform();\n },\n\n /**\n * @param {Function} cb\n * @param {} context\n */\n traverse: function (cb, context) {},\n\n /**\n * @protected\n */\n attrKV: function (key, value) {\n if (key === 'position' || key === 'scale' || key === 'origin') {\n // Copy the array\n if (value) {\n var target = this[key];\n\n if (!target) {\n target = this[key] = [];\n }\n\n target[0] = value[0];\n target[1] = value[1];\n }\n } else {\n this[key] = value;\n }\n },\n\n /**\n * Hide the element\n */\n hide: function () {\n this.ignore = true;\n this.__zr && this.__zr.refresh();\n },\n\n /**\n * Show the element\n */\n show: function () {\n this.ignore = false;\n this.__zr && this.__zr.refresh();\n },\n\n /**\n * @param {string|Object} key\n * @param {*} value\n */\n attr: function (key, value) {\n if (typeof key === 'string') {\n this.attrKV(key, value);\n } else if (zrUtil.isObject(key)) {\n for (var name in key) {\n if (key.hasOwnProperty(name)) {\n this.attrKV(name, key[name]);\n }\n }\n }\n\n this.dirty(false);\n return this;\n },\n\n /**\n * @param {module:zrender/graphic/Path} clipPath\n */\n setClipPath: function (clipPath) {\n var zr = this.__zr;\n\n if (zr) {\n clipPath.addSelfToZr(zr);\n } // Remove previous clip path\n\n\n if (this.clipPath && this.clipPath !== clipPath) {\n this.removeClipPath();\n }\n\n this.clipPath = clipPath;\n clipPath.__zr = zr;\n clipPath.__clipTarget = this;\n this.dirty(false);\n },\n\n /**\n */\n removeClipPath: function () {\n var clipPath = this.clipPath;\n\n if (clipPath) {\n if (clipPath.__zr) {\n clipPath.removeSelfFromZr(clipPath.__zr);\n }\n\n clipPath.__zr = null;\n clipPath.__clipTarget = null;\n this.clipPath = null;\n this.dirty(false);\n }\n },\n\n /**\n * Add self from zrender instance.\n * Not recursively because it will be invoked when element added to storage.\n * @param {module:zrender/ZRender} zr\n */\n addSelfToZr: function (zr) {\n this.__zr = zr; // 添加动画\n\n var animators = this.animators;\n\n if (animators) {\n for (var i = 0; i < animators.length; i++) {\n zr.animation.addAnimator(animators[i]);\n }\n }\n\n if (this.clipPath) {\n this.clipPath.addSelfToZr(zr);\n }\n },\n\n /**\n * Remove self from zrender instance.\n * Not recursively because it will be invoked when element added to storage.\n * @param {module:zrender/ZRender} zr\n */\n removeSelfFromZr: function (zr) {\n this.__zr = null; // 移除动画\n\n var animators = this.animators;\n\n if (animators) {\n for (var i = 0; i < animators.length; i++) {\n zr.animation.removeAnimator(animators[i]);\n }\n }\n\n if (this.clipPath) {\n this.clipPath.removeSelfFromZr(zr);\n }\n }\n};\nzrUtil.mixin(Element, Animatable);\nzrUtil.mixin(Element, Transformable);\nzrUtil.mixin(Element, Eventful);\nvar _default = Element;\nmodule.exports = _default;","var BaseBarSeries = require(\"./BaseBarSeries\");\n\nvar PictorialBarSeries = BaseBarSeries.extend({\n type: 'series.pictorialBar',\n dependencies: ['grid'],\n defaultOption: {\n symbol: 'circle',\n // Customized bar shape\n symbolSize: null,\n // Can be ['100%', '100%'], null means auto.\n symbolRotate: null,\n symbolPosition: null,\n // 'start' or 'end' or 'center', null means auto.\n symbolOffset: null,\n symbolMargin: null,\n // start margin and end margin. Can be a number or a percent string.\n // Auto margin by defualt.\n symbolRepeat: false,\n // false/null/undefined, means no repeat.\n // Can be true, means auto calculate repeat times and cut by data.\n // Can be a number, specifies repeat times, and do not cut by data.\n // Can be 'fixed', means auto calculate repeat times but do not cut by data.\n symbolRepeatDirection: 'end',\n // 'end' means from 'start' to 'end'.\n symbolClip: false,\n symbolBoundingData: null,\n // Can be 60 or -40 or [-40, 60]\n symbolPatternSize: 400,\n // 400 * 400 px\n barGap: '-100%',\n // In most case, overlap is needed.\n // z can be set in data item, which is z2 actually.\n // Disable progressive\n progressive: 0,\n hoverAnimation: false // Open only when needed.\n\n },\n getInitialData: function (option) {\n // Disable stack.\n option.stack = null;\n return PictorialBarSeries.superApply(this, 'getInitialData', arguments);\n }\n});\nvar _default = PictorialBarSeries;\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\nvar actionInfo = {\n type: 'selectDataRange',\n event: 'dataRangeSelected',\n // FIXME use updateView appears wrong\n update: 'update'\n};\necharts.registerAction(actionInfo, function (payload, ecModel) {\n ecModel.eachComponent({\n mainType: 'visualMap',\n query: payload\n }, function (model) {\n model.setSelected(payload.selected);\n });\n});","var echarts = require(\"../../echarts\");\n\nvar _roamHelper = require(\"../../action/roamHelper\");\n\nvar updateCenterAndZoom = _roamHelper.updateCenterAndZoom;\nvar actionInfo = {\n type: 'graphRoam',\n event: 'graphRoam',\n update: 'none'\n};\n/**\n * @payload\n * @property {string} name Series name\n * @property {number} [dx]\n * @property {number} [dy]\n * @property {number} [zoom]\n * @property {number} [originX]\n * @property {number} [originY]\n */\n\necharts.registerAction(actionInfo, function (payload, ecModel) {\n ecModel.eachComponent({\n mainType: 'series',\n query: payload\n }, function (seriesModel) {\n var coordSys = seriesModel.coordinateSystem;\n var res = updateCenterAndZoom(coordSys, payload);\n seriesModel.setCenter && seriesModel.setCenter(res.center);\n seriesModel.setZoom && seriesModel.setZoom(res.zoom);\n });\n});\n/**\n * @payload\n * @property {number} [seriesIndex]\n * @property {string} [seriesId]\n * @property {string} [seriesName]\n * @property {number} [dataIndex]\n */\n\necharts.registerAction({\n type: 'focusNodeAdjacency',\n event: 'focusNodeAdjacency',\n update: 'series.graph:focusNodeAdjacency'\n}, function () {});\n/**\n * @payload\n * @property {number} [seriesIndex]\n * @property {string} [seriesId]\n * @property {string} [seriesName]\n */\n\necharts.registerAction({\n type: 'unfocusNodeAdjacency',\n event: 'unfocusNodeAdjacency',\n update: 'series.graph:unfocusNodeAdjacency'\n}, function () {});","/**\n * @param {module:echarts/coord/View} view\n * @param {Object} payload\n * @param {Object} [zoomLimit]\n */\nfunction updateCenterAndZoom(view, payload, zoomLimit) {\n var previousZoom = view.getZoom();\n var center = view.getCenter();\n var zoom = payload.zoom;\n var point = view.dataToPoint(center);\n\n if (payload.dx != null && payload.dy != null) {\n point[0] -= payload.dx;\n point[1] -= payload.dy;\n var center = view.pointToData(point);\n view.setCenter(center);\n }\n\n if (zoom != null) {\n if (zoomLimit) {\n var zoomMin = zoomLimit.min || 0;\n var zoomMax = zoomLimit.max || Infinity;\n zoom = Math.max(Math.min(previousZoom * zoom, zoomMax), zoomMin) / previousZoom;\n } // Zoom on given point(originX, originY)\n\n\n view.scale[0] *= zoom;\n view.scale[1] *= zoom;\n var position = view.position;\n var fixX = (payload.originX - position[0]) * (zoom - 1);\n var fixY = (payload.originY - position[1]) * (zoom - 1);\n position[0] -= fixX;\n position[1] -= fixY;\n view.updateTransform(); // Get the new center\n\n var center = view.pointToData(point);\n view.setCenter(center);\n view.setZoom(zoom * previousZoom);\n }\n\n return {\n center: view.getCenter(),\n zoom: view.getZoom()\n };\n}\n\nexports.updateCenterAndZoom = updateCenterAndZoom;","var PathProxy = require(\"../core/PathProxy\");\n\nvar line = require(\"./line\");\n\nvar cubic = require(\"./cubic\");\n\nvar quadratic = require(\"./quadratic\");\n\nvar arc = require(\"./arc\");\n\nvar _util = require(\"./util\");\n\nvar normalizeRadian = _util.normalizeRadian;\n\nvar curve = require(\"../core/curve\");\n\nvar windingLine = require(\"./windingLine\");\n\nvar CMD = PathProxy.CMD;\nvar PI2 = Math.PI * 2;\nvar EPSILON = 1e-4;\n\nfunction isAroundEqual(a, b) {\n return Math.abs(a - b) < EPSILON;\n} // 临时数组\n\n\nvar roots = [-1, -1, -1];\nvar extrema = [-1, -1];\n\nfunction swapExtrema() {\n var tmp = extrema[0];\n extrema[0] = extrema[1];\n extrema[1] = tmp;\n}\n\nfunction windingCubic(x0, y0, x1, y1, x2, y2, x3, y3, x, y) {\n // Quick reject\n if (y > y0 && y > y1 && y > y2 && y > y3 || y < y0 && y < y1 && y < y2 && y < y3) {\n return 0;\n }\n\n var nRoots = curve.cubicRootAt(y0, y1, y2, y3, y, roots);\n\n if (nRoots === 0) {\n return 0;\n } else {\n var w = 0;\n var nExtrema = -1;\n var y0_, y1_;\n\n for (var i = 0; i < nRoots; i++) {\n var t = roots[i]; // Avoid winding error when intersection point is the connect point of two line of polygon\n\n var unit = t === 0 || t === 1 ? 0.5 : 1;\n var x_ = curve.cubicAt(x0, x1, x2, x3, t);\n\n if (x_ < x) {\n // Quick reject\n continue;\n }\n\n if (nExtrema < 0) {\n nExtrema = curve.cubicExtrema(y0, y1, y2, y3, extrema);\n\n if (extrema[1] < extrema[0] && nExtrema > 1) {\n swapExtrema();\n }\n\n y0_ = curve.cubicAt(y0, y1, y2, y3, extrema[0]);\n\n if (nExtrema > 1) {\n y1_ = curve.cubicAt(y0, y1, y2, y3, extrema[1]);\n }\n }\n\n if (nExtrema == 2) {\n // 分成三段单调函数\n if (t < extrema[0]) {\n w += y0_ < y0 ? unit : -unit;\n } else if (t < extrema[1]) {\n w += y1_ < y0_ ? unit : -unit;\n } else {\n w += y3 < y1_ ? unit : -unit;\n }\n } else {\n // 分成两段单调函数\n if (t < extrema[0]) {\n w += y0_ < y0 ? unit : -unit;\n } else {\n w += y3 < y0_ ? unit : -unit;\n }\n }\n }\n\n return w;\n }\n}\n\nfunction windingQuadratic(x0, y0, x1, y1, x2, y2, x, y) {\n // Quick reject\n if (y > y0 && y > y1 && y > y2 || y < y0 && y < y1 && y < y2) {\n return 0;\n }\n\n var nRoots = curve.quadraticRootAt(y0, y1, y2, y, roots);\n\n if (nRoots === 0) {\n return 0;\n } else {\n var t = curve.quadraticExtremum(y0, y1, y2);\n\n if (t >= 0 && t <= 1) {\n var w = 0;\n var y_ = curve.quadraticAt(y0, y1, y2, t);\n\n for (var i = 0; i < nRoots; i++) {\n // Remove one endpoint.\n var unit = roots[i] === 0 || roots[i] === 1 ? 0.5 : 1;\n var x_ = curve.quadraticAt(x0, x1, x2, roots[i]);\n\n if (x_ < x) {\n // Quick reject\n continue;\n }\n\n if (roots[i] < t) {\n w += y_ < y0 ? unit : -unit;\n } else {\n w += y2 < y_ ? unit : -unit;\n }\n }\n\n return w;\n } else {\n // Remove one endpoint.\n var unit = roots[0] === 0 || roots[0] === 1 ? 0.5 : 1;\n var x_ = curve.quadraticAt(x0, x1, x2, roots[0]);\n\n if (x_ < x) {\n // Quick reject\n return 0;\n }\n\n return y2 < y0 ? unit : -unit;\n }\n }\n} // TODO\n// Arc 旋转\n\n\nfunction windingArc(cx, cy, r, startAngle, endAngle, anticlockwise, x, y) {\n y -= cy;\n\n if (y > r || y < -r) {\n return 0;\n }\n\n var tmp = Math.sqrt(r * r - y * y);\n roots[0] = -tmp;\n roots[1] = tmp;\n var diff = Math.abs(startAngle - endAngle);\n\n if (diff < 1e-4) {\n return 0;\n }\n\n if (diff % PI2 < 1e-4) {\n // Is a circle\n startAngle = 0;\n endAngle = PI2;\n var dir = anticlockwise ? 1 : -1;\n\n if (x >= roots[0] + cx && x <= roots[1] + cx) {\n return dir;\n } else {\n return 0;\n }\n }\n\n if (anticlockwise) {\n var tmp = startAngle;\n startAngle = normalizeRadian(endAngle);\n endAngle = normalizeRadian(tmp);\n } else {\n startAngle = normalizeRadian(startAngle);\n endAngle = normalizeRadian(endAngle);\n }\n\n if (startAngle > endAngle) {\n endAngle += PI2;\n }\n\n var w = 0;\n\n for (var i = 0; i < 2; i++) {\n var x_ = roots[i];\n\n if (x_ + cx > x) {\n var angle = Math.atan2(y, x_);\n var dir = anticlockwise ? 1 : -1;\n\n if (angle < 0) {\n angle = PI2 + angle;\n }\n\n if (angle >= startAngle && angle <= endAngle || angle + PI2 >= startAngle && angle + PI2 <= endAngle) {\n if (angle > Math.PI / 2 && angle < Math.PI * 1.5) {\n dir = -dir;\n }\n\n w += dir;\n }\n }\n }\n\n return w;\n}\n\nfunction containPath(data, lineWidth, isStroke, x, y) {\n var w = 0;\n var xi = 0;\n var yi = 0;\n var x0 = 0;\n var y0 = 0;\n\n for (var i = 0; i < data.length;) {\n var cmd = data[i++]; // Begin a new subpath\n\n if (cmd === CMD.M && i > 1) {\n // Close previous subpath\n if (!isStroke) {\n w += windingLine(xi, yi, x0, y0, x, y);\n } // 如果被任何一个 subpath 包含\n // if (w !== 0) {\n // return true;\n // }\n\n }\n\n if (i == 1) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n //\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n xi = data[i];\n yi = data[i + 1];\n x0 = xi;\n y0 = yi;\n }\n\n switch (cmd) {\n case CMD.M:\n // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n // 在 closePath 的时候使用\n x0 = data[i++];\n y0 = data[i++];\n xi = x0;\n yi = y0;\n break;\n\n case CMD.L:\n if (isStroke) {\n if (line.containStroke(xi, yi, data[i], data[i + 1], lineWidth, x, y)) {\n return true;\n }\n } else {\n // NOTE 在第一个命令为 L, C, Q 的时候会计算出 NaN\n w += windingLine(xi, yi, data[i], data[i + 1], x, y) || 0;\n }\n\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.C:\n if (isStroke) {\n if (cubic.containStroke(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], lineWidth, x, y)) {\n return true;\n }\n } else {\n w += windingCubic(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], x, y) || 0;\n }\n\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.Q:\n if (isStroke) {\n if (quadratic.containStroke(xi, yi, data[i++], data[i++], data[i], data[i + 1], lineWidth, x, y)) {\n return true;\n }\n } else {\n w += windingQuadratic(xi, yi, data[i++], data[i++], data[i], data[i + 1], x, y) || 0;\n }\n\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.A:\n // TODO Arc 判断的开销比较大\n var cx = data[i++];\n var cy = data[i++];\n var rx = data[i++];\n var ry = data[i++];\n var theta = data[i++];\n var dTheta = data[i++]; // TODO Arc 旋转\n\n var psi = data[i++];\n var anticlockwise = 1 - data[i++];\n var x1 = Math.cos(theta) * rx + cx;\n var y1 = Math.sin(theta) * ry + cy; // 不是直接使用 arc 命令\n\n if (i > 1) {\n w += windingLine(xi, yi, x1, y1, x, y);\n } else {\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n } // zr 使用scale来模拟椭圆, 这里也对x做一定的缩放\n\n\n var _x = (x - cx) * ry / rx + cx;\n\n if (isStroke) {\n if (arc.containStroke(cx, cy, ry, theta, theta + dTheta, anticlockwise, lineWidth, _x, y)) {\n return true;\n }\n } else {\n w += windingArc(cx, cy, ry, theta, theta + dTheta, anticlockwise, _x, y);\n }\n\n xi = Math.cos(theta + dTheta) * rx + cx;\n yi = Math.sin(theta + dTheta) * ry + cy;\n break;\n\n case CMD.R:\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n var width = data[i++];\n var height = data[i++];\n var x1 = x0 + width;\n var y1 = y0 + height;\n\n if (isStroke) {\n if (line.containStroke(x0, y0, x1, y0, lineWidth, x, y) || line.containStroke(x1, y0, x1, y1, lineWidth, x, y) || line.containStroke(x1, y1, x0, y1, lineWidth, x, y) || line.containStroke(x0, y1, x0, y0, lineWidth, x, y)) {\n return true;\n }\n } else {\n // FIXME Clockwise ?\n w += windingLine(x1, y0, x1, y1, x, y);\n w += windingLine(x0, y1, x0, y0, x, y);\n }\n\n break;\n\n case CMD.Z:\n if (isStroke) {\n if (line.containStroke(xi, yi, x0, y0, lineWidth, x, y)) {\n return true;\n }\n } else {\n // Close a subpath\n w += windingLine(xi, yi, x0, y0, x, y); // 如果被任何一个 subpath 包含\n // FIXME subpaths may overlap\n // if (w !== 0) {\n // return true;\n // }\n }\n\n xi = x0;\n yi = y0;\n break;\n }\n }\n\n if (!isStroke && !isAroundEqual(yi, y0)) {\n w += windingLine(xi, yi, x0, y0, x, y) || 0;\n }\n\n return w !== 0;\n}\n\nfunction contain(pathData, x, y) {\n return containPath(pathData, 0, false, x, y);\n}\n\nfunction containStroke(pathData, lineWidth, x, y) {\n return containPath(pathData, lineWidth, true, x, y);\n}\n\nexports.contain = contain;\nexports.containStroke = containStroke;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar matrix = require(\"zrender/lib/core/matrix\");\n\nvar layoutUtil = require(\"../../util/layout\");\n\nvar axisHelper = require(\"../../coord/axisHelper\");\n\nvar ParallelAxis = require(\"./ParallelAxis\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar sliderMove = require(\"../../component/helper/sliderMove\");\n\n/**\n * Parallel Coordinates\n * \n */\nvar each = zrUtil.each;\nvar mathMin = Math.min;\nvar mathMax = Math.max;\nvar mathFloor = Math.floor;\nvar mathCeil = Math.ceil;\nvar round = numberUtil.round;\nvar PI = Math.PI;\n\nfunction Parallel(parallelModel, ecModel, api) {\n /**\n * key: dimension\n * @type {Object.}\n * @private\n */\n this._axesMap = zrUtil.createHashMap();\n /**\n * key: dimension\n * value: {position: [], rotation, }\n * @type {Object.}\n * @private\n */\n\n this._axesLayout = {};\n /**\n * Always follow axis order.\n * @type {Array.}\n * @readOnly\n */\n\n this.dimensions = parallelModel.dimensions;\n /**\n * @type {module:zrender/core/BoundingRect}\n */\n\n this._rect;\n /**\n * @type {module:echarts/coord/parallel/ParallelModel}\n */\n\n this._model = parallelModel;\n\n this._init(parallelModel, ecModel, api);\n}\n\nParallel.prototype = {\n type: 'parallel',\n constructor: Parallel,\n\n /**\n * Initialize cartesian coordinate systems\n * @private\n */\n _init: function (parallelModel, ecModel, api) {\n var dimensions = parallelModel.dimensions;\n var parallelAxisIndex = parallelModel.parallelAxisIndex;\n each(dimensions, function (dim, idx) {\n var axisIndex = parallelAxisIndex[idx];\n var axisModel = ecModel.getComponent('parallelAxis', axisIndex);\n\n var axis = this._axesMap.set(dim, new ParallelAxis(dim, axisHelper.createScaleByModel(axisModel), [0, 0], axisModel.get('type'), axisIndex));\n\n var isCategory = axis.type === 'category';\n axis.onBand = isCategory && axisModel.get('boundaryGap');\n axis.inverse = axisModel.get('inverse'); // Injection\n\n axisModel.axis = axis;\n axis.model = axisModel;\n axis.coordinateSystem = axisModel.coordinateSystem = this;\n }, this);\n },\n\n /**\n * Update axis scale after data processed\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n */\n update: function (ecModel, api) {\n this._updateAxesFromSeries(this._model, ecModel);\n },\n\n /**\n * @override\n */\n containPoint: function (point) {\n var layoutInfo = this._makeLayoutInfo();\n\n var axisBase = layoutInfo.axisBase;\n var layoutBase = layoutInfo.layoutBase;\n var pixelDimIndex = layoutInfo.pixelDimIndex;\n var pAxis = point[1 - pixelDimIndex];\n var pLayout = point[pixelDimIndex];\n return pAxis >= axisBase && pAxis <= axisBase + layoutInfo.axisLength && pLayout >= layoutBase && pLayout <= layoutBase + layoutInfo.layoutLength;\n },\n getModel: function () {\n return this._model;\n },\n\n /**\n * Update properties from series\n * @private\n */\n _updateAxesFromSeries: function (parallelModel, ecModel) {\n ecModel.eachSeries(function (seriesModel) {\n if (!parallelModel.contains(seriesModel, ecModel)) {\n return;\n }\n\n var data = seriesModel.getData();\n each(this.dimensions, function (dim) {\n var axis = this._axesMap.get(dim);\n\n axis.scale.unionExtentFromData(data, dim);\n axisHelper.niceScaleExtent(axis.scale, axis.model);\n }, this);\n }, this);\n },\n\n /**\n * Resize the parallel coordinate system.\n * @param {module:echarts/coord/parallel/ParallelModel} parallelModel\n * @param {module:echarts/ExtensionAPI} api\n */\n resize: function (parallelModel, api) {\n this._rect = layoutUtil.getLayoutRect(parallelModel.getBoxLayoutParams(), {\n width: api.getWidth(),\n height: api.getHeight()\n });\n\n this._layoutAxes();\n },\n\n /**\n * @return {module:zrender/core/BoundingRect}\n */\n getRect: function () {\n return this._rect;\n },\n\n /**\n * @private\n */\n _makeLayoutInfo: function () {\n var parallelModel = this._model;\n var rect = this._rect;\n var xy = ['x', 'y'];\n var wh = ['width', 'height'];\n var layout = parallelModel.get('layout');\n var pixelDimIndex = layout === 'horizontal' ? 0 : 1;\n var layoutLength = rect[wh[pixelDimIndex]];\n var layoutExtent = [0, layoutLength];\n var axisCount = this.dimensions.length;\n var axisExpandWidth = restrict(parallelModel.get('axisExpandWidth'), layoutExtent);\n var axisExpandCount = restrict(parallelModel.get('axisExpandCount') || 0, [0, axisCount]);\n var axisExpandable = parallelModel.get('axisExpandable') && axisCount > 3 && axisCount > axisExpandCount && axisExpandCount > 1 && axisExpandWidth > 0 && layoutLength > 0; // `axisExpandWindow` is According to the coordinates of [0, axisExpandLength],\n // for sake of consider the case that axisCollapseWidth is 0 (when screen is narrow),\n // where collapsed axes should be overlapped.\n\n var axisExpandWindow = parallelModel.get('axisExpandWindow');\n var winSize;\n\n if (!axisExpandWindow) {\n winSize = restrict(axisExpandWidth * (axisExpandCount - 1), layoutExtent);\n var axisExpandCenter = parallelModel.get('axisExpandCenter') || mathFloor(axisCount / 2);\n axisExpandWindow = [axisExpandWidth * axisExpandCenter - winSize / 2];\n axisExpandWindow[1] = axisExpandWindow[0] + winSize;\n } else {\n winSize = restrict(axisExpandWindow[1] - axisExpandWindow[0], layoutExtent);\n axisExpandWindow[1] = axisExpandWindow[0] + winSize;\n }\n\n var axisCollapseWidth = (layoutLength - winSize) / (axisCount - axisExpandCount); // Avoid axisCollapseWidth is too small.\n\n axisCollapseWidth < 3 && (axisCollapseWidth = 0); // Find the first and last indices > ewin[0] and < ewin[1].\n\n var winInnerIndices = [mathFloor(round(axisExpandWindow[0] / axisExpandWidth, 1)) + 1, mathCeil(round(axisExpandWindow[1] / axisExpandWidth, 1)) - 1]; // Pos in ec coordinates.\n\n var axisExpandWindow0Pos = axisCollapseWidth / axisExpandWidth * axisExpandWindow[0];\n return {\n layout: layout,\n pixelDimIndex: pixelDimIndex,\n layoutBase: rect[xy[pixelDimIndex]],\n layoutLength: layoutLength,\n axisBase: rect[xy[1 - pixelDimIndex]],\n axisLength: rect[wh[1 - pixelDimIndex]],\n axisExpandable: axisExpandable,\n axisExpandWidth: axisExpandWidth,\n axisCollapseWidth: axisCollapseWidth,\n axisExpandWindow: axisExpandWindow,\n axisCount: axisCount,\n winInnerIndices: winInnerIndices,\n axisExpandWindow0Pos: axisExpandWindow0Pos\n };\n },\n\n /**\n * @private\n */\n _layoutAxes: function () {\n var rect = this._rect;\n var axes = this._axesMap;\n var dimensions = this.dimensions;\n\n var layoutInfo = this._makeLayoutInfo();\n\n var layout = layoutInfo.layout;\n axes.each(function (axis) {\n var axisExtent = [0, layoutInfo.axisLength];\n var idx = axis.inverse ? 1 : 0;\n axis.setExtent(axisExtent[idx], axisExtent[1 - idx]);\n });\n each(dimensions, function (dim, idx) {\n var posInfo = (layoutInfo.axisExpandable ? layoutAxisWithExpand : layoutAxisWithoutExpand)(idx, layoutInfo);\n var positionTable = {\n horizontal: {\n x: posInfo.position,\n y: layoutInfo.axisLength\n },\n vertical: {\n x: 0,\n y: posInfo.position\n }\n };\n var rotationTable = {\n horizontal: PI / 2,\n vertical: 0\n };\n var position = [positionTable[layout].x + rect.x, positionTable[layout].y + rect.y];\n var rotation = rotationTable[layout];\n var transform = matrix.create();\n matrix.rotate(transform, transform, rotation);\n matrix.translate(transform, transform, position); // TODO\n // tick等排布信息。\n // TODO\n // 根据axis order 更新 dimensions顺序。\n\n this._axesLayout[dim] = {\n position: position,\n rotation: rotation,\n transform: transform,\n axisNameAvailableWidth: posInfo.axisNameAvailableWidth,\n axisLabelShow: posInfo.axisLabelShow,\n nameTruncateMaxWidth: posInfo.nameTruncateMaxWidth,\n tickDirection: 1,\n labelDirection: 1,\n labelInterval: axes.get(dim).getLabelInterval()\n };\n }, this);\n },\n\n /**\n * Get axis by dim.\n * @param {string} dim\n * @return {module:echarts/coord/parallel/ParallelAxis} [description]\n */\n getAxis: function (dim) {\n return this._axesMap.get(dim);\n },\n\n /**\n * Convert a dim value of a single item of series data to Point.\n * @param {*} value\n * @param {string} dim\n * @return {Array}\n */\n dataToPoint: function (value, dim) {\n return this.axisCoordToPoint(this._axesMap.get(dim).dataToCoord(value), dim);\n },\n\n /**\n * Travel data for one time, get activeState of each data item.\n * @param {module:echarts/data/List} data\n * @param {Functio} cb param: {string} activeState 'active' or 'inactive' or 'normal'\n * {number} dataIndex\n * @param {Object} context\n */\n eachActiveState: function (data, callback, context) {\n var dimensions = this.dimensions;\n var axesMap = this._axesMap;\n var hasActiveSet = this.hasAxisBrushed();\n\n for (var i = 0, len = data.count(); i < len; i++) {\n var values = data.getValues(dimensions, i);\n var activeState;\n\n if (!hasActiveSet) {\n activeState = 'normal';\n } else {\n activeState = 'active';\n\n for (var j = 0, lenj = dimensions.length; j < lenj; j++) {\n var dimName = dimensions[j];\n var state = axesMap.get(dimName).model.getActiveState(values[j], j);\n\n if (state === 'inactive') {\n activeState = 'inactive';\n break;\n }\n }\n }\n\n callback.call(context, activeState, i);\n }\n },\n\n /**\n * Whether has any activeSet.\n * @return {boolean}\n */\n hasAxisBrushed: function () {\n var dimensions = this.dimensions;\n var axesMap = this._axesMap;\n var hasActiveSet = false;\n\n for (var j = 0, lenj = dimensions.length; j < lenj; j++) {\n if (axesMap.get(dimensions[j]).model.getActiveState() !== 'normal') {\n hasActiveSet = true;\n }\n }\n\n return hasActiveSet;\n },\n\n /**\n * Convert coords of each axis to Point.\n * Return point. For example: [10, 20]\n * @param {Array.} coords\n * @param {string} dim\n * @return {Array.}\n */\n axisCoordToPoint: function (coord, dim) {\n var axisLayout = this._axesLayout[dim];\n return graphic.applyTransform([coord, 0], axisLayout.transform);\n },\n\n /**\n * Get axis layout.\n */\n getAxisLayout: function (dim) {\n return zrUtil.clone(this._axesLayout[dim]);\n },\n\n /**\n * @param {Array.} point\n * @return {Object} {axisExpandWindow, delta, behavior: 'jump' | 'slide' | 'none'}.\n */\n getSlidedAxisExpandWindow: function (point) {\n var layoutInfo = this._makeLayoutInfo();\n\n var pixelDimIndex = layoutInfo.pixelDimIndex;\n var axisExpandWindow = layoutInfo.axisExpandWindow.slice();\n var winSize = axisExpandWindow[1] - axisExpandWindow[0];\n var extent = [0, layoutInfo.axisExpandWidth * (layoutInfo.axisCount - 1)]; // Out of the area of coordinate system.\n\n if (!this.containPoint(point)) {\n return {\n behavior: 'none',\n axisExpandWindow: axisExpandWindow\n };\n } // Conver the point from global to expand coordinates.\n\n\n var pointCoord = point[pixelDimIndex] - layoutInfo.layoutBase - layoutInfo.axisExpandWindow0Pos; // For dragging operation convenience, the window should not be\n // slided when mouse is the center area of the window.\n\n var delta;\n var behavior = 'slide';\n var axisCollapseWidth = layoutInfo.axisCollapseWidth;\n\n var triggerArea = this._model.get('axisExpandSlideTriggerArea'); // But consider touch device, jump is necessary.\n\n\n var useJump = triggerArea[0] != null;\n\n if (axisCollapseWidth) {\n if (useJump && axisCollapseWidth && pointCoord < winSize * triggerArea[0]) {\n behavior = 'jump';\n delta = pointCoord - winSize * triggerArea[2];\n } else if (useJump && axisCollapseWidth && pointCoord > winSize * (1 - triggerArea[0])) {\n behavior = 'jump';\n delta = pointCoord - winSize * (1 - triggerArea[2]);\n } else {\n (delta = pointCoord - winSize * triggerArea[1]) >= 0 && (delta = pointCoord - winSize * (1 - triggerArea[1])) <= 0 && (delta = 0);\n }\n\n delta *= layoutInfo.axisExpandWidth / axisCollapseWidth;\n delta ? sliderMove(delta, axisExpandWindow, extent, 'all') // Avoid nonsense triger on mousemove.\n : behavior = 'none';\n } // When screen is too narrow, make it visible and slidable, although it is hard to interact.\n else {\n var winSize = axisExpandWindow[1] - axisExpandWindow[0];\n var pos = extent[1] * pointCoord / winSize;\n axisExpandWindow = [mathMax(0, pos - winSize / 2)];\n axisExpandWindow[1] = mathMin(extent[1], axisExpandWindow[0] + winSize);\n axisExpandWindow[0] = axisExpandWindow[1] - winSize;\n }\n\n return {\n axisExpandWindow: axisExpandWindow,\n behavior: behavior\n };\n }\n};\n\nfunction restrict(len, extent) {\n return mathMin(mathMax(len, extent[0]), extent[1]);\n}\n\nfunction layoutAxisWithoutExpand(axisIndex, layoutInfo) {\n var step = layoutInfo.layoutLength / (layoutInfo.axisCount - 1);\n return {\n position: step * axisIndex,\n axisNameAvailableWidth: step,\n axisLabelShow: true\n };\n}\n\nfunction layoutAxisWithExpand(axisIndex, layoutInfo) {\n var layoutLength = layoutInfo.layoutLength;\n var axisExpandWidth = layoutInfo.axisExpandWidth;\n var axisCount = layoutInfo.axisCount;\n var axisCollapseWidth = layoutInfo.axisCollapseWidth;\n var winInnerIndices = layoutInfo.winInnerIndices;\n var position;\n var axisNameAvailableWidth = axisCollapseWidth;\n var axisLabelShow = false;\n var nameTruncateMaxWidth;\n\n if (axisIndex < winInnerIndices[0]) {\n position = axisIndex * axisCollapseWidth;\n nameTruncateMaxWidth = axisCollapseWidth;\n } else if (axisIndex <= winInnerIndices[1]) {\n position = layoutInfo.axisExpandWindow0Pos + axisIndex * axisExpandWidth - layoutInfo.axisExpandWindow[0];\n axisNameAvailableWidth = axisExpandWidth;\n axisLabelShow = true;\n } else {\n position = layoutLength - (axisCount - 1 - axisIndex) * axisCollapseWidth;\n nameTruncateMaxWidth = axisCollapseWidth;\n }\n\n return {\n position: position,\n axisNameAvailableWidth: axisNameAvailableWidth,\n axisLabelShow: axisLabelShow,\n nameTruncateMaxWidth: nameTruncateMaxWidth\n };\n}\n\nvar _default = Parallel;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar ComponentModel = require(\"../../model/Component\");\n\nvar axisModelCreator = require(\"../axisModelCreator\");\n\nvar axisModelCommonMixin = require(\"../axisModelCommonMixin\");\n\nvar PolarAxisModel = ComponentModel.extend({\n type: 'polarAxis',\n\n /**\n * @type {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis}\n */\n axis: null,\n\n /**\n * @override\n */\n getCoordSysModel: function () {\n return this.ecModel.queryComponents({\n mainType: 'polar',\n index: this.option.polarIndex,\n id: this.option.polarId\n })[0];\n }\n});\nzrUtil.merge(PolarAxisModel.prototype, axisModelCommonMixin);\nvar polarAxisDefaultExtendedOption = {\n angle: {\n // polarIndex: 0,\n // polarId: '',\n startAngle: 90,\n clockwise: true,\n splitNumber: 12,\n axisLabel: {\n rotate: false\n }\n },\n radius: {\n // polarIndex: 0,\n // polarId: '',\n splitNumber: 5\n }\n};\n\nfunction getAxisType(axisDim, option) {\n // Default axis with data is category axis\n return option.type || (option.data ? 'category' : 'value');\n}\n\naxisModelCreator('angle', PolarAxisModel, getAxisType, polarAxisDefaultExtendedOption.angle);\naxisModelCreator('radius', PolarAxisModel, getAxisType, polarAxisDefaultExtendedOption.radius);","var Path = require(\"../Path\");\n\n/**\n * 圆形\n * @module zrender/shape/Circle\n */\nvar _default = Path.extend({\n type: 'circle',\n shape: {\n cx: 0,\n cy: 0,\n r: 0\n },\n buildPath: function (ctx, shape, inBundle) {\n // Better stroking in ShapeBundle\n // Always do it may have performence issue ( fill may be 2x more cost)\n if (inBundle) {\n ctx.moveTo(shape.cx + shape.r, shape.cy);\n } // else {\n // if (ctx.allocate && !ctx.data.length) {\n // ctx.allocate(ctx.CMD_MEM_SIZE.A);\n // }\n // }\n // Better stroking in ShapeBundle\n // ctx.moveTo(shape.cx + shape.r, shape.cy);\n\n\n ctx.arc(shape.cx, shape.cy, shape.r, 0, Math.PI * 2, true);\n }\n});\n\nmodule.exports = _default;","var echarts = require(\"../echarts\");\n\nrequire(\"./treemap/TreemapSeries\");\n\nrequire(\"./treemap/TreemapView\");\n\nrequire(\"./treemap/treemapAction\");\n\nvar treemapVisual = require(\"./treemap/treemapVisual\");\n\nvar treemapLayout = require(\"./treemap/treemapLayout\");\n\necharts.registerVisual(treemapVisual);\necharts.registerLayout(treemapLayout);","var echarts = require(\"../echarts\");\n\nrequire(\"./marker/MarkPointModel\");\n\nrequire(\"./marker/MarkPointView\");\n\n// HINT Markpoint can't be used too much\necharts.registerPreprocessor(function (opt) {\n // Make sure markPoint component is enabled\n opt.markPoint = opt.markPoint || {};\n});","module.exports = __webpack_public_path__ + \"img/About_item_3.cd5193a7.jpg\";","var echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar textContain = require(\"zrender/lib/contain/text\");\n\nvar featureManager = require(\"./featureManager\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar Model = require(\"../../model/Model\");\n\nvar DataDiffer = require(\"../../data/DataDiffer\");\n\nvar listComponentHelper = require(\"../helper/listComponent\");\n\nvar _default = echarts.extendComponentView({\n type: 'toolbox',\n render: function (toolboxModel, ecModel, api, payload) {\n var group = this.group;\n group.removeAll();\n\n if (!toolboxModel.get('show')) {\n return;\n }\n\n var itemSize = +toolboxModel.get('itemSize');\n var featureOpts = toolboxModel.get('feature') || {};\n var features = this._features || (this._features = {});\n var featureNames = [];\n zrUtil.each(featureOpts, function (opt, name) {\n featureNames.push(name);\n });\n new DataDiffer(this._featureNames || [], featureNames).add(processFeature).update(processFeature).remove(zrUtil.curry(processFeature, null)).execute(); // Keep for diff.\n\n this._featureNames = featureNames;\n\n function processFeature(newIndex, oldIndex) {\n var featureName = featureNames[newIndex];\n var oldName = featureNames[oldIndex];\n var featureOpt = featureOpts[featureName];\n var featureModel = new Model(featureOpt, toolboxModel, toolboxModel.ecModel);\n var feature;\n\n if (featureName && !oldName) {\n // Create\n if (isUserFeatureName(featureName)) {\n feature = {\n model: featureModel,\n onclick: featureModel.option.onclick,\n featureName: featureName\n };\n } else {\n var Feature = featureManager.get(featureName);\n\n if (!Feature) {\n return;\n }\n\n feature = new Feature(featureModel, ecModel, api);\n }\n\n features[featureName] = feature;\n } else {\n feature = features[oldName]; // If feature does not exsit.\n\n if (!feature) {\n return;\n }\n\n feature.model = featureModel;\n feature.ecModel = ecModel;\n feature.api = api;\n }\n\n if (!featureName && oldName) {\n feature.dispose && feature.dispose(ecModel, api);\n return;\n }\n\n if (!featureModel.get('show') || feature.unusable) {\n feature.remove && feature.remove(ecModel, api);\n return;\n }\n\n createIconPaths(featureModel, feature, featureName);\n\n featureModel.setIconStatus = function (iconName, status) {\n var option = this.option;\n var iconPaths = this.iconPaths;\n option.iconStatus = option.iconStatus || {};\n option.iconStatus[iconName] = status; // FIXME\n\n iconPaths[iconName] && iconPaths[iconName].trigger(status);\n };\n\n if (feature.render) {\n feature.render(featureModel, ecModel, api, payload);\n }\n }\n\n function createIconPaths(featureModel, feature, featureName) {\n var iconStyleModel = featureModel.getModel('iconStyle'); // If one feature has mutiple icon. they are orginaized as\n // {\n // icon: {\n // foo: '',\n // bar: ''\n // },\n // title: {\n // foo: '',\n // bar: ''\n // }\n // }\n\n var icons = feature.getIcons ? feature.getIcons() : featureModel.get('icon');\n var titles = featureModel.get('title') || {};\n\n if (typeof icons === 'string') {\n var icon = icons;\n var title = titles;\n icons = {};\n titles = {};\n icons[featureName] = icon;\n titles[featureName] = title;\n }\n\n var iconPaths = featureModel.iconPaths = {};\n zrUtil.each(icons, function (iconStr, iconName) {\n var path = graphic.createIcon(iconStr, {}, {\n x: -itemSize / 2,\n y: -itemSize / 2,\n width: itemSize,\n height: itemSize\n });\n path.setStyle(iconStyleModel.getModel('normal').getItemStyle());\n path.hoverStyle = iconStyleModel.getModel('emphasis').getItemStyle();\n graphic.setHoverStyle(path);\n\n if (toolboxModel.get('showTitle')) {\n path.__title = titles[iconName];\n path.on('mouseover', function () {\n // Should not reuse above hoverStyle, which might be modified.\n var hoverStyle = iconStyleModel.getModel('emphasis').getItemStyle();\n path.setStyle({\n text: titles[iconName],\n textPosition: hoverStyle.textPosition || 'bottom',\n textFill: hoverStyle.fill || hoverStyle.stroke || '#000',\n textAlign: hoverStyle.textAlign || 'center'\n });\n }).on('mouseout', function () {\n path.setStyle({\n textFill: null\n });\n });\n }\n\n path.trigger(featureModel.get('iconStatus.' + iconName) || 'normal');\n group.add(path);\n path.on('click', zrUtil.bind(feature.onclick, feature, ecModel, api, iconName));\n iconPaths[iconName] = path;\n });\n }\n\n listComponentHelper.layout(group, toolboxModel, api); // Render background after group is layout\n // FIXME\n\n group.add(listComponentHelper.makeBackground(group.getBoundingRect(), toolboxModel)); // Adjust icon title positions to avoid them out of screen\n\n group.eachChild(function (icon) {\n var titleText = icon.__title;\n var hoverStyle = icon.hoverStyle; // May be background element\n\n if (hoverStyle && titleText) {\n var rect = textContain.getBoundingRect(titleText, textContain.makeFont(hoverStyle));\n var offsetX = icon.position[0] + group.position[0];\n var offsetY = icon.position[1] + group.position[1] + itemSize;\n var needPutOnTop = false;\n\n if (offsetY + rect.height > api.getHeight()) {\n hoverStyle.textPosition = 'top';\n needPutOnTop = true;\n }\n\n var topOffset = needPutOnTop ? -5 - rect.height : itemSize + 8;\n\n if (offsetX + rect.width / 2 > api.getWidth()) {\n hoverStyle.textPosition = ['100%', topOffset];\n hoverStyle.textAlign = 'right';\n } else if (offsetX - rect.width / 2 < 0) {\n hoverStyle.textPosition = [0, topOffset];\n hoverStyle.textAlign = 'left';\n }\n }\n });\n },\n updateView: function (toolboxModel, ecModel, api, payload) {\n zrUtil.each(this._features, function (feature) {\n feature.updateView && feature.updateView(feature.model, ecModel, api, payload);\n });\n },\n updateLayout: function (toolboxModel, ecModel, api, payload) {\n zrUtil.each(this._features, function (feature) {\n feature.updateLayout && feature.updateLayout(feature.model, ecModel, api, payload);\n });\n },\n remove: function (ecModel, api) {\n zrUtil.each(this._features, function (feature) {\n feature.remove && feature.remove(ecModel, api);\n });\n this.group.removeAll();\n },\n dispose: function (ecModel, api) {\n zrUtil.each(this._features, function (feature) {\n feature.dispose && feature.dispose(ecModel, api);\n });\n }\n});\n\nfunction isUserFeatureName(featureName) {\n return featureName.indexOf('my') === 0;\n}\n\nmodule.exports = _default;","var _core = require(\"./core\");\n\nvar createElement = _core.createElement;\n\nvar util = require(\"../core/util\");\n\nvar each = util.each;\n\nvar zrLog = require(\"../core/log\");\n\nvar Path = require(\"../graphic/Path\");\n\nvar ZImage = require(\"../graphic/Image\");\n\nvar ZText = require(\"../graphic/Text\");\n\nvar arrayDiff = require(\"../core/arrayDiff2\");\n\nvar GradientManager = require(\"./helper/GradientManager\");\n\nvar ClippathManager = require(\"./helper/ClippathManager\");\n\nvar _graphic = require(\"./graphic\");\n\nvar svgPath = _graphic.path;\nvar svgImage = _graphic.image;\nvar svgText = _graphic.text;\n\n/**\n * SVG Painter\n * @module zrender/svg/Painter\n */\nfunction parseInt10(val) {\n return parseInt(val, 10);\n}\n\nfunction getSvgProxy(el) {\n if (el instanceof Path) {\n return svgPath;\n } else if (el instanceof ZImage) {\n return svgImage;\n } else if (el instanceof ZText) {\n return svgText;\n } else {\n return svgPath;\n }\n}\n\nfunction checkParentAvailable(parent, child) {\n return child && parent && child.parentNode !== parent;\n}\n\nfunction insertAfter(parent, child, prevSibling) {\n if (checkParentAvailable(parent, child) && prevSibling) {\n var nextSibling = prevSibling.nextSibling;\n nextSibling ? parent.insertBefore(child, nextSibling) : parent.appendChild(child);\n }\n}\n\nfunction prepend(parent, child) {\n if (checkParentAvailable(parent, child)) {\n var firstChild = parent.firstChild;\n firstChild ? parent.insertBefore(child, firstChild) : parent.appendChild(child);\n }\n}\n\nfunction append(parent, child) {\n if (checkParentAvailable(parent, child)) {\n parent.appendChild(child);\n }\n}\n\nfunction remove(parent, child) {\n if (child && parent && child.parentNode === parent) {\n parent.removeChild(child);\n }\n}\n\nfunction getTextSvgElement(displayable) {\n return displayable.__textSvgEl;\n}\n\nfunction getSvgElement(displayable) {\n return displayable.__svgEl;\n}\n/**\n * @alias module:zrender/svg/Painter\n * @constructor\n * @param {HTMLElement} root 绘图容器\n * @param {module:zrender/Storage} storage\n * @param {Object} opts\n */\n\n\nvar SVGPainter = function (root, storage, opts) {\n this.root = root;\n this.storage = storage;\n this._opts = opts = util.extend({}, opts || {});\n var svgRoot = createElement('svg');\n svgRoot.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n svgRoot.setAttribute('version', '1.1');\n svgRoot.setAttribute('baseProfile', 'full');\n svgRoot.style['user-select'] = 'none';\n svgRoot.style.cssText = 'position:absolute;left:0;top:0;';\n this.gradientManager = new GradientManager(svgRoot);\n this.clipPathManager = new ClippathManager(svgRoot);\n var viewport = document.createElement('div');\n viewport.style.cssText = 'overflow:hidden;position:relative';\n this._svgRoot = svgRoot;\n this._viewport = viewport;\n root.appendChild(viewport);\n viewport.appendChild(svgRoot);\n this.resize(opts.width, opts.height);\n this._visibleList = [];\n};\n\nSVGPainter.prototype = {\n constructor: SVGPainter,\n getType: function () {\n return 'svg';\n },\n getViewportRoot: function () {\n return this._viewport;\n },\n getViewportRootOffset: function () {\n var viewportRoot = this.getViewportRoot();\n\n if (viewportRoot) {\n return {\n offsetLeft: viewportRoot.offsetLeft || 0,\n offsetTop: viewportRoot.offsetTop || 0\n };\n }\n },\n refresh: function () {\n var list = this.storage.getDisplayList(true);\n\n this._paintList(list);\n },\n _paintList: function (list) {\n this.gradientManager.markAllUnused();\n this.clipPathManager.markAllUnused();\n var svgRoot = this._svgRoot;\n var visibleList = this._visibleList;\n var listLen = list.length;\n var newVisibleList = [];\n var i;\n\n for (i = 0; i < listLen; i++) {\n var displayable = list[i];\n var svgProxy = getSvgProxy(displayable);\n\n if (!displayable.invisible) {\n if (displayable.__dirty) {\n svgProxy && svgProxy.brush(displayable); // Update clipPath\n\n this.clipPathManager.update(displayable); // Update gradient\n\n if (displayable.style) {\n this.gradientManager.update(displayable.style.fill);\n this.gradientManager.update(displayable.style.stroke);\n }\n\n displayable.__dirty = false;\n }\n\n newVisibleList.push(displayable);\n }\n }\n\n var diff = arrayDiff(visibleList, newVisibleList);\n var prevSvgElement; // First do remove, in case element moved to the head and do remove\n // after add\n\n for (i = 0; i < diff.length; i++) {\n var item = diff[i];\n\n if (item.removed) {\n for (var k = 0; k < item.count; k++) {\n var displayable = visibleList[item.indices[k]];\n var svgElement = getSvgElement(displayable);\n var textSvgElement = getTextSvgElement(displayable);\n remove(svgRoot, svgElement);\n remove(svgRoot, textSvgElement);\n }\n }\n }\n\n for (i = 0; i < diff.length; i++) {\n var item = diff[i];\n\n if (item.added) {\n for (var k = 0; k < item.count; k++) {\n var displayable = newVisibleList[item.indices[k]];\n var svgElement = getSvgElement(displayable);\n var textSvgElement = getTextSvgElement(displayable);\n prevSvgElement ? insertAfter(svgRoot, svgElement, prevSvgElement) : prepend(svgRoot, svgElement);\n\n if (svgElement) {\n insertAfter(svgRoot, textSvgElement, svgElement);\n } else if (prevSvgElement) {\n insertAfter(svgRoot, textSvgElement, prevSvgElement);\n } else {\n prepend(svgRoot, textSvgElement);\n } // Insert text\n\n\n insertAfter(svgRoot, textSvgElement, svgElement);\n prevSvgElement = textSvgElement || svgElement || prevSvgElement;\n this.gradientManager.addWithoutUpdate(svgElement, displayable);\n this.clipPathManager.markUsed(displayable);\n }\n } else if (!item.removed) {\n for (var k = 0; k < item.count; k++) {\n var displayable = newVisibleList[item.indices[k]];\n prevSvgElement = svgElement = getTextSvgElement(displayable) || getSvgElement(displayable) || prevSvgElement;\n this.gradientManager.markUsed(displayable);\n this.gradientManager.addWithoutUpdate(svgElement, displayable);\n this.clipPathManager.markUsed(displayable);\n }\n }\n }\n\n this.gradientManager.removeUnused();\n this.clipPathManager.removeUnused();\n this._visibleList = newVisibleList;\n },\n _getDefs: function (isForceCreating) {\n var svgRoot = this._svgRoot;\n\n var defs = this._svgRoot.getElementsByTagName('defs');\n\n if (defs.length === 0) {\n // Not exist\n if (isForceCreating) {\n var defs = svgRoot.insertBefore(createElement('defs'), // Create new tag\n svgRoot.firstChild // Insert in the front of svg\n );\n\n if (!defs.contains) {\n // IE doesn't support contains method\n defs.contains = function (el) {\n var children = defs.children;\n\n if (!children) {\n return false;\n }\n\n for (var i = children.length - 1; i >= 0; --i) {\n if (children[i] === el) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n return defs;\n } else {\n return null;\n }\n } else {\n return defs[0];\n }\n },\n resize: function (width, height) {\n var viewport = this._viewport; // FIXME Why ?\n\n viewport.style.display = 'none'; // Save input w/h\n\n var opts = this._opts;\n width != null && (opts.width = width);\n height != null && (opts.height = height);\n width = this._getSize(0);\n height = this._getSize(1);\n viewport.style.display = '';\n\n if (this._width !== width && this._height !== height) {\n this._width = width;\n this._height = height;\n var viewportStyle = viewport.style;\n viewportStyle.width = width + 'px';\n viewportStyle.height = height + 'px';\n var svgRoot = this._svgRoot; // Set width by 'svgRoot.width = width' is invalid\n\n svgRoot.setAttribute('width', width);\n svgRoot.setAttribute('height', height);\n }\n },\n\n /**\n * 获取绘图区域宽度\n */\n getWidth: function () {\n return this._width;\n },\n\n /**\n * 获取绘图区域高度\n */\n getHeight: function () {\n return this._height;\n },\n _getSize: function (whIdx) {\n var opts = this._opts;\n var wh = ['width', 'height'][whIdx];\n var cwh = ['clientWidth', 'clientHeight'][whIdx];\n var plt = ['paddingLeft', 'paddingTop'][whIdx];\n var prb = ['paddingRight', 'paddingBottom'][whIdx];\n\n if (opts[wh] != null && opts[wh] !== 'auto') {\n return parseFloat(opts[wh]);\n }\n\n var root = this.root; // IE8 does not support getComputedStyle, but it use VML.\n\n var stl = document.defaultView.getComputedStyle(root);\n return (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh])) - (parseInt10(stl[plt]) || 0) - (parseInt10(stl[prb]) || 0) | 0;\n },\n dispose: function () {\n this.root.innerHTML = '';\n this._svgRoot = this._viewport = this.storage = null;\n },\n clear: function () {\n if (this._viewport) {\n this.root.removeChild(this._viewport);\n }\n },\n pathToSvg: function () {\n this.refresh();\n var html = this._svgRoot.outerHTML;\n return 'data:img/svg+xml;utf-8,' + unescape(html);\n }\n}; // Not supported methods\n\nfunction createMethodNotSupport(method) {\n return function () {\n zrLog('In SVG mode painter not support method \"' + method + '\"');\n };\n} // Unsuppoted methods\n\n\neach(['getLayer', 'insertLayer', 'eachLayer', 'eachBuiltinLayer', 'eachOtherLayer', 'getLayers', 'modLayer', 'delLayer', 'clearLayer', 'toDataURL', 'pathToImage'], function (name) {\n SVGPainter.prototype[name] = createMethodNotSupport(name);\n});\nvar _default = SVGPainter;\nmodule.exports = _default;","var Pattern = function (image, repeat) {\n // Should do nothing more in this constructor. Because gradient can be\n // declard by `color: {image: ...}`, where this constructor will not be called.\n this.image = image;\n this.repeat = repeat; // Can be cloned\n\n this.type = 'pattern';\n};\n\nPattern.prototype.getCanvasPattern = function (ctx) {\n return ctx.createPattern(this.image, this.repeat || 'repeat');\n};\n\nvar _default = Pattern;\nmodule.exports = _default;","\r\n\r\n\r\n\r\n\n","import { render } from \"./GSJJ.vue?vue&type=template&id=5b28151e&scoped=true\"\nimport script from \"./GSJJ.vue?vue&type=script&lang=js\"\nexport * from \"./GSJJ.vue?vue&type=script&lang=js\"\n\nimport \"./GSJJ.vue?vue&type=style&index=0&id=5b28151e&lang=scss&scoped=true\"\n\nimport exportComponent from \"E:\\\\办公\\\\项目\\\\大众物流官网\\\\node_modules\\\\@vue\\\\cli-service\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5b28151e\"]])\n\nexport default __exports__","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar clazzUtil = require(\"../../util/clazz\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar axisPointerModelHelper = require(\"./modelHelper\");\n\nvar eventTool = require(\"zrender/lib/core/event\");\n\nvar throttleUtil = require(\"../../util/throttle\");\n\nvar modelUtil = require(\"../../util/model\");\n\nvar get = modelUtil.makeGetter();\nvar clone = zrUtil.clone;\nvar bind = zrUtil.bind;\n/**\n * Base axis pointer class in 2D.\n * Implemenents {module:echarts/component/axis/IAxisPointer}.\n */\n\nfunction BaseAxisPointer() {}\n\nBaseAxisPointer.prototype = {\n /**\n * @private\n */\n _group: null,\n\n /**\n * @private\n */\n _lastGraphicKey: null,\n\n /**\n * @private\n */\n _handle: null,\n\n /**\n * @private\n */\n _dragging: false,\n\n /**\n * @private\n */\n _lastValue: null,\n\n /**\n * @private\n */\n _lastStatus: null,\n\n /**\n * @private\n */\n _payloadInfo: null,\n\n /**\n * In px, arbitrary value. Do not set too small,\n * no animation is ok for most cases.\n * @protected\n */\n animationThreshold: 15,\n\n /**\n * @implement\n */\n render: function (axisModel, axisPointerModel, api, forceRender) {\n var value = axisPointerModel.get('value');\n var status = axisPointerModel.get('status'); // Bind them to `this`, not in closure, otherwise they will not\n // be replaced when user calling setOption in not merge mode.\n\n this._axisModel = axisModel;\n this._axisPointerModel = axisPointerModel;\n this._api = api; // Optimize: `render` will be called repeatly during mouse move.\n // So it is power consuming if performing `render` each time,\n // especially on mobile device.\n\n if (!forceRender && this._lastValue === value && this._lastStatus === status) {\n return;\n }\n\n this._lastValue = value;\n this._lastStatus = status;\n var group = this._group;\n var handle = this._handle;\n\n if (!status || status === 'hide') {\n // Do not clear here, for animation better.\n group && group.hide();\n handle && handle.hide();\n return;\n }\n\n group && group.show();\n handle && handle.show(); // Otherwise status is 'show'\n\n var elOption = {};\n this.makeElOption(elOption, value, axisModel, axisPointerModel, api); // Enable change axis pointer type.\n\n var graphicKey = elOption.graphicKey;\n\n if (graphicKey !== this._lastGraphicKey) {\n this.clear(api);\n }\n\n this._lastGraphicKey = graphicKey;\n var moveAnimation = this._moveAnimation = this.determineAnimation(axisModel, axisPointerModel);\n\n if (!group) {\n group = this._group = new graphic.Group();\n this.createPointerEl(group, elOption, axisModel, axisPointerModel);\n this.createLabelEl(group, elOption, axisModel, axisPointerModel);\n api.getZr().add(group);\n } else {\n var doUpdateProps = zrUtil.curry(updateProps, axisPointerModel, moveAnimation);\n this.updatePointerEl(group, elOption, doUpdateProps, axisPointerModel);\n this.updateLabelEl(group, elOption, doUpdateProps, axisPointerModel);\n }\n\n updateMandatoryProps(group, axisPointerModel, true);\n\n this._renderHandle(value);\n },\n\n /**\n * @implement\n */\n remove: function (api) {\n this.clear(api);\n },\n\n /**\n * @implement\n */\n dispose: function (api) {\n this.clear(api);\n },\n\n /**\n * @protected\n */\n determineAnimation: function (axisModel, axisPointerModel) {\n var animation = axisPointerModel.get('animation');\n var axis = axisModel.axis;\n var isCategoryAxis = axis.type === 'category';\n var useSnap = axisPointerModel.get('snap'); // Value axis without snap always do not snap.\n\n if (!useSnap && !isCategoryAxis) {\n return false;\n }\n\n if (animation === 'auto' || animation == null) {\n var animationThreshold = this.animationThreshold;\n\n if (isCategoryAxis && axis.getBandWidth() > animationThreshold) {\n return true;\n } // It is important to auto animation when snap used. Consider if there is\n // a dataZoom, animation will be disabled when too many points exist, while\n // it will be enabled for better visual effect when little points exist.\n\n\n if (useSnap) {\n var seriesDataCount = axisPointerModelHelper.getAxisInfo(axisModel).seriesDataCount;\n var axisExtent = axis.getExtent(); // Approximate band width\n\n return Math.abs(axisExtent[0] - axisExtent[1]) / seriesDataCount > animationThreshold;\n }\n\n return false;\n }\n\n return animation === true;\n },\n\n /**\n * add {pointer, label, graphicKey} to elOption\n * @protected\n */\n makeElOption: function (elOption, value, axisModel, axisPointerModel, api) {// Shoule be implemenented by sub-class.\n },\n\n /**\n * @protected\n */\n createPointerEl: function (group, elOption, axisModel, axisPointerModel) {\n var pointerOption = elOption.pointer;\n\n if (pointerOption) {\n var pointerEl = get(group).pointerEl = new graphic[pointerOption.type](clone(elOption.pointer));\n group.add(pointerEl);\n }\n },\n\n /**\n * @protected\n */\n createLabelEl: function (group, elOption, axisModel, axisPointerModel) {\n if (elOption.label) {\n var labelEl = get(group).labelEl = new graphic.Rect(clone(elOption.label));\n group.add(labelEl);\n updateLabelShowHide(labelEl, axisPointerModel);\n }\n },\n\n /**\n * @protected\n */\n updatePointerEl: function (group, elOption, updateProps) {\n var pointerEl = get(group).pointerEl;\n\n if (pointerEl) {\n pointerEl.setStyle(elOption.pointer.style);\n updateProps(pointerEl, {\n shape: elOption.pointer.shape\n });\n }\n },\n\n /**\n * @protected\n */\n updateLabelEl: function (group, elOption, updateProps, axisPointerModel) {\n var labelEl = get(group).labelEl;\n\n if (labelEl) {\n labelEl.setStyle(elOption.label.style);\n updateProps(labelEl, {\n // Consider text length change in vertical axis, animation should\n // be used on shape, otherwise the effect will be weird.\n shape: elOption.label.shape,\n position: elOption.label.position\n });\n updateLabelShowHide(labelEl, axisPointerModel);\n }\n },\n\n /**\n * @private\n */\n _renderHandle: function (value) {\n if (this._dragging || !this.updateHandleTransform) {\n return;\n }\n\n var axisPointerModel = this._axisPointerModel;\n\n var zr = this._api.getZr();\n\n var handle = this._handle;\n var handleModel = axisPointerModel.getModel('handle');\n var status = axisPointerModel.get('status');\n\n if (!handleModel.get('show') || !status || status === 'hide') {\n handle && zr.remove(handle);\n this._handle = null;\n return;\n }\n\n var isInit;\n\n if (!this._handle) {\n isInit = true;\n handle = this._handle = graphic.createIcon(handleModel.get('icon'), {\n cursor: 'move',\n draggable: true,\n onmousemove: function (e) {\n // Fot mobile devicem, prevent screen slider on the button.\n eventTool.stop(e.event);\n },\n onmousedown: bind(this._onHandleDragMove, this, 0, 0),\n drift: bind(this._onHandleDragMove, this),\n ondragend: bind(this._onHandleDragEnd, this)\n });\n zr.add(handle);\n }\n\n updateMandatoryProps(handle, axisPointerModel, false); // update style\n\n var includeStyles = ['color', 'borderColor', 'borderWidth', 'opacity', 'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY'];\n handle.setStyle(handleModel.getItemStyle(null, includeStyles)); // update position\n\n var handleSize = handleModel.get('size');\n\n if (!zrUtil.isArray(handleSize)) {\n handleSize = [handleSize, handleSize];\n }\n\n handle.attr('scale', [handleSize[0] / 2, handleSize[1] / 2]);\n throttleUtil.createOrUpdate(this, '_doDispatchAxisPointer', handleModel.get('throttle') || 0, 'fixRate');\n\n this._moveHandleToValue(value, isInit);\n },\n\n /**\n * @private\n */\n _moveHandleToValue: function (value, isInit) {\n updateProps(this._axisPointerModel, !isInit && this._moveAnimation, this._handle, getHandleTransProps(this.getHandleTransform(value, this._axisModel, this._axisPointerModel)));\n },\n\n /**\n * @private\n */\n _onHandleDragMove: function (dx, dy) {\n var handle = this._handle;\n\n if (!handle) {\n return;\n }\n\n this._dragging = true; // Persistent for throttle.\n\n var trans = this.updateHandleTransform(getHandleTransProps(handle), [dx, dy], this._axisModel, this._axisPointerModel);\n this._payloadInfo = trans;\n handle.stopAnimation();\n handle.attr(getHandleTransProps(trans));\n get(handle).lastProp = null;\n\n this._doDispatchAxisPointer();\n },\n\n /**\n * Throttled method.\n * @private\n */\n _doDispatchAxisPointer: function () {\n var handle = this._handle;\n\n if (!handle) {\n return;\n }\n\n var payloadInfo = this._payloadInfo;\n var axisModel = this._axisModel;\n\n this._api.dispatchAction({\n type: 'updateAxisPointer',\n x: payloadInfo.cursorPoint[0],\n y: payloadInfo.cursorPoint[1],\n tooltipOption: payloadInfo.tooltipOption,\n axesInfo: [{\n axisDim: axisModel.axis.dim,\n axisIndex: axisModel.componentIndex\n }]\n });\n },\n\n /**\n * @private\n */\n _onHandleDragEnd: function (moveAnimation) {\n this._dragging = false;\n var handle = this._handle;\n\n if (!handle) {\n return;\n }\n\n var value = this._axisPointerModel.get('value'); // Consider snap or categroy axis, handle may be not consistent with\n // axisPointer. So move handle to align the exact value position when\n // drag ended.\n\n\n this._moveHandleToValue(value); // For the effect: tooltip will be shown when finger holding on handle\n // button, and will be hidden after finger left handle button.\n\n\n this._api.dispatchAction({\n type: 'hideTip'\n });\n },\n\n /**\n * Should be implemenented by sub-class if support `handle`.\n * @protected\n * @param {number} value\n * @param {module:echarts/model/Model} axisModel\n * @param {module:echarts/model/Model} axisPointerModel\n * @return {Object} {position: [x, y], rotation: 0}\n */\n getHandleTransform: null,\n\n /**\n * * Should be implemenented by sub-class if support `handle`.\n * @protected\n * @param {Object} transform {position, rotation}\n * @param {Array.} delta [dx, dy]\n * @param {module:echarts/model/Model} axisModel\n * @param {module:echarts/model/Model} axisPointerModel\n * @return {Object} {position: [x, y], rotation: 0, cursorPoint: [x, y]}\n */\n updateHandleTransform: null,\n\n /**\n * @private\n */\n clear: function (api) {\n this._lastValue = null;\n this._lastStatus = null;\n var zr = api.getZr();\n var group = this._group;\n var handle = this._handle;\n\n if (zr && group) {\n this._lastGraphicKey = null;\n group && zr.remove(group);\n handle && zr.remove(handle);\n this._group = null;\n this._handle = null;\n this._payloadInfo = null;\n }\n },\n\n /**\n * @protected\n */\n doClear: function () {// Implemented by sub-class if necessary.\n },\n\n /**\n * @protected\n * @param {Array.} xy\n * @param {Array.} wh\n * @param {number} [xDimIndex=0] or 1\n */\n buildLabel: function (xy, wh, xDimIndex) {\n xDimIndex = xDimIndex || 0;\n return {\n x: xy[xDimIndex],\n y: xy[1 - xDimIndex],\n width: wh[xDimIndex],\n height: wh[1 - xDimIndex]\n };\n }\n};\nBaseAxisPointer.prototype.constructor = BaseAxisPointer;\n\nfunction updateProps(animationModel, moveAnimation, el, props) {\n // Animation optimize.\n if (!propsEqual(get(el).lastProp, props)) {\n get(el).lastProp = props;\n moveAnimation ? graphic.updateProps(el, props, animationModel) : (el.stopAnimation(), el.attr(props));\n }\n}\n\nfunction propsEqual(lastProps, newProps) {\n if (zrUtil.isObject(lastProps) && zrUtil.isObject(newProps)) {\n var equals = true;\n zrUtil.each(newProps, function (item, key) {\n equals = equals && propsEqual(lastProps[key], item);\n });\n return !!equals;\n } else {\n return lastProps === newProps;\n }\n}\n\nfunction updateLabelShowHide(labelEl, axisPointerModel) {\n labelEl[axisPointerModel.get('label.show') ? 'show' : 'hide']();\n}\n\nfunction getHandleTransProps(trans) {\n return {\n position: trans.position.slice(),\n rotation: trans.rotation || 0\n };\n}\n\nfunction updateMandatoryProps(group, axisPointerModel, silent) {\n var z = axisPointerModel.get('z');\n var zlevel = axisPointerModel.get('zlevel');\n group && group.traverse(function (el) {\n if (el.type !== 'group') {\n z != null && (el.z = z);\n zlevel != null && (el.zlevel = zlevel);\n el.silent = silent;\n }\n });\n}\n\nclazzUtil.enableClassExtend(BaseAxisPointer);\nvar _default = BaseAxisPointer;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar ChartView = require(\"../../view/Chart\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar _whiskerBoxCommon = require(\"../helper/whiskerBoxCommon\");\n\nvar viewMixin = _whiskerBoxCommon.viewMixin;\nvar BoxplotView = ChartView.extend({\n type: 'boxplot',\n getStyleUpdater: function () {\n return updateStyle;\n },\n dispose: zrUtil.noop\n});\nzrUtil.mixin(BoxplotView, viewMixin, true); // Update common properties\n\nvar normalStyleAccessPath = ['itemStyle', 'normal'];\nvar emphasisStyleAccessPath = ['itemStyle', 'emphasis'];\n\nfunction updateStyle(itemGroup, data, idx) {\n var itemModel = data.getItemModel(idx);\n var normalItemStyleModel = itemModel.getModel(normalStyleAccessPath);\n var borderColor = data.getItemVisual(idx, 'color'); // Exclude borderColor.\n\n var itemStyle = normalItemStyleModel.getItemStyle(['borderColor']);\n var whiskerEl = itemGroup.childAt(itemGroup.whiskerIndex);\n whiskerEl.style.set(itemStyle);\n whiskerEl.style.stroke = borderColor;\n whiskerEl.dirty();\n var bodyEl = itemGroup.childAt(itemGroup.bodyIndex);\n bodyEl.style.set(itemStyle);\n bodyEl.style.stroke = borderColor;\n bodyEl.dirty();\n var hoverStyle = itemModel.getModel(emphasisStyleAccessPath).getItemStyle();\n graphic.setHoverStyle(itemGroup, hoverStyle);\n}\n\nvar _default = BoxplotView;\nmodule.exports = _default;","module.exports = __webpack_public_path__ + \"img/About_item_1.6e40c486.jpg\";","require(\"./dataZoom/typeDefaulter\");\n\nrequire(\"./dataZoom/DataZoomModel\");\n\nrequire(\"./dataZoom/DataZoomView\");\n\nrequire(\"./dataZoom/SelectZoomModel\");\n\nrequire(\"./dataZoom/SelectZoomView\");\n\nrequire(\"./dataZoom/dataZoomProcessor\");\n\nrequire(\"./dataZoom/dataZoomAction\");","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar TimelineModel = require(\"./TimelineModel\");\n\nvar modelUtil = require(\"../../util/model\");\n\nvar SliderTimelineModel = TimelineModel.extend({\n type: 'timeline.slider',\n\n /**\n * @protected\n */\n defaultOption: {\n backgroundColor: 'rgba(0,0,0,0)',\n // 时间轴背景颜色\n borderColor: '#ccc',\n // 时间轴边框颜色\n borderWidth: 0,\n // 时间轴边框线宽,单位px,默认为0(无边框)\n orient: 'horizontal',\n // 'vertical'\n inverse: false,\n tooltip: {\n // boolean or Object\n trigger: 'item' // data item may also have tootip attr.\n\n },\n symbol: 'emptyCircle',\n symbolSize: 10,\n lineStyle: {\n show: true,\n width: 2,\n color: '#304654'\n },\n label: {\n // 文本标签\n position: 'auto',\n // auto left right top bottom\n // When using number, label position is not\n // restricted by viewRect.\n // positive: right/bottom, negative: left/top\n normal: {\n show: true,\n interval: 'auto',\n rotate: 0,\n // formatter: null,\n // 其余属性默认使用全局文本样式,详见TEXTSTYLE\n color: '#304654'\n },\n emphasis: {\n show: true,\n // 其余属性默认使用全局文本样式,详见TEXTSTYLE\n color: '#c23531'\n }\n },\n itemStyle: {\n normal: {\n color: '#304654',\n borderWidth: 1\n },\n emphasis: {\n color: '#c23531'\n }\n },\n checkpointStyle: {\n symbol: 'circle',\n symbolSize: 13,\n color: '#c23531',\n borderWidth: 5,\n borderColor: 'rgba(194,53,49, 0.5)',\n animation: true,\n animationDuration: 300,\n animationEasing: 'quinticInOut'\n },\n controlStyle: {\n show: true,\n showPlayBtn: true,\n showPrevBtn: true,\n showNextBtn: true,\n itemSize: 22,\n itemGap: 12,\n position: 'left',\n // 'left' 'right' 'top' 'bottom'\n playIcon: 'path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z',\n // jshint ignore:line\n stopIcon: 'path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z',\n // jshint ignore:line\n nextIcon: 'path://M18.6,50.8l22.5-22.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.3-0.1-0.5-0.3-0.7L18.7,4.4c-0.1-0.1-0.2-0.3-0.2-0.5 c0-0.4,0.3-0.8,0.8-0.8c0.2,0,0.5,0.1,0.6,0.3l23.5,23.5l0,0c0.2,0.2,0.3,0.4,0.3,0.7c0,0.3-0.1,0.5-0.3,0.7l-0.1,0.1L19.7,52 c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0-0.8-0.3-0.8-0.8C18.4,51.2,18.5,51,18.6,50.8z',\n // jshint ignore:line\n prevIcon: 'path://M43,52.8L20.4,30.3c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.3,0.1-0.5,0.3-0.7L42.9,6.4c0.1-0.1,0.2-0.3,0.2-0.5 c0-0.4-0.3-0.8-0.8-0.8c-0.2,0-0.5,0.1-0.6,0.3L18.3,28.8l0,0c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7l0.1,0.1L41.9,54 c0.1,0.1,0.3,0.2,0.5,0.2c0.4,0,0.8-0.3,0.8-0.8C43.2,53.2,43.1,53,43,52.8z',\n // jshint ignore:line\n normal: {\n color: '#304654',\n borderColor: '#304654',\n borderWidth: 1\n },\n emphasis: {\n color: '#c23531',\n borderColor: '#c23531',\n borderWidth: 2\n }\n },\n data: []\n }\n});\nzrUtil.mixin(SliderTimelineModel, modelUtil.dataFormatMixin);\nvar _default = SliderTimelineModel;\nmodule.exports = _default;","var zrUtil = require(\"../core/util\");\n\nvar Gradient = require(\"./Gradient\");\n\n/**\n * x, y, r are all percent from 0 to 1\n * @param {number} [x=0.5]\n * @param {number} [y=0.5]\n * @param {number} [r=0.5]\n * @param {Array.} [colorStops]\n * @param {boolean} [globalCoord=false]\n */\nvar RadialGradient = function (x, y, r, colorStops, globalCoord) {\n // Should do nothing more in this constructor. Because gradient can be\n // declard by `color: {type: 'radial', colorStops: ...}`, where\n // this constructor will not be called.\n this.x = x == null ? 0.5 : x;\n this.y = y == null ? 0.5 : y;\n this.r = r == null ? 0.5 : r; // Can be cloned\n\n this.type = 'radial'; // If use global coord\n\n this.global = globalCoord || false;\n Gradient.call(this, colorStops);\n};\n\nRadialGradient.prototype = {\n constructor: RadialGradient\n};\nzrUtil.inherits(RadialGradient, Gradient);\nvar _default = RadialGradient;\nmodule.exports = _default;","/**\n * zrender: 生成唯一id\n *\n * @author errorrik (errorrik@gmail.com)\n */\nvar idStart = 0x0907;\n\nfunction _default() {\n return idStart++;\n}\n\nmodule.exports = _default;","var _default = {\n getBoxLayoutParams: function () {\n return {\n left: this.get('left'),\n top: this.get('top'),\n right: this.get('right'),\n bottom: this.get('bottom'),\n width: this.get('width'),\n height: this.get('height')\n };\n }\n};\nmodule.exports = _default;","function normalize(a) {\n if (!(a instanceof Array)) {\n a = [a, a];\n }\n\n return a;\n}\n\nfunction _default(ecModel) {\n ecModel.eachSeriesByType('graph', function (seriesModel) {\n var graph = seriesModel.getGraph();\n var edgeData = seriesModel.getEdgeData();\n var symbolType = normalize(seriesModel.get('edgeSymbol'));\n var symbolSize = normalize(seriesModel.get('edgeSymbolSize'));\n var colorQuery = 'lineStyle.normal.color'.split('.');\n var opacityQuery = 'lineStyle.normal.opacity'.split('.');\n edgeData.setVisual('fromSymbol', symbolType && symbolType[0]);\n edgeData.setVisual('toSymbol', symbolType && symbolType[1]);\n edgeData.setVisual('fromSymbolSize', symbolSize && symbolSize[0]);\n edgeData.setVisual('toSymbolSize', symbolSize && symbolSize[1]);\n edgeData.setVisual('color', seriesModel.get(colorQuery));\n edgeData.setVisual('opacity', seriesModel.get(opacityQuery));\n edgeData.each(function (idx) {\n var itemModel = edgeData.getItemModel(idx);\n var edge = graph.getEdgeByIndex(idx);\n var symbolType = normalize(itemModel.getShallow('symbol', true));\n var symbolSize = normalize(itemModel.getShallow('symbolSize', true)); // Edge visual must after node visual\n\n var color = itemModel.get(colorQuery);\n var opacity = itemModel.get(opacityQuery);\n\n switch (color) {\n case 'source':\n color = edge.node1.getVisual('color');\n break;\n\n case 'target':\n color = edge.node2.getVisual('color');\n break;\n }\n\n symbolType[0] && edge.setVisual('fromSymbol', symbolType[0]);\n symbolType[1] && edge.setVisual('toSymbol', symbolType[1]);\n symbolSize[0] && edge.setVisual('fromSymbolSize', symbolSize[0]);\n symbolSize[1] && edge.setVisual('toSymbolSize', symbolSize[1]);\n edge.setVisual('color', color);\n edge.setVisual('opacity', opacity);\n });\n });\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar ComponentModel = require(\"../../model/Component\");\n\nvar makeStyleMapper = require(\"../../model/mixin/makeStyleMapper\");\n\nvar axisModelCreator = require(\"../axisModelCreator\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar axisModelCommonMixin = require(\"../axisModelCommonMixin\");\n\nvar AxisModel = ComponentModel.extend({\n type: 'baseParallelAxis',\n\n /**\n * @type {module:echarts/coord/parallel/Axis}\n */\n axis: null,\n\n /**\n * @type {Array.}\n * @readOnly\n */\n activeIntervals: [],\n\n /**\n * @return {Object}\n */\n getAreaSelectStyle: function () {\n return makeStyleMapper([['fill', 'color'], ['lineWidth', 'borderWidth'], ['stroke', 'borderColor'], ['width', 'width'], ['opacity', 'opacity']])(this.getModel('areaSelectStyle'));\n },\n\n /**\n * The code of this feature is put on AxisModel but not ParallelAxis,\n * because axisModel can be alive after echarts updating but instance of\n * ParallelAxis having been disposed. this._activeInterval should be kept\n * when action dispatched (i.e. legend click).\n *\n * @param {Array.>} intervals interval.length === 0\n * means set all active.\n * @public\n */\n setActiveIntervals: function (intervals) {\n var activeIntervals = this.activeIntervals = zrUtil.clone(intervals); // Normalize\n\n if (activeIntervals) {\n for (var i = activeIntervals.length - 1; i >= 0; i--) {\n numberUtil.asc(activeIntervals[i]);\n }\n }\n },\n\n /**\n * @param {number|string} [value] When attempting to detect 'no activeIntervals set',\n * value can not be input.\n * @return {string} 'normal': no activeIntervals set,\n * 'active',\n * 'inactive'.\n * @public\n */\n getActiveState: function (value) {\n var activeIntervals = this.activeIntervals;\n\n if (!activeIntervals.length) {\n return 'normal';\n }\n\n if (value == null) {\n return 'inactive';\n }\n\n for (var i = 0, len = activeIntervals.length; i < len; i++) {\n if (activeIntervals[i][0] <= value && value <= activeIntervals[i][1]) {\n return 'active';\n }\n }\n\n return 'inactive';\n }\n});\nvar defaultOption = {\n type: 'value',\n\n /**\n * @type {Array.}\n */\n dim: null,\n // 0, 1, 2, ...\n // parallelIndex: null,\n areaSelectStyle: {\n width: 20,\n borderWidth: 1,\n borderColor: 'rgba(160,197,232)',\n color: 'rgba(160,197,232)',\n opacity: 0.3\n },\n realtime: true,\n // Whether realtime update view when select.\n z: 10\n};\nzrUtil.merge(AxisModel.prototype, axisModelCommonMixin);\n\nfunction getAxisType(axisName, option) {\n return option.type || (option.data ? 'category' : 'value');\n}\n\naxisModelCreator('parallel', AxisModel, getAxisType, defaultOption);\nvar _default = AxisModel;\nmodule.exports = _default;","var echarts = require(\"../../../echarts\");\n\nvar history = require(\"../../dataZoom/history\");\n\nvar lang = require(\"../../../lang\");\n\nvar featureManager = require(\"../featureManager\");\n\nvar restoreLang = lang.toolbox.restore;\n\nfunction Restore(model) {\n this.model = model;\n}\n\nRestore.defaultOption = {\n show: true,\n icon: 'M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5',\n title: restoreLang.title\n};\nvar proto = Restore.prototype;\n\nproto.onclick = function (ecModel, api, type) {\n history.clear(ecModel);\n api.dispatchAction({\n type: 'restore',\n from: this.uid\n });\n};\n\nfeatureManager.register('restore', Restore);\necharts.registerAction({\n type: 'restore',\n event: 'restore',\n update: 'prepareAndUpdate'\n}, function (payload, ecModel) {\n ecModel.resetOption('recreate');\n});\nvar _default = Restore;\nmodule.exports = _default;","var _config = require(\"../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphicUtil = require(\"../util/graphic\");\n\nvar _labelHelper = require(\"./helper/labelHelper\");\n\nvar findLabelValueDim = _labelHelper.findLabelValueDim;\n\nvar createListFromArray = require(\"./helper/createListFromArray\");\n\nvar barGrid = require(\"../layout/barGrid\");\n\nvar DataDiffer = require(\"../data/DataDiffer\");\n\nvar prepareCartesian2d = require(\"../coord/cartesian/prepareCustom\");\n\nvar prepareGeo = require(\"../coord/geo/prepareCustom\");\n\nvar prepareSingleAxis = require(\"../coord/single/prepareCustom\");\n\nvar preparePolar = require(\"../coord/polar/prepareCustom\");\n\nvar prepareCalendar = require(\"../coord/calendar/prepareCustom\");\n\nvar ITEM_STYLE_NORMAL_PATH = ['itemStyle', 'normal'];\nvar ITEM_STYLE_EMPHASIS_PATH = ['itemStyle', 'emphasis'];\nvar LABEL_NORMAL = ['label', 'normal'];\nvar LABEL_EMPHASIS = ['label', 'emphasis']; // Use prefix to avoid index to be the same as el.name,\n// which will cause weird udpate animation.\n\nvar GROUP_DIFF_PREFIX = 'e\\0\\0';\n/**\n * To reduce total package size of each coordinate systems, the modules `prepareCustom`\n * of each coordinate systems are not required by each coordinate systems directly, but\n * required by the module `custom`.\n *\n * prepareInfoForCustomSeries {Function}: optional\n * @return {Object} {coordSys: {...}, api: {\n * coord: function (data, clamp) {}, // return point in global.\n * size: function (dataSize, dataItem) {} // return size of each axis in coordSys.\n * }}\n */\n\nvar prepareCustoms = {\n cartesian2d: prepareCartesian2d,\n geo: prepareGeo,\n singleAxis: prepareSingleAxis,\n polar: preparePolar,\n calendar: prepareCalendar\n}; // ------\n// Model\n// ------\n\necharts.extendSeriesModel({\n type: 'series.custom',\n dependencies: ['grid', 'polar', 'geo', 'singleAxis', 'calendar'],\n defaultOption: {\n coordinateSystem: 'cartesian2d',\n // Can be set as 'none'\n zlevel: 0,\n z: 2,\n legendHoverLink: true // Cartesian coordinate system\n // xAxisIndex: 0,\n // yAxisIndex: 0,\n // Polar coordinate system\n // polarIndex: 0,\n // Geo coordinate system\n // geoIndex: 0,\n // label: {}\n // itemStyle: {}\n\n },\n getInitialData: function (option, ecModel) {\n return createListFromArray(option.data, this, ecModel);\n }\n}); // -----\n// View\n// -----\n\necharts.extendChartView({\n type: 'custom',\n\n /**\n * @private\n * @type {module:echarts/data/List}\n */\n _data: null,\n\n /**\n * @override\n */\n render: function (customSeries, ecModel, api) {\n var oldData = this._data;\n var data = customSeries.getData();\n var group = this.group;\n var renderItem = makeRenderItem(customSeries, data, ecModel, api);\n data.diff(oldData).add(function (newIdx) {\n data.hasValue(newIdx) && createOrUpdate(null, newIdx, renderItem(newIdx), customSeries, group, data);\n }).update(function (newIdx, oldIdx) {\n var el = oldData.getItemGraphicEl(oldIdx);\n data.hasValue(newIdx) ? createOrUpdate(el, newIdx, renderItem(newIdx), customSeries, group, data) : el && group.remove(el);\n }).remove(function (oldIdx) {\n var el = oldData.getItemGraphicEl(oldIdx);\n el && group.remove(el);\n }).execute();\n this._data = data;\n },\n\n /**\n * @override\n */\n dispose: zrUtil.noop\n});\n\nfunction createEl(elOption) {\n var graphicType = elOption.type;\n var el;\n\n if (graphicType === 'path') {\n var shape = elOption.shape;\n el = graphicUtil.makePath(shape.pathData, null, {\n x: shape.x || 0,\n y: shape.y || 0,\n width: shape.width || 0,\n height: shape.height || 0\n }, 'center');\n el.__customPathData = elOption.pathData;\n } else if (graphicType === 'image') {\n el = new graphicUtil.Image({});\n el.__customImagePath = elOption.style.image;\n } else if (graphicType === 'text') {\n el = new graphicUtil.Text({});\n el.__customText = elOption.style.text;\n } else {\n var Clz = graphicUtil[graphicType.charAt(0).toUpperCase() + graphicType.slice(1)];\n el = new Clz();\n }\n\n el.__customGraphicType = graphicType;\n el.name = elOption.name;\n return el;\n}\n\nfunction updateEl(el, dataIndex, elOption, animatableModel, data, isInit) {\n var targetProps = {};\n var elOptionStyle = elOption.style || {};\n elOption.shape && (targetProps.shape = zrUtil.clone(elOption.shape));\n elOption.position && (targetProps.position = elOption.position.slice());\n elOption.scale && (targetProps.scale = elOption.scale.slice());\n elOption.origin && (targetProps.origin = elOption.origin.slice());\n elOption.rotation && (targetProps.rotation = elOption.rotation);\n\n if (el.type === 'image' && elOption.style) {\n var targetStyle = targetProps.style = {};\n zrUtil.each(['x', 'y', 'width', 'height'], function (prop) {\n prepareStyleTransition(prop, targetStyle, elOptionStyle, el.style, isInit);\n });\n }\n\n if (el.type === 'text' && elOption.style) {\n var targetStyle = targetProps.style = {};\n zrUtil.each(['x', 'y'], function (prop) {\n prepareStyleTransition(prop, targetStyle, elOptionStyle, el.style, isInit);\n }); // Compatible with previous: both support\n // textFill and fill, textStroke and stroke in 'text' element.\n\n !elOptionStyle.hasOwnProperty('textFill') && elOptionStyle.fill && (elOptionStyle.textFill = elOptionStyle.fill);\n !elOptionStyle.hasOwnProperty('textStroke') && elOptionStyle.stroke && (elOptionStyle.textStroke = elOptionStyle.stroke);\n }\n\n if (el.type !== 'group') {\n el.useStyle(elOptionStyle); // Init animation.\n\n if (isInit) {\n el.style.opacity = 0;\n var targetOpacity = elOptionStyle.opacity;\n targetOpacity == null && (targetOpacity = 1);\n graphicUtil.initProps(el, {\n style: {\n opacity: targetOpacity\n }\n }, animatableModel, dataIndex);\n }\n }\n\n if (isInit) {\n el.attr(targetProps);\n } else {\n graphicUtil.updateProps(el, targetProps, animatableModel, dataIndex);\n } // z2 must not be null/undefined, otherwise sort error may occur.\n\n\n el.attr({\n z2: elOption.z2 || 0,\n silent: elOption.silent\n });\n elOption.styleEmphasis !== false && graphicUtil.setHoverStyle(el, elOption.styleEmphasis);\n}\n\nfunction prepareStyleTransition(prop, targetStyle, elOptionStyle, oldElStyle, isInit) {\n if (elOptionStyle[prop] != null && !isInit) {\n targetStyle[prop] = elOptionStyle[prop];\n elOptionStyle[prop] = oldElStyle[prop];\n }\n}\n\nfunction makeRenderItem(customSeries, data, ecModel, api) {\n var renderItem = customSeries.get('renderItem');\n var coordSys = customSeries.coordinateSystem;\n var prepareResult = {};\n\n if (coordSys) {\n prepareResult = coordSys.prepareCustoms ? coordSys.prepareCustoms() : prepareCustoms[coordSys.type](coordSys);\n }\n\n var userAPI = zrUtil.defaults({\n getWidth: api.getWidth,\n getHeight: api.getHeight,\n getZr: api.getZr,\n getDevicePixelRatio: api.getDevicePixelRatio,\n value: value,\n style: style,\n styleEmphasis: styleEmphasis,\n visual: visual,\n barLayout: barLayout,\n currentSeriesIndices: currentSeriesIndices,\n font: font\n }, prepareResult.api || {});\n var userParams = {\n context: {},\n seriesId: customSeries.id,\n seriesName: customSeries.name,\n seriesIndex: customSeries.seriesIndex,\n coordSys: prepareResult.coordSys,\n dataInsideLength: data.count(),\n encode: wrapEncodeDef(customSeries.getData())\n }; // Do not support call `api` asynchronously without dataIndexInside input.\n\n var currDataIndexInside;\n var currDirty = true;\n var currItemModel;\n var currLabelNormalModel;\n var currLabelEmphasisModel;\n var currLabelValueDim;\n var currVisualColor;\n return function (dataIndexInside) {\n currDataIndexInside = dataIndexInside;\n currDirty = true;\n return renderItem && renderItem(zrUtil.defaults({\n dataIndexInside: dataIndexInside,\n dataIndex: data.getRawIndex(dataIndexInside)\n }, userParams), userAPI) || {};\n }; // Do not update cache until api called.\n\n function updateCache(dataIndexInside) {\n dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n\n if (currDirty) {\n currItemModel = data.getItemModel(dataIndexInside);\n currLabelNormalModel = currItemModel.getModel(LABEL_NORMAL);\n currLabelEmphasisModel = currItemModel.getModel(LABEL_EMPHASIS);\n currLabelValueDim = findLabelValueDim(data);\n currVisualColor = data.getItemVisual(dataIndexInside, 'color');\n currDirty = false;\n }\n }\n /**\n * @public\n * @param {number|string} dim\n * @param {number} [dataIndexInside=currDataIndexInside]\n * @return {number|string} value\n */\n\n\n function value(dim, dataIndexInside) {\n dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n return data.get(data.getDimension(dim || 0), dataIndexInside);\n }\n /**\n * By default, `visual` is applied to style (to support visualMap).\n * `visual.color` is applied at `fill`. If user want apply visual.color on `stroke`,\n * it can be implemented as:\n * `api.style({stroke: api.visual('color'), fill: null})`;\n * @public\n * @param {Object} [extra]\n * @param {number} [dataIndexInside=currDataIndexInside]\n */\n\n\n function style(extra, dataIndexInside) {\n dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n updateCache(dataIndexInside);\n var itemStyle = currItemModel.getModel(ITEM_STYLE_NORMAL_PATH).getItemStyle();\n currVisualColor != null && (itemStyle.fill = currVisualColor);\n var opacity = data.getItemVisual(dataIndexInside, 'opacity');\n opacity != null && (itemStyle.opacity = opacity);\n\n if (currLabelValueDim != null) {\n graphicUtil.setTextStyle(itemStyle, currLabelNormalModel, null, {\n autoColor: currVisualColor,\n isRectText: true\n });\n itemStyle.text = currLabelNormalModel.getShallow('show') ? zrUtil.retrieve2(customSeries.getFormattedLabel(dataIndexInside, 'normal'), data.get(currLabelValueDim, dataIndexInside)) : null;\n }\n\n extra && zrUtil.extend(itemStyle, extra);\n return itemStyle;\n }\n /**\n * @public\n * @param {Object} [extra]\n * @param {number} [dataIndexInside=currDataIndexInside]\n */\n\n\n function styleEmphasis(extra, dataIndexInside) {\n dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n updateCache(dataIndexInside);\n var itemStyle = currItemModel.getModel(ITEM_STYLE_EMPHASIS_PATH).getItemStyle();\n\n if (currLabelValueDim != null) {\n graphicUtil.setTextStyle(itemStyle, currLabelEmphasisModel, null, {\n isRectText: true\n }, true);\n itemStyle.text = currLabelEmphasisModel.getShallow('show') ? zrUtil.retrieve3(customSeries.getFormattedLabel(dataIndexInside, 'emphasis'), customSeries.getFormattedLabel(dataIndexInside, 'normal'), data.get(currLabelValueDim, dataIndexInside)) : null;\n }\n\n extra && zrUtil.extend(itemStyle, extra);\n return itemStyle;\n }\n /**\n * @public\n * @param {string} visualType\n * @param {number} [dataIndexInside=currDataIndexInside]\n */\n\n\n function visual(visualType, dataIndexInside) {\n dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n return data.getItemVisual(dataIndexInside, visualType);\n }\n /**\n * @public\n * @param {number} opt.count Positive interger.\n * @param {number} [opt.barWidth]\n * @param {number} [opt.barMaxWidth]\n * @param {number} [opt.barGap]\n * @param {number} [opt.barCategoryGap]\n * @return {Object} {width, offset, offsetCenter} is not support, return undefined.\n */\n\n\n function barLayout(opt) {\n if (coordSys.getBaseAxis) {\n var baseAxis = coordSys.getBaseAxis();\n return barGrid.getLayoutOnAxis(zrUtil.defaults({\n axis: baseAxis\n }, opt), api);\n }\n }\n /**\n * @public\n * @return {Array.}\n */\n\n\n function currentSeriesIndices() {\n return ecModel.getCurrentSeriesIndices();\n }\n /**\n * @public\n * @param {Object} opt\n * @param {string} [opt.fontStyle]\n * @param {number} [opt.fontWeight]\n * @param {number} [opt.fontSize]\n * @param {string} [opt.fontFamily]\n * @return {string} font string\n */\n\n\n function font(opt) {\n return graphicUtil.getFont(opt, ecModel);\n }\n}\n\nfunction wrapEncodeDef(data) {\n var encodeDef = {};\n zrUtil.each(data.dimensions, function (dimName, dataDimIndex) {\n var dimInfo = data.getDimensionInfo(dimName);\n\n if (!dimInfo.isExtraCoord) {\n var coordDim = dimInfo.coordDim;\n var dataDims = encodeDef[coordDim] = encodeDef[coordDim] || [];\n dataDims[dimInfo.coordDimIndex] = dataDimIndex;\n }\n });\n return encodeDef;\n}\n\nfunction createOrUpdate(el, dataIndex, elOption, animatableModel, group, data) {\n el = doCreateOrUpdate(el, dataIndex, elOption, animatableModel, group, data);\n el && data.setItemGraphicEl(dataIndex, el);\n}\n\nfunction doCreateOrUpdate(el, dataIndex, elOption, animatableModel, group, data) {\n var elOptionType = elOption.type;\n\n if (el && elOptionType !== el.__customGraphicType && (elOptionType !== 'path' || elOption.pathData !== el.__customPathData) && (elOptionType !== 'image' || elOption.style.image !== el.__customImagePath) && (elOptionType !== 'text' || elOption.style.text !== el.__customText)) {\n group.remove(el);\n el = null;\n } // `elOption.type` is undefined when `renderItem` returns nothing.\n\n\n if (elOptionType == null) {\n return;\n }\n\n var isInit = !el;\n !el && (el = createEl(elOption));\n updateEl(el, dataIndex, elOption, animatableModel, data, isInit);\n\n if (elOptionType === 'group') {\n var oldChildren = el.children() || [];\n var newChildren = elOption.children || [];\n\n if (elOption.diffChildrenByName) {\n // lower performance.\n diffGroupChildren({\n oldChildren: oldChildren,\n newChildren: newChildren,\n dataIndex: dataIndex,\n animatableModel: animatableModel,\n group: el,\n data: data\n });\n } else {\n // better performance.\n var index = 0;\n\n for (; index < newChildren.length; index++) {\n doCreateOrUpdate(el.childAt(index), dataIndex, newChildren[index], animatableModel, el, data);\n }\n\n for (; index < oldChildren.length; index++) {\n oldChildren[index] && el.remove(oldChildren[index]);\n }\n }\n }\n\n group.add(el);\n return el;\n}\n\nfunction diffGroupChildren(context) {\n new DataDiffer(context.oldChildren, context.newChildren, getKey, getKey, context).add(processAddUpdate).update(processAddUpdate).remove(processRemove).execute();\n}\n\nfunction getKey(item, idx) {\n var name = item && item.name;\n return name != null ? name : GROUP_DIFF_PREFIX + idx;\n}\n\nfunction processAddUpdate(newIndex, oldIndex) {\n var context = this.context;\n var childOption = newIndex != null ? context.newChildren[newIndex] : null;\n var child = oldIndex != null ? context.oldChildren[oldIndex] : null;\n doCreateOrUpdate(child, context.dataIndex, childOption, context.animatableModel, context.group, context.data);\n}\n\nfunction processRemove(oldIndex) {\n var context = this.context;\n var child = context.oldChildren[oldIndex];\n child && context.group.remove(child);\n}","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar formatUtil = require(\"./format\");\n\nvar nubmerUtil = require(\"./number\");\n\nvar Model = require(\"../model/Model\");\n\nvar each = zrUtil.each;\nvar isObject = zrUtil.isObject;\n/**\n * If value is not array, then translate it to array.\n * @param {*} value\n * @return {Array} [value] or value\n */\n\nfunction normalizeToArray(value) {\n return value instanceof Array ? value : value == null ? [] : [value];\n}\n/**\n * Sync default option between normal and emphasis like `position` and `show`\n * In case some one will write code like\n * label: {\n * normal: {\n * show: false,\n * position: 'outside',\n * fontSize: 18\n * },\n * emphasis: {\n * show: true\n * }\n * }\n * @param {Object} opt\n * @param {Array.} subOpts\n */\n\n\nfunction defaultEmphasis(opt, subOpts) {\n if (opt) {\n var emphasisOpt = opt.emphasis = opt.emphasis || {};\n var normalOpt = opt.normal = opt.normal || {}; // Default emphasis option from normal\n\n for (var i = 0, len = subOpts.length; i < len; i++) {\n var subOptName = subOpts[i];\n\n if (!emphasisOpt.hasOwnProperty(subOptName) && normalOpt.hasOwnProperty(subOptName)) {\n emphasisOpt[subOptName] = normalOpt[subOptName];\n }\n }\n }\n}\n\nvar TEXT_STYLE_OPTIONS = ['fontStyle', 'fontWeight', 'fontSize', 'fontFamily', 'rich', 'tag', 'color', 'textBorderColor', 'textBorderWidth', 'width', 'height', 'lineHeight', 'align', 'verticalAlign', 'baseline', 'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY', 'textShadowColor', 'textShadowBlur', 'textShadowOffsetX', 'textShadowOffsetY', 'backgroundColor', 'borderColor', 'borderWidth', 'borderRadius', 'padding']; // modelUtil.LABEL_OPTIONS = modelUtil.TEXT_STYLE_OPTIONS.concat([\n// 'position', 'offset', 'rotate', 'origin', 'show', 'distance', 'formatter',\n// 'fontStyle', 'fontWeight', 'fontSize', 'fontFamily',\n// // FIXME: deprecated, check and remove it.\n// 'textStyle'\n// ]);\n\n/**\n * data could be [12, 2323, {value: 223}, [1221, 23], {value: [2, 23]}]\n * This helper method retieves value from data.\n * @param {string|number|Date|Array|Object} dataItem\n * @return {number|string|Date|Array.}\n */\n\nfunction getDataItemValue(dataItem) {\n // Performance sensitive.\n return dataItem && (dataItem.value == null ? dataItem : dataItem.value);\n}\n/**\n * data could be [12, 2323, {value: 223}, [1221, 23], {value: [2, 23]}]\n * This helper method determine if dataItem has extra option besides value\n * @param {string|number|Date|Array|Object} dataItem\n */\n\n\nfunction isDataItemOption(dataItem) {\n return isObject(dataItem) && !(dataItem instanceof Array); // // markLine data can be array\n // && !(dataItem[0] && isObject(dataItem[0]) && !(dataItem[0] instanceof Array));\n}\n/**\n * This helper method convert value in data.\n * @param {string|number|Date} value\n * @param {Object|string} [dimInfo] If string (like 'x'), dimType defaults 'number'.\n */\n\n\nfunction converDataValue(value, dimInfo) {\n // Performance sensitive.\n var dimType = dimInfo && dimInfo.type;\n\n if (dimType === 'ordinal') {\n return value;\n }\n\n if (dimType === 'time' // spead up when using timestamp\n && typeof value !== 'number' && value != null && value !== '-') {\n value = +nubmerUtil.parseDate(value);\n } // dimType defaults 'number'.\n // If dimType is not ordinal and value is null or undefined or NaN or '-',\n // parse to NaN.\n\n\n return value == null || value === '' ? NaN : +value; // If string (like '-'), using '+' parse to NaN\n}\n/**\n * Create a model proxy to be used in tooltip for edge data, markLine data, markPoint data.\n * @param {module:echarts/data/List} data\n * @param {Object} opt\n * @param {string} [opt.seriesIndex]\n * @param {Object} [opt.name]\n * @param {Object} [opt.mainType]\n * @param {Object} [opt.subType]\n */\n\n\nfunction createDataFormatModel(data, opt) {\n var model = new Model();\n zrUtil.mixin(model, dataFormatMixin);\n model.seriesIndex = opt.seriesIndex;\n model.name = opt.name || '';\n model.mainType = opt.mainType;\n model.subType = opt.subType;\n\n model.getData = function () {\n return data;\n };\n\n return model;\n} // PENDING A little ugly\n\n\nvar dataFormatMixin = {\n /**\n * Get params for formatter\n * @param {number} dataIndex\n * @param {string} [dataType]\n * @return {Object}\n */\n getDataParams: function (dataIndex, dataType) {\n var data = this.getData(dataType);\n var rawValue = this.getRawValue(dataIndex, dataType);\n var rawDataIndex = data.getRawIndex(dataIndex);\n var name = data.getName(dataIndex, true);\n var itemOpt = data.getRawDataItem(dataIndex);\n var color = data.getItemVisual(dataIndex, 'color');\n return {\n componentType: this.mainType,\n componentSubType: this.subType,\n seriesType: this.mainType === 'series' ? this.subType : null,\n seriesIndex: this.seriesIndex,\n seriesId: this.id,\n seriesName: this.name,\n name: name,\n dataIndex: rawDataIndex,\n data: itemOpt,\n dataType: dataType,\n value: rawValue,\n color: color,\n marker: formatUtil.getTooltipMarker(color),\n // Param name list for mapping `a`, `b`, `c`, `d`, `e`\n $vars: ['seriesName', 'name', 'value']\n };\n },\n\n /**\n * Format label\n * @param {number} dataIndex\n * @param {string} [status='normal'] 'normal' or 'emphasis'\n * @param {string} [dataType]\n * @param {number} [dimIndex]\n * @param {string} [labelProp='label']\n * @return {string}\n */\n getFormattedLabel: function (dataIndex, status, dataType, dimIndex, labelProp) {\n status = status || 'normal';\n var data = this.getData(dataType);\n var itemModel = data.getItemModel(dataIndex);\n var params = this.getDataParams(dataIndex, dataType);\n\n if (dimIndex != null && params.value instanceof Array) {\n params.value = params.value[dimIndex];\n }\n\n var formatter = itemModel.get([labelProp || 'label', status, 'formatter']);\n\n if (typeof formatter === 'function') {\n params.status = status;\n return formatter(params);\n } else if (typeof formatter === 'string') {\n return formatUtil.formatTpl(formatter, params);\n }\n },\n\n /**\n * Get raw value in option\n * @param {number} idx\n * @param {string} [dataType]\n * @return {Object}\n */\n getRawValue: function (idx, dataType) {\n var data = this.getData(dataType);\n var dataItem = data.getRawDataItem(idx);\n\n if (dataItem != null) {\n return isObject(dataItem) && !(dataItem instanceof Array) ? dataItem.value : dataItem;\n }\n },\n\n /**\n * Should be implemented.\n * @param {number} dataIndex\n * @param {boolean} [multipleSeries=false]\n * @param {number} [dataType]\n * @return {string} tooltip string\n */\n formatTooltip: zrUtil.noop\n};\n/**\n * Mapping to exists for merge.\n *\n * @public\n * @param {Array.|Array.} exists\n * @param {Object|Array.} newCptOptions\n * @return {Array.} Result, like [{exist: ..., option: ...}, {}],\n * index of which is the same as exists.\n */\n\nfunction mappingToExists(exists, newCptOptions) {\n // Mapping by the order by original option (but not order of\n // new option) in merge mode. Because we should ensure\n // some specified index (like xAxisIndex) is consistent with\n // original option, which is easy to understand, espatially in\n // media query. And in most case, merge option is used to\n // update partial option but not be expected to change order.\n newCptOptions = (newCptOptions || []).slice();\n var result = zrUtil.map(exists || [], function (obj, index) {\n return {\n exist: obj\n };\n }); // Mapping by id or name if specified.\n\n each(newCptOptions, function (cptOption, index) {\n if (!isObject(cptOption)) {\n return;\n } // id has highest priority.\n\n\n for (var i = 0; i < result.length; i++) {\n if (!result[i].option // Consider name: two map to one.\n && cptOption.id != null && result[i].exist.id === cptOption.id + '') {\n result[i].option = cptOption;\n newCptOptions[index] = null;\n return;\n }\n }\n\n for (var i = 0; i < result.length; i++) {\n var exist = result[i].exist;\n\n if (!result[i].option // Consider name: two map to one.\n // Can not match when both ids exist but different.\n && (exist.id == null || cptOption.id == null) && cptOption.name != null && !isIdInner(cptOption) && !isIdInner(exist) && exist.name === cptOption.name + '') {\n result[i].option = cptOption;\n newCptOptions[index] = null;\n return;\n }\n }\n }); // Otherwise mapping by index.\n\n each(newCptOptions, function (cptOption, index) {\n if (!isObject(cptOption)) {\n return;\n }\n\n var i = 0;\n\n for (; i < result.length; i++) {\n var exist = result[i].exist;\n\n if (!result[i].option // Existing model that already has id should be able to\n // mapped to (because after mapping performed model may\n // be assigned with a id, whish should not affect next\n // mapping), except those has inner id.\n && !isIdInner(exist) // Caution:\n // Do not overwrite id. But name can be overwritten,\n // because axis use name as 'show label text'.\n // 'exist' always has id and name and we dont\n // need to check it.\n && cptOption.id == null) {\n result[i].option = cptOption;\n break;\n }\n }\n\n if (i >= result.length) {\n result.push({\n option: cptOption\n });\n }\n });\n return result;\n}\n/**\n * Make id and name for mapping result (result of mappingToExists)\n * into `keyInfo` field.\n *\n * @public\n * @param {Array.} Result, like [{exist: ..., option: ...}, {}],\n * which order is the same as exists.\n * @return {Array.} The input.\n */\n\n\nfunction makeIdAndName(mapResult) {\n // We use this id to hash component models and view instances\n // in echarts. id can be specified by user, or auto generated.\n // The id generation rule ensures new view instance are able\n // to mapped to old instance when setOption are called in\n // no-merge mode. So we generate model id by name and plus\n // type in view id.\n // name can be duplicated among components, which is convenient\n // to specify multi components (like series) by one name.\n // Ensure that each id is distinct.\n var idMap = zrUtil.createHashMap();\n each(mapResult, function (item, index) {\n var existCpt = item.exist;\n existCpt && idMap.set(existCpt.id, item);\n });\n each(mapResult, function (item, index) {\n var opt = item.option;\n zrUtil.assert(!opt || opt.id == null || !idMap.get(opt.id) || idMap.get(opt.id) === item, 'id duplicates: ' + (opt && opt.id));\n opt && opt.id != null && idMap.set(opt.id, item);\n !item.keyInfo && (item.keyInfo = {});\n }); // Make name and id.\n\n each(mapResult, function (item, index) {\n var existCpt = item.exist;\n var opt = item.option;\n var keyInfo = item.keyInfo;\n\n if (!isObject(opt)) {\n return;\n } // name can be overwitten. Consider case: axis.name = '20km'.\n // But id generated by name will not be changed, which affect\n // only in that case: setOption with 'not merge mode' and view\n // instance will be recreated, which can be accepted.\n\n\n keyInfo.name = opt.name != null ? opt.name + '' : existCpt ? existCpt.name : '\\0-'; // name may be displayed on screen, so use '-'.\n\n if (existCpt) {\n keyInfo.id = existCpt.id;\n } else if (opt.id != null) {\n keyInfo.id = opt.id + '';\n } else {\n // Consider this situatoin:\n // optionA: [{name: 'a'}, {name: 'a'}, {..}]\n // optionB [{..}, {name: 'a'}, {name: 'a'}]\n // Series with the same name between optionA and optionB\n // should be mapped.\n var idNum = 0;\n\n do {\n keyInfo.id = '\\0' + keyInfo.name + '\\0' + idNum++;\n } while (idMap.get(keyInfo.id));\n }\n\n idMap.set(keyInfo.id, item);\n });\n}\n/**\n * @public\n * @param {Object} cptOption\n * @return {boolean}\n */\n\n\nfunction isIdInner(cptOption) {\n return isObject(cptOption) && cptOption.id && (cptOption.id + '').indexOf('\\0_ec_\\0') === 0;\n}\n/**\n * A helper for removing duplicate items between batchA and batchB,\n * and in themselves, and categorize by series.\n *\n * @param {Array.} batchA Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...]\n * @param {Array.} batchB Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...]\n * @return {Array., Array.>} result: [resultBatchA, resultBatchB]\n */\n\n\nfunction compressBatches(batchA, batchB) {\n var mapA = {};\n var mapB = {};\n makeMap(batchA || [], mapA);\n makeMap(batchB || [], mapB, mapA);\n return [mapToArray(mapA), mapToArray(mapB)];\n\n function makeMap(sourceBatch, map, otherMap) {\n for (var i = 0, len = sourceBatch.length; i < len; i++) {\n var seriesId = sourceBatch[i].seriesId;\n var dataIndices = normalizeToArray(sourceBatch[i].dataIndex);\n var otherDataIndices = otherMap && otherMap[seriesId];\n\n for (var j = 0, lenj = dataIndices.length; j < lenj; j++) {\n var dataIndex = dataIndices[j];\n\n if (otherDataIndices && otherDataIndices[dataIndex]) {\n otherDataIndices[dataIndex] = null;\n } else {\n (map[seriesId] || (map[seriesId] = {}))[dataIndex] = 1;\n }\n }\n }\n }\n\n function mapToArray(map, isData) {\n var result = [];\n\n for (var i in map) {\n if (map.hasOwnProperty(i) && map[i] != null) {\n if (isData) {\n result.push(+i);\n } else {\n var dataIndices = mapToArray(map[i], true);\n dataIndices.length && result.push({\n seriesId: i,\n dataIndex: dataIndices\n });\n }\n }\n }\n\n return result;\n }\n}\n/**\n * @param {module:echarts/data/List} data\n * @param {Object} payload Contains dataIndex (means rawIndex) / dataIndexInside / name\n * each of which can be Array or primary type.\n * @return {number|Array.} dataIndex If not found, return undefined/null.\n */\n\n\nfunction queryDataIndex(data, payload) {\n if (payload.dataIndexInside != null) {\n return payload.dataIndexInside;\n } else if (payload.dataIndex != null) {\n return zrUtil.isArray(payload.dataIndex) ? zrUtil.map(payload.dataIndex, function (value) {\n return data.indexOfRawIndex(value);\n }) : data.indexOfRawIndex(payload.dataIndex);\n } else if (payload.name != null) {\n return zrUtil.isArray(payload.name) ? zrUtil.map(payload.name, function (value) {\n return data.indexOfName(value);\n }) : data.indexOfName(payload.name);\n }\n}\n/**\n * Enable property storage to any host object.\n * Notice: Serialization is not supported.\n *\n * For example:\n * var get = modelUitl.makeGetter();\n *\n * function some(hostObj) {\n * get(hostObj)._someProperty = 1212;\n * ...\n * }\n *\n * @return {Function}\n */\n\n\nvar makeGetter = function () {\n var index = 0;\n return function () {\n var key = '\\0__ec_prop_getter_' + index++;\n return function (hostObj) {\n return hostObj[key] || (hostObj[key] = {});\n };\n };\n}();\n/**\n * @param {module:echarts/model/Global} ecModel\n * @param {string|Object} finder\n * If string, e.g., 'geo', means {geoIndex: 0}.\n * If Object, could contain some of these properties below:\n * {\n * seriesIndex, seriesId, seriesName,\n * geoIndex, geoId, geoName,\n * bmapIndex, bmapId, bmapName,\n * xAxisIndex, xAxisId, xAxisName,\n * yAxisIndex, yAxisId, yAxisName,\n * gridIndex, gridId, gridName,\n * ... (can be extended)\n * }\n * Each properties can be number|string|Array.|Array.\n * For example, a finder could be\n * {\n * seriesIndex: 3,\n * geoId: ['aa', 'cc'],\n * gridName: ['xx', 'rr']\n * }\n * xxxIndex can be set as 'all' (means all xxx) or 'none' (means not specify)\n * If nothing or null/undefined specified, return nothing.\n * @param {Object} [opt]\n * @param {string} [opt.defaultMainType]\n * @param {Array.} [opt.includeMainTypes]\n * @return {Object} result like:\n * {\n * seriesModels: [seriesModel1, seriesModel2],\n * seriesModel: seriesModel1, // The first model\n * geoModels: [geoModel1, geoModel2],\n * geoModel: geoModel1, // The first model\n * ...\n * }\n */\n\n\nfunction parseFinder(ecModel, finder, opt) {\n if (zrUtil.isString(finder)) {\n var obj = {};\n obj[finder + 'Index'] = 0;\n finder = obj;\n }\n\n var defaultMainType = opt && opt.defaultMainType;\n\n if (defaultMainType && !has(finder, defaultMainType + 'Index') && !has(finder, defaultMainType + 'Id') && !has(finder, defaultMainType + 'Name')) {\n finder[defaultMainType + 'Index'] = 0;\n }\n\n var result = {};\n each(finder, function (value, key) {\n var value = finder[key]; // Exclude 'dataIndex' and other illgal keys.\n\n if (key === 'dataIndex' || key === 'dataIndexInside') {\n result[key] = value;\n return;\n }\n\n var parsedKey = key.match(/^(\\w+)(Index|Id|Name)$/) || [];\n var mainType = parsedKey[1];\n var queryType = (parsedKey[2] || '').toLowerCase();\n\n if (!mainType || !queryType || value == null || queryType === 'index' && value === 'none' || opt && opt.includeMainTypes && zrUtil.indexOf(opt.includeMainTypes, mainType) < 0) {\n return;\n }\n\n var queryParam = {\n mainType: mainType\n };\n\n if (queryType !== 'index' || value !== 'all') {\n queryParam[queryType] = value;\n }\n\n var models = ecModel.queryComponents(queryParam);\n result[mainType + 'Models'] = models;\n result[mainType + 'Model'] = models[0];\n });\n return result;\n}\n/**\n * @see {module:echarts/data/helper/completeDimensions}\n * @param {module:echarts/data/List} data\n * @param {string|number} dataDim\n * @return {string}\n */\n\n\nfunction dataDimToCoordDim(data, dataDim) {\n var dimensions = data.dimensions;\n dataDim = data.getDimension(dataDim);\n\n for (var i = 0; i < dimensions.length; i++) {\n var dimItem = data.getDimensionInfo(dimensions[i]);\n\n if (dimItem.name === dataDim) {\n return dimItem.coordDim;\n }\n }\n}\n/**\n * @see {module:echarts/data/helper/completeDimensions}\n * @param {module:echarts/data/List} data\n * @param {string} coordDim\n * @return {Array.} data dimensions on the coordDim.\n */\n\n\nfunction coordDimToDataDim(data, coordDim) {\n var dataDim = [];\n each(data.dimensions, function (dimName) {\n var dimItem = data.getDimensionInfo(dimName);\n\n if (dimItem.coordDim === coordDim) {\n dataDim[dimItem.coordDimIndex] = dimItem.name;\n }\n });\n return dataDim;\n}\n/**\n * @see {module:echarts/data/helper/completeDimensions}\n * @param {module:echarts/data/List} data\n * @param {string} otherDim Can be `otherDims`\n * like 'label' or 'tooltip'.\n * @return {Array.} data dimensions on the otherDim.\n */\n\n\nfunction otherDimToDataDim(data, otherDim) {\n var dataDim = [];\n each(data.dimensions, function (dimName) {\n var dimItem = data.getDimensionInfo(dimName);\n var otherDims = dimItem.otherDims;\n var dimIndex = otherDims[otherDim];\n\n if (dimIndex != null && dimIndex !== false) {\n dataDim[dimIndex] = dimItem.name;\n }\n });\n return dataDim;\n}\n\nfunction has(obj, prop) {\n return obj && obj.hasOwnProperty(prop);\n}\n\nexports.normalizeToArray = normalizeToArray;\nexports.defaultEmphasis = defaultEmphasis;\nexports.TEXT_STYLE_OPTIONS = TEXT_STYLE_OPTIONS;\nexports.getDataItemValue = getDataItemValue;\nexports.isDataItemOption = isDataItemOption;\nexports.converDataValue = converDataValue;\nexports.createDataFormatModel = createDataFormatModel;\nexports.dataFormatMixin = dataFormatMixin;\nexports.mappingToExists = mappingToExists;\nexports.makeIdAndName = makeIdAndName;\nexports.isIdInner = isIdInner;\nexports.compressBatches = compressBatches;\nexports.queryDataIndex = queryDataIndex;\nexports.makeGetter = makeGetter;\nexports.parseFinder = parseFinder;\nexports.dataDimToCoordDim = dataDimToCoordDim;\nexports.coordDimToDataDim = coordDimToDataDim;\nexports.otherDimToDataDim = otherDimToDataDim;","var clazzUtil = require(\"../util/clazz\");\n\n/**\n * // Scale class management\n * @module echarts/scale/Scale\n */\n\n/**\n * @param {Object} [setting]\n */\nfunction Scale(setting) {\n this._setting = setting || {};\n /**\n * Extent\n * @type {Array.}\n * @protected\n */\n\n this._extent = [Infinity, -Infinity];\n /**\n * Step is calculated in adjustExtent\n * @type {Array.}\n * @protected\n */\n\n this._interval = 0;\n this.init && this.init.apply(this, arguments);\n}\n/**\n * Parse input val to valid inner number.\n * @param {*} val\n * @return {number}\n */\n\n\nScale.prototype.parse = function (val) {\n // Notice: This would be a trap here, If the implementation\n // of this method depends on extent, and this method is used\n // before extent set (like in dataZoom), it would be wrong.\n // Nevertheless, parse does not depend on extent generally.\n return val;\n};\n\nScale.prototype.getSetting = function (name) {\n return this._setting[name];\n};\n\nScale.prototype.contain = function (val) {\n var extent = this._extent;\n return val >= extent[0] && val <= extent[1];\n};\n/**\n * Normalize value to linear [0, 1], return 0.5 if extent span is 0\n * @param {number} val\n * @return {number}\n */\n\n\nScale.prototype.normalize = function (val) {\n var extent = this._extent;\n\n if (extent[1] === extent[0]) {\n return 0.5;\n }\n\n return (val - extent[0]) / (extent[1] - extent[0]);\n};\n/**\n * Scale normalized value\n * @param {number} val\n * @return {number}\n */\n\n\nScale.prototype.scale = function (val) {\n var extent = this._extent;\n return val * (extent[1] - extent[0]) + extent[0];\n};\n/**\n * Set extent from data\n * @param {Array.} other\n */\n\n\nScale.prototype.unionExtent = function (other) {\n var extent = this._extent;\n other[0] < extent[0] && (extent[0] = other[0]);\n other[1] > extent[1] && (extent[1] = other[1]); // not setExtent because in log axis it may transformed to power\n // this.setExtent(extent[0], extent[1]);\n};\n/**\n * Set extent from data\n * @param {module:echarts/data/List} data\n * @param {string} dim\n */\n\n\nScale.prototype.unionExtentFromData = function (data, dim) {\n this.unionExtent(data.getDataExtent(dim, true));\n};\n/**\n * Get extent\n * @return {Array.}\n */\n\n\nScale.prototype.getExtent = function () {\n return this._extent.slice();\n};\n/**\n * Set extent\n * @param {number} start\n * @param {number} end\n */\n\n\nScale.prototype.setExtent = function (start, end) {\n var thisExtent = this._extent;\n\n if (!isNaN(start)) {\n thisExtent[0] = start;\n }\n\n if (!isNaN(end)) {\n thisExtent[1] = end;\n }\n};\n/**\n * @return {Array.}\n */\n\n\nScale.prototype.getTicksLabels = function () {\n var labels = [];\n var ticks = this.getTicks();\n\n for (var i = 0; i < ticks.length; i++) {\n labels.push(this.getLabel(ticks[i]));\n }\n\n return labels;\n};\n/**\n * When axis extent depends on data and no data exists,\n * axis ticks should not be drawn, which is named 'blank'.\n */\n\n\nScale.prototype.isBlank = function () {\n return this._isBlank;\n},\n/**\n * When axis extent depends on data and no data exists,\n * axis ticks should not be drawn, which is named 'blank'.\n */\nScale.prototype.setBlank = function (isBlank) {\n this._isBlank = isBlank;\n};\nclazzUtil.enableClassExtend(Scale);\nclazzUtil.enableClassManagement(Scale, {\n registerWhenExtend: true\n});\nvar _default = Scale;\nmodule.exports = _default;","var zrUtil = require(\"../core/util\");\n\nvar Element = require(\"../Element\");\n\nvar BoundingRect = require(\"../core/BoundingRect\");\n\n/**\n * Group是一个容器,可以插入子节点,Group的变换也会被应用到子节点上\n * @module zrender/graphic/Group\n * @example\n * var Group = require('zrender/container/Group');\n * var Circle = require('zrender/graphic/shape/Circle');\n * var g = new Group();\n * g.position[0] = 100;\n * g.position[1] = 100;\n * g.add(new Circle({\n * style: {\n * x: 100,\n * y: 100,\n * r: 20,\n * }\n * }));\n * zr.add(g);\n */\n\n/**\n * @alias module:zrender/graphic/Group\n * @constructor\n * @extends module:zrender/mixin/Transformable\n * @extends module:zrender/mixin/Eventful\n */\nvar Group = function (opts) {\n opts = opts || {};\n Element.call(this, opts);\n\n for (var key in opts) {\n if (opts.hasOwnProperty(key)) {\n this[key] = opts[key];\n }\n }\n\n this._children = [];\n this.__storage = null;\n this.__dirty = true;\n};\n\nGroup.prototype = {\n constructor: Group,\n isGroup: true,\n\n /**\n * @type {string}\n */\n type: 'group',\n\n /**\n * 所有子孙元素是否响应鼠标事件\n * @name module:/zrender/container/Group#silent\n * @type {boolean}\n * @default false\n */\n silent: false,\n\n /**\n * @return {Array.}\n */\n children: function () {\n return this._children.slice();\n },\n\n /**\n * 获取指定 index 的儿子节点\n * @param {number} idx\n * @return {module:zrender/Element}\n */\n childAt: function (idx) {\n return this._children[idx];\n },\n\n /**\n * 获取指定名字的儿子节点\n * @param {string} name\n * @return {module:zrender/Element}\n */\n childOfName: function (name) {\n var children = this._children;\n\n for (var i = 0; i < children.length; i++) {\n if (children[i].name === name) {\n return children[i];\n }\n }\n },\n\n /**\n * @return {number}\n */\n childCount: function () {\n return this._children.length;\n },\n\n /**\n * 添加子节点到最后\n * @param {module:zrender/Element} child\n */\n add: function (child) {\n if (child && child !== this && child.parent !== this) {\n this._children.push(child);\n\n this._doAdd(child);\n }\n\n return this;\n },\n\n /**\n * 添加子节点在 nextSibling 之前\n * @param {module:zrender/Element} child\n * @param {module:zrender/Element} nextSibling\n */\n addBefore: function (child, nextSibling) {\n if (child && child !== this && child.parent !== this && nextSibling && nextSibling.parent === this) {\n var children = this._children;\n var idx = children.indexOf(nextSibling);\n\n if (idx >= 0) {\n children.splice(idx, 0, child);\n\n this._doAdd(child);\n }\n }\n\n return this;\n },\n _doAdd: function (child) {\n if (child.parent) {\n child.parent.remove(child);\n }\n\n child.parent = this;\n var storage = this.__storage;\n var zr = this.__zr;\n\n if (storage && storage !== child.__storage) {\n storage.addToStorage(child);\n\n if (child instanceof Group) {\n child.addChildrenToStorage(storage);\n }\n }\n\n zr && zr.refresh();\n },\n\n /**\n * 移除子节点\n * @param {module:zrender/Element} child\n */\n remove: function (child) {\n var zr = this.__zr;\n var storage = this.__storage;\n var children = this._children;\n var idx = zrUtil.indexOf(children, child);\n\n if (idx < 0) {\n return this;\n }\n\n children.splice(idx, 1);\n child.parent = null;\n\n if (storage) {\n storage.delFromStorage(child);\n\n if (child instanceof Group) {\n child.delChildrenFromStorage(storage);\n }\n }\n\n zr && zr.refresh();\n return this;\n },\n\n /**\n * 移除所有子节点\n */\n removeAll: function () {\n var children = this._children;\n var storage = this.__storage;\n var child;\n var i;\n\n for (i = 0; i < children.length; i++) {\n child = children[i];\n\n if (storage) {\n storage.delFromStorage(child);\n\n if (child instanceof Group) {\n child.delChildrenFromStorage(storage);\n }\n }\n\n child.parent = null;\n }\n\n children.length = 0;\n return this;\n },\n\n /**\n * 遍历所有子节点\n * @param {Function} cb\n * @param {} context\n */\n eachChild: function (cb, context) {\n var children = this._children;\n\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n cb.call(context, child, i);\n }\n\n return this;\n },\n\n /**\n * 深度优先遍历所有子孙节点\n * @param {Function} cb\n * @param {} context\n */\n traverse: function (cb, context) {\n for (var i = 0; i < this._children.length; i++) {\n var child = this._children[i];\n cb.call(context, child);\n\n if (child.type === 'group') {\n child.traverse(cb, context);\n }\n }\n\n return this;\n },\n addChildrenToStorage: function (storage) {\n for (var i = 0; i < this._children.length; i++) {\n var child = this._children[i];\n storage.addToStorage(child);\n\n if (child instanceof Group) {\n child.addChildrenToStorage(storage);\n }\n }\n },\n delChildrenFromStorage: function (storage) {\n for (var i = 0; i < this._children.length; i++) {\n var child = this._children[i];\n storage.delFromStorage(child);\n\n if (child instanceof Group) {\n child.delChildrenFromStorage(storage);\n }\n }\n },\n dirty: function () {\n this.__dirty = true;\n this.__zr && this.__zr.refresh();\n return this;\n },\n\n /**\n * @return {module:zrender/core/BoundingRect}\n */\n getBoundingRect: function (includeChildren) {\n // TODO Caching\n var rect = null;\n var tmpRect = new BoundingRect(0, 0, 0, 0);\n var children = includeChildren || this._children;\n var tmpMat = [];\n\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n\n if (child.ignore || child.invisible) {\n continue;\n }\n\n var childRect = child.getBoundingRect();\n var transform = child.getLocalTransform(tmpMat); // TODO\n // The boundingRect cacluated by transforming original\n // rect may be bigger than the actual bundingRect when rotation\n // is used. (Consider a circle rotated aginst its center, where\n // the actual boundingRect should be the same as that not be\n // rotated.) But we can not find better approach to calculate\n // actual boundingRect yet, considering performance.\n\n if (transform) {\n tmpRect.copy(childRect);\n tmpRect.applyTransform(transform);\n rect = rect || tmpRect.clone();\n rect.union(tmpRect);\n } else {\n rect = rect || childRect.clone();\n rect.union(childRect);\n }\n }\n\n return rect || tmpRect;\n }\n};\nzrUtil.inherits(Group, Element);\nvar _default = Group;\nmodule.exports = _default;","var vec2 = require(\"./vector\");\n\nvar curve = require(\"./curve\");\n\n/**\n * @author Yi Shen(https://github.com/pissang)\n */\nvar mathMin = Math.min;\nvar mathMax = Math.max;\nvar mathSin = Math.sin;\nvar mathCos = Math.cos;\nvar PI2 = Math.PI * 2;\nvar start = vec2.create();\nvar end = vec2.create();\nvar extremity = vec2.create();\n/**\n * 从顶点数组中计算出最小包围盒,写入`min`和`max`中\n * @module zrender/core/bbox\n * @param {Array} points 顶点数组\n * @param {number} min\n * @param {number} max\n */\n\nfunction fromPoints(points, min, max) {\n if (points.length === 0) {\n return;\n }\n\n var p = points[0];\n var left = p[0];\n var right = p[0];\n var top = p[1];\n var bottom = p[1];\n var i;\n\n for (i = 1; i < points.length; i++) {\n p = points[i];\n left = mathMin(left, p[0]);\n right = mathMax(right, p[0]);\n top = mathMin(top, p[1]);\n bottom = mathMax(bottom, p[1]);\n }\n\n min[0] = left;\n min[1] = top;\n max[0] = right;\n max[1] = bottom;\n}\n/**\n * @memberOf module:zrender/core/bbox\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {Array.} min\n * @param {Array.} max\n */\n\n\nfunction fromLine(x0, y0, x1, y1, min, max) {\n min[0] = mathMin(x0, x1);\n min[1] = mathMin(y0, y1);\n max[0] = mathMax(x0, x1);\n max[1] = mathMax(y0, y1);\n}\n\nvar xDim = [];\nvar yDim = [];\n/**\n * 从三阶贝塞尔曲线(p0, p1, p2, p3)中计算出最小包围盒,写入`min`和`max`中\n * @memberOf module:zrender/core/bbox\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x3\n * @param {number} y3\n * @param {Array.} min\n * @param {Array.} max\n */\n\nfunction fromCubic(x0, y0, x1, y1, x2, y2, x3, y3, min, max) {\n var cubicExtrema = curve.cubicExtrema;\n var cubicAt = curve.cubicAt;\n var i;\n var n = cubicExtrema(x0, x1, x2, x3, xDim);\n min[0] = Infinity;\n min[1] = Infinity;\n max[0] = -Infinity;\n max[1] = -Infinity;\n\n for (i = 0; i < n; i++) {\n var x = cubicAt(x0, x1, x2, x3, xDim[i]);\n min[0] = mathMin(x, min[0]);\n max[0] = mathMax(x, max[0]);\n }\n\n n = cubicExtrema(y0, y1, y2, y3, yDim);\n\n for (i = 0; i < n; i++) {\n var y = cubicAt(y0, y1, y2, y3, yDim[i]);\n min[1] = mathMin(y, min[1]);\n max[1] = mathMax(y, max[1]);\n }\n\n min[0] = mathMin(x0, min[0]);\n max[0] = mathMax(x0, max[0]);\n min[0] = mathMin(x3, min[0]);\n max[0] = mathMax(x3, max[0]);\n min[1] = mathMin(y0, min[1]);\n max[1] = mathMax(y0, max[1]);\n min[1] = mathMin(y3, min[1]);\n max[1] = mathMax(y3, max[1]);\n}\n/**\n * 从二阶贝塞尔曲线(p0, p1, p2)中计算出最小包围盒,写入`min`和`max`中\n * @memberOf module:zrender/core/bbox\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {Array.} min\n * @param {Array.} max\n */\n\n\nfunction fromQuadratic(x0, y0, x1, y1, x2, y2, min, max) {\n var quadraticExtremum = curve.quadraticExtremum;\n var quadraticAt = curve.quadraticAt; // Find extremities, where derivative in x dim or y dim is zero\n\n var tx = mathMax(mathMin(quadraticExtremum(x0, x1, x2), 1), 0);\n var ty = mathMax(mathMin(quadraticExtremum(y0, y1, y2), 1), 0);\n var x = quadraticAt(x0, x1, x2, tx);\n var y = quadraticAt(y0, y1, y2, ty);\n min[0] = mathMin(x0, x2, x);\n min[1] = mathMin(y0, y2, y);\n max[0] = mathMax(x0, x2, x);\n max[1] = mathMax(y0, y2, y);\n}\n/**\n * 从圆弧中计算出最小包围盒,写入`min`和`max`中\n * @method\n * @memberOf module:zrender/core/bbox\n * @param {number} x\n * @param {number} y\n * @param {number} rx\n * @param {number} ry\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {number} anticlockwise\n * @param {Array.} min\n * @param {Array.} max\n */\n\n\nfunction fromArc(x, y, rx, ry, startAngle, endAngle, anticlockwise, min, max) {\n var vec2Min = vec2.min;\n var vec2Max = vec2.max;\n var diff = Math.abs(startAngle - endAngle);\n\n if (diff % PI2 < 1e-4 && diff > 1e-4) {\n // Is a circle\n min[0] = x - rx;\n min[1] = y - ry;\n max[0] = x + rx;\n max[1] = y + ry;\n return;\n }\n\n start[0] = mathCos(startAngle) * rx + x;\n start[1] = mathSin(startAngle) * ry + y;\n end[0] = mathCos(endAngle) * rx + x;\n end[1] = mathSin(endAngle) * ry + y;\n vec2Min(min, start, end);\n vec2Max(max, start, end); // Thresh to [0, Math.PI * 2]\n\n startAngle = startAngle % PI2;\n\n if (startAngle < 0) {\n startAngle = startAngle + PI2;\n }\n\n endAngle = endAngle % PI2;\n\n if (endAngle < 0) {\n endAngle = endAngle + PI2;\n }\n\n if (startAngle > endAngle && !anticlockwise) {\n endAngle += PI2;\n } else if (startAngle < endAngle && anticlockwise) {\n startAngle += PI2;\n }\n\n if (anticlockwise) {\n var tmp = endAngle;\n endAngle = startAngle;\n startAngle = tmp;\n } // var number = 0;\n // var step = (anticlockwise ? -Math.PI : Math.PI) / 2;\n\n\n for (var angle = 0; angle < endAngle; angle += Math.PI / 2) {\n if (angle > startAngle) {\n extremity[0] = mathCos(angle) * rx + x;\n extremity[1] = mathSin(angle) * ry + y;\n vec2Min(min, extremity, min);\n vec2Max(max, extremity, max);\n }\n }\n}\n\nexports.fromPoints = fromPoints;\nexports.fromLine = fromLine;\nexports.fromCubic = fromCubic;\nexports.fromQuadratic = fromQuadratic;\nexports.fromArc = fromArc;","var List = require(\"../../data/List\");\n\nvar completeDimensions = require(\"../../data/helper/completeDimensions\");\n\nvar WhiskerBoxDraw = require(\"../helper/WhiskerBoxDraw\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar seriesModelMixin = {\n /**\n * @private\n * @type {string}\n */\n _baseAxisDim: null,\n\n /**\n * @override\n */\n getInitialData: function (option, ecModel) {\n // When both types of xAxis and yAxis are 'value', layout is\n // needed to be specified by user. Otherwise, layout can be\n // judged by which axis is category.\n var categories;\n var xAxisModel = ecModel.getComponent('xAxis', this.get('xAxisIndex'));\n var yAxisModel = ecModel.getComponent('yAxis', this.get('yAxisIndex'));\n var xAxisType = xAxisModel.get('type');\n var yAxisType = yAxisModel.get('type');\n var addOrdinal; // FIXME\n // 考虑时间轴\n\n if (xAxisType === 'category') {\n option.layout = 'horizontal';\n categories = xAxisModel.getCategories();\n addOrdinal = true;\n } else if (yAxisType === 'category') {\n option.layout = 'vertical';\n categories = yAxisModel.getCategories();\n addOrdinal = true;\n } else {\n option.layout = option.layout || 'horizontal';\n }\n\n var coordDims = ['x', 'y'];\n var baseAxisDimIndex = option.layout === 'horizontal' ? 0 : 1;\n var baseAxisDim = this._baseAxisDim = coordDims[baseAxisDimIndex];\n var otherAxisDim = coordDims[1 - baseAxisDimIndex];\n var data = option.data;\n addOrdinal && zrUtil.each(data, function (item, index) {\n if (item.value && zrUtil.isArray(item.value)) {\n item.value.unshift(index);\n } else {\n zrUtil.isArray(item) && item.unshift(index);\n }\n });\n var defaultValueDimensions = this.defaultValueDimensions;\n var dimensions = [{\n name: baseAxisDim,\n otherDims: {\n tooltip: false\n },\n dimsDef: ['base']\n }, {\n name: otherAxisDim,\n dimsDef: defaultValueDimensions.slice()\n }];\n dimensions = completeDimensions(dimensions, data, {\n encodeDef: this.get('encode'),\n dimsDef: this.get('dimensions'),\n // Consider empty data entry.\n dimCount: defaultValueDimensions.length + 1\n });\n var list = new List(dimensions, this);\n list.initData(data, categories ? categories.slice() : null);\n return list;\n },\n\n /**\n * If horizontal, base axis is x, otherwise y.\n * @override\n */\n getBaseAxis: function () {\n var dim = this._baseAxisDim;\n return this.ecModel.getComponent(dim + 'Axis', this.get(dim + 'AxisIndex')).axis;\n }\n};\nvar viewMixin = {\n init: function () {\n /**\n * Old data.\n * @private\n * @type {module:echarts/chart/helper/WhiskerBoxDraw}\n */\n var whiskerBoxDraw = this._whiskerBoxDraw = new WhiskerBoxDraw(this.getStyleUpdater());\n this.group.add(whiskerBoxDraw.group);\n },\n render: function (seriesModel, ecModel, api) {\n this._whiskerBoxDraw.updateData(seriesModel.getData());\n },\n remove: function (ecModel) {\n this._whiskerBoxDraw.remove();\n }\n};\nexports.seriesModelMixin = seriesModelMixin;\nexports.viewMixin = viewMixin;","var _clazz = require(\"../../util/clazz\");\n\nvar set = _clazz.set;\nvar get = _clazz.get;\nvar _default = {\n clearColorPalette: function () {\n set(this, 'colorIdx', 0);\n set(this, 'colorNameMap', {});\n },\n getColorFromPalette: function (name, scope) {\n scope = scope || this;\n var colorIdx = get(scope, 'colorIdx') || 0;\n var colorNameMap = get(scope, 'colorNameMap') || set(scope, 'colorNameMap', {}); // Use `hasOwnProperty` to avoid conflict with Object.prototype.\n\n if (colorNameMap.hasOwnProperty(name)) {\n return colorNameMap[name];\n }\n\n var colorPalette = this.get('color', true) || [];\n\n if (!colorPalette.length) {\n return;\n }\n\n var color = colorPalette[colorIdx];\n\n if (name) {\n colorNameMap[name] = color;\n }\n\n set(scope, 'colorIdx', (colorIdx + 1) % colorPalette.length);\n return color;\n }\n};\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\n/**\n * @param {number} [time=500] Time in ms\n * @param {string} [easing='linear']\n * @param {number} [delay=0]\n * @param {Function} [callback]\n *\n * @example\n * // Animate position\n * animation\n * .createWrap()\n * .add(el1, {position: [10, 10]})\n * .add(el2, {shape: {width: 500}, style: {fill: 'red'}}, 400)\n * .done(function () { // done })\n * .start('cubicOut');\n */\nfunction createWrap() {\n var storage = [];\n var elExistsMap = {};\n var doneCallback;\n return {\n /**\n * Caution: a el can only be added once, otherwise 'done'\n * might not be called. This method checks this (by el.id),\n * suppresses adding and returns false when existing el found.\n *\n * @param {modele:zrender/Element} el\n * @param {Object} target\n * @param {number} [time=500]\n * @param {number} [delay=0]\n * @param {string} [easing='linear']\n * @return {boolean} Whether adding succeeded.\n *\n * @example\n * add(el, target, time, delay, easing);\n * add(el, target, time, easing);\n * add(el, target, time);\n * add(el, target);\n */\n add: function (el, target, time, delay, easing) {\n if (zrUtil.isString(delay)) {\n easing = delay;\n delay = 0;\n }\n\n if (elExistsMap[el.id]) {\n return false;\n }\n\n elExistsMap[el.id] = 1;\n storage.push({\n el: el,\n target: target,\n time: time,\n delay: delay,\n easing: easing\n });\n return true;\n },\n\n /**\n * Only execute when animation finished. Will not execute when any\n * of 'stop' or 'stopAnimation' called.\n *\n * @param {Function} callback\n */\n done: function (callback) {\n doneCallback = callback;\n return this;\n },\n\n /**\n * Will stop exist animation firstly.\n */\n start: function () {\n var count = storage.length;\n\n for (var i = 0, len = storage.length; i < len; i++) {\n var item = storage[i];\n item.el.animateTo(item.target, item.time, item.delay, item.easing, done);\n }\n\n return this;\n\n function done() {\n count--;\n\n if (!count) {\n storage.length = 0;\n elExistsMap = {};\n doneCallback && doneCallback();\n }\n }\n }\n };\n}\n\nexports.createWrap = createWrap;","var graphic = require(\"../../util/graphic\");\n\nfunction setLabel(normalStyle, hoverStyle, itemModel, color, seriesModel, dataIndex, labelPositionOutside) {\n var labelModel = itemModel.getModel('label.normal');\n var hoverLabelModel = itemModel.getModel('label.emphasis');\n graphic.setLabelStyle(normalStyle, hoverStyle, labelModel, hoverLabelModel, {\n labelFetcher: seriesModel,\n labelDataIndex: dataIndex,\n defaultText: seriesModel.getRawValue(dataIndex),\n isRectText: true,\n autoColor: color\n });\n fixPosition(normalStyle);\n fixPosition(hoverStyle);\n}\n\nfunction fixPosition(style, labelPositionOutside) {\n if (style.textPosition === 'outside') {\n style.textPosition = labelPositionOutside;\n }\n}\n\nexports.setLabel = setLabel;","var curve = require(\"../core/curve\");\n\n/**\n * 三次贝塞尔曲线描边包含判断\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x3\n * @param {number} y3\n * @param {number} lineWidth\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n */\nfunction containStroke(x0, y0, x1, y1, x2, y2, x3, y3, lineWidth, x, y) {\n if (lineWidth === 0) {\n return false;\n }\n\n var _l = lineWidth; // Quick reject\n\n if (y > y0 + _l && y > y1 + _l && y > y2 + _l && y > y3 + _l || y < y0 - _l && y < y1 - _l && y < y2 - _l && y < y3 - _l || x > x0 + _l && x > x1 + _l && x > x2 + _l && x > x3 + _l || x < x0 - _l && x < x1 - _l && x < x2 - _l && x < x3 - _l) {\n return false;\n }\n\n var d = curve.cubicProjectPoint(x0, y0, x1, y1, x2, y2, x3, y3, x, y, null);\n return d <= _l / 2;\n}\n\nexports.containStroke = containStroke;","var BoundingRect = require(\"../core/BoundingRect\");\n\nvar imageHelper = require(\"../graphic/helper/image\");\n\nvar _util = require(\"../core/util\");\n\nvar getContext = _util.getContext;\nvar extend = _util.extend;\nvar retrieve2 = _util.retrieve2;\nvar retrieve3 = _util.retrieve3;\nvar textWidthCache = {};\nvar textWidthCacheCounter = 0;\nvar TEXT_CACHE_MAX = 5000;\nvar STYLE_REG = /\\{([a-zA-Z0-9_]+)\\|([^}]*)\\}/g;\nvar DEFAULT_FONT = '12px sans-serif'; // Avoid assign to an exported variable, for transforming to cjs.\n\nvar methods = {};\n\nfunction $override(name, fn) {\n methods[name] = fn;\n}\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @return {number} width\n */\n\n\nfunction getWidth(text, font) {\n font = font || DEFAULT_FONT;\n var key = text + ':' + font;\n\n if (textWidthCache[key]) {\n return textWidthCache[key];\n }\n\n var textLines = (text + '').split('\\n');\n var width = 0;\n\n for (var i = 0, l = textLines.length; i < l; i++) {\n // textContain.measureText may be overrided in SVG or VML\n width = Math.max(measureText(textLines[i], font).width, width);\n }\n\n if (textWidthCacheCounter > TEXT_CACHE_MAX) {\n textWidthCacheCounter = 0;\n textWidthCache = {};\n }\n\n textWidthCacheCounter++;\n textWidthCache[key] = width;\n return width;\n}\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @param {string} [textAlign='left']\n * @param {string} [textVerticalAlign='top']\n * @param {Array.} [textPadding]\n * @param {Object} [rich]\n * @param {Object} [truncate]\n * @return {Object} {x, y, width, height, lineHeight}\n */\n\n\nfunction getBoundingRect(text, font, textAlign, textVerticalAlign, textPadding, rich, truncate) {\n return rich ? getRichTextRect(text, font, textAlign, textVerticalAlign, textPadding, rich, truncate) : getPlainTextRect(text, font, textAlign, textVerticalAlign, textPadding, truncate);\n}\n\nfunction getPlainTextRect(text, font, textAlign, textVerticalAlign, textPadding, truncate) {\n var contentBlock = parsePlainText(text, font, textPadding, truncate);\n var outerWidth = getWidth(text, font);\n\n if (textPadding) {\n outerWidth += textPadding[1] + textPadding[3];\n }\n\n var outerHeight = contentBlock.outerHeight;\n var x = adjustTextX(0, outerWidth, textAlign);\n var y = adjustTextY(0, outerHeight, textVerticalAlign);\n var rect = new BoundingRect(x, y, outerWidth, outerHeight);\n rect.lineHeight = contentBlock.lineHeight;\n return rect;\n}\n\nfunction getRichTextRect(text, font, textAlign, textVerticalAlign, textPadding, rich, truncate) {\n var contentBlock = parseRichText(text, {\n rich: rich,\n truncate: truncate,\n font: font,\n textAlign: textAlign,\n textPadding: textPadding\n });\n var outerWidth = contentBlock.outerWidth;\n var outerHeight = contentBlock.outerHeight;\n var x = adjustTextX(0, outerWidth, textAlign);\n var y = adjustTextY(0, outerHeight, textVerticalAlign);\n return new BoundingRect(x, y, outerWidth, outerHeight);\n}\n/**\n * @public\n * @param {number} x\n * @param {number} width\n * @param {string} [textAlign='left']\n * @return {number} Adjusted x.\n */\n\n\nfunction adjustTextX(x, width, textAlign) {\n // FIXME Right to left language\n if (textAlign === 'right') {\n x -= width;\n } else if (textAlign === 'center') {\n x -= width / 2;\n }\n\n return x;\n}\n/**\n * @public\n * @param {number} y\n * @param {number} height\n * @param {string} [textVerticalAlign='top']\n * @return {number} Adjusted y.\n */\n\n\nfunction adjustTextY(y, height, textVerticalAlign) {\n if (textVerticalAlign === 'middle') {\n y -= height / 2;\n } else if (textVerticalAlign === 'bottom') {\n y -= height;\n }\n\n return y;\n}\n/**\n * @public\n * @param {stirng} textPosition\n * @param {Object} rect {x, y, width, height}\n * @param {number} distance\n * @return {Object} {x, y, textAlign, textVerticalAlign}\n */\n\n\nfunction adjustTextPositionOnRect(textPosition, rect, distance) {\n var x = rect.x;\n var y = rect.y;\n var height = rect.height;\n var width = rect.width;\n var halfHeight = height / 2;\n var textAlign = 'left';\n var textVerticalAlign = 'top';\n\n switch (textPosition) {\n case 'left':\n x -= distance;\n y += halfHeight;\n textAlign = 'right';\n textVerticalAlign = 'middle';\n break;\n\n case 'right':\n x += distance + width;\n y += halfHeight;\n textVerticalAlign = 'middle';\n break;\n\n case 'top':\n x += width / 2;\n y -= distance;\n textAlign = 'center';\n textVerticalAlign = 'bottom';\n break;\n\n case 'bottom':\n x += width / 2;\n y += height + distance;\n textAlign = 'center';\n break;\n\n case 'inside':\n x += width / 2;\n y += halfHeight;\n textAlign = 'center';\n textVerticalAlign = 'middle';\n break;\n\n case 'insideLeft':\n x += distance;\n y += halfHeight;\n textVerticalAlign = 'middle';\n break;\n\n case 'insideRight':\n x += width - distance;\n y += halfHeight;\n textAlign = 'right';\n textVerticalAlign = 'middle';\n break;\n\n case 'insideTop':\n x += width / 2;\n y += distance;\n textAlign = 'center';\n break;\n\n case 'insideBottom':\n x += width / 2;\n y += height - distance;\n textAlign = 'center';\n textVerticalAlign = 'bottom';\n break;\n\n case 'insideTopLeft':\n x += distance;\n y += distance;\n break;\n\n case 'insideTopRight':\n x += width - distance;\n y += distance;\n textAlign = 'right';\n break;\n\n case 'insideBottomLeft':\n x += distance;\n y += height - distance;\n textVerticalAlign = 'bottom';\n break;\n\n case 'insideBottomRight':\n x += width - distance;\n y += height - distance;\n textAlign = 'right';\n textVerticalAlign = 'bottom';\n break;\n }\n\n return {\n x: x,\n y: y,\n textAlign: textAlign,\n textVerticalAlign: textVerticalAlign\n };\n}\n/**\n * Show ellipsis if overflow.\n *\n * @public\n * @param {string} text\n * @param {string} containerWidth\n * @param {string} font\n * @param {number} [ellipsis='...']\n * @param {Object} [options]\n * @param {number} [options.maxIterations=3]\n * @param {number} [options.minChar=0] If truncate result are less\n * then minChar, ellipsis will not show, which is\n * better for user hint in some cases.\n * @param {number} [options.placeholder=''] When all truncated, use the placeholder.\n * @return {string}\n */\n\n\nfunction truncateText(text, containerWidth, font, ellipsis, options) {\n if (!containerWidth) {\n return '';\n }\n\n var textLines = (text + '').split('\\n');\n options = prepareTruncateOptions(containerWidth, font, ellipsis, options); // FIXME\n // It is not appropriate that every line has '...' when truncate multiple lines.\n\n for (var i = 0, len = textLines.length; i < len; i++) {\n textLines[i] = truncateSingleLine(textLines[i], options);\n }\n\n return textLines.join('\\n');\n}\n\nfunction prepareTruncateOptions(containerWidth, font, ellipsis, options) {\n options = extend({}, options);\n options.font = font;\n var ellipsis = retrieve2(ellipsis, '...');\n options.maxIterations = retrieve2(options.maxIterations, 2);\n var minChar = options.minChar = retrieve2(options.minChar, 0); // FIXME\n // Other languages?\n\n options.cnCharWidth = getWidth('国', font); // FIXME\n // Consider proportional font?\n\n var ascCharWidth = options.ascCharWidth = getWidth('a', font);\n options.placeholder = retrieve2(options.placeholder, ''); // Example 1: minChar: 3, text: 'asdfzxcv', truncate result: 'asdf', but not: 'a...'.\n // Example 2: minChar: 3, text: '维度', truncate result: '维', but not: '...'.\n\n var contentWidth = containerWidth = Math.max(0, containerWidth - 1); // Reserve some gap.\n\n for (var i = 0; i < minChar && contentWidth >= ascCharWidth; i++) {\n contentWidth -= ascCharWidth;\n }\n\n var ellipsisWidth = getWidth(ellipsis);\n\n if (ellipsisWidth > contentWidth) {\n ellipsis = '';\n ellipsisWidth = 0;\n }\n\n contentWidth = containerWidth - ellipsisWidth;\n options.ellipsis = ellipsis;\n options.ellipsisWidth = ellipsisWidth;\n options.contentWidth = contentWidth;\n options.containerWidth = containerWidth;\n return options;\n}\n\nfunction truncateSingleLine(textLine, options) {\n var containerWidth = options.containerWidth;\n var font = options.font;\n var contentWidth = options.contentWidth;\n\n if (!containerWidth) {\n return '';\n }\n\n var lineWidth = getWidth(textLine, font);\n\n if (lineWidth <= containerWidth) {\n return textLine;\n }\n\n for (var j = 0;; j++) {\n if (lineWidth <= contentWidth || j >= options.maxIterations) {\n textLine += options.ellipsis;\n break;\n }\n\n var subLength = j === 0 ? estimateLength(textLine, contentWidth, options.ascCharWidth, options.cnCharWidth) : lineWidth > 0 ? Math.floor(textLine.length * contentWidth / lineWidth) : 0;\n textLine = textLine.substr(0, subLength);\n lineWidth = getWidth(textLine, font);\n }\n\n if (textLine === '') {\n textLine = options.placeholder;\n }\n\n return textLine;\n}\n\nfunction estimateLength(text, contentWidth, ascCharWidth, cnCharWidth) {\n var width = 0;\n var i = 0;\n\n for (var len = text.length; i < len && width < contentWidth; i++) {\n var charCode = text.charCodeAt(i);\n width += 0 <= charCode && charCode <= 127 ? ascCharWidth : cnCharWidth;\n }\n\n return i;\n}\n/**\n * @public\n * @param {string} font\n * @return {number} line height\n */\n\n\nfunction getLineHeight(font) {\n // FIXME A rough approach.\n return getWidth('国', font);\n}\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @return {Object} width\n */\n\n\nfunction measureText(text, font) {\n return methods.measureText(text, font);\n} // Avoid assign to an exported variable, for transforming to cjs.\n\n\nmethods.measureText = function (text, font) {\n var ctx = getContext();\n ctx.font = font || DEFAULT_FONT;\n return ctx.measureText(text);\n};\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @param {Object} [truncate]\n * @return {Object} block: {lineHeight, lines, height, outerHeight}\n * Notice: for performance, do not calculate outerWidth util needed.\n */\n\n\nfunction parsePlainText(text, font, padding, truncate) {\n text != null && (text += '');\n var lineHeight = getLineHeight(font);\n var lines = text ? text.split('\\n') : [];\n var height = lines.length * lineHeight;\n var outerHeight = height;\n\n if (padding) {\n outerHeight += padding[0] + padding[2];\n }\n\n if (text && truncate) {\n var truncOuterHeight = truncate.outerHeight;\n var truncOuterWidth = truncate.outerWidth;\n\n if (truncOuterHeight != null && outerHeight > truncOuterHeight) {\n text = '';\n lines = [];\n } else if (truncOuterWidth != null) {\n var options = prepareTruncateOptions(truncOuterWidth - (padding ? padding[1] + padding[3] : 0), font, truncate.ellipsis, {\n minChar: truncate.minChar,\n placeholder: truncate.placeholder\n }); // FIXME\n // It is not appropriate that every line has '...' when truncate multiple lines.\n\n for (var i = 0, len = lines.length; i < len; i++) {\n lines[i] = truncateSingleLine(lines[i], options);\n }\n }\n }\n\n return {\n lines: lines,\n height: height,\n outerHeight: outerHeight,\n lineHeight: lineHeight\n };\n}\n/**\n * For example: 'some text {a|some text}other text{b|some text}xxx{c|}xxx'\n * Also consider 'bbbb{a|xxx\\nzzz}xxxx\\naaaa'.\n *\n * @public\n * @param {string} text\n * @param {Object} style\n * @return {Object} block\n * {\n * width,\n * height,\n * lines: [{\n * lineHeight,\n * width,\n * tokens: [[{\n * styleName,\n * text,\n * width, // include textPadding\n * height, // include textPadding\n * textWidth, // pure text width\n * textHeight, // pure text height\n * lineHeihgt,\n * font,\n * textAlign,\n * textVerticalAlign\n * }], [...], ...]\n * }, ...]\n * }\n * If styleName is undefined, it is plain text.\n */\n\n\nfunction parseRichText(text, style) {\n var contentBlock = {\n lines: [],\n width: 0,\n height: 0\n };\n text != null && (text += '');\n\n if (!text) {\n return contentBlock;\n }\n\n var lastIndex = STYLE_REG.lastIndex = 0;\n var result;\n\n while ((result = STYLE_REG.exec(text)) != null) {\n var matchedIndex = result.index;\n\n if (matchedIndex > lastIndex) {\n pushTokens(contentBlock, text.substring(lastIndex, matchedIndex));\n }\n\n pushTokens(contentBlock, result[2], result[1]);\n lastIndex = STYLE_REG.lastIndex;\n }\n\n if (lastIndex < text.length) {\n pushTokens(contentBlock, text.substring(lastIndex, text.length));\n }\n\n var lines = contentBlock.lines;\n var contentHeight = 0;\n var contentWidth = 0; // For `textWidth: 100%`\n\n var pendingList = [];\n var stlPadding = style.textPadding;\n var truncate = style.truncate;\n var truncateWidth = truncate && truncate.outerWidth;\n var truncateHeight = truncate && truncate.outerHeight;\n\n if (stlPadding) {\n truncateWidth != null && (truncateWidth -= stlPadding[1] + stlPadding[3]);\n truncateHeight != null && (truncateHeight -= stlPadding[0] + stlPadding[2]);\n } // Calculate layout info of tokens.\n\n\n for (var i = 0; i < lines.length; i++) {\n var line = lines[i];\n var lineHeight = 0;\n var lineWidth = 0;\n\n for (var j = 0; j < line.tokens.length; j++) {\n var token = line.tokens[j];\n var tokenStyle = token.styleName && style.rich[token.styleName] || {}; // textPadding should not inherit from style.\n\n var textPadding = token.textPadding = tokenStyle.textPadding; // textFont has been asigned to font by `normalizeStyle`.\n\n var font = token.font = tokenStyle.font || style.font; // textHeight can be used when textVerticalAlign is specified in token.\n\n var tokenHeight = token.textHeight = retrieve2( // textHeight should not be inherited, consider it can be specified\n // as box height of the block.\n tokenStyle.textHeight, getLineHeight(font));\n textPadding && (tokenHeight += textPadding[0] + textPadding[2]);\n token.height = tokenHeight;\n token.lineHeight = retrieve3(tokenStyle.textLineHeight, style.textLineHeight, tokenHeight);\n token.textAlign = tokenStyle && tokenStyle.textAlign || style.textAlign;\n token.textVerticalAlign = tokenStyle && tokenStyle.textVerticalAlign || 'middle';\n\n if (truncateHeight != null && contentHeight + token.lineHeight > truncateHeight) {\n return {\n lines: [],\n width: 0,\n height: 0\n };\n }\n\n token.textWidth = getWidth(token.text, font);\n var tokenWidth = tokenStyle.textWidth;\n var tokenWidthNotSpecified = tokenWidth == null || tokenWidth === 'auto'; // Percent width, can be `100%`, can be used in drawing separate\n // line when box width is needed to be auto.\n\n if (typeof tokenWidth === 'string' && tokenWidth.charAt(tokenWidth.length - 1) === '%') {\n token.percentWidth = tokenWidth;\n pendingList.push(token);\n tokenWidth = 0; // Do not truncate in this case, because there is no user case\n // and it is too complicated.\n } else {\n if (tokenWidthNotSpecified) {\n tokenWidth = token.textWidth; // FIXME: If image is not loaded and textWidth is not specified, calling\n // `getBoundingRect()` will not get correct result.\n\n var textBackgroundColor = tokenStyle.textBackgroundColor;\n var bgImg = textBackgroundColor && textBackgroundColor.image; // Use cases:\n // (1) If image is not loaded, it will be loaded at render phase and call\n // `dirty()` and `textBackgroundColor.image` will be replaced with the loaded\n // image, and then the right size will be calculated here at the next tick.\n // See `graphic/helper/text.js`.\n // (2) If image loaded, and `textBackgroundColor.image` is image src string,\n // use `imageHelper.findExistImage` to find cached image.\n // `imageHelper.findExistImage` will always be called here before\n // `imageHelper.createOrUpdateImage` in `graphic/helper/text.js#renderRichText`\n // which ensures that image will not be rendered before correct size calcualted.\n\n if (bgImg) {\n bgImg = imageHelper.findExistImage(bgImg);\n\n if (imageHelper.isImageReady(bgImg)) {\n tokenWidth = Math.max(tokenWidth, bgImg.width * tokenHeight / bgImg.height);\n }\n }\n }\n\n var paddingW = textPadding ? textPadding[1] + textPadding[3] : 0;\n tokenWidth += paddingW;\n var remianTruncWidth = truncateWidth != null ? truncateWidth - lineWidth : null;\n\n if (remianTruncWidth != null && remianTruncWidth < tokenWidth) {\n if (!tokenWidthNotSpecified || remianTruncWidth < paddingW) {\n token.text = '';\n token.textWidth = tokenWidth = 0;\n } else {\n token.text = truncateText(token.text, remianTruncWidth - paddingW, font, truncate.ellipsis, {\n minChar: truncate.minChar\n });\n token.textWidth = getWidth(token.text, font);\n tokenWidth = token.textWidth + paddingW;\n }\n }\n }\n\n lineWidth += token.width = tokenWidth;\n tokenStyle && (lineHeight = Math.max(lineHeight, token.lineHeight));\n }\n\n line.width = lineWidth;\n line.lineHeight = lineHeight;\n contentHeight += lineHeight;\n contentWidth = Math.max(contentWidth, lineWidth);\n }\n\n contentBlock.outerWidth = contentBlock.width = retrieve2(style.textWidth, contentWidth);\n contentBlock.outerHeight = contentBlock.height = retrieve2(style.textHeight, contentHeight);\n\n if (stlPadding) {\n contentBlock.outerWidth += stlPadding[1] + stlPadding[3];\n contentBlock.outerHeight += stlPadding[0] + stlPadding[2];\n }\n\n for (var i = 0; i < pendingList.length; i++) {\n var token = pendingList[i];\n var percentWidth = token.percentWidth; // Should not base on outerWidth, because token can not be placed out of padding.\n\n token.width = parseInt(percentWidth, 10) / 100 * contentWidth;\n }\n\n return contentBlock;\n}\n\nfunction pushTokens(block, str, styleName) {\n var isEmptyStr = str === '';\n var strs = str.split('\\n');\n var lines = block.lines;\n\n for (var i = 0; i < strs.length; i++) {\n var text = strs[i];\n var token = {\n styleName: styleName,\n text: text,\n isLineHolder: !text && !isEmptyStr\n }; // The first token should be appended to the last line.\n\n if (!i) {\n var tokens = (lines[lines.length - 1] || (lines[0] = {\n tokens: []\n })).tokens; // Consider cases:\n // (1) ''.split('\\n') => ['', '\\n', ''], the '' at the first item\n // (which is a placeholder) should be replaced by new token.\n // (2) A image backage, where token likes {a|}.\n // (3) A redundant '' will affect textAlign in line.\n // (4) tokens with the same tplName should not be merged, because\n // they should be displayed in different box (with border and padding).\n\n var tokensLen = tokens.length;\n tokensLen === 1 && tokens[0].isLineHolder ? tokens[0] = token : // Consider text is '', only insert when it is the \"lineHolder\" or\n // \"emptyStr\". Otherwise a redundant '' will affect textAlign in line.\n (text || !tokensLen || isEmptyStr) && tokens.push(token);\n } // Other tokens always start a new line.\n else {\n // If there is '', insert it as a placeholder.\n lines.push({\n tokens: [token]\n });\n }\n }\n}\n\nfunction makeFont(style) {\n // FIXME in node-canvas fontWeight is before fontStyle\n // Use `fontSize` `fontFamily` to check whether font properties are defined.\n return (style.fontSize || style.fontFamily) && [style.fontStyle, style.fontWeight, (style.fontSize || 12) + 'px', // If font properties are defined, `fontFamily` should not be ignored.\n style.fontFamily || 'sans-serif'].join(' ') || style.textFont || style.font;\n}\n\nexports.DEFAULT_FONT = DEFAULT_FONT;\nexports.$override = $override;\nexports.getWidth = getWidth;\nexports.getBoundingRect = getBoundingRect;\nexports.adjustTextX = adjustTextX;\nexports.adjustTextY = adjustTextY;\nexports.adjustTextPositionOnRect = adjustTextPositionOnRect;\nexports.truncateText = truncateText;\nexports.getLineHeight = getLineHeight;\nexports.measureText = measureText;\nexports.parsePlainText = parsePlainText;\nexports.parseRichText = parseRichText;\nexports.makeFont = makeFont;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar Group = require(\"zrender/lib/container/Group\");\n\nvar componentUtil = require(\"../util/component\");\n\nvar clazzUtil = require(\"../util/clazz\");\n\nvar modelUtil = require(\"../util/model\");\n\nfunction Chart() {\n /**\n * @type {module:zrender/container/Group}\n * @readOnly\n */\n this.group = new Group();\n /**\n * @type {string}\n * @readOnly\n */\n\n this.uid = componentUtil.getUID('viewChart');\n}\n\nChart.prototype = {\n type: 'chart',\n\n /**\n * Init the chart\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n */\n init: function (ecModel, api) {},\n\n /**\n * Render the chart\n * @param {module:echarts/model/Series} seriesModel\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n * @param {Object} payload\n */\n render: function (seriesModel, ecModel, api, payload) {},\n\n /**\n * Highlight series or specified data item\n * @param {module:echarts/model/Series} seriesModel\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n * @param {Object} payload\n */\n highlight: function (seriesModel, ecModel, api, payload) {\n toggleHighlight(seriesModel.getData(), payload, 'emphasis');\n },\n\n /**\n * Downplay series or specified data item\n * @param {module:echarts/model/Series} seriesModel\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n * @param {Object} payload\n */\n downplay: function (seriesModel, ecModel, api, payload) {\n toggleHighlight(seriesModel.getData(), payload, 'normal');\n },\n\n /**\n * Remove self\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n */\n remove: function (ecModel, api) {\n this.group.removeAll();\n },\n\n /**\n * Dispose self\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n */\n dispose: function () {}\n /**\n * The view contains the given point.\n * @interface\n * @param {Array.} point\n * @return {boolean}\n */\n // containPoint: function () {}\n\n};\nvar chartProto = Chart.prototype;\n\nchartProto.updateView = chartProto.updateLayout = chartProto.updateVisual = function (seriesModel, ecModel, api, payload) {\n this.render(seriesModel, ecModel, api, payload);\n};\n/**\n * Set state of single element\n * @param {module:zrender/Element} el\n * @param {string} state\n */\n\n\nfunction elSetState(el, state) {\n if (el) {\n el.trigger(state);\n\n if (el.type === 'group') {\n for (var i = 0; i < el.childCount(); i++) {\n elSetState(el.childAt(i), state);\n }\n }\n }\n}\n/**\n * @param {module:echarts/data/List} data\n * @param {Object} payload\n * @param {string} state 'normal'|'emphasis'\n * @inner\n */\n\n\nfunction toggleHighlight(data, payload, state) {\n var dataIndex = modelUtil.queryDataIndex(data, payload);\n\n if (dataIndex != null) {\n zrUtil.each(modelUtil.normalizeToArray(dataIndex), function (dataIdx) {\n elSetState(data.getItemGraphicEl(dataIdx), state);\n });\n } else {\n data.eachItemGraphicEl(function (el) {\n elSetState(el, state);\n });\n }\n} // Enable Chart.extend.\n\n\nclazzUtil.enableClassExtend(Chart, ['dispose']); // Add capability of registerClass, getClass, hasClass, registerSubTypeDefaulter and so on.\n\nclazzUtil.enableClassManagement(Chart, {\n registerWhenExtend: true\n});\nvar _default = Chart;\nmodule.exports = _default;","var zrLog = require(\"../core/log\");\n\nvar vmlCore = require(\"./core\");\n\nvar _util = require(\"../core/util\");\n\nvar each = _util.each;\n\n/**\n * VML Painter.\n *\n * @module zrender/vml/Painter\n */\nfunction parseInt10(val) {\n return parseInt(val, 10);\n}\n/**\n * @alias module:zrender/vml/Painter\n */\n\n\nfunction VMLPainter(root, storage) {\n vmlCore.initVML();\n this.root = root;\n this.storage = storage;\n var vmlViewport = document.createElement('div');\n var vmlRoot = document.createElement('div');\n vmlViewport.style.cssText = 'display:inline-block;overflow:hidden;position:relative;width:300px;height:150px;';\n vmlRoot.style.cssText = 'position:absolute;left:0;top:0;';\n root.appendChild(vmlViewport);\n this._vmlRoot = vmlRoot;\n this._vmlViewport = vmlViewport;\n this.resize(); // Modify storage\n\n var oldDelFromStorage = storage.delFromStorage;\n var oldAddToStorage = storage.addToStorage;\n\n storage.delFromStorage = function (el) {\n oldDelFromStorage.call(storage, el);\n\n if (el) {\n el.onRemove && el.onRemove(vmlRoot);\n }\n };\n\n storage.addToStorage = function (el) {\n // Displayable already has a vml node\n el.onAdd && el.onAdd(vmlRoot);\n oldAddToStorage.call(storage, el);\n };\n\n this._firstPaint = true;\n}\n\nVMLPainter.prototype = {\n constructor: VMLPainter,\n getType: function () {\n return 'vml';\n },\n\n /**\n * @return {HTMLDivElement}\n */\n getViewportRoot: function () {\n return this._vmlViewport;\n },\n getViewportRootOffset: function () {\n var viewportRoot = this.getViewportRoot();\n\n if (viewportRoot) {\n return {\n offsetLeft: viewportRoot.offsetLeft || 0,\n offsetTop: viewportRoot.offsetTop || 0\n };\n }\n },\n\n /**\n * 刷新\n */\n refresh: function () {\n var list = this.storage.getDisplayList(true, true);\n\n this._paintList(list);\n },\n _paintList: function (list) {\n var vmlRoot = this._vmlRoot;\n\n for (var i = 0; i < list.length; i++) {\n var el = list[i];\n\n if (el.invisible || el.ignore) {\n if (!el.__alreadyNotVisible) {\n el.onRemove(vmlRoot);\n } // Set as already invisible\n\n\n el.__alreadyNotVisible = true;\n } else {\n if (el.__alreadyNotVisible) {\n el.onAdd(vmlRoot);\n }\n\n el.__alreadyNotVisible = false;\n\n if (el.__dirty) {\n el.beforeBrush && el.beforeBrush();\n (el.brushVML || el.brush).call(el, vmlRoot);\n el.afterBrush && el.afterBrush();\n }\n }\n\n el.__dirty = false;\n }\n\n if (this._firstPaint) {\n // Detached from document at first time\n // to avoid page refreshing too many times\n // FIXME 如果每次都先 removeChild 可能会导致一些填充和描边的效果改变\n this._vmlViewport.appendChild(vmlRoot);\n\n this._firstPaint = false;\n }\n },\n resize: function (width, height) {\n var width = width == null ? this._getWidth() : width;\n var height = height == null ? this._getHeight() : height;\n\n if (this._width != width || this._height != height) {\n this._width = width;\n this._height = height;\n var vmlViewportStyle = this._vmlViewport.style;\n vmlViewportStyle.width = width + 'px';\n vmlViewportStyle.height = height + 'px';\n }\n },\n dispose: function () {\n this.root.innerHTML = '';\n this._vmlRoot = this._vmlViewport = this.storage = null;\n },\n getWidth: function () {\n return this._width;\n },\n getHeight: function () {\n return this._height;\n },\n clear: function () {\n if (this._vmlViewport) {\n this.root.removeChild(this._vmlViewport);\n }\n },\n _getWidth: function () {\n var root = this.root;\n var stl = root.currentStyle;\n return (root.clientWidth || parseInt10(stl.width)) - parseInt10(stl.paddingLeft) - parseInt10(stl.paddingRight) | 0;\n },\n _getHeight: function () {\n var root = this.root;\n var stl = root.currentStyle;\n return (root.clientHeight || parseInt10(stl.height)) - parseInt10(stl.paddingTop) - parseInt10(stl.paddingBottom) | 0;\n }\n}; // Not supported methods\n\nfunction createMethodNotSupport(method) {\n return function () {\n zrLog('In IE8.0 VML mode painter not support method \"' + method + '\"');\n };\n} // Unsupported methods\n\n\neach(['getLayer', 'insertLayer', 'eachLayer', 'eachBuiltinLayer', 'eachOtherLayer', 'getLayers', 'modLayer', 'delLayer', 'clearLayer', 'toDataURL', 'pathToImage'], function (name) {\n VMLPainter.prototype[name] = createMethodNotSupport(name);\n});\nvar _default = VMLPainter;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nfunction _default(option) {\n if (!option || !zrUtil.isArray(option.series)) {\n return;\n } // Translate 'k' to 'candlestick'.\n\n\n zrUtil.each(option.series, function (seriesItem) {\n if (zrUtil.isObject(seriesItem) && seriesItem.type === 'k') {\n seriesItem.type = 'candlestick';\n }\n });\n}\n\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar env = require(\"zrender/lib/core/env\");\n\nvar visualDefault = require(\"../../visual/visualDefault\");\n\nvar VisualMapping = require(\"../../visual/VisualMapping\");\n\nvar visualSolution = require(\"../../visual/visualSolution\");\n\nvar modelUtil = require(\"../../util/model\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar mapVisual = VisualMapping.mapVisual;\nvar eachVisual = VisualMapping.eachVisual;\nvar isArray = zrUtil.isArray;\nvar each = zrUtil.each;\nvar asc = numberUtil.asc;\nvar linearMap = numberUtil.linearMap;\nvar noop = zrUtil.noop;\nvar DEFAULT_COLOR = ['#f6efa6', '#d88273', '#bf444c'];\nvar VisualMapModel = echarts.extendComponentModel({\n type: 'visualMap',\n dependencies: ['series'],\n\n /**\n * @readOnly\n * @type {Array.}\n */\n stateList: ['inRange', 'outOfRange'],\n\n /**\n * @readOnly\n * @type {Array.}\n */\n replacableOptionKeys: ['inRange', 'outOfRange', 'target', 'controller', 'color'],\n\n /**\n * [lowerBound, upperBound]\n *\n * @readOnly\n * @type {Array.}\n */\n dataBound: [-Infinity, Infinity],\n\n /**\n * @readOnly\n * @type {string|Object}\n */\n layoutMode: {\n type: 'box',\n ignoreSize: true\n },\n\n /**\n * @protected\n */\n defaultOption: {\n show: true,\n zlevel: 0,\n z: 4,\n seriesIndex: 'all',\n // 'all' or null/undefined: all series.\n // A number or an array of number: the specified series.\n // set min: 0, max: 200, only for campatible with ec2.\n // In fact min max should not have default value.\n min: 0,\n // min value, must specified if pieces is not specified.\n max: 200,\n // max value, must specified if pieces is not specified.\n dimension: null,\n inRange: null,\n // 'color', 'colorHue', 'colorSaturation', 'colorLightness', 'colorAlpha',\n // 'symbol', 'symbolSize'\n outOfRange: null,\n // 'color', 'colorHue', 'colorSaturation',\n // 'colorLightness', 'colorAlpha',\n // 'symbol', 'symbolSize'\n left: 0,\n // 'center' ¦ 'left' ¦ 'right' ¦ {number} (px)\n right: null,\n // The same as left.\n top: null,\n // 'top' ¦ 'bottom' ¦ 'center' ¦ {number} (px)\n bottom: 0,\n // The same as top.\n itemWidth: null,\n itemHeight: null,\n inverse: false,\n orient: 'vertical',\n // 'horizontal' ¦ 'vertical'\n backgroundColor: 'rgba(0,0,0,0)',\n borderColor: '#ccc',\n // 值域边框颜色\n contentColor: '#5793f3',\n inactiveColor: '#aaa',\n borderWidth: 0,\n // 值域边框线宽,单位px,默认为0(无边框)\n padding: 5,\n // 值域内边距,单位px,默认各方向内边距为5,\n // 接受数组分别设定上右下左边距,同css\n textGap: 10,\n //\n precision: 0,\n // 小数精度,默认为0,无小数点\n color: null,\n //颜色(deprecated,兼容ec2,顺序同pieces,不同于inRange/outOfRange)\n formatter: null,\n text: null,\n // 文本,如['高', '低'],兼容ec2,text[0]对应高值,text[1]对应低值\n textStyle: {\n color: '#333' // 值域文字颜色\n\n }\n },\n\n /**\n * @protected\n */\n init: function (option, parentModel, ecModel) {\n /**\n * @private\n * @type {Array.}\n */\n this._dataExtent;\n /**\n * @readOnly\n */\n\n this.targetVisuals = {};\n /**\n * @readOnly\n */\n\n this.controllerVisuals = {};\n /**\n * @readOnly\n */\n\n this.textStyleModel;\n /**\n * [width, height]\n * @readOnly\n * @type {Array.}\n */\n\n this.itemSize;\n this.mergeDefaultAndTheme(option, ecModel);\n },\n\n /**\n * @protected\n */\n optionUpdated: function (newOption, isInit) {\n var thisOption = this.option; // FIXME\n // necessary?\n // Disable realtime view update if canvas is not supported.\n\n if (!env.canvasSupported) {\n thisOption.realtime = false;\n }\n\n !isInit && visualSolution.replaceVisualOption(thisOption, newOption, this.replacableOptionKeys);\n this.textStyleModel = this.getModel('textStyle');\n this.resetItemSize();\n this.completeVisualOption();\n },\n\n /**\n * @protected\n */\n resetVisual: function (supplementVisualOption) {\n var stateList = this.stateList;\n supplementVisualOption = zrUtil.bind(supplementVisualOption, this);\n this.controllerVisuals = visualSolution.createVisualMappings(this.option.controller, stateList, supplementVisualOption);\n this.targetVisuals = visualSolution.createVisualMappings(this.option.target, stateList, supplementVisualOption);\n },\n\n /**\n * @protected\n * @return {Array.} An array of series indices.\n */\n getTargetSeriesIndices: function () {\n var optionSeriesIndex = this.option.seriesIndex;\n var seriesIndices = [];\n\n if (optionSeriesIndex == null || optionSeriesIndex === 'all') {\n this.ecModel.eachSeries(function (seriesModel, index) {\n seriesIndices.push(index);\n });\n } else {\n seriesIndices = modelUtil.normalizeToArray(optionSeriesIndex);\n }\n\n return seriesIndices;\n },\n\n /**\n * @public\n */\n eachTargetSeries: function (callback, context) {\n zrUtil.each(this.getTargetSeriesIndices(), function (seriesIndex) {\n callback.call(context, this.ecModel.getSeriesByIndex(seriesIndex));\n }, this);\n },\n\n /**\n * @pubilc\n */\n isTargetSeries: function (seriesModel) {\n var is = false;\n this.eachTargetSeries(function (model) {\n model === seriesModel && (is = true);\n });\n return is;\n },\n\n /**\n * @example\n * this.formatValueText(someVal); // format single numeric value to text.\n * this.formatValueText(someVal, true); // format single category value to text.\n * this.formatValueText([min, max]); // format numeric min-max to text.\n * this.formatValueText([this.dataBound[0], max]); // using data lower bound.\n * this.formatValueText([min, this.dataBound[1]]); // using data upper bound.\n *\n * @param {number|Array.} value Real value, or this.dataBound[0 or 1].\n * @param {boolean} [isCategory=false] Only available when value is number.\n * @param {Array.} edgeSymbols Open-close symbol when value is interval.\n * @return {string}\n * @protected\n */\n formatValueText: function (value, isCategory, edgeSymbols) {\n var option = this.option;\n var precision = option.precision;\n var dataBound = this.dataBound;\n var formatter = option.formatter;\n var isMinMax;\n var textValue;\n edgeSymbols = edgeSymbols || ['<', '>'];\n\n if (zrUtil.isArray(value)) {\n value = value.slice();\n isMinMax = true;\n }\n\n textValue = isCategory ? value : isMinMax ? [toFixed(value[0]), toFixed(value[1])] : toFixed(value);\n\n if (zrUtil.isString(formatter)) {\n return formatter.replace('{value}', isMinMax ? textValue[0] : textValue).replace('{value2}', isMinMax ? textValue[1] : textValue);\n } else if (zrUtil.isFunction(formatter)) {\n return isMinMax ? formatter(value[0], value[1]) : formatter(value);\n }\n\n if (isMinMax) {\n if (value[0] === dataBound[0]) {\n return edgeSymbols[0] + ' ' + textValue[1];\n } else if (value[1] === dataBound[1]) {\n return edgeSymbols[1] + ' ' + textValue[0];\n } else {\n return textValue[0] + ' - ' + textValue[1];\n }\n } else {\n // Format single value (includes category case).\n return textValue;\n }\n\n function toFixed(val) {\n return val === dataBound[0] ? 'min' : val === dataBound[1] ? 'max' : (+val).toFixed(Math.min(precision, 20));\n }\n },\n\n /**\n * @protected\n */\n resetExtent: function () {\n var thisOption = this.option; // Can not calculate data extent by data here.\n // Because series and data may be modified in processing stage.\n // So we do not support the feature \"auto min/max\".\n\n var extent = asc([thisOption.min, thisOption.max]);\n this._dataExtent = extent;\n },\n\n /**\n * @public\n * @param {module:echarts/data/List} list\n * @return {string} Concrete dimention. If return null/undefined,\n * no dimension used.\n */\n getDataDimension: function (list) {\n var optDim = this.option.dimension;\n return optDim != null ? optDim : list.dimensions.length - 1;\n },\n\n /**\n * @public\n * @override\n */\n getExtent: function () {\n return this._dataExtent.slice();\n },\n\n /**\n * @protected\n */\n completeVisualOption: function () {\n var thisOption = this.option;\n var base = {\n inRange: thisOption.inRange,\n outOfRange: thisOption.outOfRange\n };\n var target = thisOption.target || (thisOption.target = {});\n var controller = thisOption.controller || (thisOption.controller = {});\n zrUtil.merge(target, base); // Do not override\n\n zrUtil.merge(controller, base); // Do not override\n\n var isCategory = this.isCategory();\n completeSingle.call(this, target);\n completeSingle.call(this, controller);\n completeInactive.call(this, target, 'inRange', 'outOfRange'); // completeInactive.call(this, target, 'outOfRange', 'inRange');\n\n completeController.call(this, controller);\n\n function completeSingle(base) {\n // Compatible with ec2 dataRange.color.\n // The mapping order of dataRange.color is: [high value, ..., low value]\n // whereas inRange.color and outOfRange.color is [low value, ..., high value]\n // Notice: ec2 has no inverse.\n if (isArray(thisOption.color) // If there has been inRange: {symbol: ...}, adding color is a mistake.\n // So adding color only when no inRange defined.\n && !base.inRange) {\n base.inRange = {\n color: thisOption.color.slice().reverse()\n };\n } // Compatible with previous logic, always give a defautl color, otherwise\n // simple config with no inRange and outOfRange will not work.\n // Originally we use visualMap.color as the default color, but setOption at\n // the second time the default color will be erased. So we change to use\n // constant DEFAULT_COLOR.\n // If user do not want the defualt color, set inRange: {color: null}.\n\n\n base.inRange = base.inRange || {\n color: DEFAULT_COLOR\n }; // If using shortcut like: {inRange: 'symbol'}, complete default value.\n\n each(this.stateList, function (state) {\n var visualType = base[state];\n\n if (zrUtil.isString(visualType)) {\n var defa = visualDefault.get(visualType, 'active', isCategory);\n\n if (defa) {\n base[state] = {};\n base[state][visualType] = defa;\n } else {\n // Mark as not specified.\n delete base[state];\n }\n }\n }, this);\n }\n\n function completeInactive(base, stateExist, stateAbsent) {\n var optExist = base[stateExist];\n var optAbsent = base[stateAbsent];\n\n if (optExist && !optAbsent) {\n optAbsent = base[stateAbsent] = {};\n each(optExist, function (visualData, visualType) {\n if (!VisualMapping.isValidType(visualType)) {\n return;\n }\n\n var defa = visualDefault.get(visualType, 'inactive', isCategory);\n\n if (defa != null) {\n optAbsent[visualType] = defa; // Compatibable with ec2:\n // Only inactive color to rgba(0,0,0,0) can not\n // make label transparent, so use opacity also.\n\n if (visualType === 'color' && !optAbsent.hasOwnProperty('opacity') && !optAbsent.hasOwnProperty('colorAlpha')) {\n optAbsent.opacity = [0, 0];\n }\n }\n });\n }\n }\n\n function completeController(controller) {\n var symbolExists = (controller.inRange || {}).symbol || (controller.outOfRange || {}).symbol;\n var symbolSizeExists = (controller.inRange || {}).symbolSize || (controller.outOfRange || {}).symbolSize;\n var inactiveColor = this.get('inactiveColor');\n each(this.stateList, function (state) {\n var itemSize = this.itemSize;\n var visuals = controller[state]; // Set inactive color for controller if no other color\n // attr (like colorAlpha) specified.\n\n if (!visuals) {\n visuals = controller[state] = {\n color: isCategory ? inactiveColor : [inactiveColor]\n };\n } // Consistent symbol and symbolSize if not specified.\n\n\n if (visuals.symbol == null) {\n visuals.symbol = symbolExists && zrUtil.clone(symbolExists) || (isCategory ? 'roundRect' : ['roundRect']);\n }\n\n if (visuals.symbolSize == null) {\n visuals.symbolSize = symbolSizeExists && zrUtil.clone(symbolSizeExists) || (isCategory ? itemSize[0] : [itemSize[0], itemSize[0]]);\n } // Filter square and none.\n\n\n visuals.symbol = mapVisual(visuals.symbol, function (symbol) {\n return symbol === 'none' || symbol === 'square' ? 'roundRect' : symbol;\n }); // Normalize symbolSize\n\n var symbolSize = visuals.symbolSize;\n\n if (symbolSize != null) {\n var max = -Infinity; // symbolSize can be object when categories defined.\n\n eachVisual(symbolSize, function (value) {\n value > max && (max = value);\n });\n visuals.symbolSize = mapVisual(symbolSize, function (value) {\n return linearMap(value, [0, max], [0, itemSize[0]], true);\n });\n }\n }, this);\n }\n },\n\n /**\n * @protected\n */\n resetItemSize: function () {\n this.itemSize = [parseFloat(this.get('itemWidth')), parseFloat(this.get('itemHeight'))];\n },\n\n /**\n * @public\n */\n isCategory: function () {\n return !!this.option.categories;\n },\n\n /**\n * @public\n * @abstract\n */\n setSelected: noop,\n\n /**\n * @public\n * @abstract\n * @param {*|module:echarts/data/List} valueOrData\n * @param {number} dataIndex\n * @return {string} state See this.stateList\n */\n getValueState: noop,\n\n /**\n * FIXME\n * Do not publish to thirt-part-dev temporarily\n * util the interface is stable. (Should it return\n * a function but not visual meta?)\n *\n * @pubilc\n * @abstract\n * @param {Function} getColorVisual\n * params: value, valueState\n * return: color\n * @return {Object} visualMeta\n * should includes {stops, outerColors}\n * outerColor means [colorBeyondMinValue, colorBeyondMaxValue]\n */\n getVisualMeta: noop\n});\nvar _default = VisualMapModel;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nfunction dataToCoordSize(dataSize, dataItem) {\n // dataItem is necessary in log axis.\n return zrUtil.map(['Radius', 'Angle'], function (dim, dimIdx) {\n var axis = this['get' + dim + 'Axis']();\n var val = dataItem[dimIdx];\n var halfSize = dataSize[dimIdx] / 2;\n var method = 'dataTo' + dim;\n var result = axis.type === 'category' ? axis.getBandWidth() : Math.abs(axis[method](val - halfSize) - axis[method](val + halfSize));\n\n if (dim === 'Angle') {\n result = result * Math.PI / 180;\n }\n\n return result;\n }, this);\n}\n\nfunction _default(coordSys) {\n var radiusAxis = coordSys.getRadiusAxis();\n var angleAxis = coordSys.getAngleAxis();\n var radius = radiusAxis.getExtent();\n radius[0] > radius[1] && radius.reverse();\n return {\n coordSys: {\n type: 'polar',\n cx: coordSys.cx,\n cy: coordSys.cy,\n r: radius[1],\n r0: radius[0]\n },\n api: {\n coord: zrUtil.bind(function (data) {\n var radius = radiusAxis.dataToRadius(data[0]);\n var angle = angleAxis.dataToAngle(data[1]);\n var coord = coordSys.coordToPoint([radius, angle]);\n coord.push(radius, angle * Math.PI / 180);\n return coord;\n }),\n size: zrUtil.bind(dataToCoordSize, coordSys)\n }\n };\n}\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\n/**\n * @param {Object} opt {labelInside}\n * @return {Object} {\n * position, rotation, labelDirection, labelOffset,\n * tickDirection, labelRotate, labelInterval, z2\n * }\n */\nfunction layout(axisModel, opt) {\n opt = opt || {};\n var single = axisModel.coordinateSystem;\n var axis = axisModel.axis;\n var layout = {};\n var axisPosition = axis.position;\n var orient = axis.orient;\n var rect = single.getRect();\n var rectBound = [rect.x, rect.x + rect.width, rect.y, rect.y + rect.height];\n var positionMap = {\n horizontal: {\n top: rectBound[2],\n bottom: rectBound[3]\n },\n vertical: {\n left: rectBound[0],\n right: rectBound[1]\n }\n };\n layout.position = [orient === 'vertical' ? positionMap.vertical[axisPosition] : rectBound[0], orient === 'horizontal' ? positionMap.horizontal[axisPosition] : rectBound[3]];\n var r = {\n horizontal: 0,\n vertical: 1\n };\n layout.rotation = Math.PI / 2 * r[orient];\n var directionMap = {\n top: -1,\n bottom: 1,\n right: 1,\n left: -1\n };\n layout.labelDirection = layout.tickDirection = layout.nameDirection = directionMap[axisPosition];\n\n if (axisModel.get('axisTick.inside')) {\n layout.tickDirection = -layout.tickDirection;\n }\n\n if (zrUtil.retrieve(opt.labelInside, axisModel.get('axisLabel.inside'))) {\n layout.labelDirection = -layout.labelDirection;\n }\n\n var labelRotation = opt.rotate;\n labelRotation == null && (labelRotation = axisModel.get('axisLabel.rotate'));\n layout.labelRotation = axisPosition === 'top' ? -labelRotation : labelRotation;\n layout.labelInterval = axis.getLabelInterval();\n layout.z2 = 1;\n return layout;\n}\n\nexports.layout = layout;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar modelUtil = require(\"../../util/model\");\n\nvar modelHelper = require(\"./modelHelper\");\n\nvar findPointFromSeries = require(\"./findPointFromSeries\");\n\nvar each = zrUtil.each;\nvar curry = zrUtil.curry;\nvar get = modelUtil.makeGetter();\n/**\n * Basic logic: check all axis, if they do not demand show/highlight,\n * then hide/downplay them.\n *\n * @param {Object} coordSysAxesInfo\n * @param {Object} payload\n * @param {string} [payload.currTrigger] 'click' | 'mousemove' | 'leave'\n * @param {Array.} [payload.x] x and y, which are mandatory, specify a point to\n * trigger axisPointer and tooltip.\n * @param {Array.} [payload.y] x and y, which are mandatory, specify a point to\n * trigger axisPointer and tooltip.\n * @param {Object} [payload.seriesIndex] finder, optional, restrict target axes.\n * @param {Object} [payload.dataIndex] finder, restrict target axes.\n * @param {Object} [payload.axesInfo] finder, restrict target axes.\n * [{\n * axisDim: 'x'|'y'|'angle'|...,\n * axisIndex: ...,\n * value: ...\n * }, ...]\n * @param {Function} [payload.dispatchAction]\n * @param {Object} [payload.tooltipOption]\n * @param {Object|Array.|Function} [payload.position] Tooltip position,\n * which can be specified in dispatchAction\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n * @return {Object} content of event obj for echarts.connect.\n */\n\nfunction _default(payload, ecModel, api) {\n var currTrigger = payload.currTrigger;\n var point = [payload.x, payload.y];\n var finder = payload;\n var dispatchAction = payload.dispatchAction || zrUtil.bind(api.dispatchAction, api);\n var coordSysAxesInfo = ecModel.getComponent('axisPointer').coordSysAxesInfo; // Pending\n // See #6121. But we are not able to reproduce it yet.\n\n if (!coordSysAxesInfo) {\n return;\n }\n\n if (illegalPoint(point)) {\n // Used in the default behavior of `connection`: use the sample seriesIndex\n // and dataIndex. And also used in the tooltipView trigger.\n point = findPointFromSeries({\n seriesIndex: finder.seriesIndex,\n // Do not use dataIndexInside from other ec instance.\n // FIXME: auto detect it?\n dataIndex: finder.dataIndex\n }, ecModel).point;\n }\n\n var isIllegalPoint = illegalPoint(point); // Axis and value can be specified when calling dispatchAction({type: 'updateAxisPointer'}).\n // Notice: In this case, it is difficult to get the `point` (which is necessary to show\n // tooltip, so if point is not given, we just use the point found by sample seriesIndex\n // and dataIndex.\n\n var inputAxesInfo = finder.axesInfo;\n var axesInfo = coordSysAxesInfo.axesInfo;\n var shouldHide = currTrigger === 'leave' || illegalPoint(point);\n var outputFinder = {};\n var showValueMap = {};\n var dataByCoordSys = {\n list: [],\n map: {}\n };\n var updaters = {\n showPointer: curry(showPointer, showValueMap),\n showTooltip: curry(showTooltip, dataByCoordSys)\n }; // Process for triggered axes.\n\n each(coordSysAxesInfo.coordSysMap, function (coordSys, coordSysKey) {\n // If a point given, it must be contained by the coordinate system.\n var coordSysContainsPoint = isIllegalPoint || coordSys.containPoint(point);\n each(coordSysAxesInfo.coordSysAxesInfo[coordSysKey], function (axisInfo, key) {\n var axis = axisInfo.axis;\n var inputAxisInfo = findInputAxisInfo(inputAxesInfo, axisInfo); // If no inputAxesInfo, no axis is restricted.\n\n if (!shouldHide && coordSysContainsPoint && (!inputAxesInfo || inputAxisInfo)) {\n var val = inputAxisInfo && inputAxisInfo.value;\n\n if (val == null && !isIllegalPoint) {\n val = axis.pointToData(point);\n }\n\n val != null && processOnAxis(axisInfo, val, updaters, false, outputFinder);\n }\n });\n }); // Process for linked axes.\n\n var linkTriggers = {};\n each(axesInfo, function (tarAxisInfo, tarKey) {\n var linkGroup = tarAxisInfo.linkGroup; // If axis has been triggered in the previous stage, it should not be triggered by link.\n\n if (linkGroup && !showValueMap[tarKey]) {\n each(linkGroup.axesInfo, function (srcAxisInfo, srcKey) {\n var srcValItem = showValueMap[srcKey]; // If srcValItem exist, source axis is triggered, so link to target axis.\n\n if (srcAxisInfo !== tarAxisInfo && srcValItem) {\n var val = srcValItem.value;\n linkGroup.mapper && (val = tarAxisInfo.axis.scale.parse(linkGroup.mapper(val, makeMapperParam(srcAxisInfo), makeMapperParam(tarAxisInfo))));\n linkTriggers[tarAxisInfo.key] = val;\n }\n });\n }\n });\n each(linkTriggers, function (val, tarKey) {\n processOnAxis(axesInfo[tarKey], val, updaters, true, outputFinder);\n });\n updateModelActually(showValueMap, axesInfo, outputFinder);\n dispatchTooltipActually(dataByCoordSys, point, payload, dispatchAction);\n dispatchHighDownActually(axesInfo, dispatchAction, api);\n return outputFinder;\n}\n\nfunction processOnAxis(axisInfo, newValue, updaters, dontSnap, outputFinder) {\n var axis = axisInfo.axis;\n\n if (axis.scale.isBlank() || !axis.containData(newValue)) {\n return;\n }\n\n if (!axisInfo.involveSeries) {\n updaters.showPointer(axisInfo, newValue);\n return;\n } // Heavy calculation. So put it after axis.containData checking.\n\n\n var payloadInfo = buildPayloadsBySeries(newValue, axisInfo);\n var payloadBatch = payloadInfo.payloadBatch;\n var snapToValue = payloadInfo.snapToValue; // Fill content of event obj for echarts.connect.\n // By defualt use the first involved series data as a sample to connect.\n\n if (payloadBatch[0] && outputFinder.seriesIndex == null) {\n zrUtil.extend(outputFinder, payloadBatch[0]);\n } // If no linkSource input, this process is for collecting link\n // target, where snap should not be accepted.\n\n\n if (!dontSnap && axisInfo.snap) {\n if (axis.containData(snapToValue) && snapToValue != null) {\n newValue = snapToValue;\n }\n }\n\n updaters.showPointer(axisInfo, newValue, payloadBatch, outputFinder); // Tooltip should always be snapToValue, otherwise there will be\n // incorrect \"axis value ~ series value\" mapping displayed in tooltip.\n\n updaters.showTooltip(axisInfo, payloadInfo, snapToValue);\n}\n\nfunction buildPayloadsBySeries(value, axisInfo) {\n var axis = axisInfo.axis;\n var dim = axis.dim;\n var snapToValue = value;\n var payloadBatch = [];\n var minDist = Number.MAX_VALUE;\n var minDiff = -1;\n each(axisInfo.seriesModels, function (series, idx) {\n var dataDim = series.coordDimToDataDim(dim);\n var seriesNestestValue;\n var dataIndices;\n\n if (series.getAxisTooltipData) {\n var result = series.getAxisTooltipData(dataDim, value, axis);\n dataIndices = result.dataIndices;\n seriesNestestValue = result.nestestValue;\n } else {\n dataIndices = series.getData().indicesOfNearest(dataDim[0], value, // Add a threshold to avoid find the wrong dataIndex\n // when data length is not same.\n false, axis.type === 'category' ? 0.5 : null);\n\n if (!dataIndices.length) {\n return;\n }\n\n seriesNestestValue = series.getData().get(dataDim[0], dataIndices[0]);\n }\n\n if (seriesNestestValue == null || !isFinite(seriesNestestValue)) {\n return;\n }\n\n var diff = value - seriesNestestValue;\n var dist = Math.abs(diff); // Consider category case\n\n if (dist <= minDist) {\n if (dist < minDist || diff >= 0 && minDiff < 0) {\n minDist = dist;\n minDiff = diff;\n snapToValue = seriesNestestValue;\n payloadBatch.length = 0;\n }\n\n each(dataIndices, function (dataIndex) {\n payloadBatch.push({\n seriesIndex: series.seriesIndex,\n dataIndexInside: dataIndex,\n dataIndex: series.getData().getRawIndex(dataIndex)\n });\n });\n }\n });\n return {\n payloadBatch: payloadBatch,\n snapToValue: snapToValue\n };\n}\n\nfunction showPointer(showValueMap, axisInfo, value, payloadBatch) {\n showValueMap[axisInfo.key] = {\n value: value,\n payloadBatch: payloadBatch\n };\n}\n\nfunction showTooltip(dataByCoordSys, axisInfo, payloadInfo, value) {\n var payloadBatch = payloadInfo.payloadBatch;\n var axis = axisInfo.axis;\n var axisModel = axis.model;\n var axisPointerModel = axisInfo.axisPointerModel; // If no data, do not create anything in dataByCoordSys,\n // whose length will be used to judge whether dispatch action.\n\n if (!axisInfo.triggerTooltip || !payloadBatch.length) {\n return;\n }\n\n var coordSysModel = axisInfo.coordSys.model;\n var coordSysKey = modelHelper.makeKey(coordSysModel);\n var coordSysItem = dataByCoordSys.map[coordSysKey];\n\n if (!coordSysItem) {\n coordSysItem = dataByCoordSys.map[coordSysKey] = {\n coordSysId: coordSysModel.id,\n coordSysIndex: coordSysModel.componentIndex,\n coordSysType: coordSysModel.type,\n coordSysMainType: coordSysModel.mainType,\n dataByAxis: []\n };\n dataByCoordSys.list.push(coordSysItem);\n }\n\n coordSysItem.dataByAxis.push({\n axisDim: axis.dim,\n axisIndex: axisModel.componentIndex,\n axisType: axisModel.type,\n axisId: axisModel.id,\n value: value,\n // Caustion: viewHelper.getValueLabel is actually on \"view stage\", which\n // depends that all models have been updated. So it should not be performed\n // here. Considering axisPointerModel used here is volatile, which is hard\n // to be retrieve in TooltipView, we prepare parameters here.\n valueLabelOpt: {\n precision: axisPointerModel.get('label.precision'),\n formatter: axisPointerModel.get('label.formatter')\n },\n seriesDataIndices: payloadBatch.slice()\n });\n}\n\nfunction updateModelActually(showValueMap, axesInfo, outputFinder) {\n var outputAxesInfo = outputFinder.axesInfo = []; // Basic logic: If no 'show' required, 'hide' this axisPointer.\n\n each(axesInfo, function (axisInfo, key) {\n var option = axisInfo.axisPointerModel.option;\n var valItem = showValueMap[key];\n\n if (valItem) {\n !axisInfo.useHandle && (option.status = 'show');\n option.value = valItem.value; // For label formatter param and highlight.\n\n option.seriesDataIndices = (valItem.payloadBatch || []).slice();\n } // When always show (e.g., handle used), remain\n // original value and status.\n else {\n // If hide, value still need to be set, consider\n // click legend to toggle axis blank.\n !axisInfo.useHandle && (option.status = 'hide');\n } // If status is 'hide', should be no info in payload.\n\n\n option.status === 'show' && outputAxesInfo.push({\n axisDim: axisInfo.axis.dim,\n axisIndex: axisInfo.axis.model.componentIndex,\n value: option.value\n });\n });\n}\n\nfunction dispatchTooltipActually(dataByCoordSys, point, payload, dispatchAction) {\n // Basic logic: If no showTip required, hideTip will be dispatched.\n if (illegalPoint(point) || !dataByCoordSys.list.length) {\n dispatchAction({\n type: 'hideTip'\n });\n return;\n } // In most case only one axis (or event one series is used). It is\n // convinient to fetch payload.seriesIndex and payload.dataIndex\n // dirtectly. So put the first seriesIndex and dataIndex of the first\n // axis on the payload.\n\n\n var sampleItem = ((dataByCoordSys.list[0].dataByAxis[0] || {}).seriesDataIndices || [])[0] || {};\n dispatchAction({\n type: 'showTip',\n escapeConnect: true,\n x: point[0],\n y: point[1],\n tooltipOption: payload.tooltipOption,\n position: payload.position,\n dataIndexInside: sampleItem.dataIndexInside,\n dataIndex: sampleItem.dataIndex,\n seriesIndex: sampleItem.seriesIndex,\n dataByCoordSys: dataByCoordSys.list\n });\n}\n\nfunction dispatchHighDownActually(axesInfo, dispatchAction, api) {\n // FIXME\n // highlight status modification shoule be a stage of main process?\n // (Consider confilct (e.g., legend and axisPointer) and setOption)\n var zr = api.getZr();\n var highDownKey = 'axisPointerLastHighlights';\n var lastHighlights = get(zr)[highDownKey] || {};\n var newHighlights = get(zr)[highDownKey] = {}; // Update highlight/downplay status according to axisPointer model.\n // Build hash map and remove duplicate incidentally.\n\n each(axesInfo, function (axisInfo, key) {\n var option = axisInfo.axisPointerModel.option;\n option.status === 'show' && each(option.seriesDataIndices, function (batchItem) {\n var key = batchItem.seriesIndex + ' | ' + batchItem.dataIndex;\n newHighlights[key] = batchItem;\n });\n }); // Diff.\n\n var toHighlight = [];\n var toDownplay = [];\n zrUtil.each(lastHighlights, function (batchItem, key) {\n !newHighlights[key] && toDownplay.push(batchItem);\n });\n zrUtil.each(newHighlights, function (batchItem, key) {\n !lastHighlights[key] && toHighlight.push(batchItem);\n });\n toDownplay.length && api.dispatchAction({\n type: 'downplay',\n escapeConnect: true,\n batch: toDownplay\n });\n toHighlight.length && api.dispatchAction({\n type: 'highlight',\n escapeConnect: true,\n batch: toHighlight\n });\n}\n\nfunction findInputAxisInfo(inputAxesInfo, axisInfo) {\n for (var i = 0; i < (inputAxesInfo || []).length; i++) {\n var inputAxisInfo = inputAxesInfo[i];\n\n if (axisInfo.axis.dim === inputAxisInfo.axisDim && axisInfo.axis.model.componentIndex === inputAxisInfo.axisIndex) {\n return inputAxisInfo;\n }\n }\n}\n\nfunction makeMapperParam(axisInfo) {\n var axisModel = axisInfo.axis.model;\n var item = {};\n var dim = item.axisDim = axisInfo.axis.dim;\n item.axisIndex = item[dim + 'AxisIndex'] = axisModel.componentIndex;\n item.axisName = item[dim + 'AxisName'] = axisModel.name;\n item.axisId = item[dim + 'AxisId'] = axisModel.id;\n return item;\n}\n\nfunction illegalPoint(point) {\n return !point || point[0] == null || isNaN(point[0]) || point[1] == null || isNaN(point[1]);\n}\n\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\n/**\n * @event legendScroll\n * @type {Object}\n * @property {string} type 'legendScroll'\n * @property {string} scrollDataIndex\n */\necharts.registerAction('legendScroll', 'legendscroll', function (payload, ecModel) {\n var scrollDataIndex = payload.scrollDataIndex;\n scrollDataIndex != null && ecModel.eachComponent({\n mainType: 'legend',\n subType: 'scroll',\n query: payload\n }, function (legendModel) {\n legendModel.setScrollDataIndex(scrollDataIndex);\n });\n});","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar Axis = require(\"../Axis\");\n\n/**\n * Extend axis 2d\n * @constructor module:echarts/coord/cartesian/Axis2D\n * @extends {module:echarts/coord/cartesian/Axis}\n * @param {string} dim\n * @param {*} scale\n * @param {Array.} coordExtent\n * @param {string} axisType\n * @param {string} position\n */\nvar Axis2D = function (dim, scale, coordExtent, axisType, position) {\n Axis.call(this, dim, scale, coordExtent);\n /**\n * Axis type\n * - 'category'\n * - 'value'\n * - 'time'\n * - 'log'\n * @type {string}\n */\n\n this.type = axisType || 'value';\n /**\n * Axis position\n * - 'top'\n * - 'bottom'\n * - 'left'\n * - 'right'\n */\n\n this.position = position || 'bottom';\n};\n\nAxis2D.prototype = {\n constructor: Axis2D,\n\n /**\n * Index of axis, can be used as key\n */\n index: 0,\n\n /**\n * If axis is on the zero position of the other axis\n * @type {boolean}\n */\n onZero: false,\n\n /**\n * Axis model\n * @param {module:echarts/coord/cartesian/AxisModel}\n */\n model: null,\n isHorizontal: function () {\n var position = this.position;\n return position === 'top' || position === 'bottom';\n },\n\n /**\n * Each item cooresponds to this.getExtent(), which\n * means globalExtent[0] may greater than globalExtent[1],\n * unless `asc` is input.\n *\n * @param {boolean} [asc]\n * @return {Array.}\n */\n getGlobalExtent: function (asc) {\n var ret = this.getExtent();\n ret[0] = this.toGlobalCoord(ret[0]);\n ret[1] = this.toGlobalCoord(ret[1]);\n asc && ret[0] > ret[1] && ret.reverse();\n return ret;\n },\n getOtherAxis: function () {\n this.grid.getOtherAxis();\n },\n\n /**\n * If label is ignored.\n * Automatically used when axis is category and label can not be all shown\n * @param {number} idx\n * @return {boolean}\n */\n isLabelIgnored: function (idx) {\n if (this.type === 'category') {\n var labelInterval = this.getLabelInterval();\n return typeof labelInterval === 'function' && !labelInterval(idx, this.scale.getLabel(idx)) || idx % (labelInterval + 1);\n }\n },\n\n /**\n * @override\n */\n pointToData: function (point, clamp) {\n return this.coordToData(this.toLocalCoord(point[this.dim === 'x' ? 0 : 1]), clamp);\n },\n\n /**\n * Transform global coord to local coord,\n * i.e. var localCoord = axis.toLocalCoord(80);\n * designate by module:echarts/coord/cartesian/Grid.\n * @type {Function}\n */\n toLocalCoord: null,\n\n /**\n * Transform global coord to local coord,\n * i.e. var globalCoord = axis.toLocalCoord(40);\n * designate by module:echarts/coord/cartesian/Grid.\n * @type {Function}\n */\n toGlobalCoord: null\n};\nzrUtil.inherits(Axis2D, Axis);\nvar _default = Axis2D;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar _number = require(\"../../util/number\");\n\nvar parsePercent = _number.parsePercent;\nvar each = zrUtil.each;\n\nfunction _default(ecModel) {\n var groupResult = groupSeriesByAxis(ecModel);\n each(groupResult, function (groupItem) {\n var seriesModels = groupItem.seriesModels;\n\n if (!seriesModels.length) {\n return;\n }\n\n calculateBase(groupItem);\n each(seriesModels, function (seriesModel, idx) {\n layoutSingleSeries(seriesModel, groupItem.boxOffsetList[idx], groupItem.boxWidthList[idx]);\n });\n });\n}\n/**\n * Group series by axis.\n */\n\n\nfunction groupSeriesByAxis(ecModel) {\n var result = [];\n var axisList = [];\n ecModel.eachSeriesByType('boxplot', function (seriesModel) {\n var baseAxis = seriesModel.getBaseAxis();\n var idx = zrUtil.indexOf(axisList, baseAxis);\n\n if (idx < 0) {\n idx = axisList.length;\n axisList[idx] = baseAxis;\n result[idx] = {\n axis: baseAxis,\n seriesModels: []\n };\n }\n\n result[idx].seriesModels.push(seriesModel);\n });\n return result;\n}\n/**\n * Calculate offset and box width for each series.\n */\n\n\nfunction calculateBase(groupItem) {\n var extent;\n var baseAxis = groupItem.axis;\n var seriesModels = groupItem.seriesModels;\n var seriesCount = seriesModels.length;\n var boxWidthList = groupItem.boxWidthList = [];\n var boxOffsetList = groupItem.boxOffsetList = [];\n var boundList = [];\n var bandWidth;\n\n if (baseAxis.type === 'category') {\n bandWidth = baseAxis.getBandWidth();\n } else {\n var maxDataCount = 0;\n each(seriesModels, function (seriesModel) {\n maxDataCount = Math.max(maxDataCount, seriesModel.getData().count());\n });\n extent = baseAxis.getExtent(), Math.abs(extent[1] - extent[0]) / maxDataCount;\n }\n\n each(seriesModels, function (seriesModel) {\n var boxWidthBound = seriesModel.get('boxWidth');\n\n if (!zrUtil.isArray(boxWidthBound)) {\n boxWidthBound = [boxWidthBound, boxWidthBound];\n }\n\n boundList.push([parsePercent(boxWidthBound[0], bandWidth) || 0, parsePercent(boxWidthBound[1], bandWidth) || 0]);\n });\n var availableWidth = bandWidth * 0.8 - 2;\n var boxGap = availableWidth / seriesCount * 0.3;\n var boxWidth = (availableWidth - boxGap * (seriesCount - 1)) / seriesCount;\n var base = boxWidth / 2 - availableWidth / 2;\n each(seriesModels, function (seriesModel, idx) {\n boxOffsetList.push(base);\n base += boxGap + boxWidth;\n boxWidthList.push(Math.min(Math.max(boxWidth, boundList[idx][0]), boundList[idx][1]));\n });\n}\n/**\n * Calculate points location for each series.\n */\n\n\nfunction layoutSingleSeries(seriesModel, offset, boxWidth) {\n var coordSys = seriesModel.coordinateSystem;\n var data = seriesModel.getData();\n var halfWidth = boxWidth / 2;\n var chartLayout = seriesModel.get('layout');\n var variableDim = chartLayout === 'horizontal' ? 0 : 1;\n var constDim = 1 - variableDim;\n var coordDims = ['x', 'y'];\n var vDims = [];\n var cDim;\n zrUtil.each(data.dimensions, function (dimName) {\n var dimInfo = data.getDimensionInfo(dimName);\n var coordDim = dimInfo.coordDim;\n\n if (coordDim === coordDims[constDim]) {\n vDims.push(dimName);\n } else if (coordDim === coordDims[variableDim]) {\n cDim = dimName;\n }\n });\n\n if (cDim == null || vDims.length < 5) {\n return;\n }\n\n data.each([cDim].concat(vDims), function () {\n var args = arguments;\n var axisDimVal = args[0];\n var idx = args[vDims.length + 1];\n var median = getPoint(args[3]);\n var end1 = getPoint(args[1]);\n var end5 = getPoint(args[5]);\n var whiskerEnds = [[end1, getPoint(args[2])], [end5, getPoint(args[4])]];\n layEndLine(end1);\n layEndLine(end5);\n layEndLine(median);\n var bodyEnds = [];\n addBodyEnd(whiskerEnds[0][1], 0);\n addBodyEnd(whiskerEnds[1][1], 1);\n data.setItemLayout(idx, {\n chartLayout: chartLayout,\n initBaseline: median[constDim],\n median: median,\n bodyEnds: bodyEnds,\n whiskerEnds: whiskerEnds\n });\n\n function getPoint(val) {\n var p = [];\n p[variableDim] = axisDimVal;\n p[constDim] = val;\n var point;\n\n if (isNaN(axisDimVal) || isNaN(val)) {\n point = [NaN, NaN];\n } else {\n point = coordSys.dataToPoint(p);\n point[variableDim] += offset;\n }\n\n return point;\n }\n\n function addBodyEnd(point, start) {\n var point1 = point.slice();\n var point2 = point.slice();\n point1[variableDim] += halfWidth;\n point2[variableDim] -= halfWidth;\n start ? bodyEnds.push(point1, point2) : bodyEnds.push(point2, point1);\n }\n\n function layEndLine(endCenter) {\n var line = [endCenter.slice(), endCenter.slice()];\n line[0][variableDim] -= halfWidth;\n line[1][variableDim] += halfWidth;\n whiskerEnds.push(line);\n }\n });\n}\n\nmodule.exports = _default;","var _config = require(\"./config\");\n\nvar devicePixelRatio = _config.devicePixelRatio;\n\nvar util = require(\"./core/util\");\n\nvar log = require(\"./core/log\");\n\nvar BoundingRect = require(\"./core/BoundingRect\");\n\nvar timsort = require(\"./core/timsort\");\n\nvar Layer = require(\"./Layer\");\n\nvar requestAnimationFrame = require(\"./animation/requestAnimationFrame\");\n\nvar Image = require(\"./graphic/Image\");\n\n/**\n * Default canvas painter\n * @module zrender/Painter\n * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)\n * errorrik (errorrik@gmail.com)\n * pissang (https://www.github.com/pissang)\n */\n// PENDIGN\n// Layer exceeds MAX_PROGRESSIVE_LAYER_NUMBER may have some problem when flush directly second time.\n//\n// Maximum progressive layer. When exceeding this number. All elements will be drawed in the last layer.\nvar MAX_PROGRESSIVE_LAYER_NUMBER = 5;\n\nfunction parseInt10(val) {\n return parseInt(val, 10);\n}\n\nfunction isLayerValid(layer) {\n if (!layer) {\n return false;\n }\n\n if (layer.__builtin__) {\n return true;\n }\n\n if (typeof layer.resize !== 'function' || typeof layer.refresh !== 'function') {\n return false;\n }\n\n return true;\n}\n\nfunction preProcessLayer(layer) {\n layer.__unusedCount++;\n}\n\nfunction postProcessLayer(layer) {\n if (layer.__unusedCount == 1) {\n layer.clear();\n }\n}\n\nvar tmpRect = new BoundingRect(0, 0, 0, 0);\nvar viewRect = new BoundingRect(0, 0, 0, 0);\n\nfunction isDisplayableCulled(el, width, height) {\n tmpRect.copy(el.getBoundingRect());\n\n if (el.transform) {\n tmpRect.applyTransform(el.transform);\n }\n\n viewRect.width = width;\n viewRect.height = height;\n return !tmpRect.intersect(viewRect);\n}\n\nfunction isClipPathChanged(clipPaths, prevClipPaths) {\n if (clipPaths == prevClipPaths) {\n // Can both be null or undefined\n return false;\n }\n\n if (!clipPaths || !prevClipPaths || clipPaths.length !== prevClipPaths.length) {\n return true;\n }\n\n for (var i = 0; i < clipPaths.length; i++) {\n if (clipPaths[i] !== prevClipPaths[i]) {\n return true;\n }\n }\n}\n\nfunction doClip(clipPaths, ctx) {\n for (var i = 0; i < clipPaths.length; i++) {\n var clipPath = clipPaths[i];\n clipPath.setTransform(ctx);\n ctx.beginPath();\n clipPath.buildPath(ctx, clipPath.shape);\n ctx.clip(); // Transform back\n\n clipPath.restoreTransform(ctx);\n }\n}\n\nfunction createRoot(width, height) {\n var domRoot = document.createElement('div'); // domRoot.onselectstart = returnFalse; // 避免页面选中的尴尬\n\n domRoot.style.cssText = ['position:relative', 'overflow:hidden', 'width:' + width + 'px', 'height:' + height + 'px', 'padding:0', 'margin:0', 'border-width:0'].join(';') + ';';\n return domRoot;\n}\n/**\n * @alias module:zrender/Painter\n * @constructor\n * @param {HTMLElement} root 绘图容器\n * @param {module:zrender/Storage} storage\n * @param {Object} opts\n */\n\n\nvar Painter = function (root, storage, opts) {\n this.type = 'canvas'; // In node environment using node-canvas\n\n var singleCanvas = !root.nodeName // In node ?\n || root.nodeName.toUpperCase() === 'CANVAS';\n this._opts = opts = util.extend({}, opts || {});\n /**\n * @type {number}\n */\n\n this.dpr = opts.devicePixelRatio || devicePixelRatio;\n /**\n * @type {boolean}\n * @private\n */\n\n this._singleCanvas = singleCanvas;\n /**\n * 绘图容器\n * @type {HTMLElement}\n */\n\n this.root = root;\n var rootStyle = root.style;\n\n if (rootStyle) {\n rootStyle['-webkit-tap-highlight-color'] = 'transparent';\n rootStyle['-webkit-user-select'] = rootStyle['user-select'] = rootStyle['-webkit-touch-callout'] = 'none';\n root.innerHTML = '';\n }\n /**\n * @type {module:zrender/Storage}\n */\n\n\n this.storage = storage;\n /**\n * @type {Array.}\n * @private\n */\n\n var zlevelList = this._zlevelList = [];\n /**\n * @type {Object.}\n * @private\n */\n\n var layers = this._layers = {};\n /**\n * @type {Object.}\n * @type {private}\n */\n\n this._layerConfig = {};\n\n if (!singleCanvas) {\n this._width = this._getSize(0);\n this._height = this._getSize(1);\n var domRoot = this._domRoot = createRoot(this._width, this._height);\n root.appendChild(domRoot);\n } else {\n if (opts.width != null) {\n root.width = opts.width;\n }\n\n if (opts.height != null) {\n root.height = opts.height;\n } // Use canvas width and height directly\n\n\n var width = root.width;\n var height = root.height;\n this._width = width;\n this._height = height; // Create layer if only one given canvas\n // Device pixel ratio is fixed to 1 because given canvas has its specified width and height\n\n var mainLayer = new Layer(root, this, 1);\n mainLayer.initContext(); // FIXME Use canvas width and height\n // mainLayer.resize(width, height);\n\n layers[0] = mainLayer;\n zlevelList.push(0);\n this._domRoot = root;\n } // Layers for progressive rendering\n\n\n this._progressiveLayers = [];\n /**\n * @type {module:zrender/Layer}\n * @private\n */\n\n this._hoverlayer;\n this._hoverElements = [];\n};\n\nPainter.prototype = {\n constructor: Painter,\n getType: function () {\n return 'canvas';\n },\n\n /**\n * If painter use a single canvas\n * @return {boolean}\n */\n isSingleCanvas: function () {\n return this._singleCanvas;\n },\n\n /**\n * @return {HTMLDivElement}\n */\n getViewportRoot: function () {\n return this._domRoot;\n },\n getViewportRootOffset: function () {\n var viewportRoot = this.getViewportRoot();\n\n if (viewportRoot) {\n return {\n offsetLeft: viewportRoot.offsetLeft || 0,\n offsetTop: viewportRoot.offsetTop || 0\n };\n }\n },\n\n /**\n * 刷新\n * @param {boolean} [paintAll=false] 强制绘制所有displayable\n */\n refresh: function (paintAll) {\n var list = this.storage.getDisplayList(true);\n var zlevelList = this._zlevelList;\n\n this._paintList(list, paintAll); // Paint custum layers\n\n\n for (var i = 0; i < zlevelList.length; i++) {\n var z = zlevelList[i];\n var layer = this._layers[z];\n\n if (!layer.__builtin__ && layer.refresh) {\n layer.refresh();\n }\n }\n\n this.refreshHover();\n\n if (this._progressiveLayers.length) {\n this._startProgessive();\n }\n\n return this;\n },\n addHover: function (el, hoverStyle) {\n if (el.__hoverMir) {\n return;\n }\n\n var elMirror = new el.constructor({\n style: el.style,\n shape: el.shape\n });\n elMirror.__from = el;\n el.__hoverMir = elMirror;\n elMirror.setStyle(hoverStyle);\n\n this._hoverElements.push(elMirror);\n },\n removeHover: function (el) {\n var elMirror = el.__hoverMir;\n var hoverElements = this._hoverElements;\n var idx = util.indexOf(hoverElements, elMirror);\n\n if (idx >= 0) {\n hoverElements.splice(idx, 1);\n }\n\n el.__hoverMir = null;\n },\n clearHover: function (el) {\n var hoverElements = this._hoverElements;\n\n for (var i = 0; i < hoverElements.length; i++) {\n var from = hoverElements[i].__from;\n\n if (from) {\n from.__hoverMir = null;\n }\n }\n\n hoverElements.length = 0;\n },\n refreshHover: function () {\n var hoverElements = this._hoverElements;\n var len = hoverElements.length;\n var hoverLayer = this._hoverlayer;\n hoverLayer && hoverLayer.clear();\n\n if (!len) {\n return;\n }\n\n timsort(hoverElements, this.storage.displayableSortFunc); // Use a extream large zlevel\n // FIXME?\n\n if (!hoverLayer) {\n hoverLayer = this._hoverlayer = this.getLayer(1e5);\n }\n\n var scope = {};\n hoverLayer.ctx.save();\n\n for (var i = 0; i < len;) {\n var el = hoverElements[i];\n var originalEl = el.__from; // Original el is removed\n // PENDING\n\n if (!(originalEl && originalEl.__zr)) {\n hoverElements.splice(i, 1);\n originalEl.__hoverMir = null;\n len--;\n continue;\n }\n\n i++; // Use transform\n // FIXME style and shape ?\n\n if (!originalEl.invisible) {\n el.transform = originalEl.transform;\n el.invTransform = originalEl.invTransform;\n el.__clipPaths = originalEl.__clipPaths; // el.\n\n this._doPaintEl(el, hoverLayer, true, scope);\n }\n }\n\n hoverLayer.ctx.restore();\n },\n _startProgessive: function () {\n var self = this;\n\n if (!self._furtherProgressive) {\n return;\n } // Use a token to stop progress steps triggered by\n // previous zr.refresh calling.\n\n\n var token = self._progressiveToken = +new Date();\n self._progress++;\n requestAnimationFrame(step);\n\n function step() {\n // In case refreshed or disposed\n if (token === self._progressiveToken && self.storage) {\n self._doPaintList(self.storage.getDisplayList());\n\n if (self._furtherProgressive) {\n self._progress++;\n requestAnimationFrame(step);\n } else {\n self._progressiveToken = -1;\n }\n }\n }\n },\n _clearProgressive: function () {\n this._progressiveToken = -1;\n this._progress = 0;\n util.each(this._progressiveLayers, function (layer) {\n layer.__dirty && layer.clear();\n });\n },\n _paintList: function (list, paintAll) {\n if (paintAll == null) {\n paintAll = false;\n }\n\n this._updateLayerStatus(list);\n\n this._clearProgressive();\n\n this.eachBuiltinLayer(preProcessLayer);\n\n this._doPaintList(list, paintAll);\n\n this.eachBuiltinLayer(postProcessLayer);\n },\n _doPaintList: function (list, paintAll) {\n var currentLayer;\n var currentZLevel;\n var ctx; // var invTransform = [];\n\n var scope;\n var progressiveLayerIdx = 0;\n var currentProgressiveLayer;\n var width = this._width;\n var height = this._height;\n var layerProgress;\n var frame = this._progress;\n\n function flushProgressiveLayer(layer) {\n var dpr = ctx.dpr || 1;\n ctx.save();\n ctx.globalAlpha = 1;\n ctx.shadowBlur = 0; // Avoid layer don't clear in next progressive frame\n\n currentLayer.__dirty = true;\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.drawImage(layer.dom, 0, 0, width * dpr, height * dpr);\n ctx.restore();\n }\n\n for (var i = 0, l = list.length; i < l; i++) {\n var el = list[i];\n var elZLevel = this._singleCanvas ? 0 : el.zlevel;\n var elFrame = el.__frame; // Flush at current context\n // PENDING\n\n if (elFrame < 0 && currentProgressiveLayer) {\n flushProgressiveLayer(currentProgressiveLayer);\n currentProgressiveLayer = null;\n } // Change draw layer\n\n\n if (currentZLevel !== elZLevel) {\n if (ctx) {\n ctx.restore();\n } // Reset scope\n\n\n scope = {}; // Only 0 zlevel if only has one canvas\n\n currentZLevel = elZLevel;\n currentLayer = this.getLayer(currentZLevel);\n\n if (!currentLayer.__builtin__) {\n log('ZLevel ' + currentZLevel + ' has been used by unkown layer ' + currentLayer.id);\n }\n\n ctx = currentLayer.ctx;\n ctx.save(); // Reset the count\n\n currentLayer.__unusedCount = 0;\n\n if (currentLayer.__dirty || paintAll) {\n currentLayer.clear();\n }\n }\n\n if (!(currentLayer.__dirty || paintAll)) {\n continue;\n }\n\n if (elFrame >= 0) {\n // Progressive layer changed\n if (!currentProgressiveLayer) {\n currentProgressiveLayer = this._progressiveLayers[Math.min(progressiveLayerIdx++, MAX_PROGRESSIVE_LAYER_NUMBER - 1)];\n currentProgressiveLayer.ctx.save();\n currentProgressiveLayer.renderScope = {};\n\n if (currentProgressiveLayer && currentProgressiveLayer.__progress > currentProgressiveLayer.__maxProgress) {\n // flushProgressiveLayer(currentProgressiveLayer);\n // Quick jump all progressive elements\n // All progressive element are not dirty, jump over and flush directly\n i = currentProgressiveLayer.__nextIdxNotProg - 1; // currentProgressiveLayer = null;\n\n continue;\n }\n\n layerProgress = currentProgressiveLayer.__progress;\n\n if (!currentProgressiveLayer.__dirty) {\n // Keep rendering\n frame = layerProgress;\n }\n\n currentProgressiveLayer.__progress = frame + 1;\n }\n\n if (elFrame === frame) {\n this._doPaintEl(el, currentProgressiveLayer, true, currentProgressiveLayer.renderScope);\n }\n } else {\n this._doPaintEl(el, currentLayer, paintAll, scope);\n }\n\n el.__dirty = false;\n }\n\n if (currentProgressiveLayer) {\n flushProgressiveLayer(currentProgressiveLayer);\n } // Restore the lastLayer ctx\n\n\n ctx && ctx.restore(); // If still has clipping state\n // if (scope.prevElClipPaths) {\n // ctx.restore();\n // }\n\n this._furtherProgressive = false;\n util.each(this._progressiveLayers, function (layer) {\n if (layer.__maxProgress >= layer.__progress) {\n this._furtherProgressive = true;\n }\n }, this);\n },\n _doPaintEl: function (el, currentLayer, forcePaint, scope) {\n var ctx = currentLayer.ctx;\n var m = el.transform;\n\n if ((currentLayer.__dirty || forcePaint) && // Ignore invisible element\n !el.invisible // Ignore transparent element\n && el.style.opacity !== 0 // Ignore scale 0 element, in some environment like node-canvas\n // Draw a scale 0 element can cause all following draw wrong\n // And setTransform with scale 0 will cause set back transform failed.\n && !(m && !m[0] && !m[3]) // Ignore culled element\n && !(el.culling && isDisplayableCulled(el, this._width, this._height))) {\n var clipPaths = el.__clipPaths; // Optimize when clipping on group with several elements\n\n if (scope.prevClipLayer !== currentLayer || isClipPathChanged(clipPaths, scope.prevElClipPaths)) {\n // If has previous clipping state, restore from it\n if (scope.prevElClipPaths) {\n scope.prevClipLayer.ctx.restore();\n scope.prevClipLayer = scope.prevElClipPaths = null; // Reset prevEl since context has been restored\n\n scope.prevEl = null;\n } // New clipping state\n\n\n if (clipPaths) {\n ctx.save();\n doClip(clipPaths, ctx);\n scope.prevClipLayer = currentLayer;\n scope.prevElClipPaths = clipPaths;\n }\n }\n\n el.beforeBrush && el.beforeBrush(ctx);\n el.brush(ctx, scope.prevEl || null);\n scope.prevEl = el;\n el.afterBrush && el.afterBrush(ctx);\n }\n },\n\n /**\n * 获取 zlevel 所在层,如果不存在则会创建一个新的层\n * @param {number} zlevel\n * @return {module:zrender/Layer}\n */\n getLayer: function (zlevel) {\n if (this._singleCanvas) {\n return this._layers[0];\n }\n\n var layer = this._layers[zlevel];\n\n if (!layer) {\n // Create a new layer\n layer = new Layer('zr_' + zlevel, this, this.dpr);\n layer.__builtin__ = true;\n\n if (this._layerConfig[zlevel]) {\n util.merge(layer, this._layerConfig[zlevel], true);\n }\n\n this.insertLayer(zlevel, layer); // Context is created after dom inserted to document\n // Or excanvas will get 0px clientWidth and clientHeight\n\n layer.initContext();\n }\n\n return layer;\n },\n insertLayer: function (zlevel, layer) {\n var layersMap = this._layers;\n var zlevelList = this._zlevelList;\n var len = zlevelList.length;\n var prevLayer = null;\n var i = -1;\n var domRoot = this._domRoot;\n\n if (layersMap[zlevel]) {\n log('ZLevel ' + zlevel + ' has been used already');\n return;\n } // Check if is a valid layer\n\n\n if (!isLayerValid(layer)) {\n log('Layer of zlevel ' + zlevel + ' is not valid');\n return;\n }\n\n if (len > 0 && zlevel > zlevelList[0]) {\n for (i = 0; i < len - 1; i++) {\n if (zlevelList[i] < zlevel && zlevelList[i + 1] > zlevel) {\n break;\n }\n }\n\n prevLayer = layersMap[zlevelList[i]];\n }\n\n zlevelList.splice(i + 1, 0, zlevel);\n layersMap[zlevel] = layer; // Vitual layer will not directly show on the screen.\n // (It can be a WebGL layer and assigned to a ZImage element)\n // But it still under management of zrender.\n\n if (!layer.virtual) {\n if (prevLayer) {\n var prevDom = prevLayer.dom;\n\n if (prevDom.nextSibling) {\n domRoot.insertBefore(layer.dom, prevDom.nextSibling);\n } else {\n domRoot.appendChild(layer.dom);\n }\n } else {\n if (domRoot.firstChild) {\n domRoot.insertBefore(layer.dom, domRoot.firstChild);\n } else {\n domRoot.appendChild(layer.dom);\n }\n }\n }\n },\n // Iterate each layer\n eachLayer: function (cb, context) {\n var zlevelList = this._zlevelList;\n var z;\n var i;\n\n for (i = 0; i < zlevelList.length; i++) {\n z = zlevelList[i];\n cb.call(context, this._layers[z], z);\n }\n },\n // Iterate each buildin layer\n eachBuiltinLayer: function (cb, context) {\n var zlevelList = this._zlevelList;\n var layer;\n var z;\n var i;\n\n for (i = 0; i < zlevelList.length; i++) {\n z = zlevelList[i];\n layer = this._layers[z];\n\n if (layer.__builtin__) {\n cb.call(context, layer, z);\n }\n }\n },\n // Iterate each other layer except buildin layer\n eachOtherLayer: function (cb, context) {\n var zlevelList = this._zlevelList;\n var layer;\n var z;\n var i;\n\n for (i = 0; i < zlevelList.length; i++) {\n z = zlevelList[i];\n layer = this._layers[z];\n\n if (!layer.__builtin__) {\n cb.call(context, layer, z);\n }\n }\n },\n\n /**\n * 获取所有已创建的层\n * @param {Array.} [prevLayer]\n */\n getLayers: function () {\n return this._layers;\n },\n _updateLayerStatus: function (list) {\n var layers = this._layers;\n var progressiveLayers = this._progressiveLayers;\n var elCountsLastFrame = {};\n var progressiveElCountsLastFrame = {};\n this.eachBuiltinLayer(function (layer, z) {\n elCountsLastFrame[z] = layer.elCount;\n layer.elCount = 0;\n layer.__dirty = false;\n });\n util.each(progressiveLayers, function (layer, idx) {\n progressiveElCountsLastFrame[idx] = layer.elCount;\n layer.elCount = 0;\n layer.__dirty = false;\n });\n var progressiveLayerCount = 0;\n var currentProgressiveLayer;\n var lastProgressiveKey;\n var frameCount = 0;\n\n for (var i = 0, l = list.length; i < l; i++) {\n var el = list[i];\n var zlevel = this._singleCanvas ? 0 : el.zlevel;\n var layer = layers[zlevel];\n var elProgress = el.progressive;\n\n if (layer) {\n layer.elCount++;\n layer.__dirty = layer.__dirty || el.__dirty;\n } /////// Update progressive\n\n\n if (elProgress >= 0) {\n // Fix wrong progressive sequence problem.\n if (lastProgressiveKey !== elProgress) {\n lastProgressiveKey = elProgress;\n frameCount++;\n }\n\n var elFrame = el.__frame = frameCount - 1;\n\n if (!currentProgressiveLayer) {\n var idx = Math.min(progressiveLayerCount, MAX_PROGRESSIVE_LAYER_NUMBER - 1);\n currentProgressiveLayer = progressiveLayers[idx];\n\n if (!currentProgressiveLayer) {\n currentProgressiveLayer = progressiveLayers[idx] = new Layer('progressive', this, this.dpr);\n currentProgressiveLayer.initContext();\n }\n\n currentProgressiveLayer.__maxProgress = 0;\n }\n\n currentProgressiveLayer.__dirty = currentProgressiveLayer.__dirty || el.__dirty;\n currentProgressiveLayer.elCount++;\n currentProgressiveLayer.__maxProgress = Math.max(currentProgressiveLayer.__maxProgress, elFrame);\n\n if (currentProgressiveLayer.__maxProgress >= currentProgressiveLayer.__progress) {\n // Should keep rendering this layer because progressive rendering is not finished yet\n layer.__dirty = true;\n }\n } else {\n el.__frame = -1;\n\n if (currentProgressiveLayer) {\n currentProgressiveLayer.__nextIdxNotProg = i;\n progressiveLayerCount++;\n currentProgressiveLayer = null;\n }\n }\n }\n\n if (currentProgressiveLayer) {\n progressiveLayerCount++;\n currentProgressiveLayer.__nextIdxNotProg = i;\n } // 层中的元素数量有发生变化\n\n\n this.eachBuiltinLayer(function (layer, z) {\n if (elCountsLastFrame[z] !== layer.elCount) {\n layer.__dirty = true;\n }\n });\n progressiveLayers.length = Math.min(progressiveLayerCount, MAX_PROGRESSIVE_LAYER_NUMBER);\n util.each(progressiveLayers, function (layer, idx) {\n if (progressiveElCountsLastFrame[idx] !== layer.elCount) {\n el.__dirty = true;\n }\n\n if (layer.__dirty) {\n layer.__progress = 0;\n }\n });\n },\n\n /**\n * 清除hover层外所有内容\n */\n clear: function () {\n this.eachBuiltinLayer(this._clearLayer);\n return this;\n },\n _clearLayer: function (layer) {\n layer.clear();\n },\n\n /**\n * 修改指定zlevel的绘制参数\n *\n * @param {string} zlevel\n * @param {Object} config 配置对象\n * @param {string} [config.clearColor=0] 每次清空画布的颜色\n * @param {string} [config.motionBlur=false] 是否开启动态模糊\n * @param {number} [config.lastFrameAlpha=0.7]\n * 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显\n */\n configLayer: function (zlevel, config) {\n if (config) {\n var layerConfig = this._layerConfig;\n\n if (!layerConfig[zlevel]) {\n layerConfig[zlevel] = config;\n } else {\n util.merge(layerConfig[zlevel], config, true);\n }\n\n var layer = this._layers[zlevel];\n\n if (layer) {\n util.merge(layer, layerConfig[zlevel], true);\n }\n }\n },\n\n /**\n * 删除指定层\n * @param {number} zlevel 层所在的zlevel\n */\n delLayer: function (zlevel) {\n var layers = this._layers;\n var zlevelList = this._zlevelList;\n var layer = layers[zlevel];\n\n if (!layer) {\n return;\n }\n\n layer.dom.parentNode.removeChild(layer.dom);\n delete layers[zlevel];\n zlevelList.splice(util.indexOf(zlevelList, zlevel), 1);\n },\n\n /**\n * 区域大小变化后重绘\n */\n resize: function (width, height) {\n var domRoot = this._domRoot; // FIXME Why ?\n\n domRoot.style.display = 'none'; // Save input w/h\n\n var opts = this._opts;\n width != null && (opts.width = width);\n height != null && (opts.height = height);\n width = this._getSize(0);\n height = this._getSize(1);\n domRoot.style.display = ''; // 优化没有实际改变的resize\n\n if (this._width != width || height != this._height) {\n domRoot.style.width = width + 'px';\n domRoot.style.height = height + 'px';\n\n for (var id in this._layers) {\n if (this._layers.hasOwnProperty(id)) {\n this._layers[id].resize(width, height);\n }\n }\n\n util.each(this._progressiveLayers, function (layer) {\n layer.resize(width, height);\n });\n this.refresh(true);\n }\n\n this._width = width;\n this._height = height;\n return this;\n },\n\n /**\n * 清除单独的一个层\n * @param {number} zlevel\n */\n clearLayer: function (zlevel) {\n var layer = this._layers[zlevel];\n\n if (layer) {\n layer.clear();\n }\n },\n\n /**\n * 释放\n */\n dispose: function () {\n this.root.innerHTML = '';\n this.root = this.storage = this._domRoot = this._layers = null;\n },\n\n /**\n * Get canvas which has all thing rendered\n * @param {Object} opts\n * @param {string} [opts.backgroundColor]\n * @param {number} [opts.pixelRatio]\n */\n getRenderedCanvas: function (opts) {\n opts = opts || {};\n\n if (this._singleCanvas) {\n return this._layers[0].dom;\n }\n\n var imageLayer = new Layer('image', this, opts.pixelRatio || this.dpr);\n imageLayer.initContext();\n imageLayer.clearColor = opts.backgroundColor;\n imageLayer.clear();\n var displayList = this.storage.getDisplayList(true);\n var scope = {};\n var zlevel;\n var self = this;\n\n function findAndDrawOtherLayer(smaller, larger) {\n var zlevelList = self._zlevelList;\n\n if (smaller == null) {\n smaller = -Infinity;\n }\n\n var intermediateLayer;\n\n for (var i = 0; i < zlevelList.length; i++) {\n var z = zlevelList[i];\n var layer = self._layers[z];\n\n if (!layer.__builtin__ && z > smaller && z < larger) {\n intermediateLayer = layer;\n break;\n }\n }\n\n if (intermediateLayer && intermediateLayer.renderToCanvas) {\n imageLayer.ctx.save();\n intermediateLayer.renderToCanvas(imageLayer.ctx);\n imageLayer.ctx.restore();\n }\n }\n\n for (var i = 0; i < displayList.length; i++) {\n var el = displayList[i];\n\n if (el.zlevel !== zlevel) {\n findAndDrawOtherLayer(zlevel, el.zlevel);\n zlevel = el.zlevel;\n }\n\n this._doPaintEl(el, imageLayer, true, scope);\n }\n\n findAndDrawOtherLayer(zlevel, Infinity);\n return imageLayer.dom;\n },\n\n /**\n * 获取绘图区域宽度\n */\n getWidth: function () {\n return this._width;\n },\n\n /**\n * 获取绘图区域高度\n */\n getHeight: function () {\n return this._height;\n },\n _getSize: function (whIdx) {\n var opts = this._opts;\n var wh = ['width', 'height'][whIdx];\n var cwh = ['clientWidth', 'clientHeight'][whIdx];\n var plt = ['paddingLeft', 'paddingTop'][whIdx];\n var prb = ['paddingRight', 'paddingBottom'][whIdx];\n\n if (opts[wh] != null && opts[wh] !== 'auto') {\n return parseFloat(opts[wh]);\n }\n\n var root = this.root; // IE8 does not support getComputedStyle, but it use VML.\n\n var stl = document.defaultView.getComputedStyle(root);\n return (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh])) - (parseInt10(stl[plt]) || 0) - (parseInt10(stl[prb]) || 0) | 0;\n },\n pathToImage: function (path, dpr) {\n dpr = dpr || this.dpr;\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n var rect = path.getBoundingRect();\n var style = path.style;\n var shadowBlurSize = style.shadowBlur;\n var shadowOffsetX = style.shadowOffsetX;\n var shadowOffsetY = style.shadowOffsetY;\n var lineWidth = style.hasStroke() ? style.lineWidth : 0;\n var leftMargin = Math.max(lineWidth / 2, -shadowOffsetX + shadowBlurSize);\n var rightMargin = Math.max(lineWidth / 2, shadowOffsetX + shadowBlurSize);\n var topMargin = Math.max(lineWidth / 2, -shadowOffsetY + shadowBlurSize);\n var bottomMargin = Math.max(lineWidth / 2, shadowOffsetY + shadowBlurSize);\n var width = rect.width + leftMargin + rightMargin;\n var height = rect.height + topMargin + bottomMargin;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n ctx.scale(dpr, dpr);\n ctx.clearRect(0, 0, width, height);\n ctx.dpr = dpr;\n var pathTransform = {\n position: path.position,\n rotation: path.rotation,\n scale: path.scale\n };\n path.position = [leftMargin - rect.x, topMargin - rect.y];\n path.rotation = 0;\n path.scale = [1, 1];\n path.updateTransform();\n\n if (path) {\n path.brush(ctx);\n }\n\n var ImageShape = Image;\n var imgShape = new ImageShape({\n style: {\n x: 0,\n y: 0,\n image: canvas\n }\n });\n\n if (pathTransform.position != null) {\n imgShape.position = path.position = pathTransform.position;\n }\n\n if (pathTransform.rotation != null) {\n imgShape.rotation = path.rotation = pathTransform.rotation;\n }\n\n if (pathTransform.scale != null) {\n imgShape.scale = path.scale = pathTransform.scale;\n }\n\n return imgShape;\n }\n};\nvar _default = Painter;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar textContain = require(\"zrender/lib/contain/text\");\n\nvar numberUtil = require(\"./number\");\n\n/**\n * 每三位默认加,格式化\n * @param {string|number} x\n * @return {string}\n */\nfunction addCommas(x) {\n if (isNaN(x)) {\n return '-';\n }\n\n x = (x + '').split('.');\n return x[0].replace(/(\\d{1,3})(?=(?:\\d{3})+(?!\\d))/g, '$1,') + (x.length > 1 ? '.' + x[1] : '');\n}\n/**\n * @param {string} str\n * @param {boolean} [upperCaseFirst=false]\n * @return {string} str\n */\n\n\nfunction toCamelCase(str, upperCaseFirst) {\n str = (str || '').toLowerCase().replace(/-(.)/g, function (match, group1) {\n return group1.toUpperCase();\n });\n\n if (upperCaseFirst && str) {\n str = str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n return str;\n}\n\nvar normalizeCssArray = zrUtil.normalizeCssArray;\n\nfunction encodeHTML(source) {\n return String(source).replace(/&/g, '&').replace(//g, '>').replace(/\"/g, '"').replace(/'/g, ''');\n}\n\nvar TPL_VAR_ALIAS = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];\n\nvar wrapVar = function (varName, seriesIdx) {\n return '{' + varName + (seriesIdx == null ? '' : seriesIdx) + '}';\n};\n/**\n * Template formatter\n * @param {string} tpl\n * @param {Array.|Object} paramsList\n * @param {boolean} [encode=false]\n * @return {string}\n */\n\n\nfunction formatTpl(tpl, paramsList, encode) {\n if (!zrUtil.isArray(paramsList)) {\n paramsList = [paramsList];\n }\n\n var seriesLen = paramsList.length;\n\n if (!seriesLen) {\n return '';\n }\n\n var $vars = paramsList[0].$vars || [];\n\n for (var i = 0; i < $vars.length; i++) {\n var alias = TPL_VAR_ALIAS[i];\n var val = wrapVar(alias, 0);\n tpl = tpl.replace(wrapVar(alias), encode ? encodeHTML(val) : val);\n }\n\n for (var seriesIdx = 0; seriesIdx < seriesLen; seriesIdx++) {\n for (var k = 0; k < $vars.length; k++) {\n var val = paramsList[seriesIdx][$vars[k]];\n tpl = tpl.replace(wrapVar(TPL_VAR_ALIAS[k], seriesIdx), encode ? encodeHTML(val) : val);\n }\n }\n\n return tpl;\n}\n/**\n * simple Template formatter\n *\n * @param {string} tpl\n * @param {Object} param\n * @param {boolean} [encode=false]\n * @return {string}\n */\n\n\nfunction formatTplSimple(tpl, param, encode) {\n zrUtil.each(param, function (value, key) {\n tpl = tpl.replace('{' + key + '}', encode ? encodeHTML(value) : value);\n });\n return tpl;\n}\n/**\n * @param {string} color\n * @param {string} [extraCssText]\n * @return {string}\n */\n\n\nfunction getTooltipMarker(color, extraCssText) {\n return color ? '' : '';\n}\n/**\n * @param {string} str\n * @return {string}\n * @inner\n */\n\n\nvar s2d = function (str) {\n return str < 10 ? '0' + str : str;\n};\n/**\n * ISO Date format\n * @param {string} tpl\n * @param {number} value\n * @param {boolean} [isUTC=false] Default in local time.\n * see `module:echarts/scale/Time`\n * and `module:echarts/util/number#parseDate`.\n * @inner\n */\n\n\nfunction formatTime(tpl, value, isUTC) {\n if (tpl === 'week' || tpl === 'month' || tpl === 'quarter' || tpl === 'half-year' || tpl === 'year') {\n tpl = 'MM-dd\\nyyyy';\n }\n\n var date = numberUtil.parseDate(value);\n var utc = isUTC ? 'UTC' : '';\n var y = date['get' + utc + 'FullYear']();\n var M = date['get' + utc + 'Month']() + 1;\n var d = date['get' + utc + 'Date']();\n var h = date['get' + utc + 'Hours']();\n var m = date['get' + utc + 'Minutes']();\n var s = date['get' + utc + 'Seconds']();\n tpl = tpl.replace('MM', s2d(M)).replace('M', M).replace('yyyy', y).replace('yy', y % 100).replace('dd', s2d(d)).replace('d', d).replace('hh', s2d(h)).replace('h', h).replace('mm', s2d(m)).replace('m', m).replace('ss', s2d(s)).replace('s', s);\n return tpl;\n}\n/**\n * Capital first\n * @param {string} str\n * @return {string}\n */\n\n\nfunction capitalFirst(str) {\n return str ? str.charAt(0).toUpperCase() + str.substr(1) : str;\n}\n\nvar truncateText = textContain.truncateText;\nvar getTextRect = textContain.getBoundingRect;\nexports.addCommas = addCommas;\nexports.toCamelCase = toCamelCase;\nexports.normalizeCssArray = normalizeCssArray;\nexports.encodeHTML = encodeHTML;\nexports.formatTpl = formatTpl;\nexports.formatTplSimple = formatTplSimple;\nexports.getTooltipMarker = getTooltipMarker;\nexports.formatTime = formatTime;\nexports.capitalFirst = capitalFirst;\nexports.truncateText = truncateText;\nexports.getTextRect = getTextRect;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar ComponentModel = require(\"../../model/Component\");\n\nvar List = require(\"../../data/List\");\n\nvar modelUtil = require(\"../../util/model\");\n\nvar TimelineModel = ComponentModel.extend({\n type: 'timeline',\n layoutMode: 'box',\n\n /**\n * @protected\n */\n defaultOption: {\n zlevel: 0,\n // 一级层叠\n z: 4,\n // 二级层叠\n show: true,\n axisType: 'time',\n // 模式是时间类型,支持 value, category\n realtime: true,\n left: '20%',\n top: null,\n right: '20%',\n bottom: 0,\n width: null,\n height: 40,\n padding: 5,\n controlPosition: 'left',\n // 'left' 'right' 'top' 'bottom' 'none'\n autoPlay: false,\n rewind: false,\n // 反向播放\n loop: true,\n playInterval: 2000,\n // 播放时间间隔,单位ms\n currentIndex: 0,\n itemStyle: {\n normal: {},\n emphasis: {}\n },\n label: {\n normal: {\n color: '#000'\n },\n emphasis: {}\n },\n data: []\n },\n\n /**\n * @override\n */\n init: function (option, parentModel, ecModel) {\n /**\n * @private\n * @type {module:echarts/data/List}\n */\n this._data;\n /**\n * @private\n * @type {Array.}\n */\n\n this._names;\n this.mergeDefaultAndTheme(option, ecModel);\n\n this._initData();\n },\n\n /**\n * @override\n */\n mergeOption: function (option) {\n TimelineModel.superApply(this, 'mergeOption', arguments);\n\n this._initData();\n },\n\n /**\n * @param {number} [currentIndex]\n */\n setCurrentIndex: function (currentIndex) {\n if (currentIndex == null) {\n currentIndex = this.option.currentIndex;\n }\n\n var count = this._data.count();\n\n if (this.option.loop) {\n currentIndex = (currentIndex % count + count) % count;\n } else {\n currentIndex >= count && (currentIndex = count - 1);\n currentIndex < 0 && (currentIndex = 0);\n }\n\n this.option.currentIndex = currentIndex;\n },\n\n /**\n * @return {number} currentIndex\n */\n getCurrentIndex: function () {\n return this.option.currentIndex;\n },\n\n /**\n * @return {boolean}\n */\n isIndexMax: function () {\n return this.getCurrentIndex() >= this._data.count() - 1;\n },\n\n /**\n * @param {boolean} state true: play, false: stop\n */\n setPlayState: function (state) {\n this.option.autoPlay = !!state;\n },\n\n /**\n * @return {boolean} true: play, false: stop\n */\n getPlayState: function () {\n return !!this.option.autoPlay;\n },\n\n /**\n * @private\n */\n _initData: function () {\n var thisOption = this.option;\n var dataArr = thisOption.data || [];\n var axisType = thisOption.axisType;\n var names = this._names = [];\n\n if (axisType === 'category') {\n var idxArr = [];\n zrUtil.each(dataArr, function (item, index) {\n var value = modelUtil.getDataItemValue(item);\n var newItem;\n\n if (zrUtil.isObject(item)) {\n newItem = zrUtil.clone(item);\n newItem.value = index;\n } else {\n newItem = index;\n }\n\n idxArr.push(newItem);\n\n if (!zrUtil.isString(value) && (value == null || isNaN(value))) {\n value = '';\n }\n\n names.push(value + '');\n });\n dataArr = idxArr;\n }\n\n var dimType = {\n category: 'ordinal',\n time: 'time'\n }[axisType] || 'number';\n var data = this._data = new List([{\n name: 'value',\n type: dimType\n }], this);\n data.initData(dataArr, names);\n },\n getData: function () {\n return this._data;\n },\n\n /**\n * @public\n * @return {Array.} categoreis\n */\n getCategories: function () {\n if (this.get('axisType') === 'category') {\n return this._names.slice();\n }\n }\n});\nvar _default = TimelineModel;\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar formatUtil = require(\"../../util/format\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar MONTH_TEXT = {\n EN: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n CN: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']\n};\nvar WEEK_TEXT = {\n EN: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n CN: ['日', '一', '二', '三', '四', '五', '六']\n};\n\nvar _default = echarts.extendComponentView({\n type: 'calendar',\n\n /**\n * top/left line points\n * @private\n */\n _tlpoints: null,\n\n /**\n * bottom/right line points\n * @private\n */\n _blpoints: null,\n\n /**\n * first day of month\n * @private\n */\n _firstDayOfMonth: null,\n\n /**\n * first day point of month\n * @private\n */\n _firstDayPoints: null,\n render: function (calendarModel, ecModel, api) {\n var group = this.group;\n group.removeAll();\n var coordSys = calendarModel.coordinateSystem; // range info\n\n var rangeData = coordSys.getRangeInfo();\n var orient = coordSys.getOrient();\n\n this._renderDayRect(calendarModel, rangeData, group); // _renderLines must be called prior to following function\n\n\n this._renderLines(calendarModel, rangeData, orient, group);\n\n this._renderYearText(calendarModel, rangeData, orient, group);\n\n this._renderMonthText(calendarModel, orient, group);\n\n this._renderWeekText(calendarModel, rangeData, orient, group);\n },\n // render day rect\n _renderDayRect: function (calendarModel, rangeData, group) {\n var coordSys = calendarModel.coordinateSystem;\n var itemRectStyleModel = calendarModel.getModel('itemStyle.normal').getItemStyle();\n var sw = coordSys.getCellWidth();\n var sh = coordSys.getCellHeight();\n\n for (var i = rangeData.start.time; i <= rangeData.end.time; i = coordSys.getNextNDay(i, 1).time) {\n var point = coordSys.dataToRect([i], false).tl; // every rect\n\n var rect = new graphic.Rect({\n shape: {\n x: point[0],\n y: point[1],\n width: sw,\n height: sh\n },\n cursor: 'default',\n style: itemRectStyleModel\n });\n group.add(rect);\n }\n },\n // render separate line\n _renderLines: function (calendarModel, rangeData, orient, group) {\n var self = this;\n var coordSys = calendarModel.coordinateSystem;\n var lineStyleModel = calendarModel.getModel('splitLine.lineStyle').getLineStyle();\n var show = calendarModel.get('splitLine.show');\n var lineWidth = lineStyleModel.lineWidth;\n this._tlpoints = [];\n this._blpoints = [];\n this._firstDayOfMonth = [];\n this._firstDayPoints = [];\n var firstDay = rangeData.start;\n\n for (var i = 0; firstDay.time <= rangeData.end.time; i++) {\n addPoints(firstDay.formatedDate);\n\n if (i === 0) {\n firstDay = coordSys.getDateInfo(rangeData.start.y + '-' + rangeData.start.m);\n }\n\n var date = firstDay.date;\n date.setMonth(date.getMonth() + 1);\n firstDay = coordSys.getDateInfo(date);\n }\n\n addPoints(coordSys.getNextNDay(rangeData.end.time, 1).formatedDate);\n\n function addPoints(date) {\n self._firstDayOfMonth.push(coordSys.getDateInfo(date));\n\n self._firstDayPoints.push(coordSys.dataToRect([date], false).tl);\n\n var points = self._getLinePointsOfOneWeek(calendarModel, date, orient);\n\n self._tlpoints.push(points[0]);\n\n self._blpoints.push(points[points.length - 1]);\n\n show && self._drawSplitline(points, lineStyleModel, group);\n } // render top/left line\n\n\n show && this._drawSplitline(self._getEdgesPoints(self._tlpoints, lineWidth, orient), lineStyleModel, group); // render bottom/right line\n\n show && this._drawSplitline(self._getEdgesPoints(self._blpoints, lineWidth, orient), lineStyleModel, group);\n },\n // get points at both ends\n _getEdgesPoints: function (points, lineWidth, orient) {\n var rs = [points[0].slice(), points[points.length - 1].slice()];\n var idx = orient === 'horizontal' ? 0 : 1; // both ends of the line are extend half lineWidth\n\n rs[0][idx] = rs[0][idx] - lineWidth / 2;\n rs[1][idx] = rs[1][idx] + lineWidth / 2;\n return rs;\n },\n // render split line\n _drawSplitline: function (points, lineStyleModel, group) {\n var poyline = new graphic.Polyline({\n z2: 20,\n shape: {\n points: points\n },\n style: lineStyleModel\n });\n group.add(poyline);\n },\n // render month line of one week points\n _getLinePointsOfOneWeek: function (calendarModel, date, orient) {\n var coordSys = calendarModel.coordinateSystem;\n date = coordSys.getDateInfo(date);\n var points = [];\n\n for (var i = 0; i < 7; i++) {\n var tmpD = coordSys.getNextNDay(date.time, i);\n var point = coordSys.dataToRect([tmpD.time], false);\n points[2 * tmpD.day] = point.tl;\n points[2 * tmpD.day + 1] = point[orient === 'horizontal' ? 'bl' : 'tr'];\n }\n\n return points;\n },\n _formatterLabel: function (formatter, params) {\n if (typeof formatter === 'string' && formatter) {\n return formatUtil.formatTplSimple(formatter, params);\n }\n\n if (typeof formatter === 'function') {\n return formatter(params);\n }\n\n return params.nameMap;\n },\n _yearTextPositionControl: function (textEl, point, orient, position, margin) {\n point = point.slice();\n var aligns = ['center', 'bottom'];\n\n if (position === 'bottom') {\n point[1] += margin;\n aligns = ['center', 'top'];\n } else if (position === 'left') {\n point[0] -= margin;\n } else if (position === 'right') {\n point[0] += margin;\n aligns = ['center', 'top'];\n } else {\n // top\n point[1] -= margin;\n }\n\n var rotate = 0;\n\n if (position === 'left' || position === 'right') {\n rotate = Math.PI / 2;\n }\n\n return {\n rotation: rotate,\n position: point,\n style: {\n textAlign: aligns[0],\n textVerticalAlign: aligns[1]\n }\n };\n },\n // render year\n _renderYearText: function (calendarModel, rangeData, orient, group) {\n var yearLabel = calendarModel.getModel('yearLabel');\n\n if (!yearLabel.get('show')) {\n return;\n }\n\n var margin = yearLabel.get('margin');\n var pos = yearLabel.get('position');\n\n if (!pos) {\n pos = orient !== 'horizontal' ? 'top' : 'left';\n }\n\n var points = [this._tlpoints[this._tlpoints.length - 1], this._blpoints[0]];\n var xc = (points[0][0] + points[1][0]) / 2;\n var yc = (points[0][1] + points[1][1]) / 2;\n var idx = orient === 'horizontal' ? 0 : 1;\n var posPoints = {\n top: [xc, points[idx][1]],\n bottom: [xc, points[1 - idx][1]],\n left: [points[1 - idx][0], yc],\n right: [points[idx][0], yc]\n };\n var name = rangeData.start.y;\n\n if (+rangeData.end.y > +rangeData.start.y) {\n name = name + '-' + rangeData.end.y;\n }\n\n var formatter = yearLabel.get('formatter');\n var params = {\n start: rangeData.start.y,\n end: rangeData.end.y,\n nameMap: name\n };\n\n var content = this._formatterLabel(formatter, params);\n\n var yearText = new graphic.Text({\n z2: 30\n });\n graphic.setTextStyle(yearText.style, yearLabel, {\n text: content\n }), yearText.attr(this._yearTextPositionControl(yearText, posPoints[pos], orient, pos, margin));\n group.add(yearText);\n },\n _monthTextPositionControl: function (point, isCenter, orient, position, margin) {\n var align = 'left';\n var vAlign = 'top';\n var x = point[0];\n var y = point[1];\n\n if (orient === 'horizontal') {\n y = y + margin;\n\n if (isCenter) {\n align = 'center';\n }\n\n if (position === 'start') {\n vAlign = 'bottom';\n }\n } else {\n x = x + margin;\n\n if (isCenter) {\n vAlign = 'middle';\n }\n\n if (position === 'start') {\n align = 'right';\n }\n }\n\n return {\n x: x,\n y: y,\n textAlign: align,\n textVerticalAlign: vAlign\n };\n },\n // render month and year text\n _renderMonthText: function (calendarModel, orient, group) {\n var monthLabel = calendarModel.getModel('monthLabel');\n\n if (!monthLabel.get('show')) {\n return;\n }\n\n var nameMap = monthLabel.get('nameMap');\n var margin = monthLabel.get('margin');\n var pos = monthLabel.get('position');\n var align = monthLabel.get('align');\n var termPoints = [this._tlpoints, this._blpoints];\n\n if (zrUtil.isString(nameMap)) {\n nameMap = MONTH_TEXT[nameMap.toUpperCase()] || [];\n }\n\n var idx = pos === 'start' ? 0 : 1;\n var axis = orient === 'horizontal' ? 0 : 1;\n margin = pos === 'start' ? -margin : margin;\n var isCenter = align === 'center';\n\n for (var i = 0; i < termPoints[idx].length - 1; i++) {\n var tmp = termPoints[idx][i].slice();\n var firstDay = this._firstDayOfMonth[i];\n\n if (isCenter) {\n var firstDayPoints = this._firstDayPoints[i];\n tmp[axis] = (firstDayPoints[axis] + termPoints[0][i + 1][axis]) / 2;\n }\n\n var formatter = monthLabel.get('formatter');\n var name = nameMap[+firstDay.m - 1];\n var params = {\n yyyy: firstDay.y,\n yy: (firstDay.y + '').slice(2),\n MM: firstDay.m,\n M: +firstDay.m,\n nameMap: name\n };\n\n var content = this._formatterLabel(formatter, params);\n\n var monthText = new graphic.Text({\n z2: 30\n });\n zrUtil.extend(graphic.setTextStyle(monthText.style, monthLabel, {\n text: content\n }), this._monthTextPositionControl(tmp, isCenter, orient, pos, margin));\n group.add(monthText);\n }\n },\n _weekTextPositionControl: function (point, orient, position, margin, cellSize) {\n var align = 'center';\n var vAlign = 'middle';\n var x = point[0];\n var y = point[1];\n var isStart = position === 'start';\n\n if (orient === 'horizontal') {\n x = x + margin + (isStart ? 1 : -1) * cellSize[0] / 2;\n align = isStart ? 'right' : 'left';\n } else {\n y = y + margin + (isStart ? 1 : -1) * cellSize[1] / 2;\n vAlign = isStart ? 'bottom' : 'top';\n }\n\n return {\n x: x,\n y: y,\n textAlign: align,\n textVerticalAlign: vAlign\n };\n },\n // render weeks\n _renderWeekText: function (calendarModel, rangeData, orient, group) {\n var dayLabel = calendarModel.getModel('dayLabel');\n\n if (!dayLabel.get('show')) {\n return;\n }\n\n var coordSys = calendarModel.coordinateSystem;\n var pos = dayLabel.get('position');\n var nameMap = dayLabel.get('nameMap');\n var margin = dayLabel.get('margin');\n var firstDayOfWeek = coordSys.getFirstDayOfWeek();\n\n if (zrUtil.isString(nameMap)) {\n nameMap = WEEK_TEXT[nameMap.toUpperCase()] || [];\n }\n\n var start = coordSys.getNextNDay(rangeData.end.time, 7 - rangeData.lweek).time;\n var cellSize = [coordSys.getCellWidth(), coordSys.getCellHeight()];\n margin = numberUtil.parsePercent(margin, cellSize[orient === 'horizontal' ? 0 : 1]);\n\n if (pos === 'start') {\n start = coordSys.getNextNDay(rangeData.start.time, -(7 + rangeData.fweek)).time;\n margin = -margin;\n }\n\n for (var i = 0; i < 7; i++) {\n var tmpD = coordSys.getNextNDay(start, i);\n var point = coordSys.dataToRect([tmpD.time], false).center;\n var day = i;\n day = Math.abs((i + firstDayOfWeek) % 7);\n var weekText = new graphic.Text({\n z2: 30\n });\n zrUtil.extend(graphic.setTextStyle(weekText.style, dayLabel, {\n text: nameMap[day]\n }), this._weekTextPositionControl(point, orient, pos, margin, cellSize));\n group.add(weekText);\n }\n }\n});\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\n/**\n * nest helper used to group by the array.\n * can specified the keys and sort the keys.\n */\nfunction nest() {\n var keysFunction = [];\n var sortKeysFunction = [];\n /**\n * map an Array into the mapObject.\n * @param {Array} array\n * @param {number} depth\n */\n\n function map(array, depth) {\n if (depth >= keysFunction.length) {\n return array;\n }\n\n var i = -1;\n var n = array.length;\n var keyFunction = keysFunction[depth++];\n var mapObject = {};\n var valuesByKey = {};\n\n while (++i < n) {\n var keyValue = keyFunction(array[i]);\n var values = valuesByKey[keyValue];\n\n if (values) {\n values.push(array[i]);\n } else {\n valuesByKey[keyValue] = [array[i]];\n }\n }\n\n zrUtil.each(valuesByKey, function (value, key) {\n mapObject[key] = map(value, depth);\n });\n return mapObject;\n }\n /**\n * transform the Map Object to multidimensional Array\n * @param {Object} map\n * @param {number} depth\n */\n\n\n function entriesMap(mapObject, depth) {\n if (depth >= keysFunction.length) {\n return mapObject;\n }\n\n var array = [];\n var sortKeyFunction = sortKeysFunction[depth++];\n zrUtil.each(mapObject, function (value, key) {\n array.push({\n key: key,\n values: entriesMap(value, depth)\n });\n });\n\n if (sortKeyFunction) {\n return array.sort(function (a, b) {\n return sortKeyFunction(a.key, b.key);\n });\n } else {\n return array;\n }\n }\n\n return {\n /**\n * specified the key to groupby the arrays.\n * users can specified one more keys.\n * @param {Function} d\n */\n key: function (d) {\n keysFunction.push(d);\n return this;\n },\n\n /**\n * specified the comparator to sort the keys\n * @param {Function} order\n */\n sortKeys: function (order) {\n sortKeysFunction[keysFunction.length - 1] = order;\n return this;\n },\n\n /**\n * the array to be grouped by.\n * @param {Array} array\n */\n entries: function (array) {\n return entriesMap(map(array, 0), 0);\n }\n };\n}\n\nmodule.exports = nest;","var PathProxy = require(\"../core/PathProxy\");\n\nvar _vector = require(\"../core/vector\");\n\nvar v2ApplyTransform = _vector.applyTransform;\nvar CMD = PathProxy.CMD;\nvar points = [[], [], []];\nvar mathSqrt = Math.sqrt;\nvar mathAtan2 = Math.atan2;\n\nfunction _default(path, m) {\n var data = path.data;\n var cmd;\n var nPoint;\n var i;\n var j;\n var k;\n var p;\n var M = CMD.M;\n var C = CMD.C;\n var L = CMD.L;\n var R = CMD.R;\n var A = CMD.A;\n var Q = CMD.Q;\n\n for (i = 0, j = 0; i < data.length;) {\n cmd = data[i++];\n j = i;\n nPoint = 0;\n\n switch (cmd) {\n case M:\n nPoint = 1;\n break;\n\n case L:\n nPoint = 1;\n break;\n\n case C:\n nPoint = 3;\n break;\n\n case Q:\n nPoint = 2;\n break;\n\n case A:\n var x = m[4];\n var y = m[5];\n var sx = mathSqrt(m[0] * m[0] + m[1] * m[1]);\n var sy = mathSqrt(m[2] * m[2] + m[3] * m[3]);\n var angle = mathAtan2(-m[1] / sy, m[0] / sx); // cx\n\n data[i] *= sx;\n data[i++] += x; // cy\n\n data[i] *= sy;\n data[i++] += y; // Scale rx and ry\n // FIXME Assume psi is 0 here\n\n data[i++] *= sx;\n data[i++] *= sy; // Start angle\n\n data[i++] += angle; // end angle\n\n data[i++] += angle; // FIXME psi\n\n i += 2;\n j = i;\n break;\n\n case R:\n // x0, y0\n p[0] = data[i++];\n p[1] = data[i++];\n v2ApplyTransform(p, p, m);\n data[j++] = p[0];\n data[j++] = p[1]; // x1, y1\n\n p[0] += data[i++];\n p[1] += data[i++];\n v2ApplyTransform(p, p, m);\n data[j++] = p[0];\n data[j++] = p[1];\n }\n\n for (k = 0; k < nPoint; k++) {\n var p = points[k];\n p[0] = data[i++];\n p[1] = data[i++];\n v2ApplyTransform(p, p, m); // Write back\n\n data[j++] = p[0];\n data[j++] = p[1];\n }\n }\n}\n\nmodule.exports = _default;","var echarts = require(\"../echarts\");\n\nvar preprocessor = require(\"./timeline/preprocessor\");\n\nrequire(\"./timeline/typeDefaulter\");\n\nrequire(\"./timeline/timelineAction\");\n\nrequire(\"./timeline/SliderTimelineModel\");\n\nrequire(\"./timeline/SliderTimelineView\");\n\n/**\n * DataZoom component entry\n */\necharts.registerPreprocessor(preprocessor);","function normalize(a) {\n if (!(a instanceof Array)) {\n a = [a, a];\n }\n\n return a;\n}\n\nfunction _default(ecModel) {\n ecModel.eachSeriesByType('lines', function (seriesModel) {\n var data = seriesModel.getData();\n var symbolType = normalize(seriesModel.get('symbol'));\n var symbolSize = normalize(seriesModel.get('symbolSize'));\n var opacityQuery = 'lineStyle.normal.opacity'.split('.');\n data.setVisual('fromSymbol', symbolType && symbolType[0]);\n data.setVisual('toSymbol', symbolType && symbolType[1]);\n data.setVisual('fromSymbolSize', symbolSize && symbolSize[0]);\n data.setVisual('toSymbolSize', symbolSize && symbolSize[1]);\n data.setVisual('opacity', seriesModel.get(opacityQuery));\n data.each(function (idx) {\n var itemModel = data.getItemModel(idx);\n var symbolType = normalize(itemModel.getShallow('symbol', true));\n var symbolSize = normalize(itemModel.getShallow('symbolSize', true));\n var opacity = itemModel.get(opacityQuery);\n symbolType[0] && data.setItemVisual(idx, 'fromSymbol', symbolType[0]);\n symbolType[1] && data.setItemVisual(idx, 'toSymbol', symbolType[1]);\n symbolSize[0] && data.setItemVisual(idx, 'fromSymbolSize', symbolSize[0]);\n symbolSize[1] && data.setItemVisual(idx, 'toSymbolSize', symbolSize[1]);\n data.setItemVisual(idx, 'opacity', opacity);\n });\n });\n}\n\nmodule.exports = _default;","var _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar Geo = require(\"./Geo\");\n\nvar layout = require(\"../../util/layout\");\n\nvar numberUtil = require(\"../../util/number\");\n\n/**\n * Resize method bound to the geo\n * @param {module:echarts/coord/geo/GeoModel|module:echarts/chart/map/MapModel} geoModel\n * @param {module:echarts/ExtensionAPI} api\n */\nfunction resizeGeo(geoModel, api) {\n var boundingCoords = geoModel.get('boundingCoords');\n\n if (boundingCoords != null) {\n var leftTop = boundingCoords[0];\n var rightBottom = boundingCoords[1];\n\n if (isNaN(leftTop[0]) || isNaN(leftTop[1]) || isNaN(rightBottom[0]) || isNaN(rightBottom[1])) {} else {\n this.setBoundingRect(leftTop[0], leftTop[1], rightBottom[0] - leftTop[0], rightBottom[1] - leftTop[1]);\n }\n }\n\n var rect = this.getBoundingRect();\n var boxLayoutOption;\n var center = geoModel.get('layoutCenter');\n var size = geoModel.get('layoutSize');\n var viewWidth = api.getWidth();\n var viewHeight = api.getHeight();\n var aspectScale = geoModel.get('aspectScale') || 0.75;\n var aspect = rect.width / rect.height * aspectScale;\n var useCenterAndSize = false;\n\n if (center && size) {\n center = [numberUtil.parsePercent(center[0], viewWidth), numberUtil.parsePercent(center[1], viewHeight)];\n size = numberUtil.parsePercent(size, Math.min(viewWidth, viewHeight));\n\n if (!isNaN(center[0]) && !isNaN(center[1]) && !isNaN(size)) {\n useCenterAndSize = true;\n } else {}\n }\n\n var viewRect;\n\n if (useCenterAndSize) {\n var viewRect = {};\n\n if (aspect > 1) {\n // Width is same with size\n viewRect.width = size;\n viewRect.height = size / aspect;\n } else {\n viewRect.height = size;\n viewRect.width = size * aspect;\n }\n\n viewRect.y = center[1] - viewRect.height / 2;\n viewRect.x = center[0] - viewRect.width / 2;\n } else {\n // Use left/top/width/height\n boxLayoutOption = geoModel.getBoxLayoutParams(); // 0.75 rate\n\n boxLayoutOption.aspect = aspect;\n viewRect = layout.getLayoutRect(boxLayoutOption, {\n width: viewWidth,\n height: viewHeight\n });\n }\n\n this.setViewRect(viewRect.x, viewRect.y, viewRect.width, viewRect.height);\n this.setCenter(geoModel.get('center'));\n this.setZoom(geoModel.get('zoom'));\n}\n/**\n * @param {module:echarts/coord/Geo} geo\n * @param {module:echarts/model/Model} model\n * @inner\n */\n\n\nfunction setGeoCoords(geo, model) {\n zrUtil.each(model.get('geoCoord'), function (geoCoord, name) {\n geo.addGeoCoord(name, geoCoord);\n });\n}\n\nvar geoCreator = {\n // For deciding which dimensions to use when creating list data\n dimensions: Geo.prototype.dimensions,\n create: function (ecModel, api) {\n var geoList = []; // FIXME Create each time may be slow\n\n ecModel.eachComponent('geo', function (geoModel, idx) {\n var name = geoModel.get('map');\n var mapData = echarts.getMap(name);\n var geo = new Geo(name + idx, name, mapData && mapData.geoJson, mapData && mapData.specialAreas, geoModel.get('nameMap'));\n geo.zoomLimit = geoModel.get('scaleLimit');\n geoList.push(geo);\n setGeoCoords(geo, geoModel);\n geoModel.coordinateSystem = geo;\n geo.model = geoModel; // Inject resize method\n\n geo.resize = resizeGeo;\n geo.resize(geoModel, api);\n });\n ecModel.eachSeries(function (seriesModel) {\n var coordSys = seriesModel.get('coordinateSystem');\n\n if (coordSys === 'geo') {\n var geoIndex = seriesModel.get('geoIndex') || 0;\n seriesModel.coordinateSystem = geoList[geoIndex];\n }\n }); // If has map series\n\n var mapModelGroupBySeries = {};\n ecModel.eachSeriesByType('map', function (seriesModel) {\n if (!seriesModel.getHostGeoModel()) {\n var mapType = seriesModel.getMapType();\n mapModelGroupBySeries[mapType] = mapModelGroupBySeries[mapType] || [];\n mapModelGroupBySeries[mapType].push(seriesModel);\n }\n });\n zrUtil.each(mapModelGroupBySeries, function (mapSeries, mapType) {\n var mapData = echarts.getMap(mapType);\n var nameMapList = zrUtil.map(mapSeries, function (singleMapSeries) {\n return singleMapSeries.get('nameMap');\n });\n var geo = new Geo(mapType, mapType, mapData && mapData.geoJson, mapData && mapData.specialAreas, zrUtil.mergeAll(nameMapList));\n geo.zoomLimit = zrUtil.retrieve.apply(null, zrUtil.map(mapSeries, function (singleMapSeries) {\n return singleMapSeries.get('scaleLimit');\n }));\n geoList.push(geo); // Inject resize method\n\n geo.resize = resizeGeo;\n geo.resize(mapSeries[0], api);\n zrUtil.each(mapSeries, function (singleMapSeries) {\n singleMapSeries.coordinateSystem = geo;\n setGeoCoords(geo, singleMapSeries);\n });\n });\n return geoList;\n },\n\n /**\n * Fill given regions array\n * @param {Array.} originRegionArr\n * @param {string} mapName\n * @param {Object} [nameMap]\n * @return {Array}\n */\n getFilledRegions: function (originRegionArr, mapName, nameMap) {\n // Not use the original\n var regionsArr = (originRegionArr || []).slice();\n nameMap = nameMap || {};\n var map = echarts.getMap(mapName);\n var geoJson = map && map.geoJson;\n\n if (!geoJson) {\n return originRegionArr;\n }\n\n var dataNameMap = zrUtil.createHashMap();\n var features = geoJson.features;\n\n for (var i = 0; i < regionsArr.length; i++) {\n dataNameMap.set(regionsArr[i].name, regionsArr[i]);\n }\n\n for (var i = 0; i < features.length; i++) {\n var name = features[i].properties.name;\n\n if (!dataNameMap.get(name)) {\n if (nameMap.hasOwnProperty(name)) {\n name = nameMap[name];\n }\n\n regionsArr.push({\n name: name\n });\n }\n }\n\n return regionsArr;\n }\n};\necharts.registerCoordinateSystem('geo', geoCreator);\nvar _default = geoCreator;\nmodule.exports = _default;","var vec2 = require(\"zrender/lib/core/vector\");\n\nvar scaleAndAdd = vec2.scaleAndAdd; // function adjacentNode(n, e) {\n// return e.n1 === n ? e.n2 : e.n1;\n// }\n\nfunction forceLayout(nodes, edges, opts) {\n var rect = opts.rect;\n var width = rect.width;\n var height = rect.height;\n var center = [rect.x + width / 2, rect.y + height / 2]; // var scale = opts.scale || 1;\n\n var gravity = opts.gravity == null ? 0.1 : opts.gravity; // for (var i = 0; i < edges.length; i++) {\n // var e = edges[i];\n // var n1 = e.n1;\n // var n2 = e.n2;\n // n1.edges = n1.edges || [];\n // n2.edges = n2.edges || [];\n // n1.edges.push(e);\n // n2.edges.push(e);\n // }\n // Init position\n\n for (var i = 0; i < nodes.length; i++) {\n var n = nodes[i];\n\n if (!n.p) {\n // Use the position from first adjecent node with defined position\n // Or use a random position\n // From d3\n // if (n.edges) {\n // var j = -1;\n // while (++j < n.edges.length) {\n // var e = n.edges[j];\n // var other = adjacentNode(n, e);\n // if (other.p) {\n // n.p = vec2.clone(other.p);\n // break;\n // }\n // }\n // }\n // if (!n.p) {\n n.p = vec2.create(width * (Math.random() - 0.5) + center[0], height * (Math.random() - 0.5) + center[1]); // }\n }\n\n n.pp = vec2.clone(n.p);\n n.edges = null;\n } // Formula in 'Graph Drawing by Force-directed Placement'\n // var k = scale * Math.sqrt(width * height / nodes.length);\n // var k2 = k * k;\n\n\n var friction = 0.6;\n return {\n warmUp: function () {\n friction = 0.5;\n },\n setFixed: function (idx) {\n nodes[idx].fixed = true;\n },\n setUnfixed: function (idx) {\n nodes[idx].fixed = false;\n },\n step: function (cb) {\n var v12 = [];\n var nLen = nodes.length;\n\n for (var i = 0; i < edges.length; i++) {\n var e = edges[i];\n var n1 = e.n1;\n var n2 = e.n2;\n vec2.sub(v12, n2.p, n1.p);\n var d = vec2.len(v12) - e.d;\n var w = n2.w / (n1.w + n2.w);\n\n if (isNaN(w)) {\n w = 0;\n }\n\n vec2.normalize(v12, v12);\n !n1.fixed && scaleAndAdd(n1.p, n1.p, v12, w * d * friction);\n !n2.fixed && scaleAndAdd(n2.p, n2.p, v12, -(1 - w) * d * friction);\n } // Gravity\n\n\n for (var i = 0; i < nLen; i++) {\n var n = nodes[i];\n\n if (!n.fixed) {\n vec2.sub(v12, center, n.p); // var d = vec2.len(v12);\n // vec2.scale(v12, v12, 1 / d);\n // var gravityFactor = gravity;\n\n scaleAndAdd(n.p, n.p, v12, gravity * friction);\n }\n } // Repulsive\n // PENDING\n\n\n for (var i = 0; i < nLen; i++) {\n var n1 = nodes[i];\n\n for (var j = i + 1; j < nLen; j++) {\n var n2 = nodes[j];\n vec2.sub(v12, n2.p, n1.p);\n var d = vec2.len(v12);\n\n if (d === 0) {\n // Random repulse\n vec2.set(v12, Math.random() - 0.5, Math.random() - 0.5);\n d = 1;\n }\n\n var repFact = (n1.rep + n2.rep) / d / d;\n !n1.fixed && scaleAndAdd(n1.pp, n1.pp, v12, repFact);\n !n2.fixed && scaleAndAdd(n2.pp, n2.pp, v12, -repFact);\n }\n }\n\n var v = [];\n\n for (var i = 0; i < nLen; i++) {\n var n = nodes[i];\n\n if (!n.fixed) {\n vec2.sub(v, n.p, n.pp);\n scaleAndAdd(n.p, n.p, v, friction);\n vec2.copy(n.pp, n.p);\n }\n }\n\n friction = friction * 0.992;\n cb && cb(nodes, edges, friction < 0.01);\n }\n };\n}\n\nexports.forceLayout = forceLayout;","/**\n * Calculate slider move result.\n * Usage:\n * (1) If both handle0 and handle1 are needed to be moved, set minSpan the same as\n * maxSpan and the same as `Math.abs(handleEnd[1] - handleEnds[0])`.\n * (2) If handle0 is forbidden to cross handle1, set minSpan as `0`.\n *\n * @param {number} delta Move length.\n * @param {Array.} handleEnds handleEnds[0] can be bigger then handleEnds[1].\n * handleEnds will be modified in this method.\n * @param {Array.} extent handleEnds is restricted by extent.\n * extent[0] should less or equals than extent[1].\n * @param {number|string} handleIndex Can be 'all', means that both move the two handleEnds,\n * where the input minSpan and maxSpan will not work.\n * @param {number} [minSpan] The range of dataZoom can not be smaller than that.\n * If not set, handle0 and cross handle1. If set as a non-negative\n * number (including `0`), handles will push each other when reaching\n * the minSpan.\n * @param {number} [maxSpan] The range of dataZoom can not be larger than that.\n * @return {Array.} The input handleEnds.\n */\nfunction _default(delta, handleEnds, extent, handleIndex, minSpan, maxSpan) {\n // Normalize firstly.\n handleEnds[0] = restrict(handleEnds[0], extent);\n handleEnds[1] = restrict(handleEnds[1], extent);\n delta = delta || 0;\n var extentSpan = extent[1] - extent[0]; // Notice maxSpan and minSpan can be null/undefined.\n\n if (minSpan != null) {\n minSpan = restrict(minSpan, [0, extentSpan]);\n }\n\n if (maxSpan != null) {\n maxSpan = Math.max(maxSpan, minSpan != null ? minSpan : 0);\n }\n\n if (handleIndex === 'all') {\n minSpan = maxSpan = Math.abs(handleEnds[1] - handleEnds[0]);\n handleIndex = 0;\n }\n\n var originalDistSign = getSpanSign(handleEnds, handleIndex);\n handleEnds[handleIndex] += delta; // Restrict in extent.\n\n var extentMinSpan = minSpan || 0;\n var realExtent = extent.slice();\n originalDistSign.sign < 0 ? realExtent[0] += extentMinSpan : realExtent[1] -= extentMinSpan;\n handleEnds[handleIndex] = restrict(handleEnds[handleIndex], realExtent); // Expand span.\n\n var currDistSign = getSpanSign(handleEnds, handleIndex);\n\n if (minSpan != null && (currDistSign.sign !== originalDistSign.sign || currDistSign.span < minSpan)) {\n // If minSpan exists, 'cross' is forbinden.\n handleEnds[1 - handleIndex] = handleEnds[handleIndex] + originalDistSign.sign * minSpan;\n } // Shrink span.\n\n\n var currDistSign = getSpanSign(handleEnds, handleIndex);\n\n if (maxSpan != null && currDistSign.span > maxSpan) {\n handleEnds[1 - handleIndex] = handleEnds[handleIndex] + currDistSign.sign * maxSpan;\n }\n\n return handleEnds;\n}\n\nfunction getSpanSign(handleEnds, handleIndex) {\n var dist = handleEnds[handleIndex] - handleEnds[1 - handleIndex]; // If `handleEnds[0] === handleEnds[1]`, always believe that handleEnd[0]\n // is at left of handleEnds[1] for non-cross case.\n\n return {\n span: Math.abs(dist),\n sign: dist > 0 ? -1 : dist < 0 ? 1 : handleIndex ? -1 : 1\n };\n}\n\nfunction restrict(value, extend) {\n return Math.min(extend[1], Math.max(extend[0], value));\n}\n\nmodule.exports = _default;","var echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nrequire(\"./line/LineSeries\");\n\nrequire(\"./line/LineView\");\n\nvar visualSymbol = require(\"../visual/symbol\");\n\nvar layoutPoints = require(\"../layout/points\");\n\nvar dataSample = require(\"../processor/dataSample\");\n\nrequire(\"../component/gridSimple\");\n\n// In case developer forget to include grid component\necharts.registerVisual(zrUtil.curry(visualSymbol, 'line', 'circle', 'line'));\necharts.registerLayout(zrUtil.curry(layoutPoints, 'line')); // Down sample after filter\n\necharts.registerProcessor(echarts.PRIORITY.PROCESSOR.STATISTIC, zrUtil.curry(dataSample, 'line'));","var echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nrequire(\"./tree/TreeSeries\");\n\nrequire(\"./tree/TreeView\");\n\nrequire(\"./tree/treeAction\");\n\nvar visualSymbol = require(\"../visual/symbol\");\n\nvar orthogonalLayout = require(\"./tree/orthogonalLayout\");\n\nvar radialLayout = require(\"./tree/radialLayout\");\n\necharts.registerVisual(zrUtil.curry(visualSymbol, 'tree', 'circle', null));\necharts.registerLayout(orthogonalLayout);\necharts.registerLayout(radialLayout);","// var arrayDiff = require('zrender/src/core/arrayDiff');\n// 'zrender/src/core/arrayDiff' has been used before, but it did\n// not do well in performance when roam with fixed dataZoom window.\nfunction sign(val) {\n return val >= 0 ? 1 : -1;\n}\n\nfunction getStackedOnPoint(coordSys, data, idx) {\n var baseAxis = coordSys.getBaseAxis();\n var valueAxis = coordSys.getOtherAxis(baseAxis);\n var valueStart = baseAxis.onZero ? 0 : valueAxis.scale.getExtent()[0];\n var valueDim = valueAxis.dim;\n var baseDataOffset = valueDim === 'x' || valueDim === 'radius' ? 1 : 0;\n var stackedOnSameSign;\n var stackedOn = data.stackedOn;\n var val = data.get(valueDim, idx); // Find first stacked value with same sign\n\n while (stackedOn && sign(stackedOn.get(valueDim, idx)) === sign(val)) {\n stackedOnSameSign = stackedOn;\n break;\n }\n\n var stackedData = [];\n stackedData[baseDataOffset] = data.get(baseAxis.dim, idx);\n stackedData[1 - baseDataOffset] = stackedOnSameSign ? stackedOnSameSign.get(valueDim, idx, true) : valueStart;\n return coordSys.dataToPoint(stackedData);\n} // function convertToIntId(newIdList, oldIdList) {\n// // Generate int id instead of string id.\n// // Compare string maybe slow in score function of arrDiff\n// // Assume id in idList are all unique\n// var idIndicesMap = {};\n// var idx = 0;\n// for (var i = 0; i < newIdList.length; i++) {\n// idIndicesMap[newIdList[i]] = idx;\n// newIdList[i] = idx++;\n// }\n// for (var i = 0; i < oldIdList.length; i++) {\n// var oldId = oldIdList[i];\n// // Same with newIdList\n// if (idIndicesMap[oldId]) {\n// oldIdList[i] = idIndicesMap[oldId];\n// }\n// else {\n// oldIdList[i] = idx++;\n// }\n// }\n// }\n\n\nfunction diffData(oldData, newData) {\n var diffResult = [];\n newData.diff(oldData).add(function (idx) {\n diffResult.push({\n cmd: '+',\n idx: idx\n });\n }).update(function (newIdx, oldIdx) {\n diffResult.push({\n cmd: '=',\n idx: oldIdx,\n idx1: newIdx\n });\n }).remove(function (idx) {\n diffResult.push({\n cmd: '-',\n idx: idx\n });\n }).execute();\n return diffResult;\n}\n\nfunction _default(oldData, newData, oldStackedOnPoints, newStackedOnPoints, oldCoordSys, newCoordSys) {\n var diff = diffData(oldData, newData); // var newIdList = newData.mapArray(newData.getId);\n // var oldIdList = oldData.mapArray(oldData.getId);\n // convertToIntId(newIdList, oldIdList);\n // // FIXME One data ?\n // diff = arrayDiff(oldIdList, newIdList);\n\n var currPoints = [];\n var nextPoints = []; // Points for stacking base line\n\n var currStackedPoints = [];\n var nextStackedPoints = [];\n var status = [];\n var sortedIndices = [];\n var rawIndices = [];\n var dims = newCoordSys.dimensions;\n\n for (var i = 0; i < diff.length; i++) {\n var diffItem = diff[i];\n var pointAdded = true; // FIXME, animation is not so perfect when dataZoom window moves fast\n // Which is in case remvoing or add more than one data in the tail or head\n\n switch (diffItem.cmd) {\n case '=':\n var currentPt = oldData.getItemLayout(diffItem.idx);\n var nextPt = newData.getItemLayout(diffItem.idx1); // If previous data is NaN, use next point directly\n\n if (isNaN(currentPt[0]) || isNaN(currentPt[1])) {\n currentPt = nextPt.slice();\n }\n\n currPoints.push(currentPt);\n nextPoints.push(nextPt);\n currStackedPoints.push(oldStackedOnPoints[diffItem.idx]);\n nextStackedPoints.push(newStackedOnPoints[diffItem.idx1]);\n rawIndices.push(newData.getRawIndex(diffItem.idx1));\n break;\n\n case '+':\n var idx = diffItem.idx;\n currPoints.push(oldCoordSys.dataToPoint([newData.get(dims[0], idx, true), newData.get(dims[1], idx, true)]));\n nextPoints.push(newData.getItemLayout(idx).slice());\n currStackedPoints.push(getStackedOnPoint(oldCoordSys, newData, idx));\n nextStackedPoints.push(newStackedOnPoints[idx]);\n rawIndices.push(newData.getRawIndex(idx));\n break;\n\n case '-':\n var idx = diffItem.idx;\n var rawIndex = oldData.getRawIndex(idx); // Data is replaced. In the case of dynamic data queue\n // FIXME FIXME FIXME\n\n if (rawIndex !== idx) {\n currPoints.push(oldData.getItemLayout(idx));\n nextPoints.push(newCoordSys.dataToPoint([oldData.get(dims[0], idx, true), oldData.get(dims[1], idx, true)]));\n currStackedPoints.push(oldStackedOnPoints[idx]);\n nextStackedPoints.push(getStackedOnPoint(newCoordSys, oldData, idx));\n rawIndices.push(rawIndex);\n } else {\n pointAdded = false;\n }\n\n } // Original indices\n\n\n if (pointAdded) {\n status.push(diffItem);\n sortedIndices.push(sortedIndices.length);\n }\n } // Diff result may be crossed if all items are changed\n // Sort by data index\n\n\n sortedIndices.sort(function (a, b) {\n return rawIndices[a] - rawIndices[b];\n });\n var sortedCurrPoints = [];\n var sortedNextPoints = [];\n var sortedCurrStackedPoints = [];\n var sortedNextStackedPoints = [];\n var sortedStatus = [];\n\n for (var i = 0; i < sortedIndices.length; i++) {\n var idx = sortedIndices[i];\n sortedCurrPoints[i] = currPoints[idx];\n sortedNextPoints[i] = nextPoints[idx];\n sortedCurrStackedPoints[i] = currStackedPoints[idx];\n sortedNextStackedPoints[i] = nextStackedPoints[idx];\n sortedStatus[i] = status[idx];\n }\n\n return {\n current: sortedCurrPoints,\n next: sortedNextPoints,\n stackedOnCurrent: sortedCurrStackedPoints,\n stackedOnNext: sortedNextStackedPoints,\n status: sortedStatus\n };\n}\n\nmodule.exports = _default;","var graphic = require(\"../../util/graphic\");\n\nvar BaseAxisPointer = require(\"./BaseAxisPointer\");\n\nvar viewHelper = require(\"./viewHelper\");\n\nvar singleAxisHelper = require(\"../axis/singleAxisHelper\");\n\nvar AxisView = require(\"../axis/AxisView\");\n\nvar XY = ['x', 'y'];\nvar WH = ['width', 'height'];\nvar SingleAxisPointer = BaseAxisPointer.extend({\n /**\n * @override\n */\n makeElOption: function (elOption, value, axisModel, axisPointerModel, api) {\n var axis = axisModel.axis;\n var coordSys = axis.coordinateSystem;\n var otherExtent = getGlobalExtent(coordSys, 1 - getPointDimIndex(axis));\n var pixelValue = coordSys.dataToPoint(value)[0];\n var axisPointerType = axisPointerModel.get('type');\n\n if (axisPointerType && axisPointerType !== 'none') {\n var elStyle = viewHelper.buildElStyle(axisPointerModel);\n var pointerOption = pointerShapeBuilder[axisPointerType](axis, pixelValue, otherExtent, elStyle);\n pointerOption.style = elStyle;\n elOption.graphicKey = pointerOption.type;\n elOption.pointer = pointerOption;\n }\n\n var layoutInfo = singleAxisHelper.layout(axisModel);\n viewHelper.buildCartesianSingleLabelElOption(value, elOption, layoutInfo, axisModel, axisPointerModel, api);\n },\n\n /**\n * @override\n */\n getHandleTransform: function (value, axisModel, axisPointerModel) {\n var layoutInfo = singleAxisHelper.layout(axisModel, {\n labelInside: false\n });\n layoutInfo.labelMargin = axisPointerModel.get('handle.margin');\n return {\n position: viewHelper.getTransformedPosition(axisModel.axis, value, layoutInfo),\n rotation: layoutInfo.rotation + (layoutInfo.labelDirection < 0 ? Math.PI : 0)\n };\n },\n\n /**\n * @override\n */\n updateHandleTransform: function (transform, delta, axisModel, axisPointerModel) {\n var axis = axisModel.axis;\n var coordSys = axis.coordinateSystem;\n var dimIndex = getPointDimIndex(axis);\n var axisExtent = getGlobalExtent(coordSys, dimIndex);\n var currPosition = transform.position;\n currPosition[dimIndex] += delta[dimIndex];\n currPosition[dimIndex] = Math.min(axisExtent[1], currPosition[dimIndex]);\n currPosition[dimIndex] = Math.max(axisExtent[0], currPosition[dimIndex]);\n var otherExtent = getGlobalExtent(coordSys, 1 - dimIndex);\n var cursorOtherValue = (otherExtent[1] + otherExtent[0]) / 2;\n var cursorPoint = [cursorOtherValue, cursorOtherValue];\n cursorPoint[dimIndex] = currPosition[dimIndex];\n return {\n position: currPosition,\n rotation: transform.rotation,\n cursorPoint: cursorPoint,\n tooltipOption: {\n verticalAlign: 'middle'\n }\n };\n }\n});\nvar pointerShapeBuilder = {\n line: function (axis, pixelValue, otherExtent, elStyle) {\n var targetShape = viewHelper.makeLineShape([pixelValue, otherExtent[0]], [pixelValue, otherExtent[1]], getPointDimIndex(axis));\n graphic.subPixelOptimizeLine({\n shape: targetShape,\n style: elStyle\n });\n return {\n type: 'Line',\n shape: targetShape\n };\n },\n shadow: function (axis, pixelValue, otherExtent, elStyle) {\n var bandWidth = axis.getBandWidth();\n var span = otherExtent[1] - otherExtent[0];\n return {\n type: 'Rect',\n shape: viewHelper.makeRectShape([pixelValue - bandWidth / 2, otherExtent[0]], [bandWidth, span], getPointDimIndex(axis))\n };\n }\n};\n\nfunction getPointDimIndex(axis) {\n return axis.isHorizontal() ? 0 : 1;\n}\n\nfunction getGlobalExtent(coordSys, dimIndex) {\n var rect = coordSys.getRect();\n return [rect[XY[dimIndex]], rect[XY[dimIndex]] + rect[WH[dimIndex]]];\n}\n\nAxisView.registerAxisPointerClass('SingleAxisPointer', SingleAxisPointer);\nvar _default = SingleAxisPointer;\nmodule.exports = _default;","var LegendModel = require(\"./LegendModel\");\n\nvar _layout = require(\"../../util/layout\");\n\nvar mergeLayoutParam = _layout.mergeLayoutParam;\nvar getLayoutParams = _layout.getLayoutParams;\nvar ScrollableLegendModel = LegendModel.extend({\n type: 'legend.scroll',\n\n /**\n * @param {number} scrollDataIndex\n */\n setScrollDataIndex: function (scrollDataIndex) {\n this.option.scrollDataIndex = scrollDataIndex;\n },\n defaultOption: {\n scrollDataIndex: 0,\n pageButtonItemGap: 5,\n pageButtonGap: null,\n pageButtonPosition: 'end',\n // 'start' or 'end'\n pageFormatter: '{current}/{total}',\n // If null/undefined, do not show page.\n pageIcons: {\n horizontal: ['M0,0L12,-10L12,10z', 'M0,0L-12,-10L-12,10z'],\n vertical: ['M0,0L20,0L10,-20z', 'M0,0L20,0L10,20z']\n },\n pageIconColor: '#2f4554',\n pageIconInactiveColor: '#aaa',\n pageIconSize: 15,\n // Can be [10, 3], which represents [width, height]\n pageTextStyle: {\n color: '#333'\n },\n animationDurationUpdate: 800\n },\n\n /**\n * @override\n */\n init: function (option, parentModel, ecModel, extraOpt) {\n var inputPositionParams = getLayoutParams(option);\n ScrollableLegendModel.superCall(this, 'init', option, parentModel, ecModel, extraOpt);\n mergeAndNormalizeLayoutParams(this, option, inputPositionParams);\n },\n\n /**\n * @override\n */\n mergeOption: function (option, extraOpt) {\n ScrollableLegendModel.superCall(this, 'mergeOption', option, extraOpt);\n mergeAndNormalizeLayoutParams(this, this.option, option);\n },\n getOrient: function () {\n return this.get('orient') === 'vertical' ? {\n index: 1,\n name: 'vertical'\n } : {\n index: 0,\n name: 'horizontal'\n };\n }\n}); // Do not `ignoreSize` to enable setting {left: 10, right: 10}.\n\nfunction mergeAndNormalizeLayoutParams(legendModel, target, raw) {\n var orient = legendModel.getOrient();\n var ignoreSize = [1, 1];\n ignoreSize[orient.index] = 0;\n mergeLayoutParam(target, raw, {\n type: 'box',\n ignoreSize: ignoreSize\n });\n}\n\nvar _default = ScrollableLegendModel;\nmodule.exports = _default;","require(\"./graphic\");\n\nvar _zrender = require(\"../zrender\");\n\nvar registerPainter = _zrender.registerPainter;\n\nvar Painter = require(\"./Painter\");\n\nregisterPainter('vml', Painter);","var _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar SymbolDraw = require(\"../helper/SymbolDraw\");\n\nvar SymbolClz = require(\"../helper/Symbol\");\n\nvar lineAnimationDiff = require(\"./lineAnimationDiff\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar modelUtil = require(\"../../util/model\");\n\nvar _poly = require(\"./poly\");\n\nvar Polyline = _poly.Polyline;\nvar Polygon = _poly.Polygon;\n\nvar ChartView = require(\"../../view/Chart\");\n\n// FIXME step not support polar\nfunction isPointsSame(points1, points2) {\n if (points1.length !== points2.length) {\n return;\n }\n\n for (var i = 0; i < points1.length; i++) {\n var p1 = points1[i];\n var p2 = points2[i];\n\n if (p1[0] !== p2[0] || p1[1] !== p2[1]) {\n return;\n }\n }\n\n return true;\n}\n\nfunction getSmooth(smooth) {\n return typeof smooth === 'number' ? smooth : smooth ? 0.3 : 0;\n}\n\nfunction getAxisExtentWithGap(axis) {\n var extent = axis.getGlobalExtent();\n\n if (axis.onBand) {\n // Remove extra 1px to avoid line miter in clipped edge\n var halfBandWidth = axis.getBandWidth() / 2 - 1;\n var dir = extent[1] > extent[0] ? 1 : -1;\n extent[0] += dir * halfBandWidth;\n extent[1] -= dir * halfBandWidth;\n }\n\n return extent;\n}\n\nfunction sign(val) {\n return val >= 0 ? 1 : -1;\n}\n/**\n * @param {module:echarts/coord/cartesian/Cartesian2D|module:echarts/coord/polar/Polar} coordSys\n * @param {module:echarts/data/List} data\n * @param {Array.>} points\n * @private\n */\n\n\nfunction getStackedOnPoints(coordSys, data) {\n var baseAxis = coordSys.getBaseAxis();\n var valueAxis = coordSys.getOtherAxis(baseAxis);\n var valueStart = 0;\n\n if (!baseAxis.onZero) {\n var extent = valueAxis.scale.getExtent();\n\n if (extent[0] > 0) {\n // Both positive\n valueStart = extent[0];\n } else if (extent[1] < 0) {\n // Both negative\n valueStart = extent[1];\n } // If is one positive, and one negative, onZero shall be true\n\n }\n\n var valueDim = valueAxis.dim;\n var baseDataOffset = valueDim === 'x' || valueDim === 'radius' ? 1 : 0;\n return data.mapArray([valueDim], function (val, idx) {\n var stackedOnSameSign;\n var stackedOn = data.stackedOn; // Find first stacked value with same sign\n\n while (stackedOn && sign(stackedOn.get(valueDim, idx)) === sign(val)) {\n stackedOnSameSign = stackedOn;\n break;\n }\n\n var stackedData = [];\n stackedData[baseDataOffset] = data.get(baseAxis.dim, idx);\n stackedData[1 - baseDataOffset] = stackedOnSameSign ? stackedOnSameSign.get(valueDim, idx, true) : valueStart;\n return coordSys.dataToPoint(stackedData);\n }, true);\n}\n\nfunction createGridClipShape(cartesian, hasAnimation, seriesModel) {\n var xExtent = getAxisExtentWithGap(cartesian.getAxis('x'));\n var yExtent = getAxisExtentWithGap(cartesian.getAxis('y'));\n var isHorizontal = cartesian.getBaseAxis().isHorizontal();\n var x = Math.min(xExtent[0], xExtent[1]);\n var y = Math.min(yExtent[0], yExtent[1]);\n var width = Math.max(xExtent[0], xExtent[1]) - x;\n var height = Math.max(yExtent[0], yExtent[1]) - y;\n var lineWidth = seriesModel.get('lineStyle.normal.width') || 2; // Expand clip shape to avoid clipping when line value exceeds axis\n\n var expandSize = seriesModel.get('clipOverflow') ? lineWidth / 2 : Math.max(width, height);\n\n if (isHorizontal) {\n y -= expandSize;\n height += expandSize * 2;\n } else {\n x -= expandSize;\n width += expandSize * 2;\n }\n\n var clipPath = new graphic.Rect({\n shape: {\n x: x,\n y: y,\n width: width,\n height: height\n }\n });\n\n if (hasAnimation) {\n clipPath.shape[isHorizontal ? 'width' : 'height'] = 0;\n graphic.initProps(clipPath, {\n shape: {\n width: width,\n height: height\n }\n }, seriesModel);\n }\n\n return clipPath;\n}\n\nfunction createPolarClipShape(polar, hasAnimation, seriesModel) {\n var angleAxis = polar.getAngleAxis();\n var radiusAxis = polar.getRadiusAxis();\n var radiusExtent = radiusAxis.getExtent();\n var angleExtent = angleAxis.getExtent();\n var RADIAN = Math.PI / 180;\n var clipPath = new graphic.Sector({\n shape: {\n cx: polar.cx,\n cy: polar.cy,\n r0: radiusExtent[0],\n r: radiusExtent[1],\n startAngle: -angleExtent[0] * RADIAN,\n endAngle: -angleExtent[1] * RADIAN,\n clockwise: angleAxis.inverse\n }\n });\n\n if (hasAnimation) {\n clipPath.shape.endAngle = -angleExtent[0] * RADIAN;\n graphic.initProps(clipPath, {\n shape: {\n endAngle: -angleExtent[1] * RADIAN\n }\n }, seriesModel);\n }\n\n return clipPath;\n}\n\nfunction createClipShape(coordSys, hasAnimation, seriesModel) {\n return coordSys.type === 'polar' ? createPolarClipShape(coordSys, hasAnimation, seriesModel) : createGridClipShape(coordSys, hasAnimation, seriesModel);\n}\n\nfunction turnPointsIntoStep(points, coordSys, stepTurnAt) {\n var baseAxis = coordSys.getBaseAxis();\n var baseIndex = baseAxis.dim === 'x' || baseAxis.dim === 'radius' ? 0 : 1;\n var stepPoints = [];\n\n for (var i = 0; i < points.length - 1; i++) {\n var nextPt = points[i + 1];\n var pt = points[i];\n stepPoints.push(pt);\n var stepPt = [];\n\n switch (stepTurnAt) {\n case 'end':\n stepPt[baseIndex] = nextPt[baseIndex];\n stepPt[1 - baseIndex] = pt[1 - baseIndex]; // default is start\n\n stepPoints.push(stepPt);\n break;\n\n case 'middle':\n // default is start\n var middle = (pt[baseIndex] + nextPt[baseIndex]) / 2;\n var stepPt2 = [];\n stepPt[baseIndex] = stepPt2[baseIndex] = middle;\n stepPt[1 - baseIndex] = pt[1 - baseIndex];\n stepPt2[1 - baseIndex] = nextPt[1 - baseIndex];\n stepPoints.push(stepPt);\n stepPoints.push(stepPt2);\n break;\n\n default:\n stepPt[baseIndex] = pt[baseIndex];\n stepPt[1 - baseIndex] = nextPt[1 - baseIndex]; // default is start\n\n stepPoints.push(stepPt);\n }\n } // Last points\n\n\n points[i] && stepPoints.push(points[i]);\n return stepPoints;\n}\n\nfunction getVisualGradient(data, coordSys) {\n var visualMetaList = data.getVisual('visualMeta');\n\n if (!visualMetaList || !visualMetaList.length || !data.count()) {\n // When data.count() is 0, gradient range can not be calculated.\n return;\n }\n\n var visualMeta;\n\n for (var i = visualMetaList.length - 1; i >= 0; i--) {\n // Can only be x or y\n if (visualMetaList[i].dimension < 2) {\n visualMeta = visualMetaList[i];\n break;\n }\n }\n\n if (!visualMeta || coordSys.type !== 'cartesian2d') {\n return;\n } // If the area to be rendered is bigger than area defined by LinearGradient,\n // the canvas spec prescribes that the color of the first stop and the last\n // stop should be used. But if two stops are added at offset 0, in effect\n // browsers use the color of the second stop to render area outside\n // LinearGradient. So we can only infinitesimally extend area defined in\n // LinearGradient to render `outerColors`.\n\n\n var dimension = visualMeta.dimension;\n var dimName = data.dimensions[dimension];\n var axis = coordSys.getAxis(dimName); // dataToCoor mapping may not be linear, but must be monotonic.\n\n var colorStops = zrUtil.map(visualMeta.stops, function (stop) {\n return {\n coord: axis.toGlobalCoord(axis.dataToCoord(stop.value)),\n color: stop.color\n };\n });\n var stopLen = colorStops.length;\n var outerColors = visualMeta.outerColors.slice();\n\n if (stopLen && colorStops[0].coord > colorStops[stopLen - 1].coord) {\n colorStops.reverse();\n outerColors.reverse();\n }\n\n var tinyExtent = 10; // Arbitrary value: 10px\n\n var minCoord = colorStops[0].coord - tinyExtent;\n var maxCoord = colorStops[stopLen - 1].coord + tinyExtent;\n var coordSpan = maxCoord - minCoord;\n\n if (coordSpan < 1e-3) {\n return 'transparent';\n }\n\n zrUtil.each(colorStops, function (stop) {\n stop.offset = (stop.coord - minCoord) / coordSpan;\n });\n colorStops.push({\n offset: stopLen ? colorStops[stopLen - 1].offset : 0.5,\n color: outerColors[1] || 'transparent'\n });\n colorStops.unshift({\n // notice colorStops.length have been changed.\n offset: stopLen ? colorStops[0].offset : 0.5,\n color: outerColors[0] || 'transparent'\n }); // zrUtil.each(colorStops, function (colorStop) {\n // // Make sure each offset has rounded px to avoid not sharp edge\n // colorStop.offset = (Math.round(colorStop.offset * (end - start) + start) - start) / (end - start);\n // });\n\n var gradient = new graphic.LinearGradient(0, 0, 0, 0, colorStops, true);\n gradient[dimName] = minCoord;\n gradient[dimName + '2'] = maxCoord;\n return gradient;\n}\n\nvar _default = ChartView.extend({\n type: 'line',\n init: function () {\n var lineGroup = new graphic.Group();\n var symbolDraw = new SymbolDraw();\n this.group.add(symbolDraw.group);\n this._symbolDraw = symbolDraw;\n this._lineGroup = lineGroup;\n },\n render: function (seriesModel, ecModel, api) {\n var coordSys = seriesModel.coordinateSystem;\n var group = this.group;\n var data = seriesModel.getData();\n var lineStyleModel = seriesModel.getModel('lineStyle.normal');\n var areaStyleModel = seriesModel.getModel('areaStyle.normal');\n var points = data.mapArray(data.getItemLayout, true);\n var isCoordSysPolar = coordSys.type === 'polar';\n var prevCoordSys = this._coordSys;\n var symbolDraw = this._symbolDraw;\n var polyline = this._polyline;\n var polygon = this._polygon;\n var lineGroup = this._lineGroup;\n var hasAnimation = seriesModel.get('animation');\n var isAreaChart = !areaStyleModel.isEmpty();\n var stackedOnPoints = getStackedOnPoints(coordSys, data);\n var showSymbol = seriesModel.get('showSymbol');\n\n var isSymbolIgnore = showSymbol && !isCoordSysPolar && !seriesModel.get('showAllSymbol') && this._getSymbolIgnoreFunc(data, coordSys); // Remove temporary symbols\n\n\n var oldData = this._data;\n oldData && oldData.eachItemGraphicEl(function (el, idx) {\n if (el.__temp) {\n group.remove(el);\n oldData.setItemGraphicEl(idx, null);\n }\n }); // Remove previous created symbols if showSymbol changed to false\n\n if (!showSymbol) {\n symbolDraw.remove();\n }\n\n group.add(lineGroup); // FIXME step not support polar\n\n var step = !isCoordSysPolar && seriesModel.get('step'); // Initialization animation or coordinate system changed\n\n if (!(polyline && prevCoordSys.type === coordSys.type && step === this._step)) {\n showSymbol && symbolDraw.updateData(data, isSymbolIgnore);\n\n if (step) {\n // TODO If stacked series is not step\n points = turnPointsIntoStep(points, coordSys, step);\n stackedOnPoints = turnPointsIntoStep(stackedOnPoints, coordSys, step);\n }\n\n polyline = this._newPolyline(points, coordSys, hasAnimation);\n\n if (isAreaChart) {\n polygon = this._newPolygon(points, stackedOnPoints, coordSys, hasAnimation);\n }\n\n lineGroup.setClipPath(createClipShape(coordSys, true, seriesModel));\n } else {\n if (isAreaChart && !polygon) {\n // If areaStyle is added\n polygon = this._newPolygon(points, stackedOnPoints, coordSys, hasAnimation);\n } else if (polygon && !isAreaChart) {\n // If areaStyle is removed\n lineGroup.remove(polygon);\n polygon = this._polygon = null;\n } // Update clipPath\n\n\n lineGroup.setClipPath(createClipShape(coordSys, false, seriesModel)); // Always update, or it is wrong in the case turning on legend\n // because points are not changed\n\n showSymbol && symbolDraw.updateData(data, isSymbolIgnore); // Stop symbol animation and sync with line points\n // FIXME performance?\n\n data.eachItemGraphicEl(function (el) {\n el.stopAnimation(true);\n }); // In the case data zoom triggerred refreshing frequently\n // Data may not change if line has a category axis. So it should animate nothing\n\n if (!isPointsSame(this._stackedOnPoints, stackedOnPoints) || !isPointsSame(this._points, points)) {\n if (hasAnimation) {\n this._updateAnimation(data, stackedOnPoints, coordSys, api, step);\n } else {\n // Not do it in update with animation\n if (step) {\n // TODO If stacked series is not step\n points = turnPointsIntoStep(points, coordSys, step);\n stackedOnPoints = turnPointsIntoStep(stackedOnPoints, coordSys, step);\n }\n\n polyline.setShape({\n points: points\n });\n polygon && polygon.setShape({\n points: points,\n stackedOnPoints: stackedOnPoints\n });\n }\n }\n }\n\n var visualColor = getVisualGradient(data, coordSys) || data.getVisual('color');\n polyline.useStyle(zrUtil.defaults( // Use color in lineStyle first\n lineStyleModel.getLineStyle(), {\n fill: 'none',\n stroke: visualColor,\n lineJoin: 'bevel'\n }));\n var smooth = seriesModel.get('smooth');\n smooth = getSmooth(seriesModel.get('smooth'));\n polyline.setShape({\n smooth: smooth,\n smoothMonotone: seriesModel.get('smoothMonotone'),\n connectNulls: seriesModel.get('connectNulls')\n });\n\n if (polygon) {\n var stackedOn = data.stackedOn;\n var stackedOnSmooth = 0;\n polygon.useStyle(zrUtil.defaults(areaStyleModel.getAreaStyle(), {\n fill: visualColor,\n opacity: 0.7,\n lineJoin: 'bevel'\n }));\n\n if (stackedOn) {\n var stackedOnSeries = stackedOn.hostModel;\n stackedOnSmooth = getSmooth(stackedOnSeries.get('smooth'));\n }\n\n polygon.setShape({\n smooth: smooth,\n stackedOnSmooth: stackedOnSmooth,\n smoothMonotone: seriesModel.get('smoothMonotone'),\n connectNulls: seriesModel.get('connectNulls')\n });\n }\n\n this._data = data; // Save the coordinate system for transition animation when data changed\n\n this._coordSys = coordSys;\n this._stackedOnPoints = stackedOnPoints;\n this._points = points;\n this._step = step;\n },\n dispose: function () {},\n highlight: function (seriesModel, ecModel, api, payload) {\n var data = seriesModel.getData();\n var dataIndex = modelUtil.queryDataIndex(data, payload);\n\n if (!(dataIndex instanceof Array) && dataIndex != null && dataIndex >= 0) {\n var symbol = data.getItemGraphicEl(dataIndex);\n\n if (!symbol) {\n // Create a temporary symbol if it is not exists\n var pt = data.getItemLayout(dataIndex);\n\n if (!pt) {\n // Null data\n return;\n }\n\n symbol = new SymbolClz(data, dataIndex);\n symbol.position = pt;\n symbol.setZ(seriesModel.get('zlevel'), seriesModel.get('z'));\n symbol.ignore = isNaN(pt[0]) || isNaN(pt[1]);\n symbol.__temp = true;\n data.setItemGraphicEl(dataIndex, symbol); // Stop scale animation\n\n symbol.stopSymbolAnimation(true);\n this.group.add(symbol);\n }\n\n symbol.highlight();\n } else {\n // Highlight whole series\n ChartView.prototype.highlight.call(this, seriesModel, ecModel, api, payload);\n }\n },\n downplay: function (seriesModel, ecModel, api, payload) {\n var data = seriesModel.getData();\n var dataIndex = modelUtil.queryDataIndex(data, payload);\n\n if (dataIndex != null && dataIndex >= 0) {\n var symbol = data.getItemGraphicEl(dataIndex);\n\n if (symbol) {\n if (symbol.__temp) {\n data.setItemGraphicEl(dataIndex, null);\n this.group.remove(symbol);\n } else {\n symbol.downplay();\n }\n }\n } else {\n // FIXME\n // can not downplay completely.\n // Downplay whole series\n ChartView.prototype.downplay.call(this, seriesModel, ecModel, api, payload);\n }\n },\n\n /**\n * @param {module:zrender/container/Group} group\n * @param {Array.>} points\n * @private\n */\n _newPolyline: function (points) {\n var polyline = this._polyline; // Remove previous created polyline\n\n if (polyline) {\n this._lineGroup.remove(polyline);\n }\n\n polyline = new Polyline({\n shape: {\n points: points\n },\n silent: true,\n z2: 10\n });\n\n this._lineGroup.add(polyline);\n\n this._polyline = polyline;\n return polyline;\n },\n\n /**\n * @param {module:zrender/container/Group} group\n * @param {Array.>} stackedOnPoints\n * @param {Array.>} points\n * @private\n */\n _newPolygon: function (points, stackedOnPoints) {\n var polygon = this._polygon; // Remove previous created polygon\n\n if (polygon) {\n this._lineGroup.remove(polygon);\n }\n\n polygon = new Polygon({\n shape: {\n points: points,\n stackedOnPoints: stackedOnPoints\n },\n silent: true\n });\n\n this._lineGroup.add(polygon);\n\n this._polygon = polygon;\n return polygon;\n },\n\n /**\n * @private\n */\n _getSymbolIgnoreFunc: function (data, coordSys) {\n var categoryAxis = coordSys.getAxesByScale('ordinal')[0]; // `getLabelInterval` is provided by echarts/component/axis\n\n if (categoryAxis && categoryAxis.isLabelIgnored) {\n return zrUtil.bind(categoryAxis.isLabelIgnored, categoryAxis);\n }\n },\n\n /**\n * @private\n */\n // FIXME Two value axis\n _updateAnimation: function (data, stackedOnPoints, coordSys, api, step) {\n var polyline = this._polyline;\n var polygon = this._polygon;\n var seriesModel = data.hostModel;\n var diff = lineAnimationDiff(this._data, data, this._stackedOnPoints, stackedOnPoints, this._coordSys, coordSys);\n var current = diff.current;\n var stackedOnCurrent = diff.stackedOnCurrent;\n var next = diff.next;\n var stackedOnNext = diff.stackedOnNext;\n\n if (step) {\n // TODO If stacked series is not step\n current = turnPointsIntoStep(diff.current, coordSys, step);\n stackedOnCurrent = turnPointsIntoStep(diff.stackedOnCurrent, coordSys, step);\n next = turnPointsIntoStep(diff.next, coordSys, step);\n stackedOnNext = turnPointsIntoStep(diff.stackedOnNext, coordSys, step);\n } // `diff.current` is subset of `current` (which should be ensured by\n // turnPointsIntoStep), so points in `__points` can be updated when\n // points in `current` are update during animation.\n\n\n polyline.shape.__points = diff.current;\n polyline.shape.points = current;\n graphic.updateProps(polyline, {\n shape: {\n points: next\n }\n }, seriesModel);\n\n if (polygon) {\n polygon.setShape({\n points: current,\n stackedOnPoints: stackedOnCurrent\n });\n graphic.updateProps(polygon, {\n shape: {\n points: next,\n stackedOnPoints: stackedOnNext\n }\n }, seriesModel);\n }\n\n var updatedDataInfo = [];\n var diffStatus = diff.status;\n\n for (var i = 0; i < diffStatus.length; i++) {\n var cmd = diffStatus[i].cmd;\n\n if (cmd === '=') {\n var el = data.getItemGraphicEl(diffStatus[i].idx1);\n\n if (el) {\n updatedDataInfo.push({\n el: el,\n ptIdx: i // Index of points\n\n });\n }\n }\n }\n\n if (polyline.animators && polyline.animators.length) {\n polyline.animators[0].during(function () {\n for (var i = 0; i < updatedDataInfo.length; i++) {\n var el = updatedDataInfo[i].el;\n el.attr('position', polyline.shape.__points[updatedDataInfo[i].ptIdx]);\n }\n });\n }\n },\n remove: function (ecModel) {\n var group = this.group;\n var oldData = this._data;\n\n this._lineGroup.removeAll();\n\n this._symbolDraw.remove(true); // Remove temporary created elements when highlighting\n\n\n oldData && oldData.eachItemGraphicEl(function (el, idx) {\n if (el.__temp) {\n group.remove(el);\n oldData.setItemGraphicEl(idx, null);\n }\n });\n this._polyline = this._polygon = this._coordSys = this._points = this._stackedOnPoints = this._data = null;\n }\n});\n\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar AxisBuilder = require(\"./AxisBuilder\");\n\nvar AxisView = require(\"./AxisView\");\n\nvar cartesianAxisHelper = require(\"./cartesianAxisHelper\");\n\nvar ifIgnoreOnTick = AxisBuilder.ifIgnoreOnTick;\nvar getInterval = AxisBuilder.getInterval;\nvar axisBuilderAttrs = ['axisLine', 'axisTickLabel', 'axisName'];\nvar selfBuilderAttrs = ['splitArea', 'splitLine']; // function getAlignWithLabel(model, axisModel) {\n// var alignWithLabel = model.get('alignWithLabel');\n// if (alignWithLabel === 'auto') {\n// alignWithLabel = axisModel.get('axisTick.alignWithLabel');\n// }\n// return alignWithLabel;\n// }\n\nvar CartesianAxisView = AxisView.extend({\n type: 'cartesianAxis',\n axisPointerClass: 'CartesianAxisPointer',\n\n /**\n * @override\n */\n render: function (axisModel, ecModel, api, payload) {\n this.group.removeAll();\n var oldAxisGroup = this._axisGroup;\n this._axisGroup = new graphic.Group();\n this.group.add(this._axisGroup);\n\n if (!axisModel.get('show')) {\n return;\n }\n\n var gridModel = axisModel.getCoordSysModel();\n var layout = cartesianAxisHelper.layout(gridModel, axisModel);\n var axisBuilder = new AxisBuilder(axisModel, layout);\n zrUtil.each(axisBuilderAttrs, axisBuilder.add, axisBuilder);\n\n this._axisGroup.add(axisBuilder.getGroup());\n\n zrUtil.each(selfBuilderAttrs, function (name) {\n if (axisModel.get(name + '.show')) {\n this['_' + name](axisModel, gridModel, layout.labelInterval);\n }\n }, this);\n graphic.groupTransition(oldAxisGroup, this._axisGroup, axisModel);\n CartesianAxisView.superCall(this, 'render', axisModel, ecModel, api, payload);\n },\n\n /**\n * @param {module:echarts/coord/cartesian/AxisModel} axisModel\n * @param {module:echarts/coord/cartesian/GridModel} gridModel\n * @param {number|Function} labelInterval\n * @private\n */\n _splitLine: function (axisModel, gridModel, labelInterval) {\n var axis = axisModel.axis;\n\n if (axis.scale.isBlank()) {\n return;\n }\n\n var splitLineModel = axisModel.getModel('splitLine');\n var lineStyleModel = splitLineModel.getModel('lineStyle');\n var lineColors = lineStyleModel.get('color');\n var lineInterval = getInterval(splitLineModel, labelInterval);\n lineColors = zrUtil.isArray(lineColors) ? lineColors : [lineColors];\n var gridRect = gridModel.coordinateSystem.getRect();\n var isHorizontal = axis.isHorizontal();\n var lineCount = 0;\n var ticksCoords = axis.getTicksCoords();\n var ticks = axis.scale.getTicks();\n var showMinLabel = axisModel.get('axisLabel.showMinLabel');\n var showMaxLabel = axisModel.get('axisLabel.showMaxLabel');\n var p1 = [];\n var p2 = []; // Simple optimization\n // Batching the lines if color are the same\n\n var lineStyle = lineStyleModel.getLineStyle();\n\n for (var i = 0; i < ticksCoords.length; i++) {\n if (ifIgnoreOnTick(axis, i, lineInterval, ticksCoords.length, showMinLabel, showMaxLabel)) {\n continue;\n }\n\n var tickCoord = axis.toGlobalCoord(ticksCoords[i]);\n\n if (isHorizontal) {\n p1[0] = tickCoord;\n p1[1] = gridRect.y;\n p2[0] = tickCoord;\n p2[1] = gridRect.y + gridRect.height;\n } else {\n p1[0] = gridRect.x;\n p1[1] = tickCoord;\n p2[0] = gridRect.x + gridRect.width;\n p2[1] = tickCoord;\n }\n\n var colorIndex = lineCount++ % lineColors.length;\n\n this._axisGroup.add(new graphic.Line(graphic.subPixelOptimizeLine({\n anid: 'line_' + ticks[i],\n shape: {\n x1: p1[0],\n y1: p1[1],\n x2: p2[0],\n y2: p2[1]\n },\n style: zrUtil.defaults({\n stroke: lineColors[colorIndex]\n }, lineStyle),\n silent: true\n })));\n }\n },\n\n /**\n * @param {module:echarts/coord/cartesian/AxisModel} axisModel\n * @param {module:echarts/coord/cartesian/GridModel} gridModel\n * @param {number|Function} labelInterval\n * @private\n */\n _splitArea: function (axisModel, gridModel, labelInterval) {\n var axis = axisModel.axis;\n\n if (axis.scale.isBlank()) {\n return;\n }\n\n var splitAreaModel = axisModel.getModel('splitArea');\n var areaStyleModel = splitAreaModel.getModel('areaStyle');\n var areaColors = areaStyleModel.get('color');\n var gridRect = gridModel.coordinateSystem.getRect();\n var ticksCoords = axis.getTicksCoords();\n var ticks = axis.scale.getTicks();\n var prevX = axis.toGlobalCoord(ticksCoords[0]);\n var prevY = axis.toGlobalCoord(ticksCoords[0]);\n var count = 0;\n var areaInterval = getInterval(splitAreaModel, labelInterval);\n var areaStyle = areaStyleModel.getAreaStyle();\n areaColors = zrUtil.isArray(areaColors) ? areaColors : [areaColors];\n var showMinLabel = axisModel.get('axisLabel.showMinLabel');\n var showMaxLabel = axisModel.get('axisLabel.showMaxLabel');\n\n for (var i = 1; i < ticksCoords.length; i++) {\n if (ifIgnoreOnTick(axis, i, areaInterval, ticksCoords.length, showMinLabel, showMaxLabel)) {\n continue;\n }\n\n var tickCoord = axis.toGlobalCoord(ticksCoords[i]);\n var x;\n var y;\n var width;\n var height;\n\n if (axis.isHorizontal()) {\n x = prevX;\n y = gridRect.y;\n width = tickCoord - x;\n height = gridRect.height;\n } else {\n x = gridRect.x;\n y = prevY;\n width = gridRect.width;\n height = tickCoord - y;\n }\n\n var colorIndex = count++ % areaColors.length;\n\n this._axisGroup.add(new graphic.Rect({\n anid: 'area_' + ticks[i],\n shape: {\n x: x,\n y: y,\n width: width,\n height: height\n },\n style: zrUtil.defaults({\n fill: areaColors[colorIndex]\n }, areaStyle),\n silent: true\n }));\n\n prevX = x + width;\n prevY = y + height;\n }\n }\n});\nCartesianAxisView.extend({\n type: 'xAxis'\n});\nCartesianAxisView.extend({\n type: 'yAxis'\n});","var BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nvar bbox = require(\"zrender/lib/core/bbox\");\n\nvar vec2 = require(\"zrender/lib/core/vector\");\n\nvar polygonContain = require(\"zrender/lib/contain/polygon\");\n\n/**\n * @module echarts/coord/geo/Region\n */\n\n/**\n * @param {string} name\n * @param {Array} geometries\n * @param {Array.} cp\n */\nfunction Region(name, geometries, cp) {\n /**\n * @type {string}\n * @readOnly\n */\n this.name = name;\n /**\n * @type {Array.}\n * @readOnly\n */\n\n this.geometries = geometries;\n\n if (!cp) {\n var rect = this.getBoundingRect();\n cp = [rect.x + rect.width / 2, rect.y + rect.height / 2];\n } else {\n cp = [cp[0], cp[1]];\n }\n /**\n * @type {Array.}\n */\n\n\n this.center = cp;\n}\n\nRegion.prototype = {\n constructor: Region,\n properties: null,\n\n /**\n * @return {module:zrender/core/BoundingRect}\n */\n getBoundingRect: function () {\n var rect = this._rect;\n\n if (rect) {\n return rect;\n }\n\n var MAX_NUMBER = Number.MAX_VALUE;\n var min = [MAX_NUMBER, MAX_NUMBER];\n var max = [-MAX_NUMBER, -MAX_NUMBER];\n var min2 = [];\n var max2 = [];\n var geometries = this.geometries;\n\n for (var i = 0; i < geometries.length; i++) {\n // Only support polygon\n if (geometries[i].type !== 'polygon') {\n continue;\n } // Doesn't consider hole\n\n\n var exterior = geometries[i].exterior;\n bbox.fromPoints(exterior, min2, max2);\n vec2.min(min, min, min2);\n vec2.max(max, max, max2);\n } // No data\n\n\n if (i === 0) {\n min[0] = min[1] = max[0] = max[1] = 0;\n }\n\n return this._rect = new BoundingRect(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n },\n\n /**\n * @param {} coord\n * @return {boolean}\n */\n contain: function (coord) {\n var rect = this.getBoundingRect();\n var geometries = this.geometries;\n\n if (!rect.contain(coord[0], coord[1])) {\n return false;\n }\n\n loopGeo: for (var i = 0, len = geometries.length; i < len; i++) {\n // Only support polygon.\n if (geometries[i].type !== 'polygon') {\n continue;\n }\n\n var exterior = geometries[i].exterior;\n var interiors = geometries[i].interiors;\n\n if (polygonContain.contain(exterior, coord[0], coord[1])) {\n // Not in the region if point is in the hole.\n for (var k = 0; k < (interiors ? interiors.length : 0); k++) {\n if (polygonContain.contain(interiors[k])) {\n continue loopGeo;\n }\n }\n\n return true;\n }\n }\n\n return false;\n },\n transformTo: function (x, y, width, height) {\n var rect = this.getBoundingRect();\n var aspect = rect.width / rect.height;\n\n if (!width) {\n width = aspect * height;\n } else if (!height) {\n height = width / aspect;\n }\n\n var target = new BoundingRect(x, y, width, height);\n var transform = rect.calculateTransform(target);\n var geometries = this.geometries;\n\n for (var i = 0; i < geometries.length; i++) {\n // Only support polygon.\n if (geometries[i].type !== 'polygon') {\n continue;\n }\n\n var exterior = geometries[i].exterior;\n var interiors = geometries[i].interiors;\n\n for (var p = 0; p < exterior.length; p++) {\n vec2.applyTransform(exterior[p], exterior[p], transform);\n }\n\n for (var h = 0; h < (interiors ? interiors.length : 0); h++) {\n for (var p = 0; p < interiors[h].length; p++) {\n vec2.applyTransform(interiors[h][p], interiors[h][p], transform);\n }\n }\n }\n\n rect = this._rect;\n rect.copy(target); // Update center\n\n this.center = [rect.x + rect.width / 2, rect.y + rect.height / 2];\n }\n};\nvar _default = Region;\nmodule.exports = _default;","var echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar throttleUtil = require(\"../util/throttle\");\n\nvar parallelPreprocessor = require(\"../coord/parallel/parallelPreprocessor\");\n\nrequire(\"../coord/parallel/parallelCreator\");\n\nrequire(\"../coord/parallel/ParallelModel\");\n\nrequire(\"./parallelAxis\");\n\nvar CLICK_THRESHOLD = 5; // > 4\n// Parallel view\n\necharts.extendComponentView({\n type: 'parallel',\n render: function (parallelModel, ecModel, api) {\n this._model = parallelModel;\n this._api = api;\n\n if (!this._handlers) {\n this._handlers = {};\n zrUtil.each(handlers, function (handler, eventName) {\n api.getZr().on(eventName, this._handlers[eventName] = zrUtil.bind(handler, this));\n }, this);\n }\n\n throttleUtil.createOrUpdate(this, '_throttledDispatchExpand', parallelModel.get('axisExpandRate'), 'fixRate');\n },\n dispose: function (ecModel, api) {\n zrUtil.each(this._handlers, function (handler, eventName) {\n api.getZr().off(eventName, handler);\n });\n this._handlers = null;\n },\n\n /**\n * @param {Object} [opt] If null, cancle the last action triggering for debounce.\n */\n _throttledDispatchExpand: function (opt) {\n this._dispatchExpand(opt);\n },\n _dispatchExpand: function (opt) {\n opt && this._api.dispatchAction(zrUtil.extend({\n type: 'parallelAxisExpand'\n }, opt));\n }\n});\nvar handlers = {\n mousedown: function (e) {\n if (checkTrigger(this, 'click')) {\n this._mouseDownPoint = [e.offsetX, e.offsetY];\n }\n },\n mouseup: function (e) {\n var mouseDownPoint = this._mouseDownPoint;\n\n if (checkTrigger(this, 'click') && mouseDownPoint) {\n var point = [e.offsetX, e.offsetY];\n var dist = Math.pow(mouseDownPoint[0] - point[0], 2) + Math.pow(mouseDownPoint[1] - point[1], 2);\n\n if (dist > CLICK_THRESHOLD) {\n return;\n }\n\n var result = this._model.coordinateSystem.getSlidedAxisExpandWindow([e.offsetX, e.offsetY]);\n\n result.behavior !== 'none' && this._dispatchExpand({\n axisExpandWindow: result.axisExpandWindow\n });\n }\n\n this._mouseDownPoint = null;\n },\n mousemove: function (e) {\n // Should do nothing when brushing.\n if (this._mouseDownPoint || !checkTrigger(this, 'mousemove')) {\n return;\n }\n\n var model = this._model;\n var result = model.coordinateSystem.getSlidedAxisExpandWindow([e.offsetX, e.offsetY]);\n var behavior = result.behavior;\n behavior === 'jump' && this._throttledDispatchExpand.debounceNextCall(model.get('axisExpandDebounce'));\n\n this._throttledDispatchExpand(behavior === 'none' ? null // Cancle the last trigger, in case that mouse slide out of the area quickly.\n : {\n axisExpandWindow: result.axisExpandWindow,\n // Jumping uses animation, and sliding suppresses animation.\n animation: behavior === 'jump' ? null : false\n });\n }\n};\n\nfunction checkTrigger(view, triggerOn) {\n var model = view._model;\n return model.get('axisExpandable') && model.get('axisExpandTriggerOn') === triggerOn;\n}\n\necharts.registerPreprocessor(parallelPreprocessor);","var _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar visualSolution = require(\"../../visual/visualSolution\");\n\nvar Model = require(\"../../model/Model\");\n\nvar DEFAULT_OUT_OF_BRUSH_COLOR = ['#ddd'];\nvar BrushModel = echarts.extendComponentModel({\n type: 'brush',\n dependencies: ['geo', 'grid', 'xAxis', 'yAxis', 'parallel', 'series'],\n\n /**\n * @protected\n */\n defaultOption: {\n // inBrush: null,\n // outOfBrush: null,\n toolbox: null,\n // Default value see preprocessor.\n brushLink: null,\n // Series indices array, broadcast using dataIndex.\n // or 'all', which means all series. 'none' or null means no series.\n seriesIndex: 'all',\n // seriesIndex array, specify series controlled by this brush component.\n geoIndex: null,\n //\n xAxisIndex: null,\n yAxisIndex: null,\n brushType: 'rect',\n // Default brushType, see BrushController.\n brushMode: 'single',\n // Default brushMode, 'single' or 'multiple'\n transformable: true,\n // Default transformable.\n brushStyle: {\n // Default brushStyle\n borderWidth: 1,\n color: 'rgba(120,140,180,0.3)',\n borderColor: 'rgba(120,140,180,0.8)'\n },\n throttleType: 'fixRate',\n // Throttle in brushSelected event. 'fixRate' or 'debounce'.\n // If null, no throttle. Valid only in the first brush component\n throttleDelay: 0,\n // Unit: ms, 0 means every event will be triggered.\n // FIXME\n // 试验效果\n removeOnClick: true,\n z: 10000\n },\n\n /**\n * @readOnly\n * @type {Array.}\n */\n areas: [],\n\n /**\n * Current activated brush type.\n * If null, brush is inactived.\n * see module:echarts/component/helper/BrushController\n * @readOnly\n * @type {string}\n */\n brushType: null,\n\n /**\n * Current brush opt.\n * see module:echarts/component/helper/BrushController\n * @readOnly\n * @type {Object}\n */\n brushOption: {},\n\n /**\n * @readOnly\n * @type {Array.}\n */\n coordInfoList: [],\n optionUpdated: function (newOption, isInit) {\n var thisOption = this.option;\n !isInit && visualSolution.replaceVisualOption(thisOption, newOption, ['inBrush', 'outOfBrush']);\n thisOption.inBrush = thisOption.inBrush || {}; // Always give default visual, consider setOption at the second time.\n\n thisOption.outOfBrush = thisOption.outOfBrush || {\n color: DEFAULT_OUT_OF_BRUSH_COLOR\n };\n },\n\n /**\n * If ranges is null/undefined, range state remain.\n *\n * @param {Array.} [ranges]\n */\n setAreas: function (areas) {\n // If ranges is null/undefined, range state remain.\n // This helps user to dispatchAction({type: 'brush'}) with no areas\n // set but just want to get the current brush select info from a `brush` event.\n if (!areas) {\n return;\n }\n\n this.areas = zrUtil.map(areas, function (area) {\n return generateBrushOption(this.option, area);\n }, this);\n },\n\n /**\n * see module:echarts/component/helper/BrushController\n * @param {Object} brushOption\n */\n setBrushOption: function (brushOption) {\n this.brushOption = generateBrushOption(this.option, brushOption);\n this.brushType = this.brushOption.brushType;\n }\n});\n\nfunction generateBrushOption(option, brushOption) {\n return zrUtil.merge({\n brushType: option.brushType,\n brushMode: option.brushMode,\n transformable: option.transformable,\n brushStyle: new Model(option.brushStyle).getItemStyle(),\n removeOnClick: option.removeOnClick,\n z: option.z\n }, brushOption, true);\n}\n\nvar _default = BrushModel;\nmodule.exports = _default;","var BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nvar _cursorHelper = require(\"./cursorHelper\");\n\nvar onIrrelevantElement = _cursorHelper.onIrrelevantElement;\n\nvar graphicUtil = require(\"../../util/graphic\");\n\nfunction makeRectPanelClipPath(rect) {\n rect = normalizeRect(rect);\n return function (localPoints, transform) {\n return graphicUtil.clipPointsByRect(localPoints, rect);\n };\n}\n\nfunction makeLinearBrushOtherExtent(rect, specifiedXYIndex) {\n rect = normalizeRect(rect);\n return function (xyIndex) {\n var idx = specifiedXYIndex != null ? specifiedXYIndex : xyIndex;\n var brushWidth = idx ? rect.width : rect.height;\n var base = idx ? rect.x : rect.y;\n return [base, base + (brushWidth || 0)];\n };\n}\n\nfunction makeRectIsTargetByCursor(rect, api, targetModel) {\n rect = normalizeRect(rect);\n return function (e, localCursorPoint, transform) {\n return rect.contain(localCursorPoint[0], localCursorPoint[1]) && !onIrrelevantElement(e, api, targetModel);\n };\n} // Consider width/height is negative.\n\n\nfunction normalizeRect(rect) {\n return BoundingRect.create(rect);\n}\n\nexports.makeRectPanelClipPath = makeRectPanelClipPath;\nexports.makeLinearBrushOtherExtent = makeLinearBrushOtherExtent;\nexports.makeRectIsTargetByCursor = makeRectIsTargetByCursor;","require(\"../coord/polar/polarCreator\");\n\nrequire(\"./axis/AngleAxisView\");","var graphic = require(\"../../util/graphic\");\n\nvar layout = require(\"../../util/layout\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _helper = require(\"./helper\");\n\nvar wrapTreePathInfo = _helper.wrapTreePathInfo;\nvar TEXT_PADDING = 8;\nvar ITEM_GAP = 8;\nvar ARRAY_LENGTH = 5;\n\nfunction Breadcrumb(containerGroup) {\n /**\n * @private\n * @type {module:zrender/container/Group}\n */\n this.group = new graphic.Group();\n containerGroup.add(this.group);\n}\n\nBreadcrumb.prototype = {\n constructor: Breadcrumb,\n render: function (seriesModel, api, targetNode, onSelect) {\n var model = seriesModel.getModel('breadcrumb');\n var thisGroup = this.group;\n thisGroup.removeAll();\n\n if (!model.get('show') || !targetNode) {\n return;\n }\n\n var normalStyleModel = model.getModel('itemStyle.normal'); // var emphasisStyleModel = model.getModel('itemStyle.emphasis');\n\n var textStyleModel = normalStyleModel.getModel('textStyle');\n var layoutParam = {\n pos: {\n left: model.get('left'),\n right: model.get('right'),\n top: model.get('top'),\n bottom: model.get('bottom')\n },\n box: {\n width: api.getWidth(),\n height: api.getHeight()\n },\n emptyItemWidth: model.get('emptyItemWidth'),\n totalWidth: 0,\n renderList: []\n };\n\n this._prepare(targetNode, layoutParam, textStyleModel);\n\n this._renderContent(seriesModel, layoutParam, normalStyleModel, textStyleModel, onSelect);\n\n layout.positionElement(thisGroup, layoutParam.pos, layoutParam.box);\n },\n\n /**\n * Prepare render list and total width\n * @private\n */\n _prepare: function (targetNode, layoutParam, textStyleModel) {\n for (var node = targetNode; node; node = node.parentNode) {\n var text = node.getModel().get('name');\n var textRect = textStyleModel.getTextRect(text);\n var itemWidth = Math.max(textRect.width + TEXT_PADDING * 2, layoutParam.emptyItemWidth);\n layoutParam.totalWidth += itemWidth + ITEM_GAP;\n layoutParam.renderList.push({\n node: node,\n text: text,\n width: itemWidth\n });\n }\n },\n\n /**\n * @private\n */\n _renderContent: function (seriesModel, layoutParam, normalStyleModel, textStyleModel, onSelect) {\n // Start rendering.\n var lastX = 0;\n var emptyItemWidth = layoutParam.emptyItemWidth;\n var height = seriesModel.get('breadcrumb.height');\n var availableSize = layout.getAvailableSize(layoutParam.pos, layoutParam.box);\n var totalWidth = layoutParam.totalWidth;\n var renderList = layoutParam.renderList;\n\n for (var i = renderList.length - 1; i >= 0; i--) {\n var item = renderList[i];\n var itemNode = item.node;\n var itemWidth = item.width;\n var text = item.text; // Hdie text and shorten width if necessary.\n\n if (totalWidth > availableSize.width) {\n totalWidth -= itemWidth - emptyItemWidth;\n itemWidth = emptyItemWidth;\n text = null;\n }\n\n var el = new graphic.Polygon({\n shape: {\n points: makeItemPoints(lastX, 0, itemWidth, height, i === renderList.length - 1, i === 0)\n },\n style: zrUtil.defaults(normalStyleModel.getItemStyle(), {\n lineJoin: 'bevel',\n text: text,\n textFill: textStyleModel.getTextColor(),\n textFont: textStyleModel.getFont()\n }),\n z: 10,\n onclick: zrUtil.curry(onSelect, itemNode)\n });\n this.group.add(el);\n packEventData(el, seriesModel, itemNode);\n lastX += itemWidth + ITEM_GAP;\n }\n },\n\n /**\n * @override\n */\n remove: function () {\n this.group.removeAll();\n }\n};\n\nfunction makeItemPoints(x, y, itemWidth, itemHeight, head, tail) {\n var points = [[head ? x : x - ARRAY_LENGTH, y], [x + itemWidth, y], [x + itemWidth, y + itemHeight], [head ? x : x - ARRAY_LENGTH, y + itemHeight]];\n !tail && points.splice(2, 0, [x + itemWidth + ARRAY_LENGTH, y + itemHeight / 2]);\n !head && points.push([x, y + itemHeight / 2]);\n return points;\n} // Package custom mouse event.\n\n\nfunction packEventData(el, seriesModel, itemNode) {\n el.eventData = {\n componentType: 'series',\n componentSubType: 'treemap',\n seriesIndex: seriesModel.componentIndex,\n seriesName: seriesModel.name,\n seriesType: 'treemap',\n selfType: 'breadcrumb',\n // Distinguish with click event on treemap node.\n nodeData: {\n dataIndex: itemNode && itemNode.dataIndex,\n name: itemNode && itemNode.name\n },\n treePathInfo: itemNode && wrapTreePathInfo(itemNode, seriesModel)\n };\n}\n\nvar _default = Breadcrumb;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\n// FIXME 公用?\n\n/**\n * @param {Array.} datas\n * @param {string} statisticType 'average' 'sum'\n * @inner\n */\nfunction dataStatistics(datas, statisticType) {\n var dataNameMap = {};\n var dims = ['value'];\n zrUtil.each(datas, function (data) {\n data.each(dims, function (value, idx) {\n // Add prefix to avoid conflict with Object.prototype.\n var mapKey = 'ec-' + data.getName(idx);\n dataNameMap[mapKey] = dataNameMap[mapKey] || [];\n\n if (!isNaN(value)) {\n dataNameMap[mapKey].push(value);\n }\n });\n });\n return datas[0].map(dims, function (value, idx) {\n var mapKey = 'ec-' + datas[0].getName(idx);\n var sum = 0;\n var min = Infinity;\n var max = -Infinity;\n var len = dataNameMap[mapKey].length;\n\n for (var i = 0; i < len; i++) {\n min = Math.min(min, dataNameMap[mapKey][i]);\n max = Math.max(max, dataNameMap[mapKey][i]);\n sum += dataNameMap[mapKey][i];\n }\n\n var result;\n\n if (statisticType === 'min') {\n result = min;\n } else if (statisticType === 'max') {\n result = max;\n } else if (statisticType === 'average') {\n result = sum / len;\n } else {\n result = sum;\n }\n\n return len === 0 ? NaN : result;\n });\n}\n\nfunction _default(ecModel) {\n var seriesGroups = {};\n ecModel.eachSeriesByType('map', function (seriesModel) {\n var hostGeoModel = seriesModel.getHostGeoModel();\n var key = hostGeoModel ? 'o' + hostGeoModel.id : 'i' + seriesModel.getMapType();\n (seriesGroups[key] = seriesGroups[key] || []).push(seriesModel);\n });\n zrUtil.each(seriesGroups, function (seriesList, key) {\n var data = dataStatistics(zrUtil.map(seriesList, function (seriesModel) {\n return seriesModel.getData();\n }), seriesList[0].get('mapValueCalculation'));\n\n for (var i = 0; i < seriesList.length; i++) {\n seriesList[i].originalData = seriesList[i].getData();\n } // FIXME Put where?\n\n\n for (var i = 0; i < seriesList.length; i++) {\n seriesList[i].seriesGroup = seriesList;\n seriesList[i].needsDrawMap = i === 0 && !seriesList[i].getHostGeoModel();\n seriesList[i].setData(data.cloneShallow());\n seriesList[i].mainSeries = seriesList[0];\n }\n });\n}\n\nmodule.exports = _default;","var graphic = require(\"../../util/graphic\");\n\nvar SymbolClz = require(\"./Symbol\");\n\n/**\n * @module echarts/chart/helper/SymbolDraw\n */\n\n/**\n * @constructor\n * @alias module:echarts/chart/helper/SymbolDraw\n * @param {module:zrender/graphic/Group} [symbolCtor]\n */\nfunction SymbolDraw(symbolCtor) {\n this.group = new graphic.Group();\n this._symbolCtor = symbolCtor || SymbolClz;\n}\n\nvar symbolDrawProto = SymbolDraw.prototype;\n\nfunction symbolNeedsDraw(data, idx, isIgnore) {\n var point = data.getItemLayout(idx); // Is an object\n // if (point && point.hasOwnProperty('point')) {\n // point = point.point;\n // }\n\n return point && !isNaN(point[0]) && !isNaN(point[1]) && !(isIgnore && isIgnore(idx)) && data.getItemVisual(idx, 'symbol') !== 'none';\n}\n/**\n * Update symbols draw by new data\n * @param {module:echarts/data/List} data\n * @param {Array.} [isIgnore]\n */\n\n\nsymbolDrawProto.updateData = function (data, isIgnore) {\n var group = this.group;\n var seriesModel = data.hostModel;\n var oldData = this._data;\n var SymbolCtor = this._symbolCtor;\n var seriesScope = {\n itemStyle: seriesModel.getModel('itemStyle.normal').getItemStyle(['color']),\n hoverItemStyle: seriesModel.getModel('itemStyle.emphasis').getItemStyle(),\n symbolRotate: seriesModel.get('symbolRotate'),\n symbolOffset: seriesModel.get('symbolOffset'),\n hoverAnimation: seriesModel.get('hoverAnimation'),\n labelModel: seriesModel.getModel('label.normal'),\n hoverLabelModel: seriesModel.getModel('label.emphasis'),\n cursorStyle: seriesModel.get('cursor')\n };\n data.diff(oldData).add(function (newIdx) {\n var point = data.getItemLayout(newIdx);\n\n if (symbolNeedsDraw(data, newIdx, isIgnore)) {\n var symbolEl = new SymbolCtor(data, newIdx, seriesScope);\n symbolEl.attr('position', point);\n data.setItemGraphicEl(newIdx, symbolEl);\n group.add(symbolEl);\n }\n }).update(function (newIdx, oldIdx) {\n var symbolEl = oldData.getItemGraphicEl(oldIdx);\n var point = data.getItemLayout(newIdx);\n\n if (!symbolNeedsDraw(data, newIdx, isIgnore)) {\n group.remove(symbolEl);\n return;\n }\n\n if (!symbolEl) {\n symbolEl = new SymbolCtor(data, newIdx);\n symbolEl.attr('position', point);\n } else {\n symbolEl.updateData(data, newIdx, seriesScope);\n graphic.updateProps(symbolEl, {\n position: point\n }, seriesModel);\n } // Add back\n\n\n group.add(symbolEl);\n data.setItemGraphicEl(newIdx, symbolEl);\n }).remove(function (oldIdx) {\n var el = oldData.getItemGraphicEl(oldIdx);\n el && el.fadeOut(function () {\n group.remove(el);\n });\n }).execute();\n this._data = data;\n};\n\nsymbolDrawProto.updateLayout = function () {\n var data = this._data;\n\n if (data) {\n // Not use animation\n data.eachItemGraphicEl(function (el, idx) {\n var point = data.getItemLayout(idx);\n el.attr('position', point);\n });\n }\n};\n\nsymbolDrawProto.remove = function (enableAnimation) {\n var group = this.group;\n var data = this._data;\n\n if (data) {\n if (enableAnimation) {\n data.eachItemGraphicEl(function (el) {\n el.fadeOut(function () {\n group.remove(el);\n });\n });\n } else {\n group.removeAll();\n }\n }\n};\n\nvar _default = SymbolDraw;\nmodule.exports = _default;","var echarts = require(\"../../echarts\");\n\nvar List = require(\"../../data/List\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar modelUtil = require(\"../../util/model\");\n\nvar _number = require(\"../../util/number\");\n\nvar getPercentWithPrecision = _number.getPercentWithPrecision;\n\nvar completeDimensions = require(\"../../data/helper/completeDimensions\");\n\nvar dataSelectableMixin = require(\"../../component/helper/selectableMixin\");\n\nvar PieSeries = echarts.extendSeriesModel({\n type: 'series.pie',\n // Overwrite\n init: function (option) {\n PieSeries.superApply(this, 'init', arguments); // Enable legend selection for each data item\n // Use a function instead of direct access because data reference may changed\n\n this.legendDataProvider = function () {\n return this.getRawData();\n };\n\n this.updateSelectedMap(option.data);\n\n this._defaultLabelLine(option);\n },\n // Overwrite\n mergeOption: function (newOption) {\n PieSeries.superCall(this, 'mergeOption', newOption);\n this.updateSelectedMap(this.option.data);\n },\n getInitialData: function (option, ecModel) {\n var dimensions = completeDimensions(['value'], option.data);\n var list = new List(dimensions, this);\n list.initData(option.data);\n return list;\n },\n // Overwrite\n getDataParams: function (dataIndex) {\n var data = this.getData();\n var params = PieSeries.superCall(this, 'getDataParams', dataIndex); // FIXME toFixed?\n\n var valueList = [];\n data.each('value', function (value) {\n valueList.push(value);\n });\n params.percent = getPercentWithPrecision(valueList, dataIndex, data.hostModel.get('percentPrecision'));\n params.$vars.push('percent');\n return params;\n },\n _defaultLabelLine: function (option) {\n // Extend labelLine emphasis\n modelUtil.defaultEmphasis(option.labelLine, ['show']);\n var labelLineNormalOpt = option.labelLine.normal;\n var labelLineEmphasisOpt = option.labelLine.emphasis; // Not show label line if `label.normal.show = false`\n\n labelLineNormalOpt.show = labelLineNormalOpt.show && option.label.normal.show;\n labelLineEmphasisOpt.show = labelLineEmphasisOpt.show && option.label.emphasis.show;\n },\n defaultOption: {\n zlevel: 0,\n z: 2,\n legendHoverLink: true,\n hoverAnimation: true,\n // 默认全局居中\n center: ['50%', '50%'],\n radius: [0, '75%'],\n // 默认顺时针\n clockwise: true,\n startAngle: 90,\n // 最小角度改为0\n minAngle: 0,\n // 选中时扇区偏移量\n selectedOffset: 10,\n // 高亮扇区偏移量\n hoverOffset: 10,\n // If use strategy to avoid label overlapping\n avoidLabelOverlap: true,\n // 选择模式,默认关闭,可选single,multiple\n // selectedMode: false,\n // 南丁格尔玫瑰图模式,'radius'(半径) | 'area'(面积)\n // roseType: null,\n percentPrecision: 2,\n // If still show when all data zero.\n stillShowZeroSum: true,\n // cursor: null,\n label: {\n normal: {\n // If rotate around circle\n rotate: false,\n show: true,\n // 'outer', 'inside', 'center'\n position: 'outer' // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调\n // 默认使用全局文本样式,详见TEXTSTYLE\n // distance: 当position为inner时有效,为label位置到圆心的距离与圆半径(环状图为内外半径和)的比例系数\n\n },\n emphasis: {}\n },\n // Enabled when label.normal.position is 'outer'\n labelLine: {\n normal: {\n show: true,\n // 引导线两段中的第一段长度\n length: 15,\n // 引导线两段中的第二段长度\n length2: 15,\n smooth: false,\n lineStyle: {\n // color: 各异,\n width: 1,\n type: 'solid'\n }\n }\n },\n itemStyle: {\n normal: {\n borderWidth: 1\n },\n emphasis: {}\n },\n // Animation type canbe expansion, scale\n animationType: 'expansion',\n animationEasing: 'cubicOut',\n data: []\n }\n});\nzrUtil.mixin(PieSeries, dataSelectableMixin);\nvar _default = PieSeries;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nvar _number = require(\"./number\");\n\nvar parsePercent = _number.parsePercent;\n\nvar formatUtil = require(\"./format\");\n\n// Layout helpers for each component positioning\nvar each = zrUtil.each;\n/**\n * @public\n */\n\nvar LOCATION_PARAMS = ['left', 'right', 'top', 'bottom', 'width', 'height'];\n/**\n * @public\n */\n\nvar HV_NAMES = [['width', 'left', 'right'], ['height', 'top', 'bottom']];\n\nfunction boxLayout(orient, group, gap, maxWidth, maxHeight) {\n var x = 0;\n var y = 0;\n\n if (maxWidth == null) {\n maxWidth = Infinity;\n }\n\n if (maxHeight == null) {\n maxHeight = Infinity;\n }\n\n var currentLineMaxSize = 0;\n group.eachChild(function (child, idx) {\n var position = child.position;\n var rect = child.getBoundingRect();\n var nextChild = group.childAt(idx + 1);\n var nextChildRect = nextChild && nextChild.getBoundingRect();\n var nextX;\n var nextY;\n\n if (orient === 'horizontal') {\n var moveX = rect.width + (nextChildRect ? -nextChildRect.x + rect.x : 0);\n nextX = x + moveX; // Wrap when width exceeds maxWidth or meet a `newline` group\n // FIXME compare before adding gap?\n\n if (nextX > maxWidth || child.newline) {\n x = 0;\n nextX = moveX;\n y += currentLineMaxSize + gap;\n currentLineMaxSize = rect.height;\n } else {\n // FIXME: consider rect.y is not `0`?\n currentLineMaxSize = Math.max(currentLineMaxSize, rect.height);\n }\n } else {\n var moveY = rect.height + (nextChildRect ? -nextChildRect.y + rect.y : 0);\n nextY = y + moveY; // Wrap when width exceeds maxHeight or meet a `newline` group\n\n if (nextY > maxHeight || child.newline) {\n x += currentLineMaxSize + gap;\n y = 0;\n nextY = moveY;\n currentLineMaxSize = rect.width;\n } else {\n currentLineMaxSize = Math.max(currentLineMaxSize, rect.width);\n }\n }\n\n if (child.newline) {\n return;\n }\n\n position[0] = x;\n position[1] = y;\n orient === 'horizontal' ? x = nextX + gap : y = nextY + gap;\n });\n}\n/**\n * VBox or HBox layouting\n * @param {string} orient\n * @param {module:zrender/container/Group} group\n * @param {number} gap\n * @param {number} [width=Infinity]\n * @param {number} [height=Infinity]\n */\n\n\nvar box = boxLayout;\n/**\n * VBox layouting\n * @param {module:zrender/container/Group} group\n * @param {number} gap\n * @param {number} [width=Infinity]\n * @param {number} [height=Infinity]\n */\n\nvar vbox = zrUtil.curry(boxLayout, 'vertical');\n/**\n * HBox layouting\n * @param {module:zrender/container/Group} group\n * @param {number} gap\n * @param {number} [width=Infinity]\n * @param {number} [height=Infinity]\n */\n\nvar hbox = zrUtil.curry(boxLayout, 'horizontal');\n/**\n * If x or x2 is not specified or 'center' 'left' 'right',\n * the width would be as long as possible.\n * If y or y2 is not specified or 'middle' 'top' 'bottom',\n * the height would be as long as possible.\n *\n * @param {Object} positionInfo\n * @param {number|string} [positionInfo.x]\n * @param {number|string} [positionInfo.y]\n * @param {number|string} [positionInfo.x2]\n * @param {number|string} [positionInfo.y2]\n * @param {Object} containerRect {width, height}\n * @param {string|number} margin\n * @return {Object} {width, height}\n */\n\nfunction getAvailableSize(positionInfo, containerRect, margin) {\n var containerWidth = containerRect.width;\n var containerHeight = containerRect.height;\n var x = parsePercent(positionInfo.x, containerWidth);\n var y = parsePercent(positionInfo.y, containerHeight);\n var x2 = parsePercent(positionInfo.x2, containerWidth);\n var y2 = parsePercent(positionInfo.y2, containerHeight);\n (isNaN(x) || isNaN(parseFloat(positionInfo.x))) && (x = 0);\n (isNaN(x2) || isNaN(parseFloat(positionInfo.x2))) && (x2 = containerWidth);\n (isNaN(y) || isNaN(parseFloat(positionInfo.y))) && (y = 0);\n (isNaN(y2) || isNaN(parseFloat(positionInfo.y2))) && (y2 = containerHeight);\n margin = formatUtil.normalizeCssArray(margin || 0);\n return {\n width: Math.max(x2 - x - margin[1] - margin[3], 0),\n height: Math.max(y2 - y - margin[0] - margin[2], 0)\n };\n}\n/**\n * Parse position info.\n *\n * @param {Object} positionInfo\n * @param {number|string} [positionInfo.left]\n * @param {number|string} [positionInfo.top]\n * @param {number|string} [positionInfo.right]\n * @param {number|string} [positionInfo.bottom]\n * @param {number|string} [positionInfo.width]\n * @param {number|string} [positionInfo.height]\n * @param {number|string} [positionInfo.aspect] Aspect is width / height\n * @param {Object} containerRect\n * @param {string|number} [margin]\n *\n * @return {module:zrender/core/BoundingRect}\n */\n\n\nfunction getLayoutRect(positionInfo, containerRect, margin) {\n margin = formatUtil.normalizeCssArray(margin || 0);\n var containerWidth = containerRect.width;\n var containerHeight = containerRect.height;\n var left = parsePercent(positionInfo.left, containerWidth);\n var top = parsePercent(positionInfo.top, containerHeight);\n var right = parsePercent(positionInfo.right, containerWidth);\n var bottom = parsePercent(positionInfo.bottom, containerHeight);\n var width = parsePercent(positionInfo.width, containerWidth);\n var height = parsePercent(positionInfo.height, containerHeight);\n var verticalMargin = margin[2] + margin[0];\n var horizontalMargin = margin[1] + margin[3];\n var aspect = positionInfo.aspect; // If width is not specified, calculate width from left and right\n\n if (isNaN(width)) {\n width = containerWidth - right - horizontalMargin - left;\n }\n\n if (isNaN(height)) {\n height = containerHeight - bottom - verticalMargin - top;\n }\n\n if (aspect != null) {\n // If width and height are not given\n // 1. Graph should not exceeds the container\n // 2. Aspect must be keeped\n // 3. Graph should take the space as more as possible\n // FIXME\n // Margin is not considered, because there is no case that both\n // using margin and aspect so far.\n if (isNaN(width) && isNaN(height)) {\n if (aspect > containerWidth / containerHeight) {\n width = containerWidth * 0.8;\n } else {\n height = containerHeight * 0.8;\n }\n } // Calculate width or height with given aspect\n\n\n if (isNaN(width)) {\n width = aspect * height;\n }\n\n if (isNaN(height)) {\n height = width / aspect;\n }\n } // If left is not specified, calculate left from right and width\n\n\n if (isNaN(left)) {\n left = containerWidth - right - width - horizontalMargin;\n }\n\n if (isNaN(top)) {\n top = containerHeight - bottom - height - verticalMargin;\n } // Align left and top\n\n\n switch (positionInfo.left || positionInfo.right) {\n case 'center':\n left = containerWidth / 2 - width / 2 - margin[3];\n break;\n\n case 'right':\n left = containerWidth - width - horizontalMargin;\n break;\n }\n\n switch (positionInfo.top || positionInfo.bottom) {\n case 'middle':\n case 'center':\n top = containerHeight / 2 - height / 2 - margin[0];\n break;\n\n case 'bottom':\n top = containerHeight - height - verticalMargin;\n break;\n } // If something is wrong and left, top, width, height are calculated as NaN\n\n\n left = left || 0;\n top = top || 0;\n\n if (isNaN(width)) {\n // Width may be NaN if only one value is given except width\n width = containerWidth - horizontalMargin - left - (right || 0);\n }\n\n if (isNaN(height)) {\n // Height may be NaN if only one value is given except height\n height = containerHeight - verticalMargin - top - (bottom || 0);\n }\n\n var rect = new BoundingRect(left + margin[3], top + margin[0], width, height);\n rect.margin = margin;\n return rect;\n}\n/**\n * Position a zr element in viewport\n * Group position is specified by either\n * {left, top}, {right, bottom}\n * If all properties exists, right and bottom will be igonred.\n *\n * Logic:\n * 1. Scale (against origin point in parent coord)\n * 2. Rotate (against origin point in parent coord)\n * 3. Traslate (with el.position by this method)\n * So this method only fixes the last step 'Traslate', which does not affect\n * scaling and rotating.\n *\n * If be called repeatly with the same input el, the same result will be gotten.\n *\n * @param {module:zrender/Element} el Should have `getBoundingRect` method.\n * @param {Object} positionInfo\n * @param {number|string} [positionInfo.left]\n * @param {number|string} [positionInfo.top]\n * @param {number|string} [positionInfo.right]\n * @param {number|string} [positionInfo.bottom]\n * @param {number|string} [positionInfo.width] Only for opt.boundingModel: 'raw'\n * @param {number|string} [positionInfo.height] Only for opt.boundingModel: 'raw'\n * @param {Object} containerRect\n * @param {string|number} margin\n * @param {Object} [opt]\n * @param {Array.} [opt.hv=[1,1]] Only horizontal or only vertical.\n * @param {Array.} [opt.boundingMode='all']\n * Specify how to calculate boundingRect when locating.\n * 'all': Position the boundingRect that is transformed and uioned\n * both itself and its descendants.\n * This mode simplies confine the elements in the bounding\n * of their container (e.g., using 'right: 0').\n * 'raw': Position the boundingRect that is not transformed and only itself.\n * This mode is useful when you want a element can overflow its\n * container. (Consider a rotated circle needs to be located in a corner.)\n * In this mode positionInfo.width/height can only be number.\n */\n\n\nfunction positionElement(el, positionInfo, containerRect, margin, opt) {\n var h = !opt || !opt.hv || opt.hv[0];\n var v = !opt || !opt.hv || opt.hv[1];\n var boundingMode = opt && opt.boundingMode || 'all';\n\n if (!h && !v) {\n return;\n }\n\n var rect;\n\n if (boundingMode === 'raw') {\n rect = el.type === 'group' ? new BoundingRect(0, 0, +positionInfo.width || 0, +positionInfo.height || 0) : el.getBoundingRect();\n } else {\n rect = el.getBoundingRect();\n\n if (el.needLocalTransform()) {\n var transform = el.getLocalTransform(); // Notice: raw rect may be inner object of el,\n // which should not be modified.\n\n rect = rect.clone();\n rect.applyTransform(transform);\n }\n } // The real width and height can not be specified but calculated by the given el.\n\n\n positionInfo = getLayoutRect(zrUtil.defaults({\n width: rect.width,\n height: rect.height\n }, positionInfo), containerRect, margin); // Because 'tranlate' is the last step in transform\n // (see zrender/core/Transformable#getLocalTransfrom),\n // we can just only modify el.position to get final result.\n\n var elPos = el.position;\n var dx = h ? positionInfo.x - rect.x : 0;\n var dy = v ? positionInfo.y - rect.y : 0;\n el.attr('position', boundingMode === 'raw' ? [dx, dy] : [elPos[0] + dx, elPos[1] + dy]);\n}\n/**\n * @param {Object} option Contains some of the properties in HV_NAMES.\n * @param {number} hvIdx 0: horizontal; 1: vertical.\n */\n\n\nfunction sizeCalculable(option, hvIdx) {\n return option[HV_NAMES[hvIdx][0]] != null || option[HV_NAMES[hvIdx][1]] != null && option[HV_NAMES[hvIdx][2]] != null;\n}\n/**\n * Consider Case:\n * When defulat option has {left: 0, width: 100}, and we set {right: 0}\n * through setOption or media query, using normal zrUtil.merge will cause\n * {right: 0} does not take effect.\n *\n * @example\n * ComponentModel.extend({\n * init: function () {\n * ...\n * var inputPositionParams = layout.getLayoutParams(option);\n * this.mergeOption(inputPositionParams);\n * },\n * mergeOption: function (newOption) {\n * newOption && zrUtil.merge(thisOption, newOption, true);\n * layout.mergeLayoutParam(thisOption, newOption);\n * }\n * });\n *\n * @param {Object} targetOption\n * @param {Object} newOption\n * @param {Object|string} [opt]\n * @param {boolean|Array.} [opt.ignoreSize=false] Used for the components\n * that width (or height) should not be calculated by left and right (or top and bottom).\n */\n\n\nfunction mergeLayoutParam(targetOption, newOption, opt) {\n !zrUtil.isObject(opt) && (opt = {});\n var ignoreSize = opt.ignoreSize;\n !zrUtil.isArray(ignoreSize) && (ignoreSize = [ignoreSize, ignoreSize]);\n var hResult = merge(HV_NAMES[0], 0);\n var vResult = merge(HV_NAMES[1], 1);\n copy(HV_NAMES[0], targetOption, hResult);\n copy(HV_NAMES[1], targetOption, vResult);\n\n function merge(names, hvIdx) {\n var newParams = {};\n var newValueCount = 0;\n var merged = {};\n var mergedValueCount = 0;\n var enoughParamNumber = 2;\n each(names, function (name) {\n merged[name] = targetOption[name];\n });\n each(names, function (name) {\n // Consider case: newOption.width is null, which is\n // set by user for removing width setting.\n hasProp(newOption, name) && (newParams[name] = merged[name] = newOption[name]);\n hasValue(newParams, name) && newValueCount++;\n hasValue(merged, name) && mergedValueCount++;\n });\n\n if (ignoreSize[hvIdx]) {\n // Only one of left/right is premitted to exist.\n if (hasValue(newOption, names[1])) {\n merged[names[2]] = null;\n } else if (hasValue(newOption, names[2])) {\n merged[names[1]] = null;\n }\n\n return merged;\n } // Case: newOption: {width: ..., right: ...},\n // or targetOption: {right: ...} and newOption: {width: ...},\n // There is no conflict when merged only has params count\n // little than enoughParamNumber.\n\n\n if (mergedValueCount === enoughParamNumber || !newValueCount) {\n return merged;\n } // Case: newOption: {width: ..., right: ...},\n // Than we can make sure user only want those two, and ignore\n // all origin params in targetOption.\n else if (newValueCount >= enoughParamNumber) {\n return newParams;\n } else {\n // Chose another param from targetOption by priority.\n for (var i = 0; i < names.length; i++) {\n var name = names[i];\n\n if (!hasProp(newParams, name) && hasProp(targetOption, name)) {\n newParams[name] = targetOption[name];\n break;\n }\n }\n\n return newParams;\n }\n }\n\n function hasProp(obj, name) {\n return obj.hasOwnProperty(name);\n }\n\n function hasValue(obj, name) {\n return obj[name] != null && obj[name] !== 'auto';\n }\n\n function copy(names, target, source) {\n each(names, function (name) {\n target[name] = source[name];\n });\n }\n}\n/**\n * Retrieve 'left', 'right', 'top', 'bottom', 'width', 'height' from object.\n * @param {Object} source\n * @return {Object} Result contains those props.\n */\n\n\nfunction getLayoutParams(source) {\n return copyLayoutParams({}, source);\n}\n/**\n * Retrieve 'left', 'right', 'top', 'bottom', 'width', 'height' from object.\n * @param {Object} source\n * @return {Object} Result contains those props.\n */\n\n\nfunction copyLayoutParams(target, source) {\n source && target && each(LOCATION_PARAMS, function (name) {\n source.hasOwnProperty(name) && (target[name] = source[name]);\n });\n return target;\n}\n\nexports.LOCATION_PARAMS = LOCATION_PARAMS;\nexports.HV_NAMES = HV_NAMES;\nexports.box = box;\nexports.vbox = vbox;\nexports.hbox = hbox;\nexports.getAvailableSize = getAvailableSize;\nexports.getLayoutRect = getLayoutRect;\nexports.positionElement = positionElement;\nexports.sizeCalculable = sizeCalculable;\nexports.mergeLayoutParam = mergeLayoutParam;\nexports.getLayoutParams = getLayoutParams;\nexports.copyLayoutParams = copyLayoutParams;","var echarts = require(\"../echarts\");\n\nrequire(\"./boxplot/BoxplotSeries\");\n\nrequire(\"./boxplot/BoxplotView\");\n\nvar boxplotVisual = require(\"./boxplot/boxplotVisual\");\n\nvar boxplotLayout = require(\"./boxplot/boxplotLayout\");\n\necharts.registerVisual(boxplotVisual);\necharts.registerLayout(boxplotLayout);","var _util = require(\"zrender/lib/core/util\");\n\nvar retrieve = _util.retrieve;\nvar defaults = _util.defaults;\nvar extend = _util.extend;\nvar each = _util.each;\n\nvar formatUtil = require(\"../../util/format\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar Model = require(\"../../model/Model\");\n\nvar _number = require(\"../../util/number\");\n\nvar isRadianAroundZero = _number.isRadianAroundZero;\nvar remRadian = _number.remRadian;\n\nvar _symbol = require(\"../../util/symbol\");\n\nvar createSymbol = _symbol.createSymbol;\n\nvar matrixUtil = require(\"zrender/lib/core/matrix\");\n\nvar _vector = require(\"zrender/lib/core/vector\");\n\nvar v2ApplyTransform = _vector.applyTransform;\nvar PI = Math.PI;\n\nfunction makeAxisEventDataBase(axisModel) {\n var eventData = {\n componentType: axisModel.mainType\n };\n eventData[axisModel.mainType + 'Index'] = axisModel.componentIndex;\n return eventData;\n}\n/**\n * A final axis is translated and rotated from a \"standard axis\".\n * So opt.position and opt.rotation is required.\n *\n * A standard axis is and axis from [0, 0] to [0, axisExtent[1]],\n * for example: (0, 0) ------------> (0, 50)\n *\n * nameDirection or tickDirection or labelDirection is 1 means tick\n * or label is below the standard axis, whereas is -1 means above\n * the standard axis. labelOffset means offset between label and axis,\n * which is useful when 'onZero', where axisLabel is in the grid and\n * label in outside grid.\n *\n * Tips: like always,\n * positive rotation represents anticlockwise, and negative rotation\n * represents clockwise.\n * The direction of position coordinate is the same as the direction\n * of screen coordinate.\n *\n * Do not need to consider axis 'inverse', which is auto processed by\n * axis extent.\n *\n * @param {module:zrender/container/Group} group\n * @param {Object} axisModel\n * @param {Object} opt Standard axis parameters.\n * @param {Array.} opt.position [x, y]\n * @param {number} opt.rotation by radian\n * @param {number} [opt.nameDirection=1] 1 or -1 Used when nameLocation is 'middle' or 'center'.\n * @param {number} [opt.tickDirection=1] 1 or -1\n * @param {number} [opt.labelDirection=1] 1 or -1\n * @param {number} [opt.labelOffset=0] Usefull when onZero.\n * @param {string} [opt.axisLabelShow] default get from axisModel.\n * @param {string} [opt.axisName] default get from axisModel.\n * @param {number} [opt.axisNameAvailableWidth]\n * @param {number} [opt.labelRotate] by degree, default get from axisModel.\n * @param {number} [opt.labelInterval] Default label interval when label\n * interval from model is null or 'auto'.\n * @param {number} [opt.strokeContainThreshold] Default label interval when label\n * @param {number} [opt.nameTruncateMaxWidth]\n */\n\n\nvar AxisBuilder = function (axisModel, opt) {\n /**\n * @readOnly\n */\n this.opt = opt;\n /**\n * @readOnly\n */\n\n this.axisModel = axisModel; // Default value\n\n defaults(opt, {\n labelOffset: 0,\n nameDirection: 1,\n tickDirection: 1,\n labelDirection: 1,\n silent: true\n });\n /**\n * @readOnly\n */\n\n this.group = new graphic.Group(); // FIXME Not use a seperate text group?\n\n var dumbGroup = new graphic.Group({\n position: opt.position.slice(),\n rotation: opt.rotation\n }); // this.group.add(dumbGroup);\n // this._dumbGroup = dumbGroup;\n\n dumbGroup.updateTransform();\n this._transform = dumbGroup.transform;\n this._dumbGroup = dumbGroup;\n};\n\nAxisBuilder.prototype = {\n constructor: AxisBuilder,\n hasBuilder: function (name) {\n return !!builders[name];\n },\n add: function (name) {\n builders[name].call(this);\n },\n getGroup: function () {\n return this.group;\n }\n};\nvar builders = {\n /**\n * @private\n */\n axisLine: function () {\n var opt = this.opt;\n var axisModel = this.axisModel;\n\n if (!axisModel.get('axisLine.show')) {\n return;\n }\n\n var extent = this.axisModel.axis.getExtent();\n var matrix = this._transform;\n var pt1 = [extent[0], 0];\n var pt2 = [extent[1], 0];\n\n if (matrix) {\n v2ApplyTransform(pt1, pt1, matrix);\n v2ApplyTransform(pt2, pt2, matrix);\n }\n\n var lineStyle = extend({\n lineCap: 'round'\n }, axisModel.getModel('axisLine.lineStyle').getLineStyle());\n this.group.add(new graphic.Line(graphic.subPixelOptimizeLine({\n // Id for animation\n anid: 'line',\n shape: {\n x1: pt1[0],\n y1: pt1[1],\n x2: pt2[0],\n y2: pt2[1]\n },\n style: lineStyle,\n strokeContainThreshold: opt.strokeContainThreshold || 5,\n silent: true,\n z2: 1\n })));\n var arrows = axisModel.get('axisLine.symbol');\n var arrowSize = axisModel.get('axisLine.symbolSize');\n\n if (arrows != null) {\n if (typeof arrows === 'string') {\n // Use the same arrow for start and end point\n arrows = [arrows, arrows];\n }\n\n if (typeof arrowSize === 'string' || typeof arrowSize === 'number') {\n // Use the same size for width and height\n arrowSize = [arrowSize, arrowSize];\n }\n\n var symbolWidth = arrowSize[0];\n var symbolHeight = arrowSize[1];\n each([[opt.rotation + Math.PI / 2, pt1], [opt.rotation - Math.PI / 2, pt2]], function (item, index) {\n if (arrows[index] !== 'none' && arrows[index] != null) {\n var symbol = createSymbol(arrows[index], -symbolWidth / 2, -symbolHeight / 2, symbolWidth, symbolHeight, lineStyle.stroke, true);\n symbol.attr({\n rotation: item[0],\n position: item[1],\n silent: true\n });\n this.group.add(symbol);\n }\n }, this);\n }\n },\n\n /**\n * @private\n */\n axisTickLabel: function () {\n var axisModel = this.axisModel;\n var opt = this.opt;\n var tickEls = buildAxisTick(this, axisModel, opt);\n var labelEls = buildAxisLabel(this, axisModel, opt);\n fixMinMaxLabelShow(axisModel, labelEls, tickEls);\n },\n\n /**\n * @private\n */\n axisName: function () {\n var opt = this.opt;\n var axisModel = this.axisModel;\n var name = retrieve(opt.axisName, axisModel.get('name'));\n\n if (!name) {\n return;\n }\n\n var nameLocation = axisModel.get('nameLocation');\n var nameDirection = opt.nameDirection;\n var textStyleModel = axisModel.getModel('nameTextStyle');\n var gap = axisModel.get('nameGap') || 0;\n var extent = this.axisModel.axis.getExtent();\n var gapSignal = extent[0] > extent[1] ? -1 : 1;\n var pos = [nameLocation === 'start' ? extent[0] - gapSignal * gap : nameLocation === 'end' ? extent[1] + gapSignal * gap : (extent[0] + extent[1]) / 2, // 'middle'\n // Reuse labelOffset.\n isNameLocationCenter(nameLocation) ? opt.labelOffset + nameDirection * gap : 0];\n var labelLayout;\n var nameRotation = axisModel.get('nameRotate');\n\n if (nameRotation != null) {\n nameRotation = nameRotation * PI / 180; // To radian.\n }\n\n var axisNameAvailableWidth;\n\n if (isNameLocationCenter(nameLocation)) {\n labelLayout = innerTextLayout(opt.rotation, nameRotation != null ? nameRotation : opt.rotation, // Adapt to axis.\n nameDirection);\n } else {\n labelLayout = endTextLayout(opt, nameLocation, nameRotation || 0, extent);\n axisNameAvailableWidth = opt.axisNameAvailableWidth;\n\n if (axisNameAvailableWidth != null) {\n axisNameAvailableWidth = Math.abs(axisNameAvailableWidth / Math.sin(labelLayout.rotation));\n !isFinite(axisNameAvailableWidth) && (axisNameAvailableWidth = null);\n }\n }\n\n var textFont = textStyleModel.getFont();\n var truncateOpt = axisModel.get('nameTruncate', true) || {};\n var ellipsis = truncateOpt.ellipsis;\n var maxWidth = retrieve(opt.nameTruncateMaxWidth, truncateOpt.maxWidth, axisNameAvailableWidth); // FIXME\n // truncate rich text? (consider performance)\n\n var truncatedText = ellipsis != null && maxWidth != null ? formatUtil.truncateText(name, maxWidth, textFont, ellipsis, {\n minChar: 2,\n placeholder: truncateOpt.placeholder\n }) : name;\n var tooltipOpt = axisModel.get('tooltip', true);\n var mainType = axisModel.mainType;\n var formatterParams = {\n componentType: mainType,\n name: name,\n $vars: ['name']\n };\n formatterParams[mainType + 'Index'] = axisModel.componentIndex;\n var textEl = new graphic.Text({\n // Id for animation\n anid: 'name',\n __fullText: name,\n __truncatedText: truncatedText,\n position: pos,\n rotation: labelLayout.rotation,\n silent: isSilent(axisModel),\n z2: 1,\n tooltip: tooltipOpt && tooltipOpt.show ? extend({\n content: name,\n formatter: function () {\n return name;\n },\n formatterParams: formatterParams\n }, tooltipOpt) : null\n });\n graphic.setTextStyle(textEl.style, textStyleModel, {\n text: truncatedText,\n textFont: textFont,\n textFill: textStyleModel.getTextColor() || axisModel.get('axisLine.lineStyle.color'),\n textAlign: labelLayout.textAlign,\n textVerticalAlign: labelLayout.textVerticalAlign\n });\n\n if (axisModel.get('triggerEvent')) {\n textEl.eventData = makeAxisEventDataBase(axisModel);\n textEl.eventData.targetType = 'axisName';\n textEl.eventData.name = name;\n } // FIXME\n\n\n this._dumbGroup.add(textEl);\n\n textEl.updateTransform();\n this.group.add(textEl);\n textEl.decomposeTransform();\n }\n};\n/**\n * @public\n * @static\n * @param {Object} opt\n * @param {number} axisRotation in radian\n * @param {number} textRotation in radian\n * @param {number} direction\n * @return {Object} {\n * rotation, // according to axis\n * textAlign,\n * textVerticalAlign\n * }\n */\n\nvar innerTextLayout = AxisBuilder.innerTextLayout = function (axisRotation, textRotation, direction) {\n var rotationDiff = remRadian(textRotation - axisRotation);\n var textAlign;\n var textVerticalAlign;\n\n if (isRadianAroundZero(rotationDiff)) {\n // Label is parallel with axis line.\n textVerticalAlign = direction > 0 ? 'top' : 'bottom';\n textAlign = 'center';\n } else if (isRadianAroundZero(rotationDiff - PI)) {\n // Label is inverse parallel with axis line.\n textVerticalAlign = direction > 0 ? 'bottom' : 'top';\n textAlign = 'center';\n } else {\n textVerticalAlign = 'middle';\n\n if (rotationDiff > 0 && rotationDiff < PI) {\n textAlign = direction > 0 ? 'right' : 'left';\n } else {\n textAlign = direction > 0 ? 'left' : 'right';\n }\n }\n\n return {\n rotation: rotationDiff,\n textAlign: textAlign,\n textVerticalAlign: textVerticalAlign\n };\n};\n\nfunction endTextLayout(opt, textPosition, textRotate, extent) {\n var rotationDiff = remRadian(textRotate - opt.rotation);\n var textAlign;\n var textVerticalAlign;\n var inverse = extent[0] > extent[1];\n var onLeft = textPosition === 'start' && !inverse || textPosition !== 'start' && inverse;\n\n if (isRadianAroundZero(rotationDiff - PI / 2)) {\n textVerticalAlign = onLeft ? 'bottom' : 'top';\n textAlign = 'center';\n } else if (isRadianAroundZero(rotationDiff - PI * 1.5)) {\n textVerticalAlign = onLeft ? 'top' : 'bottom';\n textAlign = 'center';\n } else {\n textVerticalAlign = 'middle';\n\n if (rotationDiff < PI * 1.5 && rotationDiff > PI / 2) {\n textAlign = onLeft ? 'left' : 'right';\n } else {\n textAlign = onLeft ? 'right' : 'left';\n }\n }\n\n return {\n rotation: rotationDiff,\n textAlign: textAlign,\n textVerticalAlign: textVerticalAlign\n };\n}\n\nfunction isSilent(axisModel) {\n var tooltipOpt = axisModel.get('tooltip');\n return axisModel.get('silent') // Consider mouse cursor, add these restrictions.\n || !(axisModel.get('triggerEvent') || tooltipOpt && tooltipOpt.show);\n}\n\nfunction fixMinMaxLabelShow(axisModel, labelEls, tickEls) {\n // If min or max are user set, we need to check\n // If the tick on min(max) are overlap on their neighbour tick\n // If they are overlapped, we need to hide the min(max) tick label\n var showMinLabel = axisModel.get('axisLabel.showMinLabel');\n var showMaxLabel = axisModel.get('axisLabel.showMaxLabel'); // FIXME\n // Have not consider onBand yet, where tick els is more than label els.\n\n labelEls = labelEls || [];\n tickEls = tickEls || [];\n var firstLabel = labelEls[0];\n var nextLabel = labelEls[1];\n var lastLabel = labelEls[labelEls.length - 1];\n var prevLabel = labelEls[labelEls.length - 2];\n var firstTick = tickEls[0];\n var nextTick = tickEls[1];\n var lastTick = tickEls[tickEls.length - 1];\n var prevTick = tickEls[tickEls.length - 2];\n\n if (showMinLabel === false) {\n ignoreEl(firstLabel);\n ignoreEl(firstTick);\n } else if (isTwoLabelOverlapped(firstLabel, nextLabel)) {\n if (showMinLabel) {\n ignoreEl(nextLabel);\n ignoreEl(nextTick);\n } else {\n ignoreEl(firstLabel);\n ignoreEl(firstTick);\n }\n }\n\n if (showMaxLabel === false) {\n ignoreEl(lastLabel);\n ignoreEl(lastTick);\n } else if (isTwoLabelOverlapped(prevLabel, lastLabel)) {\n if (showMaxLabel) {\n ignoreEl(prevLabel);\n ignoreEl(prevTick);\n } else {\n ignoreEl(lastLabel);\n ignoreEl(lastTick);\n }\n }\n}\n\nfunction ignoreEl(el) {\n el && (el.ignore = true);\n}\n\nfunction isTwoLabelOverlapped(current, next, labelLayout) {\n // current and next has the same rotation.\n var firstRect = current && current.getBoundingRect().clone();\n var nextRect = next && next.getBoundingRect().clone();\n\n if (!firstRect || !nextRect) {\n return;\n } // When checking intersect of two rotated labels, we use mRotationBack\n // to avoid that boundingRect is enlarge when using `boundingRect.applyTransform`.\n\n\n var mRotationBack = matrixUtil.identity([]);\n matrixUtil.rotate(mRotationBack, mRotationBack, -current.rotation);\n firstRect.applyTransform(matrixUtil.mul([], mRotationBack, current.getLocalTransform()));\n nextRect.applyTransform(matrixUtil.mul([], mRotationBack, next.getLocalTransform()));\n return firstRect.intersect(nextRect);\n}\n\nfunction isNameLocationCenter(nameLocation) {\n return nameLocation === 'middle' || nameLocation === 'center';\n}\n/**\n * @static\n */\n\n\nvar ifIgnoreOnTick = AxisBuilder.ifIgnoreOnTick = function (axis, i, interval, ticksCnt, showMinLabel, showMaxLabel) {\n if (i === 0 && showMinLabel || i === ticksCnt - 1 && showMaxLabel) {\n return false;\n } // FIXME\n // Have not consider label overlap (if label is too long) yet.\n\n\n var rawTick;\n var scale = axis.scale;\n return scale.type === 'ordinal' && (typeof interval === 'function' ? (rawTick = scale.getTicks()[i], !interval(rawTick, scale.getLabel(rawTick))) : i % (interval + 1));\n};\n/**\n * @static\n */\n\n\nvar getInterval = AxisBuilder.getInterval = function (model, labelInterval) {\n var interval = model.get('interval');\n\n if (interval == null || interval == 'auto') {\n interval = labelInterval;\n }\n\n return interval;\n};\n\nfunction buildAxisTick(axisBuilder, axisModel, opt) {\n var axis = axisModel.axis;\n\n if (!axisModel.get('axisTick.show') || axis.scale.isBlank()) {\n return;\n }\n\n var tickModel = axisModel.getModel('axisTick');\n var lineStyleModel = tickModel.getModel('lineStyle');\n var tickLen = tickModel.get('length');\n var tickInterval = getInterval(tickModel, opt.labelInterval);\n var ticksCoords = axis.getTicksCoords(tickModel.get('alignWithLabel')); // FIXME\n // Corresponds to ticksCoords ?\n\n var ticks = axis.scale.getTicks();\n var showMinLabel = axisModel.get('axisLabel.showMinLabel');\n var showMaxLabel = axisModel.get('axisLabel.showMaxLabel');\n var pt1 = [];\n var pt2 = [];\n var matrix = axisBuilder._transform;\n var tickEls = [];\n var ticksCnt = ticksCoords.length;\n\n for (var i = 0; i < ticksCnt; i++) {\n // Only ordinal scale support tick interval\n if (ifIgnoreOnTick(axis, i, tickInterval, ticksCnt, showMinLabel, showMaxLabel)) {\n continue;\n }\n\n var tickCoord = ticksCoords[i];\n pt1[0] = tickCoord;\n pt1[1] = 0;\n pt2[0] = tickCoord;\n pt2[1] = opt.tickDirection * tickLen;\n\n if (matrix) {\n v2ApplyTransform(pt1, pt1, matrix);\n v2ApplyTransform(pt2, pt2, matrix);\n } // Tick line, Not use group transform to have better line draw\n\n\n var tickEl = new graphic.Line(graphic.subPixelOptimizeLine({\n // Id for animation\n anid: 'tick_' + ticks[i],\n shape: {\n x1: pt1[0],\n y1: pt1[1],\n x2: pt2[0],\n y2: pt2[1]\n },\n style: defaults(lineStyleModel.getLineStyle(), {\n stroke: axisModel.get('axisLine.lineStyle.color')\n }),\n z2: 2,\n silent: true\n }));\n axisBuilder.group.add(tickEl);\n tickEls.push(tickEl);\n }\n\n return tickEls;\n}\n\nfunction buildAxisLabel(axisBuilder, axisModel, opt) {\n var axis = axisModel.axis;\n var show = retrieve(opt.axisLabelShow, axisModel.get('axisLabel.show'));\n\n if (!show || axis.scale.isBlank()) {\n return;\n }\n\n var labelModel = axisModel.getModel('axisLabel');\n var labelMargin = labelModel.get('margin');\n var ticks = axis.scale.getTicks();\n var labels = axisModel.getFormattedLabels(); // Special label rotate.\n\n var labelRotation = (retrieve(opt.labelRotate, labelModel.get('rotate')) || 0) * PI / 180;\n var labelLayout = innerTextLayout(opt.rotation, labelRotation, opt.labelDirection);\n var categoryData = axisModel.get('data');\n var labelEls = [];\n var silent = isSilent(axisModel);\n var triggerEvent = axisModel.get('triggerEvent');\n var showMinLabel = axisModel.get('axisLabel.showMinLabel');\n var showMaxLabel = axisModel.get('axisLabel.showMaxLabel');\n each(ticks, function (tickVal, index) {\n if (ifIgnoreOnTick(axis, index, opt.labelInterval, ticks.length, showMinLabel, showMaxLabel)) {\n return;\n }\n\n var itemLabelModel = labelModel;\n\n if (categoryData && categoryData[tickVal] && categoryData[tickVal].textStyle) {\n itemLabelModel = new Model(categoryData[tickVal].textStyle, labelModel, axisModel.ecModel);\n }\n\n var textColor = itemLabelModel.getTextColor() || axisModel.get('axisLine.lineStyle.color');\n var tickCoord = axis.dataToCoord(tickVal);\n var pos = [tickCoord, opt.labelOffset + opt.labelDirection * labelMargin];\n var labelStr = axis.scale.getLabel(tickVal);\n var textEl = new graphic.Text({\n // Id for animation\n anid: 'label_' + tickVal,\n position: pos,\n rotation: labelLayout.rotation,\n silent: silent,\n z2: 10\n });\n graphic.setTextStyle(textEl.style, itemLabelModel, {\n text: labels[index],\n textAlign: itemLabelModel.getShallow('align', true) || labelLayout.textAlign,\n textVerticalAlign: itemLabelModel.getShallow('verticalAlign', true) || itemLabelModel.getShallow('baseline', true) || labelLayout.textVerticalAlign,\n textFill: typeof textColor === 'function' ? textColor( // (1) In category axis with data zoom, tick is not the original\n // index of axis.data. So tick should not be exposed to user\n // in category axis.\n // (2) Compatible with previous version, which always returns labelStr.\n // But in interval scale labelStr is like '223,445', which maked\n // user repalce ','. So we modify it to return original val but remain\n // it as 'string' to avoid error in replacing.\n axis.type === 'category' ? labelStr : axis.type === 'value' ? tickVal + '' : tickVal, index) : textColor\n }); // Pack data for mouse event\n\n if (triggerEvent) {\n textEl.eventData = makeAxisEventDataBase(axisModel);\n textEl.eventData.targetType = 'axisLabel';\n textEl.eventData.value = labelStr;\n } // FIXME\n\n\n axisBuilder._dumbGroup.add(textEl);\n\n textEl.updateTransform();\n labelEls.push(textEl);\n axisBuilder.group.add(textEl);\n textEl.decomposeTransform();\n });\n return labelEls;\n}\n\nvar _default = AxisBuilder;\nmodule.exports = _default;","var _traversalHelper = require(\"./traversalHelper\");\n\nvar eachAfter = _traversalHelper.eachAfter;\nvar eachBefore = _traversalHelper.eachBefore;\n\nvar _layoutHelper = require(\"./layoutHelper\");\n\nvar init = _layoutHelper.init;\nvar firstWalk = _layoutHelper.firstWalk;\nvar secondWalk = _layoutHelper.secondWalk;\nvar sep = _layoutHelper.separation;\nvar radialCoordinate = _layoutHelper.radialCoordinate;\nvar getViewRect = _layoutHelper.getViewRect;\n\nfunction _default(seriesModel, api) {\n var layoutInfo = getViewRect(seriesModel, api);\n seriesModel.layoutInfo = layoutInfo;\n var layout = seriesModel.get('layout');\n var width = 0;\n var height = 0;\n var separation = null;\n\n if (layout === 'radial') {\n width = 2 * Math.PI;\n height = Math.min(layoutInfo.height, layoutInfo.width) / 2;\n separation = sep(function (node1, node2) {\n return (node1.parentNode === node2.parentNode ? 1 : 2) / node1.depth;\n });\n } else {\n width = layoutInfo.width;\n height = layoutInfo.height;\n separation = sep();\n }\n\n var virtualRoot = seriesModel.getData().tree.root;\n var realRoot = virtualRoot.children[0];\n init(virtualRoot);\n eachAfter(realRoot, firstWalk, separation);\n virtualRoot.hierNode.modifier = -realRoot.hierNode.prelim;\n eachBefore(realRoot, secondWalk);\n var left = realRoot;\n var right = realRoot;\n var bottom = realRoot;\n eachBefore(realRoot, function (node) {\n var x = node.getLayout().x;\n\n if (x < left.getLayout().x) {\n left = node;\n }\n\n if (x > right.getLayout().x) {\n right = node;\n }\n\n if (node.depth > bottom.depth) {\n bottom = node;\n }\n });\n var delta = left === right ? 1 : separation(left, right) / 2;\n var tx = delta - left.getLayout().x;\n var kx = 0;\n var ky = 0;\n var coorX = 0;\n var coorY = 0;\n\n if (layout === 'radial') {\n kx = width / (right.getLayout().x + delta + tx); // here we use (node.depth - 1), bucause the real root's depth is 1\n\n ky = height / (bottom.depth - 1 || 1);\n eachBefore(realRoot, function (node) {\n coorX = (node.getLayout().x + tx) * kx;\n coorY = (node.depth - 1) * ky;\n var finalCoor = radialCoordinate(coorX, coorY);\n node.setLayout({\n x: finalCoor.x,\n y: finalCoor.y,\n rawX: coorX,\n rawY: coorY\n }, true);\n });\n } else {\n if (seriesModel.get('orient') === 'horizontal') {\n ky = height / (right.getLayout().x + delta + tx);\n kx = width / (bottom.depth - 1 || 1);\n eachBefore(realRoot, function (node) {\n coorY = (node.getLayout().x + tx) * ky;\n coorX = (node.depth - 1) * kx;\n node.setLayout({\n x: coorX,\n y: coorY\n }, true);\n });\n } else {\n kx = width / (right.getLayout().x + delta + tx);\n ky = height / (bottom.depth - 1 || 1);\n eachBefore(realRoot, function (node) {\n coorX = (node.getLayout().x + tx) * kx;\n coorY = (node.depth - 1) * ky;\n node.setLayout({\n x: coorX,\n y: coorY\n }, true);\n });\n }\n }\n}\n\nmodule.exports = _default;","var _util = require(\"zrender/lib/core/util\");\n\nvar each = _util.each;\nvar isArray = _util.isArray;\nvar isObject = _util.isObject;\n\nvar compatStyle = require(\"./helper/compatStyle\");\n\nvar _model = require(\"../util/model\");\n\nvar normalizeToArray = _model.normalizeToArray;\n\n// Compatitable with 2.0\nfunction get(opt, path) {\n path = path.split(',');\n var obj = opt;\n\n for (var i = 0; i < path.length; i++) {\n obj = obj && obj[path[i]];\n\n if (obj == null) {\n break;\n }\n }\n\n return obj;\n}\n\nfunction set(opt, path, val, overwrite) {\n path = path.split(',');\n var obj = opt;\n var key;\n\n for (var i = 0; i < path.length - 1; i++) {\n key = path[i];\n\n if (obj[key] == null) {\n obj[key] = {};\n }\n\n obj = obj[key];\n }\n\n if (overwrite || obj[path[i]] == null) {\n obj[path[i]] = val;\n }\n}\n\nfunction compatLayoutProperties(option) {\n each(LAYOUT_PROPERTIES, function (prop) {\n if (prop[0] in option && !(prop[1] in option)) {\n option[prop[1]] = option[prop[0]];\n }\n });\n}\n\nvar LAYOUT_PROPERTIES = [['x', 'left'], ['y', 'top'], ['x2', 'right'], ['y2', 'bottom']];\nvar COMPATITABLE_COMPONENTS = ['grid', 'geo', 'parallel', 'legend', 'toolbox', 'title', 'visualMap', 'dataZoom', 'timeline'];\nvar COMPATITABLE_SERIES = ['bar', 'boxplot', 'candlestick', 'chord', 'effectScatter', 'funnel', 'gauge', 'lines', 'graph', 'heatmap', 'line', 'map', 'parallel', 'pie', 'radar', 'sankey', 'scatter', 'treemap'];\n\nfunction _default(option, isTheme) {\n compatStyle(option, isTheme); // Make sure series array for model initialization.\n\n option.series = normalizeToArray(option.series);\n each(option.series, function (seriesOpt) {\n if (!isObject(seriesOpt)) {\n return;\n }\n\n var seriesType = seriesOpt.type;\n\n if (seriesType === 'pie' || seriesType === 'gauge') {\n if (seriesOpt.clockWise != null) {\n seriesOpt.clockwise = seriesOpt.clockWise;\n }\n }\n\n if (seriesType === 'gauge') {\n var pointerColor = get(seriesOpt, 'pointer.color');\n pointerColor != null && set(seriesOpt, 'itemStyle.normal.color', pointerColor);\n }\n\n for (var i = 0; i < COMPATITABLE_SERIES.length; i++) {\n if (COMPATITABLE_SERIES[i] === seriesOpt.type) {\n compatLayoutProperties(seriesOpt);\n break;\n }\n }\n }); // dataRange has changed to visualMap\n\n if (option.dataRange) {\n option.visualMap = option.dataRange;\n }\n\n each(COMPATITABLE_COMPONENTS, function (componentName) {\n var options = option[componentName];\n\n if (options) {\n if (!isArray(options)) {\n options = [options];\n }\n\n each(options, function (option) {\n compatLayoutProperties(option);\n });\n }\n });\n}\n\nmodule.exports = _default;","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./GSJJ.vue?vue&type=style&index=0&id=5b28151e&lang=scss&scoped=true\"","var _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar Eventful = require(\"zrender/lib/mixin/Eventful\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar interactionMutex = require(\"./interactionMutex\");\n\nvar DataDiffer = require(\"../../data/DataDiffer\");\n\nvar curry = zrUtil.curry;\nvar each = zrUtil.each;\nvar map = zrUtil.map;\nvar mathMin = Math.min;\nvar mathMax = Math.max;\nvar mathPow = Math.pow;\nvar COVER_Z = 10000;\nvar UNSELECT_THRESHOLD = 6;\nvar MIN_RESIZE_LINE_WIDTH = 6;\nvar MUTEX_RESOURCE_KEY = 'globalPan';\nvar DIRECTION_MAP = {\n w: [0, 0],\n e: [0, 1],\n n: [1, 0],\n s: [1, 1]\n};\nvar CURSOR_MAP = {\n w: 'ew',\n e: 'ew',\n n: 'ns',\n s: 'ns',\n ne: 'nesw',\n sw: 'nesw',\n nw: 'nwse',\n se: 'nwse'\n};\nvar DEFAULT_BRUSH_OPT = {\n brushStyle: {\n lineWidth: 2,\n stroke: 'rgba(0,0,0,0.3)',\n fill: 'rgba(0,0,0,0.1)'\n },\n transformable: true,\n brushMode: 'single',\n removeOnClick: false\n};\nvar baseUID = 0;\n/**\n * @alias module:echarts/component/helper/BrushController\n * @constructor\n * @mixin {module:zrender/mixin/Eventful}\n * @event module:echarts/component/helper/BrushController#brush\n * params:\n * areas: Array., coord relates to container group,\n * If no container specified, to global.\n * opt {\n * isEnd: boolean,\n * removeOnClick: boolean\n * }\n *\n * @param {module:zrender/zrender~ZRender} zr\n */\n\nfunction BrushController(zr) {\n Eventful.call(this);\n /**\n * @type {module:zrender/zrender~ZRender}\n * @private\n */\n\n this._zr = zr;\n /**\n * @type {module:zrender/container/Group}\n * @readOnly\n */\n\n this.group = new graphic.Group();\n /**\n * Only for drawing (after enabledBrush).\n * 'line', 'rect', 'polygon' or false\n * If passing false/null/undefined, disable brush.\n * If passing 'auto', determined by panel.defaultBrushType\n * @private\n * @type {string}\n */\n\n this._brushType;\n /**\n * Only for drawing (after enabledBrush).\n *\n * @private\n * @type {Object}\n */\n\n this._brushOption;\n /**\n * @private\n * @type {Object}\n */\n\n this._panels;\n /**\n * @private\n * @type {Array.}\n */\n\n this._track = [];\n /**\n * @private\n * @type {boolean}\n */\n\n this._dragging;\n /**\n * @private\n * @type {Array}\n */\n\n this._covers = [];\n /**\n * @private\n * @type {moudule:zrender/container/Group}\n */\n\n this._creatingCover;\n /**\n * `true` means global panel\n * @private\n * @type {module:zrender/container/Group|boolean}\n */\n\n this._creatingPanel;\n /**\n * @private\n * @type {boolean}\n */\n\n this._enableGlobalPan;\n /**\n * @private\n * @type {boolean}\n */\n\n /**\n * @private\n * @type {string}\n */\n this._uid = 'brushController_' + baseUID++;\n /**\n * @private\n * @type {Object}\n */\n\n this._handlers = {};\n each(mouseHandlers, function (handler, eventName) {\n this._handlers[eventName] = zrUtil.bind(handler, this);\n }, this);\n}\n\nBrushController.prototype = {\n constructor: BrushController,\n\n /**\n * If set to null/undefined/false, select disabled.\n * @param {Object} brushOption\n * @param {string|boolean} brushOption.brushType 'line', 'rect', 'polygon' or false\n * If passing false/null/undefined, disable brush.\n * If passing 'auto', determined by panel.defaultBrushType.\n * ('auto' can not be used in global panel)\n * @param {number} [brushOption.brushMode='single'] 'single' or 'multiple'\n * @param {boolean} [brushOption.transformable=true]\n * @param {boolean} [brushOption.removeOnClick=false]\n * @param {Object} [brushOption.brushStyle]\n * @param {number} [brushOption.brushStyle.width]\n * @param {number} [brushOption.brushStyle.lineWidth]\n * @param {string} [brushOption.brushStyle.stroke]\n * @param {string} [brushOption.brushStyle.fill]\n * @param {number} [brushOption.z]\n */\n enableBrush: function (brushOption) {\n this._brushType && doDisableBrush(this);\n brushOption.brushType && doEnableBrush(this, brushOption);\n return this;\n },\n\n /**\n * @param {Array.} panelOpts If not pass, it is global brush.\n * Each items: {\n * panelId, // mandatory.\n * clipPath, // mandatory. function.\n * isTargetByCursor, // mandatory. function.\n * defaultBrushType, // optional, only used when brushType is 'auto'.\n * getLinearBrushOtherExtent, // optional. function.\n * }\n */\n setPanels: function (panelOpts) {\n if (panelOpts && panelOpts.length) {\n var panels = this._panels = {};\n zrUtil.each(panelOpts, function (panelOpts) {\n panels[panelOpts.panelId] = zrUtil.clone(panelOpts);\n });\n } else {\n this._panels = null;\n }\n\n return this;\n },\n\n /**\n * @param {Object} [opt]\n * @return {boolean} [opt.enableGlobalPan=false]\n */\n mount: function (opt) {\n opt = opt || {};\n this._enableGlobalPan = opt.enableGlobalPan;\n var thisGroup = this.group;\n\n this._zr.add(thisGroup);\n\n thisGroup.attr({\n position: opt.position || [0, 0],\n rotation: opt.rotation || 0,\n scale: opt.scale || [1, 1]\n });\n this._transform = thisGroup.getLocalTransform();\n return this;\n },\n eachCover: function (cb, context) {\n each(this._covers, cb, context);\n },\n\n /**\n * Update covers.\n * @param {Array.} brushOptionList Like:\n * [\n * {id: 'xx', brushType: 'line', range: [23, 44], brushStyle, transformable},\n * {id: 'yy', brushType: 'rect', range: [[23, 44], [23, 54]]},\n * ...\n * ]\n * `brushType` is required in each cover info. (can not be 'auto')\n * `id` is not mandatory.\n * `brushStyle`, `transformable` is not mandatory, use DEFAULT_BRUSH_OPT by default.\n * If brushOptionList is null/undefined, all covers removed.\n */\n updateCovers: function (brushOptionList) {\n brushOptionList = zrUtil.map(brushOptionList, function (brushOption) {\n return zrUtil.merge(zrUtil.clone(DEFAULT_BRUSH_OPT), brushOption, true);\n });\n var tmpIdPrefix = '\\0-brush-index-';\n var oldCovers = this._covers;\n var newCovers = this._covers = [];\n var controller = this;\n var creatingCover = this._creatingCover;\n new DataDiffer(oldCovers, brushOptionList, oldGetKey, getKey).add(addOrUpdate).update(addOrUpdate).remove(remove).execute();\n return this;\n\n function getKey(brushOption, index) {\n return (brushOption.id != null ? brushOption.id : tmpIdPrefix + index) + '-' + brushOption.brushType;\n }\n\n function oldGetKey(cover, index) {\n return getKey(cover.__brushOption, index);\n }\n\n function addOrUpdate(newIndex, oldIndex) {\n var newBrushOption = brushOptionList[newIndex]; // Consider setOption in event listener of brushSelect,\n // where updating cover when creating should be forbiden.\n\n if (oldIndex != null && oldCovers[oldIndex] === creatingCover) {\n newCovers[newIndex] = oldCovers[oldIndex];\n } else {\n var cover = newCovers[newIndex] = oldIndex != null ? (oldCovers[oldIndex].__brushOption = newBrushOption, oldCovers[oldIndex]) : endCreating(controller, createCover(controller, newBrushOption));\n updateCoverAfterCreation(controller, cover);\n }\n }\n\n function remove(oldIndex) {\n if (oldCovers[oldIndex] !== creatingCover) {\n controller.group.remove(oldCovers[oldIndex]);\n }\n }\n },\n unmount: function () {\n this.enableBrush(false); // container may 'removeAll' outside.\n\n clearCovers(this);\n\n this._zr.remove(this.group);\n\n return this;\n },\n dispose: function () {\n this.unmount();\n this.off();\n }\n};\nzrUtil.mixin(BrushController, Eventful);\n\nfunction doEnableBrush(controller, brushOption) {\n var zr = controller._zr; // Consider roam, which takes globalPan too.\n\n if (!controller._enableGlobalPan) {\n interactionMutex.take(zr, MUTEX_RESOURCE_KEY, controller._uid);\n }\n\n each(controller._handlers, function (handler, eventName) {\n zr.on(eventName, handler);\n });\n controller._brushType = brushOption.brushType;\n controller._brushOption = zrUtil.merge(zrUtil.clone(DEFAULT_BRUSH_OPT), brushOption, true);\n}\n\nfunction doDisableBrush(controller) {\n var zr = controller._zr;\n interactionMutex.release(zr, MUTEX_RESOURCE_KEY, controller._uid);\n each(controller._handlers, function (handler, eventName) {\n zr.off(eventName, handler);\n });\n controller._brushType = controller._brushOption = null;\n}\n\nfunction createCover(controller, brushOption) {\n var cover = coverRenderers[brushOption.brushType].createCover(controller, brushOption);\n cover.__brushOption = brushOption;\n updateZ(cover, brushOption);\n controller.group.add(cover);\n return cover;\n}\n\nfunction endCreating(controller, creatingCover) {\n var coverRenderer = getCoverRenderer(creatingCover);\n\n if (coverRenderer.endCreating) {\n coverRenderer.endCreating(controller, creatingCover);\n updateZ(creatingCover, creatingCover.__brushOption);\n }\n\n return creatingCover;\n}\n\nfunction updateCoverShape(controller, cover) {\n var brushOption = cover.__brushOption;\n getCoverRenderer(cover).updateCoverShape(controller, cover, brushOption.range, brushOption);\n}\n\nfunction updateZ(cover, brushOption) {\n var z = brushOption.z;\n z == null && (z = COVER_Z);\n cover.traverse(function (el) {\n el.z = z;\n el.z2 = z; // Consider in given container.\n });\n}\n\nfunction updateCoverAfterCreation(controller, cover) {\n getCoverRenderer(cover).updateCommon(controller, cover);\n updateCoverShape(controller, cover);\n}\n\nfunction getCoverRenderer(cover) {\n return coverRenderers[cover.__brushOption.brushType];\n} // return target panel or `true` (means global panel)\n\n\nfunction getPanelByPoint(controller, e, localCursorPoint) {\n var panels = controller._panels;\n\n if (!panels) {\n return true; // Global panel\n }\n\n var panel;\n var transform = controller._transform;\n each(panels, function (pn) {\n pn.isTargetByCursor(e, localCursorPoint, transform) && (panel = pn);\n });\n return panel;\n} // Return a panel or true\n\n\nfunction getPanelByCover(controller, cover) {\n var panels = controller._panels;\n\n if (!panels) {\n return true; // Global panel\n }\n\n var panelId = cover.__brushOption.panelId; // User may give cover without coord sys info,\n // which is then treated as global panel.\n\n return panelId != null ? panels[panelId] : true;\n}\n\nfunction clearCovers(controller) {\n var covers = controller._covers;\n var originalLength = covers.length;\n each(covers, function (cover) {\n controller.group.remove(cover);\n }, controller);\n covers.length = 0;\n return !!originalLength;\n}\n\nfunction trigger(controller, opt) {\n var areas = map(controller._covers, function (cover) {\n var brushOption = cover.__brushOption;\n var range = zrUtil.clone(brushOption.range);\n return {\n brushType: brushOption.brushType,\n panelId: brushOption.panelId,\n range: range\n };\n });\n controller.trigger('brush', areas, {\n isEnd: !!opt.isEnd,\n removeOnClick: !!opt.removeOnClick\n });\n}\n\nfunction shouldShowCover(controller) {\n var track = controller._track;\n\n if (!track.length) {\n return false;\n }\n\n var p2 = track[track.length - 1];\n var p1 = track[0];\n var dx = p2[0] - p1[0];\n var dy = p2[1] - p1[1];\n var dist = mathPow(dx * dx + dy * dy, 0.5);\n return dist > UNSELECT_THRESHOLD;\n}\n\nfunction getTrackEnds(track) {\n var tail = track.length - 1;\n tail < 0 && (tail = 0);\n return [track[0], track[tail]];\n}\n\nfunction createBaseRectCover(doDrift, controller, brushOption, edgeNames) {\n var cover = new graphic.Group();\n cover.add(new graphic.Rect({\n name: 'main',\n style: makeStyle(brushOption),\n silent: true,\n draggable: true,\n cursor: 'move',\n drift: curry(doDrift, controller, cover, 'nswe'),\n ondragend: curry(trigger, controller, {\n isEnd: true\n })\n }));\n each(edgeNames, function (name) {\n cover.add(new graphic.Rect({\n name: name,\n style: {\n opacity: 0\n },\n draggable: true,\n silent: true,\n invisible: true,\n drift: curry(doDrift, controller, cover, name),\n ondragend: curry(trigger, controller, {\n isEnd: true\n })\n }));\n });\n return cover;\n}\n\nfunction updateBaseRect(controller, cover, localRange, brushOption) {\n var lineWidth = brushOption.brushStyle.lineWidth || 0;\n var handleSize = mathMax(lineWidth, MIN_RESIZE_LINE_WIDTH);\n var x = localRange[0][0];\n var y = localRange[1][0];\n var xa = x - lineWidth / 2;\n var ya = y - lineWidth / 2;\n var x2 = localRange[0][1];\n var y2 = localRange[1][1];\n var x2a = x2 - handleSize + lineWidth / 2;\n var y2a = y2 - handleSize + lineWidth / 2;\n var width = x2 - x;\n var height = y2 - y;\n var widtha = width + lineWidth;\n var heighta = height + lineWidth;\n updateRectShape(controller, cover, 'main', x, y, width, height);\n\n if (brushOption.transformable) {\n updateRectShape(controller, cover, 'w', xa, ya, handleSize, heighta);\n updateRectShape(controller, cover, 'e', x2a, ya, handleSize, heighta);\n updateRectShape(controller, cover, 'n', xa, ya, widtha, handleSize);\n updateRectShape(controller, cover, 's', xa, y2a, widtha, handleSize);\n updateRectShape(controller, cover, 'nw', xa, ya, handleSize, handleSize);\n updateRectShape(controller, cover, 'ne', x2a, ya, handleSize, handleSize);\n updateRectShape(controller, cover, 'sw', xa, y2a, handleSize, handleSize);\n updateRectShape(controller, cover, 'se', x2a, y2a, handleSize, handleSize);\n }\n}\n\nfunction updateCommon(controller, cover) {\n var brushOption = cover.__brushOption;\n var transformable = brushOption.transformable;\n var mainEl = cover.childAt(0);\n mainEl.useStyle(makeStyle(brushOption));\n mainEl.attr({\n silent: !transformable,\n cursor: transformable ? 'move' : 'default'\n });\n each(['w', 'e', 'n', 's', 'se', 'sw', 'ne', 'nw'], function (name) {\n var el = cover.childOfName(name);\n var globalDir = getGlobalDirection(controller, name);\n el && el.attr({\n silent: !transformable,\n invisible: !transformable,\n cursor: transformable ? CURSOR_MAP[globalDir] + '-resize' : null\n });\n });\n}\n\nfunction updateRectShape(controller, cover, name, x, y, w, h) {\n var el = cover.childOfName(name);\n el && el.setShape(pointsToRect(clipByPanel(controller, cover, [[x, y], [x + w, y + h]])));\n}\n\nfunction makeStyle(brushOption) {\n return zrUtil.defaults({\n strokeNoScale: true\n }, brushOption.brushStyle);\n}\n\nfunction formatRectRange(x, y, x2, y2) {\n var min = [mathMin(x, x2), mathMin(y, y2)];\n var max = [mathMax(x, x2), mathMax(y, y2)];\n return [[min[0], max[0]], // x range\n [min[1], max[1]] // y range\n ];\n}\n\nfunction getTransform(controller) {\n return graphic.getTransform(controller.group);\n}\n\nfunction getGlobalDirection(controller, localDirection) {\n if (localDirection.length > 1) {\n localDirection = localDirection.split('');\n var globalDir = [getGlobalDirection(controller, localDirection[0]), getGlobalDirection(controller, localDirection[1])];\n (globalDir[0] === 'e' || globalDir[0] === 'w') && globalDir.reverse();\n return globalDir.join('');\n } else {\n var map = {\n w: 'left',\n e: 'right',\n n: 'top',\n s: 'bottom'\n };\n var inverseMap = {\n left: 'w',\n right: 'e',\n top: 'n',\n bottom: 's'\n };\n var globalDir = graphic.transformDirection(map[localDirection], getTransform(controller));\n return inverseMap[globalDir];\n }\n}\n\nfunction driftRect(toRectRange, fromRectRange, controller, cover, name, dx, dy, e) {\n var brushOption = cover.__brushOption;\n var rectRange = toRectRange(brushOption.range);\n var localDelta = toLocalDelta(controller, dx, dy);\n each(name.split(''), function (namePart) {\n var ind = DIRECTION_MAP[namePart];\n rectRange[ind[0]][ind[1]] += localDelta[ind[0]];\n });\n brushOption.range = fromRectRange(formatRectRange(rectRange[0][0], rectRange[1][0], rectRange[0][1], rectRange[1][1]));\n updateCoverAfterCreation(controller, cover);\n trigger(controller, {\n isEnd: false\n });\n}\n\nfunction driftPolygon(controller, cover, dx, dy, e) {\n var range = cover.__brushOption.range;\n var localDelta = toLocalDelta(controller, dx, dy);\n each(range, function (point) {\n point[0] += localDelta[0];\n point[1] += localDelta[1];\n });\n updateCoverAfterCreation(controller, cover);\n trigger(controller, {\n isEnd: false\n });\n}\n\nfunction toLocalDelta(controller, dx, dy) {\n var thisGroup = controller.group;\n var localD = thisGroup.transformCoordToLocal(dx, dy);\n var localZero = thisGroup.transformCoordToLocal(0, 0);\n return [localD[0] - localZero[0], localD[1] - localZero[1]];\n}\n\nfunction clipByPanel(controller, cover, data) {\n var panel = getPanelByCover(controller, cover);\n return panel && panel !== true ? panel.clipPath(data, controller._transform) : zrUtil.clone(data);\n}\n\nfunction pointsToRect(points) {\n var xmin = mathMin(points[0][0], points[1][0]);\n var ymin = mathMin(points[0][1], points[1][1]);\n var xmax = mathMax(points[0][0], points[1][0]);\n var ymax = mathMax(points[0][1], points[1][1]);\n return {\n x: xmin,\n y: ymin,\n width: xmax - xmin,\n height: ymax - ymin\n };\n}\n\nfunction resetCursor(controller, e, localCursorPoint) {\n // Check active\n if (!controller._brushType) {\n return;\n }\n\n var zr = controller._zr;\n var covers = controller._covers;\n var currPanel = getPanelByPoint(controller, e, localCursorPoint); // Check whether in covers.\n\n if (!controller._dragging) {\n for (var i = 0; i < covers.length; i++) {\n var brushOption = covers[i].__brushOption;\n\n if (currPanel && (currPanel === true || brushOption.panelId === currPanel.panelId) && coverRenderers[brushOption.brushType].contain(covers[i], localCursorPoint[0], localCursorPoint[1])) {\n // Use cursor style set on cover.\n return;\n }\n }\n }\n\n currPanel && zr.setCursorStyle('crosshair');\n}\n\nfunction preventDefault(e) {\n var rawE = e.event;\n rawE.preventDefault && rawE.preventDefault();\n}\n\nfunction mainShapeContain(cover, x, y) {\n return cover.childOfName('main').contain(x, y);\n}\n\nfunction updateCoverByMouse(controller, e, localCursorPoint, isEnd) {\n var creatingCover = controller._creatingCover;\n var panel = controller._creatingPanel;\n var thisBrushOption = controller._brushOption;\n var eventParams;\n\n controller._track.push(localCursorPoint.slice());\n\n if (shouldShowCover(controller) || creatingCover) {\n if (panel && !creatingCover) {\n thisBrushOption.brushMode === 'single' && clearCovers(controller);\n var brushOption = zrUtil.clone(thisBrushOption);\n brushOption.brushType = determineBrushType(brushOption.brushType, panel);\n brushOption.panelId = panel === true ? null : panel.panelId;\n creatingCover = controller._creatingCover = createCover(controller, brushOption);\n\n controller._covers.push(creatingCover);\n }\n\n if (creatingCover) {\n var coverRenderer = coverRenderers[determineBrushType(controller._brushType, panel)];\n var coverBrushOption = creatingCover.__brushOption;\n coverBrushOption.range = coverRenderer.getCreatingRange(clipByPanel(controller, creatingCover, controller._track));\n\n if (isEnd) {\n endCreating(controller, creatingCover);\n coverRenderer.updateCommon(controller, creatingCover);\n }\n\n updateCoverShape(controller, creatingCover);\n eventParams = {\n isEnd: isEnd\n };\n }\n } else if (isEnd && thisBrushOption.brushMode === 'single' && thisBrushOption.removeOnClick) {\n // Help user to remove covers easily, only by a tiny drag, in 'single' mode.\n // But a single click do not clear covers, because user may have casual\n // clicks (for example, click on other component and do not expect covers\n // disappear).\n // Only some cover removed, trigger action, but not every click trigger action.\n if (getPanelByPoint(controller, e, localCursorPoint) && clearCovers(controller)) {\n eventParams = {\n isEnd: isEnd,\n removeOnClick: true\n };\n }\n }\n\n return eventParams;\n}\n\nfunction determineBrushType(brushType, panel) {\n if (brushType === 'auto') {\n return panel.defaultBrushType;\n }\n\n return brushType;\n}\n\nvar mouseHandlers = {\n mousedown: function (e) {\n if (this._dragging) {\n // In case some browser do not support globalOut,\n // and release mose out side the browser.\n handleDragEnd.call(this, e);\n } else if (!e.target || !e.target.draggable) {\n preventDefault(e);\n var localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY);\n this._creatingCover = null;\n var panel = this._creatingPanel = getPanelByPoint(this, e, localCursorPoint);\n\n if (panel) {\n this._dragging = true;\n this._track = [localCursorPoint.slice()];\n }\n }\n },\n mousemove: function (e) {\n var localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY);\n resetCursor(this, e, localCursorPoint);\n\n if (this._dragging) {\n preventDefault(e);\n var eventParams = updateCoverByMouse(this, e, localCursorPoint, false);\n eventParams && trigger(this, eventParams);\n }\n },\n mouseup: handleDragEnd //,\n // FIXME\n // in tooltip, globalout should not be triggered.\n // globalout: handleDragEnd\n\n};\n\nfunction handleDragEnd(e) {\n if (this._dragging) {\n preventDefault(e);\n var localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY);\n var eventParams = updateCoverByMouse(this, e, localCursorPoint, true);\n this._dragging = false;\n this._track = [];\n this._creatingCover = null; // trigger event shoule be at final, after procedure will be nested.\n\n eventParams && trigger(this, eventParams);\n }\n}\n/**\n * key: brushType\n * @type {Object}\n */\n\n\nvar coverRenderers = {\n lineX: getLineRenderer(0),\n lineY: getLineRenderer(1),\n rect: {\n createCover: function (controller, brushOption) {\n return createBaseRectCover(curry(driftRect, function (range) {\n return range;\n }, function (range) {\n return range;\n }), controller, brushOption, ['w', 'e', 'n', 's', 'se', 'sw', 'ne', 'nw']);\n },\n getCreatingRange: function (localTrack) {\n var ends = getTrackEnds(localTrack);\n return formatRectRange(ends[1][0], ends[1][1], ends[0][0], ends[0][1]);\n },\n updateCoverShape: function (controller, cover, localRange, brushOption) {\n updateBaseRect(controller, cover, localRange, brushOption);\n },\n updateCommon: updateCommon,\n contain: mainShapeContain\n },\n polygon: {\n createCover: function (controller, brushOption) {\n var cover = new graphic.Group(); // Do not use graphic.Polygon because graphic.Polyline do not close the\n // border of the shape when drawing, which is a better experience for user.\n\n cover.add(new graphic.Polyline({\n name: 'main',\n style: makeStyle(brushOption),\n silent: true\n }));\n return cover;\n },\n getCreatingRange: function (localTrack) {\n return localTrack;\n },\n endCreating: function (controller, cover) {\n cover.remove(cover.childAt(0)); // Use graphic.Polygon close the shape.\n\n cover.add(new graphic.Polygon({\n name: 'main',\n draggable: true,\n drift: curry(driftPolygon, controller, cover),\n ondragend: curry(trigger, controller, {\n isEnd: true\n })\n }));\n },\n updateCoverShape: function (controller, cover, localRange, brushOption) {\n cover.childAt(0).setShape({\n points: clipByPanel(controller, cover, localRange)\n });\n },\n updateCommon: updateCommon,\n contain: mainShapeContain\n }\n};\n\nfunction getLineRenderer(xyIndex) {\n return {\n createCover: function (controller, brushOption) {\n return createBaseRectCover(curry(driftRect, function (range) {\n var rectRange = [range, [0, 100]];\n xyIndex && rectRange.reverse();\n return rectRange;\n }, function (rectRange) {\n return rectRange[xyIndex];\n }), controller, brushOption, [['w', 'e'], ['n', 's']][xyIndex]);\n },\n getCreatingRange: function (localTrack) {\n var ends = getTrackEnds(localTrack);\n var min = mathMin(ends[0][xyIndex], ends[1][xyIndex]);\n var max = mathMax(ends[0][xyIndex], ends[1][xyIndex]);\n return [min, max];\n },\n updateCoverShape: function (controller, cover, localRange, brushOption) {\n var otherExtent; // If brushWidth not specified, fit the panel.\n\n var panel = getPanelByCover(controller, cover);\n\n if (panel !== true && panel.getLinearBrushOtherExtent) {\n otherExtent = panel.getLinearBrushOtherExtent(xyIndex, controller._transform);\n } else {\n var zr = controller._zr;\n otherExtent = [0, [zr.getWidth(), zr.getHeight()][1 - xyIndex]];\n }\n\n var rectRange = [localRange, otherExtent];\n xyIndex && rectRange.reverse();\n updateBaseRect(controller, cover, rectRange, brushOption);\n },\n updateCommon: updateCommon,\n contain: mainShapeContain\n };\n}\n\nvar _default = BrushController;\nmodule.exports = _default;","var RadiusAxis = require(\"./RadiusAxis\");\n\nvar AngleAxis = require(\"./AngleAxis\");\n\n/**\n * @module echarts/coord/polar/Polar\n */\n\n/**\n * @alias {module:echarts/coord/polar/Polar}\n * @constructor\n * @param {string} name\n */\nvar Polar = function (name) {\n /**\n * @type {string}\n */\n this.name = name || '';\n /**\n * x of polar center\n * @type {number}\n */\n\n this.cx = 0;\n /**\n * y of polar center\n * @type {number}\n */\n\n this.cy = 0;\n /**\n * @type {module:echarts/coord/polar/RadiusAxis}\n * @private\n */\n\n this._radiusAxis = new RadiusAxis();\n /**\n * @type {module:echarts/coord/polar/AngleAxis}\n * @private\n */\n\n this._angleAxis = new AngleAxis();\n this._radiusAxis.polar = this._angleAxis.polar = this;\n};\n\nPolar.prototype = {\n type: 'polar',\n axisPointerEnabled: true,\n constructor: Polar,\n\n /**\n * @param {Array.}\n * @readOnly\n */\n dimensions: ['radius', 'angle'],\n\n /**\n * @type {module:echarts/coord/PolarModel}\n */\n model: null,\n\n /**\n * If contain coord\n * @param {Array.} point\n * @return {boolean}\n */\n containPoint: function (point) {\n var coord = this.pointToCoord(point);\n return this._radiusAxis.contain(coord[0]) && this._angleAxis.contain(coord[1]);\n },\n\n /**\n * If contain data\n * @param {Array.} data\n * @return {boolean}\n */\n containData: function (data) {\n return this._radiusAxis.containData(data[0]) && this._angleAxis.containData(data[1]);\n },\n\n /**\n * @param {string} dim\n * @return {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis}\n */\n getAxis: function (dim) {\n return this['_' + dim + 'Axis'];\n },\n\n /**\n * @return {Array.}\n */\n getAxes: function () {\n return [this._radiusAxis, this._angleAxis];\n },\n\n /**\n * Get axes by type of scale\n * @param {string} scaleType\n * @return {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis}\n */\n getAxesByScale: function (scaleType) {\n var axes = [];\n var angleAxis = this._angleAxis;\n var radiusAxis = this._radiusAxis;\n angleAxis.scale.type === scaleType && axes.push(angleAxis);\n radiusAxis.scale.type === scaleType && axes.push(radiusAxis);\n return axes;\n },\n\n /**\n * @return {module:echarts/coord/polar/AngleAxis}\n */\n getAngleAxis: function () {\n return this._angleAxis;\n },\n\n /**\n * @return {module:echarts/coord/polar/RadiusAxis}\n */\n getRadiusAxis: function () {\n return this._radiusAxis;\n },\n\n /**\n * @param {module:echarts/coord/polar/Axis}\n * @return {module:echarts/coord/polar/Axis}\n */\n getOtherAxis: function (axis) {\n var angleAxis = this._angleAxis;\n return axis === angleAxis ? this._radiusAxis : angleAxis;\n },\n\n /**\n * Base axis will be used on stacking.\n *\n * @return {module:echarts/coord/polar/Axis}\n */\n getBaseAxis: function () {\n return this.getAxesByScale('ordinal')[0] || this.getAxesByScale('time')[0] || this.getAngleAxis();\n },\n\n /**\n * @param {string} [dim] 'radius' or 'angle' or 'auto' or null/undefined\n * @return {Object} {baseAxes: [], otherAxes: []}\n */\n getTooltipAxes: function (dim) {\n var baseAxis = dim != null && dim !== 'auto' ? this.getAxis(dim) : this.getBaseAxis();\n return {\n baseAxes: [baseAxis],\n otherAxes: [this.getOtherAxis(baseAxis)]\n };\n },\n\n /**\n * Convert a single data item to (x, y) point.\n * Parameter data is an array which the first element is radius and the second is angle\n * @param {Array.} data\n * @param {boolean} [clamp=false]\n * @return {Array.}\n */\n dataToPoint: function (data, clamp) {\n return this.coordToPoint([this._radiusAxis.dataToRadius(data[0], clamp), this._angleAxis.dataToAngle(data[1], clamp)]);\n },\n\n /**\n * Convert a (x, y) point to data\n * @param {Array.} point\n * @param {boolean} [clamp=false]\n * @return {Array.}\n */\n pointToData: function (point, clamp) {\n var coord = this.pointToCoord(point);\n return [this._radiusAxis.radiusToData(coord[0], clamp), this._angleAxis.angleToData(coord[1], clamp)];\n },\n\n /**\n * Convert a (x, y) point to (radius, angle) coord\n * @param {Array.} point\n * @return {Array.}\n */\n pointToCoord: function (point) {\n var dx = point[0] - this.cx;\n var dy = point[1] - this.cy;\n var angleAxis = this.getAngleAxis();\n var extent = angleAxis.getExtent();\n var minAngle = Math.min(extent[0], extent[1]);\n var maxAngle = Math.max(extent[0], extent[1]); // Fix fixed extent in polarCreator\n // FIXME\n\n angleAxis.inverse ? minAngle = maxAngle - 360 : maxAngle = minAngle + 360;\n var radius = Math.sqrt(dx * dx + dy * dy);\n dx /= radius;\n dy /= radius;\n var radian = Math.atan2(-dy, dx) / Math.PI * 180; // move to angleExtent\n\n var dir = radian < minAngle ? 1 : -1;\n\n while (radian < minAngle || radian > maxAngle) {\n radian += dir * 360;\n }\n\n return [radius, radian];\n },\n\n /**\n * Convert a (radius, angle) coord to (x, y) point\n * @param {Array.} coord\n * @return {Array.}\n */\n coordToPoint: function (coord) {\n var radius = coord[0];\n var radian = coord[1] / 180 * Math.PI;\n var x = Math.cos(radian) * radius + this.cx; // Inverse the y\n\n var y = -Math.sin(radian) * radius + this.cy;\n return [x, y];\n }\n};\nvar _default = Polar;\nmodule.exports = _default;","var Gradient = require(\"zrender/lib/graphic/Gradient\");\n\nfunction _default(ecModel) {\n function encodeColor(seriesModel) {\n var colorAccessPath = (seriesModel.visualColorAccessPath || 'itemStyle.normal.color').split('.');\n var data = seriesModel.getData();\n var color = seriesModel.get(colorAccessPath) // Set in itemStyle\n || seriesModel.getColorFromPalette(seriesModel.get('name')); // Default color\n // FIXME Set color function or use the platte color\n\n data.setVisual('color', color); // Only visible series has each data be visual encoded\n\n if (!ecModel.isSeriesFiltered(seriesModel)) {\n if (typeof color === 'function' && !(color instanceof Gradient)) {\n data.each(function (idx) {\n data.setItemVisual(idx, 'color', color(seriesModel.getDataParams(idx)));\n });\n } // itemStyle in each data item\n\n\n data.each(function (idx) {\n var itemModel = data.getItemModel(idx);\n var color = itemModel.get(colorAccessPath, true);\n\n if (color != null) {\n data.setItemVisual(idx, 'color', color);\n }\n });\n }\n }\n\n ecModel.eachRawSeries(encodeColor);\n}\n\nmodule.exports = _default;","var samplers = {\n average: function (frame) {\n var sum = 0;\n var count = 0;\n\n for (var i = 0; i < frame.length; i++) {\n if (!isNaN(frame[i])) {\n sum += frame[i];\n count++;\n }\n } // Return NaN if count is 0\n\n\n return count === 0 ? NaN : sum / count;\n },\n sum: function (frame) {\n var sum = 0;\n\n for (var i = 0; i < frame.length; i++) {\n // Ignore NaN\n sum += frame[i] || 0;\n }\n\n return sum;\n },\n max: function (frame) {\n var max = -Infinity;\n\n for (var i = 0; i < frame.length; i++) {\n frame[i] > max && (max = frame[i]);\n }\n\n return max;\n },\n min: function (frame) {\n var min = Infinity;\n\n for (var i = 0; i < frame.length; i++) {\n frame[i] < min && (min = frame[i]);\n }\n\n return min;\n },\n // TODO\n // Median\n nearest: function (frame) {\n return frame[0];\n }\n};\n\nvar indexSampler = function (frame, value) {\n return Math.round(frame.length / 2);\n};\n\nfunction _default(seriesType, ecModel, api) {\n ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n var data = seriesModel.getData();\n var sampling = seriesModel.get('sampling');\n var coordSys = seriesModel.coordinateSystem; // Only cartesian2d support down sampling\n\n if (coordSys.type === 'cartesian2d' && sampling) {\n var baseAxis = coordSys.getBaseAxis();\n var valueAxis = coordSys.getOtherAxis(baseAxis);\n var extent = baseAxis.getExtent(); // Coordinste system has been resized\n\n var size = extent[1] - extent[0];\n var rate = Math.round(data.count() / size);\n\n if (rate > 1) {\n var sampler;\n\n if (typeof sampling === 'string') {\n sampler = samplers[sampling];\n } else if (typeof sampling === 'function') {\n sampler = sampling;\n }\n\n if (sampler) {\n data = data.downSample(valueAxis.dim, 1 / rate, sampler, indexSampler);\n seriesModel.setData(data);\n }\n }\n }\n }, this);\n}\n\nmodule.exports = _default;","var textContain = require(\"zrender/lib/contain/text\");\n\nvar graphicUtil = require(\"../../util/graphic\");\n\nvar PATH_COLOR = ['textStyle', 'color'];\nvar _default = {\n /**\n * Get color property or get color from option.textStyle.color\n * @param {boolean} [isEmphasis]\n * @return {string}\n */\n getTextColor: function (isEmphasis) {\n var ecModel = this.ecModel;\n return this.getShallow('color') || (!isEmphasis && ecModel ? ecModel.get(PATH_COLOR) : null);\n },\n\n /**\n * Create font string from fontStyle, fontWeight, fontSize, fontFamily\n * @return {string}\n */\n getFont: function () {\n return graphicUtil.getFont({\n fontStyle: this.getShallow('fontStyle'),\n fontWeight: this.getShallow('fontWeight'),\n fontSize: this.getShallow('fontSize'),\n fontFamily: this.getShallow('fontFamily')\n }, this.ecModel);\n },\n getTextRect: function (text) {\n return textContain.getBoundingRect(text, this.getFont(), this.getShallow('align'), this.getShallow('verticalAlign') || this.getShallow('baseline'), this.getShallow('padding'), this.getShallow('rich'), this.getShallow('truncateText'));\n }\n};\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar SeriesModel = require(\"../../model/Series\");\n\nvar _whiskerBoxCommon = require(\"../helper/whiskerBoxCommon\");\n\nvar seriesModelMixin = _whiskerBoxCommon.seriesModelMixin;\nvar BoxplotSeries = SeriesModel.extend({\n type: 'series.boxplot',\n dependencies: ['xAxis', 'yAxis', 'grid'],\n // TODO\n // box width represents group size, so dimension should have 'size'.\n\n /**\n * @see \n * The meanings of 'min' and 'max' depend on user,\n * and echarts do not need to know it.\n * @readOnly\n */\n defaultValueDimensions: ['min', 'Q1', 'median', 'Q3', 'max'],\n\n /**\n * @type {Array.}\n * @readOnly\n */\n dimensions: null,\n\n /**\n * @override\n */\n defaultOption: {\n zlevel: 0,\n // 一级层叠\n z: 2,\n // 二级层叠\n coordinateSystem: 'cartesian2d',\n legendHoverLink: true,\n hoverAnimation: true,\n // xAxisIndex: 0,\n // yAxisIndex: 0,\n layout: null,\n // 'horizontal' or 'vertical'\n boxWidth: [7, 50],\n // [min, max] can be percent of band width.\n itemStyle: {\n normal: {\n color: '#fff',\n borderWidth: 1\n },\n emphasis: {\n borderWidth: 2,\n shadowBlur: 5,\n shadowOffsetX: 2,\n shadowOffsetY: 2,\n shadowColor: 'rgba(0,0,0,0.4)'\n }\n },\n animationEasing: 'elasticOut',\n animationDuration: 800\n }\n});\nzrUtil.mixin(BoxplotSeries, seriesModelMixin, true);\nvar _default = BoxplotSeries;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar featureManager = require(\"../featureManager\");\n\nvar lang = require(\"../../../lang\");\n\nvar brushLang = lang.toolbox.brush;\n\nfunction Brush(model, ecModel, api) {\n this.model = model;\n this.ecModel = ecModel;\n this.api = api;\n /**\n * @private\n * @type {string}\n */\n\n this._brushType;\n /**\n * @private\n * @type {string}\n */\n\n this._brushMode;\n}\n\nBrush.defaultOption = {\n show: true,\n type: ['rect', 'polygon', 'lineX', 'lineY', 'keep', 'clear'],\n icon: {\n rect: 'M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13',\n // jshint ignore:line\n polygon: 'M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2',\n // jshint ignore:line\n lineX: 'M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4',\n // jshint ignore:line\n lineY: 'M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4',\n // jshint ignore:line\n keep: 'M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z',\n // jshint ignore:line\n clear: 'M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2' // jshint ignore:line\n\n },\n // `rect`, `polygon`, `lineX`, `lineY`, `keep`, `clear`\n title: zrUtil.clone(brushLang.title)\n};\nvar proto = Brush.prototype;\n\nproto.render = proto.updateView = proto.updateLayout = function (featureModel, ecModel, api) {\n var brushType;\n var brushMode;\n var isBrushed;\n ecModel.eachComponent({\n mainType: 'brush'\n }, function (brushModel) {\n brushType = brushModel.brushType;\n brushMode = brushModel.brushOption.brushMode || 'single';\n isBrushed |= brushModel.areas.length;\n });\n this._brushType = brushType;\n this._brushMode = brushMode;\n zrUtil.each(featureModel.get('type', true), function (type) {\n featureModel.setIconStatus(type, (type === 'keep' ? brushMode === 'multiple' : type === 'clear' ? isBrushed : type === brushType) ? 'emphasis' : 'normal');\n });\n};\n\nproto.getIcons = function () {\n var model = this.model;\n var availableIcons = model.get('icon', true);\n var icons = {};\n zrUtil.each(model.get('type', true), function (type) {\n if (availableIcons[type]) {\n icons[type] = availableIcons[type];\n }\n });\n return icons;\n};\n\nproto.onclick = function (ecModel, api, type) {\n var brushType = this._brushType;\n var brushMode = this._brushMode;\n\n if (type === 'clear') {\n // Trigger parallel action firstly\n api.dispatchAction({\n type: 'axisAreaSelect',\n intervals: []\n });\n api.dispatchAction({\n type: 'brush',\n command: 'clear',\n // Clear all areas of all brush components.\n areas: []\n });\n } else {\n api.dispatchAction({\n type: 'takeGlobalCursor',\n key: 'brush',\n brushOption: {\n brushType: type === 'keep' ? brushType : brushType === type ? false : type,\n brushMode: type === 'keep' ? brushMode === 'multiple' ? 'single' : 'multiple' : brushMode\n }\n });\n }\n};\n\nfeatureManager.register('brush', Brush);\nvar _default = Brush;\nmodule.exports = _default;","var zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar textContain = require(\"zrender/lib/contain/text\");\n\nvar formatUtil = require(\"../../util/format\");\n\nvar matrix = require(\"zrender/lib/core/matrix\");\n\nvar axisHelper = require(\"../../coord/axisHelper\");\n\nvar AxisBuilder = require(\"../axis/AxisBuilder\");\n\n/**\n * @param {module:echarts/model/Model} axisPointerModel\n */\nfunction buildElStyle(axisPointerModel) {\n var axisPointerType = axisPointerModel.get('type');\n var styleModel = axisPointerModel.getModel(axisPointerType + 'Style');\n var style;\n\n if (axisPointerType === 'line') {\n style = styleModel.getLineStyle();\n style.fill = null;\n } else if (axisPointerType === 'shadow') {\n style = styleModel.getAreaStyle();\n style.stroke = null;\n }\n\n return style;\n}\n/**\n * @param {Function} labelPos {align, verticalAlign, position}\n */\n\n\nfunction buildLabelElOption(elOption, axisModel, axisPointerModel, api, labelPos) {\n var value = axisPointerModel.get('value');\n var text = getValueLabel(value, axisModel.axis, axisModel.ecModel, axisPointerModel.get('seriesDataIndices'), {\n precision: axisPointerModel.get('label.precision'),\n formatter: axisPointerModel.get('label.formatter')\n });\n var labelModel = axisPointerModel.getModel('label');\n var paddings = formatUtil.normalizeCssArray(labelModel.get('padding') || 0);\n var font = labelModel.getFont();\n var textRect = textContain.getBoundingRect(text, font);\n var position = labelPos.position;\n var width = textRect.width + paddings[1] + paddings[3];\n var height = textRect.height + paddings[0] + paddings[2]; // Adjust by align.\n\n var align = labelPos.align;\n align === 'right' && (position[0] -= width);\n align === 'center' && (position[0] -= width / 2);\n var verticalAlign = labelPos.verticalAlign;\n verticalAlign === 'bottom' && (position[1] -= height);\n verticalAlign === 'middle' && (position[1] -= height / 2); // Not overflow ec container\n\n confineInContainer(position, width, height, api);\n var bgColor = labelModel.get('backgroundColor');\n\n if (!bgColor || bgColor === 'auto') {\n bgColor = axisModel.get('axisLine.lineStyle.color');\n }\n\n elOption.label = {\n shape: {\n x: 0,\n y: 0,\n width: width,\n height: height,\n r: labelModel.get('borderRadius')\n },\n position: position.slice(),\n // TODO: rich\n style: {\n text: text,\n textFont: font,\n textFill: labelModel.getTextColor(),\n textPosition: 'inside',\n fill: bgColor,\n stroke: labelModel.get('borderColor') || 'transparent',\n lineWidth: labelModel.get('borderWidth') || 0,\n shadowBlur: labelModel.get('shadowBlur'),\n shadowColor: labelModel.get('shadowColor'),\n shadowOffsetX: labelModel.get('shadowOffsetX'),\n shadowOffsetY: labelModel.get('shadowOffsetY')\n },\n // Lable should be over axisPointer.\n z2: 10\n };\n} // Do not overflow ec container\n\n\nfunction confineInContainer(position, width, height, api) {\n var viewWidth = api.getWidth();\n var viewHeight = api.getHeight();\n position[0] = Math.min(position[0] + width, viewWidth) - width;\n position[1] = Math.min(position[1] + height, viewHeight) - height;\n position[0] = Math.max(position[0], 0);\n position[1] = Math.max(position[1], 0);\n}\n/**\n * @param {number} value\n * @param {module:echarts/coord/Axis} axis\n * @param {module:echarts/model/Global} ecModel\n * @param {Object} opt\n * @param {Array.} seriesDataIndices\n * @param {number|string} opt.precision 'auto' or a number\n * @param {string|Function} opt.formatter label formatter\n */\n\n\nfunction getValueLabel(value, axis, ecModel, seriesDataIndices, opt) {\n var text = axis.scale.getLabel( // If `precision` is set, width can be fixed (like '12.00500'), which\n // helps to debounce when when moving label.\n value, {\n precision: opt.precision\n });\n var formatter = opt.formatter;\n\n if (formatter) {\n var params = {\n value: axisHelper.getAxisRawValue(axis, value),\n seriesData: []\n };\n zrUtil.each(seriesDataIndices, function (idxItem) {\n var series = ecModel.getSeriesByIndex(idxItem.seriesIndex);\n var dataIndex = idxItem.dataIndexInside;\n var dataParams = series && series.getDataParams(dataIndex);\n dataParams && params.seriesData.push(dataParams);\n });\n\n if (zrUtil.isString(formatter)) {\n text = formatter.replace('{value}', text);\n } else if (zrUtil.isFunction(formatter)) {\n text = formatter(params);\n }\n }\n\n return text;\n}\n/**\n * @param {module:echarts/coord/Axis} axis\n * @param {number} value\n * @param {Object} layoutInfo {\n * rotation, position, labelOffset, labelDirection, labelMargin\n * }\n */\n\n\nfunction getTransformedPosition(axis, value, layoutInfo) {\n var transform = matrix.create();\n matrix.rotate(transform, transform, layoutInfo.rotation);\n matrix.translate(transform, transform, layoutInfo.position);\n return graphic.applyTransform([axis.dataToCoord(value), (layoutInfo.labelOffset || 0) + (layoutInfo.labelDirection || 1) * (layoutInfo.labelMargin || 0)], transform);\n}\n\nfunction buildCartesianSingleLabelElOption(value, elOption, layoutInfo, axisModel, axisPointerModel, api) {\n var textLayout = AxisBuilder.innerTextLayout(layoutInfo.rotation, 0, layoutInfo.labelDirection);\n layoutInfo.labelMargin = axisPointerModel.get('label.margin');\n buildLabelElOption(elOption, axisModel, axisPointerModel, api, {\n position: getTransformedPosition(axisModel.axis, value, layoutInfo),\n align: textLayout.textAlign,\n verticalAlign: textLayout.textVerticalAlign\n });\n}\n/**\n * @param {Array.} p1\n * @param {Array.} p2\n * @param {number} [xDimIndex=0] or 1\n */\n\n\nfunction makeLineShape(p1, p2, xDimIndex) {\n xDimIndex = xDimIndex || 0;\n return {\n x1: p1[xDimIndex],\n y1: p1[1 - xDimIndex],\n x2: p2[xDimIndex],\n y2: p2[1 - xDimIndex]\n };\n}\n/**\n * @param {Array.} xy\n * @param {Array.} wh\n * @param {number} [xDimIndex=0] or 1\n */\n\n\nfunction makeRectShape(xy, wh, xDimIndex) {\n xDimIndex = xDimIndex || 0;\n return {\n x: xy[xDimIndex],\n y: xy[1 - xDimIndex],\n width: wh[xDimIndex],\n height: wh[1 - xDimIndex]\n };\n}\n\nfunction makeSectorShape(cx, cy, r0, r, startAngle, endAngle) {\n return {\n cx: cx,\n cy: cy,\n r0: r0,\n r: r,\n startAngle: startAngle,\n endAngle: endAngle,\n clockwise: true\n };\n}\n\nexports.buildElStyle = buildElStyle;\nexports.buildLabelElOption = buildLabelElOption;\nexports.getValueLabel = getValueLabel;\nexports.getTransformedPosition = getTransformedPosition;\nexports.buildCartesianSingleLabelElOption = buildCartesianSingleLabelElOption;\nexports.makeLineShape = makeLineShape;\nexports.makeRectShape = makeRectShape;\nexports.makeSectorShape = makeSectorShape;"],"sourceRoot":""}