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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Основной экран содержит граф базы знаний и строку быстрого поиска. Этот экран готов насколько позволяет MVP.

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

Сделал поиск пока только по заголовкам документов.

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

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

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

Играясь с ранними прототипами такая идея не возникла.

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

Вполне очевидный и хорошо известный факт, но на этапе проектирования даже и мысли об этом не было.

Там где это будет возможно - буду стараться не прерывать этот поток.

💡Подумать над подсветкой ссылок при навигации с помощью клавиши Tab