UNPKG

@veams/component

Version:

Component Class for Components in Veams for static page apps

113 lines 4.77 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /** * Represents a very simple on/off handler * borrowed from @veams/query * * @module EventElement */ var componentEvents = []; var EventElement = /** @class */ (function () { /** * VeamsQuery DOM wrapper object * * @param {Object} selector - selector (element) */ function EventElement(selector) { this[0] = selector; } /** * Attach an event handler function for one or more events to the selected elements * * @param {String} eventNames - name(s) of event(s) to be registered for matched set of elements * @param {String} [selector] - selector string to filter descendants of selected elements triggering the event * @param {Function} handler - event handler function * @param {Boolean} [useCapture] - dispatch event to registered listeners before dispatching it to event target * @return {Object} - VeamsQuery object */ EventElement.prototype.on = function (eventNames, selector, handler, useCapture) { var i = 0; var events = typeof eventNames === 'string' && eventNames.split(' '); var targetSelector = typeof selector === 'string' ? selector : undefined; var evtHandler = typeof selector === 'function' ? selector : typeof handler === 'function' ? handler : undefined; var capture = typeof handler === 'boolean' ? handler : typeof useCapture === 'boolean' ? useCapture : false; var delegateTarget; if (!events) { console.error('@veams/component :: on() - Event name not specified'); return this; } if (!evtHandler) { console.error('@veams/component :: on() - Event handler not specified'); return this; } for (var j = 0; j < events.length; j++) { var _a = events[j].split('.'), event_1 = _a[0], namespace = _a[1]; var handler_1 = function (e) { if (targetSelector) { delegateTarget = e.target.closest(targetSelector); if (delegateTarget) { evtHandler(e, delegateTarget); } } else { evtHandler(e, e.currentTarget); } }; this[0].addEventListener(event_1, handler_1, capture); componentEvents.push({ node: this[0], event: event_1, namespace: namespace, handler: handler_1, originHandler: evtHandler, selector: targetSelector }); } return this; }; /** * Detach an event handler for one or more events from the selected elements * * @param {String} eventNames - name(s) of event(s) to be unregistered for matched set of elements * @param {String} [selector] - selector string to filter descendants of selected elements triggering the event * @param {Function} [handler] - event handler * @return {Object} - VeamsQuery object */ EventElement.prototype.off = function (eventNames, selector, handler) { var i = 0; var events = eventNames.split(' '); var targetSelector = typeof selector === 'string' ? selector : undefined; var evtHandler = typeof selector === 'function' ? selector : typeof handler === 'function' ? handler : undefined; for (var j = 0; j < events.length; j++) { var _a = events[j].split('.'), event_2 = _a[0], namespace = _a[1]; var k = componentEvents.length - 1; for (k; k >= 0; --k) { var unbindEvt = false; if (componentEvents[k].node === this[0] && componentEvents[k].event === event_2 && componentEvents[k].namespace === namespace && componentEvents[k].selector === targetSelector) { if (evtHandler) { if (componentEvents[k].originHandler === evtHandler || componentEvents[k].handler === evtHandler) { unbindEvt = true; } } else { unbindEvt = true; } if (unbindEvt) { this[0].removeEventListener(event_2, componentEvents[k].handler); componentEvents.splice(k, 1); } } } } return this; }; return EventElement; }()); exports.EventElement = EventElement; function default_1(selector) { return new EventElement(selector); } exports.default = default_1; ; //# sourceMappingURL=event-handler.js.map