swirl/misc/util.go
2017-12-01 16:04:20 +08:00

94 lines
1.7 KiB
Go

package misc
import (
"bytes"
"encoding/json"
"fmt"
"reflect"
"strings"
"time"
"github.com/cuigh/auxo/data/guid"
"github.com/cuigh/auxo/util/i18n"
)
var Funcs = map[string]interface{}{
//"time": func(t time.Time) string {
// return t.Local().Format("2006-01-02 15:04:05")
//},
"join": strings.Join,
"elem": func(i interface{}) interface{} {
v := reflect.ValueOf(i)
for v.Kind() == reflect.Ptr {
v = v.Elem()
}
return v.Interface()
},
"trimZero": func(v interface{}) interface{} {
s := fmt.Sprint(v)
if s == "0" {
return ""
}
return s
},
"trimPrefix": func(s, prefix string) string {
return strings.TrimPrefix(s, prefix)
},
}
func NewID() string {
return guid.New().String()
}
func Message(lang string) func(key string, args ...interface{}) string {
t, err := i18n.Find(lang, "en")
if err != nil {
panic(err)
}
if t == nil {
panic("can't find language files")
}
return func(key string, args ...interface{}) string {
if s := t.Format(key, args...); s != "" {
return s
}
return "[" + key + "]"
}
}
func FormatTime(offset int32) func(t time.Time) string {
const layout = "2006-01-02 15:04:05"
var loc *time.Location
if offset == 0 {
loc = time.Local
} else {
loc = time.FixedZone("", int(offset))
}
return func(t time.Time) string {
return t.In(loc).Format(layout)
}
}
func Page(count, pageIndex, pageSize int) (start, end int) {
start = pageSize * (pageIndex - 1)
end = pageSize * pageIndex
if count < start {
start, end = 0, 0
} else if count < end {
end = count
}
return
}
func JSONIndent(raw []byte) (s string, err error) {
buf := &bytes.Buffer{}
err = json.Indent(buf, raw, "", " ")
if err == nil {
s = buf.String()
}
return
}