async function renderPrompts() { const content = document.getElementById('pageContent'); content.innerHTML = `
`; try { const prompts = await api.getPrompts(); const entries = Object.entries(prompts); const grid = document.getElementById('promptGrid'); if (entries.length === 0) { grid.innerHTML = '
📝
No prompt templates
'; return; } grid.innerHTML = entries.map(([name, content]) => { const displayName = name.replace(/-/g, ' ').replace(/\b\w/g, c => c.toUpperCase()); const preview = content.slice(0, 180); const lines = content.split('\n').length; return `
📝
${displayName}
${escapeHtml(preview)}${preview.length >= 180 ? '...' : ''}
`; }).join(''); } catch (err) { document.getElementById('promptGrid').innerHTML = `
${escapeHtml(err.message)}
`; } } async function viewPrompt(name) { let content = ''; try { const prompts = await api.getPrompts(); content = prompts[name] || ''; } catch {} const displayName = name.replace(/-/g, ' ').replace(/\b\w/g, c => c.toUpperCase()); // Store raw content for clipboard copy (avoids HTML entity encoding issue) window._promptCopyContent = content; showModal(`Prompt: ${displayName}`, `
${escapeHtml(content)}
`, ` `); } function copyPromptFromModal() { const text = window._promptCopyContent || ''; navigator.clipboard.writeText(text).then(() => { showToast('Copied to clipboard', 'success'); }).catch(() => { showToast('Failed to copy', 'error'); }); }