funcmap.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package funcmap
  2. import (
  3. "fmt"
  4. "strings"
  5. "text/template"
  6. "github.com/gobwas/glob"
  7. "gogs.carducci-dante.gov.it/karmen/core/orm"
  8. )
  9. var FuncMap template.FuncMap = template.FuncMap{
  10. "comma": comma,
  11. "groupClasses": groupClasses,
  12. "abbrev": abbrev,
  13. "nbsp": nbsp,
  14. "globFilter": globFilter,
  15. }
  16. func globFilter(pattern, content string) bool {
  17. g := glob.MustCompile(pattern)
  18. return g.Match(content)
  19. }
  20. func comma(classes []*orm.Class) string {
  21. var names []string
  22. for _, c := range classes {
  23. names = append(names, c.Name)
  24. }
  25. return strings.Join(names, ",")
  26. }
  27. func abbrev(name string) string {
  28. var result string
  29. splits := strings.Split(name, " ")
  30. for i := len(splits) - 1; i >= 0; i-- {
  31. if i == len(splits)-1 {
  32. result += splits[i] + " "
  33. continue
  34. }
  35. result += strings.ToUpper(string(splits[i][0]) + ".")
  36. }
  37. return result
  38. }
  39. func nbsp(num int, text string) string {
  40. return text + strings.Repeat(" ", num)
  41. }
  42. func groupClasses(classes []*orm.Class) string {
  43. var groups []string
  44. groupByAddresses := make(map[string][]string)
  45. addressesAbbrev := map[string]string{
  46. "Linguistico": "LIN",
  47. "Classico": "CLA",
  48. "Musicale": "M",
  49. "Economico sociale": "ES",
  50. "Scienze umane": "SU",
  51. }
  52. for _, c := range classes {
  53. groupByAddresses[c.Field] = append(groupByAddresses[c.Field], fmt.Sprintf("%d%s", c.Year, c.Section))
  54. }
  55. for address, classes := range groupByAddresses {
  56. var group string
  57. if len(classes) > 1 {
  58. group = fmt.Sprintf("[%s]%s", strings.Join(classes, ","), addressesAbbrev[address])
  59. } else {
  60. group = fmt.Sprintf("%s %s", strings.Join(classes, ","), addressesAbbrev[address])
  61. }
  62. groups = append(groups, group)
  63. }
  64. return strings.Join(groups, ",")
  65. }