UNPKG

@clayui/shared

Version:

ClayShared component

34 lines (33 loc) 885 B
/** * SPDX-FileCopyrightText: © 2021 Liferay, Inc. <https://liferay.com> * SPDX-License-Identifier: BSD-3-Clause */ function isDisabled(node) { return !!(node.disabled || node.closest('[disabled]')); } function delegate(element, eventName, selector, callback, capture) { const eventHandler = event => { const { defaultPrevented, target } = event; if (target) { if (defaultPrevented || eventName === 'click' && isDisabled(target)) { return; } const delegateTarget = target.closest(selector); if (delegateTarget) { event.delegateTarget = delegateTarget; callback(event); } } }; element.addEventListener(eventName, eventHandler, capture); return { dispose() { element.removeEventListener(eventName, eventHandler, capture); } }; } export { delegate }; export default delegate;