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.
		
		
		
		
			
				
					238 lines
				
				6.1 KiB
			
		
		
			
		
	
	
					238 lines
				
				6.1 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								* 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;
							 |