123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854 |
- import { __extends } from "tslib";
- import { bind, each, clone, trim, isString, isFunction, isArray, isObject, extend } from 'zrender/lib/core/util.js';
- import env from 'zrender/lib/core/env.js';
- import TooltipHTMLContent from './TooltipHTMLContent.js';
- import TooltipRichContent from './TooltipRichContent.js';
- import { convertToColorString, encodeHTML, formatTpl } from '../../util/format.js';
- import { parsePercent } from '../../util/number.js';
- import { Rect } from '../../util/graphic.js';
- import findPointFromSeries from '../axisPointer/findPointFromSeries.js';
- import { getLayoutRect } from '../../util/layout.js';
- import Model from '../../model/Model.js';
- import * as globalListener from '../axisPointer/globalListener.js';
- import * as axisHelper from '../../coord/axisHelper.js';
- import * as axisPointerViewHelper from '../axisPointer/viewHelper.js';
- import { getTooltipRenderMode, preParseFinder, queryReferringComponents } from '../../util/model.js';
- import ComponentView from '../../view/Component.js';
- import { format as timeFormat } from '../../util/time.js';
- import { getECData } from '../../util/innerStore.js';
- import { shouldTooltipConfine } from './helper.js';
- import { normalizeTooltipFormatResult } from '../../model/mixin/dataFormat.js';
- import { createTooltipMarkup, buildTooltipMarkup, TooltipMarkupStyleCreator } from './tooltipMarkup.js';
- import { findEventDispatcher } from '../../util/event.js';
- import { clear, createOrUpdate } from '../../util/throttle.js';
- var proxyRect = new Rect({
- shape: {
- x: -1,
- y: -1,
- width: 2,
- height: 2
- }
- });
- var TooltipView = function (_super) {
- __extends(TooltipView, _super);
- function TooltipView() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.type = TooltipView.type;
- return _this;
- }
- TooltipView.prototype.init = function (ecModel, api) {
- if (env.node || !api.getDom()) {
- return;
- }
- var tooltipModel = ecModel.getComponent('tooltip');
- var renderMode = this._renderMode = getTooltipRenderMode(tooltipModel.get('renderMode'));
- this._tooltipContent = renderMode === 'richText' ? new TooltipRichContent(api) : new TooltipHTMLContent(api, {
- appendTo: tooltipModel.get('appendToBody', true) ? 'body' : tooltipModel.get('appendTo', true)
- });
- };
- TooltipView.prototype.render = function (tooltipModel, ecModel, api) {
- if (env.node || !api.getDom()) {
- return;
- }
-
- this.group.removeAll();
- this._tooltipModel = tooltipModel;
- this._ecModel = ecModel;
- this._api = api;
- var tooltipContent = this._tooltipContent;
- tooltipContent.update(tooltipModel);
- tooltipContent.setEnterable(tooltipModel.get('enterable'));
- this._initGlobalListener();
- this._keepShow();
-
-
-
-
-
-
- if (this._renderMode !== 'richText' && tooltipModel.get('transitionDuration')) {
- createOrUpdate(this, '_updatePosition', 50, 'fixRate');
- } else {
- clear(this, '_updatePosition');
- }
- };
- TooltipView.prototype._initGlobalListener = function () {
- var tooltipModel = this._tooltipModel;
- var triggerOn = tooltipModel.get('triggerOn');
- globalListener.register('itemTooltip', this._api, bind(function (currTrigger, e, dispatchAction) {
-
- if (triggerOn !== 'none') {
- if (triggerOn.indexOf(currTrigger) >= 0) {
- this._tryShow(e, dispatchAction);
- } else if (currTrigger === 'leave') {
- this._hide(dispatchAction);
- }
- }
- }, this));
- };
- TooltipView.prototype._keepShow = function () {
- var tooltipModel = this._tooltipModel;
- var ecModel = this._ecModel;
- var api = this._api;
- var triggerOn = tooltipModel.get('triggerOn');
-
- if (this._lastX != null && this._lastY != null
-
-
-
- && triggerOn !== 'none' && triggerOn !== 'click') {
- var self_1 = this;
- clearTimeout(this._refreshUpdateTimeout);
- this._refreshUpdateTimeout = setTimeout(function () {
-
-
-
- !api.isDisposed() && self_1.manuallyShowTip(tooltipModel, ecModel, api, {
- x: self_1._lastX,
- y: self_1._lastY,
- dataByCoordSys: self_1._lastDataByCoordSys
- });
- });
- }
- };
-
- TooltipView.prototype.manuallyShowTip = function (tooltipModel, ecModel, api, payload) {
- if (payload.from === this.uid || env.node || !api.getDom()) {
- return;
- }
- var dispatchAction = makeDispatchAction(payload, api);
-
- this._ticket = '';
-
- var dataByCoordSys = payload.dataByCoordSys;
- var cmptRef = findComponentReference(payload, ecModel, api);
- if (cmptRef) {
- var rect = cmptRef.el.getBoundingRect().clone();
- rect.applyTransform(cmptRef.el.transform);
- this._tryShow({
- offsetX: rect.x + rect.width / 2,
- offsetY: rect.y + rect.height / 2,
- target: cmptRef.el,
- position: payload.position,
-
-
- positionDefault: 'bottom'
- }, dispatchAction);
- } else if (payload.tooltip && payload.x != null && payload.y != null) {
- var el = proxyRect;
- el.x = payload.x;
- el.y = payload.y;
- el.update();
- getECData(el).tooltipConfig = {
- name: null,
- option: payload.tooltip
- };
-
- this._tryShow({
- offsetX: payload.x,
- offsetY: payload.y,
- target: el
- }, dispatchAction);
- } else if (dataByCoordSys) {
- this._tryShow({
- offsetX: payload.x,
- offsetY: payload.y,
- position: payload.position,
- dataByCoordSys: dataByCoordSys,
- tooltipOption: payload.tooltipOption
- }, dispatchAction);
- } else if (payload.seriesIndex != null) {
- if (this._manuallyAxisShowTip(tooltipModel, ecModel, api, payload)) {
- return;
- }
- var pointInfo = findPointFromSeries(payload, ecModel);
- var cx = pointInfo.point[0];
- var cy = pointInfo.point[1];
- if (cx != null && cy != null) {
- this._tryShow({
- offsetX: cx,
- offsetY: cy,
- target: pointInfo.el,
- position: payload.position,
-
-
- positionDefault: 'bottom'
- }, dispatchAction);
- }
- } else if (payload.x != null && payload.y != null) {
-
-
- api.dispatchAction({
- type: 'updateAxisPointer',
- x: payload.x,
- y: payload.y
- });
- this._tryShow({
- offsetX: payload.x,
- offsetY: payload.y,
- position: payload.position,
- target: api.getZr().findHover(payload.x, payload.y).target
- }, dispatchAction);
- }
- };
- TooltipView.prototype.manuallyHideTip = function (tooltipModel, ecModel, api, payload) {
- var tooltipContent = this._tooltipContent;
- if (this._tooltipModel) {
- tooltipContent.hideLater(this._tooltipModel.get('hideDelay'));
- }
- this._lastX = this._lastY = this._lastDataByCoordSys = null;
- if (payload.from !== this.uid) {
- this._hide(makeDispatchAction(payload, api));
- }
- };
-
-
-
- TooltipView.prototype._manuallyAxisShowTip = function (tooltipModel, ecModel, api, payload) {
- var seriesIndex = payload.seriesIndex;
- var dataIndex = payload.dataIndex;
-
- var coordSysAxesInfo = ecModel.getComponent('axisPointer').coordSysAxesInfo;
- if (seriesIndex == null || dataIndex == null || coordSysAxesInfo == null) {
- return;
- }
- var seriesModel = ecModel.getSeriesByIndex(seriesIndex);
- if (!seriesModel) {
- return;
- }
- var data = seriesModel.getData();
- var tooltipCascadedModel = buildTooltipModel([data.getItemModel(dataIndex), seriesModel, (seriesModel.coordinateSystem || {}).model], this._tooltipModel);
- if (tooltipCascadedModel.get('trigger') !== 'axis') {
- return;
- }
- api.dispatchAction({
- type: 'updateAxisPointer',
- seriesIndex: seriesIndex,
- dataIndex: dataIndex,
- position: payload.position
- });
- return true;
- };
- TooltipView.prototype._tryShow = function (e, dispatchAction) {
- var el = e.target;
- var tooltipModel = this._tooltipModel;
- if (!tooltipModel) {
- return;
- }
-
- this._lastX = e.offsetX;
- this._lastY = e.offsetY;
- var dataByCoordSys = e.dataByCoordSys;
- if (dataByCoordSys && dataByCoordSys.length) {
- this._showAxisTooltip(dataByCoordSys, e);
- } else if (el) {
- var ecData = getECData(el);
- if (ecData.ssrType === 'legend') {
-
- return;
- }
- this._lastDataByCoordSys = null;
- var seriesDispatcher_1;
- var cmptDispatcher_1;
- findEventDispatcher(el, function (target) {
-
- if (getECData(target).dataIndex != null) {
- seriesDispatcher_1 = target;
- return true;
- }
-
- if (getECData(target).tooltipConfig != null) {
- cmptDispatcher_1 = target;
- return true;
- }
- }, true);
- if (seriesDispatcher_1) {
- this._showSeriesItemTooltip(e, seriesDispatcher_1, dispatchAction);
- } else if (cmptDispatcher_1) {
- this._showComponentItemTooltip(e, cmptDispatcher_1, dispatchAction);
- } else {
- this._hide(dispatchAction);
- }
- } else {
- this._lastDataByCoordSys = null;
- this._hide(dispatchAction);
- }
- };
- TooltipView.prototype._showOrMove = function (tooltipModel, cb) {
-
-
-
-
- var delay = tooltipModel.get('showDelay');
- cb = bind(cb, this);
- clearTimeout(this._showTimout);
- delay > 0 ? this._showTimout = setTimeout(cb, delay) : cb();
- };
- TooltipView.prototype._showAxisTooltip = function (dataByCoordSys, e) {
- var ecModel = this._ecModel;
- var globalTooltipModel = this._tooltipModel;
- var point = [e.offsetX, e.offsetY];
- var singleTooltipModel = buildTooltipModel([e.tooltipOption], globalTooltipModel);
- var renderMode = this._renderMode;
- var cbParamsList = [];
- var articleMarkup = createTooltipMarkup('section', {
- blocks: [],
- noHeader: true
- });
-
- var markupTextArrLegacy = [];
- var markupStyleCreator = new TooltipMarkupStyleCreator();
- each(dataByCoordSys, function (itemCoordSys) {
- each(itemCoordSys.dataByAxis, function (axisItem) {
- var axisModel = ecModel.getComponent(axisItem.axisDim + 'Axis', axisItem.axisIndex);
- var axisValue = axisItem.value;
- if (!axisModel || axisValue == null) {
- return;
- }
- var axisValueLabel = axisPointerViewHelper.getValueLabel(axisValue, axisModel.axis, ecModel, axisItem.seriesDataIndices, axisItem.valueLabelOpt);
- var axisSectionMarkup = createTooltipMarkup('section', {
- header: axisValueLabel,
- noHeader: !trim(axisValueLabel),
- sortBlocks: true,
- blocks: []
- });
- articleMarkup.blocks.push(axisSectionMarkup);
- each(axisItem.seriesDataIndices, function (idxItem) {
- var series = ecModel.getSeriesByIndex(idxItem.seriesIndex);
- var dataIndex = idxItem.dataIndexInside;
- var cbParams = series.getDataParams(dataIndex);
-
- if (cbParams.dataIndex < 0) {
- return;
- }
- cbParams.axisDim = axisItem.axisDim;
- cbParams.axisIndex = axisItem.axisIndex;
- cbParams.axisType = axisItem.axisType;
- cbParams.axisId = axisItem.axisId;
- cbParams.axisValue = axisHelper.getAxisRawValue(axisModel.axis, {
- value: axisValue
- });
- cbParams.axisValueLabel = axisValueLabel;
-
-
- cbParams.marker = markupStyleCreator.makeTooltipMarker('item', convertToColorString(cbParams.color), renderMode);
- var seriesTooltipResult = normalizeTooltipFormatResult(series.formatTooltip(dataIndex, true, null));
- var frag = seriesTooltipResult.frag;
- if (frag) {
- var valueFormatter = buildTooltipModel([series], globalTooltipModel).get('valueFormatter');
- axisSectionMarkup.blocks.push(valueFormatter ? extend({
- valueFormatter: valueFormatter
- }, frag) : frag);
- }
- if (seriesTooltipResult.text) {
- markupTextArrLegacy.push(seriesTooltipResult.text);
- }
- cbParamsList.push(cbParams);
- });
- });
- });
-
-
- articleMarkup.blocks.reverse();
- markupTextArrLegacy.reverse();
- var positionExpr = e.position;
- var orderMode = singleTooltipModel.get('order');
- var builtMarkupText = buildTooltipMarkup(articleMarkup, markupStyleCreator, renderMode, orderMode, ecModel.get('useUTC'), singleTooltipModel.get('textStyle'));
- builtMarkupText && markupTextArrLegacy.unshift(builtMarkupText);
- var blockBreak = renderMode === 'richText' ? '\n\n' : '<br/>';
- var allMarkupText = markupTextArrLegacy.join(blockBreak);
- this._showOrMove(singleTooltipModel, function () {
- if (this._updateContentNotChangedOnAxis(dataByCoordSys, cbParamsList)) {
- this._updatePosition(singleTooltipModel, positionExpr, point[0], point[1], this._tooltipContent, cbParamsList);
- } else {
- this._showTooltipContent(singleTooltipModel, allMarkupText, cbParamsList, Math.random() + '', point[0], point[1], positionExpr, null, markupStyleCreator);
- }
- });
-
-
- };
- TooltipView.prototype._showSeriesItemTooltip = function (e, dispatcher, dispatchAction) {
- var ecModel = this._ecModel;
- var ecData = getECData(dispatcher);
-
-
-
- var seriesIndex = ecData.seriesIndex;
- var seriesModel = ecModel.getSeriesByIndex(seriesIndex);
-
- var dataModel = ecData.dataModel || seriesModel;
- var dataIndex = ecData.dataIndex;
- var dataType = ecData.dataType;
- var data = dataModel.getData(dataType);
- var renderMode = this._renderMode;
- var positionDefault = e.positionDefault;
- var tooltipModel = buildTooltipModel([data.getItemModel(dataIndex), dataModel, seriesModel && (seriesModel.coordinateSystem || {}).model], this._tooltipModel, positionDefault ? {
- position: positionDefault
- } : null);
- var tooltipTrigger = tooltipModel.get('trigger');
- if (tooltipTrigger != null && tooltipTrigger !== 'item') {
- return;
- }
- var params = dataModel.getDataParams(dataIndex, dataType);
- var markupStyleCreator = new TooltipMarkupStyleCreator();
-
-
- params.marker = markupStyleCreator.makeTooltipMarker('item', convertToColorString(params.color), renderMode);
- var seriesTooltipResult = normalizeTooltipFormatResult(dataModel.formatTooltip(dataIndex, false, dataType));
- var orderMode = tooltipModel.get('order');
- var valueFormatter = tooltipModel.get('valueFormatter');
- var frag = seriesTooltipResult.frag;
- var markupText = frag ? buildTooltipMarkup(valueFormatter ? extend({
- valueFormatter: valueFormatter
- }, frag) : frag, markupStyleCreator, renderMode, orderMode, ecModel.get('useUTC'), tooltipModel.get('textStyle')) : seriesTooltipResult.text;
- var asyncTicket = 'item_' + dataModel.name + '_' + dataIndex;
- this._showOrMove(tooltipModel, function () {
- this._showTooltipContent(tooltipModel, markupText, params, asyncTicket, e.offsetX, e.offsetY, e.position, e.target, markupStyleCreator);
- });
-
-
- dispatchAction({
- type: 'showTip',
- dataIndexInside: dataIndex,
- dataIndex: data.getRawIndex(dataIndex),
- seriesIndex: seriesIndex,
- from: this.uid
- });
- };
- TooltipView.prototype._showComponentItemTooltip = function (e, el, dispatchAction) {
- var isHTMLRenderMode = this._renderMode === 'html';
- var ecData = getECData(el);
- var tooltipConfig = ecData.tooltipConfig;
- var tooltipOpt = tooltipConfig.option || {};
- var encodeHTMLContent = tooltipOpt.encodeHTMLContent;
- if (isString(tooltipOpt)) {
- var content = tooltipOpt;
- tooltipOpt = {
- content: content,
-
- formatter: content
- };
-
-
-
- encodeHTMLContent = true;
- }
- if (encodeHTMLContent && isHTMLRenderMode && tooltipOpt.content) {
-
- tooltipOpt = clone(tooltipOpt);
- tooltipOpt.content = encodeHTML(tooltipOpt.content);
- }
- var tooltipModelCascade = [tooltipOpt];
- var cmpt = this._ecModel.getComponent(ecData.componentMainType, ecData.componentIndex);
- if (cmpt) {
- tooltipModelCascade.push(cmpt);
- }
-
-
-
- tooltipModelCascade.push({
- formatter: tooltipOpt.content
- });
- var positionDefault = e.positionDefault;
- var subTooltipModel = buildTooltipModel(tooltipModelCascade, this._tooltipModel, positionDefault ? {
- position: positionDefault
- } : null);
- var defaultHtml = subTooltipModel.get('content');
- var asyncTicket = Math.random() + '';
-
- var markupStyleCreator = new TooltipMarkupStyleCreator();
-
-
-
- this._showOrMove(subTooltipModel, function () {
-
-
- var formatterParams = clone(subTooltipModel.get('formatterParams') || {});
- this._showTooltipContent(subTooltipModel, defaultHtml, formatterParams, asyncTicket, e.offsetX, e.offsetY, e.position, el, markupStyleCreator);
- });
-
- dispatchAction({
- type: 'showTip',
- from: this.uid
- });
- };
- TooltipView.prototype._showTooltipContent = function (
- // Use Model<TooltipOption> insteadof TooltipModel because this model may be from series or other options.
- // Instead of top level tooltip.
- tooltipModel, defaultHtml, params, asyncTicket, x, y, positionExpr, el, markupStyleCreator) {
-
- this._ticket = '';
- if (!tooltipModel.get('showContent') || !tooltipModel.get('show')) {
- return;
- }
- var tooltipContent = this._tooltipContent;
- tooltipContent.setEnterable(tooltipModel.get('enterable'));
- var formatter = tooltipModel.get('formatter');
- positionExpr = positionExpr || tooltipModel.get('position');
- var html = defaultHtml;
- var nearPoint = this._getNearestPoint([x, y], params, tooltipModel.get('trigger'), tooltipModel.get('borderColor'));
- var nearPointColor = nearPoint.color;
- if (formatter) {
- if (isString(formatter)) {
- var useUTC = tooltipModel.ecModel.get('useUTC');
- var params0 = isArray(params) ? params[0] : params;
- var isTimeAxis = params0 && params0.axisType && params0.axisType.indexOf('time') >= 0;
- html = formatter;
- if (isTimeAxis) {
- html = timeFormat(params0.axisValue, html, useUTC);
- }
- html = formatTpl(html, params, true);
- } else if (isFunction(formatter)) {
- var callback = bind(function (cbTicket, html) {
- if (cbTicket === this._ticket) {
- tooltipContent.setContent(html, markupStyleCreator, tooltipModel, nearPointColor, positionExpr);
- this._updatePosition(tooltipModel, positionExpr, x, y, tooltipContent, params, el);
- }
- }, this);
- this._ticket = asyncTicket;
- html = formatter(params, asyncTicket, callback);
- } else {
- html = formatter;
- }
- }
- tooltipContent.setContent(html, markupStyleCreator, tooltipModel, nearPointColor, positionExpr);
- tooltipContent.show(tooltipModel, nearPointColor);
- this._updatePosition(tooltipModel, positionExpr, x, y, tooltipContent, params, el);
- };
- TooltipView.prototype._getNearestPoint = function (point, tooltipDataParams, trigger, borderColor) {
- if (trigger === 'axis' || isArray(tooltipDataParams)) {
- return {
- color: borderColor || (this._renderMode === 'html' ? '#fff' : 'none')
- };
- }
- if (!isArray(tooltipDataParams)) {
- return {
- color: borderColor || tooltipDataParams.color || tooltipDataParams.borderColor
- };
- }
- };
- TooltipView.prototype._updatePosition = function (tooltipModel, positionExpr, x,
- // Mouse x
- y,
- // Mouse y
- content, params, el) {
- var viewWidth = this._api.getWidth();
- var viewHeight = this._api.getHeight();
- positionExpr = positionExpr || tooltipModel.get('position');
- var contentSize = content.getSize();
- var align = tooltipModel.get('align');
- var vAlign = tooltipModel.get('verticalAlign');
- var rect = el && el.getBoundingRect().clone();
- el && rect.applyTransform(el.transform);
- if (isFunction(positionExpr)) {
-
- positionExpr = positionExpr([x, y], params, content.el, rect, {
- viewSize: [viewWidth, viewHeight],
- contentSize: contentSize.slice()
- });
- }
- if (isArray(positionExpr)) {
- x = parsePercent(positionExpr[0], viewWidth);
- y = parsePercent(positionExpr[1], viewHeight);
- } else if (isObject(positionExpr)) {
- var boxLayoutPosition = positionExpr;
- boxLayoutPosition.width = contentSize[0];
- boxLayoutPosition.height = contentSize[1];
- var layoutRect = getLayoutRect(boxLayoutPosition, {
- width: viewWidth,
- height: viewHeight
- });
- x = layoutRect.x;
- y = layoutRect.y;
- align = null;
-
-
- vAlign = null;
- }
-
- else if (isString(positionExpr) && el) {
- var pos = calcTooltipPosition(positionExpr, rect, contentSize, tooltipModel.get('borderWidth'));
- x = pos[0];
- y = pos[1];
- } else {
- var pos = refixTooltipPosition(x, y, content, viewWidth, viewHeight, align ? null : 20, vAlign ? null : 20);
- x = pos[0];
- y = pos[1];
- }
- align && (x -= isCenterAlign(align) ? contentSize[0] / 2 : align === 'right' ? contentSize[0] : 0);
- vAlign && (y -= isCenterAlign(vAlign) ? contentSize[1] / 2 : vAlign === 'bottom' ? contentSize[1] : 0);
- if (shouldTooltipConfine(tooltipModel)) {
- var pos = confineTooltipPosition(x, y, content, viewWidth, viewHeight);
- x = pos[0];
- y = pos[1];
- }
- content.moveTo(x, y);
- };
-
-
- TooltipView.prototype._updateContentNotChangedOnAxis = function (dataByCoordSys, cbParamsList) {
- var lastCoordSys = this._lastDataByCoordSys;
- var lastCbParamsList = this._cbParamsList;
- var contentNotChanged = !!lastCoordSys && lastCoordSys.length === dataByCoordSys.length;
- contentNotChanged && each(lastCoordSys, function (lastItemCoordSys, indexCoordSys) {
- var lastDataByAxis = lastItemCoordSys.dataByAxis || [];
- var thisItemCoordSys = dataByCoordSys[indexCoordSys] || {};
- var thisDataByAxis = thisItemCoordSys.dataByAxis || [];
- contentNotChanged = contentNotChanged && lastDataByAxis.length === thisDataByAxis.length;
- contentNotChanged && each(lastDataByAxis, function (lastItem, indexAxis) {
- var thisItem = thisDataByAxis[indexAxis] || {};
- var lastIndices = lastItem.seriesDataIndices || [];
- var newIndices = thisItem.seriesDataIndices || [];
- contentNotChanged = contentNotChanged && lastItem.value === thisItem.value && lastItem.axisType === thisItem.axisType && lastItem.axisId === thisItem.axisId && lastIndices.length === newIndices.length;
- contentNotChanged && each(lastIndices, function (lastIdxItem, j) {
- var newIdxItem = newIndices[j];
- contentNotChanged = contentNotChanged && lastIdxItem.seriesIndex === newIdxItem.seriesIndex && lastIdxItem.dataIndex === newIdxItem.dataIndex;
- });
-
- lastCbParamsList && each(lastItem.seriesDataIndices, function (idxItem) {
- var seriesIdx = idxItem.seriesIndex;
- var cbParams = cbParamsList[seriesIdx];
- var lastCbParams = lastCbParamsList[seriesIdx];
- if (cbParams && lastCbParams && lastCbParams.data !== cbParams.data) {
- contentNotChanged = false;
- }
- });
- });
- });
- this._lastDataByCoordSys = dataByCoordSys;
- this._cbParamsList = cbParamsList;
- return !!contentNotChanged;
- };
- TooltipView.prototype._hide = function (dispatchAction) {
-
-
-
-
- this._lastDataByCoordSys = null;
- dispatchAction({
- type: 'hideTip',
- from: this.uid
- });
- };
- TooltipView.prototype.dispose = function (ecModel, api) {
- if (env.node || !api.getDom()) {
- return;
- }
- clear(this, '_updatePosition');
- this._tooltipContent.dispose();
- globalListener.unregister('itemTooltip', api);
- };
- TooltipView.type = 'tooltip';
- return TooltipView;
- }(ComponentView);
- function buildTooltipModel(modelCascade, globalTooltipModel, defaultTooltipOption) {
-
- var ecModel = globalTooltipModel.ecModel;
- var resultModel;
- if (defaultTooltipOption) {
- resultModel = new Model(defaultTooltipOption, ecModel, ecModel);
- resultModel = new Model(globalTooltipModel.option, resultModel, ecModel);
- } else {
- resultModel = globalTooltipModel;
- }
- for (var i = modelCascade.length - 1; i >= 0; i--) {
- var tooltipOpt = modelCascade[i];
- if (tooltipOpt) {
- if (tooltipOpt instanceof Model) {
- tooltipOpt = tooltipOpt.get('tooltip', true);
- }
-
-
-
-
-
- if (isString(tooltipOpt)) {
- tooltipOpt = {
- formatter: tooltipOpt
- };
- }
- if (tooltipOpt) {
- resultModel = new Model(tooltipOpt, resultModel, ecModel);
- }
- }
- }
- return resultModel;
- }
- function makeDispatchAction(payload, api) {
- return payload.dispatchAction || bind(api.dispatchAction, api);
- }
- function refixTooltipPosition(x, y, content, viewWidth, viewHeight, gapH, gapV) {
- var size = content.getSize();
- var width = size[0];
- var height = size[1];
- if (gapH != null) {
-
-
-
-
- if (x + width + gapH + 2 > viewWidth) {
- x -= width + gapH;
- } else {
- x += gapH;
- }
- }
- if (gapV != null) {
- if (y + height + gapV > viewHeight) {
- y -= height + gapV;
- } else {
- y += gapV;
- }
- }
- return [x, y];
- }
- function confineTooltipPosition(x, y, content, viewWidth, viewHeight) {
- var size = content.getSize();
- var width = size[0];
- var height = size[1];
- x = Math.min(x + width, viewWidth) - width;
- y = Math.min(y + height, viewHeight) - height;
- x = Math.max(x, 0);
- y = Math.max(y, 0);
- return [x, y];
- }
- function calcTooltipPosition(position, rect, contentSize, borderWidth) {
- var domWidth = contentSize[0];
- var domHeight = contentSize[1];
- var offset = Math.ceil(Math.SQRT2 * borderWidth) + 8;
- var x = 0;
- var y = 0;
- var rectWidth = rect.width;
- var rectHeight = rect.height;
- switch (position) {
- case 'inside':
- x = rect.x + rectWidth / 2 - domWidth / 2;
- y = rect.y + rectHeight / 2 - domHeight / 2;
- break;
- case 'top':
- x = rect.x + rectWidth / 2 - domWidth / 2;
- y = rect.y - domHeight - offset;
- break;
- case 'bottom':
- x = rect.x + rectWidth / 2 - domWidth / 2;
- y = rect.y + rectHeight + offset;
- break;
- case 'left':
- x = rect.x - domWidth - offset;
- y = rect.y + rectHeight / 2 - domHeight / 2;
- break;
- case 'right':
- x = rect.x + rectWidth + offset;
- y = rect.y + rectHeight / 2 - domHeight / 2;
- }
- return [x, y];
- }
- function isCenterAlign(align) {
- return align === 'center' || align === 'middle';
- }
- function findComponentReference(payload, ecModel, api) {
- var queryOptionMap = preParseFinder(payload).queryOptionMap;
- var componentMainType = queryOptionMap.keys()[0];
- if (!componentMainType || componentMainType === 'series') {
- return;
- }
- var queryResult = queryReferringComponents(ecModel, componentMainType, queryOptionMap.get(componentMainType), {
- useDefault: false,
- enableAll: false,
- enableNone: false
- });
- var model = queryResult.models[0];
- if (!model) {
- return;
- }
- var view = api.getViewOfComponentModel(model);
- var el;
- view.group.traverse(function (subEl) {
- var tooltipConfig = getECData(subEl).tooltipConfig;
- if (tooltipConfig && tooltipConfig.name === payload.name) {
- el = subEl;
- return true;
- }
- });
- if (el) {
- return {
- componentMainType: componentMainType,
- componentIndex: model.componentIndex,
- el: el
- };
- }
- }
- export default TooltipView;
|