Files
forust 81e69865ce
ci / lint-prettier (push) Successful in 26s
ci / lint-ruff (push) Successful in 11s
ci / lint-yaml (push) Successful in 18s
ci / lint-dockerfiles (push) Successful in 11s
ci / validate (push) Successful in 7s
ci / publish (push) Successful in 19s
fix(webui): bust stylesheet cache
2026-07-26 19:47:48 +02:00

157 lines
6.6 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 Settings</title>
<link rel="stylesheet" href="/static/style.css?v=8" />
</head>
<body>
<div class="app-shell settings-page-shell">
<aside class="sidebar">
<div class="brand-block">
<div class="eyebrow">Telegram Scraper</div>
<h1>Settings</h1>
<p class="muted">Account credentials, import/export, and runtime safety controls.</p>
</div>
<nav class="nav-links">
<a class="nav-link" href="/">Dashboard</a>
<a class="nav-link active" href="/settings">Settings</a>
<a class="nav-link" href="/viewer">Message Viewer</a>
<a class="nav-link" href="/swagger">API Docs</a>
<a class="nav-link" href="/health">Health</a>
</nav>
<section class="status-card">
<div class="section-title">Accounts</div>
<div id="settings-account-list" class="settings-account-list"></div>
</section>
</aside>
<main class="content settings-page">
<section class="panel settings-hero">
<div>
<div class="eyebrow">Account Settings</div>
<h2 id="settings-title">Loading accounts</h2>
<p id="settings-subtitle" class="muted">Select an account to manage credentials and scraper options.</p>
</div>
<div class="action-row">
<button class="button" id="settings-export-btn" type="button" disabled>Export</button>
<button class="button danger" id="settings-delete-btn" type="button" disabled>Delete</button>
</div>
</section>
<section id="settings-empty" class="panel hidden">
<div class="empty-state">
<h2>Add first account</h2>
<p class="muted">Create an account below or import an exported account JSON.</p>
</div>
</section>
<section class="panel-grid settings-health-grid">
<div class="panel stat-panel">
<div class="section-title">Credentials</div>
<div class="stat-value stat-compact" id="health-credentials">-</div>
</div>
<div class="panel stat-panel">
<div class="section-title">Session</div>
<div class="stat-value stat-compact" id="health-session">-</div>
</div>
<div class="panel stat-panel">
<div class="section-title">Continuous</div>
<div class="stat-value stat-compact" id="health-continuous">-</div>
</div>
<div class="panel stat-panel">
<div class="section-title">Last scrape</div>
<div class="stat-value stat-compact" id="health-last-scrape">-</div>
</div>
</section>
<section class="settings-layout">
<div class="panel">
<div class="panel-header">
<div>
<h2>Create or Import</h2>
<p class="muted">New accounts start without continuous scraping enabled.</p>
</div>
</div>
<form id="settings-add-account-form" class="stack-form">
<input id="settings-add-account-id" name="account_id" placeholder="Account ID (e.g. work)" required />
<input id="settings-add-account-label" name="label" placeholder="Display name" />
<input id="settings-add-account-api-id" name="api_id" placeholder="API ID" />
<input id="settings-add-account-api-hash" name="api_hash" placeholder="API Hash" />
<button class="button primary" type="submit">Add Account</button>
</form>
<label class="import-account-row">
<span class="muted small">Import account settings JSON</span>
<input id="settings-import-account-file" type="file" accept="application/json,.json" />
</label>
</div>
<div class="panel">
<div class="panel-header">
<div>
<h2>Credentials & Auth</h2>
<p class="muted" id="settings-auth-label">No account selected.</p>
</div>
</div>
<form id="settings-credentials-form" class="stack-form">
<input id="settings-api-id-input" name="api_id" placeholder="API ID" />
<input id="settings-api-hash-input" name="api_hash" placeholder="API Hash" />
<button class="button" type="submit">Save credentials</button>
</form>
<div class="auth-actions">
<button class="button primary" id="settings-start-qr-btn" type="button">Start QR login</button>
</div>
<div id="settings-qr-wrap" class="qr-wrap hidden">
<img id="settings-qr-image" alt="Telegram QR login" />
<p class="muted small">Open Telegram -> Settings -> Devices -> Scan QR.</p>
</div>
<form id="settings-phone-form" class="stack-form">
<input id="settings-phone-input" name="phone" placeholder="+1234567890" />
<button class="button" type="submit">Send code</button>
</form>
<form id="settings-code-form" class="stack-form hidden">
<input id="settings-code-input" name="code" placeholder="Telegram code" />
<button class="button" type="submit">Confirm code</button>
</form>
<form id="settings-password-form" class="stack-form hidden">
<input id="settings-password-input" name="password" type="password" placeholder="2FA password" />
<button class="button" type="submit">Confirm password</button>
</form>
</div>
<div class="panel">
<div class="panel-header">
<div>
<h2>Scraping</h2>
<p class="muted">Account-level parser settings.</p>
</div>
</div>
<label class="toggle-row">
<span>Download media</span>
<span class="switch">
<input id="settings-scrape-media-toggle" type="checkbox" />
<span class="switch-slider"></span>
</span>
</label>
<div class="settings-meta-list">
<div>Tracked channels: <span id="settings-channel-count">0</span></div>
<div>Messages: <span id="settings-message-count">0</span></div>
<div>Media: <span id="settings-media-count">0</span></div>
</div>
</div>
</section>
</main>
</div>
<script src="/static/settings.js?v=1"></script>
</body>
</html>