func executeHelper(helper *structure.Helper, values *structure.RequestData, context int) []byte { // Set context and set it back to the old value once fuction returns defer setCurrentHelperContext(values, values.CurrentHelperContext) values.CurrentHelperContext = context block := helper.Block indexTracker := 0 extended := false var extendHelper *structure.Helper for index, child := range helper.Children { // Handle extend helper if index == 0 && child.Name == "!<" { extended = true extendHelper = compiledTemplates.m[string(child.Function(&child, values))] } else { var buffer bytes.Buffer toAdd := child.Function(&child, values) buffer.Write(block[:child.Position+indexTracker]) buffer.Write(toAdd) buffer.Write(block[child.Position+indexTracker:]) block = buffer.Bytes() indexTracker += len(toAdd) } } if extended { extendHelper.BodyHelper.Block = block return executeHelper(extendHelper, values, values.CurrentHelperContext) // TODO: not sure if context = values.CurrentHelperContext is right. } return block }
func setCurrentHelperContext(values *structure.RequestData, context int) { values.CurrentHelperContext = context }