Merge pull request #405 from ueokande/ignore-case-tab-filtering
Ignore case tab filtering
This commit is contained in:
		
						commit
						f467e9bf20
					
				
					 2 changed files with 28 additions and 33 deletions
				
			
		|  | @ -1,12 +1,8 @@ | ||||||
|  | import * as tabs from '../tabs'; | ||||||
|  | 
 | ||||||
| const getCompletions = (keyword, excludePinned) => { | const getCompletions = (keyword, excludePinned) => { | ||||||
|   return browser.tabs.query({ currentWindow: true }).then((tabs) => { |   return tabs.queryByKeyword(keyword, excludePinned); | ||||||
|     let matched = tabs.filter((t) => { |  | ||||||
|       return t.url.includes(keyword) || t.title && t.title.includes(keyword); |  | ||||||
|     }).filter((t) => { |  | ||||||
|       return !(excludePinned && t.pinned); |  | ||||||
|     }); |  | ||||||
|     return matched; |  | ||||||
|   }); |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| export { getCompletions }; | export { getCompletions }; | ||||||
|  |  | ||||||
|  | @ -12,37 +12,39 @@ const closeTabForce = (id) => { | ||||||
|   return browser.tabs.remove(id); |   return browser.tabs.remove(id); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const closeTabByKeywords = (keyword) => { | const queryByKeyword = (keyword, excludePinned = false) => { | ||||||
|   return browser.tabs.query({ currentWindow: true }).then((tabs) => { |   return browser.tabs.query({ currentWindow: true }).then((tabs) => { | ||||||
|     let matched = tabs.filter((t) => { |     return tabs.filter((t) => { | ||||||
|       return t.url.includes(keyword) || t.title.includes(keyword); |       return t.url.toLowerCase().includes(keyword.toLowerCase()) || | ||||||
|     }).filter(t => !t.pinned); |         t.title && t.title.toLowerCase().includes(keyword.toLowerCase()); | ||||||
|  |     }).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); |       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); |       throw new Error('More than one match for ' + keyword); | ||||||
|     } |     } | ||||||
|     browser.tabs.remove(matched[0].id); |     browser.tabs.remove(tabs[0].id); | ||||||
|   }); |   }); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const closeTabByKeywordsForce = (keyword) => { | const closeTabByKeywordsForce = (keyword) => { | ||||||
|   return browser.tabs.query({ currentWindow: true }).then((tabs) => { |   return queryByKeyword(keyword, true).then((tabs) => { | ||||||
|     let matched = tabs.filter((t) => { |     if (tabs.length === 0) { | ||||||
|       return t.url.includes(keyword) || t.title.includes(keyword); |  | ||||||
|     }); |  | ||||||
| 
 |  | ||||||
|     if (matched.length === 0) { |  | ||||||
|       throw new Error('No matching buffer for ' + keyword); |       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); |       throw new Error('More than one match for ' + keyword); | ||||||
|     } |     } | ||||||
|     browser.tabs.remove(matched[0].id); |     browser.tabs.remove(tabs[0].id); | ||||||
|   }); |   }); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| const closeTabsByKeywords = (keyword) => { | const closeTabsByKeywords = (keyword) => { | ||||||
|   tabCompletions.getCompletions(keyword).then((tabs) => { |   tabCompletions.getCompletions(keyword).then((tabs) => { | ||||||
|     let tabs2 = tabs.filter(tab => !tab.pinned); |     let tabs2 = tabs.filter(tab => !tab.pinned); | ||||||
|  | @ -85,20 +87,16 @@ const selectAt = (index) => { | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const selectByKeyword = (current, keyword) => { | const selectByKeyword = (current, keyword) => { | ||||||
|   return browser.tabs.query({ currentWindow: true }).then((tabs) => { |   return queryByKeyword(keyword).then((tabs) => { | ||||||
|     let matched = tabs.filter((t) => { |     if (tabs.length === 0) { | ||||||
|       return t.url.includes(keyword) || t.title.includes(keyword); |  | ||||||
|     }); |  | ||||||
| 
 |  | ||||||
|     if (matched.length === 0) { |  | ||||||
|       throw new RangeError('No matching buffer for ' + keyword); |       throw new RangeError('No matching buffer for ' + keyword); | ||||||
|     } |     } | ||||||
|     for (let tab of matched) { |     for (let tab of tabs) { | ||||||
|       if (tab.index > current.index) { |       if (tab.index > current.index) { | ||||||
|         return browser.tabs.update(tab.id, { active: true }); |         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 +163,8 @@ const duplicate = (id) => { | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| export { | export { | ||||||
|   closeTab, closeTabForce, closeTabByKeywords, closeTabByKeywordsForce, |   closeTab, closeTabForce, | ||||||
|  |   queryByKeyword, closeTabByKeywords, closeTabByKeywordsForce, | ||||||
|   closeTabsByKeywords, closeTabsByKeywordsForce, |   closeTabsByKeywords, closeTabsByKeywordsForce, | ||||||
|   reopenTab, selectAt, selectByKeyword, |   reopenTab, selectAt, selectByKeyword, | ||||||
|   selectPrevTab, selectNextTab, selectFirstTab, |   selectPrevTab, selectNextTab, selectFirstTab, | ||||||
|  |  | ||||||
		Reference in a new issue