aboutsummaryrefslogtreecommitdiffstats
path: root/content_scripts
diff options
context:
space:
mode:
authorStephen Blott2014-12-31 19:04:26 +0000
committerStephen Blott2014-12-31 20:00:07 +0000
commitf2b428b4fe1eecd66ee95513da779470f7c621aa (patch)
tree038032ba697ec0a46b1647b73866901195b27520 /content_scripts
parent4a00f76f2ad3d0ec8cdb70c7e45f561d5a73ff27 (diff)
downloadvimium-f2b428b4fe1eecd66ee95513da779470f7c621aa.tar.bz2
Modes proof-of-concept.
Diffstat (limited to 'content_scripts')
-rw-r--r--content_scripts/mode.coffee12
-rw-r--r--content_scripts/vimium_frontend.coffee22
2 files changed, 21 insertions, 13 deletions
diff --git a/content_scripts/mode.coffee b/content_scripts/mode.coffee
new file mode 100644
index 00000000..f7bf9e69
--- /dev/null
+++ b/content_scripts/mode.coffee
@@ -0,0 +1,12 @@
+root = exports ? window
+
+class root.Mode
+ constructor: (onKeydown, onKeypress, onKeyup, @popModeCallback) ->
+ @handlerId = handlerStack.push
+ keydown: onKeydown
+ keypress: onKeypress
+ keyup: onKeyup
+
+ popMode: ->
+ handlerStack.remove @handlerId
+ @popModeCallback()
diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee
index ae275f0c..5f8b050f 100644
--- a/content_scripts/vimium_frontend.coffee
+++ b/content_scripts/vimium_frontend.coffee
@@ -4,7 +4,6 @@
# background page that we're in domReady and ready to accept normal commands by connectiong to a port named
# "domReady".
#
-window.handlerStack = new HandlerStack
insertModeLock = null
findMode = false
@@ -110,6 +109,8 @@ initializePreDomReady = ->
settings.addEventListener("load", LinkHints.init.bind(LinkHints))
settings.load()
+ nf = -> true
+ new Mode(onKeydown, onKeypress, onKeyup, nf)
Scroller.init settings
checkIfEnabledForUrl()
@@ -169,9 +170,11 @@ initializeWhenEnabled = (newPassKeys) ->
if (!installedListeners)
# Key event handlers fire on window before they do on document. Prefer window for key events so the page
# can't set handlers to grab the keys before us.
- installListener window, "keydown", onKeydown
- installListener window, "keypress", onKeypress
- installListener window, "keyup", onKeyup
+ for type in ["keydown", "keypress", "keyup"]
+ do (type) ->
+ installListener window, type, (event) ->
+ console.log type
+ handlerStack.bubbleEvent type, event
installListener document, "focus", onFocusCapturePhase
installListener document, "blur", onBlurCapturePhase
installListener document, "DOMActivate", onDOMActivate
@@ -398,8 +401,6 @@ KeydownEvents =
# Note that some keys will only register keydown events and not keystroke events, e.g. ESC.
#
onKeypress = (event) ->
- return unless handlerStack.bubbleEvent('keypress', event)
-
keyChar = ""
# Ignore modifier keys by themselves.
@@ -424,8 +425,7 @@ onKeypress = (event) ->
keyPort.postMessage({ keyChar:keyChar, frameId:frameId })
onKeydown = (event) ->
- return unless handlerStack.bubbleEvent('keydown', event)
-
+ console.log "onKeydown"
keyChar = ""
# handle special keys, and normal input keys with modifiers being pressed. don't handle shiftKey alone (to
@@ -518,11 +518,7 @@ onKeydown = (event) ->
KeydownEvents.push event
onKeyup = (event) ->
- handledKeydown = KeydownEvents.pop event
- return unless handlerStack.bubbleEvent("keyup", event)
-
- # Don't propagate the keyup to the underlying page if Vimium has handled it. See #733.
- DomUtils.suppressPropagation(event) if handledKeydown
+ DomUtils.suppressPropagation(event) if KeydownEvents.pop event
checkIfEnabledForUrl = ->
url = window.location.toString()