Посмотрел экспериментальный редактор, который сейчас активно разрабатывают в Obsidian.

Мне в свое время тоже нравился редактор Typora, правда недолго.

В самом начале разработки редактора для Axona я делал несколько прототипов. Один из них с таким же поведением как у Typora.

Вот такое:

Поигравшись еще раз убедился, что все же лучше или видеть всю разметку полностью или не видеть ее вовсе.

Примером первого подхода является Bear:

И это прекрасно.

Я решил двигаться по второму варианту - скрыть от пользователя разметку. Отчасти считая, что markdown не достоин такого внимания и его время постепенно уходит 😀, a отчасти - с целью упрощения работы в будущем со сложными компонентами.

Хотя для ввода некоторых блоков остаются markdown шорткаты. Например для ввода заголовков первого уровня можно использовать markdown определение: #<пробел>. Исключительно для удобства клавиатурного ввода.

В Axona есть еще и raw редактор, но это как доп опция. Использую его временно, пока основной редактор в процессе доработки.

С некоторых пор, мне нравиться рассматривать языки разметки как форматы сериализации документов. И с этой точки зрения pod6 особенно идеален - прежде всего за счет своей расширяемости.

Довольно большой промежуток времени потребовалось, чтобы сделать очень базовый редактор.

Все имеющиеся библиотеки редакторов ориентированы на markdown. Поэтому хорошо, что я приступил к редактору, имея под рукой проработанную блочную модель разметки. Это сэкономило кучу времени в реализации.

По ходу работы формирую представление о последующих версиях редактора. Из ближайших планов - установка связей.

Сделал простой текстовый поиск.

Прежде, чем приступить, посмотрел как реализован поиск в Obsidian и VSCode. Что в одном, что в другом случае в основе лежит простой регекс по содержимому файлов. А результаты поиска, например в Obsidian, ссылаются на смещение текста в файле.

Еще на этапе проектирования я ориентировался на блочную структуру документов, поэтому единицей индексирования сделал блок.

Каждый блок индексируется и отображается в результатах поиска. У каждого блока имеется свой идентификатор, что необходимо при связывании блоков между собой и позиционировании документа в случае переходов по ссылкам.

При реализации поиска немного отошел от ТЗ: перенес сайдбар результатов поиска в левую часть экрана. В правой части отображается карточка заметки.

Еще одной функциональной деталью в ТЗ было поведение графа при поиске.

Вот как это получилось сделать: при наведении мышкой на результат поиска - граф связей позиционируется на узле содержащим найденный текст. В видимую область включаются связи первого уровня.

При клике мышкой на результате поиска открывается заметка.

Чтобы начать пользоваться постоянно, подключил простенький редактор из другого своего проекта. Он автоматически распознает pod6 и markdown.

Возможно его оставлю как низкоуровневый редактор. Сейчас более важно закрыть основной функционал и по мере использования доводить до минимально работающего состояния все остальное.

Запуск редактора сделал по cmd-e.

Это первая заметка, созданная в Axona.

Сделал переход от экрана с графом связей и просмотром одного документа к экрану, на котором можно перемещаться по документам.

При этом кажется, что граф связей перекрывается документами и остается на месте, но на самом деле из соображений производительности я удаляю его совсем.

Во время перемещения между документами в самом начале реализации я заметил небольшой лаг при горизонтальном слайдинге.

При смене статуса документов из "перекрыт другим документом" на "полностью виден", происходила долгая перерисовка, которая приводила к неприятной задержке.

Несмотря на незначительный эффект, это была только верхушка айсберга.

Поскольку от перерисовки отказаться нельзя, то пришлось заняться оптимизацией логики и кэшированием результатов вычислений.