Legal Case Evidence Organizer

Legal Case Evidence Organizer

Catalog, manage, and export evidence for your legal cases.

No evidence cataloged. Use the 'Add/Manage Evidence' tab to get started.

`; return; } // Group evidence by case name const groupedByCase = evidenceLocker.reduce((acc, item) => { (acc[item.caseName] = acc[item.caseName] || []).push(item); return acc; }, {}); for (const caseName in groupedByCase) { const caseContainer = document.createElement('div'); caseContainer.className = 'case-group'; let tableRows = groupedByCase[caseName].map(item => ` ${item.name} ${item.type} ${item.date} ${item.description} `).join(''); caseContainer.innerHTML = `

${caseName}

${tableRows}
Name / ID Type Date Collected Description Actions
`; dashboardView.appendChild(caseContainer); } }; // --- FORM & DATA LOGIC --- const clearForm = () => { form.reset(); evidenceIdInput.value = ''; saveEvidenceBtn.textContent = 'Save Evidence'; }; const saveEvidence = () => { const evidenceData = { caseName: caseNameInput.value.trim(), name: evidenceNameInput.value.trim(), type: evidenceTypeSelect.value, date: dateCollectedInput.value, description: evidenceDescriptionInput.value.trim(), }; if (!evidenceData.caseName || !evidenceData.name) { alert('Case Name and Evidence Name are required.'); return; } const id = evidenceIdInput.value; if (id) { // Update const index = evidenceLocker.findIndex(e => e.id == id); evidenceLocker[index] = { ...evidenceLocker[index], ...evidenceData }; } else { // Add new evidenceData.id = nextEvidenceId++; evidenceLocker.push(evidenceData); } clearForm(); renderDashboard(); showTab(0); }; const editEvidence = (id) => { const item = evidenceLocker.find(e => e.id == id); if (item) { evidenceIdInput.value = item.id; caseNameInput.value = item.caseName; evidenceNameInput.value = item.name; evidenceTypeSelect.value = item.type; dateCollectedInput.value = item.date; evidenceDescriptionInput.value = item.description; saveEvidenceBtn.textContent = 'Update Evidence'; showTab(1); } }; const deleteEvidence = (id) => { if (confirm('Are you sure you want to delete this evidence item?')) { const row = dashboardView.querySelector(`.delete-btn[data-id='${id}']`).closest('tr'); row.classList.add('deleting'); setTimeout(() => { evidenceLocker = evidenceLocker.filter(e => e.id != id); renderDashboard(); }, 300); } }; // --- UI & NAVIGATION LOGIC --- const showTab = (tabIndex) => { tabContents.forEach(c => c.classList.add('hidden')); tabButtons.forEach(b => b.classList.replace('active', 'inactive')); document.getElementById(`tab-content-${tabIndex}`).classList.remove('hidden'); document.querySelector(`.tab-button[data-tab='${tabIndex}']`).classList.replace('inactive', 'active'); updateNavButtons(); currentTab = tabIndex; }; const updateNavButtons = () => { prevBtn.style.visibility = currentTab === 0 ? 'hidden' : 'visible'; nextBtn.style.visibility = currentTab === totalTabs - 1 ? 'hidden' : 'visible'; }; const navigateTabs = (direction) => { const nextTabIndex = currentTab + direction; if (nextTabIndex >= 0 && nextTabIndex < totalTabs) showTab(nextTabIndex); }; // --- PDF GENERATION --- const downloadPDF = () => { const { jsPDF } = window.jspdf; const pdfContentArea = document.getElementById('pdf-content-area'); const groupedByCase = evidenceLocker.reduce((acc, item) => { (acc[item.caseName] = acc[item.caseName] || []).push(item); return acc; }, {}); let pdfHtml = `

Legal Case Evidence Report

`; for (const caseName in groupedByCase) { pdfHtml += `

${caseName}

`; groupedByCase[caseName].forEach(item => { pdfHtml += ` `; }); pdfHtml += '
Name / ID Type Date Collected Description
${item.name || ''} ${item.type || ''} ${item.date || ''} ${item.description || ''}
'; } pdfContentArea.innerHTML = pdfHtml; pdfContentArea.classList.remove('hidden'); html2canvas(pdfContentArea, { scale: 2 }).then(canvas => { const imgData = canvas.toDataURL('image/png'); const pdf = new jsPDF({ orientation: 'p', unit: 'pt', format: 'a4' }); const pdfWidth = pdf.internal.pageSize.getWidth(); const imgProps = pdf.getImageProperties(imgData); const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width; pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight); pdf.save('Legal_Evidence_Report.pdf'); pdfContentArea.innerHTML = ''; pdfContentArea.classList.add('hidden'); }); }; // --- EVENT LISTENERS --- prevBtn.addEventListener('click', () => navigateTabs(-1)); nextBtn.addEventListener('click', () => navigateTabs(1)); tabButtons.forEach(button => button.addEventListener('click', () => showTab(parseInt(button.dataset.tab)))); saveEvidenceBtn.addEventListener('click', saveEvidence); clearFormBtn.addEventListener('click', clearForm); downloadPdfBtn.addEventListener('click', downloadPDF); dashboardView.addEventListener('click', (e) => { const target = e.target; if (target.classList.contains('edit-btn')) { editEvidence(target.dataset.id); } if (target.classList.contains('delete-btn')) { deleteEvidence(target.dataset.id); } }); // --- INITIALIZATION --- renderDashboard(); showTab(0); });
Scroll to Top