Let me explain how Grip handles GitHub-style task lists by analyzing the test files and HTML output structure:
The input Markdown for nested task lists looks like this:
- [ ] a bigger project
- [x] first subtask #1234
- [ ] follow up subtask #4321
- [ ] final subtask cc @mention
- [x] a separate taskGrip generates specific HTML structure for these task lists, as shown in the test output:
<ul class="task-list">
<li class="task-list-item">
<input type="checkbox" class="task-list-item-checkbox" disabled> a bigger projectThe key elements of the HTML structure are:
- Task lists get the class
task-list - Each list item gets the class
task-list-item - Checkboxes are rendered as
inputelements with:- type="checkbox"
- class="task-list-item-checkbox"
- disabled attribute
- checked attribute for completed tasks
For nested lists, Grip maintains the hierarchy by:
<ul class="contains-task-list">
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox"> a bigger project
<ul class="contains-task-list">
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> first subtask #1234</li>
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox"> follow up subtask #4321</li>
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox"> final subtask cc @mention</li>
</ul>
</li>
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> a separate task</li>This shows that:
- The parent list contains the nested list within its
lielement - The nested list maintains all the same task list classes and structure
- Each level preserves the checkbox state (checked/unchecked)
- References like #1234 and @mention are properly linked in the HTML output
This implementation matches GitHub's own rendering of task lists, ensuring compatibility and consistent appearance when viewing markdown files either on GitHub or through Grip's local preview.