aboutsummaryrefslogtreecommitdiff
path: root/src/background/tabs.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/background/tabs.js')
-rw-r--r--src/background/tabs.js49
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 };