cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
358 lines (357 loc) • 12 kB
JavaScript
import { __extends } from "../../../../../tslib/tslib.es6.mjs";
import { registerAction } from "../../../core/echarts.mjs";
import { isFunction, isString, isDom, each, extend, defaults, filter, map, isObject, isArray } from "../../../../../zrender/lib/core/util.mjs";
import { ToolboxFeature } from "../featureManager.mjs";
import { addEventListener } from "../../../../../zrender/lib/core/event.mjs";
var BLOCK_SPLITER = new Array(60).join("-");
var ITEM_SPLITER = " ";
function groupSeries(ecModel) {
var seriesGroupByCategoryAxis = {};
var otherSeries = [];
var meta = [];
ecModel.eachRawSeries(function(seriesModel) {
var coordSys = seriesModel.coordinateSystem;
if (coordSys && (coordSys.type === "cartesian2d" || coordSys.type === "polar")) {
var baseAxis = coordSys.getBaseAxis();
if (baseAxis.type === "category") {
var key = baseAxis.dim + "_" + baseAxis.index;
if (!seriesGroupByCategoryAxis[key]) {
seriesGroupByCategoryAxis[key] = {
categoryAxis: baseAxis,
valueAxis: coordSys.getOtherAxis(baseAxis),
series: []
};
meta.push({
axisDim: baseAxis.dim,
axisIndex: baseAxis.index
});
}
seriesGroupByCategoryAxis[key].series.push(seriesModel);
} else {
otherSeries.push(seriesModel);
}
} else {
otherSeries.push(seriesModel);
}
});
return {
seriesGroupByCategoryAxis,
other: otherSeries,
meta
};
}
function assembleSeriesWithCategoryAxis(groups) {
var tables = [];
each(groups, function(group, key) {
var categoryAxis = group.categoryAxis;
var valueAxis = group.valueAxis;
var valueAxisDim = valueAxis.dim;
var headers = [" "].concat(map(group.series, function(series) {
return series.name;
}));
var columns = [categoryAxis.model.getCategories()];
each(group.series, function(series) {
var rawData = series.getRawData();
columns.push(series.getRawData().mapArray(rawData.mapDimension(valueAxisDim), function(val) {
return val;
}));
});
var lines = [headers.join(ITEM_SPLITER)];
for (var i = 0; i < columns[0].length; i++) {
var items = [];
for (var j = 0; j < columns.length; j++) {
items.push(columns[j][i]);
}
lines.push(items.join(ITEM_SPLITER));
}
tables.push(lines.join("\n"));
});
return tables.join("\n\n" + BLOCK_SPLITER + "\n\n");
}
function assembleOtherSeries(series) {
return map(series, function(series2) {
var data = series2.getRawData();
var lines = [series2.name];
var vals = [];
data.each(data.dimensions, function() {
var argLen = arguments.length;
var dataIndex = arguments[argLen - 1];
var name = data.getName(dataIndex);
for (var i = 0; i < argLen - 1; i++) {
vals[i] = arguments[i];
}
lines.push((name ? name + ITEM_SPLITER : "") + vals.join(ITEM_SPLITER));
});
return lines.join("\n");
}).join("\n\n" + BLOCK_SPLITER + "\n\n");
}
function getContentFromModel(ecModel) {
var result = groupSeries(ecModel);
return {
value: filter([assembleSeriesWithCategoryAxis(result.seriesGroupByCategoryAxis), assembleOtherSeries(result.other)], function(str) {
return !!str.replace(/[\n\t\s]/g, "");
}).join("\n\n" + BLOCK_SPLITER + "\n\n"),
meta: result.meta
};
}
function trim(str) {
return str.replace(/^\s\s*/, "").replace(/\s\s*$/, "");
}
function isTSVFormat(block) {
var firstLine = block.slice(0, block.indexOf("\n"));
if (firstLine.indexOf(ITEM_SPLITER) >= 0) {
return true;
}
}
var itemSplitRegex = new RegExp("[" + ITEM_SPLITER + "]+", "g");
function parseTSVContents(tsv) {
var tsvLines = tsv.split(/\n+/g);
var headers = trim(tsvLines.shift()).split(itemSplitRegex);
var categories = [];
var series = map(headers, function(header) {
return {
name: header,
data: []
};
});
for (var i = 0; i < tsvLines.length; i++) {
var items = trim(tsvLines[i]).split(itemSplitRegex);
categories.push(items.shift());
for (var j = 0; j < items.length; j++) {
series[j] && (series[j].data[i] = items[j]);
}
}
return {
series,
categories
};
}
function parseListContents(str) {
var lines = str.split(/\n+/g);
var seriesName = trim(lines.shift());
var data = [];
for (var i = 0; i < lines.length; i++) {
var line = trim(lines[i]);
if (!line) {
continue;
}
var items = line.split(itemSplitRegex);
var name_1 = "";
var value = void 0;
var hasName = false;
if (isNaN(items[0])) {
hasName = true;
name_1 = items[0];
items = items.slice(1);
data[i] = {
name: name_1,
value: []
};
value = data[i].value;
} else {
value = data[i] = [];
}
for (var j = 0; j < items.length; j++) {
value.push(+items[j]);
}
if (value.length === 1) {
hasName ? data[i].value = value[0] : data[i] = value[0];
}
}
return {
name: seriesName,
data
};
}
function parseContents(str, blockMetaList) {
var blocks = str.split(new RegExp("\n*" + BLOCK_SPLITER + "\n*", "g"));
var newOption = {
series: []
};
each(blocks, function(block, idx) {
if (isTSVFormat(block)) {
var result = parseTSVContents(block);
var blockMeta = blockMetaList[idx];
var axisKey = blockMeta.axisDim + "Axis";
if (blockMeta) {
newOption[axisKey] = newOption[axisKey] || [];
newOption[axisKey][blockMeta.axisIndex] = {
data: result.categories
};
newOption.series = newOption.series.concat(result.series);
}
} else {
var result = parseListContents(block);
newOption.series.push(result);
}
});
return newOption;
}
var DataView = function(_super) {
__extends(DataView2, _super);
function DataView2() {
return _super !== null && _super.apply(this, arguments) || this;
}
DataView2.prototype.onclick = function(ecModel, api) {
setTimeout(function() {
api.dispatchAction({
type: "hideTip"
});
});
var container = api.getDom();
var model = this.model;
if (this._dom) {
container.removeChild(this._dom);
}
var root = document.createElement("div");
root.style.cssText = "position:absolute;top:0;bottom:0;left:0;right:0;padding:5px";
root.style.backgroundColor = model.get("backgroundColor") || "#fff";
var header = document.createElement("h4");
var lang = model.get("lang") || [];
header.innerHTML = lang[0] || model.get("title");
header.style.cssText = "margin:10px 20px";
header.style.color = model.get("textColor");
var viewMain = document.createElement("div");
var textarea = document.createElement("textarea");
viewMain.style.cssText = "overflow:auto";
var optionToContent = model.get("optionToContent");
var contentToOption = model.get("contentToOption");
var result = getContentFromModel(ecModel);
if (isFunction(optionToContent)) {
var htmlOrDom = optionToContent(api.getOption());
if (isString(htmlOrDom)) {
viewMain.innerHTML = htmlOrDom;
} else if (isDom(htmlOrDom)) {
viewMain.appendChild(htmlOrDom);
}
} else {
textarea.readOnly = model.get("readOnly");
var style = textarea.style;
style.cssText = "display:block;width:100%;height:100%;font-family:monospace;font-size:14px;line-height:1.6rem;resize:none;box-sizing:border-box;outline:none";
style.color = model.get("textColor");
style.borderColor = model.get("textareaBorderColor");
style.backgroundColor = model.get("textareaColor");
textarea.value = result.value;
viewMain.appendChild(textarea);
}
var blockMetaList = result.meta;
var buttonContainer = document.createElement("div");
buttonContainer.style.cssText = "position:absolute;bottom:5px;left:0;right:0";
var buttonStyle = "float:right;margin-right:20px;border:none;cursor:pointer;padding:2px 5px;font-size:12px;border-radius:3px";
var closeButton = document.createElement("div");
var refreshButton = document.createElement("div");
buttonStyle += ";background-color:" + model.get("buttonColor");
buttonStyle += ";color:" + model.get("buttonTextColor");
var self = this;
function close() {
container.removeChild(root);
self._dom = null;
}
addEventListener(closeButton, "click", close);
addEventListener(refreshButton, "click", function() {
if (contentToOption == null && optionToContent != null || contentToOption != null && optionToContent == null) {
close();
return;
}
var newOption;
try {
if (isFunction(contentToOption)) {
newOption = contentToOption(viewMain, api.getOption());
} else {
newOption = parseContents(textarea.value, blockMetaList);
}
} catch (e) {
close();
throw new Error("Data view format error " + e);
}
if (newOption) {
api.dispatchAction({
type: "changeDataView",
newOption
});
}
close();
});
closeButton.innerHTML = lang[1];
refreshButton.innerHTML = lang[2];
refreshButton.style.cssText = closeButton.style.cssText = buttonStyle;
!model.get("readOnly") && buttonContainer.appendChild(refreshButton);
buttonContainer.appendChild(closeButton);
root.appendChild(header);
root.appendChild(viewMain);
root.appendChild(buttonContainer);
viewMain.style.height = container.clientHeight - 80 + "px";
container.appendChild(root);
this._dom = root;
};
DataView2.prototype.remove = function(ecModel, api) {
this._dom && api.getDom().removeChild(this._dom);
};
DataView2.prototype.dispose = function(ecModel, api) {
this.remove(ecModel, api);
};
DataView2.getDefaultOption = function(ecModel) {
var defaultOption = {
show: true,
readOnly: false,
optionToContent: null,
contentToOption: null,
icon: "M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28",
title: ecModel.getLocaleModel().get(["toolbox", "dataView", "title"]),
lang: ecModel.getLocaleModel().get(["toolbox", "dataView", "lang"]),
backgroundColor: "#fff",
textColor: "#000",
textareaColor: "#fff",
textareaBorderColor: "#333",
buttonColor: "#c23531",
buttonTextColor: "#fff"
};
return defaultOption;
};
return DataView2;
}(ToolboxFeature);
function tryMergeDataOption(newData, originalData) {
return map(newData, function(newVal, idx) {
var original = originalData && originalData[idx];
if (isObject(original) && !isArray(original)) {
var newValIsObject = isObject(newVal) && !isArray(newVal);
if (!newValIsObject) {
newVal = {
value: newVal
};
}
var shouldDeleteName = original.name != null && newVal.name == null;
newVal = defaults(newVal, original);
shouldDeleteName && delete newVal.name;
return newVal;
} else {
return newVal;
}
});
}
registerAction({
type: "changeDataView",
event: "dataViewChanged",
update: "prepareAndUpdate"
}, function(payload, ecModel) {
var newSeriesOptList = [];
each(payload.newOption.series, function(seriesOpt) {
var seriesModel = ecModel.getSeriesByName(seriesOpt.name)[0];
if (!seriesModel) {
newSeriesOptList.push(extend({
type: "scatter"
}, seriesOpt));
} else {
var originalData = seriesModel.get("data");
newSeriesOptList.push({
name: seriesOpt.name,
data: tryMergeDataOption(seriesOpt.data, originalData)
});
}
});
ecModel.mergeOption(defaults({
series: newSeriesOptList
}, payload.newOption));
});
var DataView$1 = DataView;
export { DataView$1 as default };