238 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			238 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
 | |
| /*
 | |
| * 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; | 
