Files
outline/shared/editor/queries/isInCode.ts
2024-06-08 21:51:52 -04:00

39 lines
1.0 KiB
TypeScript

import { EditorState } from "prosemirror-state";
import { isMarkActive } from "./isMarkActive";
import { isNodeActive } from "./isNodeActive";
type Options = {
/** Only check if the selection is inside a code block. */
onlyBlock?: boolean;
/** Only check if the selection is inside a code mark. */
onlyMark?: boolean;
};
/**
* Returns true if the selection is inside a code block or code mark.
*
* @param state The editor state.
* @param options The options.
* @returns True if the selection is inside a code block or code mark.
*/
export function isInCode(state: EditorState, options?: Options): boolean {
const { nodes, marks } = state.schema;
if (!options?.onlyMark) {
if (nodes.code_block && isNodeActive(nodes.code_block)(state)) {
return true;
}
if (nodes.code_fence && isNodeActive(nodes.code_fence)(state)) {
return true;
}
}
if (!options?.onlyBlock) {
if (marks.code_inline) {
return isMarkActive(marks.code_inline)(state);
}
}
return false;
}