@edtr-io/plugin-text
Version:
43 lines (39 loc) • 1.22 kB
text/typescript
import { Range as CoreRange } from 'slate'
import { Editor } from 'slate-react'
export function getActiveMarks(editor: Editor) {
return editor.value.document.getActiveMarksAtRange(
getTrimmedSelectionRange(editor)
)
}
export function trimSelection(editor: Editor) {
// Trim selection before applying transformation
const selection = document.getSelection()
if (selection) {
let str = selection.toString()
while (str.startsWith(' ')) {
editor.moveStartForward(1)
str = str.substring(1)
}
while (str.endsWith(' ')) {
editor.moveEndBackward(1)
str = str.substring(0, str.length - 1)
}
}
}
export function getTrimmedSelectionRange(editor: Editor) {
// get trimmed selection, without changing editor (e.g. for checking active marks)
const native = document.getSelection()
let selection = editor.value.selection.toRange()
if (native) {
let str = native.toString()
while (str.startsWith(' ')) {
selection = selection.moveStartForward(1)
str = str.substring(1)
}
while (str.endsWith(' ')) {
selection = selection.moveEndBackward(1)
str = str.substring(0, str.length - 1)
}
}
return CoreRange.create(selection)
}