echarts 3.6.1 → 3.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. package/README.md +1 -0
  2. package/dist/echarts-en.js +77756 -0
  3. package/dist/echarts-en.min.js +38 -0
  4. package/dist/echarts.common-en.js +50169 -0
  5. package/dist/echarts.common-en.min.js +30 -0
  6. package/dist/echarts.common.js +5799 -3093
  7. package/dist/echarts.common.min.js +14 -13
  8. package/dist/echarts.js +7628 -4679
  9. package/dist/echarts.min.js +22 -22
  10. package/dist/echarts.simple-en.js +34988 -0
  11. package/dist/echarts.simple-en.min.js +27 -0
  12. package/dist/echarts.simple.js +4472 -2493
  13. package/dist/echarts.simple.min.js +11 -9
  14. package/dist/extension/bmap.js +50 -11
  15. package/dist/extension/bmap.min.js +1 -1
  16. package/dist/extension/dataTool.js +10 -10
  17. package/extension/bmap/BMapCoordSys.js +40 -1
  18. package/index.blank.js +4 -0
  19. package/index.common.js +1 -1
  20. package/index.js +1 -1
  21. package/lib/action/createDataSelectAction.js +6 -2
  22. package/lib/chart/bar/BarView.js +6 -3
  23. package/lib/chart/bar/BaseBarSeries.js +4 -3
  24. package/lib/chart/bar/PictorialBarSeries.js +1 -1
  25. package/lib/chart/bar/PictorialBarView.js +29 -7
  26. package/lib/chart/bar/helper.js +14 -31
  27. package/lib/chart/candlestick/candlestickLayout.js +49 -6
  28. package/lib/chart/chord/chordCircularLayout.js +2 -2
  29. package/lib/chart/custom.js +135 -21
  30. package/lib/chart/funnel/FunnelSeries.js +0 -1
  31. package/lib/chart/funnel/FunnelView.js +15 -22
  32. package/lib/chart/funnel/funnelLayout.js +1 -1
  33. package/lib/chart/gauge/GaugeSeries.js +7 -12
  34. package/lib/chart/gauge/GaugeView.js +32 -53
  35. package/lib/chart/graph/GraphSeries.js +2 -1
  36. package/lib/chart/graph/GraphView.js +39 -45
  37. package/lib/chart/graph/forceHelper.js +5 -0
  38. package/lib/chart/graph/forceLayout.js +1 -1
  39. package/lib/chart/heatmap/HeatmapLayer.js +7 -0
  40. package/lib/chart/heatmap/HeatmapView.js +10 -9
  41. package/lib/chart/helper/EffectSymbol.js +3 -3
  42. package/lib/chart/helper/LargeSymbolDraw.js +6 -1
  43. package/lib/chart/helper/Line.js +40 -22
  44. package/lib/chart/helper/Symbol.js +20 -7
  45. package/lib/chart/helper/SymbolDraw.js +2 -1
  46. package/lib/chart/helper/labelHelper.js +0 -17
  47. package/lib/chart/helper/whiskerBoxCommon.js +11 -3
  48. package/lib/chart/line/LineSeries.js +1 -0
  49. package/lib/chart/line/LineView.js +14 -2
  50. package/lib/chart/line/poly.js +5 -0
  51. package/lib/chart/lines/LinesView.js +22 -7
  52. package/lib/chart/map/MapSeries.js +3 -7
  53. package/lib/chart/map/MapView.js +29 -18
  54. package/lib/chart/pie/PieSeries.js +20 -6
  55. package/lib/chart/pie/PieView.js +20 -23
  56. package/lib/chart/pie/labelLayout.js +3 -3
  57. package/lib/chart/radar/RadarView.js +16 -20
  58. package/lib/chart/sankey/SankeySeries.js +2 -4
  59. package/lib/chart/sankey/SankeyView.js +13 -29
  60. package/lib/chart/sankey/sankeyLayout.js +1 -1
  61. package/lib/chart/scatter/ScatterSeries.js +2 -1
  62. package/lib/chart/themeRiver/ThemeRiverSeries.js +2 -4
  63. package/lib/chart/themeRiver/ThemeRiverView.js +2 -5
  64. package/lib/chart/themeRiver/themeRiverLayout.js +1 -1
  65. package/lib/chart/treemap/Breadcrumb.js +1 -1
  66. package/lib/chart/treemap/TreemapSeries.js +28 -8
  67. package/lib/chart/treemap/TreemapView.js +88 -77
  68. package/lib/chart/treemap/treemapLayout.js +29 -13
  69. package/lib/component/axis/AngleAxisView.js +13 -19
  70. package/lib/component/axis/AxisBuilder.js +260 -186
  71. package/lib/component/axis/CartesianAxisView.js +15 -3
  72. package/lib/component/axis/ParallelAxisView.js +1 -1
  73. package/lib/component/axis/RadiusAxisView.js +1 -1
  74. package/lib/component/axis/SingleAxisView.js +8 -2
  75. package/lib/component/axis/cartesianAxisHelper.js +11 -15
  76. package/lib/component/axisPointer/AxisPointerModel.js +1 -3
  77. package/lib/component/axisPointer/BaseAxisPointer.js +15 -38
  78. package/lib/component/axisPointer/axisTrigger.js +36 -20
  79. package/lib/component/axisPointer/modelHelper.js +3 -4
  80. package/lib/component/axisPointer/viewHelper.js +4 -6
  81. package/lib/component/axisPointer.js +1 -14
  82. package/lib/component/calendar/CalendarView.js +22 -39
  83. package/lib/component/dataZoom/AxisProxy.js +3 -2
  84. package/lib/component/dataZoom/DataZoomModel.js +16 -4
  85. package/lib/component/dataZoom/InsideZoomView.js +5 -3
  86. package/lib/component/dataZoom/SliderZoomView.js +21 -32
  87. package/lib/component/dataZoom/roams.js +33 -9
  88. package/lib/component/dataZoom/typeDefaulter.js +1 -1
  89. package/lib/component/graphic.js +17 -5
  90. package/lib/component/helper/BrushTargetManager.js +1 -1
  91. package/lib/component/helper/MapDraw.js +26 -22
  92. package/lib/component/helper/RoamController.js +12 -11
  93. package/lib/component/helper/listComponent.js +27 -24
  94. package/lib/component/helper/selectableMixin.js +40 -15
  95. package/lib/component/legend/LegendModel.js +11 -3
  96. package/lib/component/legend/LegendView.js +151 -70
  97. package/lib/component/legend/ScrollableLegendModel.js +75 -0
  98. package/lib/component/legend/ScrollableLegendView.js +367 -0
  99. package/lib/component/legend/legendAction.js +1 -0
  100. package/lib/component/legend/scrollableLegendAction.js +24 -0
  101. package/lib/component/legend.js +8 -3
  102. package/lib/component/legendScroll.js +11 -0
  103. package/lib/component/marker/MarkAreaView.js +12 -26
  104. package/lib/component/marker/MarkLineView.js +5 -5
  105. package/lib/component/marker/MarkPointView.js +4 -4
  106. package/lib/component/marker/MarkerModel.js +1 -4
  107. package/lib/component/marker/markerHelper.js +1 -0
  108. package/lib/component/radar/RadarView.js +6 -3
  109. package/lib/component/timeline/SliderTimelineModel.js +4 -6
  110. package/lib/component/timeline/SliderTimelineView.js +14 -16
  111. package/lib/component/timeline/TimelineAxis.js +1 -1
  112. package/lib/component/timeline/TimelineModel.js +1 -3
  113. package/lib/component/title.js +9 -10
  114. package/lib/component/toolbox/ToolboxModel.js +2 -0
  115. package/lib/component/toolbox/ToolboxView.js +15 -27
  116. package/lib/component/toolbox/feature/Brush.js +3 -8
  117. package/lib/component/toolbox/feature/DataView.js +5 -5
  118. package/lib/component/toolbox/feature/DataZoom.js +3 -4
  119. package/lib/component/toolbox/feature/MagicType.js +3 -6
  120. package/lib/component/toolbox/feature/Restore.js +2 -1
  121. package/lib/component/toolbox/feature/SaveAsImage.js +23 -9
  122. package/lib/component/tooltip/TooltipContent.js +4 -4
  123. package/lib/component/tooltip/TooltipView.js +29 -6
  124. package/lib/component/visualMap/ContinuousModel.js +2 -2
  125. package/lib/component/visualMap/ContinuousView.js +12 -8
  126. package/lib/component/visualMap/PiecewiseModel.js +1 -2
  127. package/lib/component/visualMap/PiecewiseView.js +2 -2
  128. package/lib/component/visualMap/VisualMapModel.js +18 -12
  129. package/lib/coord/Axis.js +1 -1
  130. package/lib/coord/axisDefault.js +3 -3
  131. package/lib/coord/axisHelper.js +18 -1
  132. package/lib/coord/axisModelCommonMixin.js +12 -2
  133. package/lib/coord/calendar/Calendar.js +65 -21
  134. package/lib/coord/calendar/CalendarModel.js +6 -12
  135. package/lib/coord/cartesian/Cartesian2D.js +0 -14
  136. package/lib/coord/cartesian/Grid.js +47 -28
  137. package/lib/coord/geo/Geo.js +2 -18
  138. package/lib/coord/geo/GeoModel.js +6 -13
  139. package/lib/coord/geo/fix/diaoyuIsland.js +30 -0
  140. package/lib/coord/geo/geoCreator.js +6 -1
  141. package/lib/coord/polar/Polar.js +0 -13
  142. package/lib/coord/radar/Radar.js +1 -1
  143. package/lib/coord/radar/RadarModel.js +6 -2
  144. package/lib/data/DataDiffer.js +14 -7
  145. package/lib/data/Graph.js +3 -0
  146. package/lib/data/List.js +1 -1
  147. package/lib/data/Tree.js +2 -2
  148. package/lib/data/helper/completeDimensions.js +2 -11
  149. package/lib/echarts.js +33 -10
  150. package/lib/lang/cn.js +4 -0
  151. package/lib/lang/default.js +42 -0
  152. package/lib/lang/en.js +42 -0
  153. package/lib/lang.js +42 -0
  154. package/lib/langEN.js +42 -0
  155. package/lib/layout/barGrid.js +11 -3
  156. package/lib/layout/barPolar.js +9 -2
  157. package/lib/model/Model.js +2 -1
  158. package/lib/model/Series.js +14 -6
  159. package/lib/model/mixin/textStyle.js +11 -9
  160. package/lib/preprocessor/backwardCompat.js +5 -4
  161. package/lib/preprocessor/helper/compatStyle.js +157 -45
  162. package/lib/scale/Interval.js +10 -4
  163. package/lib/scale/Time.js +14 -6
  164. package/lib/scale/helper.js +15 -2
  165. package/lib/util/format.js +4 -24
  166. package/lib/util/graphic.js +412 -21
  167. package/lib/util/layout.js +28 -16
  168. package/lib/util/model.js +26 -11
  169. package/lib/util/number.js +106 -21
  170. package/lib/visual/VisualMapping.js +4 -4
  171. package/package.json +3 -3
  172. package/rollup.config.js +49 -0
  173. package/src/action/createDataSelectAction.js +6 -2
  174. package/src/chart/bar/BarView.js +6 -3
  175. package/src/chart/bar/BaseBarSeries.js +4 -3
  176. package/src/chart/bar/PictorialBarSeries.js +1 -1
  177. package/src/chart/bar/PictorialBarView.js +29 -7
  178. package/src/chart/bar/helper.js +13 -30
  179. package/src/chart/candlestick/candlestickLayout.js +49 -6
  180. package/src/chart/chord/chordCircularLayout.js +2 -2
  181. package/src/chart/custom.js +135 -21
  182. package/src/chart/funnel/FunnelSeries.js +0 -1
  183. package/src/chart/funnel/FunnelView.js +15 -22
  184. package/src/chart/funnel/funnelLayout.js +1 -1
  185. package/src/chart/gauge/GaugeSeries.js +7 -12
  186. package/src/chart/gauge/GaugeView.js +32 -53
  187. package/src/chart/graph/GraphSeries.js +2 -1
  188. package/src/chart/graph/GraphView.js +39 -45
  189. package/src/chart/graph/forceHelper.js +5 -0
  190. package/src/chart/graph/forceLayout.js +1 -1
  191. package/src/chart/heatmap/HeatmapLayer.js +7 -0
  192. package/src/chart/heatmap/HeatmapView.js +10 -9
  193. package/src/chart/helper/EffectSymbol.js +3 -3
  194. package/src/chart/helper/LargeSymbolDraw.js +6 -1
  195. package/src/chart/helper/Line.js +40 -22
  196. package/src/chart/helper/Symbol.js +20 -7
  197. package/src/chart/helper/SymbolDraw.js +2 -1
  198. package/src/chart/helper/labelHelper.js +0 -17
  199. package/src/chart/helper/whiskerBoxCommon.js +11 -4
  200. package/src/chart/line/LineSeries.js +1 -0
  201. package/src/chart/line/LineView.js +14 -2
  202. package/src/chart/line/poly.js +5 -0
  203. package/src/chart/lines/LinesView.js +22 -7
  204. package/src/chart/map/MapSeries.js +3 -7
  205. package/src/chart/map/MapView.js +29 -18
  206. package/src/chart/pie/PieSeries.js +20 -6
  207. package/src/chart/pie/PieView.js +20 -23
  208. package/src/chart/pie/labelLayout.js +3 -3
  209. package/src/chart/radar/RadarView.js +16 -20
  210. package/src/chart/sankey/SankeySeries.js +2 -4
  211. package/src/chart/sankey/SankeyView.js +13 -29
  212. package/src/chart/sankey/sankeyLayout.js +1 -1
  213. package/src/chart/scatter/ScatterSeries.js +2 -1
  214. package/src/chart/themeRiver/ThemeRiverSeries.js +2 -4
  215. package/src/chart/themeRiver/ThemeRiverView.js +2 -5
  216. package/src/chart/themeRiver/themeRiverLayout.js +1 -1
  217. package/src/chart/treemap/Breadcrumb.js +1 -1
  218. package/src/chart/treemap/TreemapSeries.js +28 -8
  219. package/src/chart/treemap/TreemapView.js +88 -77
  220. package/src/chart/treemap/treemapLayout.js +29 -13
  221. package/src/component/axis/AngleAxisView.js +13 -19
  222. package/src/component/axis/AxisBuilder.js +260 -186
  223. package/src/component/axis/CartesianAxisView.js +15 -3
  224. package/src/component/axis/ParallelAxisView.js +1 -1
  225. package/src/component/axis/RadiusAxisView.js +1 -1
  226. package/src/component/axis/SingleAxisView.js +8 -2
  227. package/src/component/axis/cartesianAxisHelper.js +11 -15
  228. package/src/component/axisPointer/AxisPointerModel.js +1 -3
  229. package/src/component/axisPointer/BaseAxisPointer.js +15 -38
  230. package/src/component/axisPointer/axisTrigger.js +36 -20
  231. package/src/component/axisPointer/modelHelper.js +3 -4
  232. package/src/component/axisPointer/viewHelper.js +4 -6
  233. package/src/component/axisPointer.js +1 -14
  234. package/src/component/calendar/CalendarView.js +22 -39
  235. package/src/component/dataZoom/AxisProxy.js +3 -2
  236. package/src/component/dataZoom/DataZoomModel.js +16 -4
  237. package/src/component/dataZoom/InsideZoomView.js +5 -3
  238. package/src/component/dataZoom/SliderZoomView.js +21 -32
  239. package/src/component/dataZoom/roams.js +33 -9
  240. package/src/component/dataZoom/typeDefaulter.js +1 -1
  241. package/src/component/graphic.js +17 -5
  242. package/src/component/helper/BrushTargetManager.js +1 -1
  243. package/src/component/helper/MapDraw.js +26 -22
  244. package/src/component/helper/RoamController.js +12 -11
  245. package/src/component/helper/listComponent.js +27 -24
  246. package/src/component/helper/selectableMixin.js +40 -15
  247. package/src/component/legend/LegendModel.js +11 -3
  248. package/src/component/legend/LegendView.js +151 -70
  249. package/src/component/legend/ScrollableLegendModel.js +76 -0
  250. package/src/component/legend/ScrollableLegendView.js +368 -0
  251. package/src/component/legend/legendAction.js +1 -0
  252. package/src/component/legend/scrollableLegendAction.js +25 -0
  253. package/src/component/legend.js +8 -3
  254. package/src/component/legendScroll.js +12 -0
  255. package/src/component/marker/MarkAreaView.js +12 -26
  256. package/src/component/marker/MarkLineView.js +5 -5
  257. package/src/component/marker/MarkPointView.js +4 -4
  258. package/src/component/marker/MarkerModel.js +1 -4
  259. package/src/component/marker/markerHelper.js +1 -0
  260. package/src/component/radar/RadarView.js +6 -3
  261. package/src/component/timeline/SliderTimelineModel.js +4 -6
  262. package/src/component/timeline/SliderTimelineView.js +14 -16
  263. package/src/component/timeline/TimelineAxis.js +1 -1
  264. package/src/component/timeline/TimelineModel.js +1 -3
  265. package/src/component/title.js +9 -10
  266. package/src/component/toolbox/ToolboxModel.js +2 -0
  267. package/src/component/toolbox/ToolboxView.js +15 -27
  268. package/src/component/toolbox/feature/Brush.js +3 -8
  269. package/src/component/toolbox/feature/DataView.js +5 -5
  270. package/src/component/toolbox/feature/DataZoom.js +3 -4
  271. package/src/component/toolbox/feature/MagicType.js +3 -6
  272. package/src/component/toolbox/feature/Restore.js +2 -1
  273. package/src/component/toolbox/feature/SaveAsImage.js +23 -10
  274. package/src/component/tooltip/TooltipContent.js +4 -4
  275. package/src/component/tooltip/TooltipView.js +29 -7
  276. package/src/component/visualMap/ContinuousModel.js +2 -2
  277. package/src/component/visualMap/ContinuousView.js +12 -8
  278. package/src/component/visualMap/PiecewiseModel.js +1 -2
  279. package/src/component/visualMap/PiecewiseView.js +2 -2
  280. package/src/component/visualMap/VisualMapModel.js +18 -12
  281. package/src/coord/Axis.js +1 -1
  282. package/src/coord/axisDefault.js +3 -3
  283. package/src/coord/axisHelper.js +18 -1
  284. package/src/coord/axisModelCommonMixin.js +12 -2
  285. package/src/coord/calendar/Calendar.js +65 -21
  286. package/src/coord/calendar/CalendarModel.js +6 -12
  287. package/src/coord/cartesian/Cartesian2D.js +0 -14
  288. package/src/coord/cartesian/Grid.js +47 -28
  289. package/src/coord/geo/Geo.js +2 -18
  290. package/src/coord/geo/GeoModel.js +6 -13
  291. package/src/coord/geo/fix/diaoyuIsland.js +30 -0
  292. package/src/coord/geo/geoCreator.js +6 -1
  293. package/src/coord/polar/Polar.js +0 -13
  294. package/src/coord/radar/Radar.js +1 -1
  295. package/src/coord/radar/RadarModel.js +6 -2
  296. package/src/data/DataDiffer.js +14 -7
  297. package/src/data/Graph.js +3 -0
  298. package/src/data/List.js +1 -1
  299. package/src/data/Tree.js +2 -2
  300. package/src/data/helper/completeDimensions.js +2 -11
  301. package/src/echarts.js +33 -10
  302. package/src/lang.js +43 -0
  303. package/src/langEN.js +43 -0
  304. package/src/layout/barGrid.js +11 -3
  305. package/src/layout/barPolar.js +9 -2
  306. package/src/model/Model.js +2 -1
  307. package/src/model/Series.js +14 -6
  308. package/src/model/mixin/textStyle.js +11 -9
  309. package/src/preprocessor/backwardCompat.js +5 -4
  310. package/src/preprocessor/helper/compatStyle.js +157 -45
  311. package/src/scale/Interval.js +10 -4
  312. package/src/scale/Time.js +14 -6
  313. package/src/scale/helper.js +15 -2
  314. package/src/util/format.js +4 -24
  315. package/src/util/graphic.js +412 -21
  316. package/src/util/layout.js +28 -16
  317. package/src/util/model.js +26 -11
  318. package/src/util/number.js +106 -21
  319. package/src/visual/VisualMapping.js +4 -4
  320. package/webpack.config.js +21 -7
  321. package/.npmignore +0 -10
@@ -4,73 +4,108 @@ define(function (require) {
4
4
  var symbolCreator = require('../../util/symbol');
5
5
  var graphic = require('../../util/graphic');
6
6
  var listComponentHelper = require('../helper/listComponent');
7
+ var layoutUtil = require('../../util/layout');
7
8
 
8
9
  var curry = zrUtil.curry;
10
+ var each = zrUtil.each;
11
+ var Group = graphic.Group;
9
12
 
10
- function dispatchSelectAction(name, api) {
11
- api.dispatchAction({
12
- type: 'legendToggleSelect',
13
- name: name
14
- });
15
- }
13
+ return require('../../echarts').extendComponentView({
16
14
 
17
- function dispatchHighlightAction(seriesModel, dataName, api) {
18
- // If element hover will move to a hoverLayer.
19
- var el = api.getZr().storage.getDisplayList()[0];
20
- if (!(el && el.useHoverLayer)) {
21
- seriesModel.get('legendHoverLink') && api.dispatchAction({
22
- type: 'highlight',
23
- seriesName: seriesModel.name,
24
- name: dataName
25
- });
26
- }
27
- }
15
+ type: 'legend.plain',
28
16
 
29
- function dispatchDownplayAction(seriesModel, dataName, api) {
30
- // If element hover will move to a hoverLayer.
31
- var el = api.getZr().storage.getDisplayList()[0];
32
- if (!(el && el.useHoverLayer)) {
33
- seriesModel.get('legendHoverLink') && api.dispatchAction({
34
- type: 'downplay',
35
- seriesName: seriesModel.name,
36
- name: dataName
37
- });
38
- }
39
- }
17
+ newlineDisabled: false,
40
18
 
41
- return require('../../echarts').extendComponentView({
19
+ /**
20
+ * @override
21
+ */
22
+ init: function () {
42
23
 
43
- type: 'legend',
24
+ /**
25
+ * @private
26
+ * @type {module:zrender/container/Group}
27
+ */
28
+ this.group.add(this._contentGroup = new Group());
29
+
30
+ /**
31
+ * @private
32
+ * @type {module:zrender/Element}
33
+ */
34
+ this._backgroundEl;
35
+ },
44
36
 
45
- init: function () {
46
- this._symbolTypeStore = {};
37
+ /**
38
+ * @protected
39
+ */
40
+ getContentGroup: function () {
41
+ return this._contentGroup;
47
42
  },
48
43
 
44
+ /**
45
+ * @override
46
+ */
49
47
  render: function (legendModel, ecModel, api) {
50
- var group = this.group;
51
- group.removeAll();
52
48
 
53
- if (!legendModel.get('show')) {
49
+ this.resetInner();
50
+
51
+ if (!legendModel.get('show', true)) {
54
52
  return;
55
53
  }
56
54
 
57
- var selectMode = legendModel.get('selectedMode');
58
55
  var itemAlign = legendModel.get('align');
59
-
60
- if (itemAlign === 'auto') {
61
- itemAlign = (legendModel.get('left') === 'right'
62
- && legendModel.get('orient') === 'vertical')
63
- ? 'right' : 'left';
56
+ if (!itemAlign || itemAlign === 'auto') {
57
+ itemAlign = (
58
+ legendModel.get('left') === 'right'
59
+ && legendModel.get('orient') === 'vertical'
60
+ ) ? 'right' : 'left';
64
61
  }
65
62
 
66
- var legendDrawedMap = zrUtil.createHashMap();
63
+ this.renderInner(itemAlign, legendModel, ecModel, api);
64
+
65
+ // Perform layout.
66
+ var positionInfo = legendModel.getBoxLayoutParams();
67
+ var viewportSize = {width: api.getWidth(), height: api.getHeight()};
68
+ var padding = legendModel.get('padding');
69
+
70
+ var maxSize = layoutUtil.getLayoutRect(positionInfo, viewportSize, padding);
71
+ var mainRect = this.layoutInner(legendModel, itemAlign, maxSize);
72
+
73
+ // Place mainGroup, based on the calculated `mainRect`.
74
+ var layoutRect = layoutUtil.getLayoutRect(
75
+ zrUtil.defaults({width: mainRect.width, height: mainRect.height}, positionInfo),
76
+ viewportSize,
77
+ padding
78
+ );
79
+ this.group.attr('position', [layoutRect.x - mainRect.x, layoutRect.y - mainRect.y]);
80
+
81
+ // Render background after group is layout.
82
+ this.group.add(
83
+ this._backgroundEl = listComponentHelper.makeBackground(mainRect, legendModel)
84
+ );
85
+ },
86
+
87
+ /**
88
+ * @protected
89
+ */
90
+ resetInner: function () {
91
+ this.getContentGroup().removeAll();
92
+ this._backgroundEl && this.group.remove(this._backgroundEl);
93
+ },
94
+
95
+ /**
96
+ * @protected
97
+ */
98
+ renderInner: function (itemAlign, legendModel, ecModel, api) {
99
+ var contentGroup = this.getContentGroup();
100
+ var legendDrawnMap = zrUtil.createHashMap();
101
+ var selectMode = legendModel.get('selectedMode');
67
102
 
68
- zrUtil.each(legendModel.getData(), function (itemModel) {
103
+ each(legendModel.getData(), function (itemModel, dataIndex) {
69
104
  var name = itemModel.get('name');
70
105
 
71
106
  // Use empty string or \n as a newline string
72
- if (name === '' || name === '\n') {
73
- group.add(new graphic.Group({
107
+ if (!this.newlineDisabled && (name === '' || name === '\n')) {
108
+ contentGroup.add(new Group({
74
109
  newline: true
75
110
  }));
76
111
  return;
@@ -78,7 +113,7 @@ define(function (require) {
78
113
 
79
114
  var seriesModel = ecModel.getSeriesByName(name)[0];
80
115
 
81
- if (legendDrawedMap.get(name)) {
116
+ if (legendDrawnMap.get(name)) {
82
117
  // Have been drawed
83
118
  return;
84
119
  }
@@ -99,7 +134,7 @@ define(function (require) {
99
134
  var symbolType = data.getVisual('symbol');
100
135
 
101
136
  var itemGroup = this._createItem(
102
- name, itemModel, legendModel,
137
+ name, dataIndex, itemModel, legendModel,
103
138
  legendSymbolType, symbolType,
104
139
  itemAlign, color,
105
140
  selectMode
@@ -109,13 +144,13 @@ define(function (require) {
109
144
  .on('mouseover', curry(dispatchHighlightAction, seriesModel, null, api))
110
145
  .on('mouseout', curry(dispatchDownplayAction, seriesModel, null, api));
111
146
 
112
- legendDrawedMap.set(name, true);
147
+ legendDrawnMap.set(name, true);
113
148
  }
114
149
  else {
115
150
  // Data legend of pie, funnel
116
151
  ecModel.eachRawSeries(function (seriesModel) {
117
152
  // In case multiple series has same data name
118
- if (legendDrawedMap.get(name)) {
153
+ if (legendDrawnMap.get(name)) {
119
154
  return;
120
155
  }
121
156
  if (seriesModel.legendDataProvider) {
@@ -130,7 +165,7 @@ define(function (require) {
130
165
  var legendSymbolType = 'roundRect';
131
166
 
132
167
  var itemGroup = this._createItem(
133
- name, itemModel, legendModel,
168
+ name, dataIndex, itemModel, legendModel,
134
169
  legendSymbolType, null,
135
170
  itemAlign, color,
136
171
  selectMode
@@ -141,26 +176,21 @@ define(function (require) {
141
176
  .on('mouseover', curry(dispatchHighlightAction, seriesModel, name, api))
142
177
  .on('mouseout', curry(dispatchDownplayAction, seriesModel, name, api));
143
178
 
144
- legendDrawedMap.set(name, true);
179
+ legendDrawnMap.set(name, true);
145
180
  }
146
181
  }, this);
147
182
  }
148
183
 
149
184
  if (__DEV__) {
150
- if (!legendDrawedMap.get(name)) {
185
+ if (!legendDrawnMap.get(name)) {
151
186
  console.warn(name + ' series not exists. Legend data should be same with series name or data name.');
152
187
  }
153
188
  }
154
189
  }, this);
155
-
156
- listComponentHelper.layout(group, legendModel, api);
157
- // Render background after group is layout
158
- // FIXME
159
- listComponentHelper.addBackground(group, legendModel);
160
190
  },
161
191
 
162
192
  _createItem: function (
163
- name, itemModel, legendModel,
193
+ name, dataIndex, itemModel, legendModel,
164
194
  legendSymbolType, symbolType,
165
195
  itemAlign, color, selectMode
166
196
  ) {
@@ -169,7 +199,7 @@ define(function (require) {
169
199
  var inactiveColor = legendModel.get('inactiveColor');
170
200
 
171
201
  var isSelected = legendModel.isSelected(name);
172
- var itemGroup = new graphic.Group();
202
+ var itemGroup = new Group();
173
203
 
174
204
  var textStyleModel = itemModel.getModel('textStyle');
175
205
 
@@ -201,7 +231,6 @@ define(function (require) {
201
231
  ));
202
232
  }
203
233
 
204
- // Text
205
234
  var textX = itemAlign === 'left' ? itemWidth + 5 : -5;
206
235
  var textAlign = itemAlign;
207
236
 
@@ -214,18 +243,16 @@ define(function (require) {
214
243
  content = formatter(name);
215
244
  }
216
245
 
217
- var text = new graphic.Text({
218
- style: {
246
+ itemGroup.add(new graphic.Text({
247
+ style: graphic.setTextStyle({}, textStyleModel, {
219
248
  text: content,
220
249
  x: textX,
221
250
  y: itemHeight / 2,
222
- fill: isSelected ? textStyleModel.getTextColor() : inactiveColor,
223
- textFont: textStyleModel.getFont(),
251
+ textFill: isSelected ? textStyleModel.getTextColor() : inactiveColor,
224
252
  textAlign: textAlign,
225
253
  textVerticalAlign: 'middle'
226
- }
227
- });
228
- itemGroup.add(text);
254
+ })
255
+ }));
229
256
 
230
257
  // Add a invisible rect to increase the area of mouse hover
231
258
  var hitRect = new graphic.Rect({
@@ -253,13 +280,67 @@ define(function (require) {
253
280
 
254
281
  hitRect.silent = !selectMode;
255
282
 
256
-
257
-
258
- this.group.add(itemGroup);
283
+ this.getContentGroup().add(itemGroup);
259
284
 
260
285
  graphic.setHoverStyle(itemGroup);
261
286
 
287
+ itemGroup.__legendDataIndex = dataIndex;
288
+
262
289
  return itemGroup;
290
+ },
291
+
292
+ /**
293
+ * @protected
294
+ */
295
+ layoutInner: function (legendModel, itemAlign, maxSize) {
296
+ var contentGroup = this.getContentGroup();
297
+
298
+ // Place items in contentGroup.
299
+ layoutUtil.box(
300
+ legendModel.get('orient'),
301
+ contentGroup,
302
+ legendModel.get('itemGap'),
303
+ maxSize.width,
304
+ maxSize.height
305
+ );
306
+
307
+ var contentRect = contentGroup.getBoundingRect();
308
+ contentGroup.attr('position', [-contentRect.x, -contentRect.y]);
309
+
310
+ return this.group.getBoundingRect();
263
311
  }
312
+
264
313
  });
314
+
315
+ function dispatchSelectAction(name, api) {
316
+ api.dispatchAction({
317
+ type: 'legendToggleSelect',
318
+ name: name
319
+ });
320
+ }
321
+
322
+ function dispatchHighlightAction(seriesModel, dataName, api) {
323
+ // If element hover will move to a hoverLayer.
324
+ var el = api.getZr().storage.getDisplayList()[0];
325
+ if (!(el && el.useHoverLayer)) {
326
+ seriesModel.get('legendHoverLink') && api.dispatchAction({
327
+ type: 'highlight',
328
+ seriesName: seriesModel.name,
329
+ name: dataName
330
+ });
331
+ }
332
+ }
333
+
334
+ function dispatchDownplayAction(seriesModel, dataName, api) {
335
+ // If element hover will move to a hoverLayer.
336
+ var el = api.getZr().storage.getDisplayList()[0];
337
+ if (!(el && el.useHoverLayer)) {
338
+ seriesModel.get('legendHoverLink') && api.dispatchAction({
339
+ type: 'downplay',
340
+ seriesName: seriesModel.name,
341
+ name: dataName
342
+ });
343
+ }
344
+ }
345
+
265
346
  });
@@ -0,0 +1,76 @@
1
+ define(function(require) {
2
+
3
+ var LegendModel = require('./LegendModel');
4
+ var layout = require('../../util/layout');
5
+
6
+ var ScrollableLegendModel = LegendModel.extend({
7
+
8
+ type: 'legend.scroll',
9
+
10
+ /**
11
+ * @param {number} scrollDataIndex
12
+ */
13
+ setScrollDataIndex: function (scrollDataIndex) {
14
+ this.option.scrollDataIndex = scrollDataIndex;
15
+ },
16
+
17
+ defaultOption: {
18
+ scrollDataIndex: 0,
19
+ pageButtonItemGap: 5,
20
+ pageButtonGap: null,
21
+ pageButtonPosition: 'end', // 'start' or 'end'
22
+ pageFormatter: '{current}/{total}', // If null/undefined, do not show page.
23
+ pageIcons: {
24
+ horizontal: ['M0,0L12,-10L12,10z', 'M0,0L-12,-10L-12,10z'],
25
+ vertical: ['M0,0L20,0L10,-20z', 'M0,0L20,0L10,20z']
26
+ },
27
+ pageIconColor: '#2f4554',
28
+ pageIconInactiveColor: '#aaa',
29
+ pageIconSize: 15, // Can be [10, 3], which represents [width, height]
30
+ pageTextStyle: {
31
+ color: '#333'
32
+ },
33
+
34
+ animationDurationUpdate: 800
35
+ },
36
+
37
+ /**
38
+ * @override
39
+ */
40
+ init: function (option, parentModel, ecModel, extraOpt) {
41
+ var inputPositionParams = layout.getLayoutParams(option);
42
+
43
+ ScrollableLegendModel.superCall(this, 'init', option, parentModel, ecModel, extraOpt);
44
+
45
+ mergeAndNormalizeLayoutParams(this, option, inputPositionParams);
46
+ },
47
+
48
+ /**
49
+ * @override
50
+ */
51
+ mergeOption: function (option, extraOpt) {
52
+ ScrollableLegendModel.superCall(this, 'mergeOption', option, extraOpt);
53
+
54
+ mergeAndNormalizeLayoutParams(this, this.option, option);
55
+ },
56
+
57
+ getOrient: function () {
58
+ return this.get('orient') === 'vertical'
59
+ ? {index: 1, name: 'vertical'}
60
+ : {index: 0, name: 'horizontal'};
61
+ }
62
+
63
+ });
64
+
65
+ // Do not `ignoreSize` to enable setting {left: 10, right: 10}.
66
+ function mergeAndNormalizeLayoutParams(legendModel, target, raw) {
67
+ var orient = legendModel.getOrient();
68
+ var ignoreSize = [1, 1];
69
+ ignoreSize[orient.index] = 0;
70
+ layout.mergeLayoutParam(target, raw, {
71
+ type: 'box', ignoreSize: ignoreSize
72
+ });
73
+ }
74
+
75
+ return ScrollableLegendModel;
76
+ });