123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- package funcmap
- import (
- "fmt"
- "log"
- "reflect"
- "sort"
- "strings"
- "text/template"
- "github.com/gobwas/glob"
- "gogs.carduccidante.edu.it/karmen/core/orm"
- )
- var FuncMap template.FuncMap = template.FuncMap{
- "comma": comma,
- "groupClasses": groupClasses,
- "abbrev": abbrev,
- "nbsp": nbsp,
- "globFilter": globFilter,
- "toUpper": toUpper,
- "order": order,
- "stringSlice": stringSlice,
- }
- func order(items []string) []string {
- sort.Strings(items)
- return items
- }
- func stringSlice(items interface{}) []string {
- var result []string
- switch reflect.TypeOf(items).Kind() {
- case reflect.Slice:
- s := reflect.ValueOf(items)
- for i := 0; i < s.Len(); i++ {
- result = append(result, fmt.Sprintf("%s", s.Index(i)))
- }
- default:
- log.Println("Unknown type")
- }
- return result
- }
- func toUpper(content string) string {
- return strings.ToUpper(content)
- }
- func globFilter(pattern, content string) bool {
- g := glob.MustCompile(pattern)
- return g.Match(content)
- }
- func comma(classes []*orm.Class) string {
- var names []string
- for _, c := range classes {
- names = append(names, c.Name)
- }
- return strings.Join(names, ",")
- }
- func abbrev(name string) string {
- var result string
- splits := strings.Split(name, " ")
- if len(splits) > 1 {
- for i := len(splits) - 1; i >= 0; i-- {
- if i == len(splits)-1 {
- result += splits[i] + " "
- continue
- }
- result += strings.ToUpper(string(splits[i][0]) + ".")
- }
- } else {
- result += strings.ToUpper(string(name[0]) + ".")
- }
- return result
- }
- func nbsp(num int, text string) string {
- return text + strings.Repeat(" ", num)
- }
- func groupClasses(classes []*orm.Class) string {
- var groups []string
- groupByAddresses := make(map[string][]string)
- addressesAbbrev := map[string]string{
- "Linguistico": "LIN",
- "Classico": "CLA",
- "Musicale": "M",
- "Economico sociale": "ES",
- "Scienze umane": "SU",
- }
- for _, c := range classes {
- groupByAddresses[c.Field] = append(groupByAddresses[c.Field], fmt.Sprintf("%d%s", c.Year, c.Section))
- }
- for address, classes := range groupByAddresses {
- var group string
- if len(classes) > 1 {
- group = fmt.Sprintf("[%s]%s", strings.Join(classes, ","), addressesAbbrev[address])
- } else {
- group = fmt.Sprintf("%s %s", strings.Join(classes, ","), addressesAbbrev[address])
- }
- groups = append(groups, group)
- }
- return strings.Join(groups, ",")
- }
|