提交 a08e744d 编写于 作者: L lang

重写 Model

上级 366dc77b
......@@ -4,7 +4,7 @@ define(function(require) {
var zrUtil = require('zrender/core/util');
var echartsAPIList = ['getZr', 'addProcessor', 'update', 'getCoordinateSystem'];
var echartsAPIList = ['getZr', 'update', 'getCoordinateSystem'];
function ExtensionAPI(echarts) {
zrUtil.each(echartsAPIList, function (name) {
......
......@@ -2,30 +2,32 @@ define(function(require) {
'use strict';
var Group = require('zrender/container/Group');
var Circle = require('zrender/graphic/Circle');
var ZImage = require('zrender/graphic/Image');
var Text = require('zrender/graphic/Text');
var Polygon = require('zrender/graphic/Polygon');
var Polyline = require('zrender/graphic/Polyline');
var pathTool = require('zrender/tool/path');
var transformPath = require('zrender/tool/transformPath');
var matrix = require('zrender/core/matrix');
return {
/**
* Create a group element
*/
createGroup: function (opts) {
return new Group(opts);
},
Group: require('zrender/container/Group'),
Image: require('zrender/graphic/ZImage'),
Text: require('zrender/graphic/Text'),
Circle: require('zrender/graphic/shape/Circle'),
Sector: require('zrender/graphic/shape/Sector'),
Polygon: require('zrender/graphic/shape/Polygon'),
Polyline: require('zrender/graphic/shape/Polyline'),
Rectangle: require('zrender/graphic/shape/Rectangle'),
/**
* Create a path element from path data string
*/
createPath: function (pathData, opts, rect) {
makePath: function (pathData, opts, rect) {
var path = pathTool.createFromString(pathData, opts);
if (rect) {
this.resizePath(path, rect);
......@@ -37,45 +39,20 @@ define(function(require) {
* Resize a path to fit the rect
*/
resizePath: function (path, rect) {
if (! path.applyTransform) {
return;
}
var pathRect = path.getBoundingRect();
var dx = rect.x - pathRect.x;
var dy = rect.y - pathRect.y;
var sx = rect.width / pathRect.width;
var sy = rect.height / pathRect.height;
var m = matrix.create();
matrix.translate(m, m, [dx, dy]);
matrix.translate(m, m, [rect.x, rect.y]);
matrix.scale(m, m, [sx, sy]);
// TODOTODOTODOTODO
transformPath(path, m);
},
/**
* Create a circle element
*/
createCircle: function () {
},
createImage: function () {
},
createText: function () {
},
createSector: function () {
},
createPolygon: function () {
},
createPolyline: function () {
matrix.translate(m, m, [-pathRect.x, -pathRect.y]);
path.applyTransform(m);
}
}
});
\ No newline at end of file
......@@ -36,7 +36,7 @@ define(function (require) {
if (proto.type) {
if (chartClassStore[proto.type]) {
// Error exists
// Warning
}
chartClassStore[proto.type] = ExtendedChart;
}
......
define(function (require) {
var Chart = require('../Chart');
var zrUtil = require('zrender/core/util');
require('./BarSeries');
var Bar = Chart.extend({
var Bar = require('../ChartView').extend({
type: 'bar',
init: function () {},
render: function (series, option, api) {
var coordinateSystemType = series.get('coordinateSystem');
render: function (seriesModel, ecModel, api) {
var coordinateSystemType = seriesModel.get('coordinateSystem');
if (coordinateSystemType === 'cartesian') {
this._renderCartesianBar(series, option, api);
this._renderCartesianBar(seriesModel, ecModel, api);
}
},
_renderCartesianBar: function (series, option, api) {
_renderCartesianBar: function (series, ecModel, api) {
// Currently only one grid is supported
var grid = api.getCoordinateSystem('grid', 0);
......
define(function (require) {
var stateSyncHelper = require('../../processor/legendFilterStateSyncHelper')('pieDataItemFilter');
var zrUtil = require('zrender/core/util');
var PieDataFilter = require('../../processor/Processor').extend({
type: 'pieDataItemFilter',
getInitialState: function (option) {
var pieNameList = zrUtil.map(option.get('legend.data') || [], function (item) {
return item.name == null ? item.name : item;
});
var pieSeries = option.getSeriesByType('pie');
pieNameList = zrUtil.filter(pieNameList, function (name) {
if (name) {
for (var i = 0; i < pieSeries.length; i++) {
if (pieSeries[i].getData().getItemByName(name)) {
return true;
}
}
}
});
return {
all: pieNameList,
selected: pieNameList.slice()
};
},
syncState: function (globalState) {
stateSyncHelper(this.state, globalState);
},
process: function (option) {
option.eachSeries(function (series) {
if (series.type === 'pie') {
series.getData().filter(function (dataItem) {
return this.state.indexOf(dataItem.name) >= 0;
}, this);
}
}, this);
}
});
return PieDataFilter;
define(function () {
return function (ecModel) {
var legendModel = legendModel.getComponent('legend');
ecModel.eachSeries(function (series) {
if (series.type === 'pie') {
series.getData().filter(function (dataItem) {
return legendModel.isSelected(dataItem.name);
}, this);
}
}, this);
};
});
\ No newline at end of file
define(function (require) {
require('./PieSeries');
var DataItemFilter = require('./DataItemFilter');
var Pie = require('../Chart').extend({
var Pie = require('../ChartView').extend({
type: 'pie',
init: function (api) {
var dataItemFilter = new DataItemFilter();
this._dataItemFilter = dataItemFilter;
api.addProcessor(dataItemFilter, true);
},
render: function (series, option, api) {
render: function (seriesModel, ecModel, api) {
},
dispose: function () {}
......
define(function (require) {
return require('../Component').extend({
return require('../ComponentView').extend({
type: 'dataZoom',
init: function (echarts) {
},
render: function (option) {
......
define(function(require) {
'use strict';
var zrUtil = require('zrender/core/util');
return require('../model/Model').extend({
type: 'legend',
init: function (option) {
this._selected = {};
this._extendSelected(option.selected);
},
mergeOption: function (option) {
zrUtil.merge(this._option, option);
this._extendSelected(option.selected);
},
_extendSelected: function (newSelected) {
if (newSelected) {
for (var name in newSelected) {
this._selected[name] = !!newSelected[name];
}
}
},
select: function (name) {
this._selected[name] = true;
},
unSelect: function (name) {
this._selected[name] = false;
},
isSelected: function (name) {
return this._selected[name] === true;
}
});
});
\ No newline at end of file
define(function (require) {
var linearMap = require('../core/number').linearMap;
var linearMap = require('../util/number').linearMap;
var zrUtil = require('zrender/core/util');
/**
* @name module:echarts/coord/CartesianAxis
* @constructor
*/
var Axis = function (dimension, scale, coordExtent) {
var Axis = function (dim, scale, coordExtent) {
/**
* Axis dimension. Such as 'x', 'y', 'z'
* @type {string}
*/
this.dimension = dimension;
this.dim = dim;
/**
* Axis scale
......
define(function(require) {
'use strict';
var AxisModel = require('../model/Component').extend({
type: 'axis',
mergeOption: function (option) {
},
setRange: function (start, end) {
this._range[0] = start;
this._range[1] = end;
}
});
AxisModel.AxisX = AxisModel.extend({
type: 'axisX'
});
AxisModel.AxisY = AxisModel.extend({
type: 'axisY'
});
return AxisModel;
});
\ No newline at end of file
......@@ -88,7 +88,7 @@ define(function (require) {
* @param {module:echarts/coord/Cartesian.Axis}
*/
addAxis: function (axis) {
var dim = axis.dimension;
var dim = axis.dim;
this._axis[dim] = axis;
......
......@@ -10,7 +10,10 @@ define(function(require, factory) {
var Axis2D = require('./CartesianAxis2D');
var OrdinalScale = require('../scale/Ordinal');
var IntervalScale = require('../scale/Interval');
var numberUtil = require('../core/number');
var numberUtil = require('../util/number');
// 依赖 GridModel 做预处理
require('./GridModel');
function Grid() {
......@@ -273,14 +276,17 @@ define(function(require, factory) {
var data = series.getData();
if (data.type === 'list') {
if (data.dataDimension === 2) {
var categoryAxis = cartesian.getAxisByScale('ordinal');
if (! categoryAxis || categoryAxis.dim === 'x') {
data.eachY(function (value) {
axisData.y.push(value);
});
}
if (! categoryAxis || categoryAxis.dim === 'y') {
data.eachX(function (value) {
axisData.x.push(value);
});
}
data.eachY(function (value) {
axisData.y.push(value);
});
}
}
}, this);
......
define(function(require) {
'use strict';
return require('../../model/Component').extend({
type: 'grid'
});
});
\ No newline at end of file
......@@ -62,7 +62,7 @@ define(function(require) {
/**
* In-place filter
*/
filter: function (cb, context) {
filterInPlace: function (cb, context) {
context = context || this;
if (this.depth > 1) {
createArrayIterWithDepth(
......@@ -77,7 +77,7 @@ define(function(require) {
/**
* In-place map
*/
map: function (cb, context) {
mapInPlace: function (cb, context) {
context = context || this;
if (this.depth > 1) {
createArrayIterWithDepth(
......@@ -98,57 +98,84 @@ define(function(require) {
}
},
/**
* Get x of single data item by a given data index.
* Get x of single data item.
* can be overwritten
* @param {*} item
* @param {number} idx
* @return {number}
*/
getX: function (idx) {
var item = this.elements[idx];
getX: function (item, idx) {
// Use idx as x if data is 1d
// Usually when xAxis is category axis
return this.dataDimension === 1 ? idx : item.value[0];
},
setX: function (item, x) {
if (this.dataDimension > 1) {
item.value[0] = x;
}
},
/**
* Get y of single data item by a given data index.
* Get y of single data item.
* can be overwritten
* @param {number} idx
* @param {*} item
* @return {number}
*/
getY: function (idx) {
var item = this.elements[idx];
getY: function (item) {
if (this.dataDimension > 1) {
return item.value[1];
}
else {
// Value is a single number if data is 1d
return item.value;
}
},
setY: function (item, y) {
if (this.dataDimension > 1) {
item.value[1] = y;
}
else {
item.value = y;
}
},
/**
* Get z of single data item by a given data index.
* Get z of single data item.
* can be overwritten
* @param {number} idx
* @param {*} item
* @return {number}
*/
getZ: function (idx) {
var item = this.elements[idx];
getZ: function (item) {
if (this.dataDimension > 2) {
return item.value[2];
}
},
setZ: function (item, z) {
if (this.dataDimension > 2) {
item.value[2] = z;
}
},
/**
* Get value of single data item by a given data index.
* Get value of single data item.
* can be overwritten
* @param {number} idx
* @param {*} item
* @return {number}
*/
getValue: function (idx) {
var item = this.elements[idx];
getValue: function (item) {
// PENDING
return item.value[this.dataDimension];
},
setValue: function (item, z) {
item.value[this.dataDimension] = z;
},
clone: function () {
// Clone with depth
// Clone
}
};
......@@ -156,7 +183,7 @@ define(function(require) {
zrUtil.each(['each', 'map', 'filter'], function (iterType) {
List.prototype[iterType + name] = function (cb, context) {
this[iterType](function (item, idx) {
return cb && cb.call(context || this, this['get' + name], idx);
return cb && cb.call(context || this, this['get' + name](item, idx));
}, context);
};
});
......@@ -165,7 +192,6 @@ define(function(require) {
List.fromArray = function (data) {
var list = new List();
// Normalize data
// 2D Array
list.elements = zrUtil.map(data, function (dataItem) {
if (dataItem !== Object(dataItem)) {
return {
......
define(function (require) {
var config = require('./config');
var OptionModel = require('./model/Option');
var Model = require('./model/Model');
var GlobalModel = require('./model/Global');
var zrUtil = require('zrender/core/util');
var Chart = require('./chart/Chart');
var Component = require('./component/Component');
......@@ -11,7 +10,7 @@ define(function (require) {
var zrender = require('zrender');
var startupProcessorClasses = [];
var processors = [];
/**
* @module echarts~ECharts
......@@ -23,13 +22,6 @@ define(function (require) {
theme = zrUtil.clone(theme || {});
zrUtil.merge(theme, config);
// Create processors
this._processors = zrUtil.map(startupProcessorClasses, function (Processor) {
var processor = new Processor();
processor.init();
return processor;
});
this._theme = theme;
this._chartsList = [];
......@@ -40,11 +32,6 @@ define(function (require) {
this._extensionAPI = new ExtensionAPI(this);
// Pending
// optionModel as parent ?
var globalState = new Model({});
this._state = globalState;
this._coordinateSystem = new CoordinateSystemManager();
};
......@@ -58,45 +45,22 @@ define(function (require) {
rawOption = zrUtil.clone(rawOption);
zrUtil.merge(rawOption, this._theme);
var option = new OptionModel(rawOption);
var ecModel = new GlobalModel(rawOption);
// Add series index
option.eachSeries(function (series, seriesIndex) {
ecModel.eachSeries(function (series, seriesIndex) {
series.seriesIndex = seriesIndex;
});
this._originalOption = option;
// Processed option is same with originalOption before processing
// PENDING
this._processedOption = option;
this._model = ecModel;
this._prepareComponents(option);
this._prepareComponents(ecModel);
this._prepareCharts(option);
zrUtil.each(this._processors, function (processor) {
processor.optionChanged(option);
});
this._prepareCharts(ecModel);
this.updateImmediately();
},
addProcessor: function (processor, oneForEachType) {
var processors = this._processors;
if (zrUtil.indexOf(processors, processor) >= 0) {
return;
};
if (oneForEachType) {
if (zrUtil.filter(processors, function (exist) {
return exist.type === processor.type;
}).length) {
return;
}
}
processors.push(processor);
},
getCoordinateSystem: function (type, idx) {
return this._coordinateSystem.get(type, idx);
},
......@@ -106,22 +70,22 @@ define(function (require) {
},
updateImmediately: function () {
var processedOption = this._processOption(this._originalOption);
this._model.restore();
this._processedOption = processedOption;
this._processData(this._model);
this._coordinateSystem.update(processedOption);
this._coordinateSystem.update(this._model);
this._doRender(processedOption);
this._doRender(this._model);
},
resize: function () {
this._coordinateSystem.resize(this._processedOption, this._extensionAPI);
this._coordinateSystem.resize(this._model, this._extensionAPI);
},
_prepareCharts: function (option) {
_prepareCharts: function (ecModel) {
var chartUsedMap = {};
zrUtil.each(option.get('series'), function (series, idx) {
zrUtil.each(ecModel.get('series'), function (series, idx) {
var id = series.type + '_' + (series.name || idx);
chartUsedMap[id] = true;
......@@ -154,12 +118,12 @@ define(function (require) {
};
},
_prepareComponents: function (option) {
_prepareComponents: function (ecModel) {
Component.eachAvailableComponent(function (componentType) {
var componentsMap = this._componentsMap;
var componentsList = this._componentsList;
var componentOption = option.get(componentType);
var componentOption = ecModel.get(componentType);
var component = componentsMap[componentType];
if (componentOption) {
if (! component) {
......@@ -181,16 +145,10 @@ define(function (require) {
}, this);
},
_processOption: function (option) {
// TODO Performance
option = option.clone();
zrUtil.each(this._processors, function (processor) {
processor.syncState(this._state);
processor.process(option);
}, this);
return option;
_processData: function (ecModel) {
zrUtil.each(processors, function (processor) {
processor(ecModel);
});
},
_doRender: function (optionModel, stateModel) {
......@@ -200,14 +158,12 @@ define(function (require) {
component.render(optionModel, stateModel, api);
}, this);
// Render all charts
optionModel.eachSeries(function (series, idx) {
var id = series.type + '_' + (series.name || idx);
});
zrUtil.each(this._charts, function (chart) {
var group = chart.render(optionModel, api);
optionModel.eachSeries(function (seriesModel, idx) {
var id = seriesModel.get('type') + '_' + (seriesModel.get('name') || idx);
var chart = this._chartsMap[id];
var group = chart.render(seriesModel, optionModel, api);
this.zr.addElement(group);
}, this);
// TODO
// Remove group of unused chart
},
......@@ -234,7 +190,7 @@ define(function (require) {
return new ECharts(dom, theme);
},
registerStartupProcessor: function (Processor) {
registreProcessor: function (Processor) {
},
......@@ -244,9 +200,9 @@ define(function (require) {
};
echarts.registerStartupProcessor(require('./processor/AxisDefault'));
echarts.registreProcessor(require('./processor/AxisDefault'));
echarts.registerStartupProcessor(require('./processor/SeriesFilter'));
echarts.registreProcessor(require('./processor/SeriesFilter'));
return echarts;
});
\ No newline at end of file
......@@ -8,7 +8,7 @@
*/
define(function (require) {
var KDTree = require('../data/KDTree');
var KDTree = require('../util/KDTree');
var vec2 = require('zrender/tool/vector');
var v2Create = vec2.create;
var v2DistSquare = vec2.distSquare;
......@@ -101,7 +101,7 @@ define(function (require) {
}
EdgeBundling.prototype = {
constructor: EdgeBundling,
run: function (rawEdges) {
......@@ -389,7 +389,7 @@ define(function (require) {
var turningAngleCos = vec2.dot(vTmp, v10);
// Turning angle is to large
if (turningAngleCos < maxTurningAngleCos) {
// Calculat p's project point on vector p1-p0
// Calculat p's project point on vector p1-p0
// and distance to the vector
vec2.scaleAndAdd(
project, p0, v10, len * turningAngleCos
......
......@@ -6,20 +6,6 @@
define(function (require) {
function TreeMapLayout(opts) {
/**
* areas 每个子矩形面积
* x 父矩形横坐标
* y 父矩形横坐标
* width 父矩形宽
* height 父矩形高
*/
var row = {
x: opts.x,
y: opts.y,
width: opts.width,
height: opts.height
};
this.x = opts.x;
this.y = opts.y;
this.width = opts.width;
......
define(function(require) {
'use strict';
var componentModelClasses = {};
var Model = require('./Model');
var ComponentModel = Model.extend({
type: 'component'
});
ComponentModel.extend = function (opts) {
var SubComponentModel = Model.extend(opts);
var componentType = opts.type;
if (componentType) {
if (componentModelClasses[componentType]) {
// Warning
}
componentModelClasses[componentType] = SubComponentModel;
}
return SubComponentModel;
};
ComponentModel.create
return ComponentModel;
});
\ No newline at end of file
define(function (require) {
var zrUtil = require('zrender/core/util');
var Model = require('./Model');
var SeriesModel = require('./SeriesModel');
var ComponentModel = require('./Component/Model');
var GlobalModel = Model.extend({
constructor: GlobalModel,
init: function (option) {
this._components = {};
this._series = [];
this._seriesMap = {};
this._option = {};
this.mergeOption(option);
},
mergeOption: function (newOption) {
zrUtil.each(newOption.series, function (series) {
var seriesName = series.name;
var seriesModel = this._seriesMap[seriesName];
if (seriesModel) {
seriesModel.mergeOption(series);
}
else {
seriesModel = SeriesModel.create(series);
this._seriesMap[seriesName] = seriesModel;
this._series.push(seriesModel);
}
}, this);
// 同步 Option
this._option.series = this._series.map(function (seriesModel) {
return seriesModel.getOption();
});
for (var name in newOption) {
if (this._components[name]) {
this._components[name].mergeOption(newOption[name]);
}
else {
var componentOption = newOption[name];
var componentModel = ComponentModel.create(name, componentOption);
if (! componentModel) {
// 如果不存在对应的 model 则直接 merge
if (typeof componentOption === 'object') {
componentOption = zrUtil.merge(this._option[name] || {}, componentOption);
}
this._option[name] = componentOption;
}
else {
this._components[name] = componentModel;
}
if (componentModel) {
// 同步 Option
this._option[name] = componentModel.getOption();
}
}
}
},
getComponent: function (name) {
return this._components[name];
},
getSeriesByName: function (name) {
return this._seriesMap[name];
},
getSeriesByType: function (type) {
return zrUtil.filter(this._series, function (series) {
return series.type === type;
});
},
getSeriesAll: function (seriesIndex) {
return this._series[seriesIndex];
},
eachSeries: function (cb, context) {
zrUtil.each(this._series, cb, context);
},
filterSeries: function (cb, context) {
this._series = zrUtil.filter(this._series, cb, context);
}
});
return GlobalModel;
});
\ No newline at end of file
......@@ -6,8 +6,6 @@ define(function (require) {
this.parent = parent || null;
this.option = option;
this.init(option);
}
......@@ -15,13 +13,22 @@ define(function (require) {
constructor: Model,
init: function (option) {},
init: function (option) {
this._option = option;
},
/**
* 从新的 Option merge
*/
mergeOption: function (option) {
zrUtil.merge(this._option, option);
},
get: function (path) {
if (typeof path == 'string') {
path = path.split('.');
}
var obj = this.option;
var obj = this._option;
for (var i = 0; i < path.length; i++) {
obj = obj[path[i]];
if (obj == null) {
......@@ -34,43 +41,16 @@ define(function (require) {
return obj;
},
set: function (path, value) {
if (typeof path == 'string') {
path = path.split('.');
}
var obj = this.option;
var key;
for (var i = 0; i < path.length - 1; i++) {
key = path[i];
if (obj == null) {
// Create an empty object if not exists
obj[key] = {};
}
obj = obj[key];
}
key = path[i];
obj[key] = value;
return value;
getOption: function () {
return this._option;
},
getSubModel: function (path) {
var Ctor = this.constructor;
return new Ctor(this.get(path), this);
},
restore: function () {},
// Pending
clone: function () {
var Ctor = this.constructor;
// PENDING Deep clone ?
return new Ctor(zrUtil.clone(this._option, true));
},
merge: function (obj) {
zrUtil.merge(this._option, obj, true);
},
defaults: function (obj) {
zrUtil.merge(this._option, obj);
}
};
......
define(function (require) {
var zrUtil = require('zrender/core/util');
var Model = require('./Model');
var SeriesModel = require('./SeriesModel');
var OptionModel = Model.extend({
constructor: OptionModel,
init: function (option) {
this._series = zrUtil.map(option.series, function (seriesOption) {
return SeriesModel.create(seriesOption);
});
},
getSeriesByName: function (name) {
var series = this._series[i];
for (var i = 0; i < series.length; i++) {
if (series[i].name === name) {
return series;
}
}
},
getSeriesByType: function (type) {
return zrUtil.filter(this._series, function (series) {
return series.type === type;
});
},
getSeriesAll: function (seriesIndex) {
return this._series[seriesIndex];
},
eachSeries: function (cb, context) {
zrUtil.each(this._series, cb, context);
},
filterSeries: function (cb, context) {
this._series = zrUtil.filter(this._series, cb, context);
}
});
return OptionModel;
});
\ No newline at end of file
......@@ -16,6 +16,10 @@ define(function(require) {
this._data = this.getInitialData(seriesOption);
},
mergeOption: function (newSeriesOption) {
this._data = this.getInitialData(newSeriesOption);
},
/**
* Init a data structure from data related option in series
* Must be overwritten
......@@ -36,7 +40,7 @@ define(function(require) {
var ExtendedSeriesModel = Model.extend.call(this);
if (opts.type) {
if (seriesModelClassesStore[opts.type]) {
// Error exists
// Warning
}
seriesModelClassesStore[opts.type] = ExtendedSeriesModel;
}
......
......@@ -6,11 +6,7 @@ define(function(require) {
type: 'axisRangeFilter',
getInitialState: function () {
},
optionChanged: function (option, globalState) {
optionChanged: function (option) {
},
......
define(function(require) {
'use strict';
var zrUtil = require('zrender/core/util');
var Processor = function () {};
Processor.prototype = {
constructor: Processor,
type: '',
// Processor 第一次使用的时候调用
init: function () {
this.state = this.getInitialState();
},
// Should be overwritten
getInitialState: function () { return {} },
setState: function (state) {},
optionChanged: function (optionChanged) {},
syncState: function (globalState) {},
// Should be overwritten
process: function (option) {}
};
Processor.extend = function (proto) {
var Super = this;
var ExtendedProcessor = function () {
Super.call(this);
};
for (var name in proto) {
ExtendedProcessor.prototype[name] = proto[name];
}
ExtendedProcessor.extend = Super.extend;
zrUtil.inherits(ExtendedProcessor, Super);
return ExtendedProcessor;
}
return Processor;
});
\ No newline at end of file
define(function (require) {
var zrUtil = require('zrender/core/util');
var SeriesFilter = require('./Processor').extend({
type: 'seriesFilter',
getInitialState: function () {
return {
all: [],
selected: []
};
},
optionChanged: function (option, globalState) {
// Get series legend selector
var seriesNameList = zrUtil.map(option.get('legend.data') || [], function (item) {
return item.name == null ? item.name : item;
});
seriesNameList = zrUtil.filter(seriesNameList, function (item) {
return item && option.getSeriesByName(item) != null;
});
var state = this.state;
state.all = seriesNameList;
state.selected = zrUtil.intersect(seriesNameList, state.selected);
// TODO Sync state to global
},
syncState: function (globalState) {
var obj = globalState.query('legend.selected', []).findWhere({
name: 'seriesFilter'
}, {
name: 'seriesFilter'
});
this.state.all = obj.all;
this.state.selected = obj.selected;
},
process: function (option) {
return option.filterSeries(function (series) {
return zrUtil.indexOf(this.state.selected, series.name) > 0;
}, this);
}
});
return SeriesFilter;
return function (ecModel) {
var legendModel = ecModel.getComponent('legend');
return ecModel.filterSeries(function (series) {
return legendModel.isSelected(series.name);
}, this);
}
});
\ No newline at end of file
define(function() {
'use strict';
return function (option) {
var stackedMap = {};
option.eachSeries(function (series) {
var data = series.getData();
if (data.type === 'list' && data.dataDimension === 1) {
var id = series.get('name') + '_' + series.get('name');
data.eachY(function (y, idx) {
stackedMap[idx] = stackedMap[idx] || 0;
stackedMap[idx] += y;
});
}
});
};
});
\ No newline at end of file
/**
* 数值处理模块
* @module echarts/core/number
* @module echarts/util/number
*/
define(function (require) {
......@@ -11,7 +11,7 @@ define(function (require) {
/**
* Linear mapping a value from domain to range
* @memberOf module:echarts/core/number
* @memberOf module:echarts/util/number
* @param {number} val
* @param {Array.<number>} domain Domain extent
* @param {Array.<number>} range Range extent
......@@ -34,7 +34,7 @@ define(function (require) {
/**
* Convert a percent string to absolute number.
* Returns NaN if percent is not a valid string or number
* @memberOf module:echarts/core/number
* @memberOf module:echarts/util/number
* @param {string|number} percent
* @param {number} all
* @return {number}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册