diff --git a/browser/components/MarkdownPreview.js b/browser/components/MarkdownPreview.js index 71e1761d..ecaff1b8 100755 --- a/browser/components/MarkdownPreview.js +++ b/browser/components/MarkdownPreview.js @@ -360,10 +360,6 @@ export default class MarkdownPreview extends React.Component { } this.refs.root.contentWindow.document.body.innerHTML = markdown.render(value) - _.forEach(this.refs.root.contentWindow.document.querySelectorAll('.taskListItem'), (el) => { - el.parentNode.parentNode.style.listStyleType = 'none' - }) - _.forEach(this.refs.root.contentWindow.document.querySelectorAll('a'), (el) => { this.fixDecodedURI(el) el.addEventListener('click', this.anchorClickHandler) diff --git a/browser/components/markdown.styl b/browser/components/markdown.styl index 8b8d80c1..d1d306e9 100644 --- a/browser/components/markdown.styl +++ b/browser/components/markdown.styl @@ -178,6 +178,8 @@ ul margin-bottom 1em li display list-item + &.taskListItem + list-style none p margin 0 &>li>ul, &>li>ol diff --git a/browser/lib/markdown.js b/browser/lib/markdown.js index 79383ca9..c3510f89 100644 --- a/browser/lib/markdown.js +++ b/browser/lib/markdown.js @@ -3,6 +3,7 @@ import emoji from 'markdown-it-emoji' import math from '@rokt33r/markdown-it-math' import _ from 'lodash' import ConfigManager from 'browser/main/lib/ConfigManager' +import {lastFindInArray} from './utils' // FIXME We should not depend on global variable. const katex = window.katex @@ -125,6 +126,13 @@ md.block.ruler.at('paragraph', function (state, startLine/*, endLine */) { if (state.parentType === 'list') { const match = content.match(/^\[( |x)\] ?(.+)/i) if (match) { + const liToken = lastFindInArray(state.tokens, token => token.type === 'list_item_open') + if (liToken) { + if (!liToken.attrs) { + liToken.attrs = [] + } + liToken.attrs.push(['class', 'taskListItem']) + } content = `` } } diff --git a/browser/lib/utils.js b/browser/lib/utils.js new file mode 100644 index 00000000..be66f2ec --- /dev/null +++ b/browser/lib/utils.js @@ -0,0 +1,11 @@ +export function lastFindInArray (array, callback) { + for (let i = array.length - 1; i >= 0; --i) { + if (callback(array[i], i, array)) { + return array[i] + } + } +} + +export default { + lastFindInArray +}