package main
import (
"fmt"
"html/template"
"strings"
"time"
"github.com/go-mizu/mizu"
"github.com/go-mizu/mizu/view"
)
func main() {
engine := view.New(view.Config{
Dir: "./views",
DefaultLayout: "default",
Funcs: template.FuncMap{
// String helpers
"truncate": truncate,
"slugify": slugify,
// Date helpers
"formatDate": formatDate,
"timeAgo": timeAgo,
// Number helpers
"formatNumber": formatNumber,
"formatCurrency": formatCurrency,
// Logic helpers
"default": defaultValue,
"pluralize": pluralize,
},
})
app := mizu.New()
app.Use(engine.Middleware())
// ... routes
app.Listen(":8080")
}
func truncate(s string, length int) string {
if len(s) <= length {
return s
}
return s[:length] + "..."
}
func slugify(s string) string {
return strings.ToLower(strings.ReplaceAll(s, " ", "-"))
}
func formatDate(t time.Time, layout string) string {
return t.Format(layout)
}
func timeAgo(t time.Time) string {
d := time.Since(t)
switch {
case d < time.Minute:
return "just now"
case d < time.Hour:
return fmt.Sprintf("%dm ago", int(d.Minutes()))
case d < 24*time.Hour:
return fmt.Sprintf("%dh ago", int(d.Hours()))
default:
return fmt.Sprintf("%dd ago", int(d.Hours()/24))
}
}
func formatNumber(n int) string {
return fmt.Sprintf("%d", n) // Simplified
}
func formatCurrency(amount float64) string {
return fmt.Sprintf("$%.2f", amount)
}
func defaultValue(defaultVal, val interface{}) interface{} {
if val == nil || val == "" {
return defaultVal
}
return val
}
func pluralize(count int, singular, plural string) string {
if count == 1 {
return singular
}
return plural
}