aboutsummaryrefslogtreecommitdiffstats
path: root/lib/dom_utils.coffee
diff options
context:
space:
mode:
authormrmr19932016-01-30 19:13:50 +0000
committermrmr19932016-01-30 19:13:50 +0000
commit4f77df0084ede4cf0c35b196b9139f412c37c496 (patch)
tree15c586d829c61e2b8a4c0c86bf550d657f94040d /lib/dom_utils.coffee
parent07e2bd2fbb0e404af1bb5dfabef94299565171bd (diff)
downloadvimium-4f77df0084ede4cf0c35b196b9139f412c37c496.tar.bz2
Rework unhovering to occur automatically for all simulated hovers
Diffstat (limited to 'lib/dom_utils.coffee')
-rw-r--r--lib/dom_utils.coffee27
1 files changed, 20 insertions, 7 deletions
diff --git a/lib/dom_utils.coffee b/lib/dom_utils.coffee
index 06a02180..7473df17 100644
--- a/lib/dom_utils.coffee
+++ b/lib/dom_utils.coffee
@@ -241,13 +241,26 @@ DomUtils =
for event in eventSequence
@simulateMouseEvent event, element, modifiers
- simulateMouseEvent: (event, element, modifiers = {}) ->
- mouseEvent = document.createEvent("MouseEvents")
- mouseEvent.initMouseEvent(event, true, true, window, 1, 0, 0, 0, 0, modifiers.ctrlKey, modifiers.altKey,
- modifiers.shiftKey, modifiers.metaKey, 0, null)
- # Debugging note: Firefox will not execute the element's default action if we dispatch this click event,
- # but Webkit will. Dispatching a click on an input box does not seem to focus it; we do that separately
- element.dispatchEvent(mouseEvent)
+ simulateMouseEvent: do ->
+ lastHoveredElement = undefined
+ (event, element, modifiers = {}) ->
+
+ if event == "mouseout"
+ element ?= lastHoveredElement # Allow unhovering the last hovered element by passing undefined.
+ lastHoveredElement = undefined
+ return unless element?
+
+ else if event == "mouseover"
+ # Simulate moving the mouse off the previous element first, as if we were a real mouse.
+ @simulateMouseEvent "mouseout", undefined, modifiers
+ lastHoveredElement = element
+
+ mouseEvent = document.createEvent("MouseEvents")
+ mouseEvent.initMouseEvent(event, true, true, window, 1, 0, 0, 0, 0, modifiers.ctrlKey, modifiers.altKey,
+ modifiers.shiftKey, modifiers.metaKey, 0, null)
+ # Debugging note: Firefox will not execute the element's default action if we dispatch this click event,
+ # but Webkit will. Dispatching a click on an input box does not seem to focus it; we do that separately
+ element.dispatchEvent(mouseEvent)
# momentarily flash a rectangular border to give user some visual feedback
flashRect: (rect) ->