aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorStephen Blott2015-01-20 06:25:25 +0000
committerStephen Blott2015-01-20 06:25:25 +0000
commite8bc7c66521ac83b1396fadee32252f71b3375db (patch)
treeedd467bd99f961fa6695f8e9b47180960406f8d7 /lib
parent8b834fcbd7751a49362a788af2bb4003d33dc9e7 (diff)
parent45dd6235a31fecfd3235db9881ddfad8e5a2835a (diff)
downloadvimium-e8bc7c66521ac83b1396fadee32252f71b3375db.tar.bz2
Merge pull request #1436 from smblott-github/fix-simulate-select
On simulateSelect, do not change selection if selection exists.
Diffstat (limited to 'lib')
-rw-r--r--lib/dom_utils.coffee21
1 files changed, 13 insertions, 8 deletions
diff --git a/lib/dom_utils.coffee b/lib/dom_utils.coffee
index 846ed142..1d1b67ba 100644
--- a/lib/dom_utils.coffee
+++ b/lib/dom_utils.coffee
@@ -173,18 +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) ->
- # 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()
- # 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 ||= {}