diff --git a/src/chart/bar.js b/src/chart/bar.js index 3da058412b7381e136167a63f28ccbfbcfe2c264..32f1cf8483d5c398dda93cf6be1b0afe4da754a0 100644 --- a/src/chart/bar.js +++ b/src/chart/bar.js @@ -12,7 +12,7 @@ define(function (require) { echarts.registerLayout(zrUtil.curry(barLayoutGrid, 'bar')); // Visual coding for legend - echarts.registerVisualCoding('chart', function (ecModel) { + echarts.registerVisual(function (ecModel) { ecModel.eachSeriesByType('bar', function (seriesModel) { var data = seriesModel.getData(); data.setVisual('legendSymbol', 'roundRect'); diff --git a/src/chart/boxplot.js b/src/chart/boxplot.js index 86c91b5e5c7784292c86f6522d895ab72c9c4013..992a08df79403acc4f7cb70740e43e638ee60201 100644 --- a/src/chart/boxplot.js +++ b/src/chart/boxplot.js @@ -5,7 +5,7 @@ define(function (require) { require('./boxplot/BoxplotSeries'); require('./boxplot/BoxplotView'); - echarts.registerVisualCoding('chart', require('./boxplot/boxplotVisual')); + echarts.registerVisual(require('./boxplot/boxplotVisual')); echarts.registerLayout(require('./boxplot/boxplotLayout')); }); \ No newline at end of file diff --git a/src/chart/boxplot/boxplotLayout.js b/src/chart/boxplot/boxplotLayout.js index adebd30a2d9b5e2f745b8a70dbf09d74481edaf0..0c0a2bab898451b80a4f33311f8fb03de8855cff 100644 --- a/src/chart/boxplot/boxplotLayout.js +++ b/src/chart/boxplot/boxplotLayout.js @@ -5,7 +5,7 @@ define(function (require) { var parsePercent = numberUtil.parsePercent; var each = zrUtil.each; - return function (ecModel, api) { + return function (ecModel) { var groupResult = groupSeriesByAxis(ecModel); diff --git a/src/chart/candlestick.js b/src/chart/candlestick.js index 037bb520c70be40e76f3a8a863536beb4b129bd7..14dc354ae8cd90b26f0eb3e6c7fdddfdbfda5e0f 100644 --- a/src/chart/candlestick.js +++ b/src/chart/candlestick.js @@ -9,7 +9,7 @@ define(function (require) { require('./candlestick/preprocessor') ); - echarts.registerVisualCoding('chart', require('./candlestick/candlestickVisual')); + echarts.registerVisual(require('./candlestick/candlestickVisual')); echarts.registerLayout(require('./candlestick/candlestickLayout')); }); \ No newline at end of file diff --git a/src/chart/candlestick/candlestickLayout.js b/src/chart/candlestick/candlestickLayout.js index 5496c7c9e0c94e64e524cb34c42167042c81eb5e..0696b539cb38c74ccbabfbfb93090e9f230c2170 100644 --- a/src/chart/candlestick/candlestickLayout.js +++ b/src/chart/candlestick/candlestickLayout.js @@ -4,7 +4,7 @@ define(function (require) { var CANDLE_MIN_NICE_WIDTH = 5; var GPA_MIN = 4; - return function (ecModel, api) { + return function (ecModel) { ecModel.eachSeriesByType('candlestick', function (seriesModel) { diff --git a/src/chart/chord.js b/src/chart/chord.js index 1cbf0c7e94134f60bc9fbdebe3f7fa9959029b26..583149d5f93320ab6f89019f03e8947599545d68 100644 --- a/src/chart/chord.js +++ b/src/chart/chord.js @@ -7,11 +7,7 @@ define(function (require) { var zrUtil = require('zrender/core/util'); echarts.registerLayout(require('./chord/chordCircularLayout')); - echarts.registerVisualCoding( - 'chart', zrUtil.curry(require('../visual/dataColor'), 'chord') - ); + echarts.registerVisual(zrUtil.curry(require('../visual/dataColor'), 'chord')); - echarts.registerProcessor( - 'filter', zrUtil.curry(require('../processor/dataFilter'), 'pie') - ); + echarts.registerProcessor(zrUtil.curry(require('../processor/dataFilter'), 'pie')); }); \ No newline at end of file diff --git a/src/chart/chord/chordCircularLayout.js b/src/chart/chord/chordCircularLayout.js index eb85c0c57315cd45cbe2ce6048c46c1f23adb74d..6be732bd5a9ceb6024b2458a48672f09fb8de2d0 100644 --- a/src/chart/chord/chordCircularLayout.js +++ b/src/chart/chord/chordCircularLayout.js @@ -95,7 +95,7 @@ define(function (require) { return a.size - b.size; }; - return function (ecModel, api) { + return function (ecModel, api, payload) { ecModel.eachSeriesByType('chord', function (chordSeries) { var graph = chordSeries.getGraph(); diff --git a/src/chart/effectScatter.js b/src/chart/effectScatter.js index 8a7040eea0afcfece888d99c20b21fafe2898e3a..f64bc856776aa7ad0c438dc09ef7354454654b3c 100644 --- a/src/chart/effectScatter.js +++ b/src/chart/effectScatter.js @@ -6,7 +6,7 @@ define(function (require) { require('./effectScatter/EffectScatterSeries'); require('./effectScatter/EffectScatterView'); - echarts.registerVisualCoding('chart', zrUtil.curry( + echarts.registerVisual(zrUtil.curry( require('../visual/symbol'), 'effectScatter', 'circle', null )); echarts.registerLayout(zrUtil.curry( diff --git a/src/chart/funnel.js b/src/chart/funnel.js index 8290e43f5243f06c381c8a60a726d930915fa8ac..6b3e4374eb0bb855cc7dc7388535d8a76a65cb0a 100644 --- a/src/chart/funnel.js +++ b/src/chart/funnel.js @@ -6,12 +6,8 @@ define(function (require) { require('./funnel/FunnelSeries'); require('./funnel/FunnelView'); - echarts.registerVisualCoding( - 'chart', zrUtil.curry(require('../visual/dataColor'), 'funnel') - ); + echarts.registerVisual(zrUtil.curry(require('../visual/dataColor'), 'funnel')); echarts.registerLayout(require('./funnel/funnelLayout')); - echarts.registerProcessor( - 'filter', zrUtil.curry(require('../processor/dataFilter'), 'funnel') - ); + echarts.registerProcessor(zrUtil.curry(require('../processor/dataFilter'), 'funnel')); }); \ No newline at end of file diff --git a/src/chart/funnel/funnelLayout.js b/src/chart/funnel/funnelLayout.js index 9b972e4540d1d327c7a9268a6c82260797d00042..46984667fde06d7cf36fd4fabc783202a6aee980 100644 --- a/src/chart/funnel/funnelLayout.js +++ b/src/chart/funnel/funnelLayout.js @@ -94,7 +94,7 @@ define(function (require) { }); } - return function (ecModel, api) { + return function (ecModel, api, payload) { ecModel.eachSeriesByType('funnel', function (seriesModel) { var data = seriesModel.getData(); var sort = seriesModel.get('sort'); diff --git a/src/chart/graph.js b/src/chart/graph.js index 72736e2ad2bf8dbd1aa50a2836df5fdcba126552..401c9122a77c39cc6febdbbdb50fa23e21800007 100644 --- a/src/chart/graph.js +++ b/src/chart/graph.js @@ -8,13 +8,13 @@ define(function (require) { require('./graph/roamAction'); - echarts.registerProcessor('filter', require('./graph/categoryFilter')); + echarts.registerProcessor(require('./graph/categoryFilter')); - echarts.registerVisualCoding('chart', zrUtil.curry( + echarts.registerVisual(zrUtil.curry( require('../visual/symbol'), 'graph', 'circle', null )); - echarts.registerVisualCoding('chart', require('./graph/categoryVisual')); - echarts.registerVisualCoding('chart', require('./graph/edgeVisual')); + echarts.registerVisual(require('./graph/categoryVisual')); + echarts.registerVisual(require('./graph/edgeVisual')); echarts.registerLayout(require('./graph/simpleLayout')); echarts.registerLayout(require('./graph/circularLayout')); diff --git a/src/chart/graph/circularLayout.js b/src/chart/graph/circularLayout.js index b9291dab35758863dafa8f029818ded8b699ef99..cfe19d69e33d74b8d47ef6d9809d42c17cbaa982 100644 --- a/src/chart/graph/circularLayout.js +++ b/src/chart/graph/circularLayout.js @@ -1,6 +1,6 @@ define(function (require) { var circularLayoutHelper = require('./circularLayoutHelper'); - return function (ecModel, api) { + return function (ecModel) { ecModel.eachSeriesByType('graph', function (seriesModel) { if (seriesModel.get('layout') === 'circular') { circularLayoutHelper(seriesModel); diff --git a/src/chart/graph/forceLayout.js b/src/chart/graph/forceLayout.js index e4af303843c7c5c1055833585a246e673b6acad7..e2a85cb41a6699c2705e6c6cf55f7fa9e5b833d8 100644 --- a/src/chart/graph/forceLayout.js +++ b/src/chart/graph/forceLayout.js @@ -6,7 +6,7 @@ define(function (require) { var circularLayoutHelper = require('./circularLayoutHelper'); var vec2 = require('zrender/core/vector'); - return function (ecModel, api) { + return function (ecModel) { ecModel.eachSeriesByType('graph', function (graphSeries) { var coordSys = graphSeries.coordinateSystem; if (coordSys && coordSys.type !== 'view') { diff --git a/src/chart/line.js b/src/chart/line.js index 7af6da615c3cb5550583db4d19e4fdab9061ca32..b9171cd748d5349fcbf6e3d6940757b35cbd92c2 100644 --- a/src/chart/line.js +++ b/src/chart/line.js @@ -2,11 +2,12 @@ define(function (require) { var zrUtil = require('zrender/core/util'); var echarts = require('../echarts'); + var PRIORITY = echarts.PRIORITY; require('./line/LineSeries'); require('./line/LineView'); - echarts.registerVisualCoding('chart', zrUtil.curry( + echarts.registerVisual(zrUtil.curry( require('../visual/symbol'), 'line', 'circle', 'line' )); echarts.registerLayout(zrUtil.curry( @@ -14,7 +15,7 @@ define(function (require) { )); // Down sample after filter - echarts.registerProcessor('statistic', zrUtil.curry( + echarts.registerProcessor(PRIORITY.PROCESSOR.STATISTIC, zrUtil.curry( require('../processor/dataSample'), 'line' )); diff --git a/src/chart/lines.js b/src/chart/lines.js index 8b036261f6c915ac97ebde75e4e35e9af39663e7..c484dd9f6e160282ecc7574258606f7fefaf554f 100644 --- a/src/chart/lines.js +++ b/src/chart/lines.js @@ -9,7 +9,7 @@ define(function (require) { require('./lines/linesLayout') ); - echarts.registerVisualCoding( - 'chart', zrUtil.curry(require('../visual/seriesColor'), 'lines', 'lineStyle') + echarts.registerVisual( + zrUtil.curry(require('../visual/seriesColor'), 'lines', 'lineStyle') ); }); \ No newline at end of file diff --git a/src/chart/map.js b/src/chart/map.js index 8369e1556f1382f0abe986bdce744cf1e6683797..e87b1ad92a3ca1c801d2f874105e7457b9870f83 100644 --- a/src/chart/map.js +++ b/src/chart/map.js @@ -1,6 +1,7 @@ define(function (require) { var echarts = require('../echarts'); + var PRIORITY = echarts.PRIORITY; require('./map/MapSeries'); @@ -12,9 +13,9 @@ define(function (require) { echarts.registerLayout(require('./map/mapSymbolLayout')); - echarts.registerVisualCoding('chart', require('./map/mapVisual')); + echarts.registerVisual(require('./map/mapVisual')); - echarts.registerProcessor('statistic', require('./map/mapDataStatistic')); + echarts.registerProcessor(PRIORITY.PROCESSOR.STATISTIC, require('./map/mapDataStatistic')); echarts.registerPreprocessor(require('./map/backwardCompat')); diff --git a/src/chart/parallel.js b/src/chart/parallel.js index 423d7995f4e73f6760fef1c56629221ffe080d56..6f1f28a827a8293ef6a83ca5930aeb4fafea0c90 100644 --- a/src/chart/parallel.js +++ b/src/chart/parallel.js @@ -7,6 +7,6 @@ define(function (require) { require('./parallel/ParallelSeries'); require('./parallel/ParallelView'); - echarts.registerVisualCoding('chart', require('./parallel/parallelVisual')); + echarts.registerVisual(require('./parallel/parallelVisual')); }); \ No newline at end of file diff --git a/src/chart/parallel/parallelVisual.js b/src/chart/parallel/parallelVisual.js index 02f121a2a6e6c0e2d66df349e61b12479ff6923e..d49ab9083305a58f131f3bf6455b383b09cfacd8 100644 --- a/src/chart/parallel/parallelVisual.js +++ b/src/chart/parallel/parallelVisual.js @@ -1,11 +1,6 @@ define(function (require) { - /** - * @payload - * @property {string} parallelAxisId - * @property {Array.} extent - */ - return function (ecModel, payload) { + return function (ecModel) { ecModel.eachSeriesByType('parallel', function (seriesModel) { diff --git a/src/chart/pie.js b/src/chart/pie.js index 9e3dfec423578340bfe89c865a1dd72ab7bebe58..e15d8369ecc93a350fd784eb5e24f0cb1fe58ba6 100644 --- a/src/chart/pie.js +++ b/src/chart/pie.js @@ -20,15 +20,11 @@ define(function (require) { method: 'unSelect' }]); - echarts.registerVisualCoding( - 'chart', zrUtil.curry(require('../visual/dataColor'), 'pie') - ); + echarts.registerVisual(zrUtil.curry(require('../visual/dataColor'), 'pie')); echarts.registerLayout(zrUtil.curry( require('./pie/pieLayout'), 'pie' )); - echarts.registerProcessor( - 'filter', zrUtil.curry(require('../processor/dataFilter'), 'pie') - ); + echarts.registerProcessor(zrUtil.curry(require('../processor/dataFilter'), 'pie')); }); \ No newline at end of file diff --git a/src/chart/pie/pieLayout.js b/src/chart/pie/pieLayout.js index 41576a455dc745c3057861957b3a458cbbd71327..d33bdb766161e0621c8955b3654d7bf68ea65635 100644 --- a/src/chart/pie/pieLayout.js +++ b/src/chart/pie/pieLayout.js @@ -10,7 +10,7 @@ define(function (require) { var PI2 = Math.PI * 2; var RADIAN = Math.PI / 180; - return function (seriesType, ecModel, api) { + return function (seriesType, ecModel, api, payload) { ecModel.eachSeriesByType(seriesType, function (seriesModel) { var center = seriesModel.get('center'); var radius = seriesModel.get('radius'); diff --git a/src/chart/radar.js b/src/chart/radar.js index 12bc8926598090fbccdf40ebab9b7a8d95bbdc27..dc5ace219eb8713ef26914461ee62b6afd0bc7fa 100644 --- a/src/chart/radar.js +++ b/src/chart/radar.js @@ -9,16 +9,14 @@ define(function (require) { require('./radar/RadarSeries'); require('./radar/RadarView'); - echarts.registerVisualCoding( - 'chart', zrUtil.curry(require('../visual/dataColor'), 'radar') - ); - echarts.registerVisualCoding('chart', zrUtil.curry( + echarts.registerVisual(zrUtil.curry(require('../visual/dataColor'), 'radar')); + echarts.registerVisual(zrUtil.curry( require('../visual/symbol'), 'radar', 'circle', null )); echarts.registerLayout(require('./radar/radarLayout')); echarts.registerProcessor( - 'filter', zrUtil.curry(require('../processor/dataFilter'), 'radar') + zrUtil.curry(require('../processor/dataFilter'), 'radar') ); echarts.registerPreprocessor(require('./radar/backwardCompat')); diff --git a/src/chart/radar/radarLayout.js b/src/chart/radar/radarLayout.js index a6eade935f12cff37c192e98cb64d574f1030577..5a9389bf45b1e29d7fe03714d35703b7f25e4b6a 100644 --- a/src/chart/radar/radarLayout.js +++ b/src/chart/radar/radarLayout.js @@ -1,6 +1,6 @@ define(function (require) { - return function (ecModel, api) { + return function (ecModel) { ecModel.eachSeriesByType('radar', function (seriesModel) { var data = seriesModel.getData(); var points = []; diff --git a/src/chart/sankey.js b/src/chart/sankey.js index 7c15efc408499f407038f1bf936a1d1ac486735a..18c7f051f5eb3b13f69db5feef8c17aa48a0bb75 100644 --- a/src/chart/sankey.js +++ b/src/chart/sankey.js @@ -5,5 +5,5 @@ define(function (require) { require('./sankey/SankeySeries'); require('./sankey/SankeyView'); echarts.registerLayout(require('./sankey/sankeyLayout')); - echarts.registerVisualCoding('chart', require('./sankey/sankeyVisual')); + echarts.registerVisual(require('./sankey/sankeyVisual')); }); \ No newline at end of file diff --git a/src/chart/sankey/sankeyLayout.js b/src/chart/sankey/sankeyLayout.js index d72288af7167c55788de7170298891a16b5a7165..4d1c62fdf1a111c8bc8e8a7e59c17746cb9d81bf 100644 --- a/src/chart/sankey/sankeyLayout.js +++ b/src/chart/sankey/sankeyLayout.js @@ -4,7 +4,7 @@ define(function (require) { var nest = require('../../util/array/nest'); var zrUtil = require('zrender/core/util'); - return function (ecModel, api) { + return function (ecModel, api, payload) { ecModel.eachSeriesByType('sankey', function (seriesModel) { diff --git a/src/chart/scatter.js b/src/chart/scatter.js index 3d92b0594c24311b672fd4d367f281f91b0cc4bc..4a2cc4a72704edcd4252853dd79537fa63cbb78c 100644 --- a/src/chart/scatter.js +++ b/src/chart/scatter.js @@ -6,7 +6,7 @@ define(function (require) { require('./scatter/ScatterSeries'); require('./scatter/ScatterView'); - echarts.registerVisualCoding('chart', zrUtil.curry( + echarts.registerVisual(zrUtil.curry( require('../visual/symbol'), 'scatter', 'circle', null )); echarts.registerLayout(zrUtil.curry( diff --git a/src/chart/themeRiver.js b/src/chart/themeRiver.js index 8645d149b1ca95a68bc21047819a9a0a6df9cb80..6b888800f26e396a66fadecdf819da7d629ad3fa 100644 --- a/src/chart/themeRiver.js +++ b/src/chart/themeRiver.js @@ -5,14 +5,14 @@ define(function (require) { require('./themeRiver/ThemeRiverSeries'); - + require('./themeRiver/ThemeRiverView'); echarts.registerLayout(require('./themeRiver/themeRiverLayout')); - echarts.registerVisualCoding('chart', require('./themeRiver/themeRiverVisual')); + echarts.registerVisual(require('./themeRiver/themeRiverVisual')); echarts.registerProcessor( - 'filter', zrUtil.curry(require('../processor/dataFilter'), 'themeRiver') - ); + zrUtil.curry(require('../processor/dataFilter'), 'themeRiver') + ); }); \ No newline at end of file diff --git a/src/chart/treemap.js b/src/chart/treemap.js index 9500fa98b575e663bdb2bda8b56954a0d0b502c7..5dfca136313deb9cfe6958275c646be6c8fa2b61 100644 --- a/src/chart/treemap.js +++ b/src/chart/treemap.js @@ -6,7 +6,7 @@ define(function (require) { require('./treemap/TreemapView'); require('./treemap/treemapAction'); - echarts.registerVisualCoding('chart', require('./treemap/treemapVisual')); + echarts.registerVisual(require('./treemap/treemapVisual')); echarts.registerLayout(require('./treemap/treemapLayout')); }); \ No newline at end of file diff --git a/src/chart/treemap/treemapVisual.js b/src/chart/treemap/treemapVisual.js index 5571e44fa89e834ad47cdd47d5fa3f82c97917d9..4cdf8c31edd64077c997feb3b999d7ffe6b627ea 100644 --- a/src/chart/treemap/treemapVisual.js +++ b/src/chart/treemap/treemapVisual.js @@ -7,7 +7,7 @@ define(function (require) { var ITEM_STYLE_NORMAL = 'itemStyle.normal'; - return function (ecModel, payload) { + return function (ecModel, api, payload) { var condition = {mainType: 'series', subType: 'treemap', query: payload}; ecModel.eachComponent(condition, function (seriesModel) { diff --git a/src/component/dataZoom/dataZoomProcessor.js b/src/component/dataZoom/dataZoomProcessor.js index b16c2154af72696203ac2cb5ca460ec0af2c3855..e64803d0e0145ededc5889aaeab433cc58d64eba 100644 --- a/src/component/dataZoom/dataZoomProcessor.js +++ b/src/component/dataZoom/dataZoomProcessor.js @@ -5,7 +5,7 @@ define(function (require) { var echarts = require('../../echarts'); - echarts.registerProcessor('filter', function (ecModel, api) { + echarts.registerProcessor(function (ecModel, api) { ecModel.eachComponent('dataZoom', function (dataZoomModel) { // We calculate window and reset axis here but not in model diff --git a/src/component/legend.js b/src/component/legend.js index 0c15b3cc897db10ecda7fb449808497c590b6051..da4f3db3b828ebbe972ff206aaa535af04c34f06 100644 --- a/src/component/legend.js +++ b/src/component/legend.js @@ -9,5 +9,5 @@ define(function (require) { var echarts = require('../echarts'); // Series Filter - echarts.registerProcessor('filter', require('./legend/legendFilter')); + echarts.registerProcessor(require('./legend/legendFilter')); }); \ No newline at end of file diff --git a/src/component/visualMap/visualCoding.js b/src/component/visualMap/visualCoding.js index 8ce6f64dc8ec1f9aca47266aabdfadc0adc7a862..671c4e640d0da69d4f5e83b3d3605df59a2ef7e3 100644 --- a/src/component/visualMap/visualCoding.js +++ b/src/component/visualMap/visualCoding.js @@ -7,7 +7,7 @@ define(function (require) { var VisualMapping = require('../../visual/VisualMapping'); var zrUtil = require('zrender/core/util'); - echarts.registerVisualCoding('component', function (ecModel) { + echarts.registerVisual(echarts.PRIORITY.VISUAL.COMPONENT, function (ecModel) { ecModel.eachComponent('visualMap', function (visualMapModel) { processSingleVisualMap(visualMapModel, ecModel); }); diff --git a/src/echarts.js b/src/echarts.js index 923544309b9955b27e5cbb07ca55294bee525a25..20a0f263130939c4131ebbb89fd7321cb0069d61 100644 --- a/src/echarts.js +++ b/src/echarts.js @@ -33,10 +33,14 @@ define(function (require) { var each = zrUtil.each; - var VISUAL_CODING_STAGES = ['echarts', 'chart', 'component']; + var PRIORITY_PROCESSOR_FILTER = 1000; + var PRIORITY_PROCESSOR_STATISTIC = 5000; - // TODO Transform first or filter first - var PROCESSOR_STAGES = ['transform', 'filter', 'statistic']; + + var PRIORITY_VISUAL_LAYOUT = 1000; + var PRIORITY_VISUAL_GLOBAL = 2000; + var PRIORITY_VISUAL_CHART = 3000; + var PRIORITY_VISUAL_COMPONENT = 4000; function createRegisterEventWithLowercaseName(method) { return function (eventName, handler, context) { @@ -144,6 +148,14 @@ define(function (require) { // In case some people write `window.onresize = chart.resize` this.resize = zrUtil.bind(this.resize, this); + + + // Sort on demand + function prioritySortFunc(a, b) { + return a.prio - b.prio; + } + visualFuncs.sort(prioritySortFunc); + dataProcessorFuncs.sort(prioritySortFunc); } var echartsProto = ECharts.prototype; @@ -379,9 +391,7 @@ define(function (require) { coordSysMgr.update(ecModel, api); - doLayout.call(this, ecModel, payload); - - doVisualCoding.call(this, ecModel, payload); + doVisualEncoding.call(this, ecModel, payload, api); doRender.call(this, ecModel, payload); @@ -424,9 +434,7 @@ define(function (require) { return; } - doLayout.call(this, ecModel, payload); - - doVisualCoding.call(this, ecModel, payload); + doVisualEncoding.call(this, ecModel, payload); invokeUpdateMethod.call(this, 'updateView', ecModel, payload); }, @@ -443,7 +451,7 @@ define(function (require) { return; } - doVisualCoding.call(this, ecModel, payload); + doVisualEncoding.call(this, ecModel, payload); invokeUpdateMethod.call(this, 'updateVisual', ecModel, payload); }, @@ -460,7 +468,7 @@ define(function (require) { return; } - doLayout.call(this, ecModel, payload); + doLayout.call(this, ecModel, payload, this._api); invokeUpdateMethod.call(this, 'updateLayout', ecModel, payload); }, @@ -738,10 +746,8 @@ define(function (require) { * @private */ function processData(ecModel, api) { - each(PROCESSOR_STAGES, function (stage) { - each(dataProcessorFuncs[stage] || [], function (process) { - process(ecModel, api); - }); + each(dataProcessorFuncs, function (process) { + process.func(ecModel, api); }); } @@ -764,33 +770,32 @@ define(function (require) { } /** - * Layout before each chart render there series, after visual coding and data processing + * Layout before each chart render there series, special visual encoding stage * * @param {module:echarts/model/Global} ecModel * @private */ - function doLayout(ecModel, payload) { - var api = this._api; - each(layoutFuncs, function (layout) { - layout(ecModel, api, payload); + function doLayout(ecModel, payload, api) { + each(visualFuncs, function (visual) { + if (visual.isLayout) { + visual.func(ecModel, api, payload); + } }); } /** - * Code visual infomation from data after data processing + * Encode visual infomation from data after data processing * * @param {module:echarts/model/Global} ecModel * @private */ - function doVisualCoding(ecModel, payload) { + function doVisualEncoding(ecModel, payload, api) { ecModel.clearColorPalette(); ecModel.eachSeries(function (seriesModel) { seriesModel.clearColorPalette(); }); - each(VISUAL_CODING_STAGES, function (stage) { - each(visualCodingFuncs[stage] || [], function (visualCoding) { - visualCoding(ecModel, payload); - }); + each(visualFuncs, function (visual) { + visual.func(ecModel, api, payload); }); } @@ -959,18 +964,12 @@ define(function (require) { */ var eventActionMap = {}; - /** - * @type {Array.} - * @inner - */ - var layoutFuncs = []; - /** * Data processor functions of each stage * @type {Array.>} * @inner */ - var dataProcessorFuncs = {}; + var dataProcessorFuncs = []; /** * @type {Array.} @@ -979,11 +978,11 @@ define(function (require) { var optionPreprocessorFuncs = []; /** - * Visual coding functions of each stage + * Visual encoding functions of each stage * @type {Array.>} * @inner */ - var visualCodingFuncs = {}; + var visualFuncs = []; /** * Theme storage * @type {Object.} @@ -1154,15 +1153,21 @@ define(function (require) { }; /** - * @param {string} stage + * @param {number} [priority=1000] * @param {Function} processorFunc */ - echarts.registerProcessor = function (stage, processorFunc) { - if (zrUtil.indexOf(PROCESSOR_STAGES, stage) < 0) { - throw new Error('stage should be one of ' + PROCESSOR_STAGES); + echarts.registerProcessor = function (priority, processorFunc) { + if (typeof priority === 'function') { + processorFunc = priority; + priority = PRIORITY_PROCESSOR_FILTER; } - var funcs = dataProcessorFuncs[stage] || (dataProcessorFuncs[stage] = []); - funcs.push(processorFunc); + if (isNaN(priority)) { + throw new Error('Unkown processor priority'); + } + dataProcessorFuncs.push({ + prio: priority, + func: processorFunc + }); }; /** @@ -1211,25 +1216,44 @@ define(function (require) { }; /** - * @param {*} layout + * Layout is a special stage of visual encoding + * Most visual encoding like color are common for different chart + * But each chart has it's own layout algorithm + * + * @param {string} [priority=1000] + * @param {Function} layoutFunc */ - echarts.registerLayout = function (layout) { - // PENDING All functions ? - if (zrUtil.indexOf(layoutFuncs, layout) < 0) { - layoutFuncs.push(layout); + echarts.registerLayout = function (priority, layoutFunc) { + if (typeof priority === 'function') { + layoutFunc = priority; + priority = PRIORITY_VISUAL_LAYOUT; + } + if (isNaN(priority)) { + throw new Error('Unkown layout priority'); } + visualFuncs.push({ + prio: priority, + func: layoutFunc, + isLayout: true + }); }; /** - * @param {string} stage - * @param {Function} visualCodingFunc + * @param {string} [priority=3000] + * @param {Function} visualFunc */ - echarts.registerVisualCoding = function (stage, visualCodingFunc) { - if (zrUtil.indexOf(VISUAL_CODING_STAGES, stage) < 0) { - throw new Error('stage should be one of ' + VISUAL_CODING_STAGES); + echarts.registerVisual = function (priority, visualFunc) { + if (typeof priority === 'function') { + visualFunc = priority; + priority = PRIORITY_VISUAL_CHART; } - var funcs = visualCodingFuncs[stage] || (visualCodingFuncs[stage] = []); - funcs.push(visualCodingFunc); + if (isNaN(priority)) { + throw new Error('Unkown visual priority'); + } + visualFuncs.push({ + prio: priority, + func: visualFunc + }); }; /** @@ -1280,7 +1304,7 @@ define(function (require) { zrUtil.createCanvas = creator; }; - echarts.registerVisualCoding('echarts', zrUtil.curry( + echarts.registerVisual(PRIORITY_VISUAL_GLOBAL, zrUtil.curry( require('./visual/seriesColor'), '', 'itemStyle' )); echarts.registerPreprocessor(require('./preprocessor/backwardCompat')); @@ -1323,5 +1347,19 @@ define(function (require) { } ); + // PRIORITY + echarts.PRIORITY = { + PROCESSOR: { + FILTER: PRIORITY_PROCESSOR_FILTER, + STATISTIC: PRIORITY_PROCESSOR_STATISTIC + }, + VISUAL: { + LAYOUT: PRIORITY_VISUAL_LAYOUT, + GLOBAL: PRIORITY_VISUAL_GLOBAL, + CHART: PRIORITY_VISUAL_CHART, + COMPONENT: PRIORITY_VISUAL_COMPONENT + } + }; + return echarts; }); \ No newline at end of file diff --git a/src/layout/points.js b/src/layout/points.js index 70224441221654e163ff7faa7b56d6b9a1eb616d..467604c7e3e132b7a74ea3d77bd41a6ac5d36fb6 100644 --- a/src/layout/points.js +++ b/src/layout/points.js @@ -1,6 +1,6 @@ define(function (require) { - return function (seriesType, ecModel, api) { + return function (seriesType, ecModel) { ecModel.eachSeriesByType(seriesType, function (seriesModel) { var data = seriesModel.getData(); var coordSys = seriesModel.coordinateSystem;