aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Blott2015-01-02 15:01:32 +0000
committerStephen Blott2015-01-02 15:01:32 +0000
commitb7d5e25e353010505db7754e97d4387c8aa6b8fc (patch)
tree4208ecdda9f53ae22cb8e0d36aa8ffb2910dc9bb
parentd4c43d8f9095325b41544ad7811cc131c1b186f1 (diff)
downloadvimium-b7d5e25e353010505db7754e97d4387c8aa6b8fc.tar.bz2
Modes; simplify badge handling.
-rw-r--r--background_scripts/main.coffee2
-rw-r--r--content_scripts/mode_insert.coffee28
-rw-r--r--content_scripts/mode_passkeys.coffee7
-rw-r--r--content_scripts/vimium_frontend.coffee32
4 files changed, 33 insertions, 36 deletions
diff --git a/background_scripts/main.coffee b/background_scripts/main.coffee
index fc0a792f..8d36de95 100644
--- a/background_scripts/main.coffee
+++ b/background_scripts/main.coffee
@@ -352,7 +352,7 @@ setBadge = (request) ->
root.updateActiveState = updateActiveState = (tabId) ->
enabledIcon = "icons/browser_action_enabled.png"
disabledIcon = "icons/browser_action_disabled.png"
- partialIcon = "icons/browser_action_partial.png"
+ partialIcon = enabledIcon # Let's try diabling that while we're playing with badges... "icons/browser_action_partial.png"
chrome.tabs.get tabId, (tab) ->
chrome.tabs.sendMessage tabId, { name: "getActiveState" }, (response) ->
if response
diff --git a/content_scripts/mode_insert.coffee b/content_scripts/mode_insert.coffee
index f37cf1ad..9504edfd 100644
--- a/content_scripts/mode_insert.coffee
+++ b/content_scripts/mode_insert.coffee
@@ -31,6 +31,17 @@ class InsertMode extends Mode
@activate() if document.activeElement?.isContentEditable
@isInsertMode
+ activate: ->
+ unless @isInsertMode
+ @isInsertMode = true
+ @badge = "I"
+ Mode.updateBadge()
+
+ deactivate: ->
+ @isInsertMode = false
+ @badge = ""
+ Mode.updateBadge()
+
generateKeyHandler: (type) ->
(event) =>
return Mode.propagate unless @isActive()
@@ -43,24 +54,12 @@ class InsertMode extends Mode
# right thing to do for most common use cases. However, it could also cripple flash-based sites and
# games. See discussion in #1211 and #1194.
event.srcElement.blur()
- @isInsertMode = false
- Mode.updateBadge()
+ @deactivate()
Mode.suppressPropagation
- activate: ->
- unless @isInsertMode
- @isInsertMode = true
- Mode.updateBadge()
-
- # Override updateBadgeForMode() from Mode.updateBadgeForMode().
- updateBadgeForMode: (badge) ->
- handlerStack.alwaysPropagate =>
- super badge if @isActive()
-
constructor: ->
super
name: "insert"
- badge: "I"
keydown: @generateKeyHandler "keydown"
keypress: @generateKeyHandler "keypress"
keyup: @generateKeyHandler "keyup"
@@ -73,8 +72,7 @@ class InsertMode extends Mode
blur: (event) =>
handlerStack.alwaysPropagate =>
if @isInsertMode and @isFocusable event.target
- @isInsertMode = false
- Mode.updateBadge()
+ @deactivate()
# We may already have been dropped into insert mode. So check.
Mode.updateBadge()
diff --git a/content_scripts/mode_passkeys.coffee b/content_scripts/mode_passkeys.coffee
index bb4518ae..a953deca 100644
--- a/content_scripts/mode_passkeys.coffee
+++ b/content_scripts/mode_passkeys.coffee
@@ -28,20 +28,15 @@ class PassKeysMode extends Mode
@passKeys = (request.enabled and request.passKeys) or ""
if request.keyQueue?
@keyQueue = request.keyQueue
+ @badge = if @passKeys and not @keyQueue then "P" else ""
Mode.updateBadge()
constructor: ->
super
name: "passkeys"
- badge: "P"
keydown: (event) => @handlePassKeyEvent event
keypress: (event) => @handlePassKeyEvent event
keyup: -> Mode.propagate
- # Overriding updateBadgeForMode() from Mode.updateBadgeForMode().
- updateBadgeForMode: (badge) ->
- handlerStack.alwaysPropagate =>
- super badge if @passKeys and not @keyQueue
-
root = exports ? window
root.PassKeysMode = PassKeysMode
diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee
index fb6199bf..2df2e226 100644
--- a/content_scripts/vimium_frontend.coffee
+++ b/content_scripts/vimium_frontend.coffee
@@ -106,6 +106,21 @@ frameId = Math.floor(Math.random()*999999999)
hasModifiersRegex = /^<([amc]-)+.>/
+class NormalMode extends Mode
+ constructor: ->
+ super
+ name: "normal"
+ badge: "N"
+ keydown: onKeydown
+ keypress: onKeypress
+ keyup: onKeyup
+
+ updateBadgeForMode: (badge) ->
+ handlerStack.alwaysPropagate =>
+ # Idea... Instead of an icon, we could show the keyQueue here (if it's non-empty).
+ super badge
+ badge.badge = "" unless isEnabledForUrl
+
#
# Complete initialization work that sould be done prior to DOMReady.
#
@@ -115,20 +130,9 @@ initializePreDomReady = ->
# Install normal mode. This is at the bottom of both the mode stack and the handler stack, and is never
# deactivated.
- new Mode
- name: "normal"
- badge: "N"
- keydown: onKeydown
- keypress: onKeypress
- keyup: onKeyup
-
- # Overriding updateBadgeForMode() from Mode.updateBadgeForMode().
- updateBadgeForMode: (badge) ->
- handlerStack.alwaysPropagate =>
- badge.badge ||= if keyQueue then keyQueue else @badge
- badge.badge = "" unless isEnabledForUrl
-
- # Initialize the scroller. The scroller install a key handler, and this is next on the handler stack,
+ new NormalMode()
+
+ # Initialize the scroller. The scroller installs a key handler, and this is next on the handler stack,
# immediately above normal mode.
Scroller.init settings