aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBranden Rolston2010-04-28 11:36:16 -0700
committerBranden Rolston2010-04-28 11:36:16 -0700
commit07d8cc8787eca94ed733176b8e7961580c7dc9ec (patch)
tree677dacabe2b5315c41f1e51546ae273eb409c1a1
parent87e611dccd8a9c6b4ee681fc88f2a461f76e830a (diff)
downloadvimium-07d8cc8787eca94ed733176b8e7961580c7dc9ec.tar.bz2
Shift key toggles current/new tab in link hints mode.
-rw-r--r--lib/keyboardUtils.js4
-rw-r--r--linkHints.js31
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();
}
/*