diff options
| author | Stephen Blott | 2016-03-11 09:57:52 +0000 | 
|---|---|---|
| committer | Stephen Blott | 2016-03-28 05:43:42 +0100 | 
| commit | 20fa0828cbb0b71159cf0a519341d120b78c5466 (patch) | |
| tree | 55ebde4242809cadb153d226e178b56bddb4cda0 /background_scripts | |
| parent | 17379d86faefdeb158b30ccdfb5c3814008bfea3 (diff) | |
| download | vimium-20fa0828cbb0b71159cf0a519341d120b78c5466.tar.bz2 | |
Global link hints...
TODO:
  - fix tests
Diffstat (limited to 'background_scripts')
| -rw-r--r-- | background_scripts/main.coffee | 25 | 
1 files changed, 25 insertions, 0 deletions
| diff --git a/background_scripts/main.coffee b/background_scripts/main.coffee index 4ce8c03a..44bb4e4a 100644 --- a/background_scripts/main.coffee +++ b/background_scripts/main.coffee @@ -319,6 +319,30 @@ cycleToFrame = (frames, frameId, count = 0) ->    count = (count + Math.max 0, frames.indexOf frameId) % frames.length    [frames[count..]..., frames[0...count]...] +HintCoordinator = +  tabState: {} + +  onMessage: (request, sender) -> +    if request.name of this +      this[request.name] extend request, tabId: sender.tab.id +    else +      # The message is not for us.  It's for all frames, so we bounce it there. +      @sendMessage request.name, sender.tab.id, request + +  sendMessage: (handler, tabId, request = {}) -> +    chrome.tabs.sendMessage tabId, extend request, {name: "linkHintsMessage", handler} + +  activateMode: ({tabId, frameId, modeIndex}) -> +    @tabState[tabId] = {frameIds: frameIdsForTab[tabId], hints: [], modeIndex, frameId} +    @sendMessage "getHints", tabId + +  postHints: ({tabId, frameId, hints}) -> +    @tabState[tabId].hints.push hints... +    @tabState[tabId].frameIds = @tabState[tabId].frameIds.filter (fId) -> fId != frameId +    if @tabState[tabId].frameIds.length == 0 +      @sendMessage "activateLinkHintsMode", tabId, @tabState[tabId] +      delete @tabState[tabId] # We won't be needing this any more. +  # Port handler mapping  portHandlers =    completions: handleCompletions @@ -344,6 +368,7 @@ sendRequestHandlers =    # Send a message to all frames in the current tab.    sendMessageToFrames: (request, sender) -> chrome.tabs.sendMessage sender.tab.id, request.message    fetchFileContents: (request, sender) -> fetchFileContents request.fileName +  linkHintsMessage: HintCoordinator.onMessage.bind HintCoordinator    # For debugging only. This allows content scripts to log messages to the extension's logging page.    log: ({frameId, message}, sender) -> BgUtils.log "#{frameId} #{message}", sender | 
