Files
telegram-scraper/webui/viewer.html
T
forust c5361f2271 Redesign message viewer as Telegram-style chat with bubbles, replies, infinite scroll, and orientation
- Chat bubbles with 1px border-radius, angular tail arrows
- Own messages right (blue), others left (dark) via sender_id vs user_id
- Reply preview with left border accent, clickable scroll to original
- Infinite scroll up via IntersectionObserver on scroll-sentinel
- Date separators (Today/Yesterday/date) between messages
- Full-height messages panel with sidebar (channels) + header
- Backend: reply_to_message data in load_messages(), user_id exposed in auth snapshot
- Auto-scroll to bottom on channel load (triple scrollTop fallback)
- history.scrollRestoration = manual to prevent mid-page jumps
2026-05-27 01:01:18 +02:00

64 lines
1.9 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Telegram Scraper Viewer</title>
<link rel="stylesheet" href="/static/style.css" />
</head>
<body>
<div class="viewer-shell">
<aside class="viewer-sidebar">
<div class="viewer-sidebar-head">
<div>
<div class="eyebrow">Export Viewer</div>
<h1>Messages</h1>
</div>
<a class="button button-small" href="/">Dashboard</a>
</div>
<div id="viewer-channel-list" class="viewer-channel-list"></div>
</aside>
<main class="viewer-main">
<header class="viewer-header">
<div>
<h2 id="viewer-title">Select a channel</h2>
<p id="viewer-subtitle" class="muted">Reading messages from the local SQLite database.</p>
</div>
</header>
<section id="messages-list" class="messages-list">
<div id="scroll-sentinel" class="scroll-sentinel"></div>
</section>
</main>
</div>
<template id="viewer-channel-template">
<button class="viewer-channel-item">
<span class="viewer-channel-name"></span>
<span class="viewer-channel-meta"></span>
</button>
</template>
<template id="message-template">
<div class="chat-bubble-wrap">
<div class="chat-bubble">
<div class="chat-sender"></div>
<div class="chat-reply">
<div class="chat-reply-border"></div>
<div class="chat-reply-body">
<div class="chat-reply-author"></div>
<div class="chat-reply-text"></div>
</div>
</div>
<div class="chat-text"></div>
<div class="chat-media"></div>
<div class="chat-footer"></div>
</div>
</div>
</template>
<script src="/static/viewer.js"></script>
</body>
</html>