1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
(function () {
function adminAvatarSvg() {
return '<svg xmlns="http://www.w3.org/2000/svg" class="icon text-white" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 3a12 12 0 0 0 8.5 3a12 12 0 0 1 -8.5 15a12 12 0 0 1 -8.5 -15a12 12 0 0 0 8.5 -3" /></svg>';
}
function userAvatarSvg() {
return '<svg xmlns="http://www.w3.org/2000/svg" class="icon" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0" /><path d="M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2" /></svg>';
}
var nav = document.getElementById("navbar-user");
if (!nav) return;
var link = document.getElementById("navbar-user-link");
var avatar = document.getElementById("navbar-user-avatar");
var nameEl = nav.querySelector(".navbar-user-name");
var metaEl = nav.querySelector(".navbar-user-meta");
if (!link || !avatar || !nameEl || !metaEl) return;
function resetGuestAvatar() {
avatar.classList.remove("bg-primary", "bg-teal", "text-white");
avatar.classList.add("bg-secondary");
avatar.innerHTML = userAvatarSvg();
}
function setFallbackAvatar(isAdmin) {
avatar.classList.remove("bg-secondary");
if (isAdmin) {
avatar.classList.remove("bg-teal");
avatar.classList.add("bg-primary", "text-white");
avatar.innerHTML = adminAvatarSvg();
} else {
avatar.classList.remove("bg-primary", "text-white");
avatar.classList.add("bg-teal");
avatar.innerHTML = userAvatarSvg();
}
}
function setGravatarAvatar(url, isAdmin) {
avatar.classList.remove("bg-secondary", "bg-primary", "bg-teal", "text-white");
var img = document.createElement("img");
img.src = url;
img.alt = "";
img.width = 32;
img.height = 32;
img.onerror = function () {
setFallbackAvatar(isAdmin);
};
avatar.replaceChildren(img);
}
fetch("/auth/status", { credentials: "same-origin" })
.then(function (r) {
return r.json();
})
.then(function (s) {
if (!s.auth_enabled) {
link.removeAttribute("href");
link.setAttribute("aria-disabled", "true");
link.classList.add("pe-none", "opacity-75");
nameEl.textContent = "Guest";
metaEl.textContent = "Sign-in not used";
return;
}
link.classList.remove("pe-none", "opacity-75");
link.removeAttribute("aria-disabled");
if (s.username) {
nav.setAttribute("data-logged-in", "true");
link.href = "/user";
nameEl.textContent = s.username;
metaEl.textContent = "Signed in";
var isAdmin = String(s.username).toLowerCase() === "admin";
if (s.gravatar_url) {
setGravatarAvatar(s.gravatar_url, isAdmin);
} else {
setFallbackAvatar(isAdmin);
}
return;
}
nav.setAttribute("data-logged-in", "false");
link.href = "/login";
nameEl.textContent = "Guest";
metaEl.textContent = "Not signed in";
resetGuestAvatar();
})
.catch(function () {
link.href = "/login";
resetGuestAvatar();
});
})();