aboutsummaryrefslogtreecommitdiffstats
path: root/content_scripts/mode_passkeys.coffee
diff options
context:
space:
mode:
authorStephen Blott2015-01-18 10:39:09 +0000
committerStephen Blott2015-01-18 10:39:09 +0000
commita1edae57e2847c2b6ffcae60ea8c9c16216e4692 (patch)
tree30ff186038028f9d0c0d5cc08d572ca56dda8819 /content_scripts/mode_passkeys.coffee
parent8c9e429074580ea20aba662ee430d87bd73ebc4b (diff)
parent5d087c89917e21872711b7b908fcdd3c7e9e7f17 (diff)
downloadvimium-a1edae57e2847c2b6ffcae60ea8c9c16216e4692.tar.bz2
Merge pull request #1413 from smblott-github/modes
A modal-browsing framework
Diffstat (limited to 'content_scripts/mode_passkeys.coffee')
-rw-r--r--content_scripts/mode_passkeys.coffee24
1 files changed, 24 insertions, 0 deletions
diff --git a/content_scripts/mode_passkeys.coffee b/content_scripts/mode_passkeys.coffee
new file mode 100644
index 00000000..94a7c7ec
--- /dev/null
+++ b/content_scripts/mode_passkeys.coffee
@@ -0,0 +1,24 @@
+
+class PassKeysMode extends Mode
+ constructor: ->
+ super
+ name: "passkeys"
+ trackState: true # Maintain @enabled, @passKeys and @keyQueue.
+ keydown: (event) => @handleKeyChar KeyboardUtils.getKeyChar event
+ keypress: (event) => @handleKeyChar String.fromCharCode event.charCode
+ keyup: (event) => @handleKeyChar String.fromCharCode event.charCode
+
+ # Keystrokes are *never* considered passKeys if the keyQueue is not empty. So, for example, if 't' is a
+ # passKey, then 'gt' and '99t' will neverthless be handled by Vimium.
+ handleKeyChar: (keyChar) ->
+ if keyChar and not @keyQueue and 0 <= @passKeys.indexOf keyChar
+ @stopBubblingAndTrue
+ else
+ @continueBubbling
+
+ # Disabled, pending experimentation with how/whether to use badges (smblott, 2015/01/17).
+ # updateBadge: (badge) ->
+ # badge.badge ||= "P" if @passKeys and not @keyQueue
+
+root = exports ? window
+root.PassKeysMode = PassKeysMode