Download src/lib/prosemirror/commands/setTextAlign.ts from muthuk1/OpenMAIC-React: direct link, hf CLI and curl.
- Browser
- Download file 1.57 kB
-
https://huggingface.co/muthuk1/OpenMAIC-React/resolve/main/src/lib/prosemirror/commands/setTextAlign.ts
- Command line
-
hf download hf://muthuk1/OpenMAIC-React/src/lib/prosemirror/commands/setTextAlign.ts
-
curl -L -o setTextAlign.ts https://huggingface.co/muthuk1/OpenMAIC-React/resolve/main/src/lib/prosemirror/commands/setTextAlign.ts
1.57 kB
| import type { Schema, Node, NodeType } from 'prosemirror-model'; | |
| import type { Transaction } from 'prosemirror-state'; | |
| import type { EditorView } from 'prosemirror-view'; | |
| export const setTextAlign = (tr: Transaction, schema: Schema, alignment: string) => { | |
| const { selection, doc } = tr; | |
| if (!selection || !doc) return tr; | |
| const { from, to } = selection; | |
| const { nodes } = schema; | |
| const blockquote = nodes.blockquote; | |
| const listItem = nodes.list_item; | |
| const paragraph = nodes.paragraph; | |
| interface Task { | |
| node: Node; | |
| pos: number; | |
| nodeType: NodeType; | |
| } | |
| const tasks: Task[] = []; | |
| alignment = alignment || ''; | |
| const allowedNodeTypes = new Set([blockquote, listItem, paragraph]); | |
| doc.nodesBetween(from, to, (node, pos) => { | |
| const nodeType = node.type; | |
| const align = node.attrs.align || ''; | |
| if (align !== alignment && allowedNodeTypes.has(nodeType)) { | |
| tasks.push({ | |
| node, | |
| pos, | |
| nodeType, | |
| }); | |
| } | |
| return true; | |
| }); | |
| if (!tasks.length) return tr; | |
| tasks.forEach((task) => { | |
| const { node, pos, nodeType } = task; | |
| let { attrs } = node; | |
| if (alignment) attrs = { ...attrs, align: alignment }; | |
| else attrs = { ...attrs, align: null }; | |
| tr = tr.setNodeMarkup(pos, nodeType, attrs, node.marks); | |
| }); | |
| return tr; | |
| }; | |
| export const alignmentCommand = (view: EditorView, alignment: string) => { | |
| const { state } = view; | |
| const { schema, selection } = state; | |
| const tr = setTextAlign(state.tr.setSelection(selection), schema, alignment); | |
| view.dispatch(tr); | |
| }; | |