4b23d768f2
Блок 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>
30 lines
1.5 KiB
JavaScript
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');
|