@brandup/ui-textbox 1.0.42 → 1.0.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -13
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -54,17 +54,17 @@ textbox.on(CHANGE_EVENT, (data: ChangeEventData) => {
|
|
|
54
54
|
| `data-allow-empty-strings` | Разрешает значение из одних пробелов |
|
|
55
55
|
| `data-readonly` | Альтернативный способ задать режим только для чтения |
|
|
56
56
|
| `data-format` | Включает форматирование текста (только для `type="text"`) |
|
|
57
|
-
| `data-format-tools` | Состав инструментов форматирования через пробел (по умолчанию все): `bold italic strike underline` |
|
|
57
|
+
| `data-format-tools` | Состав инструментов форматирования через пробел (по умолчанию все): `bold italic strike underline spoiler code` |
|
|
58
58
|
| `data-editor-actions` | Кнопки действий в панели через пробел (по умолчанию нет): `erase undo redo` |
|
|
59
|
+
| `data-blocks` | Типы блоков многострочного поля через пробел (по умолчанию все): `quote code`; пустое значение оставляет только обычный текст |
|
|
59
60
|
| `data-format-storage` | Формат хранения значения: `html` (по умолчанию) или `markdown` |
|
|
60
|
-
| `data-format-md
|
|
61
|
-
| `data-format-md-italic` | Markdown-маркер для курсива (по умолчанию `*`) |
|
|
62
|
-
| `data-format-md-strike` | Markdown-маркер для зачёркивания (по умолчанию `~~`) |
|
|
63
|
-
| `data-format-md-underline` | Markdown-маркер для подчёркивания (по умолчанию `++`) |
|
|
61
|
+
| `data-format-md-<tool>` | Markdown-маркер инструмента: `bold` — `**`, `italic` — `_`, `strike` — `~`, `underline` — `__`, `spoiler` — `\|\|`, `code` — `` ` `` |
|
|
64
62
|
|
|
65
63
|
## Форматирование текста
|
|
66
64
|
|
|
67
|
-
Атрибут `data-format` включает панель форматирования с инструментами: жирный, курсив, зачёркивание,
|
|
65
|
+
Атрибут `data-format` включает панель форматирования с инструментами: жирный, курсив, зачёркивание, подчёркивание, спойлер, моноширинный. Панель всплывает над контролом, пока он в фокусе (класс состояния `focused`). Работает поверх существующего `contenteditable`-редактора, поэтому доступно только для текстового ввода (`type="text"` и `<textarea>`).
|
|
66
|
+
|
|
67
|
+
Кнопка спойлера в панели временно скрыта (см. [`@brandup/ui-richeditor`](../brandup-ui-richeditor)): сам инструмент работает — значение разбирается, показывается и сохраняется.
|
|
68
68
|
|
|
69
69
|
```html
|
|
70
70
|
<!-- все инструменты, хранение в HTML -->
|
|
@@ -82,21 +82,32 @@ textbox.on(CHANGE_EVENT, (data: ChangeEventData) => {
|
|
|
82
82
|
|
|
83
83
|
### Состав инструментов — `data-format-tools`
|
|
84
84
|
|
|
85
|
-
Список через пробел из значений `bold`, `italic`, `strike`, `underline`. Неизвестные значения игнорируются. Если атрибут не задан — включаются все инструменты.
|
|
85
|
+
Список через пробел из значений `bold`, `italic`, `strike`, `underline`, `spoiler`, `code`. Неизвестные значения игнорируются. Если атрибут не задан — включаются все инструменты.
|
|
86
86
|
|
|
87
87
|
### Кнопки действий — `data-editor-actions`
|
|
88
88
|
|
|
89
|
-
Список через пробел из значений `erase` (очистить форматирование), `undo` (отменить), `redo` (повторить). В отличие от инструментов, действия подключаются явно: без атрибута кнопок действий нет. Они добавляются в панель после инструментов форматирования,
|
|
89
|
+
Список через пробел из значений `erase` (очистить форматирование), `undo` (отменить), `redo` (повторить). В отличие от инструментов, действия подключаются явно: без атрибута кнопок действий нет. Они добавляются в панель после инструментов форматирования, в один ряд с ними — всё это правка оформления, — и блокируются, когда действие недоступно (нечего отменять или очищать).
|
|
90
90
|
|
|
91
91
|
`erase` снимает все форматы с выделения, а без выделения — со слова под кареткой. Чтобы очистить всё поле, выделите текст целиком (`Ctrl+A`) и нажмите кнопку.
|
|
92
92
|
|
|
93
|
+
### Блоки — `data-blocks`
|
|
94
|
+
|
|
95
|
+
В многострочном поле (`<textarea>`) верхний уровень состоит из блоков. Обычный текст доступен всегда, цитата (`quote`) и блок кода (`code`) — тоже; набор ограничивают списком через пробел:
|
|
96
|
+
|
|
97
|
+
```html
|
|
98
|
+
<textarea data-content-script="textbox" data-format data-blocks="quote"></textarea>
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**Enter** внутри блока заканчивает его, **Shift+Enter** переносит строку внутри, **Backspace** в начале блока возвращает обычный текст. Разбор, хранение и правку блоков описывает [`@brandup/ui-richeditor`](../brandup-ui-richeditor).
|
|
102
|
+
|
|
93
103
|
### Применение формата
|
|
94
104
|
|
|
95
105
|
- Формат — **переключатель** (toggle): повторное применение к уже отформатированному тексту снимает его.
|
|
96
106
|
- Форматирование применяется **к слову целиком**: если курсор стоит внутри слова без выделения или выделена лишь его часть — формат охватывает всё слово. При выделении части нескольких слов каждая граница доводится до целого слова. Исходное выделение/каретка после применения сохраняются (слово не выделяется автоматически).
|
|
97
107
|
- **Режим набора**: если под кареткой нет слова (курсор между пробелами или поле пустое), кнопка/хоткей не форматируют текст, а включают «ожидающий» формат — он подсветится активным и применится к следующему введённому тексту. Режим сбрасывается при перемещении каретки, клике или потере фокуса.
|
|
98
108
|
- Кнопка инструмента подсвечивается (`active`), когда выделение целиком отформатировано этим инструментом или активен режим набора.
|
|
99
|
-
-
|
|
109
|
+
- Внутри моноширинного разметки нет: значение берёт оттуда голый текст, поэтому остальные инструменты там недоступны, а попавшее внутрь форматирование снимается.
|
|
110
|
+
- Реализация работает на стандартном Selection/Range API — без устаревшего `document.execCommand`, поэтому разметка всегда семантическая (`<b>`, `<i>`, `<s>`, `<u>`, `<spoiler>`, `<code>`) и предсказуема между браузерами.
|
|
100
111
|
|
|
101
112
|
### Хоткеи
|
|
102
113
|
|
|
@@ -108,8 +119,8 @@ textbox.on(CHANGE_EVENT, (data: ChangeEventData) => {
|
|
|
108
119
|
|
|
109
120
|
| Значение | Хранение | Поддерживаемые теги/маркеры |
|
|
110
121
|
| --- | --- | --- |
|
|
111
|
-
| `html` (по умолчанию) | Санитизированный HTML | `<b>`, `<i>`, `<s>`, `<u>`, переводы строк через `<br>` |
|
|
112
|
-
| `markdown` | Лёгкая разметка | `**жирный**`,
|
|
122
|
+
| `html` (по умолчанию) | Санитизированный HTML | `<b>`, `<i>`, `<s>`, `<u>`, `<spoiler>`, `<code>`, переводы строк через `<br>` |
|
|
123
|
+
| `markdown` | Лёгкая разметка | `**жирный**`, `_курсив_`, `~зачёркнутый~`, `__подчёркнутый__`, `\|\|спойлер\|\|`, `` `моноширинный` `` |
|
|
113
124
|
|
|
114
125
|
Маркеры для каждого инструмента настраиваются атрибутами `data-format-md-<tool>` (актуально только при `data-format-storage="markdown"`):
|
|
115
126
|
|
|
@@ -123,9 +134,11 @@ textbox.on(CHANGE_EVENT, (data: ChangeEventData) => {
|
|
|
123
134
|
></textarea>
|
|
124
135
|
```
|
|
125
136
|
|
|
126
|
-
При разборе маркеры применяются по убыванию длины, поэтому более длинный маркер (`__`)
|
|
137
|
+
При разборе маркеры применяются по убыванию длины, поэтому более длинный маркер (`__`) срабатывает раньше короткого-префикса (`_`). Маркеры разных инструментов должны различаться.
|
|
138
|
+
|
|
139
|
+
Разметку чужих диалектов редактор понимает наравне со своей и возвращает в значение такой же, какой она пришла: `*жирный*` из WhatsApp остаётся `*жирный*`, а настроенный маркер ставится только на то, что отформатировали в поле.
|
|
127
140
|
|
|
128
|
-
>
|
|
141
|
+
> Глубоко вложенные комбинации форматов (например, жирный внутри курсива) гарантированно сохраняются только в режиме `html`.
|
|
129
142
|
|
|
130
143
|
## API
|
|
131
144
|
|
|
@@ -154,6 +167,7 @@ textbox.on(CHANGE_EVENT, (data: ChangeEventData) => {
|
|
|
154
167
|
| `formatStorage` | `FormatStorage` | Формат хранения: `"html"` \| `"markdown"` |
|
|
155
168
|
| `formatTools` | `FormatTool[]` | Включённые инструменты форматирования |
|
|
156
169
|
| `formatMarkers` | `FormatMarkers` | Markdown-маркеры по инструментам (с учётом переопределений) |
|
|
170
|
+
| `editor` | `RichEditor` | Встроенный редактор: выделение, вставка текста, блоки |
|
|
157
171
|
|
|
158
172
|
### Событие textbox-change
|
|
159
173
|
|
package/package.json
CHANGED
|
@@ -24,15 +24,15 @@
|
|
|
24
24
|
"email": "it@brandup.online"
|
|
25
25
|
},
|
|
26
26
|
"license": "Apache-2.0",
|
|
27
|
-
"version": "1.0.
|
|
27
|
+
"version": "1.0.44",
|
|
28
28
|
"main": "source/index.ts",
|
|
29
29
|
"types": "source/index.ts",
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@brandup/ui": "^2.0.7",
|
|
32
32
|
"@brandup/ui-helpers": "^2.0.7",
|
|
33
|
-
"@brandup/ui-input": "^1.0.
|
|
34
|
-
"@brandup/ui-kit": "^1.0.
|
|
35
|
-
"@brandup/ui-richeditor": "^1.0.
|
|
33
|
+
"@brandup/ui-input": "^1.0.44",
|
|
34
|
+
"@brandup/ui-kit": "^1.0.44",
|
|
35
|
+
"@brandup/ui-richeditor": "^1.0.44"
|
|
36
36
|
},
|
|
37
37
|
"files": [
|
|
38
38
|
"source",
|