UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

100 lines (99 loc) 2.97 kB
/** * DevExtreme (cjs/__internal/core/utils/m_callbacks.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.default = exports.Callbacks = void 0; const Callback = function(options) { this._options = options || {}; this._list = []; this._queue = []; this._firing = false; this._fired = false; this._firingIndexes = [] }; Callback.prototype._fireCore = function(context, args) { const firingIndexes = this._firingIndexes; const list = this._list; const { stopOnFalse: stopOnFalse } = this._options; const step = firingIndexes.length; for (firingIndexes[step] = 0; firingIndexes[step] < list.length; firingIndexes[step]++) { const result = list[firingIndexes[step]].apply(context, args); if (false === result && stopOnFalse) { break } } firingIndexes.pop() }; Callback.prototype.add = function(fn) { if ("function" === typeof fn && (!this._options.unique || !this.has(fn))) { this._list.push(fn) } return this }; Callback.prototype.remove = function(fn) { const list = this._list; const firingIndexes = this._firingIndexes; const index = list.indexOf(fn); if (index > -1) { list.splice(index, 1); if (this._firing && firingIndexes.length) { for (let step = 0; step < firingIndexes.length; step++) { if (index <= firingIndexes[step]) { firingIndexes[step]-- } } } } return this }; Callback.prototype.has = function(fn) { const list = this._list; return fn ? list.indexOf(fn) > -1 : !!list.length }; Callback.prototype.empty = function(fn) { this._list = []; return this }; Callback.prototype.fireWith = function(context, args) { const queue = this._queue; args = args || []; args = args.slice ? args.slice() : args; if (this._options.syncStrategy) { this._firing = true; this._fireCore(context, args) } else { queue.push([context, args]); if (this._firing) { return } this._firing = true; while (queue.length) { const memory = queue.shift(); this._fireCore(memory[0], memory[1]) } } this._firing = false; this._fired = true; return this }; Callback.prototype.fire = function() { this.fireWith(this, arguments) }; Callback.prototype.fired = function() { return this._fired }; const Callbacks = function(options) { return new Callback(options) }; exports.Callbacks = Callbacks; var _default = exports.default = Callbacks;