Когда смотришь на обилие CMS систем, то кажется, что не существует такой деятельности в сети, для которой не существовало бы сопутствующего Web-приложения. Для некоторых же областей количество приложений просто зашкаливает — для совместного редактирования документов (WIKI) их больше двух десятков. Выбирай и пользуйся. Наверняка что-нибудь хорошее найдешь.
Ну, в общем, у меня не получилось.
Причем запросы то у меня не очень и большие: нормальная история изменений, поддержка сторонних редакторов, простая установка, известный язык разметки, удобная расширяемость, отсутствие (да, именно отсутствие) wysiwyg, эффективный поиск. Конечно, хотелось бы еще возможности добавлять комментарии в коде в такой же разметке и интеграции с существующими системами, но это уже из области фантастики. Но даже мои скромные требования, как оказалось, ни одна из рассмотренных мной CMS не поддерживала. Более-менее хорошо себя показала связка Confluence+FishEye, но какая-то она уж очень монстрообразная для индивидуального использования. Кроме того, в Confluence убрали разметку в четвертой версии, что грустно.
В общем, пришлось браться за работу самому. С самого начала было понятно, что в одиночку разработку большой системы не потянуть, поэтому все надо делать очень просто и по максимуму использовать существующие технологии:
- Редактировать текст нужно в текстовом редакторе, а не в ущербной textarea в окошке браузера.
- База не нужна, хранить статьи можно и на файловой системе. Кроме того, открывать статьи в текстовом редакторе так проще.
- Для ведения истории, пользователей и тому подобного есть системы контроля версий. Например, git.
- Для дизайна сгодится и bootstrap.
- Файлы к статьям очень просто добавлять переписыванием в соответствующую директорию. Удобно и быстро. На сервер выкладывать push-ем.
- Искать очень удобно поиском по файлам в Total Commander (даже регулярные выражения поддерживаются).
- Язык разметки — какой-нибудь известный. Что-то наподобие Confluence/GWiki подойдет.
Что касается деталей реализации, то:
- Базовая технология — node.js (express.js). Модно, быстро, стильно. Один язык на клиенте и сервере. Кстати, избавляет от необходимости ставить отдельный Web-сервер.
- Движок разметки можно использовать на сервере и на клиенте (в том числе и минифицированную версию).
- В движке разметки разделены этапы разбора текста в объектную модель и формирование HTML из объектной модели.
- Создание плагинов очень простое — не сильно сложнее создания функции.
- Стабильность функциональности поддерживается тестами (на данный момент 111 штук), для статического анализа используется JSHint.
- Простой настраиваемый сервер отдающий файлы и конвертирующий разметку в HTML содержит примерно 220 строк (без учета движка разметки).
Я использую чуть более сложный сервер на своем сайте и простой сервер для ведения локальной документации. Локальная документация представляет собой *.ivy
файлы, раскиданные по разным директориям.
Простой сервер запускается примерно так:
cd c:pathtoprojectexamples
node simple-server.js --path=c: --plugin=code-plugin.js --plugin=html-plugin.js --template=simple-template.html
В корне диска лежит index.ivy
со ссылками на другие проекты. В них все — от рецептов, до проектной документации. На мой взгляд — очень удобно.
Если вы заинтересовались, то исходный код, примеры использования, ответы на вопросы, и инструкцию по установке можно найти в репозитории проекта на GitHub.
P.S. На КПДВ изображен плющ ирландский (Irish ivy). Пока логотипа у проекта нет, его функцию выполняет эта картинка из Википедии, так что в процессе написания статьи ни один копирайт, как я думаю, не пострадал.
Автор: Alex_At_Net