toHtml method

  1. @override
String toHtml()
override

Renders the node to an HTML string.

Implementation

@override
String toHtml() {
  final buffer = StringBuffer();
  buffer.write('<$tag');

  attributes.forEach((key, value) {
    if (value == null || value == false) return;
    if (value == true) {
      buffer.write(' $key');
    } else {
      buffer.write(
        ' $key="${const HtmlEscape(HtmlEscapeMode.attribute).convert(value.toString())}"',
      );
    }
  });

  // Auto-inject nonce for style tags if available in Zone
  if (tag == 'style' && !attributes.containsKey('nonce')) {
    final nonce = Zone.current['spark.cspNonce'];
    if (nonce != null && nonce is String && nonce.isNotEmpty) {
      buffer.write(' nonce="$nonce"');
    }
  }

  if (selfClosing && children.isEmpty) {
    buffer.write(' />');
    return buffer.toString();
  }

  buffer.write('>');

  for (final child in children) {
    buffer.write(child.toHtml());
  }

  buffer.write('</$tag>');
  return buffer.toString();
}