Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 12x 12x 12x 12x 12x 12x 12x 12x 1x 2x 2x 2x 2x 2x 2x 2x 2x 1x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 2x 2x 11x 9x 9x 7x 7x 7x 9x 2x 2x 2x 2x 9x 11x 1x 1x 1x 9x 9x 9x 4x 4x 4x 4x 4x 4x 4x 4x 9x 9x 1x 7x 7x 7x 7x 7x 9x 9x 7x 7x 7x | import { hyphenate } from '@vue/shared'
import { INSVElement } from '../nodes'
import {
callWithAsyncErrorHandling,
ComponentInternalInstance
} from '@vue/runtime-core'
interface Invoker extends EventListener {
value: EventValue
}
type EventValue = Function | Function[]
export function addEventListener(
el: INSVElement,
event: string,
handler: EventListener,
options: EventListenerOptions = {}
) {
el.addEventListener(event, handler, options)
}
export function removeEventListener(
el: INSVElement,
event: string,
handler: EventListener,
options: EventListenerOptions = {}
) {
el.removeEventListener(event, handler)
}
export function patchEvent(
el: INSVElement & { _vei?: Record<string, Invoker | undefined> },
rawName: string,
prevValue: EventValue | null,
nextValue: EventValue | null,
instance: ComponentInternalInstance | null = null
) {
// vei = vue event invokers
const invokers = el._vei || (el._vei = {})
const existingInvoker = invokers[rawName]
if (nextValue && existingInvoker) {
// patch
existingInvoker.value = nextValue
} else {
const [name, options] = parseName(rawName)
if (nextValue) {
// add
const invoker = (invokers[rawName] = createInvoker(nextValue, instance))
addEventListener(el, name, invoker, options)
} else if (existingInvoker) {
// remove
removeEventListener(el, name, existingInvoker, options)
invokers[rawName] = undefined
}
}
}
const optionsModifierRE = /(?:Once|Capture)$/
function parseName(name: string): [string, EventListenerOptions | undefined] {
let options: EventListenerOptions | undefined
if (optionsModifierRE.test(name)) {
options = {}
let m
while ((m = name.match(optionsModifierRE))) {
name = name.slice(0, name.length - m[0].length)
;(options as any)[m[0].toLowerCase()] = true
options
}
}
return [hyphenate(name.slice(2)), options]
}
function createInvoker(
initialValue: EventValue,
instance: ComponentInternalInstance | null
) {
const invoker: Invoker = (e: Event) => {
callWithAsyncErrorHandling(invoker.value, instance, 5, [e])
}
invoker.value = initialValue
return invoker
}
|