diff options
| author | Stephen Blott | 2016-02-09 15:28:50 +0000 | 
|---|---|---|
| committer | Stephen Blott | 2016-02-09 15:31:09 +0000 | 
| commit | 4ada22e85dcd061fa806a5fe72a9dc3f1cfe0442 (patch) | |
| tree | 3147bb1ffd7d6b46d94141d8d6e51b2a88fe3efe /background_scripts/bg_utils.coffee | |
| parent | b6a0cc82d138dd67a77d8e3298c6f56362e729be (diff) | |
| download | vimium-4ada22e85dcd061fa806a5fe72a9dc3f1cfe0442.tar.bz2 | |
BgUtils; move tabRecency to bg_tiles.coffee.
Certain background-page utilities are actually shared, and are therefore
best placed in place that reflects that.
Here, tabRecency is moved to the new gb_utils.coffee in preparation for
implementing a go-to-previous-tab command.  In particular, it is no
longer appropriate that tabRecency be embedded within the completion
code.
logMessage() from main.coffee is also a candidate for moving to
bg_utils.coffee.
Diffstat (limited to 'background_scripts/bg_utils.coffee')
| -rw-r--r-- | background_scripts/bg_utils.coffee | 45 | 
1 files changed, 45 insertions, 0 deletions
| diff --git a/background_scripts/bg_utils.coffee b/background_scripts/bg_utils.coffee new file mode 100644 index 00000000..9c1674bf --- /dev/null +++ b/background_scripts/bg_utils.coffee @@ -0,0 +1,45 @@ +root = exports ? window + +# TabRecency associates a logical timestamp with each tab id.  These are used to provide an initial +# recency-based ordering in the tabs vomnibar (which allows jumping quickly between recently-visited tabs). +class TabRecency +  timestamp: 1 +  current: -1 +  cache: {} +  lastVisited: null +  lastVisitedTime: null +  timeDelta: 500 # Milliseconds. + +  constructor: -> +    chrome.tabs.onActivated.addListener (activeInfo) => @register activeInfo.tabId +    chrome.tabs.onRemoved.addListener (tabId) => @deregister tabId + +    chrome.tabs.onReplaced.addListener (addedTabId, removedTabId) => +      @deregister removedTabId +      @register addedTabId + +  register: (tabId) -> +    currentTime = new Date() +    # Register tabId if it has been visited for at least @timeDelta ms.  Tabs which are visited only for a +    # very-short time (e.g. those passed through with `5J`) aren't registered as visited at all. +    if @lastVisitedTime? and @timeDelta <= currentTime - @lastVisitedTime +      @cache[@lastVisited] = ++@timestamp + +    @current = @lastVisited = tabId +    @lastVisitedTime = currentTime + +  deregister: (tabId) -> +    if tabId == @lastVisited +      # Ensure we don't register this tab, since it's going away. +      @lastVisited = @lastVisitedTime = null +    delete @cache[tabId] + +  # Recently-visited tabs get a higher score (except the current tab, which gets a low score). +  recencyScore: (tabId) -> +    @cache[tabId] ||= 1 +    if tabId == @current then 0.0 else @cache[tabId] / @timestamp + +BgUtils = +  tabRecency: new TabRecency() + +root.BgUtils = BgUtils | 
