'use strict'; /* * Фикс: блок formula вставляет tex в HTML БЕЗ экранирования ($$...$$), поэтому * литеральные '<' / '>' в формуле браузер принимает за HTML-тег → KaTeX не рендерит. * Заменяем литеральные '<' → '\lt', '>' → '\gt' в tex всех formula-блоков курса 13 * (KaTeX их рендерит как отношения). Идемпотентно. dry по умолчанию, запись --apply. * node backend/scripts/fix_ctmath_formula_lt.js [--apply] */ const db = require('../src/db/db'); const APPLY = process.argv.includes('--apply'); const rows = db.prepare(`SELECT lb.id, lb.lesson_id, lb.data FROM lesson_blocks lb JOIN lessons l ON l.id=lb.lesson_id WHERE l.course_id=13 AND lb.type='formula'`).all(); const upd = db.prepare('UPDATE lesson_blocks SET data=? WHERE id=?'); let changed = 0; for (const r of rows) { let d; try { d = JSON.parse(r.data); } catch { continue; } if (!d.tex || !/[<>]/.test(d.tex)) continue; const before = d.tex; d.tex = d.tex.replace(//g, '\\gt '); changed++; console.log(`block ${r.id} (lesson ${r.lesson_id}):`); console.log(' было:', before); console.log(' стало:', d.tex); if (APPLY) upd.run(JSON.stringify(d), r.id); } console.log(`\n${APPLY ? 'Обновлено' : '(dry) к обновлению'}: ${changed} формул.`); if (!APPLY) console.log('Запись: --apply');