aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Blott2015-01-03 05:58:09 +0000
committerStephen Blott2015-01-03 06:56:08 +0000
commit103fcde7c51fe83bc9c58fc28c3c11ce6a791f0f (patch)
tree582ffa2023f6b909f63681c48173deb456c50910
parenta71da0e9aff6a4f89724f5a15a022790e23d5049 (diff)
downloadvimium-103fcde7c51fe83bc9c58fc28c3c11ce6a791f0f.tar.bz2
Modes; more renaming and refactoring.
-rw-r--r--content_scripts/mode.coffee2
-rw-r--r--content_scripts/mode_insert.coffee13
-rw-r--r--content_scripts/vimium_frontend.coffee15
-rw-r--r--lib/handler_stack.coffee7
4 files changed, 19 insertions, 18 deletions
diff --git a/content_scripts/mode.coffee b/content_scripts/mode.coffee
index 24c50561..f411d29b 100644
--- a/content_scripts/mode.coffee
+++ b/content_scripts/mode.coffee
@@ -53,7 +53,7 @@ class Mode
# Default updateBadgeForMode handler. This is overridden by sub-classes. The default is to install the
# current mode's badge, unless the bade is already set.
updateBadgeForMode: (badge) ->
- handlerStack.alwaysPropagate => badge.badge ||= @badge
+ handlerStack.alwaysContinueBubbling => badge.badge ||= @badge
# Static method. Used externally and internally to initiate bubbling of an updateBadgeForMode event.
# Do not update the badge:
diff --git a/content_scripts/mode_insert.coffee b/content_scripts/mode_insert.coffee
index 34fad926..64aaa445 100644
--- a/content_scripts/mode_insert.coffee
+++ b/content_scripts/mode_insert.coffee
@@ -67,16 +67,25 @@ class InsertMode extends Mode
@handlers.push handlerStack.push
focus: (event) =>
- handlerStack.alwaysPropagate =>
+ handlerStack.alwaysContinueBubbling =>
if not @isInsertMode and @isFocusable event.target
@activate event.target
blur: (event) =>
- handlerStack.alwaysPropagate =>
+ handlerStack.alwaysContinueBubbling =>
if @isInsertMode and event.target == @insertModeLock
@deactivate()
# We may already have been dropped into insert mode. So check.
Mode.updateBadge()
+# Utility mode.
+# Activate this mode to prevent a focused, editable element from triggering insert mode.
+class FocusMustNotTriggerInsertMode extends Mode
+ constructor: ->
+ super()
+ @handlers.push handlerStack.push
+ focus: => @suppressEvent
+
root = exports ? window
root.InsertMode = InsertMode
+root.FocusMustNotTriggerInsertMode = FocusMustNotTriggerInsertMode
diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee
index a9b318c6..a252c878 100644
--- a/content_scripts/vimium_frontend.coffee
+++ b/content_scripts/vimium_frontend.coffee
@@ -114,7 +114,7 @@ class NormalMode extends Mode
keyup: onKeyup
updateBadgeForMode: (badge) ->
- handlerStack.alwaysPropagate =>
+ handlerStack.alwaysContinueBubbling =>
# Idea... Instead of an icon, we could show the keyQueue here (if it's non-empty).
super badge
badge.badge = "" unless isEnabledForUrl
@@ -750,22 +750,15 @@ class FindMode extends Mode
handlerStack.stopBubblingAndFalse
keypress: (event) ->
- handlerStack.neverPropagate ->
+ handlerStack.neverContinueBubbling ->
if event.keyCode > 31
keyChar = String.fromCharCode event.charCode
handleKeyCharForFindMode keyChar if keyChar
- keyup: (event) -> handlerStack.neverPropagate -> false
-
- # Prevent insert mode from detecting a focused editable element.
- @handlers.push handlerStack.push
- focus: (event) -> handlerStack.neverPropagate (event) ->
+ keyup: (event) => @suppressEvent
Mode.updateBadge()
-class FindModeWithoutBadge extends FindMode
- constructor: -> super ""
-
performFindInPlace = ->
cachedScrollX = window.scrollX
cachedScrollY = window.scrollY
@@ -793,7 +786,7 @@ executeFind = (query, options) ->
HUD.hide(true)
# ignore the selectionchange event generated by find()
document.removeEventListener("selectionchange",restoreDefaultSelectionHighlight, true)
- Mode.runIn FindModeWithoutBadge, ->
+ Mode.runIn FocusMustNotTriggerInsertMode, ->
result = window.find(query, options.caseSensitive, options.backwards, true, false, true, false)
setTimeout(
-> document.addEventListener("selectionchange", restoreDefaultSelectionHighlight, true)
diff --git a/lib/handler_stack.coffee b/lib/handler_stack.coffee
index d2d0672a..f05413d3 100644
--- a/lib/handler_stack.coffee
+++ b/lib/handler_stack.coffee
@@ -51,13 +51,12 @@ class HandlerStack
isChromeEvent: (event) ->
event?.preventDefault? and event?.stopImmediatePropagation?
- # Convenience wrapper for handlers which always continue propagation.
- alwaysPropagate: (handler) ->
+ # Convenience wrappers.
+ alwaysContinueBubbling: (handler) ->
handler()
true
- # Convenience wrapper for handlers which never continue propagation.
- neverPropagate: (handler) ->
+ neverContinueBubbling: (handler) ->
handler()
false