mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2025-05-14 07:04:45 -04:00
Add clickable todos (#283)
This commit is contained in:
parent
0f30803529
commit
528e7e5904
9 changed files with 117 additions and 43 deletions
|
@ -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']}`}
|
||||
/>
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue