A webmail client. Forked from https://git.sr.ht/~migadu/alps
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

67 lines
1.2 KiB

  1. package alpsbase
  2. import (
  3. "html/template"
  4. "net/url"
  5. "strings"
  6. "time"
  7. "github.com/dustin/go-humanize"
  8. "github.com/emersion/go-imap"
  9. )
  10. const (
  11. inputDateLayout = "2006-01-02"
  12. inputTimeLayout = "15:04"
  13. )
  14. var templateFuncs = template.FuncMap{
  15. "tuple": func(values ...interface{}) []interface{} {
  16. return values
  17. },
  18. "pathescape": func(s string) string {
  19. return url.PathEscape(s)
  20. },
  21. "formatdate": func(t time.Time) string {
  22. return t.Format("Mon Jan 02 15:04")
  23. },
  24. "formatflag": func(flag string) string {
  25. switch flag {
  26. case imap.SeenFlag:
  27. return "Seen"
  28. case imap.AnsweredFlag:
  29. return "Answered"
  30. case imap.FlaggedFlag:
  31. return "Starred"
  32. case imap.DraftFlag:
  33. return "Draft"
  34. default:
  35. return flag
  36. }
  37. },
  38. "ismutableflag": func(flag string) bool {
  39. switch flag {
  40. case imap.AnsweredFlag, imap.DeletedFlag, imap.DraftFlag:
  41. return false
  42. default:
  43. return true
  44. }
  45. },
  46. "join": func(l []string, sep string) string {
  47. return strings.Join(l, sep)
  48. },
  49. "formatinputdate": func(t time.Time) string {
  50. if t.IsZero() {
  51. return ""
  52. }
  53. return t.Format(inputDateLayout)
  54. },
  55. "formatinputtime": func(t time.Time) string {
  56. if t.IsZero() {
  57. return ""
  58. }
  59. return t.Format(inputTimeLayout)
  60. },
  61. "humantime": humanize.Time,
  62. }