提交 6a087b7e 编写于 作者: L lang

modelUtil.getFormattedLabel arguments tweak, can give other data. Graph edge add label

上级 498eb5a7
......@@ -4,6 +4,8 @@ define(function (require) {
var List = require('../../data/List');
var zrUtil = require('zrender/core/util');
var modelUtil = require('../../util/model');
var Model = require('../../model/Model');
var createGraphFromNodeEdge = require('../helper/createGraphFromNodeEdge');
......@@ -19,24 +21,37 @@ define(function (require) {
return this._categoriesData;
};
this.fillDataTextStyle(option.edges || option.links);
this._updateCategoriesData();
this._updateEdgeDataModel();
},
mergeOption: function (option) {
GraphSeries.superApply(this, 'mergeOption', arguments);
this.fillDataTextStyle(option.edges || option.links);
this._updateCategoriesData();
this._updateEdgeDataModel();
},
mergeDefaultAndTheme: function (option) {
GraphSeries.superApply(this, 'mergeDefaultAndTheme', arguments);
modelUtil.defaultEmphasis(option.edgeLabel, modelUtil.LABEL_OPTIONS);
},
getInitialData: function (option, ecModel) {
var edges = option.edges || option.links;
var nodes = option.data || option.nodes;
if (nodes && edges) {
var graph = createGraphFromNodeEdge(nodes, edges, this, true);
var list = graph.data;
var nodeData = graph.data;
var edgeData = graph.edgeData;
var self = this;
// Overwrite list.getItemModel to
list.wrapMethod('getItemModel', function (model) {
// Overwrite nodeData.getItemModel to
nodeData.wrapMethod('getItemModel', function (model) {
var categoriesModels = self._categoriesModels;
var categoryIdx = model.getShallow('category');
var categoryModel = categoriesModels[categoryIdx];
......@@ -46,7 +61,29 @@ define(function (require) {
}
return model;
});
return list;
var edgeLabelModel = this.getModel('edgeLabel');
var wrappedGetEdgeModel = function (path, parentModel) {
var pathArr = (path || '').split('.');
if (pathArr[0] === 'label') {
parentModel = parentModel
|| edgeLabelModel.getModel(pathArr.slice(1));
}
var model = Model.prototype.getModel.call(this, pathArr, parentModel);
model.getModel = wrappedGetEdgeModel;
return model;
};
edgeData.wrapMethod('getItemModel', function (model) {
// FIXME Wrap get method ?
model.getModel = wrappedGetEdgeModel;
return model;
});
// Set edge data again to ensure the backup data has the wrapped method
// FIXME
graph.setEdgeData(edgeData);
return nodeData;
}
},
......@@ -69,6 +106,10 @@ define(function (require) {
return this.getGraph().edgeData;
},
getEdgeDataModel: function () {
return this._edgeDataModel;
},
/**
* @return {module:echarts/data/List}
*/
......@@ -76,6 +117,25 @@ define(function (require) {
return this._categoriesData;
},
_updateEdgeDataModel: function () {
var graph = this.getGraph();
var edgeData = this.getEdgeData();
var data = this.getData();
this._edgeDataModel = modelUtil.createDataFormatModel(edgeData, this);
this._edgeDataModel.formatTooltip = function (dataIndex) {
var params = this.getDataParams(dataIndex);
var edge = graph.getEdgeByIndex(dataIndex);
var sourceName = data.getName(edge.node1.dataIndex);
var targetName = data.getName(edge.node2.dataIndex);
var html = sourceName + ' > ' + targetName;
if (params.value) {
html += ' : ' + params.value;
}
return html;
};
},
_updateCategoriesData: function () {
var categories = zrUtil.map(this.option.categories || [], function (category) {
// Data must has value
......@@ -136,6 +196,13 @@ define(function (require) {
symbol: 'circle',
symbolSize: 10,
edgeSymbol: ['none', 'none'],
edgeSymbolSize: 10,
edgeLabel: {
normal: {},
emphasis: {}
},
draggable: false,
roam: false,
......@@ -159,7 +226,8 @@ define(function (require) {
label: {
normal: {
show: false
show: false,
formatter: '{b}'
},
emphasis: {
show: true
......
......@@ -45,23 +45,11 @@ define(function (require) {
symbolDraw.updateData(data);
var edgeData = seriesModel.getEdgeData();
var edgeDataModel = modelUtil.createDataFormatModel(edgeData, seriesModel);
edgeDataModel.formatTooltip = function (dataIndex) {
var params = this.getDataParams(dataIndex);
var edge = data.graph.getEdgeByIndex(dataIndex);
var sourceName = data.getName(edge.node1.dataIndex);
var targetName = data.getName(edge.node2.dataIndex);
var html = sourceName + ' > ' + targetName;
if (params.value) {
html += ' : ' + params.value;
}
return html;
};
lineDraw.updateData(edgeData, null, null);
lineDraw.updateData(edgeData);
edgeData.eachItemGraphicEl(function (el) {
el.traverse(function (child) {
child.dataModel = edgeDataModel;
child.dataModel = seriesModel.getEdgeDataModel();
});
});
......
......@@ -266,28 +266,28 @@ define(function (require) {
},
itemModel.getModel('lineStyle.normal').getLineStyle()
));
var defaultColor = lineData.getItemVisual(idx, 'color') || '#000';
var label = this.childOfName('label');
label.afterUpdate = lineAfterUpdate;
label.setStyle({
text: labelModel.get('show')
? zrUtil.retrieve(
seriesModel.getFormattedLabel(idx, 'normal'),
seriesModel.getFormattedLabel(idx, 'normal', lineData),
defaultText
)
: '',
textFont: textStyleModel.getFont(),
fill: textStyleModel.getTextColor() || lineData.getItemVisual(idx, 'color') || '#000'
fill: textStyleModel.getTextColor() || defaultColor
});
label.hoverStyle = {
text: labelHoverModel.get('show')
? zrUtil.retrieve(
seriesModel.getFormattedLabel(idx, 'emphasis'),
seriesModel.getFormattedLabel(idx, 'emphasis', lineData),
defaultText
)
: '',
textFont: textStyleHoverModel.getFont(),
fill: textStyleHoverModel.getTextColor()
fill: textStyleHoverModel.getTextColor() || defaultColor
};
label.__textAlign = textStyleModel.get('align');
label.__verticalAlign = textStyleModel.get('baseline');
......
......@@ -46,15 +46,13 @@ define(function(require) {
}).join('<br />');
},
getFormattedLabel: function (dataIndex, status, formatter, indicatorIndex) {
getFormattedLabel: function (dataIndex, status, otherData, indicatorIndex) {
status = status || 'normal';
var data = this.getData();
var data = otherData || this.getData();
var itemModel = data.getItemModel(dataIndex);
var params = this.getDataParams(dataIndex);
if (formatter == null) {
formatter = itemModel.get(['label', status, 'formatter']);
}
var params = this.getDataParams(dataIndex, otherData);
var formatter = itemModel.get(['label', status, 'formatter']);
// Get value of specified indicator
params.value = params.value[indicatorIndex || 0];
if (typeof formatter === 'function') {
......
......@@ -367,6 +367,7 @@ define(function (require) {
return;
}
// Fixme First time update ?
ecModel.restoreData();
// TODO
......
......@@ -78,6 +78,10 @@ define(function (require) {
var obj = this.option;
var parentModel = this.parentModel;
for (var i = 0; i < path.length; i++) {
// Ignore empty
if (!path[i]) {
continue;
}
// obj could be number/string/... (like 0)
obj = (obj && typeof obj === 'object') ? obj[path[i]] : null;
if (obj == null) {
......
......@@ -70,19 +70,16 @@ define(function(require) {
zrUtil.merge(option, this.getDefaultOption());
// Default label emphasis `position` and `show`
// FIXME Set label in merge
// FIXME Set label in mergeOption
modelUtil.defaultEmphasis(option.label, modelUtil.LABEL_OPTIONS);
if (option.data) {
this._fillDataTextStyle(option.data);
}
this.fillDataTextStyle(option.data);
},
mergeOption: function (newSeriesOption, ecModel) {
newSeriesOption = zrUtil.merge(this.option, newSeriesOption, true);
if (newSeriesOption.data) {
this._fillDataTextStyle(newSeriesOption.data);
}
this.fillDataTextStyle(newSeriesOption.data);
var data = this.getInitialData(newSeriesOption, ecModel);
// TODO Merge data?
if (data) {
......@@ -91,13 +88,15 @@ define(function(require) {
}
},
_fillDataTextStyle: function (data) {
fillDataTextStyle: function (data) {
// Default data label emphasis `position` and `show`
// FIXME Tree structure data ?
// FIXME Performance ?
for (var i = 0; i < data.length; i++) {
if (data[i] && data[i].label) {
modelUtil.defaultEmphasis(data[i].label, modelUtil.LABEL_OPTIONS);
if (data) {
for (var i = 0; i < data.length; i++) {
if (data[i] && data[i].label) {
modelUtil.defaultEmphasis(data[i].label, modelUtil.LABEL_OPTIONS);
}
}
}
},
......
......@@ -239,10 +239,11 @@ define(function(require) {
/**
* Get params for formatter
* @param {number} dataIndex
* @param {module:echarts/data/List} [otherData]
* @return {Object}
*/
getDataParams: function (dataIndex) {
var data = this.getData();
getDataParams: function (dataIndex, otherData) {
var data = otherData || this.getData();
var seriesIndex = this.seriesIndex;
var seriesName = this.name;
......@@ -273,18 +274,16 @@ define(function(require) {
* Format label
* @param {number} dataIndex
* @param {string} [status='normal'] 'normal' or 'emphasis'
* @param {Function|string} [formatter] Default use the `itemStyle[status].label.formatter`
* @param {module:echarts/data/List} [otherData]
* @return {string}
*/
getFormattedLabel: function (dataIndex, status, formatter) {
getFormattedLabel: function (dataIndex, status, otherData) {
status = status || 'normal';
var data = this.getData();
var data = otherData || this.getData();
var itemModel = data.getItemModel(dataIndex);
var params = this.getDataParams(dataIndex);
if (formatter == null) {
formatter = itemModel.get(['label', status, 'formatter']);
}
var params = this.getDataParams(dataIndex, otherData);
var formatter = itemModel.get(['label', status, 'formatter']);
if (typeof formatter === 'function') {
params.status = status;
......@@ -298,12 +297,13 @@ define(function(require) {
/**
* Get raw value in option
* @param {number} idx
* @param {module:echarts/data/List} [otherData]
* @return {Object}
*/
getRawValue: function (idx) {
var itemModel = this.getData().getItemModel(idx);
if (itemModel && itemModel.option != null) {
var dataItem = itemModel.option;
getRawValue: function (idx, otherData) {
var data = otherData || this.getData();
var dataItem = data.getRawDataItem(idx);
if (dataItem != null) {
return (zrUtil.isObject(dataItem) && !zrUtil.isArray(dataItem))
? dataItem.value : dataItem;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册