You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
266 lines
8.2 KiB
266 lines
8.2 KiB
|
|
/* |
|
* Licensed to the Apache Software Foundation (ASF) under one |
|
* or more contributor license agreements. See the NOTICE file |
|
* distributed with this work for additional information |
|
* regarding copyright ownership. The ASF licenses this file |
|
* to you under the Apache License, Version 2.0 (the |
|
* "License"); you may not use this file except in compliance |
|
* with the License. You may obtain a copy of the License at |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, |
|
* software distributed under the License is distributed on an |
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
|
* KIND, either express or implied. See the License for the |
|
* specific language governing permissions and limitations |
|
* under the License. |
|
*/ |
|
|
|
|
|
/** |
|
* AUTO-GENERATED FILE. DO NOT MODIFY. |
|
*/ |
|
|
|
/* |
|
* Licensed to the Apache Software Foundation (ASF) under one |
|
* or more contributor license agreements. See the NOTICE file |
|
* distributed with this work for additional information |
|
* regarding copyright ownership. The ASF licenses this file |
|
* to you under the Apache License, Version 2.0 (the |
|
* "License"); you may not use this file except in compliance |
|
* with the License. You may obtain a copy of the License at |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, |
|
* software distributed under the License is distributed on an |
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
|
* KIND, either express or implied. See the License for the |
|
* specific language governing permissions and limitations |
|
* under the License. |
|
*/ |
|
import { __extends } from "tslib"; |
|
import * as zrUtil from 'zrender/lib/core/util.js'; |
|
import Model from './Model.js'; |
|
import * as componentUtil from '../util/component.js'; |
|
import { enableClassManagement, parseClassType, isExtendedClass, mountExtend } from '../util/clazz.js'; |
|
import { makeInner, queryReferringComponents } from '../util/model.js'; |
|
import * as layout from '../util/layout.js'; |
|
var inner = makeInner(); |
|
|
|
var ComponentModel = |
|
/** @class */ |
|
function (_super) { |
|
__extends(ComponentModel, _super); |
|
|
|
function ComponentModel(option, parentModel, ecModel) { |
|
var _this = _super.call(this, option, parentModel, ecModel) || this; |
|
|
|
_this.uid = componentUtil.getUID('ec_cpt_model'); |
|
return _this; |
|
} |
|
|
|
ComponentModel.prototype.init = function (option, parentModel, ecModel) { |
|
this.mergeDefaultAndTheme(option, ecModel); |
|
}; |
|
|
|
ComponentModel.prototype.mergeDefaultAndTheme = function (option, ecModel) { |
|
var layoutMode = layout.fetchLayoutMode(this); |
|
var inputPositionParams = layoutMode ? layout.getLayoutParams(option) : {}; |
|
var themeModel = ecModel.getTheme(); |
|
zrUtil.merge(option, themeModel.get(this.mainType)); |
|
zrUtil.merge(option, this.getDefaultOption()); |
|
|
|
if (layoutMode) { |
|
layout.mergeLayoutParam(option, inputPositionParams, layoutMode); |
|
} |
|
}; |
|
|
|
ComponentModel.prototype.mergeOption = function (option, ecModel) { |
|
zrUtil.merge(this.option, option, true); |
|
var layoutMode = layout.fetchLayoutMode(this); |
|
|
|
if (layoutMode) { |
|
layout.mergeLayoutParam(this.option, option, layoutMode); |
|
} |
|
}; |
|
/** |
|
* Called immediately after `init` or `mergeOption` of this instance called. |
|
*/ |
|
|
|
|
|
ComponentModel.prototype.optionUpdated = function (newCptOption, isInit) {}; |
|
/** |
|
* [How to declare defaultOption]: |
|
* |
|
* (A) If using class declaration in typescript (since echarts 5): |
|
* ```ts |
|
* import {ComponentOption} from '../model/option.js'; |
|
* export interface XxxOption extends ComponentOption { |
|
* aaa: number |
|
* } |
|
* export class XxxModel extends Component { |
|
* static type = 'xxx'; |
|
* static defaultOption: XxxOption = { |
|
* aaa: 123 |
|
* } |
|
* } |
|
* Component.registerClass(XxxModel); |
|
* ``` |
|
* ```ts |
|
* import {inheritDefaultOption} from '../util/component.js'; |
|
* import {XxxModel, XxxOption} from './XxxModel.js'; |
|
* export interface XxxSubOption extends XxxOption { |
|
* bbb: number |
|
* } |
|
* class XxxSubModel extends XxxModel { |
|
* static defaultOption: XxxSubOption = inheritDefaultOption(XxxModel.defaultOption, { |
|
* bbb: 456 |
|
* }) |
|
* fn() { |
|
* let opt = this.getDefaultOption(); |
|
* // opt is {aaa: 123, bbb: 456} |
|
* } |
|
* } |
|
* ``` |
|
* |
|
* (B) If using class extend (previous approach in echarts 3 & 4): |
|
* ```js |
|
* let XxxComponent = Component.extend({ |
|
* defaultOption: { |
|
* xx: 123 |
|
* } |
|
* }) |
|
* ``` |
|
* ```js |
|
* let XxxSubComponent = XxxComponent.extend({ |
|
* defaultOption: { |
|
* yy: 456 |
|
* }, |
|
* fn: function () { |
|
* let opt = this.getDefaultOption(); |
|
* // opt is {xx: 123, yy: 456} |
|
* } |
|
* }) |
|
* ``` |
|
*/ |
|
|
|
|
|
ComponentModel.prototype.getDefaultOption = function () { |
|
var ctor = this.constructor; // If using class declaration, it is different to travel super class |
|
// in legacy env and auto merge defaultOption. So if using class |
|
// declaration, defaultOption should be merged manually. |
|
|
|
if (!isExtendedClass(ctor)) { |
|
// When using ts class, defaultOption must be declared as static. |
|
return ctor.defaultOption; |
|
} // FIXME: remove this approach? |
|
|
|
|
|
var fields = inner(this); |
|
|
|
if (!fields.defaultOption) { |
|
var optList = []; |
|
var clz = ctor; |
|
|
|
while (clz) { |
|
var opt = clz.prototype.defaultOption; |
|
opt && optList.push(opt); |
|
clz = clz.superClass; |
|
} |
|
|
|
var defaultOption = {}; |
|
|
|
for (var i = optList.length - 1; i >= 0; i--) { |
|
defaultOption = zrUtil.merge(defaultOption, optList[i], true); |
|
} |
|
|
|
fields.defaultOption = defaultOption; |
|
} |
|
|
|
return fields.defaultOption; |
|
}; |
|
/** |
|
* Notice: always force to input param `useDefault` in case that forget to consider it. |
|
* The same behavior as `modelUtil.parseFinder`. |
|
* |
|
* @param useDefault In many cases like series refer axis and axis refer grid, |
|
* If axis index / axis id not specified, use the first target as default. |
|
* In other cases like dataZoom refer axis, if not specified, measn no refer. |
|
*/ |
|
|
|
|
|
ComponentModel.prototype.getReferringComponents = function (mainType, opt) { |
|
var indexKey = mainType + 'Index'; |
|
var idKey = mainType + 'Id'; |
|
return queryReferringComponents(this.ecModel, mainType, { |
|
index: this.get(indexKey, true), |
|
id: this.get(idKey, true) |
|
}, opt); |
|
}; |
|
|
|
ComponentModel.prototype.getBoxLayoutParams = function () { |
|
// Consider itself having box layout configs. |
|
var boxLayoutModel = this; |
|
return { |
|
left: boxLayoutModel.get('left'), |
|
top: boxLayoutModel.get('top'), |
|
right: boxLayoutModel.get('right'), |
|
bottom: boxLayoutModel.get('bottom'), |
|
width: boxLayoutModel.get('width'), |
|
height: boxLayoutModel.get('height') |
|
}; |
|
}; |
|
/** |
|
* Get key for zlevel. |
|
* If developers don't configure zlevel. We will assign zlevel to series based on the key. |
|
* For example, lines with trail effect and progressive series will in an individual zlevel. |
|
*/ |
|
|
|
|
|
ComponentModel.prototype.getZLevelKey = function () { |
|
return ''; |
|
}; |
|
|
|
ComponentModel.prototype.setZLevel = function (zlevel) { |
|
this.option.zlevel = zlevel; |
|
}; |
|
|
|
ComponentModel.protoInitialize = function () { |
|
var proto = ComponentModel.prototype; |
|
proto.type = 'component'; |
|
proto.id = ''; |
|
proto.name = ''; |
|
proto.mainType = ''; |
|
proto.subType = ''; |
|
proto.componentIndex = 0; |
|
}(); |
|
|
|
return ComponentModel; |
|
}(Model); |
|
|
|
mountExtend(ComponentModel, Model); |
|
enableClassManagement(ComponentModel); |
|
componentUtil.enableSubTypeDefaulter(ComponentModel); |
|
componentUtil.enableTopologicalTravel(ComponentModel, getDependencies); |
|
|
|
function getDependencies(componentType) { |
|
var deps = []; |
|
zrUtil.each(ComponentModel.getClassesByMainType(componentType), function (clz) { |
|
deps = deps.concat(clz.dependencies || clz.prototype.dependencies || []); |
|
}); // Ensure main type. |
|
|
|
deps = zrUtil.map(deps, function (type) { |
|
return parseClassType(type).main; |
|
}); // Hack dataset for convenience. |
|
|
|
if (componentType !== 'dataset' && zrUtil.indexOf(deps, 'dataset') <= 0) { |
|
deps.unshift('dataset'); |
|
} |
|
|
|
return deps; |
|
} |
|
|
|
export default ComponentModel; |