// Simple, targeted refactor: replace common inline styles with CSS utility classes // Only handles exact pattern matches and only when the tag doesn't already have a class attribute. // This is a safe, incremental step. Run this script from the project root: `node frontend/scripts/refactor_inline_styles.js` const fs = require('fs'); const path = require('path'); function walkVueFiles(dir) { const res = []; const items = fs.readdirSync(dir, { withFileTypes: true }); for (const it of items) { const full = path.join(dir, it.name); if (it.isDirectory()) { res.push(...walkVueFiles(full)); } else if (it.isFile() && full.endsWith('.vue')) { res.push(full); } } return res; } const projectRoot = path.resolve(__dirname, '..'); const targetDir = path.resolve(projectRoot, 'src', 'views'); const files = walkVueFiles(targetDir); const replacements = [ { find: 'style="margin-bottom:16px"', replace: 'class="mb-16"' }, { find: "style='margin-bottom:16px'", replace: "class='mb-16'" }, { find: 'style="margin-top:20px"', replace: 'class="mt-20"' }, { find: "style='margin-top:20px'", replace: "class='mt-20'" }, { find: 'style="display:flex;align-items:center;gap:12px"', replace: 'class="flex-gap"' }, { find: "style='display:flex;align-items:center;gap:12px'", replace: "class='flex-gap'" }, { find: 'style="font-size:16px;font-weight:bold"', replace: 'class="page-title"' }, { find: "style='font-size:16px;font-weight:bold'", replace: "class='page-title'" }, { find: 'style="color: var(--el-color-primary); cursor: pointer; text-decoration: none;"', replace: 'class="link-text"' }, { find: "style='color: var(--el-color-primary); cursor: pointer; text-decoration: none;'", replace: "class='link-text'" }, ]; let totalReplacements = 0; let totalFilesLaunched = 0; for (const file of files) { let content = fs.readFileSync(file, 'utf8'); let modified = false; const lines = content.split(/\r?\n/); for (let i = 0; i < lines.length; i++) { let line = lines[i]; // Quick skip if line already has a class attribute if (line.includes('style=') && !line.includes('class=')) { for (const r of replacements) { if (line.includes(r.find)) { line = line.replace(r.find, r.replace); modified = true; totalReplacements++; } } } lines[i] = line; } if (modified) { totalFilesLaunched++; fs.writeFileSync(file, lines.join('\n'), 'utf8'); } } console.log(`refactor_inline_styles.js: applied ${totalReplacements} replacements across ${totalFilesLaunched} files.`);