certman/views/funcs.go
2018-04-22 16:55:50 +02:00

80 lines
1.5 KiB
Go

package views
import (
"fmt"
"html/template"
"strings"
"time"
)
var funcs = template.FuncMap{
"asset": assetURLFn,
"url": relURLFn,
"lower": lower,
"upper": upper,
"date": dateFn,
"humanDate": readableDateFn,
"t": translateFn,
}
func lower(input string) string {
return strings.ToLower(input)
}
func upper(input string) string {
return strings.ToUpper(input)
}
func assetURLFn(input string) string {
url := "/static/" //os.Getenv("ASSET_URL")
return fmt.Sprintf("%s%s", url, input)
}
func relURLFn(input string) string {
url := "/" //os.Getenv("ASSET_URL")
return fmt.Sprintf("%s%s", url, input)
}
func dateFn(format string, input interface{}) string {
var t time.Time
switch date := input.(type) {
default:
t = time.Now()
case time.Time:
t = date
}
return t.Format(format)
}
func translateFn(language string, text string) string {
return text
}
func readableDateFn(t time.Time) string {
if time.Now().Before(t) {
return "in the future"
}
diff := time.Now().Sub(t)
day := 24 * time.Hour
month := 30 * day
year := 12 * month
switch {
case diff < time.Second:
return "just now"
case diff < 5*time.Minute:
return "a few minutes ago"
case diff < time.Hour:
return fmt.Sprintf("%d minutes ago", diff/time.Minute)
case diff < day:
return fmt.Sprintf("%d hours ago", diff/time.Hour)
case diff < month:
return fmt.Sprintf("%d days ago", diff/day)
case diff < year:
return fmt.Sprintf("%d months ago", diff/month)
default:
return fmt.Sprintf("%d years ago", diff/year)
}
}