▞▚

AST//WRITER

v1.0

структурный WYSIWYG-редактор · блоки вместо HTML · JSON как источник истины

16блоков
177слов
1197символов
4498json, Б
2009 БД · −55%
rev 0000
editor — живой ввод выдели текст → тулбар · «+» слева → новый блок
💡
— Эдсгер Дейкстра
1.
2.
предпросмотр
CSHARP
public sealed record CalloutBlock : BlockNode, ITextBlock
{
public string Type { get; set; } = "info"; // info | warn | danger | success
public List<InlineNode> Inlines { get; set; } = new();
}
Изображение для демо

⚠️
16 blk

Документ как дерево, а не строка

Перед вами живой документ. Каждый абзац — типизированный узел дерева DocNode, а не мешок HTML-тегов. Слева от каждого блока — кнопка + для вставки нового.

💡 Информация
Источник истины — JSON. Откройте вкладку json справа: структура обновляется синхронно с каждым нажатием клавиши.

Inline-слой

Выделите фрагмент — появится тулбар: жирный / курсив / подчёркнутый / зачёркнутый / inline-код и ссылки .

Простота — предпосылка надёжности.

— Эдсгер Дейкстра

Блочные структуры

1. Enter делит блок надвое по позиции каретки
2. Backspace в начале строки склеивает с предыдущим
TAB / Shift+Enter — мягкий перенос внутри блока нумератора
CSHARP
public sealed record CalloutBlock : BlockNode, ITextBlock
{
public string Type { get; set; } = "info"; // info | warn | danger | success
public List<InlineNode> Inlines { get; set; } = new();
}
Изображение для демо
Изображение для демо
Строк 3
Колонок 3
Слой
Формат
Кто владеет
Редактирование
DOM (contenteditable)
JS — между рендерами
Модель
DocNode → BlockNode → InlineNode
.NET — источник истины
Хранение
JSON
БД / localStorage

Готово
Правая панель пересчитывается на каждый ввод — без перезагрузки и без JS-фреймворков.
⚠️ Внимание
Демо хранит документ в localStorage браузера. Кнопка «сбросить автосохранение» вернёт исходный документ.
route /text-editor-ast · модель: DocNode → BlockNode[] → InlineNode[] · рендер пользовательского текста — без MarkupString

[СВЯЗЬ] ВОССТАНОВЛЕНИЕ СВЯЗИ С СЕРВЕРОМ...

[ПОВТОР] ПОВТОРНОЕ ПОДКЛЮЧЕНИЕ НЕ УДАЛОСЬ... ПОПЫТКА ЧЕРЕЗ СЕК.

[ОШИБКА] НЕ УДАЛОСЬ ВОССТАНОВИТЬ СВЯЗЬ.
ПРОВЕРЬТЕ СЕТЬ ИЛИ ПЕРЕЗАГРОЗИТЕ СТРАНИЦУ.

[ПАУЗА] СЕССИЯ ПРИОСТАНОВЛЕНА СЕРВЕРОМ.

[ОШИБКА] НЕ УДАЛОСЬ ВОЗОБНОВИТЬ СЕССИЮ.
ТРЕБУЕТСЯ ПЕРЕЗАГРОЗКА.