Улучшаем редактор заметок в Forestry

Forestry очень удобный сервис для статических сайтов, но вот редактор заметок у них получился какой-то уж очень спорный и неудобный. Пришлось искать решение, как сделать его лучше и оно нашлось.

Я уже писал, что использую генератор статических сайтов, а в качестве CMS — сервис Forestry. Сервис позволяет писать тексты в удобном редакторе через браузер, прямо как в WordPress, а потом самостоятельно отправляет изменения в git-репозиторий на GitHub, где всю остальную работу по публикации сайта делает CircleCI. На эту тему у меня уже есть заметка “Автоматизация блога на Hugo с помощью CircleCI”.

Forestry очень удобный сервис, но так как это стартап и всё в нём модно-молодежно, некоторые решения спорные и с ними порой не очень удобно работать, а вариантов настроить “как надо” пока нет. Чтобы вы понимали мою проблему, расскажу и покажу, как всё устроено сейчас.

Редактор содержимого Forestry до применения пользовательских стилей

Редактирование заметки — это 2 колонки, слева поля front matter, справа — содержимое заметки. С первого взгляда красиво, даже почти не к чему придраться, но у меня монитор с диагональю 27" и это почти телевизор в масштабе рабочего места. Даже если предположить, что я смотрю по центру экрана, хотя все мы знаем, что самая рабочая область экрана — это верхний левый угол, то писать основной текст заметки где-то далеко справа самое неудобное, что только можно было придумать.

Есть вариант шаблона, когда только поля по центру, но такие шаблоны для страниц, где всё содержимое исключительно во front matter, а у меня вроде как обычные заметки и написаны они в обычном синтаксисе Markdown.

Решение

Я бы и дальше страдал, если бы не внезапная мысль перед сном о том, что сервис то — обычное приложение в браузере, с HTML и CSS в основе. Значит, его легко исправить своими CSS-правилами. Помните, раньше были популярные оформлялки для Вконтакте и прочих пожирателей времени? Сейчас тот самый случай, когда их стоило бы применить. Это дешево и сердито, зато РАБОТАЕТ!

Для начала нам нужно расширение для браузера, которое сможет эти самые стили сохранить и применить к сайту. Я пользуюсь Google Chrome и выбрал одно из топа в каталоге дополнений — Stylus. Можете использовать его или выбрать подходящее для своего браузера, это особой роли не играет.

Затем нужно разобраться, как устроена страница редактора. Это тоже не проблема, открываем редактор и смотрим структуру страницы.

<div class="main-content">
	<div class="sc-cTjmhe fyLVgw">...</div>
	<div class="sc-imABML fEzRdo">
		<div class="sc-gkFcWv djIbwi">...</div>
		<div class="sc-hUfwpO eLbpNJ">...</div>
	</div>
</div>

Forestry — это модное нынче SPA-приложение, поэтому классы там генерируются кодом, который собирает компоненты воедино, а значит, зацепиться напрямую не получится. К счастью, в CSS есть другие механизмы, которые позволяют добраться до глубоко вложенных объектов, нужна только входная точка. В нашем случае, такой входной точкой будет блок с классом main-content

Внутри класса у нас два блока div, один для шапки с кнопкой “Save”, второй содержит в себе два других блока div, где левый (первый) — поля front matter, правый (второй) — редактор. Очевидно, что самое простое решение это поменять их местами. Для этого нет ничего лучше, чем старый (уже) добрый flex.

Реализация

Для начала нужно добавить новый проект в Stylus. Кликая на иконку дополнения выбираем пункт Manage и попадаем в редактор стилей. Проект нужно как-нибудь назвать, но если кликать иконку на странице заметки в Forestry, Stylus сам сохранит проект с доменом в качестве имени . Важно так же исправить внизу страницы маску для “Applise to” как на картинке, чтобы стили применялись для всех страниц, а не только той, что была в момент нажатия на кнопку. Ну и добавить сами стили.

Интерфейс дополнения Stylus

Первым делом добавим немного flex нашим блокам и заодно поменяем местами вложенные блоки с помощью свойства flex-direction: row-reverse;.

.main-content > div:last-child {
    display: flex;
    flex-wrap: wrap;
    flex-direction: row-reverse;
}

Но ничего не поменялось. Все из-за того, что у вложенных блоков указано свойство position: fixed;, которое заставляет их игнорировать все правила по автоматическому размещению во flex-блоках. Нужно его сбросить на значение по умолчанию.

.main-content > div:last-child > div {
    position: initial;
}

И можно добавить немного визуальной красоты, убрав лишний отступ слева и сделав сам редактор шире 700px, которых объективно маловато, особенно для заметок с фото.

.main-content > div:last-child > div:last-child {
    left: 0; 
    width: calc(60% - 0px);
}

.main-content > div:last-child > div:last-child .ProseMirror {
    width: 100%;
}

Итог

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

Редактор содержимого Forestry после применения пользовательских стилей

Конечно, заголовок и другие поля тоже важны, но они пишутся чаше всего один раз, а вот над текстом заметки приходится корпеть приличное количество времени и важно, чтобы работать с ним было удобно. Теперь — удобно, а значит, смогу писать полезные заметки чаще и регулярнее. :)

P.S. Этой заметкой решил начать новую рубрику в блоге — #ТехноВторник. Планирую писать каждый вторник технические заметки на тему разработки и технологий, подписывайтесь на RSS и следите за обновлениями.

На чытанне спатрэбілася 4 хвіліны Нататка змяшчае 752 словы

Сябры, акрамя блога, я амаль што рэгулярна пішу адмысловую рассылку пра праграмванне і тэхналогіі, дзе раз на двы тыдні збіраю самыя цікавыя навіны тэхналогій і раблю агляд цікавых інструментаў, якія мне трапіліся. Таму хутчэй падпісвайцеся, каб не прапусціць штосці цікавае наступным разам!