vue
Version:
Reactive, component-oriented view layer for modern web interfaces.
38 lines (33 loc) • 973 B
JavaScript
/* @flow */
import { cached, camelize } from 'shared/util'
const normalize = cached(camelize)
function normalizeKeyName (str: string): string {
if (str.match(/^v\-/)) {
return str.replace(/(v-[a-z\-]+\:)([a-z\-]+)$/i, ($, directive, prop) => {
return directive + normalize(prop)
})
}
return normalize(str)
}
function transformNode (el: ASTElement) {
if (Array.isArray(el.attrsList)) {
el.attrsList.forEach(attr => {
if (attr.name && attr.name.match(/\-/)) {
const realName = normalizeKeyName(attr.name)
if (el.attrsMap) {
el.attrsMap[realName] = el.attrsMap[attr.name]
delete el.attrsMap[attr.name]
}
if (el.rawAttrsMap && el.rawAttrsMap[attr.name]) {
el.rawAttrsMap[realName] = el.rawAttrsMap[attr.name]
// $flow-disable-line
delete el.rawAttrsMap[attr.name]
}
attr.name = realName
}
})
}
}
export default {
transformNode
}