fix(v-on): capitalize dynamic event names
This commit is contained in:
parent
576344d2c3
commit
9152a89016
@ -22,6 +22,7 @@ export const TO_DISPLAY_STRING = Symbol(__DEV__ ? `toDisplayString` : ``)
|
|||||||
export const MERGE_PROPS = Symbol(__DEV__ ? `mergeProps` : ``)
|
export const MERGE_PROPS = Symbol(__DEV__ ? `mergeProps` : ``)
|
||||||
export const TO_HANDLERS = Symbol(__DEV__ ? `toHandlers` : ``)
|
export const TO_HANDLERS = Symbol(__DEV__ ? `toHandlers` : ``)
|
||||||
export const CAMELIZE = Symbol(__DEV__ ? `camelize` : ``)
|
export const CAMELIZE = Symbol(__DEV__ ? `camelize` : ``)
|
||||||
|
export const CAPITALIZE = Symbol(__DEV__ ? `capitalize` : ``)
|
||||||
export const SET_BLOCK_TRACKING = Symbol(__DEV__ ? `setBlockTracking` : ``)
|
export const SET_BLOCK_TRACKING = Symbol(__DEV__ ? `setBlockTracking` : ``)
|
||||||
export const PUSH_SCOPE_ID = Symbol(__DEV__ ? `pushScopeId` : ``)
|
export const PUSH_SCOPE_ID = Symbol(__DEV__ ? `pushScopeId` : ``)
|
||||||
export const POP_SCOPE_ID = Symbol(__DEV__ ? `popScopeId` : ``)
|
export const POP_SCOPE_ID = Symbol(__DEV__ ? `popScopeId` : ``)
|
||||||
@ -54,6 +55,7 @@ export const helperNameMap: any = {
|
|||||||
[MERGE_PROPS]: `mergeProps`,
|
[MERGE_PROPS]: `mergeProps`,
|
||||||
[TO_HANDLERS]: `toHandlers`,
|
[TO_HANDLERS]: `toHandlers`,
|
||||||
[CAMELIZE]: `camelize`,
|
[CAMELIZE]: `camelize`,
|
||||||
|
[CAPITALIZE]: `capitalize`,
|
||||||
[SET_BLOCK_TRACKING]: `setBlockTracking`,
|
[SET_BLOCK_TRACKING]: `setBlockTracking`,
|
||||||
[PUSH_SCOPE_ID]: `pushScopeId`,
|
[PUSH_SCOPE_ID]: `pushScopeId`,
|
||||||
[POP_SCOPE_ID]: `popScopeId`,
|
[POP_SCOPE_ID]: `popScopeId`,
|
||||||
|
@ -14,6 +14,7 @@ import { createCompilerError, ErrorCodes } from '../errors'
|
|||||||
import { processExpression } from './transformExpression'
|
import { processExpression } from './transformExpression'
|
||||||
import { validateBrowserExpression } from '../validateExpression'
|
import { validateBrowserExpression } from '../validateExpression'
|
||||||
import { isMemberExpression, hasScopeRef } from '../utils'
|
import { isMemberExpression, hasScopeRef } from '../utils'
|
||||||
|
import { CAPITALIZE } from '../runtimeHelpers'
|
||||||
|
|
||||||
const fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/
|
const fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/
|
||||||
|
|
||||||
@ -47,12 +48,16 @@ export const transformOn: DirectiveTransform = (
|
|||||||
: capitalize(rawName)
|
: capitalize(rawName)
|
||||||
eventName = createSimpleExpression(`on${normalizedName}`, true, arg.loc)
|
eventName = createSimpleExpression(`on${normalizedName}`, true, arg.loc)
|
||||||
} else {
|
} else {
|
||||||
eventName = createCompoundExpression([`"on" + (`, arg, `)`])
|
eventName = createCompoundExpression([
|
||||||
|
`"on" + ${context.helperString(CAPITALIZE)}(`,
|
||||||
|
arg,
|
||||||
|
`)`
|
||||||
|
])
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// already a compound expression.
|
// already a compound expression.
|
||||||
eventName = arg
|
eventName = arg
|
||||||
eventName.children.unshift(`"on" + (`)
|
eventName.children.unshift(`"on" + ${context.helperString(CAPITALIZE)}(`)
|
||||||
eventName.children.push(`)`)
|
eventName.children.push(`)`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -225,19 +225,7 @@ export {
|
|||||||
createCommentVNode,
|
createCommentVNode,
|
||||||
createStaticVNode
|
createStaticVNode
|
||||||
} from './vnode'
|
} from './vnode'
|
||||||
|
export { toDisplayString, camelize, capitalize } from '@vue/shared'
|
||||||
// a bit of ceremony to mark these internal only here because we need to include
|
|
||||||
// them in @vue/shared's typings
|
|
||||||
import { toDisplayString, camelize } from '@vue/shared'
|
|
||||||
/**
|
|
||||||
* @private
|
|
||||||
*/
|
|
||||||
const _toDisplayString = toDisplayString
|
|
||||||
/**
|
|
||||||
* @private
|
|
||||||
*/
|
|
||||||
const _camelize = camelize
|
|
||||||
export { _toDisplayString as toDisplayString, _camelize as camelize }
|
|
||||||
|
|
||||||
// For test-utils
|
// For test-utils
|
||||||
export { transformVNodeArgs } from './vnode'
|
export { transformVNodeArgs } from './vnode'
|
||||||
|
@ -94,6 +94,9 @@ const cacheStringFunction = <T extends (str: string) => string>(fn: T): T => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const camelizeRE = /-(\w)/g
|
const camelizeRE = /-(\w)/g
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
export const camelize = cacheStringFunction(
|
export const camelize = cacheStringFunction(
|
||||||
(str: string): string => {
|
(str: string): string => {
|
||||||
return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''))
|
return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''))
|
||||||
@ -101,12 +104,18 @@ export const camelize = cacheStringFunction(
|
|||||||
)
|
)
|
||||||
|
|
||||||
const hyphenateRE = /\B([A-Z])/g
|
const hyphenateRE = /\B([A-Z])/g
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
export const hyphenate = cacheStringFunction(
|
export const hyphenate = cacheStringFunction(
|
||||||
(str: string): string => {
|
(str: string): string => {
|
||||||
return str.replace(hyphenateRE, '-$1').toLowerCase()
|
return str.replace(hyphenateRE, '-$1').toLowerCase()
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
export const capitalize = cacheStringFunction(
|
export const capitalize = cacheStringFunction(
|
||||||
(str: string): string => {
|
(str: string): string => {
|
||||||
return str.charAt(0).toUpperCase() + str.slice(1)
|
return str.charAt(0).toUpperCase() + str.slice(1)
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
import { isArray, isObject, isPlainObject } from './index'
|
import { isArray, isObject, isPlainObject } from './index'
|
||||||
|
|
||||||
// For converting {{ interpolation }} values to displayed strings.
|
/**
|
||||||
|
* For converting {{ interpolation }} values to displayed strings.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
export const toDisplayString = (val: unknown): string => {
|
export const toDisplayString = (val: unknown): string => {
|
||||||
return val == null
|
return val == null
|
||||||
? ''
|
? ''
|
||||||
|
Loading…
x
Reference in New Issue
Block a user