diff options
Diffstat (limited to 'src/background/tabs.js')
-rw-r--r-- | src/background/tabs.js | 49 |
1 files changed, 39 insertions, 10 deletions
diff --git a/src/background/tabs.js b/src/background/tabs.js index 56f86eb..efecdc4 100644 --- a/src/background/tabs.js +++ b/src/background/tabs.js @@ -1,9 +1,9 @@ const closeTab = (id) => { - browser.tabs.remove(id); + return browser.tabs.remove(id); }; const reopenTab = () => { - browser.sessions.getRecentlyClosed({ + return browser.sessions.getRecentlyClosed({ maxResults: 1 }).then((sessions) => { if (sessions.length === 0) { @@ -11,40 +11,69 @@ const reopenTab = () => { } let session = sessions[0]; if (session.tab) { - browser.sessions.restore(session.tab.sessionId); + return browser.sessions.restore(session.tab.sessionId); } else { - browser.sessions.restore(session.window.sessionId); + return browser.sessions.restore(session.window.sessionId); } }); }; +const selectAt = (index) => { + return browser.tabs.query({ currentWindow: true }, (tabs) => { + if (tabs.length < 2) { + return; + } + if (index < 0 || tabs.length <= index) { + throw new RangeError(`tab ${index} does not exist`) + } + let id = tabs[index].id; + return browser.tabs.update(id, { active: true }) + }); +}; + +const selectByKeyword = (keyword) => { + return browser.tabs.query({ currentWindow: true }).then((tabs) => { + let matched = tabs.filter((t) => { + return t.url.includes(keyword) || t.title.includes(keyword) + }) + + if (matched.length == 0) { + throw new RangeError('No matching buffer for ' + keyword); + } else if (matched.length >= 2) { + throw new RangeError('More than one match for ' + keyword); + } + + return browser.tabs.update(matched[0].id, { active: true }); + }); +} + const selectPrevTab = (current, count) => { - chrome.tabs.query({ currentWindow: true }, (tabs) => { + return browser.tabs.query({ currentWindow: true }, (tabs) => { if (tabs.length < 2) { return; } let select = (current - count) % tabs.length let id = tabs[select].id; - chrome.tabs.update(id, { active: true }) + return browser.tabs.update(id, { active: true }) }); }; const selectNextTab = (current, count) => { - chrome.tabs.query({ currentWindow: true }, (tabs) => { + return browser.tabs.query({ currentWindow: true }, (tabs) => { if (tabs.length < 2) { return; } let select = (current + count + tabs.length) % tabs.length let id = tabs[select].id; - chrome.tabs.update(id, { active: true }) + return browser.tabs.update(id, { active: true }) }); }; const reload = (current, cache) => { - browser.tabs.reload( + return browser.tabs.reload( current.id, { bypassCache: cache } ); }; -export { closeTab, reopenTab, selectNextTab, selectPrevTab, reload }; +export { closeTab, reopenTab, selectAt, selectByKeyword, selectNextTab, selectPrevTab, reload }; |