mirror of https://github.com/mickael-menu/zk
Add the {{date}} template helper
parent
6dfa9b6949
commit
1490bb5ecb
@ -0,0 +1,54 @@
|
||||
package helpers
|
||||
|
||||
import (
|
||||
"github.com/aymerick/raymond"
|
||||
"github.com/lestrrat-go/strftime"
|
||||
"github.com/mickael-menu/zk/util"
|
||||
"github.com/mickael-menu/zk/util/date"
|
||||
)
|
||||
|
||||
func RegisterDate(logger util.Logger, date date.Provider) {
|
||||
raymond.RegisterHelper("date", func(arg string) string {
|
||||
format := findFormat(arg)
|
||||
res, err := strftime.Format(format, date.Date(), strftime.WithUnixSeconds('s'))
|
||||
if err != nil {
|
||||
logger.Printf("the {{date}} template helper failed to format the date: %v", err)
|
||||
return ""
|
||||
}
|
||||
return res
|
||||
})
|
||||
}
|
||||
|
||||
var (
|
||||
shortFormat = `%m/%d/%Y`
|
||||
mediumFormat = `%b %d, %Y`
|
||||
longFormat = `%B %d, %Y`
|
||||
fullFormat = `%A, %B %d, %Y`
|
||||
yearFormat = `%Y`
|
||||
timeFormat = `%H:%M`
|
||||
timestampFormat = `%Y%m%d%H%M`
|
||||
timestampUnixFormat = `%s`
|
||||
)
|
||||
|
||||
func findFormat(key string) string {
|
||||
switch key {
|
||||
case "short":
|
||||
return shortFormat
|
||||
case "medium":
|
||||
return mediumFormat
|
||||
case "long":
|
||||
return longFormat
|
||||
case "full":
|
||||
return fullFormat
|
||||
case "year":
|
||||
return yearFormat
|
||||
case "time":
|
||||
return timeFormat
|
||||
case "timestamp":
|
||||
return timestampFormat
|
||||
case "timestamp-unix":
|
||||
return timestampUnixFormat
|
||||
default:
|
||||
return key
|
||||
}
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package date
|
||||
|
||||
import "time"
|
||||
|
||||
// Provider returns a date instance.
|
||||
type Provider interface {
|
||||
Date() time.Time
|
||||
}
|
||||
|
||||
// Now is a date provider returning the current date.
|
||||
type Now struct{}
|
||||
|
||||
func (n *Now) Date() time.Time {
|
||||
return time.Now()
|
||||
}
|
||||
|
||||
// Frozen is a date provider returning always the same date.
|
||||
type Frozen struct {
|
||||
date time.Time
|
||||
}
|
||||
|
||||
func NewFrozenNow() Frozen {
|
||||
return Frozen{time.Now()}
|
||||
}
|
||||
|
||||
func NewFrozen(date time.Time) Frozen {
|
||||
return Frozen{date}
|
||||
}
|
||||
|
||||
func (n *Frozen) Date() time.Time {
|
||||
return n.date
|
||||
}
|
Loading…
Reference in New Issue