from static method

DOMAttribute? from(
  1. String? name,
  2. Object? value
)

Implementation

static DOMAttribute? from(String? name, Object? value) {
  name = normalizeName(name);
  if (name == null) return null;

  if (value is String && DOMTemplate.possiblyATemplate(value)) {
    var template = DOMTemplate.parse(value);
    if (!template.hasOnlyContent) {
      return DOMAttribute(name, DOMAttributeValueTemplate(value));
    }
  }

  if (name == 'style') {
    return DOMAttribute(name, DOMAttributeValueCSS(value));
  }

  var delimiter = _attributesValueAsListDelimiters[name];

  if (delimiter != null) {
    var delimiterPattern = _attributesValueAsListDelimitersPatterns[name]!;

    var attrSet = _attributesValueAsSet.contains(name);

    if (attrSet) {
      return DOMAttribute(
        name,
        DOMAttributeValueSet(value, delimiter, delimiterPattern),
      );
    } else {
      return DOMAttribute(
        name,
        DOMAttributeValueList(value, delimiter, delimiterPattern),
      );
    }
  } else {
    var attrBoolean = _attributesValueAsBoolean.contains(name);

    if (attrBoolean) {
      if (value != null) {
        // A keyword is kept as the value: `hidden="until-found"`.
        var keyword = booleanAttributeKeyword(name, value);
        if (keyword != null) {
          return DOMAttribute(name, DOMAttributeValueString(keyword));
        }

        // `<input checked="">` and `<input checked="checked">` are true:
        // see `parseBooleanValue`.
        return DOMAttribute(
          name,
          DOMAttributeValueBoolean(value, attrName: name),
        );
      }
      return null;
    } else {
      return DOMAttribute(name, DOMAttributeValueString(value));
    }
  }
}