cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
174 lines (173 loc) • 5.63 kB
JavaScript
import { normalizeToArray } from "../util/model.mjs";
import { each, isTypedArray, setAsPrimitive, clone, map, isArray } from "../../../zrender/lib/core/util.mjs";
var QUERY_REG = /^(min|max)?(.+)$/;
var OptionManager = function() {
function OptionManager2(api) {
this._timelineOptions = [];
this._mediaList = [];
this._currentMediaIndices = [];
this._api = api;
}
OptionManager2.prototype.setOption = function(rawOption, optionPreprocessorFuncs, opt) {
if (rawOption) {
each(normalizeToArray(rawOption.series), function(series) {
series && series.data && isTypedArray(series.data) && setAsPrimitive(series.data);
});
each(normalizeToArray(rawOption.dataset), function(dataset) {
dataset && dataset.source && isTypedArray(dataset.source) && setAsPrimitive(dataset.source);
});
}
rawOption = clone(rawOption);
var optionBackup = this._optionBackup;
var newParsedOption = parseRawOption(rawOption, optionPreprocessorFuncs, !optionBackup);
this._newBaseOption = newParsedOption.baseOption;
if (optionBackup) {
if (newParsedOption.timelineOptions.length) {
optionBackup.timelineOptions = newParsedOption.timelineOptions;
}
if (newParsedOption.mediaList.length) {
optionBackup.mediaList = newParsedOption.mediaList;
}
if (newParsedOption.mediaDefault) {
optionBackup.mediaDefault = newParsedOption.mediaDefault;
}
} else {
this._optionBackup = newParsedOption;
}
};
OptionManager2.prototype.mountOption = function(isRecreate) {
var optionBackup = this._optionBackup;
this._timelineOptions = optionBackup.timelineOptions;
this._mediaList = optionBackup.mediaList;
this._mediaDefault = optionBackup.mediaDefault;
this._currentMediaIndices = [];
return clone(isRecreate ? optionBackup.baseOption : this._newBaseOption);
};
OptionManager2.prototype.getTimelineOption = function(ecModel) {
var option;
var timelineOptions = this._timelineOptions;
if (timelineOptions.length) {
var timelineModel = ecModel.getComponent("timeline");
if (timelineModel) {
option = clone(
timelineOptions[timelineModel.getCurrentIndex()]
);
}
}
return option;
};
OptionManager2.prototype.getMediaOption = function(ecModel) {
var ecWidth = this._api.getWidth();
var ecHeight = this._api.getHeight();
var mediaList = this._mediaList;
var mediaDefault = this._mediaDefault;
var indices = [];
var result = [];
if (!mediaList.length && !mediaDefault) {
return result;
}
for (var i = 0, len = mediaList.length; i < len; i++) {
if (applyMediaQuery(mediaList[i].query, ecWidth, ecHeight)) {
indices.push(i);
}
}
if (!indices.length && mediaDefault) {
indices = [-1];
}
if (indices.length && !indicesEquals(indices, this._currentMediaIndices)) {
result = map(indices, function(index) {
return clone(index === -1 ? mediaDefault.option : mediaList[index].option);
});
}
this._currentMediaIndices = indices;
return result;
};
return OptionManager2;
}();
function parseRawOption(rawOption, optionPreprocessorFuncs, isNew) {
var mediaList = [];
var mediaDefault;
var baseOption;
var declaredBaseOption = rawOption.baseOption;
var timelineOnRoot = rawOption.timeline;
var timelineOptionsOnRoot = rawOption.options;
var mediaOnRoot = rawOption.media;
var hasMedia = !!rawOption.media;
var hasTimeline = !!(timelineOptionsOnRoot || timelineOnRoot || declaredBaseOption && declaredBaseOption.timeline);
if (declaredBaseOption) {
baseOption = declaredBaseOption;
if (!baseOption.timeline) {
baseOption.timeline = timelineOnRoot;
}
} else {
if (hasTimeline || hasMedia) {
rawOption.options = rawOption.media = null;
}
baseOption = rawOption;
}
if (hasMedia) {
if (isArray(mediaOnRoot)) {
each(mediaOnRoot, function(singleMedia) {
if (singleMedia && singleMedia.option) {
if (singleMedia.query) {
mediaList.push(singleMedia);
} else if (!mediaDefault) {
mediaDefault = singleMedia;
}
}
});
}
}
doPreprocess(baseOption);
each(timelineOptionsOnRoot, function(option) {
return doPreprocess(option);
});
each(mediaList, function(media) {
return doPreprocess(media.option);
});
function doPreprocess(option) {
each(optionPreprocessorFuncs, function(preProcess) {
preProcess(option, isNew);
});
}
return {
baseOption,
timelineOptions: timelineOptionsOnRoot || [],
mediaDefault,
mediaList
};
}
function applyMediaQuery(query, ecWidth, ecHeight) {
var realMap = {
width: ecWidth,
height: ecHeight,
aspectratio: ecWidth / ecHeight
};
var applicable = true;
each(query, function(value, attr) {
var matched = attr.match(QUERY_REG);
if (!matched || !matched[1] || !matched[2]) {
return;
}
var operator = matched[1];
var realAttr = matched[2].toLowerCase();
if (!compare(realMap[realAttr], value, operator)) {
applicable = false;
}
});
return applicable;
}
function compare(real, expect, operator) {
if (operator === "min") {
return real >= expect;
} else if (operator === "max") {
return real <= expect;
} else {
return real === expect;
}
}
function indicesEquals(indices1, indices2) {
return indices1.join(",") === indices2.join(",");
}
var OptionManager$1 = OptionManager;
export { OptionManager$1 as default };