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 86 87 88 89 90 91 92 93 94 95 96 | 3x 3x 3x 283x 283x 283x 283x 283x 283x 283x 283x 2x 1x 1x 1x 1x 283x 281x 7x 7x 281x 55x 280x 219x 219x 219x 219x 219x 281x 283x 3x 3x 3x 281x 281x 281x 281x 281x 281x 5x 5x 5x 3x 2x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 276x 6x 5x 3x 276x 2x 2x 2x 2x 2x 2x 2x 2x 274x 274x | import {
NOOP,
includeBooleanAttr,
isSpecialBooleanAttr,
isSymbol,
makeMap,
} from '@vue/shared'
import {
type ComponentInternalInstance,
DeprecationTypes,
compatUtils,
} from '@vue/runtime-core'
export const xlinkNS = 'http://www.w3.org/1999/xlink'
export function patchAttr(
el: Element,
key: string,
value: any,
isSVG: boolean,
instance?: ComponentInternalInstance | null,
isBoolean: boolean = isSpecialBooleanAttr(key),
): void {
if (isSVG && key.startsWith('xlink:')) {
if (value == null) {
el.removeAttributeNS(xlinkNS, key.slice(6, key.length))
} else {
el.setAttributeNS(xlinkNS, key, value)
}
} else {
if (__COMPAT__ && compatCoerceAttr(el, key, value, instance)) {
return
}
// note we are only checking boolean attributes that don't have a
// corresponding dom prop of the same name here.
if (value == null || (isBoolean && !includeBooleanAttr(value))) {
el.removeAttribute(key)
} else {
// attribute value is a string https://html.spec.whatwg.org/multipage/dom.html#attributes
el.setAttribute(
key,
isBoolean ? '' : isSymbol(value) ? String(value) : value,
)
}
}
}
// 2.x compat
const isEnumeratedAttr = __COMPAT__
? /*@__PURE__*/ makeMap('contenteditable,draggable,spellcheck')
: NOOP
export function compatCoerceAttr(
el: Element,
key: string,
value: unknown,
instance: ComponentInternalInstance | null = null,
): boolean {
if (isEnumeratedAttr(key)) {
const v2CoercedValue =
value === undefined
? null
: value === null || value === false || value === 'false'
? 'false'
: 'true'
if (
v2CoercedValue &&
compatUtils.softAssertCompatEnabled(
DeprecationTypes.ATTR_ENUMERATED_COERCION,
instance,
key,
value,
v2CoercedValue,
)
) {
el.setAttribute(key, v2CoercedValue)
return true
}
} else if (
value === false &&
!(el.tagName === 'INPUT' && key === 'value') &&
!isSpecialBooleanAttr(key) &&
compatUtils.isCompatEnabled(DeprecationTypes.ATTR_FALSE_VALUE, instance)
) {
compatUtils.warnDeprecation(
DeprecationTypes.ATTR_FALSE_VALUE,
instance,
key,
)
el.removeAttribute(key)
return true
}
return false
}
|