devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
243 lines (241 loc) • 7.77 kB
JavaScript
/**
* DevExtreme (cjs/__internal/events/utils/index.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/
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.stopEventsSkipping = exports.setEventFixMethod = exports.normalizeKeyName = exports.needSkipEvent = exports.isTouchEvent = exports.isPointerEvent = exports.isMouseEvent = exports.isKeyboardEvent = exports.isFakeClickEvent = exports.isDxMouseWheelEvent = exports.isCommandKeyPressed = exports.hasTouches = exports.getChar = exports.forceSkipEvents = exports.fireEvent = exports.eventSource = exports.eventDelta = exports.eventData = exports.createEvent = exports.addNamespace = void 0;
var _events_engine = _interopRequireDefault(require("../../../common/core/events/core/events_engine"));
var _renderer = _interopRequireDefault(require("../../../core/renderer"));
var _extend = require("../../../core/utils/extend");
var _iterator = require("../../../core/utils/iterator");
var _selectors = require("../../../ui/widget/selectors");
var _m_add_namespace = _interopRequireDefault(require("./m_add_namespace"));
function _interopRequireDefault(e) {
return e && e.__esModule ? e : {
default: e
}
}
const KEY_MAP = {
backspace: "backspace",
tab: "tab",
enter: "enter",
escape: "escape",
pageup: "pageUp",
pagedown: "pageDown",
end: "end",
home: "home",
arrowleft: "leftArrow",
arrowup: "upArrow",
arrowright: "rightArrow",
arrowdown: "downArrow",
delete: "del",
" ": "space",
f: "F",
a: "A",
"*": "asterisk",
"-": "minus",
alt: "alt",
control: "control",
shift: "shift"
};
const LEGACY_KEY_CODES = {
8: "backspace",
9: "tab",
13: "enter",
27: "escape",
33: "pageUp",
34: "pageDown",
35: "end",
36: "home",
37: "leftArrow",
38: "upArrow",
39: "rightArrow",
40: "downArrow",
46: "del",
32: "space",
70: "F",
65: "A",
106: "asterisk",
109: "minus",
189: "minus",
173: "minus",
16: "shift",
17: "control",
18: "alt"
};
const EVENT_SOURCES_REGEX = {
dx: /^dx/i,
mouse: /(mouse|wheel)/i,
touch: /^touch/i,
keyboard: /^key/i,
pointer: /^(ms)?pointer/i
};
const eventSource = _ref => {
let {
type: type
} = _ref;
let result = "other";
(0, _iterator.each)(EVENT_SOURCES_REGEX, (function(key) {
if (this.test(type)) {
result = key;
return false
}
}));
return result
};
exports.eventSource = eventSource;
let fixMethod = e => e;
const getEvent = originalEvent => _events_engine.default.Event(originalEvent, originalEvent);
const copyEvent = originalEvent => fixMethod(getEvent(originalEvent), originalEvent);
const isDxEvent = e => "dx" === eventSource(e);
const isNativeMouseEvent = e => "mouse" === eventSource(e);
const isNativeTouchEvent = e => "touch" === eventSource(e);
const isPointerEvent = e => "pointer" === eventSource(e);
exports.isPointerEvent = isPointerEvent;
const isMouseEvent = e => isNativeMouseEvent(e) || (isPointerEvent(e) || isDxEvent(e)) && "mouse" === e.pointerType;
exports.isMouseEvent = isMouseEvent;
const isDxMouseWheelEvent = e => e && "dxmousewheel" === e.type;
exports.isDxMouseWheelEvent = isDxMouseWheelEvent;
const isTouchEvent = e => isNativeTouchEvent(e) || (isPointerEvent(e) || isDxEvent(e)) && "touch" === e.pointerType;
exports.isTouchEvent = isTouchEvent;
const isKeyboardEvent = e => "keyboard" === eventSource(e);
exports.isKeyboardEvent = isKeyboardEvent;
const isFakeClickEvent = _ref2 => {
let {
screenX: screenX,
offsetX: offsetX,
pageX: pageX
} = _ref2;
return 0 === screenX && !offsetX && 0 === pageX
};
exports.isFakeClickEvent = isFakeClickEvent;
const eventData = _ref3 => {
let {
pageX: pageX,
pageY: pageY,
timeStamp: timeStamp
} = _ref3;
return {
x: pageX,
y: pageY,
time: timeStamp
}
};
exports.eventData = eventData;
const eventDelta = (from, to) => ({
x: to.x - from.x,
y: to.y - from.y,
time: to.time - from.time || 1
});
exports.eventDelta = eventDelta;
const hasTouches = e => {
const {
originalEvent: originalEvent,
pointers: pointers
} = e;
if (isNativeTouchEvent(e)) {
return (originalEvent.touches || []).length
}
if (isDxEvent(e)) {
return (pointers || []).length
}
return 0
};
exports.hasTouches = hasTouches;
let skipEvents = false;
const forceSkipEvents = () => {
skipEvents = true
};
exports.forceSkipEvents = forceSkipEvents;
const stopEventsSkipping = () => {
skipEvents = false
};
exports.stopEventsSkipping = stopEventsSkipping;
const needSkipEvent = e => {
if (skipEvents) {
return true
}
const {
target: target
} = e;
const $target = (0, _renderer.default)(target);
const isContentEditable = (null === target || void 0 === target ? void 0 : target.isContentEditable) || (null === target || void 0 === target ? void 0 : target.hasAttribute("contenteditable"));
const touchInEditable = $target.is("input, textarea, select") || isContentEditable;
if (isDxMouseWheelEvent(e)) {
const isTextArea = $target.is("textarea") && $target.hasClass("dx-texteditor-input");
if (isTextArea || isContentEditable) {
return false
}
const isInputFocused = $target.is("input[type='number'], textarea, select") && $target.is(":focus");
return isInputFocused
}
if (isMouseEvent(e)) {
return touchInEditable || e.which > 1
}
if (isTouchEvent(e)) {
return touchInEditable && (0, _selectors.focused)($target)
}
};
exports.needSkipEvent = needSkipEvent;
const setEventFixMethod = func => {
fixMethod = func
};
exports.setEventFixMethod = setEventFixMethod;
const createEvent = (originalEvent, args) => {
const event = copyEvent(originalEvent);
if (args) {
(0, _extend.extend)(event, args)
}
return event
};
exports.createEvent = createEvent;
const fireEvent = props => {
const {
originalEvent: originalEvent,
delegateTarget: delegateTarget
} = props;
const event = createEvent(originalEvent, props);
_events_engine.default.trigger(delegateTarget || event.target, event);
return event
};
exports.fireEvent = fireEvent;
const normalizeKeyName = _ref4 => {
let {
key: key,
which: which
} = _ref4;
const normalizedKey = KEY_MAP[null === key || void 0 === key ? void 0 : key.toLowerCase()] || key;
const normalizedKeyFromWhich = LEGACY_KEY_CODES[which];
if (normalizedKeyFromWhich && normalizedKey === key) {
return normalizedKeyFromWhich
}
if (!normalizedKey && which) {
return String.fromCharCode(which)
}
return normalizedKey
};
exports.normalizeKeyName = normalizeKeyName;
const getChar = _ref5 => {
let {
key: key,
which: which
} = _ref5;
return key || String.fromCharCode(which)
};
exports.getChar = getChar;
const addNamespace = exports.addNamespace = _m_add_namespace.default;
const isCommandKeyPressed = _ref6 => {
let {
ctrlKey: ctrlKey,
metaKey: metaKey
} = _ref6;
return ctrlKey || metaKey
};
exports.isCommandKeyPressed = isCommandKeyPressed;