Compact live visitor panel

This commit is contained in:
rajchales-monito
2026-07-24 11:43:43 +02:00
parent c72e6f3ed1
commit 79826cd26d
3 changed files with 46 additions and 26 deletions
+17 -15
View File
@@ -199,6 +199,14 @@ $("#messages").addEventListener("click", (event) => {
openPhotoPreview(preview.dataset.photoUrl, preview.dataset.photoName);
});
$("#visitorList").addEventListener("click", async (event) => {
if (event.target.closest("a")) return;
const card = event.target.closest("[data-visitor-conversation]");
const conversationId = card?.dataset.visitorConversation;
if (!conversationId) return;
await openConversation(conversationId);
});
async function showApp() {
$("#loginView").classList.add("hidden");
$("#appView").classList.remove("hidden");
@@ -320,7 +328,7 @@ function renderConversations() {
function renderVisitors() {
$("#visitorCount").textContent = `${state.visitors.length} online`;
$("#visitorList").innerHTML = state.visitors.length ? state.visitors.map((visitor) => `
<article class="visitor-card">
<article class="visitor-card ${visitor.lastConversationId ? "clickable" : ""}" data-visitor-conversation="${escapeHtml(visitor.lastConversationId || "")}">
<div class="visitor-card-head">
<span class="visitor-avatar">${escapeHtml(visitor.initials || "??")}</span>
<div>
@@ -329,20 +337,14 @@ function renderVisitors() {
</div>
<span class="online-dot" title="Online"></span>
</div>
<dl>
<dt>Zeme</dt>
<dd>${visitor.countryFlag || ""} ${escapeHtml(visitor.countryCode || "?")}</dd>
<dt>Stranka</dt>
<dd><a href="${escapeHtml(visitor.currentUrl || "#")}" target="_blank" rel="noreferrer">${escapeHtml(pageTitle(visitor))}</a></dd>
<dt>Prisiel z</dt>
<dd>${visitor.referrer ? `<a href="${escapeHtml(visitor.referrer)}" target="_blank" rel="noreferrer">${escapeHtml(referrerLabel(visitor.referrer))}</a>` : "primy vstup"}</dd>
<dt>Cas</dt>
<dd>${formatDuration(visitor.sessionSeconds)}</dd>
<dt>Navstevy</dt>
<dd>${Number(visitor.visitCount || visitor.pageCount || 1)}</dd>
<dt>Chaty</dt>
<dd>${Number(visitor.conversationCount || 0)}</dd>
</dl>
<div class="visitor-compact-meta">
<span>${visitor.countryFlag || escapeHtml(visitor.countryCode || "?")}</span>
<span>${formatDuration(visitor.sessionSeconds)}</span>
<span>${Number(visitor.visitCount || visitor.pageCount || 1)} navst.</span>
<span>${Number(visitor.conversationCount || 0)} chaty</span>
</div>
<a class="visitor-page" href="${escapeHtml(visitor.currentUrl || "#")}" target="_blank" rel="noreferrer">${escapeHtml(pageTitle(visitor))}</a>
<div class="visitor-referrer">${visitor.referrer ? escapeHtml(referrerLabel(visitor.referrer)) : "primy vstup"}${visitor.lastConversationId ? "" : " · bez chatu"}</div>
</article>
`).join("") : `<p class="empty-list">Zatim nikdo online.</p>`;
}