aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--content_scripts/link_hints.coffee12
-rw-r--r--lib/dom_utils.coffee19
2 files changed, 21 insertions, 10 deletions
diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee
index 07deaf61..fad6b839 100644
--- a/content_scripts/link_hints.coffee
+++ b/content_scripts/link_hints.coffee
@@ -93,6 +93,7 @@ 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,
@@ -117,10 +118,13 @@ 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) -> DomUtils.simulateClick.bind(DomUtils, link)()
+ @linkActivator = (link) ->
+ @unhoverLast link
+ DomUtils.simulateClick link
#
# Creates a link marker for the given link.
@@ -377,6 +381,12 @@ 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 027188bf..06a02180 100644
--- a/lib/dom_utils.coffee
+++ b/lib/dom_utils.coffee
@@ -234,19 +234,20 @@ DomUtils =
if element.selectionStart == 0 and element.selectionEnd == 0
element.setSelectionRange element.value.length, element.value.length
-
+ simulateUnhover: (element, modifiers) -> @simulateMouseEvent "mouseout", element, modifiers
simulateClick: (element, modifiers) ->
- modifiers ||= {}
-
eventSequence = ["mouseover", "mousedown", "mouseup", "click"]
for event in eventSequence
- 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 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)
# momentarily flash a rectangular border to give user some visual feedback
flashRect: (rect) ->