/
funcs.go
68 lines (63 loc) · 1.76 KB
/
funcs.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package a4webbm
import (
"database/sql"
"errors"
"github.com/gorilla/sessions"
"html/template"
"net/http"
"strings"
"time"
)
var (
defaultBookmarks = "Category: Example 1\nhttp://www.google.com.au Google\nColumn\nCategory: Example 2\nhttp://www.google.com.au Google\nhttp://www.google.com.au Google\n"
)
func NewFuncs(r *http.Request) template.FuncMap {
return map[string]any{
"now": func() time.Time { return time.Now() },
"firstline": func(s string) string {
return strings.Split(s, "\n")[0]
},
"left": func(i int, s string) string {
l := len(s)
if l > i {
l = i
}
return s[:l]
},
"OAuth2URL": func() string {
return Oauth2Config.AuthCodeURL("")
},
"bookmarks": func() (string, error) {
queries := r.Context().Value(ContextValues("queries")).(*Queries)
session := r.Context().Value(ContextValues("session")).(*sessions.Session)
userRef, _ := session.Values["UserRef"].(string)
bookmarks, err := queries.GetBookmarksForUser(r.Context(), userRef)
if err != nil {
switch {
case errors.Is(err, sql.ErrNoRows):
return defaultBookmarks, nil
default:
return "", err
}
}
return bookmarks.List.String, nil
},
"bookmarkColumns": func() ([]*BookmarkColumn, error) {
queries := r.Context().Value(ContextValues("queries")).(*Queries)
session := r.Context().Value(ContextValues("session")).(*sessions.Session)
userRef, _ := session.Values["UserRef"].(string)
bookmarks, err := queries.GetBookmarksForUser(r.Context(), userRef)
var bookmarkString = defaultBookmarks
if err != nil {
switch {
case errors.Is(err, sql.ErrNoRows):
default:
return nil, err
}
} else {
bookmarkString = bookmarks.List.String
}
return PreprocessBookmarks(bookmarkString), nil
},
}
}