Data Encryption Compliance Checker
Describe Your System & Paste Policy Text
Select Regulations to Check Against
Compliance Analysis Report
No regulations selected. Go back to select regulations and run the analysis.
`; return; } let reportHtml = ``;
reportHtml += `
`;
this.dom.reportArea.innerHTML = reportHtml;
},
createComplianceItem(label, isCompliant) {
const icon = isCompliant
? ``
: ``;
const textClass = isCompliant ? 'text-gray-800' : 'text-gray-800 font-semibold';
return `
Encryption Compliance Report for: ${this.systemName || 'Unnamed System'}
`; this.selectedRegulations.forEach(key => { const reg = this.regulations[key]; reportHtml += `${reg.title}
`; reg.checks.forEach(check => { const isCompliant = check.keyword.test(this.policyText); reportHtml += this.createComplianceItem(check.label, isCompliant); }); }); reportHtml += `
${icon}
${label}: ${isCompliant ? 'Mentioned' : 'Not Mentioned'}
`;
},
// --- ACTIONS ---
toggleRegulation(key, isChecked) {
if (isChecked) {
this.selectedRegulations.add(key);
} else {
this.selectedRegulations.delete(key);
}
},
// --- NAVIGATION ---
changeTab(tabIndex) {
if (tabIndex > this.currentTab) {
if (this.currentTab === 0 && this.policyText.trim() === '') {
alert("Please paste your policy or system text to continue.");
return;
}
if (this.currentTab === 1 && this.selectedRegulations.size === 0) {
alert("Please select at least one regulation to check against.");
return;
}
}
if (tabIndex === 2) {
this.renderReport();
}
this.dom.tabButtons[this.currentTab].classList.remove('active');
this.dom.tabContents[this.currentTab].classList.remove('active');
this.currentTab = tabIndex;
this.dom.tabButtons[this.currentTab].classList.add('active');
this.dom.tabContents[this.currentTab].classList.add('active');
this.updateNavButtons();
},
navigateTabs(direction) {
const newTab = direction === 'next' ? this.currentTab + 1 : this.currentTab - 1;
if (newTab >= 0 && newTab < this.dom.tabButtons.length) {
this.changeTab(newTab);
}
},
updateNavButtons() {
this.dom.prevBtn.style.visibility = this.currentTab === 0 ? 'hidden' : 'visible';
this.dom.nextBtn.textContent = this.currentTab === this.dom.tabButtons.length - 2 ? 'Analyze' : 'Next';
this.dom.nextBtn.style.visibility = this.currentTab === this.dom.tabButtons.length - 1 ? 'hidden' : 'visible';
},
// --- PDF GENERATION ---
generatePdf() {
const { jsPDF } = window.jspdf;
const content = document.getElementById('pdf-content');
if (!content) return;
html2canvas(content, { scale: 2 }).then(canvas => {
const imgData = canvas.toDataURL('image/png');
const pdf = new jsPDF({ orientation: 'portrait', unit: 'px', format: 'a4' });
const pdfWidth = pdf.internal.pageSize.getWidth();
const imgProps= pdf.getImageProperties(imgData);
const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;
pdf.addImage(imgData, 'PNG', 20, 20, pdfWidth - 40, pdfHeight - 40);
pdf.save('Encryption-Compliance-Report.pdf');
});
},
};
window.app = {
changeTab: app.changeTab.bind(app),
navigateTabs: app.navigateTabs.bind(app),
toggleRegulation: app.toggleRegulation.bind(app),
};
app.init();
});
