summaryrefslogtreecommitdiffstats
path: root/helpers/content_renderer.go
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2016-09-09 13:08:20 +0200
committerGitHub <noreply@github.com>2016-09-09 13:08:20 +0200
commiteaf2f9bce5537a1dcbdb32dc62b9827e5a99585b (patch)
tree1ba3b7e24d8e5a68575e324be1a28471b050f48b /helpers/content_renderer.go
parent76bf2dcdd23f4cedb425f66503916a58698986dd (diff)
Add TODO list support for Blackfriday
* Add CSS class to TODO list and list items * Add a flag to turn task list support off Fixes #2269
Diffstat (limited to 'helpers/content_renderer.go')
-rw-r--r--helpers/content_renderer.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/helpers/content_renderer.go b/helpers/content_renderer.go
index 02a9e9c83..6bd2212e1 100644
--- a/helpers/content_renderer.go
+++ b/helpers/content_renderer.go
@@ -72,6 +72,44 @@ func (renderer *HugoHTMLRenderer) Image(out *bytes.Buffer, link []byte, title []
}
}
+// ListItem adds task list support to the Blackfriday renderer.
+func (renderer *HugoHTMLRenderer) ListItem(out *bytes.Buffer, text []byte, flags int) {
+ if !renderer.Config.TaskLists {
+ renderer.Renderer.ListItem(out, text, flags)
+ return
+ }
+
+ switch {
+ case bytes.HasPrefix(text, []byte("[ ] ")):
+ text = append([]byte(`<input type="checkbox" disabled class="task-list-item">`), text[3:]...)
+
+ case bytes.HasPrefix(text, []byte("[x] ")) || bytes.HasPrefix(text, []byte("[X] ")):
+ text = append([]byte(`<input type="checkbox" checked disabled class="task-list-item">`), text[3:]...)
+ }
+
+ renderer.Renderer.ListItem(out, text, flags)
+}
+
+// List adds task list support to the Blackfriday renderer.
+func (renderer *HugoHTMLRenderer) List(out *bytes.Buffer, text func() bool, flags int) {
+ if !renderer.Config.TaskLists {
+ renderer.Renderer.List(out, text, flags)
+ return
+ }
+ marker := out.Len()
+ renderer.Renderer.List(out, text, flags)
+ if out.Len() > marker {
+ list := out.Bytes()[marker:]
+ if bytes.Contains(list, []byte("task-list-item")) {
+ // Rewrite the buffer from the marker
+ out.Truncate(marker)
+ // May be either dl, ul or ol
+ list := append(list[:4], append([]byte(` class="task-list"`), list[4:]...)...)
+ out.Write(list)
+ }
+ }
+}
+
// HugoMmarkHTMLRenderer wraps a mmark.Renderer, typically a mmark.html
// Enabling Hugo to customise the rendering experience
type HugoMmarkHTMLRenderer struct {