#!/usr/bin/env node /** * Add setProgressBarWidths helper and calls */ const fs = require('fs'); const path = require('path'); const helper = ` // Set widths/heights from data attributes (CSP compliance) function setProgressBarWidths(container) { const elements = container.querySelectorAll('[data-width], [data-height]'); elements.forEach(el => { if (el.dataset.width) el.style.width = el.dataset.width + '%'; if (el.dataset.height) el.style.height = el.dataset.height + '%'; }); }`; // audit-analytics.js const auditFile = path.join(__dirname, '../public/js/admin/audit-analytics.js'); let auditContent = fs.readFileSync(auditFile, 'utf8'); if (!auditContent.includes('setProgressBarWidths')) { // Add helper before last }) const lastBrace = auditContent.lastIndexOf('})();'); auditContent = auditContent.slice(0, lastBrace) + helper + '\n' + auditContent.slice(lastBrace); // Add calls after innerHTML assignments with progress bars auditContent = auditContent.replace( /chartEl\.innerHTML = html;/g, 'chartEl.innerHTML = html; setProgressBarWidths(chartEl);' ); auditContent = auditContent.replace( /chartEl\.innerHTML = `
\$\{html\}<\/div>`;/g, 'chartEl.innerHTML = `
${html}
`; setProgressBarWidths(chartEl);' ); fs.writeFileSync(auditFile, auditContent); console.log('āœ“ Fixed audit-analytics.js'); } // rule-manager.js const ruleManagerFile = path.join(__dirname, '../public/js/admin/rule-manager.js'); let ruleManagerContent = fs.readFileSync(ruleManagerFile, 'utf8'); if (!ruleManagerContent.includes('setProgressBarWidths')) { // Add helper before last }) const lastBrace = ruleManagerContent.lastIndexOf('})();'); ruleManagerContent = ruleManagerContent.slice(0, lastBrace) + helper + '\n' + ruleManagerContent.slice(lastBrace); // Add calls after container.innerHTML assignments ruleManagerContent = ruleManagerContent.replace( /(container\.innerHTML = `[\s\S]*?`;)/g, '$1 setProgressBarWidths(container);' ); fs.writeFileSync(ruleManagerFile, ruleManagerContent); console.log('āœ“ Fixed rule-manager.js'); } // rule-editor.js const ruleEditorFile = path.join(__dirname, '../public/js/admin/rule-editor.js'); let ruleEditorContent = fs.readFileSync(ruleEditorFile, 'utf8'); if (!ruleEditorContent.includes('setProgressBarWidths')) { // Add helper before last }) const lastBrace = ruleEditorContent.lastIndexOf('})();'); ruleEditorContent = ruleEditorContent.slice(0, lastBrace) + helper + '\n' + ruleEditorContent.slice(lastBrace); // Add calls after modal content is set ruleEditorContent = ruleEditorContent.replace( /(modalContent\.innerHTML = `[\s\S]*?`;)(\s+\/\/ Show modal)/g, '$1 setProgressBarWidths(modalContent);$2' ); fs.writeFileSync(ruleEditorFile, ruleEditorContent); console.log('āœ“ Fixed rule-editor.js'); } console.log('\nāœ… Progress bar helpers added\n');