Add "Quality"
69
Quality.md
Normal file
69
Quality.md
Normal file
@@ -0,0 +1,69 @@
|
||||
# Проверки качества
|
||||
|
||||
## Спеллчекер
|
||||
|
||||
### Как работает
|
||||
1. Кнопка **АБВ** → `toggleSpellCheck()`
|
||||
2. `extractTextFromHtml(previewHtml)` — извлекает текст из HTML:
|
||||
- DOM-парсинг через DOMParser
|
||||
- Убирает `<style>`, `<script>`
|
||||
- Убирает шаблонные теги: `{%...%}`, `{{...}}`, `@{...}`, `${...}`
|
||||
- Дедуплицирует повторяющиеся фрагменты
|
||||
- Нормализует пробелы
|
||||
- Макс 9500 символов
|
||||
3. POST к Яндекс.Спеллеру через прокси `/speller/services/spellservice.json/checkText`
|
||||
- Параметры: `text`, `lang=ru,en`, `options=518` (все проверки)
|
||||
4. `injectSpellMarks(previewHtml, errors)` — инжектирует метки:
|
||||
- Ищет ошибочные слова в HTML (только в текстовых нодах, не в тегах)
|
||||
- Оборачивает в `<mark class="va-spell" title="подсказка">слово</mark>`
|
||||
- Wavy red underline (CSS)
|
||||
- Tooltip: "Повтор слова" / "→ предложения" / "Неизвестное слово"
|
||||
5. Результат показывается в iframe вместо обычного превью
|
||||
|
||||
### Библиотека spellcheck.js
|
||||
- `extractTextFromHtml(html)` — DOM-based, handles encoding
|
||||
- `injectSpellMarks(html, errors)` — position-aware injection
|
||||
|
||||
## Проверка ссылок
|
||||
|
||||
### Как работает
|
||||
1. Кнопка **🔗** → `runLinkCheck()`
|
||||
2. `extractLinksFromHtml(previewHtml)` — DOM-парсинг, извлекает все `href` и `src`
|
||||
3. POST `/api/check-links` с массивом URL (макс 50)
|
||||
4. Backend проверяет каждый URL:
|
||||
- HEAD запрос с таймаутом 10 сек
|
||||
- `isPublicUrl()` фильтр (без localhost/private IP)
|
||||
- Возвращает: `{url, status, ok, redirected, finalUrl, error}`
|
||||
5. Результаты показываются в панели:
|
||||
- ✅ Зелёный — 2xx
|
||||
- 🔄 Жёлтый — редирект
|
||||
- ❌ Красный — ошибка / 4xx / 5xx
|
||||
|
||||
## Типограф
|
||||
|
||||
### Как работает
|
||||
1. Кнопка **Типограф** или кнопка **Т** на отдельном поле
|
||||
2. SOAP-запрос к Art. Lebedev Типограф через прокси `/typograf/`
|
||||
3. `sanitizeTypograf(text)` — очистка перед отправкой:
|
||||
- Убирает `<br>`, `<p>` теги
|
||||
- Нормализует пробелы
|
||||
4. Результат: правильные кавычки «», тире —, неразрывные пробелы
|
||||
5. `applyNowrapSpaces(block, field)` — после типографа, заменяет пробел после 1-3-буквенных слов на ` `
|
||||
|
||||
### typografAll()
|
||||
Применяет типограф ко ВСЕМ текстовым полям всех блоков за один проход.
|
||||
|
||||
## Форматирование текста
|
||||
|
||||
Кнопки в шапке каждого блока:
|
||||
|
||||
| Кнопка | Функция | Результат в Pug |
|
||||
|--------|---------|----------------|
|
||||
| **Ж** | `wrapBold()` | `<span style="font-weight:700">текст</span>` |
|
||||
| **•** | `insertBullet()` | `• ` перед текстом |
|
||||
| **br** | `insertBr()` | `<br>` в позиции курсора |
|
||||
| **A** | Цвет текста | `<span style="color:#hex">текст</span>` |
|
||||
| **URL** | `insertLink()` | `<a href="url">текст</a>` |
|
||||
| **👁** | Превью блока | Показывает рендер одного блока |
|
||||
|
||||
Shift+Enter в textarea → вставляет `<br>` вместо переноса строки.
|
||||
Reference in New Issue
Block a user