From 501d540c2dcdda0ec48c9bfd112c806006efbb49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Ku=CC=88hn?= Date: Wed, 17 Feb 2021 23:30:40 +0100 Subject: [PATCH] move selectionToInsertionEnd --- packages/core/src/commands/insertHTML.ts | 16 +---------- .../src/helpers/selectionToInsertionEnd.ts | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+), 15 deletions(-) create mode 100644 packages/core/src/helpers/selectionToInsertionEnd.ts diff --git a/packages/core/src/commands/insertHTML.ts b/packages/core/src/commands/insertHTML.ts index 68046a3d..881c4138 100644 --- a/packages/core/src/commands/insertHTML.ts +++ b/packages/core/src/commands/insertHTML.ts @@ -1,22 +1,8 @@ import { DOMParser } from 'prosemirror-model' -import { Selection, Transaction } from 'prosemirror-state' -import { ReplaceStep, ReplaceAroundStep } from 'prosemirror-transform' import elementFromString from '../utilities/elementFromString' +import selectionToInsertionEnd from '../helpers/selectionToInsertionEnd' import { Command, RawCommands } from '../types' -// TODO: move to utils -// https://github.com/ProseMirror/prosemirror-state/blob/master/src/selection.js#L466 -function selectionToInsertionEnd(tr: Transaction, startLen: number, bias: number) { - const last = tr.steps.length - 1 - if (last < startLen) return - const step = tr.steps[last] - if (!(step instanceof ReplaceStep || step instanceof ReplaceAroundStep)) return - const map = tr.mapping.maps[last] - let end = 0 - map.forEach((_from, _to, _newFrom, newTo) => { if (end === 0) end = newTo }) - tr.setSelection(Selection.near(tr.doc.resolve(end as unknown as number), bias)) -} - declare module '@tiptap/core' { interface Commands { insertHTML: { diff --git a/packages/core/src/helpers/selectionToInsertionEnd.ts b/packages/core/src/helpers/selectionToInsertionEnd.ts new file mode 100644 index 00000000..faa46365 --- /dev/null +++ b/packages/core/src/helpers/selectionToInsertionEnd.ts @@ -0,0 +1,28 @@ +import { Selection, Transaction } from 'prosemirror-state' +import { ReplaceStep, ReplaceAroundStep } from 'prosemirror-transform' + +// source: https://github.com/ProseMirror/prosemirror-state/blob/master/src/selection.js#L466 +export default function selectionToInsertionEnd(tr: Transaction, startLen: number, bias: number) { + const last = tr.steps.length - 1 + + if (last < startLen) { + return + } + + const step = tr.steps[last] + + if (!(step instanceof ReplaceStep || step instanceof ReplaceAroundStep)) { + return + } + + const map = tr.mapping.maps[last] + let end = 0 + + map.forEach((_from, _to, _newFrom, newTo) => { + if (end === 0) { + end = newTo + } + }) + + tr.setSelection(Selection.near(tr.doc.resolve(end), bias)) +}