resolveAttributeValue method
String?
resolveAttributeValue(
- DOMElement domElement,
- T element,
- String attrName,
- DOMTreeMap<
T> treeMap, { - required bool booleanDefault,
- required String? valueDefault,
- bool preserveClass = false,
- bool preserveStyle = false,
The value to set for attrName of domElement in element (null:
no attribute).
A boolean attribute resolves to 'true', or null when false. An
attribute without a value resolves to booleanDefault (boolean)
or valueDefault (any other one), as resolveAttributeDefaults.
// <option selected="true"> -> 'true'
// <option selected="false"> -> null (off)
// <div title="x"> -> 'x'
// <div title> with no value -> valueDefault
Implementation
String? resolveAttributeValue(
DOMElement domElement,
T element,
String attrName,
DOMTreeMap<T> treeMap, {
required bool booleanDefault,
required String? valueDefault,
bool preserveClass = false,
bool preserveStyle = false,
}) {
var attr = domElement.getAttribute(attrName)!;
var attrVal = attr.getValue(_domContext, treeMap);
if (preserveClass && attrName == 'class') {
var prev = getAttribute(element, attrName);
if (prev != null && prev.isNotEmpty) {
attrVal = attrVal != null && attrVal.isNotEmpty
? '$prev $attrVal'
: prev;
}
} else if (preserveStyle && attrName == 'style') {
var prev = getAttribute(element, attrName);
if (prev != null && prev.isNotEmpty) {
if (attrVal != null && attrVal.isNotEmpty) {
attrVal = !prev.endsWith(';') ? '$prev; $attrVal' : '$prev $attrVal';
} else {
attrVal = prev;
}
}
} else if ((attrName == 'src' || attrName == 'href') &&
attrVal != null &&
attrVal.isNotEmpty) {
var attrVal2 = resolveSource(attrVal);
if (attrVal != attrVal2) {
setAttribute(element, '$attrName-original', attrVal);
attrVal = attrVal2;
}
} else if (DOMAttribute.isBooleanAttribute(attrName) && attrVal != null) {
// A keyword is kept: `hidden="until-found"`.
var keyword = DOMAttribute.booleanAttributeKeyword(attrName, attrVal);
if (keyword != null) return keyword;
// A boolean attribute, also with a template value
// (`checked="{{:on}}true{{?}}false{{/}}"`): `'true'`, or `null` (off).
return DOMAttribute.parseBooleanValue(attrName, attrVal) ? 'true' : null;
}
// No value (also after a preserved class/style): the defaults.
return resolveAttributeDefaults(
attrName,
attrVal,
booleanDefault: booleanDefault,
valueDefault: valueDefault,
);
}