diff options
| -rw-r--r-- | lib/keyboardUtils.js | 4 | ||||
| -rw-r--r-- | linkHints.js | 31 |
2 files changed, 32 insertions, 3 deletions
diff --git a/lib/keyboardUtils.js b/lib/keyboardUtils.js index a47d273f..233ba6a9 100644 --- a/lib/keyboardUtils.js +++ b/lib/keyboardUtils.js @@ -1,4 +1,4 @@ -var keyCodes = { ESC: 27, backspace: 8, deleteKey: 46, enter: 13, space: 32 }; +var keyCodes = { ESC: 27, backspace: 8, deleteKey: 46, enter: 13, space: 32, shiftKey: 16 }; // This is a mapping of the incorrect keyIdentifiers generated by Webkit on Windows during keydown events to // the correct identifiers, which are correctly generated on Mac. We require this mapping to properly handle @@ -48,4 +48,4 @@ function isPrimaryModifierKey(event) { function isEscape(event) { return event.keyCode == keyCodes.ESC || (event.ctrlKey && getKeyChar(event) == '['); // c-[ is mapped to ESC in Vim by default. -}
\ No newline at end of file +} diff --git a/linkHints.js b/linkHints.js index de140581..aa6ba5d3 100644 --- a/linkHints.js +++ b/linkHints.js @@ -13,6 +13,8 @@ var hintMarkerContainingDiv = null; var hintKeystrokeQueue = []; var linkHintsModeActivated = false; var shouldOpenLinkHintInNewTab = false; +// Whether link hint's "open in current/new tab" setting is currently toggled +var openLinkModeToggle = false; // Whether we have added to the page the CSS needed to display link hints. var linkHintsCssAdded = false; @@ -37,9 +39,18 @@ function activateLinkHintsMode(openInNewTab) { addCssToPage(linkHintCss); // linkHintCss is declared by vimiumFrontend.js linkHintCssAdded = true; linkHintsModeActivated = true; - shouldOpenLinkHintInNewTab = openInNewTab + setOpenLinkMode(openInNewTab); buildLinkHints(); document.addEventListener("keydown", onKeyDownInLinkHintsMode, true); + document.addEventListener("keyup", onKeyUpInLinkHintsMode, true); +} + +function setOpenLinkMode(openInNewTab) { + shouldOpenLinkHintInNewTab = openInNewTab; + if (shouldOpenLinkHintInNewTab) + HUD.show("Open link in new tab"); + else + HUD.show("Open link in current tab"); } /* @@ -113,6 +124,12 @@ function getVisibleClickableElements() { } function onKeyDownInLinkHintsMode(event) { + if (event.keyCode == keyCodes.shiftKey && !openLinkModeToggle) { + // Toggle whether to open link in a new or current tab. + setOpenLinkMode(!shouldOpenLinkHintInNewTab); + openLinkModeToggle = true; + } + var keyChar = getKeyChar(event); if (!keyChar) return; @@ -138,6 +155,16 @@ function onKeyDownInLinkHintsMode(event) { event.preventDefault(); } +function onKeyUpInLinkHintsMode(event) { + if (event.keyCode == keyCodes.shiftKey && openLinkModeToggle) { + // Revert toggle on whether to open link in new or current tab. + setOpenLinkMode(!shouldOpenLinkHintInNewTab); + openLinkModeToggle = false; + } + event.stopPropagation(); + event.preventDefault(); +} + /* * Updates the visibility of link hints on screen based on the keystrokes typed thus far. If only one * link hint remains, click on that link and exit link hints mode. @@ -238,7 +265,9 @@ function deactivateLinkHintsMode() { hintMarkers = []; hintKeystrokeQueue = []; document.removeEventListener("keydown", onKeyDownInLinkHintsMode, true); + document.removeEventListener("keyup", onKeyUpInLinkHintsMode, true); linkHintsModeActivated = false; + HUD.hide(); } /* |
