c5361f2271
- 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
64 lines
1.9 KiB
HTML
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>
|