renderSwitch method

void renderSwitch(
  1. Element element,
  2. CodeBuffer buffer,
  3. SymbolTable scope,
  4. bool html5,
)

Implementation

void renderSwitch(
    Element element, CodeBuffer buffer, SymbolTable scope, bool html5) {
  var valueAttr =
      element.attributes.firstWhereOrNull((a) => a.name == 'value');
  var value = valueAttr == null ? null : _computeDirectiveValue(valueAttr, scope);

  var cases = element.children
      .whereType<Element>()
      .where((c) => c.tagName.name == 'case');

  for (var child in cases) {
    var comparisonAttr =
        child.attributes.firstWhereOrNull((a) => a.name == 'value');
    var comparison =
        comparisonAttr == null ? null : _computeDirectiveValue(comparisonAttr, scope);
    if (comparison == value) {
      for (var i = 0; i < child.children.length; i++) {
        var c = child.children.elementAt(i);
        renderElementChild(
            element, c, buffer, scope, html5, i, child.children.length);
      }

      return;
    }
  }

  var defaultCase = element.children.firstWhereOrNull(
      (c) => c is Element && c.tagName.name == 'default') as Element?;
  if (defaultCase != null) {
    for (var i = 0; i < defaultCase.children.length; i++) {
      var child = defaultCase.children.elementAt(i);
      renderElementChild(element, child, buffer, scope, html5, i,
          defaultCase.children.length);
    }
  }
}