aboutsummaryrefslogtreecommitdiffstats
path: root/content_scripts
diff options
context:
space:
mode:
Diffstat (limited to 'content_scripts')
-rw-r--r--content_scripts/marks.coffee101
1 files changed, 60 insertions, 41 deletions
diff --git a/content_scripts/marks.coffee b/content_scripts/marks.coffee
index 316ab951..f3dfd465 100644
--- a/content_scripts/marks.coffee
+++ b/content_scripts/marks.coffee
@@ -1,45 +1,64 @@
-root = window.Marks = {}
-root.activateCreateMode = ->
- handlerStack.push keydown: (e) ->
- keyChar = KeyboardUtils.getKeyChar(event)
- return unless keyChar isnt ""
+exit = (mode, continuation = null) ->
+ mode.exit()
+ continuation?()
+ false
- if /[A-Z]/.test keyChar
- chrome.runtime.sendMessage {
- handler: 'createMark',
- markName: keyChar
- scrollX: window.scrollX,
- scrollY: window.scrollY
- }, -> HUD.showForDuration "Created global mark '#{keyChar}'", 1000
- else if /[a-z]/.test keyChar
- [baseLocation, sep, hash] = window.location.href.split '#'
- localStorage["vimiumMark|#{baseLocation}|#{keyChar}"] = JSON.stringify
- scrollX: window.scrollX,
- scrollY: window.scrollY
- HUD.showForDuration "Created local mark '#{keyChar}'", 1000
+Marks =
+ activateCreateMode: ->
+ mode = new Mode
+ name: "create-mark"
+ indicator: "Create mark?"
+ keypress: -> false
+ keyup: -> false
+ keydown: (event) ->
+ keyChar = KeyboardUtils.getKeyChar(event)
+ if /[A-Z]/.test keyChar
+ exit mode, ->
+ chrome.runtime.sendMessage
+ handler: 'createMark'
+ markName: keyChar
+ scrollX: window.scrollX
+ scrollY: window.scrollY
+ , -> HUD.showForDuration "Created global mark '#{keyChar}'.", 1000
+ else if /[a-z]/.test keyChar
+ [baseLocation, sep, hash] = window.location.href.split '#'
+ localStorage["vimiumMark|#{baseLocation}|#{keyChar}"] = JSON.stringify
+ scrollX: window.scrollX,
+ scrollY: window.scrollY
+ exit mode, -> HUD.showForDuration "Created local mark '#{keyChar}'.", 1000
+ else if event.shiftKey
+ false
+ else
+ exit mode
- @remove()
+ activateGotoMode: ->
+ mode = new Mode
+ name: "goto-mark"
+ indicator: "Go to mark?"
+ keypress: -> false
+ keyup: -> false
+ keydown: (event) ->
+ keyChar = KeyboardUtils.getKeyChar(event)
+ if /[A-Z]/.test keyChar
+ exit mode, ->
+ chrome.runtime.sendMessage
+ handler: 'gotoMark'
+ markName: keyChar
+ else if /[a-z]/.test keyChar
+ [baseLocation, sep, hash] = window.location.href.split '#'
+ markString = localStorage["vimiumMark|#{baseLocation}|#{keyChar}"]
+ exit mode, ->
+ if markString?
+ mark = JSON.parse markString
+ window.scrollTo mark.scrollX, mark.scrollY
+ HUD.showForDuration "Jumped to local mark '#{keyChar}'", 1000
+ else
+ HUD.showForDuration "Local mark not set: '#{keyChar}'.", 1000
+ else if event.shiftKey
+ false
+ else
+ exit mode
- false
-
-root.activateGotoMode = ->
- handlerStack.push keydown: (e) ->
- keyChar = KeyboardUtils.getKeyChar(event)
- return unless keyChar isnt ""
-
- if /[A-Z]/.test keyChar
- chrome.runtime.sendMessage
- handler: 'gotoMark'
- markName: keyChar
- else if /[a-z]/.test keyChar
- [baseLocation, sep, hash] = window.location.href.split '#'
- markString = localStorage["vimiumMark|#{baseLocation}|#{keyChar}"]
- if markString?
- mark = JSON.parse markString
- window.scrollTo mark.scrollX, mark.scrollY
- HUD.showForDuration "Jumped to local mark '#{keyChar}'", 1000
-
- @remove()
-
- false
+root = exports ? window
+root.Marks = Marks