UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

99 lines (92 loc) 3.16 kB
/** * DevExtreme (esm/viz/components/tracker.js) * Version: 24.2.6 * Build date: Mon Mar 17 2025 * * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ import { eventData as _eventData } from "../../common/core/events/utils/index"; import domAdapter from "../../core/dom_adapter"; import { name as clickEventName } from "../../common/core/events/click"; import pointer from "../../common/core/events/pointer"; import eventsEngine from "../../common/core/events/core/events_engine"; const downPointerEventName = pointer.down; const movePointerEventName = pointer.move; export function Tracker(parameters) { this._initHandlers(parameters) } Tracker.prototype = { constructor: Tracker, _initHandlers: function(parameters) { const document = domAdapter.getDocument(); parameters.getCoords = function(e) { const data = _eventData(e); const offset = parameters.widget._renderer.getRootOffset(); return [data.x - offset.left, data.y - offset.top] }; parameters.root.on(clickEventName, clickHandler); parameters.root.on(downPointerEventName, downHandler); eventsEngine.on(document, downPointerEventName, downHandler); eventsEngine.on(document, movePointerEventName, moveHandler); this._disposeHandlers = function() { parameters.root.off(clickEventName, clickHandler); parameters.root.off(downPointerEventName, downHandler); eventsEngine.off(document, downPointerEventName, downHandler); eventsEngine.off(document, movePointerEventName, moveHandler) }; function clickHandler(e) { processClick(e, parameters) } let isRootDown = false; function downHandler(e) { if (isRootDown) { isRootDown = false } else { if (void 0 !== parameters.getData(e)) { isRootDown = true } moveHandler(e) } } function moveHandler(e) { processHover(e, parameters); parameters.widget._getOption("tooltip").enabled && processTooltip(e, parameters) } }, dispose: function() { this._disposeHandlers() } }; function processClick(e, params) { const id = params.getData(e); if (id >= 0) { params.click({ node: params.getNode(id), coords: params.getCoords(e), event: e }) } } function processHover(e, params) { const id = params.getData(e); if (id >= 0) { params.getNode(id).setHover() } else { params.widget.clearHover() } } function processTooltip(e, params) { const id = params.getData(e, true); let coords; if (id >= 0) { coords = _eventData(e); params.getNode(id).showTooltip([coords.x, coords.y]) } else { params.widget.hideTooltip() } }