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