39 lines
1.0 KiB
TypeScript
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;
|
|
}
|