From: Evan You Date: Wed, 16 Oct 2019 02:29:52 +0000 (-0400) Subject: refactor: use makeMap in v-on dom transform X-Git-Tag: v3.0.0-alpha.0~410 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6f3e768d521788d8d59bbe1a4cb52336444533fc;p=thirdparty%2Fvuejs%2Fcore.git refactor: use makeMap in v-on dom transform --- diff --git a/packages/compiler-dom/src/transforms/vOn.ts b/packages/compiler-dom/src/transforms/vOn.ts index da9f9ac2f5..7b89059b9b 100644 --- a/packages/compiler-dom/src/transforms/vOn.ts +++ b/packages/compiler-dom/src/transforms/vOn.ts @@ -10,25 +10,21 @@ import { ObjectExpression } from '@vue/compiler-core' import { V_ON_MODIFIERS_GUARD, V_ON_KEYS_GUARD } from '../runtimeHelpers' +import { makeMap } from '@vue/shared' -const EVENT_OPTION_MODIFIERS = { passive: true, once: true, capture: true } -const NOT_KEY_MODIFIERS = { - stop: true, - prevent: true, - self: true, - // system - ctrl: true, - shift: true, - alt: true, - meta: true, - // mouse - left: true, - middle: true, - right: true, - // exact - exact: true -} -const KEYBOARD_EVENTS = { onkeyup: true, onkeydown: true, onkeypress: true } +const isEventOptionModifier = /*#__PURE__*/ makeMap(`passive,once,capture`) +const isNonKeyModifier = /*#__PURE__*/ makeMap( + // event propagation management + `stop,prevent,self,` + + // system modifers + exact + `ctrl,shift,alt,meta,exact,` + + // mouse + `left,middle,right` +) +const isKeyboardEvent = /*#__PURE__*/ makeMap( + `onkeyup,onkeydown,onkeypress`, + true +) export const transformOn: DirectiveTransform = (dir, node, context) => { const { modifiers } = dir @@ -36,18 +32,18 @@ export const transformOn: DirectiveTransform = (dir, node, context) => { if (!modifiers.length) return baseResult const { key, value } = baseResult.props[0] - const runtimeModifiers = modifiers.filter(m => !(m in EVENT_OPTION_MODIFIERS)) + const runtimeModifiers = modifiers.filter(m => !isEventOptionModifier(m)) let handler = createCallExpression(context.helper(V_ON_MODIFIERS_GUARD), [ value, - JSON.stringify(runtimeModifiers.filter(m => m in NOT_KEY_MODIFIERS)) + JSON.stringify(runtimeModifiers.filter(isNonKeyModifier)) ]) - const keyModifiers = runtimeModifiers.filter(m => !(m in NOT_KEY_MODIFIERS)) + const keyModifiers = runtimeModifiers.filter(m => !isNonKeyModifier(m)) if ( keyModifiers.length && // if event name is dynamic, always wrap with keys guard (key.type === NodeTypes.COMPOUND_EXPRESSION || !key.isStatic || - key.content.toLowerCase() in KEYBOARD_EVENTS) + isKeyboardEvent(key.content)) ) { handler = createCallExpression(context.helper(V_ON_KEYS_GUARD), [ handler, @@ -57,9 +53,7 @@ export const transformOn: DirectiveTransform = (dir, node, context) => { let returnExp: CallExpression | ObjectExpression = handler - const eventOptionModifiers = modifiers.filter( - modifier => modifier in EVENT_OPTION_MODIFIERS - ) + const eventOptionModifiers = modifiers.filter(isEventOptionModifier) if (eventOptionModifiers.length) { returnExp = createObjectExpression([ createObjectProperty('handler', handler),