git.iko.soy/typeable/pandoc
on master help sign in
HTML writer: add task-list class to ul if all elements are task list items.

This will allow styling unordered task lists in a way that omits the bullet.

commit79a10388daedf959c23dfef108a035d436108657 authorJohn MacFarlane <jgm@berkeley.edu> dateThu 5 Dec 2019, 09:32 (7 years ago) parent4489283
2 files changed+14−5
src/Text/Pandoc/Writers/HTML.hs+10−1 test/command/tasklist.md+4−4
src/Text/Pandoc/Writers/HTML.hs+10−1
@@ -370,6 +370,13 @@ defList :: PandocMonad m
370370 => WriterOptions -> [Html] -> StateT WriterState m Html
371371defList opts items = toList H.dl opts (items ++ [nl opts])
372372
373+isTaskListItem :: [Block] -> Bool
374+isTaskListItem (Plain (Str "☐":Space:_):_) = True
375+isTaskListItem (Plain (Str "☒":Space:_):_) = True
376+isTaskListItem (Para (Str "☐":Space:_):_) = True
377+isTaskListItem (Para (Str "☒":Space:_):_) = True
378+isTaskListItem _ = False
379+
373380listItemToHtml :: PandocMonad m
374381 => WriterOptions -> [Block] -> StateT WriterState m Html
375382listItemToHtml opts bls
@@ -819,7 +826,9 @@ blockToHtml opts (Header level attr@(_,classes,_) lst) = do
819826 _ -> H.p ! A.class_ "heading" $ contents'
820827blockToHtml opts (BulletList lst) = do
821828 contents <- mapM (listItemToHtml opts) lst
822− unordList opts contents
829+ let isTaskList = not (null lst) && all isTaskListItem lst
830+ (if isTaskList then (! A.class_ "task-list") else id) <$>
831+ unordList opts contents
823832blockToHtml opts (OrderedList (startnum, numstyle, _) lst) = do
824833 contents <- mapM (listItemToHtml opts) lst
825834 html5 <- gets stHtml5
test/command/tasklist.md+4−4
@@ -5,7 +5,7 @@ tests adapted from <https://github.github.com/gfm/#task-list-items-extension->
55- [ ] foo
66- [x] bar
77^D
8−<ul>
8+<ul class="task-list">
99<li><input type="checkbox" disabled="" />
1010foo</li>
1111<li><input type="checkbox" disabled="" checked="" />
@@ -21,9 +21,9 @@ bar</li>
2121 - [x] baz
2222- [ ] bim
2323^D
24−<ul>
24+<ul class="task-list">
2525<li><input type="checkbox" disabled="" checked="" />
26−foo<ul>
26+foo<ul class="task-list">
2727<li><input type="checkbox" disabled="" />
2828bar</li>
2929<li><input type="checkbox" disabled="" checked="" />
@@ -73,7 +73,7 @@ ordered unchecked</li>
7373ordered checked</li>
7474</ol>
7575<p>paragraph</p>
76−<ul>
76+<ul class="task-list">
7777<li><p><input type="checkbox" disabled="" />
7878list item with a</p><p>second paragraph</p></li>
7979<li><p><input type="checkbox" disabled="" checked="" />