From 90121b4fd1f54185587a80d1449ce7552811ef56 Mon Sep 17 00:00:00 2001 From: riwiwa Date: Fri, 13 Feb 2026 23:15:09 -0800 Subject: [PATCH] add remaining settings and navigation pages --- static/assets/icons/settings.svg | 13 +++++++ static/assets/icons/user.svg | 14 ++++++++ static/menu.js | 32 +++++++++++++++++ templates/base.gohtml | 51 +++++++++++++++++++++++++++ templates/settings.gohtml | 59 ++++++++++++++++++++++++++++++++ web/settings.go | 27 +++++++++++++++ 6 files changed, 196 insertions(+) create mode 100644 static/assets/icons/settings.svg create mode 100644 static/assets/icons/user.svg create mode 100644 static/menu.js create mode 100644 templates/base.gohtml create mode 100644 templates/settings.gohtml create mode 100644 web/settings.go diff --git a/static/assets/icons/settings.svg b/static/assets/icons/settings.svg new file mode 100644 index 0000000..905d9ed --- /dev/null +++ b/static/assets/icons/settings.svg @@ -0,0 +1,13 @@ + + + + diff --git a/static/assets/icons/user.svg b/static/assets/icons/user.svg new file mode 100644 index 0000000..0b117b5 --- /dev/null +++ b/static/assets/icons/user.svg @@ -0,0 +1,14 @@ + + + + + diff --git a/static/menu.js b/static/menu.js new file mode 100644 index 0000000..79aec08 --- /dev/null +++ b/static/menu.js @@ -0,0 +1,32 @@ +document.addEventListener('DOMContentLoaded', function() { + const menuButton = document.getElementById('menuButton'); + const sideMenu = document.getElementById('sideMenu'); + const menuOverlay = document.getElementById('menuOverlay'); + + function toggleMenu() { + menuButton.classList.toggle('active'); + sideMenu.classList.toggle('active'); + menuOverlay.classList.toggle('active'); + } + + function closeMenu() { + menuButton.classList.remove('active'); + sideMenu.classList.remove('active'); + menuOverlay.classList.remove('active'); + } + + if (menuButton) { + menuButton.addEventListener('click', toggleMenu); + } + + if (menuOverlay) { + menuOverlay.addEventListener('click', closeMenu); + } + + // Close menu on escape key + document.addEventListener('keydown', function(e) { + if (e.key === 'Escape') { + closeMenu(); + } + }); +}); diff --git a/templates/base.gohtml b/templates/base.gohtml new file mode 100644 index 0000000..95da9c8 --- /dev/null +++ b/templates/base.gohtml @@ -0,0 +1,51 @@ +{{define "base"}} + + + + + {{.Title}} + {{block "head" .}}{{end}} + + + + + + +
+ + +
+ + + + + + {{ if eq .TemplateName "profile"}}{{block "profile" .}}{{end}}{{end}} + {{ if eq .TemplateName "settings"}}{{block "settings" .}}{{end}}{{end}} + + + + +{{end}} diff --git a/templates/settings.gohtml b/templates/settings.gohtml new file mode 100644 index 0000000..9a316d2 --- /dev/null +++ b/templates/settings.gohtml @@ -0,0 +1,59 @@ +{{define "settings"}} +
+

Settings

+ + +
+ +
+ + +
+ +
+
+

Spotify

+

Import your Spotify listening history from your data export.

+
+ + +
+ + +
+ +
+

Last.fm

+

Import your Last.fm scrobbles.

+
+ + + +
+ + +
+
+
+
+ + +{{end}} diff --git a/web/settings.go b/web/settings.go new file mode 100644 index 0000000..c8b5d4a --- /dev/null +++ b/web/settings.go @@ -0,0 +1,27 @@ +package web + +import "net/http" + +func settingsPageHandler() http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + username := getLoggedInUsername(r) + if username == "" { + http.Redirect(w, r, "/login", http.StatusSeeOther) + return + } + type data struct { + Title string + LoggedInUsername string + TemplateName string + } + d := data{ + Title: "muzi | Settings", + LoggedInUsername: username, + TemplateName: "settings", + } + err := templates.ExecuteTemplate(w, "base", d) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } + } +}