Редагування, блок за блоком
Редагування працює так само, як виправлення одруку у Вікіпедії: ви редагуєте абзац, на який дивитеся, а не велетенську textarea з цілою сторінкою всередині. У режимі редагування (npm run wiki) увійдіть, наведіть курсор на будь-який блок будь-якої нотатки — зокрема й на цей — і клацніть ✎.
§1.1Цикл
Відрендерений блок ховається, і на його місці розгортається редактор CodeMirror із Markdown-джерелом саме цього блока. Поки ви набираєте, нижче рендериться живий передперегляд — через діалект рушія плюс плагіни, які сайт передає в inkbrush({ markdown }), тобто той самий набір правил, який монтує конвеєр сторінки, тож передперегляд і сторінка не можуть розійтися. ⌘/Ctrl + Enter зберігає; Esc скасовує.
Frontmatter — теж блок: смуга таксономії вгорі кожної нотатки тут несе власний ✎, який відкриває YAML нотатки, — змініть статус чи дату, і шапка відрендериться наново з оновленого frontmatter.
§1.2Дві страхувальні сітки
Оптимістичне блокування. Кожен блок несе хеш джерела, з якого його вирізано. Якщо хтось інший тим часом змінив файл під вами, збереження відхиляється з конфліктом замість мовчки затерти чужу роботу — оновіть сторінку і спробуйте ще раз.
Заслона збірки. Перш ніж щось буде записано на диск, цілий файл проходить крізь Markdown-конвеєр сайту — діалект, контроль вмісту, власні плагіни сайту, а для .mdx і компілятор MDX. Збереження, яке зламало б сторінку, — непарне **, незакритий тег компонента, зіпсований вираз — відхиляється з точною помилкою, і файл на диску лишається неторканим. Повний перелік відмов контролю продемонстровано наприкінці демонстраційного стенда.
§1.3Куди йдуть збереження
Збереження записує Markdown-файл і, з увімкненим autocommit, стає git-комітом від імені користувача, який увійшов. Бази даних немає ніде: файли вмісту — єдине джерело істини, а git — довговічна історія. Дрібнозернистий поблоковий журнал, на якому працює історія редакцій, їде поверх.
Сам діалект — GFM із дружнім до CJK правилом виділення плюс контроль вмісту, що відкидає Markdown, який мовчки деформується, — визначено один раз у рушії, і його поділяють рендерер сторінок, передперегляд цього редактора та CLI check-content (п’ять перевірок). Одна граматика, три споживачі, нуль розбіжностей.