Add clickable todos (#283)

This commit is contained in:
Jakob Klepp 2020-09-02 13:44:13 +02:00 committed by GitHub
parent 0f30803529
commit 528e7e5904
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 117 additions and 43 deletions

View file

@ -0,0 +1,33 @@
import React, { ReactElement } from 'react'
import { DomElement } from 'domhandler'
import { ComponentReplacer, SubNodeConverter } from '../ComponentReplacer'
export class TaskListReplacer implements ComponentReplacer {
content: string
onTaskCheckedChange: (lineInMarkdown: number, checked: boolean) => void
constructor (content: string, onTaskCheckedChange: (i: number, checked: boolean) => void) {
this.content = content
this.onTaskCheckedChange = onTaskCheckedChange
}
handleCheckboxChange = (event: React.ChangeEvent<HTMLInputElement>): void => {
const lineNum = Number(event.currentTarget.dataset.line)
this.onTaskCheckedChange(lineNum, event.currentTarget.checked)
}
getReplacement (node: DomElement, index:number, subNodeConverter: SubNodeConverter): (ReactElement|undefined) {
if (node.attribs?.class === 'task-list-item-checkbox') {
return (
<input
className="task-list-item-checkbox"
type="checkbox"
checked={node.attribs.checked !== undefined}
onChange={this.handleCheckboxChange}
data-line={node.attribs['data-line']}
key={`task-list-item-checkbox${node.attribs['data-line']}`}
/>
)
}
}
}