buildOpenTagHTML method

String buildOpenTagHTML({
  1. bool openCloseTag = false,
  2. DSXResolution dsxResolution = DSXResolution.skipDSX,
  3. DOMContext<Object>? domContext,
})

Implementation

String buildOpenTagHTML({
  bool openCloseTag = false,
  DSXResolution dsxResolution = DSXResolution.skipDSX,
  DOMContext? domContext,
}) {
  var html = StringBuffer('<$tag');

  final attributes = _attributes;
  if (attributes != null && attributes.isNotEmpty) {
    var attributeId = attributes['id'];
    var attributeClass = attributes['class'];
    var attributeStyle = attributes['style'];

    DOMAttribute.appendTo(
      html,
      ' ',
      attributeId,
      domContext: domContext,
      dsxResolution: dsxResolution,
    );
    DOMAttribute.appendTo(
      html,
      ' ',
      attributeClass,
      domContext: domContext,
      dsxResolution: dsxResolution,
    );
    DOMAttribute.appendTo(
      html,
      ' ',
      attributeStyle,
      domContext: domContext,
      dsxResolution: dsxResolution,
    );

    // An empty value is kept (`data-x=""`): only a `null` one is no value.
    var attributesNormal = attributes.values.where(
      (v) =>
          (v.hasValue || v.value != null) &&
          !_isPriorityAttribute(v) &&
          !v.isBoolean,
    );

    for (var attr in attributesNormal) {
      DOMAttribute.appendTo(
        html,
        ' ',
        attr,
        domContext: domContext,
        dsxResolution: dsxResolution,
      );
    }

    var attributesBoolean = attributes.values.where(
      (v) => v.hasValue && !_isPriorityAttribute(v) && v.isBoolean,
    );

    for (var attr in attributesBoolean) {
      DOMAttribute.appendTo(
        html,
        ' ',
        attr,
        domContext: domContext,
        dsxResolution: dsxResolution,
      );
    }
  }

  if (_resolvedDSXEventAttributes != null) {
    for (var entry in _resolvedDSXEventAttributes!.entries) {
      var name = entry.key;
      var value = entry.value.toString();

      html.write(' ');
      html.write(name);
      html.write('="');
      html.write(value);
      html.write('"');
    }
  }

  html.write(openCloseTag ? '/>' : '>');

  return html.toString();
}