aboutsummaryrefslogtreecommitdiffstats
path: root/content_scripts/mode_passkeys.coffee
diff options
context:
space:
mode:
authorStephen Blott2015-01-02 08:11:22 +0000
committerStephen Blott2015-01-02 08:16:20 +0000
commita321ca5e1a335f0b04714fa8ea00c2bac8febb86 (patch)
tree2b25cc69ca41d0a3454b4065ddf38c8fa49c2fa6 /content_scripts/mode_passkeys.coffee
parentc783b653e185166009ba0cdf94c6fdbb442d7f39 (diff)
downloadvimium-a321ca5e1a335f0b04714fa8ea00c2bac8febb86.tar.bz2
Modes; flesh out passkeys mode.
Diffstat (limited to 'content_scripts/mode_passkeys.coffee')
-rw-r--r--content_scripts/mode_passkeys.coffee32
1 files changed, 32 insertions, 0 deletions
diff --git a/content_scripts/mode_passkeys.coffee b/content_scripts/mode_passkeys.coffee
new file mode 100644
index 00000000..7a0249ad
--- /dev/null
+++ b/content_scripts/mode_passkeys.coffee
@@ -0,0 +1,32 @@
+
+class PassKeysMode extends Mode
+ keyQueue: ""
+ passKeys: ""
+
+ # Decide whether this keyChar should be passed to the underlying page. 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.
+ isPassKey: (keyChar) ->
+ not @keyQueue and 0 <= @passKeys.indexOf(keyChar)
+
+ handlePassKeyEvent: (event) ->
+ for keyChar in [KeyboardUtils.getKeyChar(event), String.fromCharCode(event.charCode)]
+ # A key is passed through to the underlying page by returning handlerStack.passThrough.
+ return handlerStack.passThrough if keyChar and @isPassKey keyChar
+ true
+
+ setState: (response) ->
+ if response.isEnabledForUrl?
+ @passKeys = (response.isEnabledForUrl and response.passKeys) or ""
+ if response.keyQueue?
+ @keyQueue = response.keyQueue
+
+ constructor: ->
+ super
+ name: "passkeys"
+ keydown: (event) => @handlePassKeyEvent event
+ keypress: (event) => @handlePassKeyEvent event
+ keyup: -> true # Allow event to propagate.
+
+root = exports ? window
+root.PassKeysMode = PassKeysMode