#!/usr/bin/env node /** * Fix CSP violations in HTML files * Replaces inline styles with CSS utility classes */ const fs = require('fs'); const path = require('path'); const fixes = [ // researcher.html { file: 'public/researcher.html', replacements: [ { from: 'class="hover:underline transition-colors" style="color: var(--tractatus-core-end);"', to: 'class="hover:underline transition-colors text-tractatus-link"' }, { from: 'class="border-l-4 border border-gray-200 rounded-lg mb-4" style="border-left-color: #8b5cf6;"', to: 'class="border-l-4 border border-gray-200 rounded-lg mb-4 border-l-service-validator"' }, { from: 'class="border-l-4 border border-gray-200 rounded-lg" style="border-left-color: #8b5cf6;"', to: 'class="border-l-4 border border-gray-200 rounded-lg border-l-service-validator"' } ] }, // case-submission.html { file: 'public/case-submission.html', replacements: [ { from: 'style="border-left-color: var(--tractatus-core-end);"', to: 'class="border-l-tractatus"' }, { from: 'style="color: var(--tractatus-core-end);"', to: 'class="text-tractatus-link"' }, { from: 'style="background: linear-gradient(135deg, #0ea5e9 0%, #0284c7 100%);"', to: 'class="bg-gradient-cyan-blue"' } ] } ]; let totalFixed = 0; fixes.forEach(({ file, replacements }) => { const filePath = path.join(__dirname, '..', file); console.log(`\nProcessing ${file}...`); if (!fs.existsSync(filePath)) { console.log(` ✗ File not found`); return; } let content = fs.readFileSync(filePath, 'utf8'); let fileFixed = 0; replacements.forEach(({ from, to }) => { const occurrences = (content.match(new RegExp(from.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g')) || []).length; if (occurrences > 0) { content = content.split(from).join(to); fileFixed += occurrences; console.log(` ✓ Fixed ${occurrences} occurrence(s)`); } }); if (fileFixed > 0) { fs.writeFileSync(filePath, content); totalFixed += fileFixed; console.log(` ✓ Saved ${file} (${fileFixed} fixes)`); } else { console.log(` • No violations found`); } }); console.log(`\n✓ Total fixes applied: ${totalFixed}\n`);