/* PromptLean — compare page */ document.addEventListener('DOMContentLoaded', async () => { let data; try { data = await PL.loadPrompts(); } catch (err) { document.getElementById('compare-placeholder').innerHTML = `
⚠

Could not load prompts

${err.message}

`; return; } const all = data.prompts; let selectedId = PL.param('id') || null; /* ── Build selector ─── */ const selector = document.getElementById('prompt-selector'); selector.innerHTML = `` + all.map(p => ``).join(''); selector.addEventListener('change', () => { selectedId = selector.value || null; render(); // update URL param without reload const url = new URL(location.href); if (selectedId) url.searchParams.set('id', selectedId); else url.searchParams.delete('id'); history.replaceState(null, '', url); }); /* ── Render compare grid ─── */ const area = document.getElementById('compare-area'); const placeholder = document.getElementById('compare-placeholder'); const render = () => { if (!selectedId) { area.classList.add('hidden'); placeholder.classList.remove('hidden'); return; } const prompt = all.find(p => p.id === selectedId); if (!prompt) return; area.classList.remove('hidden'); placeholder.classList.add('hidden'); // Title bar document.getElementById('compare-title').innerHTML = `

${prompt.title}

${prompt.category} ${prompt.tags.slice(0, 3).map(t => `${t}`).join('')} Full detail →
`; const variants = ['lean', 'balanced', 'max_quality']; const labels = { lean: '⚡ Lean', balanced: '⚖ Balanced', max_quality: '★ Max Quality' }; const qualT = prompt.variants.max_quality?.token_estimate; document.getElementById('compare-cols').innerHTML = variants.map(v => { const vdata = prompt.variants[v]; const t = vdata.token_estimate; const savings = v !== 'max_quality' && qualT ? Math.round((1 - t/qualT) * 100) : null; const cls = v === 'max_quality' ? 'quality' : v; return `
${labels[v]} ${t}t
${savings ? `-${savings}%` : ''}
${highlightPrompt(vdata.prompt)}
`; }).join(''); // Savings summary row const leanT = prompt.variants.lean?.token_estimate; document.getElementById('savings-summary').innerHTML = `
⚡ Using Lean saves ${qualT - leanT} tokens vs Max Quality — that's ${Math.round((1-leanT/qualT)*100)}% fewer tokens per call.
`; // Store for copy window._comparePrompt = prompt; }; window.copyVariant = (v) => { if (!window._comparePrompt) return; const text = window._comparePrompt.variants[v].prompt; PL.copy(text); }; render(); }); /* escapeHtml / highlightPrompt live in main.js as PL.escapeHtml / PL.highlightPrompt */ const escapeHtml = (s) => PL.escapeHtml(s); const highlightPrompt = (s) => PL.highlightPrompt(s);