diff --git a/static/app.js b/static/app.js
deleted file mode 100644
index 835bc78..0000000
--- a/static/app.js
+++ /dev/null
@@ -1,138 +0,0 @@
-let currentQuery = 'tag:inbox';
-let isLoading = false;
-
-async function api(endpoint) {
- console.log('API call:', endpoint);
- const res = await fetch(`/api/${endpoint}`);
- console.log('Response status:', res.status);
- if (!res.ok) {
- const text = await res.text();
- console.error('API error response:', text);
- throw new Error(`API error: ${res.status}`);
- }
- const data = await res.json();
- console.log('API response:', data);
- return data;
-}
-
-function setStatus(state) {
- const status = document.getElementById('status');
- status.className = state === 'loading' ? 'status-loading' : state === 'ok' ? 'status-ok' : 'status-error';
-}
-
-function setLoading(loading) {
- isLoading = loading;
- const btn = document.querySelector('.search-bar button');
- btn.disabled = loading;
- btn.textContent = loading ? 'Loading...' : 'Search';
-}
-
-async function search() {
- if (isLoading) return;
- const query = document.getElementById('search').value;
- currentQuery = query;
- history.pushState({ query }, '', `/?q=${encodeURIComponent(query)}`);
- await loadThreads(query);
-}
-
-async function loadThreads(query) {
- setLoading(true);
- setStatus('loading');
- const list = document.getElementById('thread-list');
-
- try {
- const threads = await api(`query/${encodeURIComponent(query)}`);
- if (!threads || threads.length === 0) {
- list.innerHTML = '
No threads found
';
- } else {
- list.innerHTML = threads.map(t => `
-
-
${escapeHtml(t.subject)}
-
${escapeHtml(t.authors)}
-
${new Date(t.newest_date * 1000).toLocaleString()}
-
- `).join('');
- }
- setStatus('ok');
- } catch (e) {
- console.error('Error in loadThreads:', e);
- list.innerHTML = `Error loading threads: ${escapeHtml(e.message)}
`;
- setStatus('error');
- } finally {
- setLoading(false);
- }
-}
-
-async function loadThread(threadId) {
- setStatus('loading');
- const view = document.getElementById('message-view');
- view.innerHTML = 'Loading messages...
';
-
- try {
- const messages = await api(`thread/${threadId}`);
- view.innerHTML = messages.map(m => `
-
- `).join('');
- setStatus('ok');
- } catch (e) {
- console.error('Error in loadThread:', e);
- view.innerHTML = `Error loading thread: ${escapeHtml(e.message)}
`;
- setStatus('error');
- }
-}
-
-async function loadMessageContent(messageId) {
- setStatus('loading');
- const div = document.getElementById(`msg-${messageId}`);
- div.innerHTML = 'Loading content...
';
-
- try {
- const msg = await api(`message/${messageId}`);
- div.innerHTML = `
- ${escapeHtml(msg.content_type)}
- ${msg.content_type === 'text/html' ? msg.content : `
${escapeHtml(msg.content)}
`}
- ${msg.attachments.length ? `Attachments: ${msg.attachments.map(a => escapeHtml(a.filename)).join(', ')}
` : ''}
- `;
- setStatus('ok');
- } catch (e) {
- console.error('Error in loadMessageContent:', e);
- div.innerHTML = `Error loading message: ${escapeHtml(e.message)}
`;
- setStatus('error');
- }
-}
-
-function escapeHtml(text) {
- const div = document.createElement('div');
- div.textContent = text;
- return div.innerHTML;
-}
-
-// Initialize
-window.addEventListener('DOMContentLoaded', () => {
- console.log('App initialized');
- const params = new URLSearchParams(location.search);
- const query = params.get('q') || 'tag:inbox';
- document.getElementById('search').value = query;
- loadThreads(query);
-
- // Allow Enter key to search
- document.getElementById('search').addEventListener('keypress', (e) => {
- if (e.key === 'Enter') search();
- });
-});
-
-window.addEventListener('popstate', (e) => {
- if (e.state?.query) {
- document.getElementById('search').value = e.state.query;
- loadThreads(e.state.query);
- }
-});
diff --git a/static/style.css b/static/style.css
deleted file mode 100644
index 509cc31..0000000
--- a/static/style.css
+++ /dev/null
@@ -1,154 +0,0 @@
-* {
- box-sizing: border-box;
- margin: 0;
- padding: 0;
-}
-
-body {
- font-family: system-ui, -apple-system, sans-serif;
- line-height: 1.5;
- background: #1e1e1e;
- color: #e0e0e0;
-}
-
-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 1rem;
- border-bottom: 1px solid #333;
- background: #252525;
-}
-
-h1 {
- font-size: 1.5rem;
-}
-
-.status-ok { color: #0f0; }
-.status-error { color: #f00; }
-.status-loading { color: #ff0; }
-
-.search-bar {
- padding: 1rem;
- border-bottom: 1px solid #333;
- background: #252525;
-}
-
-#search {
- width: 70%;
- padding: 0.5rem;
- border: 1px solid #444;
- border-radius: 4px;
- background: #2a2a2a;
- color: #e0e0e0;
-}
-
-button {
- padding: 0.5rem 1rem;
- background: #0066cc;
- color: white;
- border: none;
- border-radius: 4px;
- cursor: pointer;
-}
-
-button:hover {
- background: #0052a3;
-}
-
-button:disabled {
- background: #444;
- cursor: not-allowed;
-}
-
-.container {
- display: flex;
- height: calc(100vh - 140px);
-}
-
-.thread-list {
- width: 40%;
- overflow-y: auto;
- border-right: 1px solid #333;
-}
-
-.thread {
- padding: 1rem;
- border-bottom: 1px solid #2a2a2a;
- cursor: pointer;
-}
-
-.thread:hover {
- background: #2a2a2a;
-}
-
-.thread-subject {
- font-weight: bold;
- margin-bottom: 0.25rem;
-}
-
-.thread-authors {
- color: #999;
- font-size: 0.9rem;
-}
-
-.thread-date {
- color: #666;
- font-size: 0.85rem;
-}
-
-.message-view {
- width: 60%;
- overflow-y: auto;
- padding: 1rem;
-}
-
-.message {
- margin-bottom: 2rem;
- padding: 1rem;
- border: 1px solid #333;
- border-radius: 4px;
- background: #252525;
-}
-
-.message-header {
- margin-bottom: 1rem;
- padding-bottom: 1rem;
- border-bottom: 1px solid #333;
-}
-
-.message-content {
- margin-top: 1rem;
-}
-
-.content {
- padding: 1rem;
- background: #2a2a2a;
- border-radius: 4px;
-}
-
-.content pre {
- white-space: pre-wrap;
- word-wrap: break-word;
-}
-
-.attachments {
- margin-top: 1rem;
- padding: 0.5rem;
- background: #3a3a00;
- border-radius: 4px;
-}
-
-.loading {
- padding: 1rem;
- text-align: center;
- color: #999;
-}
-
-.error {
- padding: 1rem;
- background: #3a0000;
- border: 1px solid #600;
- border-radius: 4px;
- margin: 1rem;
-}