diff options
| author | Branden Rolston | 2010-04-28 11:36:16 -0700 | 
|---|---|---|
| committer | Branden Rolston | 2010-04-28 11:36:16 -0700 | 
| commit | 07d8cc8787eca94ed733176b8e7961580c7dc9ec (patch) | |
| tree | 677dacabe2b5315c41f1e51546ae273eb409c1a1 | |
| parent | 87e611dccd8a9c6b4ee681fc88f2a461f76e830a (diff) | |
| download | vimium-07d8cc8787eca94ed733176b8e7961580c7dc9ec.tar.bz2 | |
Shift key toggles current/new tab in link hints mode.
| -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();  }  /* | 
