Skip to content

Commit b376803

Browse files
authored
Merge pull request #49 from mbaraa/feat/pages-titles
Feat: pages' titles
2 parents e2d542a + 9f2b02a commit b376803

File tree

7 files changed

+36
-32
lines changed

7 files changed

+36
-32
lines changed

handlers/pages/pages.go

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -64,22 +64,26 @@ func (p *pagesHandler) HandleHomePage(w http.ResponseWriter, r *http.Request) {
6464
}
6565

6666
if handlers.IsNoLayoutPage(r) {
67+
w.Header().Set("HX-Title", "Home")
68+
w.Header().Set("HX-Push-Url", "/")
6769
pages.Index(recentPlays).Render(r.Context(), w)
6870
return
6971
}
70-
layouts.Default(pages.Index(recentPlays)).Render(r.Context(), w)
72+
layouts.Default("Home", pages.Index(recentPlays)).Render(r.Context(), w)
7173
}
7274

7375
func (p *pagesHandler) HandleAboutPage(w http.ResponseWriter, r *http.Request) {
7476
if handlers.IsNoLayoutPage(r) {
77+
w.Header().Set("HX-Title", "About")
78+
w.Header().Set("HX-Push-Url", "/about")
7579
pages.About().Render(r.Context(), w)
7680
return
7781
}
78-
layouts.Default(pages.About()).Render(r.Context(), w)
82+
layouts.Default("About", pages.About()).Render(r.Context(), w)
7983
}
8084

8185
func (p *pagesHandler) HandleLoginPage(w http.ResponseWriter, r *http.Request) {
82-
layouts.Raw(pages.Login()).Render(r.Context(), w)
86+
layouts.Raw("Login", pages.Login()).Render(r.Context(), w)
8387
}
8488

8589
func (p *pagesHandler) HandlePlaylistsPage(w http.ResponseWriter, r *http.Request) {
@@ -95,10 +99,12 @@ func (p *pagesHandler) HandlePlaylistsPage(w http.ResponseWriter, r *http.Reques
9599
}
96100

97101
if handlers.IsNoLayoutPage(r) {
102+
w.Header().Set("HX-Title", "Playlists")
103+
w.Header().Set("HX-Push-Url", "/playlists")
98104
pages.Playlists(playlists).Render(r.Context(), w)
99105
return
100106
}
101-
layouts.Default(pages.Playlists(playlists)).Render(r.Context(), w)
107+
layouts.Default("Playlists", pages.Playlists(playlists)).Render(r.Context(), w)
102108
}
103109

104110
func (p *pagesHandler) HandleSinglePlaylistPage(w http.ResponseWriter, r *http.Request) {
@@ -130,14 +136,16 @@ func (p *pagesHandler) HandleSinglePlaylistPage(w http.ResponseWriter, r *http.R
130136
ctx := context.WithValue(r.Context(), handlers.PlaylistPermission, permission)
131137

132138
if handlers.IsNoLayoutPage(r) {
139+
w.Header().Set("HX-Title", playlist.Title)
140+
w.Header().Set("HX-Push-Url", "/playlist/"+playlist.PublicId)
133141
pages.Playlist(playlist).Render(ctx, w)
134142
return
135143
}
136-
layouts.Default(pages.Playlist(playlist)).Render(ctx, w)
144+
layouts.Default(playlist.Title, pages.Playlist(playlist)).Render(ctx, w)
137145
}
138146

139147
func (p *pagesHandler) HandlePrivacyPage(w http.ResponseWriter, r *http.Request) {
140-
layouts.Default(pages.Privacy()).Render(r.Context(), w)
148+
layouts.Default("Privacy", pages.Privacy()).Render(r.Context(), w)
141149
}
142150

143151
func (p *pagesHandler) HandleProfilePage(w http.ResponseWriter, r *http.Request) {
@@ -158,10 +166,12 @@ func (p *pagesHandler) HandleProfilePage(w http.ResponseWriter, r *http.Request)
158166
Username: dbProfile.Username,
159167
}
160168
if handlers.IsNoLayoutPage(r) {
169+
w.Header().Set("HX-Title", "Profile")
170+
w.Header().Set("HX-Push-Url", "/profile")
161171
pages.Profile(profile).Render(r.Context(), w)
162172
return
163173
}
164-
layouts.Default(pages.Profile(profile)).Render(r.Context(), w)
174+
layouts.Default("Profile", pages.Profile(profile)).Render(r.Context(), w)
165175
}
166176

167177
func (p *pagesHandler) HandleSearchResultsPage(w http.ResponseWriter, r *http.Request) {
@@ -187,12 +197,14 @@ func (p *pagesHandler) HandleSearchResultsPage(w http.ResponseWriter, r *http.Re
187197
}
188198

189199
if handlers.IsNoLayoutPage(r) {
200+
w.Header().Set("HX-Title", "Results for "+query)
201+
w.Header().Set("HX-Push-Url", "/search?query="+query)
190202
pages.SearchResults(results, playlists, songsInPlaylists).Render(r.Context(), w)
191203
return
192204
}
193-
layouts.Default(pages.SearchResults(results, playlists, songsInPlaylists)).Render(r.Context(), w)
205+
layouts.Default("Results for "+query, pages.SearchResults(results, playlists, songsInPlaylists)).Render(r.Context(), w)
194206
}
195207

196208
func (p *pagesHandler) HandleSignupPage(w http.ResponseWriter, r *http.Request) {
197-
layouts.Raw(pages.Signup()).Render(r.Context(), w)
209+
layouts.Raw("Sign up", pages.Signup()).Render(r.Context(), w)
198210
}

services/youtube/search/suggestions/search_suggestion.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ func SearchSuggestions(query string) (suggestions []string, err error) {
1010
resp, err := http.Get("https://suggestqueries.google.com/complete/search?client=firefox&ds=yt&q=" +
1111
url.QueryEscape(query))
1212
if err != nil {
13-
panic(err)
13+
return nil, err
1414
}
1515

1616
var results []any

static/js/router.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,13 @@ window.addEventListener("load", () => {
2727
updateActiveNavLink();
2828
});
2929

30-
window.addEventListener("popstate", (e) => {
31-
e.stopImmediatePropagation();
32-
e.preventDefault();
33-
window.open(window.location.prevPath, "_self");
30+
document.addEventListener("htmx:afterRequest", function (e) {
31+
if (!!e.detail && !!e.detail.xhr) {
32+
const newTitle = e.detail.xhr.getResponseHeader("HX-Title");
33+
if (newTitle) {
34+
document.title = newTitle + " - DankMuzikk";
35+
}
36+
}
3437
});
3538

3639
window.Router = { updateActiveNavLink };

static/js/search.js

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,6 @@ function searchNoReload(searchQuery) {
1111
searchFormEl.blur();
1212
searchInputEl.blur();
1313
searchInputEl.value = searchQuery;
14-
const query = encodeURIComponent(searchQuery);
15-
const prevPath = window.location.href.substring(
16-
(window.location.protocol + "//" + window.location.host).length,
17-
);
18-
window.location.prevPath = prevPath;
19-
window.history.pushState({}, "", `/search?query=${query}`);
2014
}
2115

2216
searchFormEl.addEventListener("submit", (e) => {
@@ -72,8 +66,6 @@ function moveToSuggestions() {
7266
searchSuggestionsEl.addEventListener("keydown", moveToNextSuggestion);
7367
}
7468

75-
document.addEventListener("htmx:afterRequest", function (e) {});
76-
7769
window.Search = {
7870
searchNoReload,
7971
};

views/components/navlink/navlink.templ

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ templ NavLink(title, imageUrl, path string, showTilte ...bool) {
1010
hx-target="#main-contents"
1111
hx-swap="innerHTML"
1212
hx-trigger="click,submit"
13-
hx-on::before-request={ updateHref(path) }
13+
hx-on::after-request={ updateStyle() }
1414
>
1515
if imageUrl != "" {
1616
<div class={ "flex", "gap-x-3", "items-center" }>
@@ -44,7 +44,7 @@ templ JustLink(path, title string, child templ.Component) {
4444
hx-target="#main-contents"
4545
hx-swap="innerHTML"
4646
hx-trigger="click,submit"
47-
hx-on::before-request={ updateHref(path) }
47+
hx-on::after-request={ updateStyle() }
4848
>
4949
<div
5050
id={ path }
@@ -55,9 +55,6 @@ templ JustLink(path, title string, child templ.Component) {
5555
</a>
5656
}
5757

58-
script updateHref(path string) {
59-
const prevPath = window.location.href.substring((window.location.protocol+"//"+window.location.host).length);
60-
window.location.prevPath = prevPath;
61-
window.history.pushState({}, "", path)
58+
script updateStyle() {
6259
Router.updateActiveNavLink();
6360
}

views/layouts/default.templ

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ import (
88
"dankmuzikk/views/components/mobilenav"
99
)
1010

11-
templ Default(children ...templ.Component) {
11+
templ Default(title string, children ...templ.Component) {
1212
<!DOCTYPE html>
1313
<html lang="en">
1414
<head>
1515
<meta charset="UTF-8"/>
16-
<title>DankMuzikk</title>
16+
<title>{ title } - DankMuzikk</title>
1717
<link rel="apple-touch-icon" sizes="180x180" href="/static/apple-touch-icon.png"/>
1818
<link rel="icon" type="image/png" sizes="32x32" href="/static/favicon-32x32.png"/>
1919
<link rel="icon" type="image/png" sizes="16x16" href="/static/favicon-16x16.png"/>

views/layouts/raw.templ

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ import (
55
"fmt"
66
)
77

8-
templ Raw(children ...templ.Component) {
8+
templ Raw(title string, children ...templ.Component) {
99
<!DOCTYPE html>
1010
<html lang="en">
1111
<head>
1212
<meta charset="UTF-8"/>
13-
<title>DankMuzikk</title>
13+
<title>{ title } - DankMuzikk</title>
1414
<link rel="apple-touch-icon" sizes="180x180" href="/static/apple-touch-icon.png"/>
1515
<link rel="icon" type="image/png" sizes="32x32" href="/static/favicon-32x32.png"/>
1616
<link rel="icon" type="image/png" sizes="16x16" href="/static/favicon-16x16.png"/>

0 commit comments

Comments
 (0)