renderForeach method
void
renderForeach(
- Element element,
- CodeBuffer buffer,
- SymbolTable scope,
- bool html5,
)
Implementation
void renderForeach(
Element element, CodeBuffer buffer, SymbolTable scope, bool html5) {
var attribute = element.attributes.singleWhere((a) => a.name == 'for-each');
if (attribute.value == null) return;
var asAttribute =
element.attributes.firstWhereOrNull((a) => a.name == 'as');
var indexAsAttribute =
element.attributes.firstWhereOrNull((a) => a.name == 'index-as');
var alias = asAttribute?.value?.compute(scope)?.toString() ?? 'item';
var indexAs = indexAsAttribute?.value?.compute(scope)?.toString() ?? 'i';
var otherAttributes = element.attributes.where(
(a) => a.name != 'for-each' && a.name != 'as' && a.name != 'index-as');
late Element strippedElement;
if (element is SelfClosingElement) {
strippedElement = SelfClosingElement(element.lt, element.tagName,
otherAttributes, element.slash, element.gt);
} else if (element is RegularElement) {
strippedElement = RegularElement(
element.lt,
element.tagName,
otherAttributes,
element.gt,
element.children,
element.lt2,
element.slash,
element.tagName2,
element.gt2);
}
var i = 0;
for (var item in attribute.value!.compute(scope)) {
var childScope = scope.createChild(values: {alias: item, indexAs: i++});
renderElement(strippedElement, buffer, childScope, html5);
}
}