chore(memory): снимок файлов памяти Claude в репозиторий для переноса
Копия пользовательской автопамяти (29 фактов + индекс MEMORY.md) в .claude/memory/, чтобы переносить между машинами через git. README.md — как восстановить в пользовательскую папку на другой машине. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
---
|
||||
name: reference_svg_drawer
|
||||
description: "Лёгкий векторный SVG-редактор (рисовалка) для уроков — API виджета, санитайзер, точки переиспользования"
|
||||
metadata:
|
||||
node_type: memory
|
||||
type: reference
|
||||
originSessionId: 60467058-b40e-4bd9-9f7f-d1e362e8039a
|
||||
---
|
||||
|
||||
SVG-рисовалка в редакторе уроков. Сделано 2026-06-03 (commit ef59023).
|
||||
|
||||
**Виджет:** `frontend/js/svg-draw.js` → `window.SvgDraw.mount(container, {svg, width, height, onChange})`
|
||||
→ `{getSVG(), destroy(), el}`. Vanilla, рендер в SVG-DOM (НЕ canvas, в отличие от whiteboard.js).
|
||||
Инструменты: перо (Catmull-Rom→bezier), линия, прямоугольник, эллипс, стрелка, текст,
|
||||
цвет/толщина/заливка, выбор (перемещение+Delete), undo/redo, очистка. Стили инжектятся сами.
|
||||
Координаты через `svg.getScreenCTM().inverse()`. viewBox по умолчанию 800×500.
|
||||
|
||||
**Санитайзер:** `frontend/js/svg-sanitize.js` — UMD (`window.SvgSanitize` + `module.exports`),
|
||||
`clean(str)`. Браузер → DOM-whitelist; node → консервативный regex. Whitelist тегов
|
||||
(svg,g,path,line,rect,circle,ellipse,polyline,polygon,text,tspan,defs,*Gradient,stop) и
|
||||
геометрия/стиль-атрибутов; режет script/foreignObject/style/image/a/use, on*=, href/xlink:href,
|
||||
javascript:. БЕЗ зависимостей. Бэкенд `lessonController.js` подключает его кросс-путём
|
||||
`require('../../../frontend/js/svg-sanitize.js')` — единый источник правды.
|
||||
|
||||
**Блок урока `svg-draw`** (хранение inline, переоткрывается для дорисовки):
|
||||
- `lessonController.js`: `svg-draw` в VALID_TYPES + `cleanSvg(data.svg)` при сохранении (defense-in-depth).
|
||||
- `lesson-editor.html`: палитра «Рисунок», BLOCK_DEFAULTS `{svg:'',caption:''}`, `renderBlockEditor`
|
||||
case (host `.svgdraw-host[data-bid]` + подпись), `mountSvgDrawEditors()` (монтаж/перемонтаж в
|
||||
renderBlocks, инстансы в `_svgDrawInst`), `renderPreviewBlock` case (санитизированный inline-svg).
|
||||
- `lesson.html`: `renderBlock` case svg-draw (санитизированный inline-svg, адаптивно `max-width:100%`).
|
||||
|
||||
**Переиспользование (заявлено):** тот же `SvgDraw`/`SvgSanitize` пригодны для картинок флешкарт и
|
||||
**фигур генератора задач** (см. [[reference_exam_textbook_links]] / обсуждение параметрического генератора).
|
||||
|
||||
**MVP-ограничения (на доработку):** select только move+delete (нет resize/rotate); нет слоёв/
|
||||
группировки, привязки к сетке, импорта картинки-подложки; текст однострочный; один размер холста.
|
||||
Reference in New Issue
Block a user