Skip to content

Latest commit

 

History

16 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mago

markup in go

Tiny fluent markup builder library for logicful templates in GO

Mago means Magician in portuguese.

You write your servercode in Go, you write your clientcode in Go, why not writing your templating code in Go too ?

  • strongly typed templates
  • natural embedding of markup in your binary
  • use go, go fmt and go test in your view layer

To create this:

<root>
  <numbers>
    <number class="x1">sometext</number>
    <number class="x2">sometext</number>
    <number class="x3">sometext</number>
  </numbers>
</root>

You have to write this:

m := Ma().Tag("root").Tag("numbers")
for i := 1; i < 4; i++ {
	m.Tag("number").Att("class", "x"+fmt.Sprintf("%d", i)).Text("sometext").End()
}
m = m.End().End()

println(m.String()

Complete Example:

To create this:

<table style="width:100%">
    <tr>
        <td>row_0,col_0</td>
        <td>row_0,col_1</td>
        <td>row_0,col_2</td>
        <td>row_0,col_3</td>
    </tr>
    <tr>
        <td>row_1,col_0</td>
        <td>row_1,col_1</td>
        <td>row_1,col_2</td>
        <td>row_1,col_3</td>
    </tr>
</table>

Your code would look like this:

package main

import (
	"fmt"
	m "github.com/rusco/mago"
)

func main() {
	table := m.Ma(m.CONF_INDENT).Tag(m.TABLE).Att(m.STYLE, "width:100%").Go(func(mx *m.Mago) {
		for row := 0; row < 2; row++ {
			mx.Tag(m.TR).Go(func(my *m.Mago) {
				for col := 0; col < 4; col++ {
					my.Tag(m.TD).Text(fmt.Sprintf("row_%d,col_%d", row, col)).End()
				}
			}).End()
		}
	}).End()
	fmt.Printf("%s", table.String())
}

MAGO Code Generation support for easy development of templates:

input := `<a id="myid">x<br/>y</a>c`
got := Ma().Code(input)
println(got)

outputs the string:

m := mago.Ma().Tag("a").Att("id","myid").Text("x").Tag("br").End().Text("y").End().Text("c").String()

-api still undergoing changes, use on your own risk !

About

MArkup in GO

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages