diff options
| author | Stephen Blott | 2015-01-20 06:10:31 +0000 | 
|---|---|---|
| committer | Stephen Blott | 2015-01-20 06:22:15 +0000 | 
| commit | 45dd6235a31fecfd3235db9881ddfad8e5a2835a (patch) | |
| tree | 91a6a1e894aadc87441df35411bdc537c9defd60 /lib | |
| parent | e700982a20737bdc1cf0c4babaa2c199a53a1300 (diff) | |
| download | vimium-45dd6235a31fecfd3235db9881ddfad8e5a2835a.tar.bz2 | |
Minor refactoring of isSelected().
There's no point in focusing element if it's already active.
Also, we leave the caret in place, not just a range selection.
isSelected 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.  Nevertheless, this is substantially better
than the existing UX, which *always* moves the caret to the end.
Diffstat (limited to 'lib')
| -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 ||= {} | 
