summaryrefslogtreecommitdiff
path: root/lex-serve/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'lex-serve/main.go')
-rw-r--r--lex-serve/main.go43
1 files changed, 38 insertions, 5 deletions
diff --git a/lex-serve/main.go b/lex-serve/main.go
index 2996aef..cf8e9ae 100644
--- a/lex-serve/main.go
+++ b/lex-serve/main.go
@@ -11,6 +11,7 @@ import (
"net/url"
"os"
"path"
+ "slices"
"strings"
"sync"
@@ -81,9 +82,7 @@ func main() {
//go:embed templates
var templates embed.FS
-var tpl, _ = template.New("").Funcs(template.FuncMap{
- "ToUpper": strings.ToUpper,
-}).Option("missingkey=error").ParseFS(templates, "templates/*")
+var tpl, _ = template.New("").Option("missingkey=error").ParseFS(templates, "templates/*")
type handler struct {
logger *slog.Logger
@@ -106,10 +105,29 @@ func (h *handler) handle(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("page not found"))
return
}
+ var firstTier []link
+ var secondTier []link
+ var thirdTier []link
+ for key, country := range h.countries {
+ link := link{
+ URL: "//" + key + "." + h.domain,
+ Code: strings.ToUpper(key),
+ Name: country.Name,
+ }
+ if len(h.lawsByCC[key]) > 0 {
+ firstTier = append(firstTier, link)
+ } else if country.HasPlaceholder() {
+ secondTier = append(secondTier, link)
+ } else {
+ thirdTier = append(thirdTier, link)
+ }
+ }
var html bytes.Buffer
err := tpl.ExecuteTemplate(&html, "index.html.tmpl", map[string]any{
- "Countries": h.countries,
- "Domain": r.Host,
+ "FirstTier": slices.SortedFunc(slices.Values(firstTier), compareLink),
+ "SecondTier": slices.SortedFunc(slices.Values(secondTier), compareLink),
+ "ThirdTier": slices.SortedFunc(slices.Values(thirdTier), compareLink),
+ "Domain": r.Host,
})
if err != nil {
h.logger.Error("failed to execute index template", Error(err))
@@ -204,4 +222,19 @@ func (c country) HasPlaceholder() bool {
return strings.Contains(c.SearchURL, "%s")
}
+type link struct {
+ URL string
+ Code string
+ Name string
+}
+
+func compareLink(a, b link) int {
+ if a.Code > b.Code {
+ return 1
+ } else if a.Code < b.Code {
+ return -1
+ }
+ return 0
+}
+
func Error(value error) slog.Attr { return slog.String("error", value.Error()) }