123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413 |
- /*
- * 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.
- */
- /**
- * AUTO-GENERATED FILE. DO NOT MODIFY.
- */
- /*
- * 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 { __extends } from "tslib";
- import * as zrUtil from 'zrender/lib/core/util.js';
- import visualDefault from '../../visual/visualDefault.js';
- import VisualMapping from '../../visual/VisualMapping.js';
- import * as visualSolution from '../../visual/visualSolution.js';
- import * as modelUtil from '../../util/model.js';
- import * as numberUtil from '../../util/number.js';
- import ComponentModel from '../../model/Component.js';
- var mapVisual = VisualMapping.mapVisual;
- var eachVisual = VisualMapping.eachVisual;
- var isArray = zrUtil.isArray;
- var each = zrUtil.each;
- var asc = numberUtil.asc;
- var linearMap = numberUtil.linearMap;
- var VisualMapModel = /** @class */function (_super) {
- __extends(VisualMapModel, _super);
- function VisualMapModel() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.type = VisualMapModel.type;
- _this.stateList = ['inRange', 'outOfRange'];
- _this.replacableOptionKeys = ['inRange', 'outOfRange', 'target', 'controller', 'color'];
- _this.layoutMode = {
- type: 'box',
- ignoreSize: true
- };
- /**
- * [lowerBound, upperBound]
- */
- _this.dataBound = [-Infinity, Infinity];
- _this.targetVisuals = {};
- _this.controllerVisuals = {};
- return _this;
- }
- VisualMapModel.prototype.init = function (option, parentModel, ecModel) {
- this.mergeDefaultAndTheme(option, ecModel);
- };
- /**
- * @protected
- */
- VisualMapModel.prototype.optionUpdated = function (newOption, isInit) {
- var thisOption = this.option;
- !isInit && visualSolution.replaceVisualOption(thisOption, newOption, this.replacableOptionKeys);
- this.textStyleModel = this.getModel('textStyle');
- this.resetItemSize();
- this.completeVisualOption();
- };
- /**
- * @protected
- */
- VisualMapModel.prototype.resetVisual = function (supplementVisualOption) {
- var stateList = this.stateList;
- supplementVisualOption = zrUtil.bind(supplementVisualOption, this);
- this.controllerVisuals = visualSolution.createVisualMappings(this.option.controller, stateList, supplementVisualOption);
- this.targetVisuals = visualSolution.createVisualMappings(this.option.target, stateList, supplementVisualOption);
- };
- /**
- * @public
- */
- VisualMapModel.prototype.getItemSymbol = function () {
- return null;
- };
- /**
- * @protected
- * @return {Array.<number>} An array of series indices.
- */
- VisualMapModel.prototype.getTargetSeriesIndices = function () {
- var optionSeriesIndex = this.option.seriesIndex;
- var seriesIndices = [];
- if (optionSeriesIndex == null || optionSeriesIndex === 'all') {
- this.ecModel.eachSeries(function (seriesModel, index) {
- seriesIndices.push(index);
- });
- } else {
- seriesIndices = modelUtil.normalizeToArray(optionSeriesIndex);
- }
- return seriesIndices;
- };
- /**
- * @public
- */
- VisualMapModel.prototype.eachTargetSeries = function (callback, context) {
- zrUtil.each(this.getTargetSeriesIndices(), function (seriesIndex) {
- var seriesModel = this.ecModel.getSeriesByIndex(seriesIndex);
- if (seriesModel) {
- callback.call(context, seriesModel);
- }
- }, this);
- };
- /**
- * @pubilc
- */
- VisualMapModel.prototype.isTargetSeries = function (seriesModel) {
- var is = false;
- this.eachTargetSeries(function (model) {
- model === seriesModel && (is = true);
- });
- return is;
- };
- /**
- * @example
- * this.formatValueText(someVal); // format single numeric value to text.
- * this.formatValueText(someVal, true); // format single category value to text.
- * this.formatValueText([min, max]); // format numeric min-max to text.
- * this.formatValueText([this.dataBound[0], max]); // using data lower bound.
- * this.formatValueText([min, this.dataBound[1]]); // using data upper bound.
- *
- * @param value Real value, or this.dataBound[0 or 1].
- * @param isCategory Only available when value is number.
- * @param edgeSymbols Open-close symbol when value is interval.
- * @protected
- */
- VisualMapModel.prototype.formatValueText = function (value, isCategory, edgeSymbols) {
- var option = this.option;
- var precision = option.precision;
- var dataBound = this.dataBound;
- var formatter = option.formatter;
- var isMinMax;
- edgeSymbols = edgeSymbols || ['<', '>'];
- if (zrUtil.isArray(value)) {
- value = value.slice();
- isMinMax = true;
- }
- var textValue = isCategory ? value // Value is string when isCategory
- : isMinMax ? [toFixed(value[0]), toFixed(value[1])] : toFixed(value);
- if (zrUtil.isString(formatter)) {
- return formatter.replace('{value}', isMinMax ? textValue[0] : textValue).replace('{value2}', isMinMax ? textValue[1] : textValue);
- } else if (zrUtil.isFunction(formatter)) {
- return isMinMax ? formatter(value[0], value[1]) : formatter(value);
- }
- if (isMinMax) {
- if (value[0] === dataBound[0]) {
- return edgeSymbols[0] + ' ' + textValue[1];
- } else if (value[1] === dataBound[1]) {
- return edgeSymbols[1] + ' ' + textValue[0];
- } else {
- return textValue[0] + ' - ' + textValue[1];
- }
- } else {
- // Format single value (includes category case).
- return textValue;
- }
- function toFixed(val) {
- return val === dataBound[0] ? 'min' : val === dataBound[1] ? 'max' : (+val).toFixed(Math.min(precision, 20));
- }
- };
- /**
- * @protected
- */
- VisualMapModel.prototype.resetExtent = function () {
- var thisOption = this.option;
- // Can not calculate data extent by data here.
- // Because series and data may be modified in processing stage.
- // So we do not support the feature "auto min/max".
- var extent = asc([thisOption.min, thisOption.max]);
- this._dataExtent = extent;
- };
- /**
- * PENDING:
- * delete this method if no outer usage.
- *
- * Return Concrete dimension. If null/undefined is returned, no dimension is used.
- */
- // getDataDimension(data: SeriesData) {
- // const optDim = this.option.dimension;
- // if (optDim != null) {
- // return data.getDimension(optDim);
- // }
- // const dimNames = data.dimensions;
- // for (let i = dimNames.length - 1; i >= 0; i--) {
- // const dimName = dimNames[i];
- // const dimInfo = data.getDimensionInfo(dimName);
- // if (!dimInfo.isCalculationCoord) {
- // return dimName;
- // }
- // }
- // }
- VisualMapModel.prototype.getDataDimensionIndex = function (data) {
- var optDim = this.option.dimension;
- if (optDim != null) {
- return data.getDimensionIndex(optDim);
- }
- var dimNames = data.dimensions;
- for (var i = dimNames.length - 1; i >= 0; i--) {
- var dimName = dimNames[i];
- var dimInfo = data.getDimensionInfo(dimName);
- if (!dimInfo.isCalculationCoord) {
- return dimInfo.storeDimIndex;
- }
- }
- };
- VisualMapModel.prototype.getExtent = function () {
- return this._dataExtent.slice();
- };
- VisualMapModel.prototype.completeVisualOption = function () {
- var ecModel = this.ecModel;
- var thisOption = this.option;
- var base = {
- inRange: thisOption.inRange,
- outOfRange: thisOption.outOfRange
- };
- var target = thisOption.target || (thisOption.target = {});
- var controller = thisOption.controller || (thisOption.controller = {});
- zrUtil.merge(target, base); // Do not override
- zrUtil.merge(controller, base); // Do not override
- var isCategory = this.isCategory();
- completeSingle.call(this, target);
- completeSingle.call(this, controller);
- completeInactive.call(this, target, 'inRange', 'outOfRange');
- // completeInactive.call(this, target, 'outOfRange', 'inRange');
- completeController.call(this, controller);
- function completeSingle(base) {
- // Compatible with ec2 dataRange.color.
- // The mapping order of dataRange.color is: [high value, ..., low value]
- // whereas inRange.color and outOfRange.color is [low value, ..., high value]
- // Notice: ec2 has no inverse.
- if (isArray(thisOption.color)
- // If there has been inRange: {symbol: ...}, adding color is a mistake.
- // So adding color only when no inRange defined.
- && !base.inRange) {
- base.inRange = {
- color: thisOption.color.slice().reverse()
- };
- }
- // Compatible with previous logic, always give a default color, otherwise
- // simple config with no inRange and outOfRange will not work.
- // Originally we use visualMap.color as the default color, but setOption at
- // the second time the default color will be erased. So we change to use
- // constant DEFAULT_COLOR.
- // If user do not want the default color, set inRange: {color: null}.
- base.inRange = base.inRange || {
- color: ecModel.get('gradientColor')
- };
- }
- function completeInactive(base, stateExist, stateAbsent) {
- var optExist = base[stateExist];
- var optAbsent = base[stateAbsent];
- if (optExist && !optAbsent) {
- optAbsent = base[stateAbsent] = {};
- each(optExist, function (visualData, visualType) {
- if (!VisualMapping.isValidType(visualType)) {
- return;
- }
- var defa = visualDefault.get(visualType, 'inactive', isCategory);
- if (defa != null) {
- optAbsent[visualType] = defa;
- // Compatibable with ec2:
- // Only inactive color to rgba(0,0,0,0) can not
- // make label transparent, so use opacity also.
- if (visualType === 'color' && !optAbsent.hasOwnProperty('opacity') && !optAbsent.hasOwnProperty('colorAlpha')) {
- optAbsent.opacity = [0, 0];
- }
- }
- });
- }
- }
- function completeController(controller) {
- var symbolExists = (controller.inRange || {}).symbol || (controller.outOfRange || {}).symbol;
- var symbolSizeExists = (controller.inRange || {}).symbolSize || (controller.outOfRange || {}).symbolSize;
- var inactiveColor = this.get('inactiveColor');
- var itemSymbol = this.getItemSymbol();
- var defaultSymbol = itemSymbol || 'roundRect';
- each(this.stateList, function (state) {
- var itemSize = this.itemSize;
- var visuals = controller[state];
- // Set inactive color for controller if no other color
- // attr (like colorAlpha) specified.
- if (!visuals) {
- visuals = controller[state] = {
- color: isCategory ? inactiveColor : [inactiveColor]
- };
- }
- // Consistent symbol and symbolSize if not specified.
- if (visuals.symbol == null) {
- visuals.symbol = symbolExists && zrUtil.clone(symbolExists) || (isCategory ? defaultSymbol : [defaultSymbol]);
- }
- if (visuals.symbolSize == null) {
- visuals.symbolSize = symbolSizeExists && zrUtil.clone(symbolSizeExists) || (isCategory ? itemSize[0] : [itemSize[0], itemSize[0]]);
- }
- // Filter none
- visuals.symbol = mapVisual(visuals.symbol, function (symbol) {
- return symbol === 'none' ? defaultSymbol : symbol;
- });
- // Normalize symbolSize
- var symbolSize = visuals.symbolSize;
- if (symbolSize != null) {
- var max_1 = -Infinity;
- // symbolSize can be object when categories defined.
- eachVisual(symbolSize, function (value) {
- value > max_1 && (max_1 = value);
- });
- visuals.symbolSize = mapVisual(symbolSize, function (value) {
- return linearMap(value, [0, max_1], [0, itemSize[0]], true);
- });
- }
- }, this);
- }
- };
- VisualMapModel.prototype.resetItemSize = function () {
- this.itemSize = [parseFloat(this.get('itemWidth')), parseFloat(this.get('itemHeight'))];
- };
- VisualMapModel.prototype.isCategory = function () {
- return !!this.option.categories;
- };
- /**
- * @public
- * @abstract
- */
- VisualMapModel.prototype.setSelected = function (selected) {};
- VisualMapModel.prototype.getSelected = function () {
- return null;
- };
- /**
- * @public
- * @abstract
- */
- VisualMapModel.prototype.getValueState = function (value) {
- return null;
- };
- /**
- * FIXME
- * Do not publish to thirt-part-dev temporarily
- * util the interface is stable. (Should it return
- * a function but not visual meta?)
- *
- * @pubilc
- * @abstract
- * @param getColorVisual
- * params: value, valueState
- * return: color
- * @return {Object} visualMeta
- * should includes {stops, outerColors}
- * outerColor means [colorBeyondMinValue, colorBeyondMaxValue]
- */
- VisualMapModel.prototype.getVisualMeta = function (getColorVisual) {
- return null;
- };
- VisualMapModel.type = 'visualMap';
- VisualMapModel.dependencies = ['series'];
- VisualMapModel.defaultOption = {
- show: true,
- // zlevel: 0,
- z: 4,
- seriesIndex: 'all',
- min: 0,
- max: 200,
- left: 0,
- right: null,
- top: null,
- bottom: 0,
- itemWidth: null,
- itemHeight: null,
- inverse: false,
- orient: 'vertical',
- backgroundColor: 'rgba(0,0,0,0)',
- borderColor: '#ccc',
- contentColor: '#5793f3',
- inactiveColor: '#aaa',
- borderWidth: 0,
- padding: 5,
- // 接受数组分别设定上右下左边距,同css
- textGap: 10,
- precision: 0,
- textStyle: {
- color: '#333' // 值域文字颜色
- }
- };
- return VisualMapModel;
- }(ComponentModel);
- export default VisualMapModel;
|