aboutsummaryrefslogtreecommitdiffstats
path: root/background_scripts/marks.coffee
blob: db9c4ae2634cc1ffec6b5f7a0f9fa2837ffe0122 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
root = window.Marks = {}

marks = {}

root.create = (req, sender) ->
  marks[req.markName] =
    tabId: sender.tab.id
    scrollX: req.scrollX
    scrollY: req.scrollY

chrome.tabs.onUpdated.addListener (tabId, changeInfo, tab) ->
  if changeInfo.url?
    removeMarksForTab tabId

chrome.tabs.onRemoved.addListener (tabId, removeInfo) ->
  # XXX(jez): what about restored tabs?
  removeMarksForTab tabId

removeMarksForTab = (id) ->
  for markName, mark of marks
    if mark.tabId is id
      delete marks[markName]

root.goto = (req, sender) ->
  mark = marks[req.markName]
  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