// ── Word count ──────────────────────────────────────────────────────────────── function updateWordCount() { var plain = generatedMarkdown.replace(/[#*_`>-]/g, ' '); var words = plain.trim().split(/\s+/).filter(function(w){ return w.length > 1; }).length; var pages = (words / 650).toFixed(1); var el = document.getElementById('resume-stats'); if (el) { el.textContent = '~' + words + ' words \u00b7 ~' + pages + ' pages'; el.style.display = ''; } } // ── Version history ─────────────────────────────────────────────────────────── function saveResumeVersion() { var jdEl = document.getElementById('jd-text'); var raw = jdEl ? jdEl.value.trim() : ''; var label = (raw.split('\n')[0] || 'Resume').slice(0, 55); var hist = JSON.parse(localStorage.getItem('ao_resume_history') || '[]'); hist.unshift({ ts: Date.now(), label: label, md: generatedMarkdown }); if (hist.length > 3) hist.pop(); localStorage.setItem('ao_resume_history', JSON.stringify(hist)); updateHistoryBtn(); } function updateHistoryBtn() { var hist = JSON.parse(localStorage.getItem('ao_resume_history') || '[]'); var btn = document.getElementById('hist-btn'); if (btn) btn.textContent = hist.length ? '\ud83d\udcc1 History (' + hist.length + ')' : '\ud83d\udcc1 History'; } function toggleHistory() { var dd = document.getElementById('hist-drop'); if (!dd) return; if (dd.style.display === 'block') { dd.style.display = 'none'; return; } var hist = JSON.parse(localStorage.getItem('ao_resume_history') || '[]'); if (!hist.length) { showToast('No saved versions yet \u2014 generate a resume first.'); return; } dd.innerHTML = hist.map(function(h, i) { var d = new Date(h.ts); var when = d.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' }); return '
' + '
' + h.label.replace(/' + '
' + when + '
'; }).join(''); dd.style.display = 'block'; } function loadHistoryItem(idx) { var hist = JSON.parse(localStorage.getItem('ao_resume_history') || '[]'); if (!hist[idx]) return; generatedMarkdown = hist[idx].md; var out = document.getElementById('resume-output'); if (out) out.innerHTML = renderMarkdown(generatedMarkdown); document.getElementById('hist-drop').style.display = 'none'; updateWordCount(); showToast('Previous version restored'); } document.addEventListener('click', function(e) { var wrap = document.querySelector('.hist-wrap'); if (wrap && !wrap.contains(e.target)) { var dd = document.getElementById('hist-drop'); if (dd) dd.style.display = 'none'; } }); (function(){ updateHistoryBtn(); })();