let documents = []; let currentDocument = null; // Load document list async function loadDocuments() { try { const response = await fetch('/api/documents'); const data = await response.json(); documents = data.documents || []; const listEl = document.getElementById('document-list'); if (documents.length === 0) { listEl.innerHTML = '
No documents available
'; return; } listEl.innerHTML = documents.map(doc => ` `).join(''); // Auto-load first document if (documents.length > 0) { loadDocument(documents[0].slug); } } catch (error) { console.error('Error loading documents:', error); document.getElementById('document-list').innerHTML = '
Error loading documents
'; } } // Load specific document async function loadDocument(slug) { try { const response = await fetch(`/api/documents/${slug}`); const data = await response.json(); currentDocument = data.document; // Update active state document.querySelectorAll('.doc-link').forEach(el => { if (el.dataset.slug === slug) { el.classList.add('bg-blue-100', 'text-blue-900'); } else { el.classList.remove('bg-blue-100', 'text-blue-900'); } }); // Render content const contentEl = document.getElementById('document-content'); contentEl.innerHTML = `
${currentDocument.content_html}
`; // Render table of contents renderTOC(currentDocument.toc || []); // Scroll to top window.scrollTo(0, 0); } catch (error) { console.error('Error loading document:', error); document.getElementById('document-content').innerHTML = `
Error loading document
`; } } // Render table of contents function renderTOC(toc) { const tocEl = document.getElementById('toc'); if (!toc || toc.length === 0) { tocEl.innerHTML = '
No table of contents
'; return; } tocEl.innerHTML = toc .filter(item => item.level <= 3) // Only show H1, H2, H3 .map(item => { const indent = (item.level - 1) * 12; return ` ${item.title} `; }).join(''); } // Initialize loadDocuments();