1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
import { TaskItem } from '@tiptap/extension-task-item';
import { PARSE_HTML_PRIORITY_HIGHEST } from '../constants';
export default TaskItem.extend({
addOptions() {
return {
...this.parent?.(),
nested: true,
HTMLAttributes: { dir: 'auto' },
};
},
addAttributes() {
return {
checked: {
default: false,
parseHTML: (element) => {
const checkbox = element.querySelector('input[type=checkbox].task-list-item-checkbox');
return checkbox?.checked;
},
renderHTML: (attributes) => attributes.checked && { 'data-checked': true },
keepOnSplit: false,
},
inapplicable: {
default: false,
parseHTML: (element) => {
const checkbox = element.querySelector('input[type=checkbox].task-list-item-checkbox');
return typeof checkbox?.dataset.inapplicable !== 'undefined';
},
renderHTML: (attributes) => attributes.inapplicable && { 'data-inapplicable': true },
keepOnSplit: false,
},
};
},
parseHTML() {
return [
{
tag: 'li.task-list-item',
priority: PARSE_HTML_PRIORITY_HIGHEST,
},
{
tag: 'li.task-list-item.inapplicable s',
skip: true,
priority: PARSE_HTML_PRIORITY_HIGHEST,
},
];
},
addNodeView() {
const nodeView = this.parent?.();
return ({ node, ...args }) => {
const nodeViewInstance = nodeView({ node, ...args });
if (node.attrs.inapplicable) {
nodeViewInstance.dom.querySelector('input[type=checkbox]').disabled = true;
}
return nodeViewInstance;
};
},
});
|