builtin_if.go (1042B)
1 package tplc 2 3 import ( 4 "strings" 5 6 "github.com/pkg/errors" 7 8 "go.lair.cx/go-core/net/htmlx" 9 ) 10 11 func TagIf(b *Builder, w *Writer, t *htmlx.Tokenizer) error { 12 attrs := getAttrs(t) 13 className, ok := attrs["class"] 14 if !ok { 15 return errors.New("class is required for if tag") 16 } 17 18 w.WriteGoCode("if ", strings.TrimSpace(className), " {\n") 19 20 err := RenderTagWithCustomTags(b, w, t, "if", map[string]TagHandler{ 21 "then": handleThen, 22 "else": handleElse, 23 }, true, false) 24 if err != nil { 25 return err 26 } 27 28 w.WriteGoCode("}\n") 29 return nil 30 } 31 32 func handleThen(b *Builder, w *Writer, t *htmlx.Tokenizer) error { 33 err := RenderTag(b, w, t, "then", false) 34 if err != nil { 35 return err 36 } 37 return nil 38 } 39 40 func handleElse(b *Builder, w *Writer, t *htmlx.Tokenizer) error { 41 attrs := getAttrs(t) 42 className, _ := attrs["class"] 43 44 w.WriteGoCode("} else") 45 if len(className) > 0 { 46 w.WriteGoCode(" if ", strings.TrimSpace(className)) 47 } 48 w.WriteGoCode(" {\n") 49 50 err := RenderTag(b, w, t, "else", false) 51 if err != nil { 52 return err 53 } 54 55 return nil 56 }