142 lines
5.5 KiB
JavaScript
142 lines
5.5 KiB
JavaScript
|
|
||
|
/*
|
||
|
* 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 { trim, isArray, each, reduce } from 'zrender/lib/core/util.js';
|
||
|
import { retrieveVisualColorForTooltipMarker, createTooltipMarkup } from './tooltipMarkup.js';
|
||
|
import { retrieveRawValue } from '../../data/helper/dataProvider.js';
|
||
|
import { isNameSpecified } from '../../util/model.js';
|
||
|
export function defaultSeriesFormatTooltip(opt) {
|
||
|
var series = opt.series;
|
||
|
var dataIndex = opt.dataIndex;
|
||
|
var multipleSeries = opt.multipleSeries;
|
||
|
var data = series.getData();
|
||
|
var tooltipDims = data.mapDimensionsAll('defaultedTooltip');
|
||
|
var tooltipDimLen = tooltipDims.length;
|
||
|
var value = series.getRawValue(dataIndex);
|
||
|
var isValueArr = isArray(value);
|
||
|
var markerColor = retrieveVisualColorForTooltipMarker(series, dataIndex);
|
||
|
// Complicated rule for pretty tooltip.
|
||
|
var inlineValue;
|
||
|
var inlineValueType;
|
||
|
var subBlocks;
|
||
|
var sortParam;
|
||
|
if (tooltipDimLen > 1 || isValueArr && !tooltipDimLen) {
|
||
|
var formatArrResult = formatTooltipArrayValue(value, series, dataIndex, tooltipDims, markerColor);
|
||
|
inlineValue = formatArrResult.inlineValues;
|
||
|
inlineValueType = formatArrResult.inlineValueTypes;
|
||
|
subBlocks = formatArrResult.blocks;
|
||
|
// Only support tooltip sort by the first inline value. It's enough in most cases.
|
||
|
sortParam = formatArrResult.inlineValues[0];
|
||
|
} else if (tooltipDimLen) {
|
||
|
var dimInfo = data.getDimensionInfo(tooltipDims[0]);
|
||
|
sortParam = inlineValue = retrieveRawValue(data, dataIndex, tooltipDims[0]);
|
||
|
inlineValueType = dimInfo.type;
|
||
|
} else {
|
||
|
sortParam = inlineValue = isValueArr ? value[0] : value;
|
||
|
}
|
||
|
// Do not show generated series name. It might not be readable.
|
||
|
var seriesNameSpecified = isNameSpecified(series);
|
||
|
var seriesName = seriesNameSpecified && series.name || '';
|
||
|
var itemName = data.getName(dataIndex);
|
||
|
var inlineName = multipleSeries ? seriesName : itemName;
|
||
|
return createTooltipMarkup('section', {
|
||
|
header: seriesName,
|
||
|
// When series name is not specified, do not show a header line with only '-'.
|
||
|
// This case always happens in tooltip.trigger: 'item'.
|
||
|
noHeader: multipleSeries || !seriesNameSpecified,
|
||
|
sortParam: sortParam,
|
||
|
blocks: [createTooltipMarkup('nameValue', {
|
||
|
markerType: 'item',
|
||
|
markerColor: markerColor,
|
||
|
// Do not mix display seriesName and itemName in one tooltip,
|
||
|
// which might confuses users.
|
||
|
name: inlineName,
|
||
|
// name dimension might be auto assigned, where the name might
|
||
|
// be not readable. So we check trim here.
|
||
|
noName: !trim(inlineName),
|
||
|
value: inlineValue,
|
||
|
valueType: inlineValueType,
|
||
|
dataIndex: dataIndex
|
||
|
})].concat(subBlocks || [])
|
||
|
});
|
||
|
}
|
||
|
function formatTooltipArrayValue(value, series, dataIndex, tooltipDims, colorStr) {
|
||
|
// check: category-no-encode-has-axis-data in dataset.html
|
||
|
var data = series.getData();
|
||
|
var isValueMultipleLine = reduce(value, function (isValueMultipleLine, val, idx) {
|
||
|
var dimItem = data.getDimensionInfo(idx);
|
||
|
return isValueMultipleLine = isValueMultipleLine || dimItem && dimItem.tooltip !== false && dimItem.displayName != null;
|
||
|
}, false);
|
||
|
var inlineValues = [];
|
||
|
var inlineValueTypes = [];
|
||
|
var blocks = [];
|
||
|
tooltipDims.length ? each(tooltipDims, function (dim) {
|
||
|
setEachItem(retrieveRawValue(data, dataIndex, dim), dim);
|
||
|
})
|
||
|
// By default, all dims is used on tooltip.
|
||
|
: each(value, setEachItem);
|
||
|
function setEachItem(val, dim) {
|
||
|
var dimInfo = data.getDimensionInfo(dim);
|
||
|
// If `dimInfo.tooltip` is not set, show tooltip.
|
||
|
if (!dimInfo || dimInfo.otherDims.tooltip === false) {
|
||
|
return;
|
||
|
}
|
||
|
if (isValueMultipleLine) {
|
||
|
blocks.push(createTooltipMarkup('nameValue', {
|
||
|
markerType: 'subItem',
|
||
|
markerColor: colorStr,
|
||
|
name: dimInfo.displayName,
|
||
|
value: val,
|
||
|
valueType: dimInfo.type
|
||
|
}));
|
||
|
} else {
|
||
|
inlineValues.push(val);
|
||
|
inlineValueTypes.push(dimInfo.type);
|
||
|
}
|
||
|
}
|
||
|
return {
|
||
|
inlineValues: inlineValues,
|
||
|
inlineValueTypes: inlineValueTypes,
|
||
|
blocks: blocks
|
||
|
};
|
||
|
}
|