summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-08-10 01:28:11 +0200
committerThomas Voss <mail@thomasvoss.com> 2024-08-10 01:28:11 +0200
commit9d02dc16a8a0fc420fad36ed4c61bfcc3ea1518c (patch)
tree10f9994918081f08840bd4c1da642218f4b6c621
parent32fcd6f170e8d8c77936d477f4e489f03d079375 (diff)
Do setting and theme toggling on the frontend
-rw-r--r--main.go35
-rw-r--r--middleware/pipe.go14
-rw-r--r--middleware/theme.go42
-rw-r--r--templates/base.templ29
-rw-r--r--templates/base_templ.go31
-rw-r--r--templates/navbar.templ322
-rw-r--r--templates/navbar_templ.go39
7 files changed, 203 insertions, 309 deletions
diff --git a/main.go b/main.go
index 77d301c..e0c73e6 100644
--- a/main.go
+++ b/main.go
@@ -38,12 +38,8 @@ func main() {
mux.Handle("GET /favicon.ico", fs)
mux.Handle("GET /fonts/", fs)
mux.Handle("GET /style.css", fs)
- mux.Handle("GET /", middleware.Pipe(
- middleware.Theme,
- middleware.I18n,
- )(http.HandlerFunc(finalHandler)))
+ mux.Handle("GET /", middleware.I18n(http.HandlerFunc(finalHandler)))
mux.Handle("POST /language", http.HandlerFunc(setUserLanguage))
- mux.Handle("POST /theme", http.HandlerFunc(setUserTheme))
portStr := ":" + strconv.Itoa(*port)
log.Println("Listening on", portStr)
@@ -101,32 +97,3 @@ func setUserLanguage(w http.ResponseWriter, r *http.Request) {
http.Redirect(w, r, c.Value, http.StatusFound)
}
}
-
-func setUserTheme(w http.ResponseWriter, r *http.Request) {
- c, err := r.Cookie("theme")
- if errors.Is(err, http.ErrNoCookie) {
- w.WriteHeader(http.StatusBadRequest)
- fmt.Fprintf(w, "No ‘theme’ cookie exists")
- return
- }
-
- var theme string
-
- switch c.Value {
- case "dark":
- theme = "light"
- case "light":
- theme = "dark"
- default:
- w.WriteHeader(http.StatusBadRequest)
- fmt.Fprintf(w, "Theme ‘%s’ is invalid", c.Value)
- return
- }
-
- http.SetCookie(w, &http.Cookie{
- Name: "theme",
- Value: theme,
- MaxAge: math.MaxInt32,
- })
- http.Redirect(w, r, r.Referer(), http.StatusFound)
-}
diff --git a/middleware/pipe.go b/middleware/pipe.go
deleted file mode 100644
index 4b5064d..0000000
--- a/middleware/pipe.go
+++ /dev/null
@@ -1,14 +0,0 @@
-package middleware
-
-import "net/http"
-
-type Middleware func(http.Handler) http.Handler
-
-func Pipe(xs ...Middleware) Middleware {
- return func(next http.Handler) http.Handler {
- for i := len(xs) - 1; i >= 0; i-- {
- next = xs[i](next)
- }
- return next
- }
-}
diff --git a/middleware/theme.go b/middleware/theme.go
deleted file mode 100644
index 4f14c97..0000000
--- a/middleware/theme.go
+++ /dev/null
@@ -1,42 +0,0 @@
-package middleware
-
-import (
- "cmp"
- "context"
- "math"
- "net/http"
-)
-
-const defaultTheme = "dark"
-
-func Theme(next http.Handler) http.Handler {
- return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- var userTheme string
-
- /* Grab the ‘theme’ cookie to figure out what the users current
- theme is and add it to the context. If the user doesn’t yet
- have a theme cookie or the cookie they have contains an
- invalid theme then we fallback to the default theme and
- (re)set the cookie. */
-
- c, err := r.Cookie("theme")
- if err == nil {
- switch c.Value {
- case "dark", "light":
- userTheme = c.Value
- }
- }
-
- theme := cmp.Or(userTheme, defaultTheme)
- if userTheme == "" {
- http.SetCookie(w, &http.Cookie{
- Name: "theme",
- Value: theme,
- MaxAge: math.MaxInt32,
- })
- }
-
- ctx := context.WithValue(r.Context(), "theme", theme)
- next.ServeHTTP(w, r.WithContext(ctx))
- })
-}
diff --git a/templates/base.templ b/templates/base.templ
index 88a9e77..e6c4a1d 100644
--- a/templates/base.templ
+++ b/templates/base.templ
@@ -5,12 +5,39 @@ import "git.thomasvoss.com/euro-cash.eu/i18n"
templ Base(head, body templ.Component) {
{{ p := ctx.Value("printer").(i18n.Printer) }}
<!DOCTYPE html>
- <html lang={ p.Locale.Bcp } data-theme={ ctx.Value("theme").(string) }>
+ <html lang={ p.Locale.Bcp }>
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link rel="stylesheet" type="text/css" href="/style.css"/>
<title>Euro Cash</title>
+ <script type="text/javascript">
+ const validate = theme =>
+ ["light", "dark"].includes(theme) ? theme : "light";
+
+ const toggle = theme =>
+ theme == "light" ? "dark" : "light";
+
+ const setTheme = theme => {
+ localStorage.setItem("theme", theme);
+ document
+ .getElementsByTagName("html")[0]
+ .setAttribute("data-theme", theme);
+ document
+ .getElementById(`nav-icon-theme-${theme}`)
+ .style.display = '';
+ document
+ .getElementById(`nav-icon-theme-${toggle(theme)}`)
+ .style.display = 'none';
+ };
+
+ document.addEventListener('DOMContentLoaded', _ => {
+ document.getElementById("theme-button").onclick = () => {
+ setTheme(toggle(validate(localStorage.getItem("theme"))));
+ };
+ setTheme(validate(localStorage.getItem("theme")));
+ });
+ </script>
if head != nil {
@head
}
diff --git a/templates/base_templ.go b/templates/base_templ.go
index 2bc2034..399b577 100644
--- a/templates/base_templ.go
+++ b/templates/base_templ.go
@@ -42,20 +42,7 @@ func Base(head, body templ.Component) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" data-theme=\"")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var3 string
- templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(ctx.Value("theme").(string))
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `base.templ`, Line: 8, Col: 69}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"><head><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><link rel=\"stylesheet\" type=\"text/css\" href=\"/style.css\"><title>Euro Cash</title>")
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"><head><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><link rel=\"stylesheet\" type=\"text/css\" href=\"/style.css\"><title>Euro Cash</title><script type=\"text/javascript\">\n\t\t\t\tconst validate = theme =>\n\t\t\t\t\t[\"light\", \"dark\"].includes(theme) ? theme : \"light\";\n\n\t\t\t\tconst toggle = theme =>\n\t\t\t\t\ttheme == \"light\" ? \"dark\" : \"light\";\n\n\t\t\t\tconst setTheme = theme => {\n\t\t\t\t\tlocalStorage.setItem(\"theme\", theme);\n\t\t\t\t\tdocument\n\t\t\t\t\t\t.getElementsByTagName(\"html\")[0]\n\t\t\t\t\t\t.setAttribute(\"data-theme\", theme);\n\t\t\t\t\tdocument\n\t\t\t\t\t\t.getElementById(`nav-icon-theme-${theme}`)\n\t\t\t\t\t\t.style.display = '';\n\t\t\t\t\tdocument\n\t\t\t\t\t\t.getElementById(`nav-icon-theme-${toggle(theme)}`)\n\t\t\t\t\t\t.style.display = 'none';\n\t\t\t\t};\n\n\t\t\t\tdocument.addEventListener('DOMContentLoaded', _ => {\n\t\t\t\t\tdocument.getElementById(\"theme-button\").onclick = () => {\n\t\t\t\t\t\tsetTheme(toggle(validate(localStorage.getItem(\"theme\"))));\n\t\t\t\t\t};\n\t\t\t\t\tsetTheme(validate(localStorage.getItem(\"theme\")));\n\t\t\t\t});\n\t\t\t</script>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -79,12 +66,12 @@ func Base(head, body templ.Component) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var4 string
- templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(p.T("Found a mistake or want to contribute missing information?"))
+ var templ_7745c5c3_Var3 string
+ templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(p.T("Found a mistake or want to contribute missing information?"))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `base.templ`, Line: 25, Col: 73}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `base.templ`, Line: 52, Col: 73}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -92,12 +79,12 @@ func Base(head, body templ.Component) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var5 string
- templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(p.T("Feel free to contact us!"))
+ var templ_7745c5c3_Var4 string
+ templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(p.T("Feel free to contact us!"))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `base.templ`, Line: 26, Col: 51}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `base.templ`, Line: 53, Col: 51}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
diff --git a/templates/navbar.templ b/templates/navbar.templ
index dd34d4b..f0b030c 100644
--- a/templates/navbar.templ
+++ b/templates/navbar.templ
@@ -67,164 +67,170 @@ templ navbar() {
</a>
</li>
<li id="nav-icon-theme">
- <form class={ noMargin() } action="/theme" method="POST">
- <button>
- <svg
- version="1.1"
- width="24"
- height="24"
- viewBox="0 0 24 24"
- fill="none"
- xmlns="http://www.w3.org/2000/svg"
- >
- if ctx.Value("theme").(string) == "dark" {
- <path
- d="M 7.28451 10.3333
- C 7.10026 10.8546
- 7 11.4156
- 7 12
- C 7 14.7614
- 9.23858 17
- 12 17
- C 14.7614 17
- 17 14.7614
- 17 12
- C 17 9.23858
- 14.7614 7
- 12 7
- C 11.4156 7
- 10.8546 7.10026
- 10.3333 7.28451"
- stroke-width="1.5"
- stroke-linecap="round"
- ></path>
- <path
- d="M 12 2 V 4"
- stroke-width="1.5"
- stroke-linecap="round"
- ></path>
- <path
- d="M 12 20 V 22"
- stroke-width="1.5"
- stroke-linecap="round"
- ></path>
- <path
- d="M 4 12 L 2 12"
- stroke-width="1.5"
- stroke-linecap="round"
- ></path>
- <path
- d="M 22 12 L 20 12"
- stroke-width="1.5"
- stroke-linecap="round"
- ></path>
- <path
- d="M 19.7778 4.22266 L 17.5558 6.25424"
- stroke-width="1.5"
- stroke-linecap="round"
- ></path>
- <path
- d="M 4.22217 4.22266 L 6.44418 6.25424"
- stroke-width="1.5"
- stroke-linecap="round"
- ></path>
- <path
- d="M 6.44434 17.5557 L 4.22211 19.7779"
- stroke-width="1.5"
- stroke-linecap="round"
- ></path>
- <path
- d="M 19.7778 19.7773 L 17.5558 17.5551"
- stroke-width="1.5"
- stroke-linecap="round"
- ></path>
- } else {
- <path
- d="M 21.0672 11.8568
- L 20.4253 11.469
- L 21.0672 11.8568
- Z
- M 12.1432 2.93276
- L 11.7553 2.29085
- V 2.29085
- L 12.1432 2.93276
- Z
- M 7.37554 20.013
- C 7.017 19.8056 6.5582 19.9281 6.3508 20.2866
- C 6.14339 20.6452 6.26591 21.104 6.62446 21.3114
- L 7.37554 20.013
- Z
- M 2.68862 17.3755
- C 2.89602 17.7341 3.35482 17.8566 3.71337 17.6492
- C 4.07191 17.4418 4.19443 16.983 3.98703 16.6245
- L 2.68862 17.3755
- Z
- M 21.25 12
- C 21.25 17.1086 17.1086 21.25 12 21.25
- V 22.75
- C 17.9371 22.75 22.75 17.9371 22.75 12
- H 21.25
- Z
- M 2.75 12
- C 2.75 6.89137 6.89137 2.75 12 2.75
- V 1.25
- C 6.06294 1.25 1.25 6.06294 1.25 12
- H 2.75
- Z
- M 15.5 14.25
- C 12.3244 14.25 9.75 11.6756 9.75 8.5
- H 8.25
- C 8.25 12.5041 11.4959 15.75 15.5 15.75
- V 14.25
- Z
- M 20.4253 11.469
- C 19.4172 13.1373 17.5882 14.25 15.5 14.25
- V 15.75
- C 18.1349 15.75 20.4407 14.3439 21.7092 12.2447
- L 20.4253 11.469
- Z
- M 9.75 8.5
- C 9.75 6.41182 10.8627 4.5828 12.531 3.57467
- L 11.7553 2.29085
- C 9.65609 3.5593 8.25 5.86509 8.25 8.5
- H 9.75
- Z
- M 12 2.75
- C 11.9115 2.75 11.8077 2.71008 11.7324 2.63168
- C 11.6686 2.56527 11.6538 2.50244 11.6503 2.47703
- C 11.6461 2.44587 11.6482 2.35557 11.7553 2.29085
- L 12.531 3.57467
- C 13.0342 3.27065 13.196 2.71398 13.1368 2.27627
- C 13.0754 1.82126 12.7166 1.25 12 1.25
- V 2.75
- Z
- M 21.7092 12.2447
- C 21.6444 12.3518 21.5541 12.3539 21.523 12.3497
- C 21.4976 12.3462 21.4347 12.3314 21.3683 12.2676
- C 21.2899 12.1923 21.25 12.0885 21.25 12
- H 22.75
- C 22.75 11.2834 22.1787 10.9246 21.7237 10.8632
- C 21.286 10.804 20.7293 10.9658 20.4253 11.469
- L 21.7092 12.2447
- Z
- M 12 21.25
- C 10.3139 21.25 8.73533 20.7996 7.37554 20.013
- L 6.62446 21.3114
- C 8.2064 22.2265 10.0432 22.75 12 22.75
- V 21.25
- Z
- M 3.98703 16.6245
- C 3.20043 15.2647 2.75 13.6861 2.75 12
- H 1.25
- C 1.25 13.9568 1.77351 15.7936 2.68862 17.3755
- L 3.98703 16.6245
- Z
- "
- ></path>
- }
- </svg>
- </button>
- </form>
+ <button id="theme-button">
+ <svg
+ id="nav-icon-theme-dark"
+ version="1.1"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ fill="none"
+ xmlns="http://www.w3.org/2000/svg"
+ >
+ <path
+ d="M 7.28451 10.3333
+ C 7.10026 10.8546
+ 7 11.4156
+ 7 12
+ C 7 14.7614
+ 9.23858 17
+ 12 17
+ C 14.7614 17
+ 17 14.7614
+ 17 12
+ C 17 9.23858
+ 14.7614 7
+ 12 7
+ C 11.4156 7
+ 10.8546 7.10026
+ 10.3333 7.28451"
+ stroke-width="1.5"
+ stroke-linecap="round"
+ ></path>
+ <path
+ d="M 12 2 V 4"
+ stroke-width="1.5"
+ stroke-linecap="round"
+ ></path>
+ <path
+ d="M 12 20 V 22"
+ stroke-width="1.5"
+ stroke-linecap="round"
+ ></path>
+ <path
+ d="M 4 12 L 2 12"
+ stroke-width="1.5"
+ stroke-linecap="round"
+ ></path>
+ <path
+ d="M 22 12 L 20 12"
+ stroke-width="1.5"
+ stroke-linecap="round"
+ ></path>
+ <path
+ d="M 19.7778 4.22266 L 17.5558 6.25424"
+ stroke-width="1.5"
+ stroke-linecap="round"
+ ></path>
+ <path
+ d="M 4.22217 4.22266 L 6.44418 6.25424"
+ stroke-width="1.5"
+ stroke-linecap="round"
+ ></path>
+ <path
+ d="M 6.44434 17.5557 L 4.22211 19.7779"
+ stroke-width="1.5"
+ stroke-linecap="round"
+ ></path>
+ <path
+ d="M 19.7778 19.7773 L 17.5558 17.5551"
+ stroke-width="1.5"
+ stroke-linecap="round"
+ ></path>
+ </svg>
+ <svg
+ id="nav-icon-theme-light"
+ version="1.1"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ fill="none"
+ xmlns="http://www.w3.org/2000/svg"
+ >
+ <path
+ d="M 21.0672 11.8568
+ L 20.4253 11.469
+ L 21.0672 11.8568
+ Z
+ M 12.1432 2.93276
+ L 11.7553 2.29085
+ V 2.29085
+ L 12.1432 2.93276
+ Z
+ M 7.37554 20.013
+ C 7.017 19.8056 6.5582 19.9281 6.3508 20.2866
+ C 6.14339 20.6452 6.26591 21.104 6.62446 21.3114
+ L 7.37554 20.013
+ Z
+ M 2.68862 17.3755
+ C 2.89602 17.7341 3.35482 17.8566 3.71337 17.6492
+ C 4.07191 17.4418 4.19443 16.983 3.98703 16.6245
+ L 2.68862 17.3755
+ Z
+ M 21.25 12
+ C 21.25 17.1086 17.1086 21.25 12 21.25
+ V 22.75
+ C 17.9371 22.75 22.75 17.9371 22.75 12
+ H 21.25
+ Z
+ M 2.75 12
+ C 2.75 6.89137 6.89137 2.75 12 2.75
+ V 1.25
+ C 6.06294 1.25 1.25 6.06294 1.25 12
+ H 2.75
+ Z
+ M 15.5 14.25
+ C 12.3244 14.25 9.75 11.6756 9.75 8.5
+ H 8.25
+ C 8.25 12.5041 11.4959 15.75 15.5 15.75
+ V 14.25
+ Z
+ M 20.4253 11.469
+ C 19.4172 13.1373 17.5882 14.25 15.5 14.25
+ V 15.75
+ C 18.1349 15.75 20.4407 14.3439 21.7092 12.2447
+ L 20.4253 11.469
+ Z
+ M 9.75 8.5
+ C 9.75 6.41182 10.8627 4.5828 12.531 3.57467
+ L 11.7553 2.29085
+ C 9.65609 3.5593 8.25 5.86509 8.25 8.5
+ H 9.75
+ Z
+ M 12 2.75
+ C 11.9115 2.75 11.8077 2.71008 11.7324 2.63168
+ C 11.6686 2.56527 11.6538 2.50244 11.6503 2.47703
+ C 11.6461 2.44587 11.6482 2.35557 11.7553 2.29085
+ L 12.531 3.57467
+ C 13.0342 3.27065 13.196 2.71398 13.1368 2.27627
+ C 13.0754 1.82126 12.7166 1.25 12 1.25
+ V 2.75
+ Z
+ M 21.7092 12.2447
+ C 21.6444 12.3518 21.5541 12.3539 21.523 12.3497
+ C 21.4976 12.3462 21.4347 12.3314 21.3683 12.2676
+ C 21.2899 12.1923 21.25 12.0885 21.25 12
+ H 22.75
+ C 22.75 11.2834 22.1787 10.9246 21.7237 10.8632
+ C 21.286 10.804 20.7293 10.9658 20.4253 11.469
+ L 21.7092 12.2447
+ Z
+ M 12 21.25
+ C 10.3139 21.25 8.73533 20.7996 7.37554 20.013
+ L 6.62446 21.3114
+ C 8.2064 22.2265 10.0432 22.75 12 22.75
+ V 21.25
+ Z
+ M 3.98703 16.6245
+ C 3.20043 15.2647 2.75 13.6861 2.75 12
+ H 1.25
+ C 1.25 13.9568 1.77351 15.7936 2.68862 17.3755
+ L 3.98703 16.6245
+ Z
+ "
+ ></path>
+ </svg>
+ </button>
</li>
</menu>
</nav>
diff --git a/templates/navbar_templ.go b/templates/navbar_templ.go
index 3674775..96aea3a 100644
--- a/templates/navbar_templ.go
+++ b/templates/navbar_templ.go
@@ -146,44 +146,7 @@ func navbar() templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</a></li><li id=\"nav-icon-theme\">")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var11 = []any{noMargin()}
- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var11...)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<form class=\"")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var12 string
- templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(templ.CSSClasses(templ_7745c5c3_Var11).String())
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `navbar.templ`, Line: 1, Col: 0}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" action=\"/theme\" method=\"POST\"><button><svg version=\"1.1\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- if ctx.Value("theme").(string) == "dark" {
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<path d=\"M 7.28451 10.3333\n\t\t\t\t\t\t\t\t\t C 7.10026 10.8546\n\t\t\t\t\t\t\t\t\t\t 7 11.4156\n\t\t\t\t\t\t\t\t\t\t 7 12\n\t\t\t\t\t\t\t\t\t C 7 14.7614\n\t\t\t\t\t\t\t\t\t\t 9.23858 17\n\t\t\t\t\t\t\t\t\t\t 12 17\n\t\t\t\t\t\t\t\t\t C 14.7614 17\n\t\t\t\t\t\t\t\t\t\t 17 14.7614\n\t\t\t\t\t\t\t\t\t\t 17 12\n\t\t\t\t\t\t\t\t\t C 17 9.23858\n\t\t\t\t\t\t\t\t\t\t 14.7614 7\n\t\t\t\t\t\t\t\t\t\t 12 7\n\t\t\t\t\t\t\t\t\t C 11.4156 7\n\t\t\t\t\t\t\t\t\t\t 10.8546 7.10026\n\t\t\t\t\t\t\t\t\t\t 10.3333 7.28451\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path> <path d=\"M 12 2 V 4\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path> <path d=\"M 12 20 V 22\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path> <path d=\"M 4 12 L 2 12\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path> <path d=\"M 22 12 L 20 12\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path> <path d=\"M 19.7778 4.22266 L 17.5558 6.25424\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path> <path d=\"M 4.22217 4.22266 L 6.44418 6.25424\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path> <path d=\"M 6.44434 17.5557 L 4.22211 19.7779\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path> <path d=\"M 19.7778 19.7773 L 17.5558 17.5551\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path>")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- } else {
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<path d=\"M 21.0672 11.8568\n\t\t\t\t\t\t\t\t\t\t L 20.4253 11.469\n\t\t\t\t\t\t\t\t\t\t L 21.0672 11.8568\n\t\t\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t\t\t M 12.1432 2.93276\n\t\t\t\t\t\t\t\t\t\t L 11.7553 2.29085\n\t\t\t\t\t\t\t\t\t\t V 2.29085\n\t\t\t\t\t\t\t\t\t\t L 12.1432 2.93276\n\t\t\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t\t\t M 7.37554 20.013\n\t\t\t\t\t\t\t\t\t\t C 7.017 19.8056 6.5582 19.9281 6.3508 20.2866\n\t\t\t\t\t\t\t\t\t\t C 6.14339 20.6452 6.26591 21.104 6.62446 21.3114\n\t\t\t\t\t\t\t\t\t\t L 7.37554 20.013\n\t\t\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t\t\t M 2.68862 17.3755\n\t\t\t\t\t\t\t\t\t\t C 2.89602 17.7341 3.35482 17.8566 3.71337 17.6492\n\t\t\t\t\t\t\t\t\t\t C 4.07191 17.4418 4.19443 16.983 3.98703 16.6245\n\t\t\t\t\t\t\t\t\t\t L 2.68862 17.3755\n\t\t\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t\t\t M 21.25 12\n\t\t\t\t\t\t\t\t\t\t C 21.25 17.1086 17.1086 21.25 12 21.25\n\t\t\t\t\t\t\t\t\t\t V 22.75\n\t\t\t\t\t\t\t\t\t\t C 17.9371 22.75 22.75 17.9371 22.75 12\n\t\t\t\t\t\t\t\t\t\t H 21.25\n\t\t\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t\t\t M 2.75 12\n\t\t\t\t\t\t\t\t\t\t C 2.75 6.89137 6.89137 2.75 12 2.75\n\t\t\t\t\t\t\t\t\t\t V 1.25\n\t\t\t\t\t\t\t\t\t\t C 6.06294 1.25 1.25 6.06294 1.25 12\n\t\t\t\t\t\t\t\t\t\t H 2.75\n\t\t\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t\t\t M 15.5 14.25\n\t\t\t\t\t\t\t\t\t\t C 12.3244 14.25 9.75 11.6756 9.75 8.5\n\t\t\t\t\t\t\t\t\t\t H 8.25\n\t\t\t\t\t\t\t\t\t\t C 8.25 12.5041 11.4959 15.75 15.5 15.75\n\t\t\t\t\t\t\t\t\t\t V 14.25\n\t\t\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t\t\t M 20.4253 11.469\n\t\t\t\t\t\t\t\t\t\t C 19.4172 13.1373 17.5882 14.25 15.5 14.25\n\t\t\t\t\t\t\t\t\t\t V 15.75\n\t\t\t\t\t\t\t\t\t\t C 18.1349 15.75 20.4407 14.3439 21.7092 12.2447\n\t\t\t\t\t\t\t\t\t\t L 20.4253 11.469\n\t\t\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t\t\t M 9.75 8.5\n\t\t\t\t\t\t\t\t\t\t C 9.75 6.41182 10.8627 4.5828 12.531 3.57467\n\t\t\t\t\t\t\t\t\t\t L 11.7553 2.29085\n\t\t\t\t\t\t\t\t\t\t C 9.65609 3.5593 8.25 5.86509 8.25 8.5\n\t\t\t\t\t\t\t\t\t\t H 9.75\n\t\t\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t\t\t M 12 2.75\n\t\t\t\t\t\t\t\t\t\t C 11.9115 2.75 11.8077 2.71008 11.7324 2.63168\n\t\t\t\t\t\t\t\t\t\t C 11.6686 2.56527 11.6538 2.50244 11.6503 2.47703\n\t\t\t\t\t\t\t\t\t\t C 11.6461 2.44587 11.6482 2.35557 11.7553 2.29085\n\t\t\t\t\t\t\t\t\t\t L 12.531 3.57467\n\t\t\t\t\t\t\t\t\t\t C 13.0342 3.27065 13.196 2.71398 13.1368 2.27627\n\t\t\t\t\t\t\t\t\t\t C 13.0754 1.82126 12.7166 1.25 12 1.25\n\t\t\t\t\t\t\t\t\t\t V 2.75\n\t\t\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t\t\t M 21.7092 12.2447\n\t\t\t\t\t\t\t\t\t\t C 21.6444 12.3518 21.5541 12.3539 21.523 12.3497\n\t\t\t\t\t\t\t\t\t\t C 21.4976 12.3462 21.4347 12.3314 21.3683 12.2676\n\t\t\t\t\t\t\t\t\t\t C 21.2899 12.1923 21.25 12.0885 21.25 12\n\t\t\t\t\t\t\t\t\t\t H 22.75\n\t\t\t\t\t\t\t\t\t\t C 22.75 11.2834 22.1787 10.9246 21.7237 10.8632\n\t\t\t\t\t\t\t\t\t\t C 21.286 10.804 20.7293 10.9658 20.4253 11.469\n\t\t\t\t\t\t\t\t\t\t L 21.7092 12.2447\n\t\t\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t\t\t M 12 21.25\n\t\t\t\t\t\t\t\t\t\t C 10.3139 21.25 8.73533 20.7996 7.37554 20.013\n\t\t\t\t\t\t\t\t\t\t L 6.62446 21.3114\n\t\t\t\t\t\t\t\t\t\t C 8.2064 22.2265 10.0432 22.75 12 22.75\n\t\t\t\t\t\t\t\t\t\t V 21.25\n\t\t\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t\t\t M 3.98703 16.6245\n\t\t\t\t\t\t\t\t\t\t C 3.20043 15.2647 2.75 13.6861 2.75 12\n\t\t\t\t\t\t\t\t\t\t H 1.25\n\t\t\t\t\t\t\t\t\t\t C 1.25 13.9568 1.77351 15.7936 2.68862 17.3755\n\t\t\t\t\t\t\t\t\t\t L 3.98703 16.6245\n\t\t\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t\t \"></path>")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</svg></button></form></li></menu></nav>")
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</a></li><li id=\"nav-icon-theme\"><button id=\"theme-button\"><svg id=\"nav-icon-theme-dark\" version=\"1.1\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M 7.28451 10.3333\n\t\t\t\t\t\t\t C 7.10026 10.8546\n\t\t\t\t\t\t\t\t 7 11.4156\n\t\t\t\t\t\t\t\t 7 12\n\t\t\t\t\t\t\t C 7 14.7614\n\t\t\t\t\t\t\t\t 9.23858 17\n\t\t\t\t\t\t\t\t 12 17\n\t\t\t\t\t\t\t C 14.7614 17\n\t\t\t\t\t\t\t\t 17 14.7614\n\t\t\t\t\t\t\t\t 17 12\n\t\t\t\t\t\t\t C 17 9.23858\n\t\t\t\t\t\t\t\t 14.7614 7\n\t\t\t\t\t\t\t\t 12 7\n\t\t\t\t\t\t\t C 11.4156 7\n\t\t\t\t\t\t\t\t 10.8546 7.10026\n\t\t\t\t\t\t\t\t 10.3333 7.28451\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path> <path d=\"M 12 2 V 4\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path> <path d=\"M 12 20 V 22\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path> <path d=\"M 4 12 L 2 12\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path> <path d=\"M 22 12 L 20 12\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path> <path d=\"M 19.7778 4.22266 L 17.5558 6.25424\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path> <path d=\"M 4.22217 4.22266 L 6.44418 6.25424\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path> <path d=\"M 6.44434 17.5557 L 4.22211 19.7779\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path> <path d=\"M 19.7778 19.7773 L 17.5558 17.5551\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path></svg> <svg id=\"nav-icon-theme-light\" version=\"1.1\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M 21.0672 11.8568\n\t\t\t\t\t\t\t\t L 20.4253 11.469\n\t\t\t\t\t\t\t\t L 21.0672 11.8568\n\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t M 12.1432 2.93276\n\t\t\t\t\t\t\t\t L 11.7553 2.29085\n\t\t\t\t\t\t\t\t V 2.29085\n\t\t\t\t\t\t\t\t L 12.1432 2.93276\n\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t M 7.37554 20.013\n\t\t\t\t\t\t\t\t C 7.017 19.8056 6.5582 19.9281 6.3508 20.2866\n\t\t\t\t\t\t\t\t C 6.14339 20.6452 6.26591 21.104 6.62446 21.3114\n\t\t\t\t\t\t\t\t L 7.37554 20.013\n\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t M 2.68862 17.3755\n\t\t\t\t\t\t\t\t C 2.89602 17.7341 3.35482 17.8566 3.71337 17.6492\n\t\t\t\t\t\t\t\t C 4.07191 17.4418 4.19443 16.983 3.98703 16.6245\n\t\t\t\t\t\t\t\t L 2.68862 17.3755\n\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t M 21.25 12\n\t\t\t\t\t\t\t\t C 21.25 17.1086 17.1086 21.25 12 21.25\n\t\t\t\t\t\t\t\t V 22.75\n\t\t\t\t\t\t\t\t C 17.9371 22.75 22.75 17.9371 22.75 12\n\t\t\t\t\t\t\t\t H 21.25\n\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t M 2.75 12\n\t\t\t\t\t\t\t\t C 2.75 6.89137 6.89137 2.75 12 2.75\n\t\t\t\t\t\t\t\t V 1.25\n\t\t\t\t\t\t\t\t C 6.06294 1.25 1.25 6.06294 1.25 12\n\t\t\t\t\t\t\t\t H 2.75\n\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t M 15.5 14.25\n\t\t\t\t\t\t\t\t C 12.3244 14.25 9.75 11.6756 9.75 8.5\n\t\t\t\t\t\t\t\t H 8.25\n\t\t\t\t\t\t\t\t C 8.25 12.5041 11.4959 15.75 15.5 15.75\n\t\t\t\t\t\t\t\t V 14.25\n\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t M 20.4253 11.469\n\t\t\t\t\t\t\t\t C 19.4172 13.1373 17.5882 14.25 15.5 14.25\n\t\t\t\t\t\t\t\t V 15.75\n\t\t\t\t\t\t\t\t C 18.1349 15.75 20.4407 14.3439 21.7092 12.2447\n\t\t\t\t\t\t\t\t L 20.4253 11.469\n\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t M 9.75 8.5\n\t\t\t\t\t\t\t\t C 9.75 6.41182 10.8627 4.5828 12.531 3.57467\n\t\t\t\t\t\t\t\t L 11.7553 2.29085\n\t\t\t\t\t\t\t\t C 9.65609 3.5593 8.25 5.86509 8.25 8.5\n\t\t\t\t\t\t\t\t H 9.75\n\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t M 12 2.75\n\t\t\t\t\t\t\t\t C 11.9115 2.75 11.8077 2.71008 11.7324 2.63168\n\t\t\t\t\t\t\t\t C 11.6686 2.56527 11.6538 2.50244 11.6503 2.47703\n\t\t\t\t\t\t\t\t C 11.6461 2.44587 11.6482 2.35557 11.7553 2.29085\n\t\t\t\t\t\t\t\t L 12.531 3.57467\n\t\t\t\t\t\t\t\t C 13.0342 3.27065 13.196 2.71398 13.1368 2.27627\n\t\t\t\t\t\t\t\t C 13.0754 1.82126 12.7166 1.25 12 1.25\n\t\t\t\t\t\t\t\t V 2.75\n\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t M 21.7092 12.2447\n\t\t\t\t\t\t\t\t C 21.6444 12.3518 21.5541 12.3539 21.523 12.3497\n\t\t\t\t\t\t\t\t C 21.4976 12.3462 21.4347 12.3314 21.3683 12.2676\n\t\t\t\t\t\t\t\t C 21.2899 12.1923 21.25 12.0885 21.25 12\n\t\t\t\t\t\t\t\t H 22.75\n\t\t\t\t\t\t\t\t C 22.75 11.2834 22.1787 10.9246 21.7237 10.8632\n\t\t\t\t\t\t\t\t C 21.286 10.804 20.7293 10.9658 20.4253 11.469\n\t\t\t\t\t\t\t\t L 21.7092 12.2447\n\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t M 12 21.25\n\t\t\t\t\t\t\t\t C 10.3139 21.25 8.73533 20.7996 7.37554 20.013\n\t\t\t\t\t\t\t\t L 6.62446 21.3114\n\t\t\t\t\t\t\t\t C 8.2064 22.2265 10.0432 22.75 12 22.75\n\t\t\t\t\t\t\t\t V 21.25\n\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t\t M 3.98703 16.6245\n\t\t\t\t\t\t\t\t C 3.20043 15.2647 2.75 13.6861 2.75 12\n\t\t\t\t\t\t\t\t H 1.25\n\t\t\t\t\t\t\t\t C 1.25 13.9568 1.77351 15.7936 2.68862 17.3755\n\t\t\t\t\t\t\t\t L 3.98703 16.6245\n\t\t\t\t\t\t\t\t Z\n\t\t\t\t\t\t\t \"></path></svg></button></li></menu></nav>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}