Markdown-it — это мощная библиотека для парсинга Markdown в JavaScript, предоставляющая гибкие возможности расширения и настройки синтаксиса. Одной из востребованных функций является поддержка списков задач (task lists), которые позволяют создавать интерактивные или просто визуально структурированные контрольные списки.
Markdown по умолчанию не поддерживает нативный синтаксис списков задач. Однако Markdown-it позволяет расширять стандартные возможности через плагины. Наиболее часто используется плагин markdown-it-task-lists, который добавляет синтаксис:
- [ ] Задача без отметки
- [x] Выполненная задача
Каждый элемент списка начинается с - или *,
затем идёт пробел и конструкция [ ] для невыполненной
задачи или [x] для выполненной.
Для использования списков задач необходимо установить основной пакет и плагин:
npm install markdown-it markdown-it-task-lists
Затем подключение в коде JavaScript выглядит следующим образом:
const MarkdownIt = require('markdown-it');
const markdownItTaskLists = require('markdown-it-task-lists');
const md = new MarkdownIt()
.use(markdownItTaskLists, { enabled: true, label: true });
Параметры плагина:
enabled — включение функциональности плагина
(true/false).label — поддержка добавления HTML-атрибутов
<label> для чекбоксов, что позволяет использовать их
с формами.- или * с последующим пробелом.[ ] или [x]
сразу после пробела.- [ ] Главная задача
- [x] Подзадача выполнена
- [ ] Подзадача невыполнена
В HTML это преобразуется в:
<ul class="task-list">
<li class="task-list-item"><input type="checkbox" disabled> Главная задача
<ul>
<li class="task-list-item"><input type="checkbox" checked disabled> Подзадача выполнена</li>
<li class="task-list-item"><input type="checkbox" disabled> Подзадача невыполнена</li>
</ul>
</li>
</ul>
По умолчанию плагин добавляет disabled чекбоксы, чтобы предотвратить изменение состояния через обычный HTML. Для динамического управления можно переопределить рендеринг:
const md = new MarkdownIt()
.use(markdownItTaskLists, {
enabled: true,
label: true,
ulClass: 'custom-task-list',
liClass: 'custom-task-list-item'
});
ulClass и liClass позволяют задавать
CSS-классы для <ul> и <li>
соответственно, что упрощает кастомное оформление.disabled, если
планируется взаимодействие через JavaScript.Списки задач обычно оформляются через стили, чтобы визуально отличать выполненные и невыполненные элементы:
.custom-task-list {
list-style: none;
padding-left: 0;
}
.custom-task-list-item input[type="checkbox"] {
margin-right: 0.5em;
}
.custom-task-list-item input[type="checkbox"]:checked + span {
text-decoration: line-through;
color: gray;
}
HTML можно дополнить <span> для текста задачи,
если необходимо точное позиционирование стилизации.
Markdown-it корректно обрабатывает комбинированные списки, где подсписки могут содержать как задачи, так и обычные маркеры:
- [ ] Основная задача
- Обычный подпункт
- [x] Завершённая подзадача
При рендеринге такой список сохраняет вложенность
<ul> и <li>, автоматически
добавляя чекбоксы только к элементам с [ ] или
[x].
Если требуется интеграция в реактивные фреймворки, можно легко обрабатывать HTML-парсер, генерируемый Markdown-it, и связывать состояние чекбоксов с внутренним состоянием приложения. Такой подход обеспечивает полноценную функциональность контрольных списков в браузере или на сервере с Node.js.