Toggle current todo item with Mod-Enter

This commit is contained in:
Tom Moor
2023-10-31 22:10:55 -04:00
parent 4af45c68cc
commit a9ff0c245d
5 changed files with 45 additions and 2 deletions

View File

@@ -3,6 +3,13 @@ import { NodeType } from "prosemirror-model";
import { Command } from "prosemirror-state";
import isNodeActive from "../queries/isNodeActive";
/**
* Toggles the block type of the current selection between the given type and the toggle type.
*
* @param type The node type
* @param toggleType The toggle node type
* @returns A prosemirror command.
*/
export default function toggleBlockType(
type: NodeType,
toggleType: NodeType,

View File

@@ -0,0 +1,34 @@
import { Command } from "prosemirror-state";
import { findParentNode } from "@shared/editor/queries/findParentNode";
/**
* A prosemirror command to toggle the checkbox item at the current selection.
*
* @returns A prosemirror command.
*/
export default function toggleCheckboxItem(): Command {
return (state, dispatch) => {
const { empty } = state.selection;
// if the selection has anything in it then use standard behavior
if (!empty) {
return false;
}
// check we're in a matching node
const listItem = findParentNode(
(node) => node.type === state.schema.nodes.checkbox_item
)(state.selection);
if (!listItem) {
return false;
}
dispatch?.(
state.tr.setNodeMarkup(listItem.pos, undefined, {
checked: !listItem.node.attrs.checked,
})
);
return true;
};
}

View File

@@ -5,6 +5,7 @@ import {
sinkListItem,
liftListItem,
} from "prosemirror-schema-list";
import toggleCheckboxItem from "../commands/toggleCheckboxItem";
import { MarkdownSerializerState } from "../lib/markdown/serializer";
import checkboxRule from "../rules/checkboxes";
import Node from "./Node";
@@ -93,6 +94,7 @@ export default class CheckboxItem extends Node {
checked: false,
}),
Tab: sinkListItem(type),
"Mod-Enter": toggleCheckboxItem(),
"Shift-Tab": liftListItem(type),
"Mod-]": sinkListItem(type),
"Mod-[": liftListItem(type),

View File

@@ -83,7 +83,7 @@ export const basicExtensions: Nodes = [
* editors that need advanced formatting.
*/
export const richExtensions: Nodes = [
...basicExtensions.filter((n) => n !== SimpleImage),
...basicExtensions.filter((n) => n !== SimpleImage && n !== Keys),
Image,
HardBreak,
CodeBlock,
@@ -109,6 +109,7 @@ export const richExtensions: Nodes = [
Math,
MathBlock,
PreventTab,
Keys,
];
/**

View File

@@ -211,7 +211,6 @@
"Choose icon": "Choose icon",
"Loading": "Loading",
"Select a color": "Select a color",
"Loading editor": "Loading editor",
"Search": "Search",
"Default access": "Default access",
"View and edit": "View and edit",