123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- import { curry, each, assert, extend, map, keys } from 'zrender/lib/core/util.js';
- import { makeInner } from '../../util/model.js';
- var inner = makeInner();
- function linkSeriesData(opt) {
- var mainData = opt.mainData;
- var datas = opt.datas;
- if (!datas) {
- datas = {
- main: mainData
- };
- opt.datasAttr = {
- main: 'data'
- };
- }
- opt.datas = opt.mainData = null;
- linkAll(mainData, datas, opt);
-
- each(datas, function (data) {
- each(mainData.TRANSFERABLE_METHODS, function (methodName) {
- data.wrapMethod(methodName, curry(transferInjection, opt));
- });
- });
-
- mainData.wrapMethod('cloneShallow', curry(cloneShallowInjection, opt));
-
-
- each(mainData.CHANGABLE_METHODS, function (methodName) {
- mainData.wrapMethod(methodName, curry(changeInjection, opt));
- });
-
- assert(datas[mainData.dataType] === mainData);
- }
- function transferInjection(opt, res) {
- if (isMainData(this)) {
-
- var datas = extend({}, inner(this).datas);
- datas[this.dataType] = res;
- linkAll(res, datas, opt);
- } else {
-
- linkSingle(res, this.dataType, inner(this).mainData, opt);
- }
- return res;
- }
- function changeInjection(opt, res) {
- opt.struct && opt.struct.update();
- return res;
- }
- function cloneShallowInjection(opt, res) {
-
-
-
-
- each(inner(res).datas, function (data, dataType) {
- data !== res && linkSingle(data.cloneShallow(), dataType, res, opt);
- });
- return res;
- }
- function getLinkedData(dataType) {
- var mainData = inner(this).mainData;
- return dataType == null || mainData == null ? mainData : inner(mainData).datas[dataType];
- }
- function getLinkedDataAll() {
- var mainData = inner(this).mainData;
- return mainData == null ? [{
- data: mainData
- }] : map(keys(inner(mainData).datas), function (type) {
- return {
- type: type,
- data: inner(mainData).datas[type]
- };
- });
- }
- function isMainData(data) {
- return inner(data).mainData === data;
- }
- function linkAll(mainData, datas, opt) {
- inner(mainData).datas = {};
- each(datas, function (data, dataType) {
- linkSingle(data, dataType, mainData, opt);
- });
- }
- function linkSingle(data, dataType, mainData, opt) {
- inner(mainData).datas[dataType] = data;
- inner(data).mainData = mainData;
- data.dataType = dataType;
- if (opt.struct) {
- data[opt.structAttr] = opt.struct;
- opt.struct[opt.datasAttr[dataType]] = data;
- }
-
- data.getLinkedData = getLinkedData;
- data.getLinkedDataAll = getLinkedDataAll;
- }
- export default linkSeriesData;
|