aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--background_scripts/marks.coffee24
-rw-r--r--content_scripts/marks.coffee101
2 files changed, 75 insertions, 50 deletions
diff --git a/background_scripts/marks.coffee b/background_scripts/marks.coffee
index 15d41205..db9c4ae2 100644
--- a/background_scripts/marks.coffee
+++ b/background_scripts/marks.coffee
@@ -23,12 +23,18 @@ removeMarksForTab = (id) ->
root.goto = (req, sender) ->
mark = marks[req.markName]
- chrome.tabs.update mark.tabId, selected: true
- chrome.tabs.sendMessage mark.tabId,
- name: "setScrollPosition"
- scrollX: mark.scrollX
- scrollY: mark.scrollY
- chrome.tabs.sendMessage mark.tabId,
- name: "showHUDforDuration",
- text: "Jumped to global mark '#{req.markName}'"
- duration: 1000
+ if mark?
+ chrome.tabs.update mark.tabId, selected: true
+ chrome.tabs.sendMessage mark.tabId,
+ name: "setScrollPosition"
+ scrollX: mark.scrollX
+ scrollY: mark.scrollY
+ chrome.tabs.sendMessage mark.tabId,
+ name: "showHUDforDuration",
+ text: "Jumped to global mark '#{req.markName}'."
+ duration: 1000
+ else
+ chrome.tabs.sendMessage sender.tab.id,
+ name: "showHUDforDuration",
+ text: "Global mark not set: '#{req.markName}'."
+ duration: 1000
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