devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
99 lines (92 loc) • 3.1 kB
JavaScript
/**
* DevExtreme (esm/viz/components/tracker.js)
* Version: 21.1.4
* Build date: Mon Jun 21 2021
*
* Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
import {
eventData as _eventData
} from "../../events/utils/index";
import domAdapter from "../../core/dom_adapter";
import {
name as clickEventName
} from "../../events/click";
import pointer from "../../events/pointer";
import eventsEngine from "../../events/core/events_engine";
var downPointerEventName = pointer.down;
var movePointerEventName = pointer.move;
export function Tracker(parameters) {
this._initHandlers(parameters)
}
Tracker.prototype = {
constructor: Tracker,
_initHandlers: function(parameters) {
var document = domAdapter.getDocument();
parameters.getCoords = function(e) {
var data = _eventData(e);
var 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)
}
var 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) {
var id = params.getData(e);
if (id >= 0) {
params.click({
node: params.getNode(id),
coords: params.getCoords(e),
event: e
})
}
}
function processHover(e, params) {
var id = params.getData(e);
if (id >= 0) {
params.getNode(id).setHover()
} else {
params.widget.clearHover()
}
}
function processTooltip(e, params) {
var id = params.getData(e, true);
var coords;
if (id >= 0) {
coords = _eventData(e);
params.getNode(id).showTooltip([coords.x, coords.y])
} else {
params.widget.hideTooltip()
}
}