Document Version Control Manager

Document Version Control Manager

Document Dashboard

Latest Version: ${latestVersion.version}

Last Updated: ${latestVersion.timestamp} by ${latestVersion.user}

`; dashboard.appendChild(card); }); }; const openVersionModal = (docId) => { const doc = documents.find(d => d.id === docId); if (!doc) return; document.getElementById('modalTitle').textContent = `Version History for: ${doc.title}`; const modalContent = document.getElementById('modalContent'); let historyHtml = '
'; doc.versions.slice().reverse().forEach(v => { historyHtml += `

Version ${v.version}

Uploaded by ${v.user} on ${v.timestamp}

${v.content}

`; }); historyHtml += '
'; modalContent.innerHTML = historyHtml; modal.classList.remove('hidden'); }; const closeVersionModal = () => { modal.classList.add('hidden'); }; /** * Generates and downloads a professional PDF of the document list. */ const downloadPDF = () => { const { jsPDF } = window.jspdf; const doc = new jsPDF(); doc.setFontSize(22); doc.text('Document Version Control Report', 14, 22); const tableBody = documents.map(d => { const latest = d.versions[d.versions.length - 1]; return [d.title, latest.version, latest.user, latest.timestamp]; }); doc.autoTable({ startY: 30, head: [['Document Title', 'Latest Version', 'Last Updated By', 'Timestamp']], body: tableBody, theme: 'grid', headStyles: { fillColor: [59, 130, 246] } }); doc.save('Document_Report.pdf'); }; // --- Event Listeners --- pdfDownloadBtn.addEventListener('click', downloadPDF); closeModalBtn.addEventListener('click', closeVersionModal); modal.addEventListener('click', (e) => { if (e.target === modal) closeVersionModal(); }); uploadForm.addEventListener('submit', (e) => { e.preventDefault(); const newDoc = { id: nextDocId++, title: document.getElementById('docTitle').value, versions: [{ version: 1, user: document.getElementById('uploaderName').value, timestamp: new Date().toLocaleString(), content: document.getElementById('docContent').value }] }; documents.push(newDoc); uploadForm.reset(); renderDashboard(); changeTab(0); }); dashboard.addEventListener('click', (e) => { if (e.target.classList.contains('view-history-btn')) { const docId = parseInt(e.target.dataset.docId); openVersionModal(docId); } if (e.target.classList.contains('upload-version-btn')) { const docId = parseInt(e.target.dataset.docId); const doc = documents.find(d => d.id === docId); if (doc) { const user = prompt("Your Name:"); const content = prompt("Description of changes or new content:"); if (user && content) { doc.versions.push({ version: doc.versions.length + 1, user: user, timestamp: new Date().toLocaleString(), content: content }); renderDashboard(); } } } }); // --- Initial Setup --- const initializeTool = () => { renderDashboard(); }; initializeTool(); });
Scroll to Top