UNPKG

vanillajs-browser-helpers

Version:

Collection of convenience code snippets (helpers) that aims to make it a little easier to work with vanilla JS in the browser

58 lines (57 loc) 1.97 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.delegateHandler = void 0; var isEventTarget_1 = __importDefault(require("./isEventTarget")); var on_1 = __importDefault(require("./on")); var off_1 = __importDefault(require("./off")); var matches_1 = __importDefault(require("./matches")); /** * Creates a function that triggers the given handler if the current event target * matches the given selector * * @param selector - CSS Selector that matches the element to delegate the event to * @param handler - Handler to trigger if selector selector match * @return The delegate event handler * * @example * * ```ts * const handler = delegateHandler('.my-element', (e: Event) => {}); * document.addEventHandler('click', handler); * ``` */ function delegateHandler(selector, handler) { var cb = 'handleEvent' in handler ? handler.handleEvent : handler; return function (e) { var target = e.target; while (target && !matches_1.default(target, selector)) { var parent_1 = target.parentElement; if (!parent_1) { return; } target = parent_1; } var evt = e; evt.delegateTarget = target; return cb.call(target, evt); }; } exports.delegateHandler = delegateHandler; function delegate(target, eventNames, selector, handler, options) { if (!isEventTarget_1.default(target)) { options = handler; handler = selector; selector = eventNames; eventNames = target; target = document; } var delHandler = delegateHandler(selector, handler); on_1.default(target, eventNames, delHandler, options); return function () { return off_1.default(target, eventNames, delHandler); }; } exports.default = delegate;