commit ec9b947472ab9436481f43599a924b110e2ba5f5
parent 63f80483bda23dccd216fc52115244e2915f4b46
Author: David Eisinger <[email protected]>
Date: Thu, 9 Oct 2025 14:25:55 -0400
Page titles
Diffstat:
5 files changed, 17 insertions(+), 21 deletions(-)
diff --git a/internal/api.go b/internal/api.go
@@ -388,6 +388,19 @@ func NewHandlerWithConfig(db *DB, cfg HandlerConfig) (http.Handler, error) {
}
if u, err := db.GetUserByUsername(r.Context(), uname); err == nil && u != nil {
if html, err := RenderPage("user.html", cfg); err == nil {
+ // Set <title> to "{username} | Marky" by replacing inner text only
+ if ti := bytes.Index(html, []byte("<title>")); ti >= 0 {
+ if tj := bytes.Index(html[ti:], []byte("</title>")); tj > 0 {
+ start := ti + len("<title>")
+ end := ti + tj
+ nt := []byte(u.Username + " | Marky")
+ nb := make([]byte, 0, len(html)-(end-start)+len(nt))
+ nb = append(nb, html[:start]...)
+ nb = append(nb, nt...)
+ nb = append(nb, html[end:]...)
+ html = nb
+ }
+ }
// Embed initial bookmarks to avoid client fetch
if isOwnerAuthorized(r, u, db) {
items, err := db.ListBookmarks(r.Context(), u.ID, 50, 0)
diff --git a/internal/web/app.js b/internal/web/app.js
@@ -21,11 +21,6 @@ createApp({
mounted() {
this.initView();
},
- watch: {
- view() { this.updateTitle(); },
- viewUser() { this.updateTitle(); },
- me() { this.updateTitle(); },
- },
methods: {
async initView() {
// Determine logged-in user
@@ -42,7 +37,6 @@ createApp({
return;
}
this.view = 'login';
- this.updateTitle();
return;
}
// Settings page
@@ -50,7 +44,6 @@ createApp({
if (!this.me || !this.me.username) { location.replace('/'); return; }
// Token embedded by server
this.api.value = (window.MARKY_TOKEN || '');
- this.updateTitle();
return;
}
// User page: support new "/u:{username}" and legacy "/{username}"
@@ -79,16 +72,8 @@ createApp({
} catch {}
if (!hydrated) this.loadPublic();
}
- this.updateTitle();
- },
- updateTitle() {
- const base = 'marky';
- if (this.view === 'public' || this.view === 'self') {
- const u = this.view === 'self' && this.me && this.me.username ? this.me.username : this.viewUser;
- if (u) { document.title = `${u} | ${base}`; return; }
- }
- document.title = base;
},
+
renderMarkdown(text) {
try {
if (!text) return '';
diff --git a/internal/web/login.html b/internal/web/login.html
@@ -3,7 +3,7 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>marky</title>
+ <title>Marky</title>
<link rel="stylesheet" href="/styles.css" />
<script src="/vendor/vue.global.prod.js"></script>
<script>if(!window.Vue){var s=document.createElement('script');s.src='https://unpkg.com/vue@3/dist/vue.global.prod.js';document.head.appendChild(s)}</script>
@@ -41,4 +41,3 @@
<script src="/app.js"></script>
</body>
</html>
-
diff --git a/internal/web/settings.html b/internal/web/settings.html
@@ -3,7 +3,7 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>settings | marky</title>
+ <title>Settings | Marky</title>
<link rel="stylesheet" href="/styles.css" />
<script src="/vendor/vue.global.prod.js"></script>
</head>
diff --git a/internal/web/user.html b/internal/web/user.html
@@ -3,7 +3,7 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>marky</title>
+ <title>Marky</title>
<link rel="stylesheet" href="/styles.css" />
<script src="/vendor/vue.global.prod.js"></script>
<script>if(!window.Vue){var s=document.createElement('script');s.src='https://unpkg.com/vue@3/dist/vue.global.prod.js';document.head.appendChild(s)}</script>
@@ -101,4 +101,3 @@
<script src="/app.js"></script>
</body>
</html>
-