From 0cbc9a589fdbe450499c3a49f0697cc8f45135bd Mon Sep 17 00:00:00 2001 From: vvzvlad Date: Wed, 17 Jun 2026 23:31:19 +0300 Subject: [PATCH] docs(embedding): add docs for arbitrary HTML/CSS/JS embed plan Adds a draft design document outlining the challenges, security considerations, and possible implementation approaches for inserting arbitrary HTML, CSS, and JavaScript into Docmost pages. Includes analysis of ProseMirror schema limitations, node creation steps, and isolation model options. --- docs/arbitrary-html-embed-plan.md | 95 +++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 docs/arbitrary-html-embed-plan.md diff --git a/docs/arbitrary-html-embed-plan.md b/docs/arbitrary-html-embed-plan.md new file mode 100644 index 00000000..e02466a8 --- /dev/null +++ b/docs/arbitrary-html-embed-plan.md @@ -0,0 +1,95 @@ +# Вставка произвольного HTML/CSS/JS в страницы — анализ и подходы + +> Статус: **черновик / обсуждение**. Решение по модели изоляции ещё не принято — см. раздел «Развилка». +> Исходный кейс: нужно вставлять трекер (счётчик аналитики) на вики-страницы. + +## 1. Почему «из коробки» произвольный HTML вставить нельзя + +Контент страницы в Docmost хранится не как HTML, а как **ProseMirror JSON** (документ TipTap, синхронизируется через Yjs). Любой путь, которым контент попадает в страницу — ручной ввод, вставка из буфера (paste), импорт Markdown/HTML — проходит парсинг строго по схеме редактора: + +`apps/server/src/common/helpers/prosemirror/html/generateJSON.ts:45` + +```ts +PMDOMParser.fromSchema(schema).parse(doc.body, options) +``` + +`PMDOMParser.fromSchema` оставляет только те теги, для которых в схеме есть нода/марк с правилом `parseHTML` (`p`, `h1–h6`, списки, `blockquote`, `code`/`pre`, `a`, `strong`/`em`, таблицы, картинки, callout и т.п.). Всё остальное — `
`, `