/*
|
* 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 Axis from '../Axis';
|
import { DimensionName, OrdinalSortInfo } from '../../util/types';
|
import Scale from '../../scale/Scale';
|
import CartesianAxisModel, { CartesianAxisPosition } from './AxisModel';
|
import Grid from './Grid';
|
import { OptionAxisType } from '../axisCommonTypes';
|
import OrdinalScale from '../../scale/Ordinal';
|
|
|
interface Axis2D {
|
/**
|
* Transform global coord to local coord,
|
* i.e. let localCoord = axis.toLocalCoord(80);
|
*/
|
toLocalCoord(coord: number): number;
|
|
/**
|
* Transform global coord to local coord,
|
* i.e. let globalCoord = axis.toLocalCoord(40);
|
*/
|
toGlobalCoord(coord: number): number;
|
}
|
class Axis2D extends Axis {
|
|
/**
|
* Axis position
|
* - 'top'
|
* - 'bottom'
|
* - 'left'
|
* - 'right'
|
*/
|
readonly position: CartesianAxisPosition;
|
|
/**
|
* Index of axis, can be used as key
|
* Injected outside.
|
*/
|
index: number = 0;
|
|
/**
|
* Axis model. Injected outside
|
*/
|
model: CartesianAxisModel;
|
|
/**
|
* Injected outside.
|
*/
|
grid: Grid;
|
|
|
constructor(
|
dim: DimensionName,
|
scale: Scale,
|
coordExtent: [number, number],
|
axisType?: OptionAxisType,
|
position?: CartesianAxisPosition
|
) {
|
super(dim, scale, coordExtent);
|
this.type = axisType || 'value';
|
this.position = position || 'bottom';
|
}
|
|
/**
|
* Implemented in <module:echarts/coord/cartesian/Grid>.
|
* @return If not on zero of other axis, return null/undefined.
|
* If no axes, return an empty array.
|
*/
|
getAxesOnZeroOf: () => Axis2D[];
|
|
isHorizontal(): boolean {
|
const position = this.position;
|
return position === 'top' || position === 'bottom';
|
}
|
|
/**
|
* Each item cooresponds to this.getExtent(), which
|
* means globalExtent[0] may greater than globalExtent[1],
|
* unless `asc` is input.
|
*
|
* @param {boolean} [asc]
|
* @return {Array.<number>}
|
*/
|
getGlobalExtent(asc?: boolean): [number, number] {
|
const ret = this.getExtent();
|
ret[0] = this.toGlobalCoord(ret[0]);
|
ret[1] = this.toGlobalCoord(ret[1]);
|
asc && ret[0] > ret[1] && ret.reverse();
|
return ret;
|
}
|
|
pointToData(point: number[], clamp?: boolean): number {
|
return this.coordToData(this.toLocalCoord(point[this.dim === 'x' ? 0 : 1]), clamp);
|
}
|
|
/**
|
* Set ordinalSortInfo
|
* @param info new OrdinalSortInfo
|
*/
|
setCategorySortInfo(info: OrdinalSortInfo): boolean {
|
if (this.type !== 'category') {
|
return false;
|
}
|
|
this.model.option.categorySortInfo = info;
|
(this.scale as OrdinalScale).setSortInfo(info);
|
}
|
|
}
|
|
export default Axis2D;
|