Add "Parts-Editor"

2026-04-12 20:46:41 +00:00
parent 185fbceaa9
commit 0e922c1d6d

69
Parts-Editor.-.md Normal file

@@ -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 ссылки `<a href="...">` | `<a href="...">текст</a>` |
| `html-text` | HTML span/p с текстом | `<span style="...">СКАЧАЙТЕ ПРИЛОЖЕНИЕ</span>` |
Для каждого найденного поля создаётся объект:
```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 (если файлы кэшируются)
- На деве файлы на хосте → сразу доступны