diff --git a/app/app.go b/app/app.go
index d3823575..503a6576 100644
--- a/app/app.go
+++ b/app/app.go
@@ -215,21 +215,16 @@ var Template = `
Home
Blog
Chat
-
Mail
+
Mail
News
Video
Markets
Places
Weather
Reminder
-
Wallet
-
-
+ %s
%s
@@ -263,6 +258,12 @@ var CardTemplate = `
`
+var navBottomLogin = `
Login`
+
+var navBottomAccount = `` +
+ `
Account` +
+ `
Logout`
+
var LoginTemplate = `
Login | Mu
@@ -657,7 +658,7 @@ func Account(w http.ResponseWriter, r *http.Request) {
adminLinks,
)
- html := RenderHTML("Account", "Account", content)
+ html := RenderHTMLForRequest("Account", "Account", content, r)
w.Write([]byte(html))
}
@@ -921,21 +922,26 @@ func GetUserLanguage(r *http.Request) string {
// RenderHTML renders the given html in a template with default language (English)
func RenderHTML(title, desc, html string) string {
- return RenderHTMLWithLang(title, desc, html, "en")
+ return RenderHTMLWithLang(title, desc, html, "en", navBottomLogin)
}
// RenderHTMLForRequest renders the given html in a template using the user's language preference
+// and server-side session check to render the correct nav-bottom (login or account/logout).
func RenderHTMLForRequest(title, desc, html string, r *http.Request) string {
lang := GetUserLanguage(r)
- return RenderHTMLWithLang(title, desc, html, lang)
+ _, acc := auth.TrySession(r)
+ if acc != nil {
+ return RenderHTMLWithLang(title, desc, html, lang, navBottomAccount)
+ }
+ return RenderHTMLWithLang(title, desc, html, lang, navBottomLogin)
}
// RenderHTMLWithLang renders the given html in a template with specified language
-func RenderHTMLWithLang(title, desc, html, lang string) string {
+func RenderHTMLWithLang(title, desc, html, lang, navBottom string) string {
if lang == "" {
lang = "en"
}
- return fmt.Sprintf(Template, lang, title, desc, "", title, html)
+ return fmt.Sprintf(Template, lang, title, desc, "", navBottom, title, html)
}
// RenderString renders a markdown string as html
@@ -945,7 +951,7 @@ func RenderString(v string) string {
// RenderTemplate renders a markdown string in a html template
func RenderTemplate(title string, desc, text string) string {
- return fmt.Sprintf(Template, "en", title, desc, "", title, RenderString(text))
+ return fmt.Sprintf(Template, "en", title, desc, "", navBottomLogin, title, RenderString(text))
}
func ServeHTML(html string) http.Handler {
diff --git a/app/html/mu.js b/app/html/mu.js
index 47b9013d..8268d17f 100644
--- a/app/html/mu.js
+++ b/app/html/mu.js
@@ -575,27 +575,13 @@ function setSession() {
});
})
.then(sess => {
- console.log('Success:', sess);
- // Nav elements (sidebar)
- var navMail = document.getElementById("nav-mail");
- var navWallet = document.getElementById("nav-wallet");
- var navAccount = document.getElementById("nav-account");
- var navLogout = document.getElementById("nav-logout");
- var navLogin = document.getElementById("nav-login");
var navMailBadge = document.getElementById("nav-mail-badge");
var navUsername = document.getElementById("nav-username");
-
+
if (sess.type == "account") {
isAuthenticated = true;
- // Show authenticated nav items
- if (navMail) navMail.style.display = 'flex';
- if (navWallet) navWallet.style.display = 'flex';
- if (navAccount) navAccount.style.display = 'flex';
- if (navLogout) navLogout.style.display = 'flex';
- if (navLogin) navLogin.style.display = 'none';
if (navUsername && sess.account) {
navUsername.textContent = 'Signed in as @' + sess.account;
- navUsername.style.display = 'block';
}
// Fetch unread mail count for badge
fetch('/mail?unread=count')
@@ -612,19 +598,7 @@ function setSession() {
}
} else {
isAuthenticated = false;
- // Hide authenticated nav items, show login
- if (navMail) navMail.style.display = 'none';
- if (navWallet) navWallet.style.display = 'none';
- if (navAccount) navAccount.style.display = 'none';
- if (navLogout) navLogout.style.display = 'none';
- if (navLogin) {
- navLogin.style.display = 'flex';
- // Update login link to include redirect parameter
- if (window.location.pathname !== '/login' && window.location.pathname !== '/signup' && window.location.pathname !== '/') {
- const redirectUrl = encodeURIComponent(window.location.pathname + window.location.search);
- navLogin.href = '/login?redirect=' + redirectUrl;
- }
- }
+ if (navUsername) navUsername.textContent = '';
}
updateChatFormState();
updateSearchFormsState();
@@ -632,24 +606,6 @@ function setSession() {
.catch(error => {
console.error('Error:', error);
isAuthenticated = false;
- var navMail = document.getElementById("nav-mail");
- var navWallet = document.getElementById("nav-wallet");
- var navAccount = document.getElementById("nav-account");
- var navLogout = document.getElementById("nav-logout");
- var navLogin = document.getElementById("nav-login");
- if (navMail) navMail.style.display = 'none';
- if (navWallet) navWallet.style.display = 'none';
- if (navAccount) navAccount.style.display = 'none';
- if (navLogout) navLogout.style.display = 'none';
- if (navLogin) {
- navLogin.style.display = 'flex';
- // Update login link to include redirect parameter
- if (window.location.pathname !== '/login' && window.location.pathname !== '/signup' && window.location.pathname !== '/') {
- const redirectUrl = encodeURIComponent(window.location.pathname + window.location.search);
- navLogin.href = '/login?redirect=' + redirectUrl;
- }
- }
-
updateChatFormState();
updateSearchFormsState();
});
diff --git a/mail/mail.go b/mail/mail.go
index c60d9e19..393e718a 100644
--- a/mail/mail.go
+++ b/mail/mail.go
@@ -921,7 +921,7 @@ func Handler(w http.ResponseWriter, r *http.Request) {
`, otherPartyDisplay, threadHTML.String(), msgID, otherParty, replySubject, replyToID, msg.ID, blockButton)
- w.Write([]byte(app.RenderHTML(decodedSubject, "", messageView)))
+ w.Write([]byte(app.RenderHTMLForRequest(decodedSubject, "", messageView, r)))
return
}
@@ -954,7 +954,7 @@ func Handler(w http.ResponseWriter, r *http.Request) {
`, replyTo, to, subject, backLink, backLink)
- w.Write([]byte(app.RenderHTML(pageTitle, "", composeForm)))
+ w.Write([]byte(app.RenderHTMLForRequest(pageTitle, "", composeForm, r)))
return
}
@@ -1099,7 +1099,7 @@ func Handler(w http.ResponseWriter, r *http.Request) {
Content: `` + content + `
`,
})
- w.Write([]byte(app.RenderHTML(title, "Your messages", pageHTML)))
+ w.Write([]byte(app.RenderHTMLForRequest(title, "Your messages", pageHTML, r)))
}
// renderThreadPreview renders a thread preview showing the latest message but linking to root