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.
317 lines
9.7 KiB
317 lines
9.7 KiB
4 weeks 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.
|
||
|
*/
|
||
|
|
||
|
|
||
|
/**
|
||
|
* 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 Model from '../../model/Model.js';
|
||
|
import { isNameSpecified } from '../../util/model.js';
|
||
|
import ComponentModel from '../../model/Component.js';
|
||
|
var getDefaultSelectorOptions = function (ecModel, type) {
|
||
|
if (type === 'all') {
|
||
|
return {
|
||
|
type: 'all',
|
||
|
title: ecModel.getLocaleModel().get(['legend', 'selector', 'all'])
|
||
|
};
|
||
|
} else if (type === 'inverse') {
|
||
|
return {
|
||
|
type: 'inverse',
|
||
|
title: ecModel.getLocaleModel().get(['legend', 'selector', 'inverse'])
|
||
|
};
|
||
|
}
|
||
|
};
|
||
|
var LegendModel = /** @class */function (_super) {
|
||
|
__extends(LegendModel, _super);
|
||
|
function LegendModel() {
|
||
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
|
_this.type = LegendModel.type;
|
||
|
_this.layoutMode = {
|
||
|
type: 'box',
|
||
|
// legend.width/height are maxWidth/maxHeight actually,
|
||
|
// whereas real width/height is calculated by its content.
|
||
|
// (Setting {left: 10, right: 10} does not make sense).
|
||
|
// So consider the case:
|
||
|
// `setOption({legend: {left: 10});`
|
||
|
// then `setOption({legend: {right: 10});`
|
||
|
// The previous `left` should be cleared by setting `ignoreSize`.
|
||
|
ignoreSize: true
|
||
|
};
|
||
|
return _this;
|
||
|
}
|
||
|
LegendModel.prototype.init = function (option, parentModel, ecModel) {
|
||
|
this.mergeDefaultAndTheme(option, ecModel);
|
||
|
option.selected = option.selected || {};
|
||
|
this._updateSelector(option);
|
||
|
};
|
||
|
LegendModel.prototype.mergeOption = function (option, ecModel) {
|
||
|
_super.prototype.mergeOption.call(this, option, ecModel);
|
||
|
this._updateSelector(option);
|
||
|
};
|
||
|
LegendModel.prototype._updateSelector = function (option) {
|
||
|
var selector = option.selector;
|
||
|
var ecModel = this.ecModel;
|
||
|
if (selector === true) {
|
||
|
selector = option.selector = ['all', 'inverse'];
|
||
|
}
|
||
|
if (zrUtil.isArray(selector)) {
|
||
|
zrUtil.each(selector, function (item, index) {
|
||
|
zrUtil.isString(item) && (item = {
|
||
|
type: item
|
||
|
});
|
||
|
selector[index] = zrUtil.merge(item, getDefaultSelectorOptions(ecModel, item.type));
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
LegendModel.prototype.optionUpdated = function () {
|
||
|
this._updateData(this.ecModel);
|
||
|
var legendData = this._data;
|
||
|
// If selectedMode is single, try to select one
|
||
|
if (legendData[0] && this.get('selectedMode') === 'single') {
|
||
|
var hasSelected = false;
|
||
|
// If has any selected in option.selected
|
||
|
for (var i = 0; i < legendData.length; i++) {
|
||
|
var name_1 = legendData[i].get('name');
|
||
|
if (this.isSelected(name_1)) {
|
||
|
// Force to unselect others
|
||
|
this.select(name_1);
|
||
|
hasSelected = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
// Try select the first if selectedMode is single
|
||
|
!hasSelected && this.select(legendData[0].get('name'));
|
||
|
}
|
||
|
};
|
||
|
LegendModel.prototype._updateData = function (ecModel) {
|
||
|
var potentialData = [];
|
||
|
var availableNames = [];
|
||
|
ecModel.eachRawSeries(function (seriesModel) {
|
||
|
var seriesName = seriesModel.name;
|
||
|
availableNames.push(seriesName);
|
||
|
var isPotential;
|
||
|
if (seriesModel.legendVisualProvider) {
|
||
|
var provider = seriesModel.legendVisualProvider;
|
||
|
var names = provider.getAllNames();
|
||
|
if (!ecModel.isSeriesFiltered(seriesModel)) {
|
||
|
availableNames = availableNames.concat(names);
|
||
|
}
|
||
|
if (names.length) {
|
||
|
potentialData = potentialData.concat(names);
|
||
|
} else {
|
||
|
isPotential = true;
|
||
|
}
|
||
|
} else {
|
||
|
isPotential = true;
|
||
|
}
|
||
|
if (isPotential && isNameSpecified(seriesModel)) {
|
||
|
potentialData.push(seriesModel.name);
|
||
|
}
|
||
|
});
|
||
|
/**
|
||
|
* @type {Array.<string>}
|
||
|
* @private
|
||
|
*/
|
||
|
this._availableNames = availableNames;
|
||
|
// If legend.data is not specified in option, use availableNames as data,
|
||
|
// which is convenient for user preparing option.
|
||
|
var rawData = this.get('data') || potentialData;
|
||
|
var legendNameMap = zrUtil.createHashMap();
|
||
|
var legendData = zrUtil.map(rawData, function (dataItem) {
|
||
|
// Can be string or number
|
||
|
if (zrUtil.isString(dataItem) || zrUtil.isNumber(dataItem)) {
|
||
|
dataItem = {
|
||
|
name: dataItem
|
||
|
};
|
||
|
}
|
||
|
if (legendNameMap.get(dataItem.name)) {
|
||
|
// remove legend name duplicate
|
||
|
return null;
|
||
|
}
|
||
|
legendNameMap.set(dataItem.name, true);
|
||
|
return new Model(dataItem, this, this.ecModel);
|
||
|
}, this);
|
||
|
/**
|
||
|
* @type {Array.<module:echarts/model/Model>}
|
||
|
* @private
|
||
|
*/
|
||
|
this._data = zrUtil.filter(legendData, function (item) {
|
||
|
return !!item;
|
||
|
});
|
||
|
};
|
||
|
LegendModel.prototype.getData = function () {
|
||
|
return this._data;
|
||
|
};
|
||
|
LegendModel.prototype.select = function (name) {
|
||
|
var selected = this.option.selected;
|
||
|
var selectedMode = this.get('selectedMode');
|
||
|
if (selectedMode === 'single') {
|
||
|
var data = this._data;
|
||
|
zrUtil.each(data, function (dataItem) {
|
||
|
selected[dataItem.get('name')] = false;
|
||
|
});
|
||
|
}
|
||
|
selected[name] = true;
|
||
|
};
|
||
|
LegendModel.prototype.unSelect = function (name) {
|
||
|
if (this.get('selectedMode') !== 'single') {
|
||
|
this.option.selected[name] = false;
|
||
|
}
|
||
|
};
|
||
|
LegendModel.prototype.toggleSelected = function (name) {
|
||
|
var selected = this.option.selected;
|
||
|
// Default is true
|
||
|
if (!selected.hasOwnProperty(name)) {
|
||
|
selected[name] = true;
|
||
|
}
|
||
|
this[selected[name] ? 'unSelect' : 'select'](name);
|
||
|
};
|
||
|
LegendModel.prototype.allSelect = function () {
|
||
|
var data = this._data;
|
||
|
var selected = this.option.selected;
|
||
|
zrUtil.each(data, function (dataItem) {
|
||
|
selected[dataItem.get('name', true)] = true;
|
||
|
});
|
||
|
};
|
||
|
LegendModel.prototype.inverseSelect = function () {
|
||
|
var data = this._data;
|
||
|
var selected = this.option.selected;
|
||
|
zrUtil.each(data, function (dataItem) {
|
||
|
var name = dataItem.get('name', true);
|
||
|
// Initially, default value is true
|
||
|
if (!selected.hasOwnProperty(name)) {
|
||
|
selected[name] = true;
|
||
|
}
|
||
|
selected[name] = !selected[name];
|
||
|
});
|
||
|
};
|
||
|
LegendModel.prototype.isSelected = function (name) {
|
||
|
var selected = this.option.selected;
|
||
|
return !(selected.hasOwnProperty(name) && !selected[name]) && zrUtil.indexOf(this._availableNames, name) >= 0;
|
||
|
};
|
||
|
LegendModel.prototype.getOrient = function () {
|
||
|
return this.get('orient') === 'vertical' ? {
|
||
|
index: 1,
|
||
|
name: 'vertical'
|
||
|
} : {
|
||
|
index: 0,
|
||
|
name: 'horizontal'
|
||
|
};
|
||
|
};
|
||
|
LegendModel.type = 'legend.plain';
|
||
|
LegendModel.dependencies = ['series'];
|
||
|
LegendModel.defaultOption = {
|
||
|
// zlevel: 0,
|
||
|
z: 4,
|
||
|
show: true,
|
||
|
orient: 'horizontal',
|
||
|
left: 'center',
|
||
|
// right: 'center',
|
||
|
top: 0,
|
||
|
// bottom: null,
|
||
|
align: 'auto',
|
||
|
backgroundColor: 'rgba(0,0,0,0)',
|
||
|
borderColor: '#ccc',
|
||
|
borderRadius: 0,
|
||
|
borderWidth: 0,
|
||
|
padding: 5,
|
||
|
itemGap: 10,
|
||
|
itemWidth: 25,
|
||
|
itemHeight: 14,
|
||
|
symbolRotate: 'inherit',
|
||
|
symbolKeepAspect: true,
|
||
|
inactiveColor: '#ccc',
|
||
|
inactiveBorderColor: '#ccc',
|
||
|
inactiveBorderWidth: 'auto',
|
||
|
itemStyle: {
|
||
|
color: 'inherit',
|
||
|
opacity: 'inherit',
|
||
|
borderColor: 'inherit',
|
||
|
borderWidth: 'auto',
|
||
|
borderCap: 'inherit',
|
||
|
borderJoin: 'inherit',
|
||
|
borderDashOffset: 'inherit',
|
||
|
borderMiterLimit: 'inherit'
|
||
|
},
|
||
|
lineStyle: {
|
||
|
width: 'auto',
|
||
|
color: 'inherit',
|
||
|
inactiveColor: '#ccc',
|
||
|
inactiveWidth: 2,
|
||
|
opacity: 'inherit',
|
||
|
type: 'inherit',
|
||
|
cap: 'inherit',
|
||
|
join: 'inherit',
|
||
|
dashOffset: 'inherit',
|
||
|
miterLimit: 'inherit'
|
||
|
},
|
||
|
textStyle: {
|
||
|
color: '#333'
|
||
|
},
|
||
|
selectedMode: true,
|
||
|
selector: false,
|
||
|
selectorLabel: {
|
||
|
show: true,
|
||
|
borderRadius: 10,
|
||
|
padding: [3, 5, 3, 5],
|
||
|
fontSize: 12,
|
||
|
fontFamily: 'sans-serif',
|
||
|
color: '#666',
|
||
|
borderWidth: 1,
|
||
|
borderColor: '#666'
|
||
|
},
|
||
|
emphasis: {
|
||
|
selectorLabel: {
|
||
|
show: true,
|
||
|
color: '#eee',
|
||
|
backgroundColor: '#666'
|
||
|
}
|
||
|
},
|
||
|
selectorPosition: 'auto',
|
||
|
selectorItemGap: 7,
|
||
|
selectorButtonGap: 10,
|
||
|
tooltip: {
|
||
|
show: false
|
||
|
}
|
||
|
};
|
||
|
return LegendModel;
|
||
|
}(ComponentModel);
|
||
|
export default LegendModel;
|