diff options
| -rw-r--r-- | lib/dom_utils.coffee | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/lib/dom_utils.coffee b/lib/dom_utils.coffee index 21a00ae4..1d1b67ba 100644 --- a/lib/dom_utils.coffee +++ b/lib/dom_utils.coffee @@ -173,20 +173,23 @@ DomUtils = node = document.getSelection()?.anchorNode node and @isDOMDescendant element, node else - element.selectionStart? and element.selectionEnd? and element.selectionStart != element.selectionEnd + # Note. This makes the wrong decision if the user has placed the caret at the start of element. We + # cannot distinguish that case from the user having made no selection. + element.selectionStart? and element.selectionEnd? and element.selectionEnd != 0 simulateSelect: (element) -> - isSelected = @isSelected element - # If element == document.activeElement, then we won't get a new focus event. So, we pretend (to any - # active modes which care, e.g. PostFindMode) that element has been clicked. + # If element is already active, then we don't move the selection. However, we also won't get a new focus + # event. So, instead we pretend (to any active modes which care, e.g. PostFindMode) that element has been + # clicked. if element == document.activeElement and DomUtils.isEditable document.activeElement handlerStack.bubbleEvent "click", target: element - - element.focus() - unless isSelected - # When focusing a textbox, put the selection caret at the end of the textbox's contents. - # For some HTML5 input types (eg. date) we can't position the caret, so we wrap this with a try. - try element.setSelectionRange(element.value.length, element.value.length) + else + element.focus() + unless @isSelected element + # When focusing a textbox (without an existing selection), put the selection caret at the end of the + # textbox's contents. For some HTML5 input types (eg. date) we can't position the caret, so we wrap + # this with a try. + try element.setSelectionRange(element.value.length, element.value.length) simulateClick: (element, modifiers) -> modifiers ||= {} |
