From 0e922c1d6dbe01e358dfc3606d072430b41f2b3e Mon Sep 17 00:00:00 2001 From: "s.zotov" Date: Sun, 12 Apr 2026 20:46:41 +0000 Subject: [PATCH] Add "Parts-Editor" --- Parts-Editor.-.md | 69 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 Parts-Editor.-.md diff --git a/Parts-Editor.-.md b/Parts-Editor.-.md new file mode 100644 index 0000000..e1434a4 --- /dev/null +++ b/Parts-Editor.-.md @@ -0,0 +1,69 @@ +# Редактор хедера / футера + +## Обзор + +Позволяет редактировать тексты кнопок, ссылок и HTML-блоков в pug-файлах header и footer — без ручного редактирования pug. + +## Расположение + +Настройки → вкладка "Хедер / Футер" + +## Как работает + +### 1. Выбор файла + +Dropdown показывает все gender paths из настроек: +- Хедер (Ж) — `./parts/header/header-woman` +- Хедер (М) — `./parts/header/header-man` +- Футер (Ж) — `./parts/footer/footer-woman` +- Футер (М) — `./parts/footer/footer-man` + +### 2. Загрузка файла + +`loadPartsEditorFile(filePath)`: +1. GET `/api/parts-file-read?path={filePath}` +2. Получает raw pug-содержимое +3. Парсит через `parsePugFields(content)` + +### 3. Парсинг полей + +`parsePugFields(content)` находит 4 типа полей: + +| Тип | Что ищет | Пример в Pug | +|-----|---------|-------------| +| `button` | `+buttonRounded(...)` | `+buttonRounded("KITON", "https://...", 275, 45, ...)` | +| `link` | `a(href="...")` с текстом | `a(href="tel:88003334929") 8 800 333-49-29` | +| `link` | HTML ссылки `` | `текст` | +| `html-text` | HTML span/p с текстом | `СКАЧАЙТЕ ПРИЛОЖЕНИЕ` | + +Для каждого найденного поля создаётся объект: +```javascript +{ + label: "KITON", // автоматически из текста + type: "button", // button | link | html-text + text: "KITON", // текст для редактирования + url: "https://...", // URL (для button и link) + lineIndex: 42, // номер строки в файле + _raw: "полная строка" // оригинальная строка для замены +} +``` + +### 4. Редактирование + +В UI показывается таблица: +- **Кнопки** — текст + URL +- **Ссылки** — текст + URL +- **Тексты** — только текст (может содержать HTML) + +### 5. Сохранение + +`savePartsEditorFile()`: +1. `applyFieldsToContent(rawContent, fields)` — заменяет значения в строках pug-файла +2. POST `/api/parts-file-write` — записывает файл + +### Важно + +- Файлы записываются в `email-gen/` volume +- На проде volume монтирован → изменения сохраняются +- Но для рендера нужен перезапуск email-gen-api (если файлы кэшируются) +- На деве файлы на хосте → сразу доступны