tpls

Extendable, Fast Template Engine for Go
git clone git://git.lair.cx/tpls
Log | Files | Refs | README | LICENSE

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 }