UNPKG

@taiga-ui/event-plugins

Version:

This is a library for optimizing performance sensitive events and declarative preventDefault and stopPropagation

24 lines 3.21 kB
import { TimedEventPlugin } from './timed-event.plugin'; export class ThrottleEventPlugin extends TimedEventPlugin { constructor() { super(...arguments); this.regExp = /\.throttle~(?<time>\d+)(?<units>ms|s)/; } addEventListener(element, eventName, handler) { let timeout; const unsubscribe = this.manager.addEventListener(element, this.unwrap(eventName), (event) => { if (timeout !== undefined) { return; } handler(event); timeout = setTimeout(() => { timeout = undefined; }, this.getDelay(eventName)); }); return () => { clearTimeout(timeout); unsubscribe(); }; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyb3R0bGUucGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZXZlbnQtcGx1Z2lucy9zcmMvcGx1Z2lucy90aHJvdHRsZS5wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGdCQUFnQjtJQUF6RDs7UUFDZ0MsV0FBTSxHQUFHLHVDQUF1QyxDQUFDO0lBOEJqRixDQUFDO0lBNUJtQixnQkFBZ0IsQ0FDNUIsT0FBb0IsRUFDcEIsU0FBaUIsRUFDakIsT0FBaUI7UUFFakIsSUFBSSxPQUFrRCxDQUFDO1FBRXZELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQzdDLE9BQU8sRUFDUCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUN0QixDQUFDLEtBQVksRUFBUSxFQUFFO1lBQ25CLElBQUksT0FBTyxLQUFLLFNBQVMsRUFBRTtnQkFDdkIsT0FBTzthQUNWO1lBRUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWYsT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3RCLE9BQU8sR0FBRyxTQUFTLENBQUM7WUFDeEIsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQ0osQ0FBQztRQUVGLE9BQU8sR0FBRyxFQUFFO1lBQ1IsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RCLFdBQVcsRUFBRSxDQUFDO1FBQ2xCLENBQUMsQ0FBQztJQUNOLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VGltZWRFdmVudFBsdWdpbn0gZnJvbSAnLi90aW1lZC1ldmVudC5wbHVnaW4nO1xuXG5leHBvcnQgY2xhc3MgVGhyb3R0bGVFdmVudFBsdWdpbiBleHRlbmRzIFRpbWVkRXZlbnRQbHVnaW4ge1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSByZWFkb25seSByZWdFeHAgPSAvXFwudGhyb3R0bGV+KD88dGltZT5cXGQrKSg/PHVuaXRzPm1zfHMpLztcblxuICAgIHB1YmxpYyBvdmVycmlkZSBhZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICAgICAgZXZlbnROYW1lOiBzdHJpbmcsXG4gICAgICAgIGhhbmRsZXI6IEZ1bmN0aW9uLFxuICAgICk6IEZ1bmN0aW9uIHtcbiAgICAgICAgbGV0IHRpbWVvdXQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gdGhpcy5tYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgdGhpcy51bndyYXAoZXZlbnROYW1lKSxcbiAgICAgICAgICAgIChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyKGV2ZW50KTtcblxuICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9LCB0aGlzLmdldERlbGF5KGV2ZW50TmFtZSkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfTtcbiAgICB9XG59XG4iXX0=