Document Version Control Manager
Document Dashboard
Upload a New Document
Version History
Latest Version: ${latestVersion.version}
Last Updated: ${latestVersion.timestamp} by ${latestVersion.user}
';
doc.versions.slice().reverse().forEach(v => {
historyHtml += `
`;
});
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();
});
Version ${v.version}
Uploaded by ${v.user} on ${v.timestamp}
${v.content}
