123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- /*
- * 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.
- */
- var zrUtil = require("zrender/lib/core/util");
- var env = require("zrender/lib/core/env");
- var _model = require("../util/model");
- var makeInner = _model.makeInner;
- var _clazz = require("../util/clazz");
- var enableClassExtend = _clazz.enableClassExtend;
- var enableClassCheck = _clazz.enableClassCheck;
- var lineStyleMixin = require("./mixin/lineStyle");
- var areaStyleMixin = require("./mixin/areaStyle");
- var textStyleMixin = require("./mixin/textStyle");
- var itemStyleMixin = require("./mixin/itemStyle");
- /*
- * 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.
- */
- /**
- * @module echarts/model/Model
- */
- var mixin = zrUtil.mixin;
- var inner = makeInner();
- /**
- * @alias module:echarts/model/Model
- * @constructor
- * @param {Object} [option]
- * @param {module:echarts/model/Model} [parentModel]
- * @param {module:echarts/model/Global} [ecModel]
- */
- function Model(option, parentModel, ecModel) {
- /**
- * @type {module:echarts/model/Model}
- * @readOnly
- */
- this.parentModel = parentModel;
- /**
- * @type {module:echarts/model/Global}
- * @readOnly
- */
- this.ecModel = ecModel;
- /**
- * @type {Object}
- * @protected
- */
- this.option = option; // Simple optimization
- // if (this.init) {
- // if (arguments.length <= 4) {
- // this.init(option, parentModel, ecModel, extraOpt);
- // }
- // else {
- // this.init.apply(this, arguments);
- // }
- // }
- }
- Model.prototype = {
- constructor: Model,
- /**
- * Model 的初始化函数
- * @param {Object} option
- */
- init: null,
- /**
- * 从新的 Option merge
- */
- mergeOption: function (option) {
- zrUtil.merge(this.option, option, true);
- },
- /**
- * @param {string|Array.<string>} path
- * @param {boolean} [ignoreParent=false]
- * @return {*}
- */
- get: function (path, ignoreParent) {
- if (path == null) {
- return this.option;
- }
- return doGet(this.option, this.parsePath(path), !ignoreParent && getParent(this, path));
- },
- /**
- * @param {string} key
- * @param {boolean} [ignoreParent=false]
- * @return {*}
- */
- getShallow: function (key, ignoreParent) {
- var option = this.option;
- var val = option == null ? option : option[key];
- var parentModel = !ignoreParent && getParent(this, key);
- if (val == null && parentModel) {
- val = parentModel.getShallow(key);
- }
- return val;
- },
- /**
- * @param {string|Array.<string>} [path]
- * @param {module:echarts/model/Model} [parentModel]
- * @return {module:echarts/model/Model}
- */
- getModel: function (path, parentModel) {
- var obj = path == null ? this.option : doGet(this.option, path = this.parsePath(path));
- var thisParentModel;
- parentModel = parentModel || (thisParentModel = getParent(this, path)) && thisParentModel.getModel(path);
- return new Model(obj, parentModel, this.ecModel);
- },
- /**
- * If model has option
- */
- isEmpty: function () {
- return this.option == null;
- },
- restoreData: function () {},
- // Pending
- clone: function () {
- var Ctor = this.constructor;
- return new Ctor(zrUtil.clone(this.option));
- },
- setReadOnly: function (properties) {// clazzUtil.setReadOnly(this, properties);
- },
- // If path is null/undefined, return null/undefined.
- parsePath: function (path) {
- if (typeof path === 'string') {
- path = path.split('.');
- }
- return path;
- },
- /**
- * @param {Function} getParentMethod
- * param {Array.<string>|string} path
- * return {module:echarts/model/Model}
- */
- customizeGetParent: function (getParentMethod) {
- inner(this).getParent = getParentMethod;
- },
- isAnimationEnabled: function () {
- if (!env.node) {
- if (this.option.animation != null) {
- return !!this.option.animation;
- } else if (this.parentModel) {
- return this.parentModel.isAnimationEnabled();
- }
- }
- }
- };
- function doGet(obj, pathArr, parentModel) {
- for (var i = 0; i < pathArr.length; i++) {
- // Ignore empty
- if (!pathArr[i]) {
- continue;
- } // obj could be number/string/... (like 0)
- obj = obj && typeof obj === 'object' ? obj[pathArr[i]] : null;
- if (obj == null) {
- break;
- }
- }
- if (obj == null && parentModel) {
- obj = parentModel.get(pathArr);
- }
- return obj;
- } // `path` can be null/undefined
- function getParent(model, path) {
- var getParentMethod = inner(model).getParent;
- return getParentMethod ? getParentMethod.call(model, path) : model.parentModel;
- } // Enable Model.extend.
- enableClassExtend(Model);
- enableClassCheck(Model);
- mixin(Model, lineStyleMixin);
- mixin(Model, areaStyleMixin);
- mixin(Model, textStyleMixin);
- mixin(Model, itemStyleMixin);
- var _default = Model;
- module.exports = _default;
|