Files
Learn_System/backend/scripts/fix_ctmath_formula_lt.js
T
Maxim Dolgolyov 4b23d768f2 fix(ct-math): литеральные угловые скобки в формулах уроков ломали KaTeX
Блок formula вставляет tex в HTML без экранирования, поэтому литеральная
"меньше"-скобка (напр. в "0 le r lt d") принималась браузером за HTML-тег и
формула не рендерилась (показывался сырой $$...$$). Заменено на \lt и \gt
(KaTeX рендерит их как отношения).

- seed_ctmath_lessons_rest.js: исправлены 4 формулы в исходнике (числа,
  модуль, показ/лог равносильности, производная-монотонность).
- fix_ctmath_formula_lt.js: фикс уже залитых блоков курса 13 (dry/--apply).
  Флешкарты не затронуты (mathHtmlFC через textContent экранирует сам).

Запись (UPDATE 4 блоков) запускает пользователь.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 12:05:47 +03:00

30 lines
1.5 KiB
JavaScript

'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, '\\lt ').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');