diff options
Diffstat (limited to 'src/background')
| -rw-r--r-- | src/background/shared/completions/tabs.js | 12 | ||||
| -rw-r--r-- | src/background/shared/tabs.js | 48 | 
2 files changed, 27 insertions, 33 deletions
| diff --git a/src/background/shared/completions/tabs.js b/src/background/shared/completions/tabs.js index 8c0f1f9..bdb2741 100644 --- a/src/background/shared/completions/tabs.js +++ b/src/background/shared/completions/tabs.js @@ -1,12 +1,8 @@ +import * as tabs from '../tabs'; +  const getCompletions = (keyword, excludePinned) => { -  return browser.tabs.query({ currentWindow: true }).then((tabs) => { -    let matched = tabs.filter((t) => { -      return t.url.includes(keyword) || t.title && t.title.includes(keyword); -    }).filter((t) => { -      return !(excludePinned && t.pinned); -    }); -    return matched; -  }); +  return tabs.queryByKeyword(keyword, excludePinned);  }; +  export { getCompletions }; diff --git a/src/background/shared/tabs.js b/src/background/shared/tabs.js index 8135d0e..6b171a3 100644 --- a/src/background/shared/tabs.js +++ b/src/background/shared/tabs.js @@ -12,37 +12,38 @@ const closeTabForce = (id) => {    return browser.tabs.remove(id);  }; -const closeTabByKeywords = (keyword) => { +const queryByKeyword = (keyword, excludePinned = false) => {    return browser.tabs.query({ currentWindow: true }).then((tabs) => { -    let matched = tabs.filter((t) => { -      return t.url.includes(keyword) || t.title.includes(keyword); -    }).filter(t => !t.pinned); +    return tabs.filter((t) => { +      return t.url.includes(keyword) || t.title && t.title.includes(keyword); +    }).filter((t) => { +      return !(excludePinned && t.pinned); +    }); +  }); +}; -    if (matched.length === 0) { +const closeTabByKeywords = (keyword) => { +  return queryByKeyword(keyword, false).then((tabs) => { +    if (tabs.length === 0) {        throw new Error('No matching buffer for ' + keyword); -    } else if (matched.length > 1) { +    } else if (tabs.length > 1) {        throw new Error('More than one match for ' + keyword);      } -    browser.tabs.remove(matched[0].id); +    browser.tabs.remove(tabs[0].id);    });  };  const closeTabByKeywordsForce = (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) { +  return queryByKeyword(keyword, true).then((tabs) => { +    if (tabs.length === 0) {        throw new Error('No matching buffer for ' + keyword); -    } else if (matched.length > 1) { +    } else if (tabs.length > 1) {        throw new Error('More than one match for ' + keyword);      } -    browser.tabs.remove(matched[0].id); +    browser.tabs.remove(tabs[0].id);    });  }; -  const closeTabsByKeywords = (keyword) => {    tabCompletions.getCompletions(keyword).then((tabs) => {      let tabs2 = tabs.filter(tab => !tab.pinned); @@ -85,20 +86,16 @@ const selectAt = (index) => {  };  const selectByKeyword = (current, keyword) => { -  return browser.tabs.query({ currentWindow: true }).then((tabs) => { -    let matched = tabs.filter((t) => { -      return t.url.includes(keyword) || t.title && t.title.includes(keyword); -    }); - -    if (matched.length === 0) { +  return queryByKeyword(keyword).then((tabs) => { +    if (tabs.length === 0) {        throw new RangeError('No matching buffer for ' + keyword);      } -    for (let tab of matched) { +    for (let tab of tabs) {        if (tab.index > current.index) {          return browser.tabs.update(tab.id, { active: true });        }      } -    return browser.tabs.update(matched[0].id, { active: true }); +    return browser.tabs.update(tabs[0].id, { active: true });    });  }; @@ -165,7 +162,8 @@ const duplicate = (id) => {  };  export { -  closeTab, closeTabForce, closeTabByKeywords, closeTabByKeywordsForce, +  closeTab, closeTabForce, +  queryByKeyword, closeTabByKeywords, closeTabByKeywordsForce,    closeTabsByKeywords, closeTabsByKeywordsForce,    reopenTab, selectAt, selectByKeyword,    selectPrevTab, selectNextTab, selectFirstTab, | 
