/** * @module bindings/dom */ /* globals getSelection */ import { getRelativePosition } from '../../utils/relativePosition.mjs' let relativeSelection = null const _getCurrentRelativeSelection = domBinding => { const { baseNode, baseOffset, extentNode, extentOffset } = getSelection() const baseNodeType = domBinding.domToType.get(baseNode) const extentNodeType = domBinding.domToType.get(extentNode) if (baseNodeType !== undefined && extentNodeType !== undefined) { return { from: getRelativePosition(baseNodeType, baseOffset), to: getRelativePosition(extentNodeType, extentOffset) } } return null } export const getCurrentRelativeSelection = typeof getSelection !== 'undefined' ? _getCurrentRelativeSelection : domBinding => null export const beforeTransactionSelectionFixer = domBinding => { relativeSelection = getCurrentRelativeSelection(domBinding) } /** * Reset the browser range after every transaction. * This prevents any collapsing issues with the local selection. * @private */ export const afterTransactionSelectionFixer = domBinding => { if (relativeSelection !== null) { domBinding.restoreSelection(relativeSelection) } }