@tiptap/extension-task-item 2.0.0-beta.28 → 2.0.0-beta.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tiptap-extension-task-item.cjs.js +10 -7
- package/dist/tiptap-extension-task-item.cjs.js.map +1 -1
- package/dist/tiptap-extension-task-item.esm.js +10 -7
- package/dist/tiptap-extension-task-item.esm.js.map +1 -1
- package/dist/tiptap-extension-task-item.umd.js +10 -7
- package/dist/tiptap-extension-task-item.umd.js.map +1 -1
- package/package.json +2 -2
- package/src/task-item.ts +11 -7
|
@@ -32,7 +32,7 @@ const TaskItem = core.Node.create({
|
|
|
32
32
|
parseHTML() {
|
|
33
33
|
return [
|
|
34
34
|
{
|
|
35
|
-
tag:
|
|
35
|
+
tag: `li[data-type="${this.name}"]`,
|
|
36
36
|
priority: 51,
|
|
37
37
|
},
|
|
38
38
|
];
|
|
@@ -40,7 +40,7 @@ const TaskItem = core.Node.create({
|
|
|
40
40
|
renderHTML({ node, HTMLAttributes }) {
|
|
41
41
|
return [
|
|
42
42
|
'li',
|
|
43
|
-
core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, { 'data-type':
|
|
43
|
+
core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, { 'data-type': this.name }),
|
|
44
44
|
[
|
|
45
45
|
'label',
|
|
46
46
|
[
|
|
@@ -62,15 +62,15 @@ const TaskItem = core.Node.create({
|
|
|
62
62
|
},
|
|
63
63
|
addKeyboardShortcuts() {
|
|
64
64
|
const shortcuts = {
|
|
65
|
-
Enter: () => this.editor.commands.splitListItem(
|
|
66
|
-
'Shift-Tab': () => this.editor.commands.liftListItem(
|
|
65
|
+
Enter: () => this.editor.commands.splitListItem(this.name),
|
|
66
|
+
'Shift-Tab': () => this.editor.commands.liftListItem(this.name),
|
|
67
67
|
};
|
|
68
68
|
if (!this.options.nested) {
|
|
69
69
|
return shortcuts;
|
|
70
70
|
}
|
|
71
71
|
return {
|
|
72
72
|
...shortcuts,
|
|
73
|
-
Tab: () => this.editor.commands.sinkListItem(
|
|
73
|
+
Tab: () => this.editor.commands.sinkListItem(this.name),
|
|
74
74
|
};
|
|
75
75
|
},
|
|
76
76
|
addNodeView() {
|
|
@@ -93,9 +93,12 @@ const TaskItem = core.Node.create({
|
|
|
93
93
|
if (editor.isEditable && typeof getPos === 'function') {
|
|
94
94
|
editor
|
|
95
95
|
.chain()
|
|
96
|
-
.focus()
|
|
96
|
+
.focus(undefined, { scrollIntoView: false })
|
|
97
97
|
.command(({ tr }) => {
|
|
98
|
-
|
|
98
|
+
const position = getPos();
|
|
99
|
+
const currentNode = tr.doc.nodeAt(position);
|
|
100
|
+
tr.setNodeMarkup(position, undefined, {
|
|
101
|
+
...currentNode === null || currentNode === void 0 ? void 0 : currentNode.attrs,
|
|
99
102
|
checked,
|
|
100
103
|
});
|
|
101
104
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tiptap-extension-task-item.cjs.js","sources":["../src/task-item.ts"],"sourcesContent":["import { Node, mergeAttributes, wrappingInputRule } from '@tiptap/core'\n\nexport interface TaskItemOptions {\n nested: boolean,\n HTMLAttributes: Record<string, any>,\n}\n\nexport const inputRegex = /^\\s*(\\[([ |x])\\])\\s$/\n\nexport const TaskItem = Node.create<TaskItemOptions>({\n name: 'taskItem',\n\n addOptions() {\n return {\n nested: false,\n HTMLAttributes: {},\n }\n },\n\n content() {\n return this.options.nested ? 'paragraph block*' : 'paragraph+'\n },\n\n defining: true,\n\n addAttributes() {\n return {\n checked: {\n default: false,\n keepOnSplit: false,\n parseHTML: element => element.getAttribute('data-checked') === 'true',\n renderHTML: attributes => ({\n 'data-checked': attributes.checked,\n }),\n },\n }\n },\n\n parseHTML() {\n return [\n {\n tag:
|
|
1
|
+
{"version":3,"file":"tiptap-extension-task-item.cjs.js","sources":["../src/task-item.ts"],"sourcesContent":["import { Node, mergeAttributes, wrappingInputRule } from '@tiptap/core'\n\nexport interface TaskItemOptions {\n nested: boolean,\n HTMLAttributes: Record<string, any>,\n}\n\nexport const inputRegex = /^\\s*(\\[([ |x])\\])\\s$/\n\nexport const TaskItem = Node.create<TaskItemOptions>({\n name: 'taskItem',\n\n addOptions() {\n return {\n nested: false,\n HTMLAttributes: {},\n }\n },\n\n content() {\n return this.options.nested ? 'paragraph block*' : 'paragraph+'\n },\n\n defining: true,\n\n addAttributes() {\n return {\n checked: {\n default: false,\n keepOnSplit: false,\n parseHTML: element => element.getAttribute('data-checked') === 'true',\n renderHTML: attributes => ({\n 'data-checked': attributes.checked,\n }),\n },\n }\n },\n\n parseHTML() {\n return [\n {\n tag: `li[data-type=\"${this.name}\"]`,\n priority: 51,\n },\n ]\n },\n\n renderHTML({ node, HTMLAttributes }) {\n return [\n 'li',\n mergeAttributes(\n this.options.HTMLAttributes,\n HTMLAttributes,\n { 'data-type': this.name },\n ),\n [\n 'label',\n [\n 'input',\n {\n type: 'checkbox',\n checked: node.attrs.checked\n ? 'checked'\n : null,\n },\n ],\n ['span'],\n ],\n [\n 'div',\n 0,\n ],\n ]\n },\n\n addKeyboardShortcuts() {\n const shortcuts = {\n Enter: () => this.editor.commands.splitListItem(this.name),\n 'Shift-Tab': () => this.editor.commands.liftListItem(this.name),\n }\n\n if (!this.options.nested) {\n return shortcuts\n }\n\n return {\n ...shortcuts,\n Tab: () => this.editor.commands.sinkListItem(this.name),\n }\n },\n\n addNodeView() {\n return ({\n node,\n HTMLAttributes,\n getPos,\n editor,\n }) => {\n const listItem = document.createElement('li')\n const checkboxWrapper = document.createElement('label')\n const checkboxStyler = document.createElement('span')\n const checkbox = document.createElement('input')\n const content = document.createElement('div')\n\n checkboxWrapper.contentEditable = 'false'\n checkbox.type = 'checkbox'\n checkbox.addEventListener('change', event => {\n // if the editor isn’t editable\n // we have to undo the latest change\n if (!editor.isEditable) {\n checkbox.checked = !checkbox.checked\n\n return\n }\n\n const { checked } = event.target as any\n\n if (editor.isEditable && typeof getPos === 'function') {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .command(({ tr }) => {\n const position = getPos()\n const currentNode = tr.doc.nodeAt(position)\n\n tr.setNodeMarkup(position, undefined, {\n ...currentNode?.attrs,\n checked,\n })\n\n return true\n })\n .run()\n }\n })\n\n Object.entries(this.options.HTMLAttributes).forEach(([key, value]) => {\n listItem.setAttribute(key, value)\n })\n\n listItem.dataset.checked = node.attrs.checked\n if (node.attrs.checked) {\n checkbox.setAttribute('checked', 'checked')\n }\n\n checkboxWrapper.append(checkbox, checkboxStyler)\n listItem.append(checkboxWrapper, content)\n\n Object\n .entries(HTMLAttributes)\n .forEach(([key, value]) => {\n listItem.setAttribute(key, value)\n })\n\n return {\n dom: listItem,\n contentDOM: content,\n update: updatedNode => {\n if (updatedNode.type !== this.type) {\n return false\n }\n\n listItem.dataset.checked = updatedNode.attrs.checked\n if (updatedNode.attrs.checked) {\n checkbox.setAttribute('checked', 'checked')\n } else {\n checkbox.removeAttribute('checked')\n }\n\n return true\n },\n }\n }\n },\n\n addInputRules() {\n return [\n wrappingInputRule({\n find: inputRegex,\n type: this.type,\n getAttributes: match => ({\n checked: match[match.length - 1] === 'x',\n }),\n }),\n ]\n },\n})\n"],"names":["Node","mergeAttributes","wrappingInputRule"],"mappings":"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"}
|
|
@@ -28,7 +28,7 @@ const TaskItem = Node.create({
|
|
|
28
28
|
parseHTML() {
|
|
29
29
|
return [
|
|
30
30
|
{
|
|
31
|
-
tag:
|
|
31
|
+
tag: `li[data-type="${this.name}"]`,
|
|
32
32
|
priority: 51,
|
|
33
33
|
},
|
|
34
34
|
];
|
|
@@ -36,7 +36,7 @@ const TaskItem = Node.create({
|
|
|
36
36
|
renderHTML({ node, HTMLAttributes }) {
|
|
37
37
|
return [
|
|
38
38
|
'li',
|
|
39
|
-
mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, { 'data-type':
|
|
39
|
+
mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, { 'data-type': this.name }),
|
|
40
40
|
[
|
|
41
41
|
'label',
|
|
42
42
|
[
|
|
@@ -58,15 +58,15 @@ const TaskItem = Node.create({
|
|
|
58
58
|
},
|
|
59
59
|
addKeyboardShortcuts() {
|
|
60
60
|
const shortcuts = {
|
|
61
|
-
Enter: () => this.editor.commands.splitListItem(
|
|
62
|
-
'Shift-Tab': () => this.editor.commands.liftListItem(
|
|
61
|
+
Enter: () => this.editor.commands.splitListItem(this.name),
|
|
62
|
+
'Shift-Tab': () => this.editor.commands.liftListItem(this.name),
|
|
63
63
|
};
|
|
64
64
|
if (!this.options.nested) {
|
|
65
65
|
return shortcuts;
|
|
66
66
|
}
|
|
67
67
|
return {
|
|
68
68
|
...shortcuts,
|
|
69
|
-
Tab: () => this.editor.commands.sinkListItem(
|
|
69
|
+
Tab: () => this.editor.commands.sinkListItem(this.name),
|
|
70
70
|
};
|
|
71
71
|
},
|
|
72
72
|
addNodeView() {
|
|
@@ -89,9 +89,12 @@ const TaskItem = Node.create({
|
|
|
89
89
|
if (editor.isEditable && typeof getPos === 'function') {
|
|
90
90
|
editor
|
|
91
91
|
.chain()
|
|
92
|
-
.focus()
|
|
92
|
+
.focus(undefined, { scrollIntoView: false })
|
|
93
93
|
.command(({ tr }) => {
|
|
94
|
-
|
|
94
|
+
const position = getPos();
|
|
95
|
+
const currentNode = tr.doc.nodeAt(position);
|
|
96
|
+
tr.setNodeMarkup(position, undefined, {
|
|
97
|
+
...currentNode === null || currentNode === void 0 ? void 0 : currentNode.attrs,
|
|
95
98
|
checked,
|
|
96
99
|
});
|
|
97
100
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tiptap-extension-task-item.esm.js","sources":["../src/task-item.ts"],"sourcesContent":["import { Node, mergeAttributes, wrappingInputRule } from '@tiptap/core'\n\nexport interface TaskItemOptions {\n nested: boolean,\n HTMLAttributes: Record<string, any>,\n}\n\nexport const inputRegex = /^\\s*(\\[([ |x])\\])\\s$/\n\nexport const TaskItem = Node.create<TaskItemOptions>({\n name: 'taskItem',\n\n addOptions() {\n return {\n nested: false,\n HTMLAttributes: {},\n }\n },\n\n content() {\n return this.options.nested ? 'paragraph block*' : 'paragraph+'\n },\n\n defining: true,\n\n addAttributes() {\n return {\n checked: {\n default: false,\n keepOnSplit: false,\n parseHTML: element => element.getAttribute('data-checked') === 'true',\n renderHTML: attributes => ({\n 'data-checked': attributes.checked,\n }),\n },\n }\n },\n\n parseHTML() {\n return [\n {\n tag:
|
|
1
|
+
{"version":3,"file":"tiptap-extension-task-item.esm.js","sources":["../src/task-item.ts"],"sourcesContent":["import { Node, mergeAttributes, wrappingInputRule } from '@tiptap/core'\n\nexport interface TaskItemOptions {\n nested: boolean,\n HTMLAttributes: Record<string, any>,\n}\n\nexport const inputRegex = /^\\s*(\\[([ |x])\\])\\s$/\n\nexport const TaskItem = Node.create<TaskItemOptions>({\n name: 'taskItem',\n\n addOptions() {\n return {\n nested: false,\n HTMLAttributes: {},\n }\n },\n\n content() {\n return this.options.nested ? 'paragraph block*' : 'paragraph+'\n },\n\n defining: true,\n\n addAttributes() {\n return {\n checked: {\n default: false,\n keepOnSplit: false,\n parseHTML: element => element.getAttribute('data-checked') === 'true',\n renderHTML: attributes => ({\n 'data-checked': attributes.checked,\n }),\n },\n }\n },\n\n parseHTML() {\n return [\n {\n tag: `li[data-type=\"${this.name}\"]`,\n priority: 51,\n },\n ]\n },\n\n renderHTML({ node, HTMLAttributes }) {\n return [\n 'li',\n mergeAttributes(\n this.options.HTMLAttributes,\n HTMLAttributes,\n { 'data-type': this.name },\n ),\n [\n 'label',\n [\n 'input',\n {\n type: 'checkbox',\n checked: node.attrs.checked\n ? 'checked'\n : null,\n },\n ],\n ['span'],\n ],\n [\n 'div',\n 0,\n ],\n ]\n },\n\n addKeyboardShortcuts() {\n const shortcuts = {\n Enter: () => this.editor.commands.splitListItem(this.name),\n 'Shift-Tab': () => this.editor.commands.liftListItem(this.name),\n }\n\n if (!this.options.nested) {\n return shortcuts\n }\n\n return {\n ...shortcuts,\n Tab: () => this.editor.commands.sinkListItem(this.name),\n }\n },\n\n addNodeView() {\n return ({\n node,\n HTMLAttributes,\n getPos,\n editor,\n }) => {\n const listItem = document.createElement('li')\n const checkboxWrapper = document.createElement('label')\n const checkboxStyler = document.createElement('span')\n const checkbox = document.createElement('input')\n const content = document.createElement('div')\n\n checkboxWrapper.contentEditable = 'false'\n checkbox.type = 'checkbox'\n checkbox.addEventListener('change', event => {\n // if the editor isn’t editable\n // we have to undo the latest change\n if (!editor.isEditable) {\n checkbox.checked = !checkbox.checked\n\n return\n }\n\n const { checked } = event.target as any\n\n if (editor.isEditable && typeof getPos === 'function') {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .command(({ tr }) => {\n const position = getPos()\n const currentNode = tr.doc.nodeAt(position)\n\n tr.setNodeMarkup(position, undefined, {\n ...currentNode?.attrs,\n checked,\n })\n\n return true\n })\n .run()\n }\n })\n\n Object.entries(this.options.HTMLAttributes).forEach(([key, value]) => {\n listItem.setAttribute(key, value)\n })\n\n listItem.dataset.checked = node.attrs.checked\n if (node.attrs.checked) {\n checkbox.setAttribute('checked', 'checked')\n }\n\n checkboxWrapper.append(checkbox, checkboxStyler)\n listItem.append(checkboxWrapper, content)\n\n Object\n .entries(HTMLAttributes)\n .forEach(([key, value]) => {\n listItem.setAttribute(key, value)\n })\n\n return {\n dom: listItem,\n contentDOM: content,\n update: updatedNode => {\n if (updatedNode.type !== this.type) {\n return false\n }\n\n listItem.dataset.checked = updatedNode.attrs.checked\n if (updatedNode.attrs.checked) {\n checkbox.setAttribute('checked', 'checked')\n } else {\n checkbox.removeAttribute('checked')\n }\n\n return true\n },\n }\n }\n },\n\n addInputRules() {\n return [\n wrappingInputRule({\n find: inputRegex,\n type: this.type,\n getAttributes: match => ({\n checked: match[match.length - 1] === 'x',\n }),\n }),\n ]\n },\n})\n"],"names":[],"mappings":"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"}
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
parseHTML() {
|
|
33
33
|
return [
|
|
34
34
|
{
|
|
35
|
-
tag:
|
|
35
|
+
tag: `li[data-type="${this.name}"]`,
|
|
36
36
|
priority: 51,
|
|
37
37
|
},
|
|
38
38
|
];
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
renderHTML({ node, HTMLAttributes }) {
|
|
41
41
|
return [
|
|
42
42
|
'li',
|
|
43
|
-
core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, { 'data-type':
|
|
43
|
+
core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, { 'data-type': this.name }),
|
|
44
44
|
[
|
|
45
45
|
'label',
|
|
46
46
|
[
|
|
@@ -62,15 +62,15 @@
|
|
|
62
62
|
},
|
|
63
63
|
addKeyboardShortcuts() {
|
|
64
64
|
const shortcuts = {
|
|
65
|
-
Enter: () => this.editor.commands.splitListItem(
|
|
66
|
-
'Shift-Tab': () => this.editor.commands.liftListItem(
|
|
65
|
+
Enter: () => this.editor.commands.splitListItem(this.name),
|
|
66
|
+
'Shift-Tab': () => this.editor.commands.liftListItem(this.name),
|
|
67
67
|
};
|
|
68
68
|
if (!this.options.nested) {
|
|
69
69
|
return shortcuts;
|
|
70
70
|
}
|
|
71
71
|
return {
|
|
72
72
|
...shortcuts,
|
|
73
|
-
Tab: () => this.editor.commands.sinkListItem(
|
|
73
|
+
Tab: () => this.editor.commands.sinkListItem(this.name),
|
|
74
74
|
};
|
|
75
75
|
},
|
|
76
76
|
addNodeView() {
|
|
@@ -93,9 +93,12 @@
|
|
|
93
93
|
if (editor.isEditable && typeof getPos === 'function') {
|
|
94
94
|
editor
|
|
95
95
|
.chain()
|
|
96
|
-
.focus()
|
|
96
|
+
.focus(undefined, { scrollIntoView: false })
|
|
97
97
|
.command(({ tr }) => {
|
|
98
|
-
|
|
98
|
+
const position = getPos();
|
|
99
|
+
const currentNode = tr.doc.nodeAt(position);
|
|
100
|
+
tr.setNodeMarkup(position, undefined, {
|
|
101
|
+
...currentNode === null || currentNode === void 0 ? void 0 : currentNode.attrs,
|
|
99
102
|
checked,
|
|
100
103
|
});
|
|
101
104
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tiptap-extension-task-item.umd.js","sources":["../src/task-item.ts"],"sourcesContent":["import { Node, mergeAttributes, wrappingInputRule } from '@tiptap/core'\n\nexport interface TaskItemOptions {\n nested: boolean,\n HTMLAttributes: Record<string, any>,\n}\n\nexport const inputRegex = /^\\s*(\\[([ |x])\\])\\s$/\n\nexport const TaskItem = Node.create<TaskItemOptions>({\n name: 'taskItem',\n\n addOptions() {\n return {\n nested: false,\n HTMLAttributes: {},\n }\n },\n\n content() {\n return this.options.nested ? 'paragraph block*' : 'paragraph+'\n },\n\n defining: true,\n\n addAttributes() {\n return {\n checked: {\n default: false,\n keepOnSplit: false,\n parseHTML: element => element.getAttribute('data-checked') === 'true',\n renderHTML: attributes => ({\n 'data-checked': attributes.checked,\n }),\n },\n }\n },\n\n parseHTML() {\n return [\n {\n tag:
|
|
1
|
+
{"version":3,"file":"tiptap-extension-task-item.umd.js","sources":["../src/task-item.ts"],"sourcesContent":["import { Node, mergeAttributes, wrappingInputRule } from '@tiptap/core'\n\nexport interface TaskItemOptions {\n nested: boolean,\n HTMLAttributes: Record<string, any>,\n}\n\nexport const inputRegex = /^\\s*(\\[([ |x])\\])\\s$/\n\nexport const TaskItem = Node.create<TaskItemOptions>({\n name: 'taskItem',\n\n addOptions() {\n return {\n nested: false,\n HTMLAttributes: {},\n }\n },\n\n content() {\n return this.options.nested ? 'paragraph block*' : 'paragraph+'\n },\n\n defining: true,\n\n addAttributes() {\n return {\n checked: {\n default: false,\n keepOnSplit: false,\n parseHTML: element => element.getAttribute('data-checked') === 'true',\n renderHTML: attributes => ({\n 'data-checked': attributes.checked,\n }),\n },\n }\n },\n\n parseHTML() {\n return [\n {\n tag: `li[data-type=\"${this.name}\"]`,\n priority: 51,\n },\n ]\n },\n\n renderHTML({ node, HTMLAttributes }) {\n return [\n 'li',\n mergeAttributes(\n this.options.HTMLAttributes,\n HTMLAttributes,\n { 'data-type': this.name },\n ),\n [\n 'label',\n [\n 'input',\n {\n type: 'checkbox',\n checked: node.attrs.checked\n ? 'checked'\n : null,\n },\n ],\n ['span'],\n ],\n [\n 'div',\n 0,\n ],\n ]\n },\n\n addKeyboardShortcuts() {\n const shortcuts = {\n Enter: () => this.editor.commands.splitListItem(this.name),\n 'Shift-Tab': () => this.editor.commands.liftListItem(this.name),\n }\n\n if (!this.options.nested) {\n return shortcuts\n }\n\n return {\n ...shortcuts,\n Tab: () => this.editor.commands.sinkListItem(this.name),\n }\n },\n\n addNodeView() {\n return ({\n node,\n HTMLAttributes,\n getPos,\n editor,\n }) => {\n const listItem = document.createElement('li')\n const checkboxWrapper = document.createElement('label')\n const checkboxStyler = document.createElement('span')\n const checkbox = document.createElement('input')\n const content = document.createElement('div')\n\n checkboxWrapper.contentEditable = 'false'\n checkbox.type = 'checkbox'\n checkbox.addEventListener('change', event => {\n // if the editor isn’t editable\n // we have to undo the latest change\n if (!editor.isEditable) {\n checkbox.checked = !checkbox.checked\n\n return\n }\n\n const { checked } = event.target as any\n\n if (editor.isEditable && typeof getPos === 'function') {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .command(({ tr }) => {\n const position = getPos()\n const currentNode = tr.doc.nodeAt(position)\n\n tr.setNodeMarkup(position, undefined, {\n ...currentNode?.attrs,\n checked,\n })\n\n return true\n })\n .run()\n }\n })\n\n Object.entries(this.options.HTMLAttributes).forEach(([key, value]) => {\n listItem.setAttribute(key, value)\n })\n\n listItem.dataset.checked = node.attrs.checked\n if (node.attrs.checked) {\n checkbox.setAttribute('checked', 'checked')\n }\n\n checkboxWrapper.append(checkbox, checkboxStyler)\n listItem.append(checkboxWrapper, content)\n\n Object\n .entries(HTMLAttributes)\n .forEach(([key, value]) => {\n listItem.setAttribute(key, value)\n })\n\n return {\n dom: listItem,\n contentDOM: content,\n update: updatedNode => {\n if (updatedNode.type !== this.type) {\n return false\n }\n\n listItem.dataset.checked = updatedNode.attrs.checked\n if (updatedNode.attrs.checked) {\n checkbox.setAttribute('checked', 'checked')\n } else {\n checkbox.removeAttribute('checked')\n }\n\n return true\n },\n }\n }\n },\n\n addInputRules() {\n return [\n wrappingInputRule({\n find: inputRegex,\n type: this.type,\n getAttributes: match => ({\n checked: match[match.length - 1] === 'x',\n }),\n }),\n ]\n },\n})\n"],"names":["Node","mergeAttributes","wrappingInputRule"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tiptap/extension-task-item",
|
|
3
3
|
"description": "task item extension for tiptap",
|
|
4
|
-
"version": "2.0.0-beta.
|
|
4
|
+
"version": "2.0.0-beta.31",
|
|
5
5
|
"homepage": "https://tiptap.dev",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"tiptap",
|
|
@@ -28,5 +28,5 @@
|
|
|
28
28
|
"url": "https://github.com/ueberdosis/tiptap",
|
|
29
29
|
"directory": "packages/extension-task-item"
|
|
30
30
|
},
|
|
31
|
-
"gitHead": "
|
|
31
|
+
"gitHead": "75336740c0c6f19c8be2b8ad063a27f46c37c77f"
|
|
32
32
|
}
|
package/src/task-item.ts
CHANGED
|
@@ -39,7 +39,7 @@ export const TaskItem = Node.create<TaskItemOptions>({
|
|
|
39
39
|
parseHTML() {
|
|
40
40
|
return [
|
|
41
41
|
{
|
|
42
|
-
tag:
|
|
42
|
+
tag: `li[data-type="${this.name}"]`,
|
|
43
43
|
priority: 51,
|
|
44
44
|
},
|
|
45
45
|
]
|
|
@@ -51,7 +51,7 @@ export const TaskItem = Node.create<TaskItemOptions>({
|
|
|
51
51
|
mergeAttributes(
|
|
52
52
|
this.options.HTMLAttributes,
|
|
53
53
|
HTMLAttributes,
|
|
54
|
-
{ 'data-type':
|
|
54
|
+
{ 'data-type': this.name },
|
|
55
55
|
),
|
|
56
56
|
[
|
|
57
57
|
'label',
|
|
@@ -75,8 +75,8 @@ export const TaskItem = Node.create<TaskItemOptions>({
|
|
|
75
75
|
|
|
76
76
|
addKeyboardShortcuts() {
|
|
77
77
|
const shortcuts = {
|
|
78
|
-
Enter: () => this.editor.commands.splitListItem(
|
|
79
|
-
'Shift-Tab': () => this.editor.commands.liftListItem(
|
|
78
|
+
Enter: () => this.editor.commands.splitListItem(this.name),
|
|
79
|
+
'Shift-Tab': () => this.editor.commands.liftListItem(this.name),
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
if (!this.options.nested) {
|
|
@@ -85,7 +85,7 @@ export const TaskItem = Node.create<TaskItemOptions>({
|
|
|
85
85
|
|
|
86
86
|
return {
|
|
87
87
|
...shortcuts,
|
|
88
|
-
Tab: () => this.editor.commands.sinkListItem(
|
|
88
|
+
Tab: () => this.editor.commands.sinkListItem(this.name),
|
|
89
89
|
}
|
|
90
90
|
},
|
|
91
91
|
|
|
@@ -118,9 +118,13 @@ export const TaskItem = Node.create<TaskItemOptions>({
|
|
|
118
118
|
if (editor.isEditable && typeof getPos === 'function') {
|
|
119
119
|
editor
|
|
120
120
|
.chain()
|
|
121
|
-
.focus()
|
|
121
|
+
.focus(undefined, { scrollIntoView: false })
|
|
122
122
|
.command(({ tr }) => {
|
|
123
|
-
|
|
123
|
+
const position = getPos()
|
|
124
|
+
const currentNode = tr.doc.nodeAt(position)
|
|
125
|
+
|
|
126
|
+
tr.setNodeMarkup(position, undefined, {
|
|
127
|
+
...currentNode?.attrs,
|
|
124
128
|
checked,
|
|
125
129
|
})
|
|
126
130
|
|