| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- <!doctype html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <title>PPS Quarantine Manager</title>
- <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
- </head>
- <body>
- <header class="topbar">
- <span class="brand">PPS Quarantine</span>
- {% if user and user.role == 'admin' %}<a class="topbar-link" href="/admin">Admin</a>{% endif %}
- <div class="toolbar">
- <label class="field">Folder
- <select id="folder-select"></select>
- </label>
- <label class="field">Show
- <input id="limit-input" type="number" min="1" step="1" title="Max rows to display (the full folder stays cached)">
- </label>
- <label class="field">Sort
- <select id="sort-field">
- <option value="subject">Subject</option>
- <option value="date">Date</option>
- <option value="from">Sender</option>
- <option value="rcpt">Recipient</option>
- </select>
- </label>
- <button id="sort-dir" class="btn" title="Toggle ascending / descending">▲</button>
- <button id="refresh-btn" class="btn" title="Re-render from the cached messages">Refresh</button>
- <button id="reload-btn" class="btn" title="Re-fetch the whole folder from the server">Reload from server</button>
- <span id="cache-info" class="cache-info"></span>
- <span class="spacer"></span>
- <button data-action="release" class="btn action" disabled>Release</button>
- <button data-action="report_release" class="btn action" disabled>Report & Release</button>
- <button data-action="delete" class="btn action danger" disabled>Delete</button>
- <div class="move-wrap">
- <button id="move-btn" class="btn action" disabled>Move ▾</button>
- <div id="move-menu" class="move-menu hidden"></div>
- </div>
- </div>
- {% if user %}<span class="topbar-user">{{ user.email }}</span>{% endif %}
- <a class="logout" href="{{ url_for('auth.logout') }}">Sign out</a>
- </header>
- <div id="status-bar" class="status-bar hidden"></div>
- <main class="content">
- <table class="msg-table">
- <thead>
- <tr>
- <th class="col-check"><input type="checkbox" id="select-all"></th>
- <th class="col-date">Date</th>
- <th class="col-from">Sender</th>
- <th class="col-rcpt">Recipient</th>
- <th class="col-subj">Subject</th>
- </tr>
- </thead>
- <tbody id="msg-body"></tbody>
- </table>
- <p id="empty-note" class="empty-note hidden">No messages.</p>
- <!-- Message content overlay, sits over the list -->
- <div id="overlay" class="overlay hidden">
- <div class="overlay-panel">
- <div class="overlay-head">
- <strong id="ov-subject"></strong>
- <button id="overlay-close" class="btn">Close ✕</button>
- </div>
- <div class="overlay-meta" id="ov-meta"></div>
- <div class="overlay-attach hidden" id="ov-attach"></div>
- <div class="overlay-bodybar">
- <button id="ov-toggle" class="btn small hidden">Show HTML</button>
- <button id="ov-raw-toggle" class="btn small">Show raw headers</button>
- </div>
- <pre id="ov-text" class="overlay-text"></pre>
- <iframe id="ov-html" class="overlay-html hidden" sandbox referrerpolicy="no-referrer"></iframe>
- <pre id="ov-raw" class="overlay-text hidden"></pre>
- </div>
- </div>
- <!-- Full-load progress window -->
- <div id="progress" class="progress-overlay hidden">
- <div class="progress-box">
- <div class="spinner"></div>
- <div id="progress-title">Loading messages…</div>
- <div id="progress-count" class="progress-count">0 messages loaded</div>
- <button id="cancel-sync-btn" class="btn">Cancel</button>
- </div>
- </div>
- </main>
- <script src="{{ url_for('static', filename='app.js') }}"></script>
- </body>
- </html>
|