UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

156 lines (154 loc) 5.13 kB
/** * DevExtreme (cjs/__internal/events/core/m_emitter.feedback.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/ */ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.lock = exports.inactive = exports.active = void 0; var _emitter = _interopRequireDefault(require("../../../common/core/events/core/emitter")); var _emitter_registrator = _interopRequireDefault(require("../../../common/core/events/core/emitter_registrator")); var _pointer = _interopRequireDefault(require("../../../common/core/events/pointer")); var _index = require("../../../common/core/events/utils/index"); var _class = _interopRequireDefault(require("../../../core/class")); var _common = require("../../../core/utils/common"); var _dom = require("../../../core/utils/dom"); var _m_devices = _interopRequireDefault(require("../../core/m_devices")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e } } const ACTIVE_EVENT_NAME = exports.active = "dxactive"; const INACTIVE_EVENT_NAME = exports.inactive = "dxinactive"; const ACTIVE_TIMEOUT = 30; const INACTIVE_TIMEOUT = 400; const FeedbackEvent = _class.default.inherit({ ctor(timeout, fire) { this._timeout = timeout; this._fire = fire }, start() { const that = this; this._schedule((() => { that.force() })) }, _schedule(fn) { this.stop(); this._timer = setTimeout(fn, this._timeout) }, stop() { clearTimeout(this._timer) }, force() { if (this._fired) { return } this.stop(); this._fire(); this._fired = true }, fired() { return this._fired } }); let activeFeedback; const FeedbackEmitter = _emitter.default.inherit({ ctor() { this.callBase.apply(this, arguments); this._active = new FeedbackEvent(0, _common.noop); this._inactive = new FeedbackEvent(0, _common.noop) }, configure(data, eventName) { switch (eventName) { case ACTIVE_EVENT_NAME: data.activeTimeout = data.timeout; break; case INACTIVE_EVENT_NAME: data.inactiveTimeout = data.timeout } this.callBase(data) }, start(e) { if (activeFeedback) { const activeChildExists = (0, _dom.contains)(this.getElement().get(0), activeFeedback.getElement().get(0)); const childJustActivated = !activeFeedback._active.fired(); if (activeChildExists && childJustActivated) { this._cancel(); return } activeFeedback._inactive.force() } activeFeedback = this; this._initEvents(e); this._active.start() }, _initEvents(e) { const that = this; const eventTarget = this._getEmitterTarget(e); const mouseEvent = (0, _index.isMouseEvent)(e); const isSimulator = _m_devices.default.isSimulator(); const deferFeedback = isSimulator || !mouseEvent; const activeTimeout = (0, _common.ensureDefined)(this.activeTimeout, 30); const inactiveTimeout = (0, _common.ensureDefined)(this.inactiveTimeout, 400); this._active = new FeedbackEvent(deferFeedback ? activeTimeout : 0, (() => { that._fireEvent(ACTIVE_EVENT_NAME, e, { target: eventTarget }) })); this._inactive = new FeedbackEvent(deferFeedback ? inactiveTimeout : 0, (() => { that._fireEvent(INACTIVE_EVENT_NAME, e, { target: eventTarget }); activeFeedback = null })) }, cancel(e) { this.end(e) }, end(e) { const skipTimers = e.type !== _pointer.default.up; if (skipTimers) { this._active.stop() } else { this._active.force() } this._inactive.start(); if (skipTimers) { this._inactive.force() } }, dispose() { this._active.stop(); this._inactive.stop(); if (activeFeedback === this) { activeFeedback = null } this.callBase() }, lockInactive() { this._active.force(); this._inactive.stop(); activeFeedback = null; this._cancel(); return this._inactive.force.bind(this._inactive) } }); FeedbackEmitter.lock = function(deferred) { const lockInactive = activeFeedback ? activeFeedback.lockInactive() : _common.noop; deferred.done(lockInactive) }; (0, _emitter_registrator.default)({ emitter: FeedbackEmitter, events: [ACTIVE_EVENT_NAME, INACTIVE_EVENT_NAME] }); const { lock: lock } = FeedbackEmitter; exports.lock = lock;