| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 | 
/** 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 SingleAxis = require("./SingleAxis");var axisHelper = require("../axisHelper");var _layout = require("../../util/layout");var getLayoutRect = _layout.getLayoutRect;var _util = require("zrender/lib/core/util");var each = _util.each;/** 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.*//** * Single coordinates system. *//** * Create a single coordinates system. * * @param {module:echarts/coord/single/AxisModel} axisModel * @param {module:echarts/model/Global} ecModel * @param {module:echarts/ExtensionAPI} api */function Single(axisModel, ecModel, api) {  /**   * @type {string}   * @readOnly   */  this.dimension = 'single';  /**   * Add it just for draw tooltip.   *   * @type {Array.<string>}   * @readOnly   */  this.dimensions = ['single'];  /**   * @private   * @type {module:echarts/coord/single/SingleAxis}.   */  this._axis = null;  /**   * @private   * @type {module:zrender/core/BoundingRect}   */  this._rect;  this._init(axisModel, ecModel, api);  /**   * @type {module:echarts/coord/single/AxisModel}   */  this.model = axisModel;}Single.prototype = {  type: 'singleAxis',  axisPointerEnabled: true,  constructor: Single,  /**   * Initialize single coordinate system.   *   * @param  {module:echarts/coord/single/AxisModel} axisModel   * @param  {module:echarts/model/Global} ecModel   * @param  {module:echarts/ExtensionAPI} api   * @private   */  _init: function (axisModel, ecModel, api) {    var dim = this.dimension;    var axis = new SingleAxis(dim, axisHelper.createScaleByModel(axisModel), [0, 0], axisModel.get('type'), axisModel.get('position'));    var isCategory = axis.type === 'category';    axis.onBand = isCategory && axisModel.get('boundaryGap');    axis.inverse = axisModel.get('inverse');    axis.orient = axisModel.get('orient');    axisModel.axis = axis;    axis.model = axisModel;    axis.coordinateSystem = this;    this._axis = axis;  },  /**   * Update axis scale after data processed   * @param  {module:echarts/model/Global} ecModel   * @param  {module:echarts/ExtensionAPI} api   */  update: function (ecModel, api) {    ecModel.eachSeries(function (seriesModel) {      if (seriesModel.coordinateSystem === this) {        var data = seriesModel.getData();        each(data.mapDimension(this.dimension, true), function (dim) {          this._axis.scale.unionExtentFromData(data, dim);        }, this);        axisHelper.niceScaleExtent(this._axis.scale, this._axis.model);      }    }, this);  },  /**   * Resize the single coordinate system.   *   * @param  {module:echarts/coord/single/AxisModel} axisModel   * @param  {module:echarts/ExtensionAPI} api   */  resize: function (axisModel, api) {    this._rect = getLayoutRect({      left: axisModel.get('left'),      top: axisModel.get('top'),      right: axisModel.get('right'),      bottom: axisModel.get('bottom'),      width: axisModel.get('width'),      height: axisModel.get('height')    }, {      width: api.getWidth(),      height: api.getHeight()    });    this._adjustAxis();  },  /**   * @return {module:zrender/core/BoundingRect}   */  getRect: function () {    return this._rect;  },  /**   * @private   */  _adjustAxis: function () {    var rect = this._rect;    var axis = this._axis;    var isHorizontal = axis.isHorizontal();    var extent = isHorizontal ? [0, rect.width] : [0, rect.height];    var idx = axis.reverse ? 1 : 0;    axis.setExtent(extent[idx], extent[1 - idx]);    this._updateAxisTransform(axis, isHorizontal ? rect.x : rect.y);  },  /**   * @param  {module:echarts/coord/single/SingleAxis} axis   * @param  {number} coordBase   */  _updateAxisTransform: function (axis, coordBase) {    var axisExtent = axis.getExtent();    var extentSum = axisExtent[0] + axisExtent[1];    var isHorizontal = axis.isHorizontal();    axis.toGlobalCoord = isHorizontal ? function (coord) {      return coord + coordBase;    } : function (coord) {      return extentSum - coord + coordBase;    };    axis.toLocalCoord = isHorizontal ? function (coord) {      return coord - coordBase;    } : function (coord) {      return extentSum - coord + coordBase;    };  },  /**   * Get axis.   *   * @return {module:echarts/coord/single/SingleAxis}   */  getAxis: function () {    return this._axis;  },  /**   * Get axis, add it just for draw tooltip.   *   * @return {[type]} [description]   */  getBaseAxis: function () {    return this._axis;  },  /**   * @return {Array.<module:echarts/coord/Axis>}   */  getAxes: function () {    return [this._axis];  },  /**   * @return {Object} {baseAxes: [], otherAxes: []}   */  getTooltipAxes: function () {    return {      baseAxes: [this.getAxis()]    };  },  /**   * If contain point.   *   * @param  {Array.<number>} point   * @return {boolean}   */  containPoint: function (point) {    var rect = this.getRect();    var axis = this.getAxis();    var orient = axis.orient;    if (orient === 'horizontal') {      return axis.contain(axis.toLocalCoord(point[0])) && point[1] >= rect.y && point[1] <= rect.y + rect.height;    } else {      return axis.contain(axis.toLocalCoord(point[1])) && point[0] >= rect.y && point[0] <= rect.y + rect.height;    }  },  /**   * @param {Array.<number>} point   * @return {Array.<number>}   */  pointToData: function (point) {    var axis = this.getAxis();    return [axis.coordToData(axis.toLocalCoord(point[axis.orient === 'horizontal' ? 0 : 1]))];  },  /**   * Convert the series data to concrete point.   *   * @param  {number|Array.<number>} val   * @return {Array.<number>}   */  dataToPoint: function (val) {    var axis = this.getAxis();    var rect = this.getRect();    var pt = [];    var idx = axis.orient === 'horizontal' ? 0 : 1;    if (val instanceof Array) {      val = val[0];    }    pt[idx] = axis.toGlobalCoord(axis.dataToCoord(+val));    pt[1 - idx] = idx === 0 ? rect.y + rect.height / 2 : rect.x + rect.width / 2;    return pt;  }};var _default = Single;module.exports = _default;
 |