31 lines
832 B
TypeScript
31 lines
832 B
TypeScript
import { EditorState } from "prosemirror-state";
|
|
import isMarkActive from "./isMarkActive";
|
|
|
|
/**
|
|
* Returns true if the selection is inside a code block or code mark.
|
|
*
|
|
* @param state The editor state.
|
|
* @returns True if the selection is inside a code block or code mark.
|
|
*/
|
|
export default function isInCode(state: EditorState): boolean {
|
|
const { nodes, marks } = state.schema;
|
|
|
|
if (nodes.code_block || nodes.code_fence) {
|
|
const $head = state.selection.$head;
|
|
for (let d = $head.depth; d > 0; d--) {
|
|
if (nodes.code_block && $head.node(d).type === nodes.code_block) {
|
|
return true;
|
|
}
|
|
if (nodes.code_fence && $head.node(d).type === nodes.code_fence) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (marks.code_inline) {
|
|
return isMarkActive(marks.code_inline)(state);
|
|
}
|
|
|
|
return false;
|
|
}
|