@clayui/shared
Version:
ClayShared component
40 lines (38 loc) • 1.02 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
exports.delegate = delegate;
/**
* 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);
}
};
}
var _default = exports.default = delegate;