diff --git a/src/static/js/caretPosition.js b/src/static/js/caretPosition.js index 32f6d919b..dbab99266 100644 --- a/src/static/js/caretPosition.js +++ b/src/static/js/caretPosition.js @@ -4,36 +4,33 @@ // This function is useful to get the caret position of the line as // is represented by the browser exports.getPosition = () => { - let rect, line; const range = getSelectionRange(); - const isSelectionInsideTheEditor = range && - $(range.endContainer).closest('body')[0].id === 'innerdocbody'; + if (!range || $(range.endContainer).closest('body')[0].id !== 'innerdocbody') return null; + let rect, line; - if (isSelectionInsideTheEditor) { - // when we have the caret in an empty line, e.g. a line with only a
, - // getBoundingClientRect() returns all dimensions value as 0 - const selectionIsInTheBeginningOfLine = range.endOffset > 0; - if (selectionIsInTheBeginningOfLine) { - const clonedRange = createSelectionRange(range); - line = getPositionOfElementOrSelection(clonedRange); - clonedRange.detach(); - } + // when we have the caret in an empty line, e.g. a line with only a
, + // getBoundingClientRect() returns all dimensions value as 0 + const selectionIsInTheBeginningOfLine = range.endOffset > 0; + if (selectionIsInTheBeginningOfLine) { + const clonedRange = createSelectionRange(range); + line = getPositionOfElementOrSelection(clonedRange); + clonedRange.detach(); + } - // when there's a
or any element that has no height, we can't get - // the dimension of the element where the caret is - if (!rect || rect.height === 0) { - const clonedRange = createSelectionRange(range); + // when there's a
or any element that has no height, we can't get + // the dimension of the element where the caret is + if (!rect || rect.height === 0) { + const clonedRange = createSelectionRange(range); - // as we can't get the element height, we create a text node to get the dimensions - // on the position - const shadowCaret = $(document.createTextNode('|')); - clonedRange.insertNode(shadowCaret[0]); - clonedRange.selectNode(shadowCaret[0]); + // as we can't get the element height, we create a text node to get the dimensions + // on the position + const shadowCaret = $(document.createTextNode('|')); + clonedRange.insertNode(shadowCaret[0]); + clonedRange.selectNode(shadowCaret[0]); - line = getPositionOfElementOrSelection(clonedRange); - clonedRange.detach(); - shadowCaret.remove(); - } + line = getPositionOfElementOrSelection(clonedRange); + clonedRange.detach(); + shadowCaret.remove(); } return line; };