UNPKG

bootstrap-vue-3

Version:

Early (but lovely) implementation of Vue 3, Bootstrap 5 and Typescript

66 lines (59 loc) 2.05 kB
import {HAS_PASSIVE_EVENT_SUPPORT} from './env' import {isObject} from './inspect' // Normalize event options based on support of passive option // Exported only for testing purposes export const parseEventOptions = (options: any): boolean | EventListenerOptions | undefined => { /* istanbul ignore else: can't test in JSDOM, as it supports passive */ if (HAS_PASSIVE_EVENT_SUPPORT) { return isObject(options) ? options : {capture: !!options || false} } else { // Need to translate to actual Boolean value return !!(isObject(options) ? options.capture : options) } } // Attach an event listener to an element export const eventOn = ( el: Element, eventName: string, handler: EventListener, options: boolean | EventListenerOptions | undefined ) => { if (el && el.addEventListener) { el.addEventListener(eventName, handler, parseEventOptions(options)) } } // Remove an event listener from an element export const eventOff = ( el: Element, eventName: string, handler: EventListener, options: boolean | EventListenerOptions | undefined ) => { if (el && el.removeEventListener) { el.removeEventListener(eventName, handler, options) } } // Utility method to add/remove a event listener based on first argument (boolean) // It passes all other arguments to the `eventOn()` or `eventOff` method export const eventOnOff = (on: Boolean, eventParams: Parameters<typeof eventOff>) => { const method = on ? eventOn : eventOff method(...eventParams) } //checks to see if keyboard event export const isKeyBoardEvent = (event: Event): event is KeyboardEvent => ['keydown', 'keypress', 'keyup'].includes(event.type) // Utility method to prevent the default event handling and propagation export const stopEvent = ( event: Event, {preventDefault = true, propagation = true, immediatePropagation = false} = {} ) => { if (preventDefault) { event.preventDefault() } if (propagation) { event.stopPropagation() } if (immediatePropagation) { event.stopImmediatePropagation() } }