aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--content_scripts/link_hints.coffee12
-rw-r--r--lib/dom_utils.coffee27
2 files changed, 21 insertions, 18 deletions
diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee
index fad6b839..13e2a17b 100644
--- a/content_scripts/link_hints.coffee
+++ b/content_scripts/link_hints.coffee
@@ -93,7 +93,6 @@ class LinkHintsMode
else
@hintMode.setIndicator "Open multiple links in new tabs."
@linkActivator = (link) ->
- @unhoverLast link
# When "clicking" on a link, dispatch the event with the appropriate meta key (CMD on Mac, CTRL on
# windows) to open it in a new tab if necessary.
DomUtils.simulateClick link,
@@ -118,13 +117,10 @@ class LinkHintsMode
else if @mode is DOWNLOAD_LINK_URL
@hintMode.setIndicator "Download link URL."
@linkActivator = (link) ->
- @unhoverLast link
DomUtils.simulateClick link, altKey: true, ctrlKey: false, metaKey: false
else # OPEN_IN_CURRENT_TAB
@hintMode.setIndicator "Open link in current tab."
- @linkActivator = (link) ->
- @unhoverLast link
- DomUtils.simulateClick link
+ @linkActivator = DomUtils.simulateClick.bind DomUtils
#
# Creates a link marker for the given link.
@@ -381,12 +377,6 @@ class LinkHintsMode
else
@deactivateMode delay
- unhoverLast: do ->
- lastHoveredElement = null
- (element) ->
- DomUtils.simulateUnhover lastHoveredElement if lastHoveredElement?
- lastHoveredElement = element
-
#
# Shows the marker, highlighting matchingCharCount characters.
#
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) ->