aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorStephen Blott2015-01-20 06:10:31 +0000
committerStephen Blott2015-01-20 06:22:15 +0000
commit45dd6235a31fecfd3235db9881ddfad8e5a2835a (patch)
tree91a6a1e894aadc87441df35411bdc537c9defd60 /lib
parente700982a20737bdc1cf0c4babaa2c199a53a1300 (diff)
downloadvimium-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.coffee23
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 ||= {}