Блокнот с иерархическими тегами и вкладывающимися записями
Всем здравия! Запрашиваю хабраэффект на ognivo.meФункциональная частьЭто это блокнот для прозы и инженерной мысли, личных записей и планов на жизнь. Записи можно отмечать множеством меток, и детализировать их (метки). Внутрь записи можно вкладывать новые записи, задачи и списки.Принцип Блокнот сделан так, чтобы соответствовать мыслительному процессу. Для этого он поддерживает операции конкретизации записи (углубление в мышлении) и обобщения. Каждая запись может быть связана со множеством меток (тегов) которые также можно уточнять и обобщать.Устройство записи Также записи сохраняются автоматически, все время. Можно ставить сколько хочешь меток, и углублять их пока не надоест.Вложенные записи Записи можно вкладывать друг в друга. Теоретически — сколько угодно глубоко. Не проверял дальше четвертого уровня, *смеюсь*.Отображение записей Есть два режима вывода записей: хронологический и древовидный. Можно отключать разные виды записей.Перспективы Доступны две дополнительные перспективы: — лес: отображение струтуры меток. Для меток с более чем шестью подкатегориями доступна навигация.— время: отображение временной привязки задачАрхитектурная / инженерная часть Клиент и сервер написаны на JS, общаются через JSON. MySQL используется как система хранения.Сервер NodeJS обернутый в Express + ORM + MySQL. ORM — это явно глупость, но ничего другого я пока не умею. Хочу перейти на декларативные функции данных, т.к. перегонять данные в классы, чтобы потом их перегнать в JSON — явный перебор.Клиент Клиент с самой первой версии писался как набор AMD модулей (за исключением совсем нулевой версии). Модули — это мана небесная, избавление от загрязнения пространства имен, инструмент распила кода, снимают стресс связанный с тем чтобы следить за подключением всех необходимых пакетов.Системные требования Все замечательно работает на последнем Хроме. Сафари, и другие браузеры основанные на webkit — хорошо.На счет остальных не стал заморачиваться с тестированием и отладкой. Никакой поддержки мобильных в силу ограниченных ресурсов.Кольцевые зависимости + Впрыск зависимостей Когда делали вложенные записи — появились кольцевые зависимости, что было решено установкой необходимых функций в отдельном модуле.Инициализация При загрузке страницы, после отрабатывания статики, первым делом грузится весь лес (множество деревьев) меток пользователя. Потом согласно текущему context-id грузятся соответствующие записи, связанные с этой меткой.Ajax подгрузка записей Перспективы «записи» и «время» по своему генерируют события об исчерпании доступных записей, в ответ на которые клиент делает проход по дереву меток, и находит информацию о записях с подходящей временной меткой. Набрав записи в заданном временном диапазоне, клиент запрашивает с сервера весь список. После ответа на клиенте происходит рендер.Респекты С первой версией фронтэнда помогал Виктор Орлов.Планы Блокнотом можно пользоваться, закрывать не буду. Записи платными делать не буду, весь контент принадлежит автору. Следующим этапом думаю сделать управление доступом к записям.Если это читает гений бизнеса — буду рад поделиться проектом, и идеями насчет таких функций за которые люди будут платить. Мне интересна только инженерная часть.P.S.: Статью буду обновлять следуя интересу читателей