Skip to content

stephenlacy/daz

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

daz

Composable HTML components in Golang

GoDocGo

daz carbon example

Daz is a "functional" alternative to using templates, and allows for nested components/lists Also enables template-free server-side rendered components with support for nested lists. It is inspired by HyperScript.

A component can be created and used with simple functions:

// Example prop for a component
type User struct {
	Name string
	// ...
}

func MyComponent(user User) HTML {
	return H(
		"div",
		Attr{"class": "bg-grey-50"},
		user.Name,
	)
}

func Root() HTML {
	user := User{Name: "Daz"}
	return H("html", MyComponent(user))
}

// And used in a handler:

func Handler(w http.ResponseWriter, r *http.Request) {
	w.Write([]byte(Root()()))
}

Lists can be easily created without needing to embed a range / end in a template:

items := []HTML{
	H("li", "item one"),
	H("li", "item two"),
}

element := H("ul", Attr{"class": "bg-grey-50"}, items)

div := H("div", element)

Install

import (
	"github.com/stevelacy/daz"
)

Usage

func H

Create a HTML element:

H("div", ...attrs)

struct Attr

HTML attributes:

Attr{
	"class": "app",
	"onClick": "javascriptFunc()",
}

func UnsafeContent

This will bypass HTML sanitization and allow for direct injecting

injection := "<script>alert('xss')</script>"
root := H("div", UnsafeContent(injection))
// <script>alert('xss')</script>

About

Composable HTML components in Golang

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages