UNPKG

jodit

Version:

Jodit is an awesome and useful wysiwyg editor with filebrowser

44 lines (43 loc) 1.81 kB
/*! * Jodit Editor (https://xdsoft.net/jodit/) * Released under MIT see LICENSE.txt in the project root for license information. * Copyright (c) 2013-2025 Valeriy Chupurnov. All rights reserved. https://xdsoft.net */ import { Component, STATUSES } from "../../component/index.js"; import { isFunction, isNumber, isPlainObject } from "../../helpers/checker/index.js"; import { assert } from "../../helpers/utils/assert.js"; import { error } from "../../helpers/utils/error/index.js"; export function debounce(timeout, firstCallImmediately = false, method = 'debounce') { return (target, propertyKey) => { const fn = target[propertyKey]; if (!isFunction(fn)) { throw error('Handler must be a Function'); } target.hookStatus(STATUSES.ready, (component) => { const { async } = component; assert(async != null, `Component ${component.componentName || component.constructor.name} should have "async:IAsync" field`); const propTimeout = isFunction(timeout) ? timeout(component) : timeout; const realTimout = isNumber(propTimeout) || isPlainObject(propTimeout) ? propTimeout : component.defaultTimeout; Object.defineProperty(component, propertyKey, { configurable: true, value: async[method](component[propertyKey].bind(component), realTimout, firstCallImmediately) }); }); return { configurable: true, get() { return fn.bind(this); } }; }; } /** * Wrap function in throttle wrapper */ export function throttle(timeout, firstCallImmediately = false) { return debounce(timeout, firstCallImmediately, 'throttle'); }