ngx-editor
Version:
Rich Text Editor for angular using ProseMirror
1 lines • 10.7 kB
Source Map (JSON)
{"version":3,"file":"ngx-editor-helpers.mjs","sources":["../../../projects/ngx-editor/helpers/isMarkActive.ts","../../../projects/ngx-editor/helpers/getSelectionMarks.ts","../../../projects/ngx-editor/helpers/isLinkActive.ts","../../../projects/ngx-editor/helpers/isNodeActive.ts","../../../projects/ngx-editor/helpers/bubblePosition.ts","../../../projects/ngx-editor/helpers/getSelectionNodes.ts","../../../projects/ngx-editor/helpers/markApplies.ts","../../../projects/ngx-editor/helpers/markInputRule.ts","../../../projects/ngx-editor/helpers/ngx-editor-helpers.ts"],"sourcesContent":["import { EditorState } from 'prosemirror-state';\nimport { MarkType } from 'prosemirror-model';\n\nexport const isMarkActive = (state: EditorState, type: MarkType): boolean => {\n const { from, $from, to, empty } = state.selection;\n\n if (empty) {\n return !!type.isInSet(state.storedMarks || $from.marks());\n } else {\n return state.doc.rangeHasMark(from, to, type);\n }\n};\n\nexport default isMarkActive;\n","import { EditorState } from 'prosemirror-state';\nimport { Mark } from 'prosemirror-model';\n\nexport const getSelectionMarks = (state: EditorState): Mark[] => {\n let marks: Mark[] = [];\n\n const { selection: { from, to, empty, $from }, storedMarks } = state;\n\n if (empty) {\n marks = storedMarks || $from.marks();\n } else {\n state.doc.nodesBetween(from, to, node => {\n marks = [...marks, ...node.marks];\n });\n }\n\n return marks;\n};\n\nexport default getSelectionMarks;\n","import { EditorState } from 'prosemirror-state';\nimport { Mark } from 'prosemirror-model';\n\nimport getSelectionMarks from './getSelectionMarks';\n\nexport const isLinkActive = (state: EditorState): boolean => {\n const { schema, selection: { anchor, head, from } } = state;\n\n if (!schema.marks.link) {\n return false;\n }\n\n const isForwardSelection = anchor === from;\n const linkMarks: Mark[] = getSelectionMarks(state).filter(mark => mark.type === schema.marks.link);\n\n if (!linkMarks.length) {\n return false;\n }\n\n const selectionHasOnlyMarks = isForwardSelection ?\n (\n state.doc.rangeHasMark(anchor, anchor + 1, schema.marks.link) &&\n state.doc.rangeHasMark(head - 1, head, schema.marks.link)\n ) : (\n state.doc.rangeHasMark(anchor - 1, anchor, schema.marks.link) &&\n state.doc.rangeHasMark(head, head + 1, schema.marks.link)\n );\n\n if (linkMarks.length === 1 && selectionHasOnlyMarks) {\n return true;\n }\n\n return false;\n};\n\nexport default isLinkActive;\n","import { EditorState } from 'prosemirror-state';\nimport { NodeType, ResolvedPos } from 'prosemirror-model';\n\nconst findNodeType = (type: NodeType, $from: ResolvedPos): NodeType | null => {\n for (let i = $from.depth; i > 0; i--) {\n if ($from.node(i).type === type) {\n return $from.node(i).type;\n }\n }\n\n return null;\n};\n\nexport const isNodeActive = (state: EditorState, type: NodeType, attrs: any = {}): boolean => {\n const { selection } = state;\n const { $from, to } = selection;\n\n const node: NodeType | null = findNodeType(type, $from);\n\n if (!Object.entries(attrs).length || !node) {\n return !!node;\n }\n\n return to <= $from.end() && $from.parent.hasMarkup(type, attrs);\n};\n\nexport default isNodeActive;\n","import { EditorView } from 'prosemirror-view';\n\ninterface TooltipPosition {\n bottom: number;\n left: number;\n}\n\nexport const calculateTooltipPos = (view: EditorView): TooltipPosition => {\n const { state: { selection } } = view;\n const { from, to } = selection;\n\n // These are in screen coordinates\n const start = view.coordsAtPos(from);\n const end = view.coordsAtPos(to);\n\n // The box in which the tooltip is positioned, to use as base\n const box = view.dom.getBoundingClientRect();\n\n // Find a center-ish x position from the selection endpoints (when\n // crossing lines, end may be more to the left)\n const left = Math.max((start.left + end.left) / 2, start.left + 3);\n\n return {\n left: left - box.left,\n bottom: box.bottom - start.top\n };\n};\n","import { EditorState } from 'prosemirror-state';\nimport { Node } from 'prosemirror-model';\n\nexport const getSelectionNodes = (state: EditorState): Node[] => {\n const nodes: Node[] = [];\n\n const { selection: { from, to } } = state;\n\n state.doc.nodesBetween(from, to, node => {\n nodes.push(node);\n });\n\n return nodes;\n};\n\nexport default getSelectionNodes;\n","import { MarkType, Node as PrmosemirroNode } from 'prosemirror-model';\nimport { SelectionRange } from 'prosemirror-state';\n\n// Ref: https://github.com/ProseMirror/prosemirror-commands/blob/master/src/commands.js\n\nexport const markApplies = (doc: PrmosemirroNode, ranges: SelectionRange[], type: MarkType): boolean => {\n for (const range of ranges) {\n const { $from, $to } = range;\n\n let canApply = $from.depth === 0 ? doc.type.allowsMarkType(type) : false;\n\n doc.nodesBetween($from.pos, $to.pos, (node: PrmosemirroNode): boolean => {\n if (canApply) {\n return false;\n }\n\n canApply = node.inlineContent && node.type.allowsMarkType(type);\n return true;\n });\n\n if (canApply) {\n return true;\n }\n }\n return false;\n};\n\nexport default markApplies;\n","import { InputRule } from \"prosemirror-inputrules\"\nimport { MarkType } from \"prosemirror-model\"\n\nexport const markInputRule = (regexp: RegExp, markType: MarkType, attrs?: Record<string, unknown>): InputRule => {\n\n return new InputRule(regexp, (state, match, start, end) => {\n\n const tr = state.tr\n\n if (match[2]) {\n const textStart = start + match[0].indexOf(match[2])\n const textEnd = textStart + match[2].length\n\n if (textEnd < end) {\n tr.delete(textEnd, end)\n }\n\n if (textStart > start) {\n tr.delete(start, textStart)\n }\n\n end = start + match[2].length\n }\n return tr.addMark(start, end, markType.create(attrs))\n })\n}\n\nexport default markInputRule\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}