Merge pull request #387 from ueokande/open-from-bookmarks
Open URLs from bookmarks
This commit is contained in:
		
						commit
						ef6bbd117e
					
				
					 3 changed files with 56 additions and 9 deletions
				
			
		|  | @ -32,7 +32,8 @@ | ||||||
|     "storage", |     "storage", | ||||||
|     "tabs", |     "tabs", | ||||||
|     "clipboardRead", |     "clipboardRead", | ||||||
|     "notifications" |     "notifications", | ||||||
|  |     "bookmarks" | ||||||
|   ], |   ], | ||||||
|   "web_accessible_resources": [ |   "web_accessible_resources": [ | ||||||
|     "build/console.html", |     "build/console.html", | ||||||
|  |  | ||||||
							
								
								
									
										15
									
								
								src/background/shared/completions/bookmarks.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/background/shared/completions/bookmarks.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | ||||||
|  | const getCompletions = (keywords) => { | ||||||
|  |   return browser.bookmarks.search({ query: keywords }).then((items) => { | ||||||
|  |     return items.filter((item) => { | ||||||
|  |       let url = undefined; | ||||||
|  |       try { | ||||||
|  |         url = new URL(item.url); | ||||||
|  |       } catch (e) { | ||||||
|  |         return false; | ||||||
|  |       } | ||||||
|  |       return item.type === 'bookmark' && url.protocol !== 'place:'; | ||||||
|  |     }).slice(0, 10); | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | export { getCompletions }; | ||||||
|  | @ -1,22 +1,47 @@ | ||||||
| import * as tabs from './tabs'; | import * as tabs from './tabs'; | ||||||
| import * as histories from './histories'; | import * as histories from './histories'; | ||||||
|  | import * as bookmarks from './bookmarks'; | ||||||
| 
 | 
 | ||||||
| const getOpenCompletions = (command, keywords, searchConfig) => { | const getSearchCompletions = (command, keywords, searchConfig) => { | ||||||
|   return histories.getCompletions(keywords).then((pages) => { |  | ||||||
|     let historyItems = pages.map((page) => { |  | ||||||
|       return { |  | ||||||
|         caption: page.title, |  | ||||||
|         content: command + ' ' + page.url, |  | ||||||
|         url: page.url |  | ||||||
|       }; |  | ||||||
|     }); |  | ||||||
|   let engineNames = Object.keys(searchConfig.engines); |   let engineNames = Object.keys(searchConfig.engines); | ||||||
|   let engineItems = engineNames.filter(name => name.startsWith(keywords)) |   let engineItems = engineNames.filter(name => name.startsWith(keywords)) | ||||||
|     .map(name => ({ |     .map(name => ({ | ||||||
|       caption: name, |       caption: name, | ||||||
|       content: command + ' ' + name |       content: command + ' ' + name | ||||||
|     })); |     })); | ||||||
|  |   return Promise.resolve(engineItems); | ||||||
|  | }; | ||||||
| 
 | 
 | ||||||
|  | const getHistoryCompletions = (command, keywords) => { | ||||||
|  |   return histories.getCompletions(keywords).then((pages) => { | ||||||
|  |     return pages.map((page) => { | ||||||
|  |       return { | ||||||
|  |         caption: page.title, | ||||||
|  |         content: command + ' ' + page.url, | ||||||
|  |         url: page.url | ||||||
|  |       }; | ||||||
|  |     }); | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | const getBookmarksCompletions = (command, keywords) => { | ||||||
|  |   return bookmarks.getCompletions(keywords).then((items) => { | ||||||
|  |     return items.map((item) => { | ||||||
|  |       return { | ||||||
|  |         caption: item.title, | ||||||
|  |         content: command + ' ' + item.url, | ||||||
|  |         url: item.url, | ||||||
|  |       }; | ||||||
|  |     }); | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | const getOpenCompletions = (command, keywords, searchConfig) => { | ||||||
|  |   return Promise.all([ | ||||||
|  |     getSearchCompletions(command, keywords, searchConfig), | ||||||
|  |     getHistoryCompletions(command, keywords), | ||||||
|  |     getBookmarksCompletions(command, keywords), | ||||||
|  |   ]).then(([engineItems, historyItems, bookmarkItems]) => { | ||||||
|     let completions = []; |     let completions = []; | ||||||
|     if (engineItems.length > 0) { |     if (engineItems.length > 0) { | ||||||
|       completions.push({ |       completions.push({ | ||||||
|  | @ -30,6 +55,12 @@ const getOpenCompletions = (command, keywords, searchConfig) => { | ||||||
|         items: historyItems |         items: historyItems | ||||||
|       }); |       }); | ||||||
|     } |     } | ||||||
|  |     if (bookmarkItems.length > 0) { | ||||||
|  |       completions.push({ | ||||||
|  |         name: 'Bookmarks', | ||||||
|  |         items: bookmarkItems | ||||||
|  |       }); | ||||||
|  |     } | ||||||
|     return completions; |     return completions; | ||||||
|   }); |   }); | ||||||
| }; | }; | ||||||
|  |  | ||||||
		Reference in a new issue