fix: improve calculation for min/max positions in selections, fix #1588
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import { EditorState, TextSelection } from 'prosemirror-state'
|
import { EditorState, Selection, TextSelection } from 'prosemirror-state'
|
||||||
import { RawCommands, FocusPosition } from '../types'
|
import { RawCommands, FocusPosition } from '../types'
|
||||||
import minMax from '../utilities/minMax'
|
import minMax from '../utilities/minMax'
|
||||||
import isTextSelection from '../helpers/isTextSelection'
|
import isTextSelection from '../helpers/isTextSelection'
|
||||||
@@ -59,8 +59,10 @@ export const focus: RawCommands['focus'] = (position = null) => ({
|
|||||||
|
|
||||||
const { from, to } = resolveSelection(editor.state, position) || editor.state.selection
|
const { from, to } = resolveSelection(editor.state, position) || editor.state.selection
|
||||||
const { doc, storedMarks } = tr
|
const { doc, storedMarks } = tr
|
||||||
const resolvedFrom = minMax(from, 0, doc.content.size)
|
const minPos = Selection.atStart(doc).from
|
||||||
const resolvedEnd = minMax(to, 0, doc.content.size)
|
const maxPos = Selection.atEnd(doc).to
|
||||||
|
const resolvedFrom = minMax(from, minPos, maxPos)
|
||||||
|
const resolvedEnd = minMax(to, minPos, maxPos)
|
||||||
const selection = TextSelection.create(doc, resolvedFrom, resolvedEnd)
|
const selection = TextSelection.create(doc, resolvedFrom, resolvedEnd)
|
||||||
const isSameSelection = editor.state.selection.eq(selection)
|
const isSameSelection = editor.state.selection.eq(selection)
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { NodeSelection } from 'prosemirror-state'
|
import { Selection, NodeSelection } from 'prosemirror-state'
|
||||||
import minMax from '../utilities/minMax'
|
import minMax from '../utilities/minMax'
|
||||||
import { RawCommands } from '../types'
|
import { RawCommands } from '../types'
|
||||||
|
|
||||||
@@ -16,8 +16,10 @@ declare module '@tiptap/core' {
|
|||||||
export const setNodeSelection: RawCommands['setNodeSelection'] = position => ({ tr, dispatch }) => {
|
export const setNodeSelection: RawCommands['setNodeSelection'] = position => ({ tr, dispatch }) => {
|
||||||
if (dispatch) {
|
if (dispatch) {
|
||||||
const { doc } = tr
|
const { doc } = tr
|
||||||
const from = minMax(position, 0, doc.content.size)
|
const minPos = Selection.atStart(doc).from
|
||||||
const selection = NodeSelection.create(doc, from)
|
const maxPos = Selection.atEnd(doc).to
|
||||||
|
const resolvedPos = minMax(position, minPos, maxPos)
|
||||||
|
const selection = NodeSelection.create(doc, resolvedPos)
|
||||||
|
|
||||||
tr.setSelection(selection)
|
tr.setSelection(selection)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { TextSelection } from 'prosemirror-state'
|
import { Selection, TextSelection } from 'prosemirror-state'
|
||||||
import minMax from '../utilities/minMax'
|
import minMax from '../utilities/minMax'
|
||||||
import { RawCommands, Range } from '../types'
|
import { RawCommands, Range } from '../types'
|
||||||
|
|
||||||
@@ -19,9 +19,11 @@ export const setTextSelection: RawCommands['setTextSelection'] = position => ({
|
|||||||
const { from, to } = typeof position === 'number'
|
const { from, to } = typeof position === 'number'
|
||||||
? { from: position, to: position }
|
? { from: position, to: position }
|
||||||
: position
|
: position
|
||||||
const boundedFrom = minMax(from, 0, doc.content.size)
|
const minPos = Selection.atStart(doc).from
|
||||||
const boundedTo = minMax(to, 0, doc.content.size)
|
const maxPos = Selection.atEnd(doc).to
|
||||||
const selection = TextSelection.create(doc, boundedFrom, boundedTo)
|
const resolvedFrom = minMax(from, minPos, maxPos)
|
||||||
|
const resolvedEnd = minMax(to, minPos, maxPos)
|
||||||
|
const selection = TextSelection.create(doc, resolvedFrom, resolvedEnd)
|
||||||
|
|
||||||
tr.setSelection(selection)
|
tr.setSelection(selection)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user