Open link as Clean Architecture
This commit is contained in:
		
							parent
							
								
									42d902982a
								
							
						
					
					
						commit
						0846587baf
					
				
					 5 changed files with 73 additions and 12 deletions
				
			
		|  | @ -1,6 +1,5 @@ | ||||||
| import messages from 'shared/messages'; | import messages from 'shared/messages'; | ||||||
| import * as commandActions from 'background/actions/command'; | import * as commandActions from 'background/actions/command'; | ||||||
| import * as tabActions from 'background/actions/tab'; |  | ||||||
| 
 | 
 | ||||||
| export default class BackgroundComponent { | export default class BackgroundComponent { | ||||||
|   constructor(store) { |   constructor(store) { | ||||||
|  | @ -22,14 +21,6 @@ export default class BackgroundComponent { | ||||||
|     let settings = this.store.getState().setting; |     let settings = this.store.getState().setting; | ||||||
| 
 | 
 | ||||||
|     switch (message.type) { |     switch (message.type) { | ||||||
|     case messages.OPEN_URL: |  | ||||||
|       if (message.newTab) { |  | ||||||
|         let action = tabActions.openNewTab( |  | ||||||
|           message.url, sender.tab.id, message.background, |  | ||||||
|           settings.value.properties.adjacenttab); |  | ||||||
|         return this.store.dispatch(action); |  | ||||||
|       } |  | ||||||
|       return this.store.dispatch(tabActions.openToTab(message.url, sender.tab)); |  | ||||||
|     case messages.CONSOLE_ENTER_COMMAND: |     case messages.CONSOLE_ENTER_COMMAND: | ||||||
|       this.store.dispatch( |       this.store.dispatch( | ||||||
|         commandActions.exec(sender.tab, message.text, settings.value), |         commandActions.exec(sender.tab, message.text, settings.value), | ||||||
|  |  | ||||||
							
								
								
									
										15
									
								
								src/background/controllers/link.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/background/controllers/link.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | ||||||
|  | import LinkInteractor from '../usecases/link'; | ||||||
|  | 
 | ||||||
|  | export default class LinkController { | ||||||
|  |   constructor() { | ||||||
|  |     this.linkInteractor = new LinkInteractor(); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   openToTab(url, tabId) { | ||||||
|  |     this.linkInteractor.openToTab(url, tabId); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   openNewTab(url, openerId, background) { | ||||||
|  |     this.linkInteractor.openNewTab(url, openerId, background); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | @ -3,6 +3,7 @@ import CompletionsController from '../controllers/completions'; | ||||||
| import SettingController from '../controllers/setting'; | import SettingController from '../controllers/setting'; | ||||||
| import FindController from '../controllers/find'; | import FindController from '../controllers/find'; | ||||||
| import AddonEnabledController from '../controllers/addon-enabled'; | import AddonEnabledController from '../controllers/addon-enabled'; | ||||||
|  | import LinkController from '../controllers/link'; | ||||||
| 
 | 
 | ||||||
| export default class ContentMessageListener { | export default class ContentMessageListener { | ||||||
|   constructor() { |   constructor() { | ||||||
|  | @ -10,6 +11,7 @@ export default class ContentMessageListener { | ||||||
|     this.completionsController = new CompletionsController(); |     this.completionsController = new CompletionsController(); | ||||||
|     this.findController = new FindController(); |     this.findController = new FindController(); | ||||||
|     this.addonEnabledController = new AddonEnabledController(); |     this.addonEnabledController = new AddonEnabledController(); | ||||||
|  |     this.linkController = new LinkController(); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   run() { |   run() { | ||||||
|  | @ -25,7 +27,7 @@ export default class ContentMessageListener { | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   onMessage(message) { |   onMessage(message, sender) { | ||||||
|     switch (message.type) { |     switch (message.type) { | ||||||
|     case messages.CONSOLE_QUERY_COMPLETIONS: |     case messages.CONSOLE_QUERY_COMPLETIONS: | ||||||
|       return this.onConsoleQueryCompletions(message.text); |       return this.onConsoleQueryCompletions(message.text); | ||||||
|  | @ -39,6 +41,9 @@ export default class ContentMessageListener { | ||||||
|       return this.onFindSetKeyword(message.keyword); |       return this.onFindSetKeyword(message.keyword); | ||||||
|     case messages.ADDON_ENABLED_RESPONSE: |     case messages.ADDON_ENABLED_RESPONSE: | ||||||
|       return this.onAddonEnabledResponse(message.enabled); |       return this.onAddonEnabledResponse(message.enabled); | ||||||
|  |     case messages.OPEN_URL: | ||||||
|  |       return this.onOpenUrl( | ||||||
|  |         message.newTab, message.url, sender.tab.id, message.background); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | @ -66,4 +71,11 @@ export default class ContentMessageListener { | ||||||
|   onAddonEnabledResponse(enabled) { |   onAddonEnabledResponse(enabled) { | ||||||
|     return this.addonEnabledController.indicate(enabled); |     return this.addonEnabledController.indicate(enabled); | ||||||
|   } |   } | ||||||
|  | 
 | ||||||
|  |   onOpenUrl(newTab, url, openerId, background) { | ||||||
|  |     if (newTab) { | ||||||
|  |       return this.linkController.openNewTab(url, openerId, background); | ||||||
|  |     } | ||||||
|  |     return this.linkController.openToTab(url, openerId); | ||||||
|  |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,6 +1,22 @@ | ||||||
| export default class TabPresenter { | export default class TabPresenter { | ||||||
|   create(url) { |   open(url, tabId) { | ||||||
|     browser.tabs.create({ url, }); |     return browser.tabs.update(tabId, { url }); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   create(url, { openerTabId, active }) { | ||||||
|  |     return browser.tabs.create({ url, openerTabId, active }); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   async createAdjacent(url, { openerTabId, active }) { | ||||||
|  |     let tabs = await browser.tabs.query({ | ||||||
|  |       active: true, currentWindow: true | ||||||
|  |     }); | ||||||
|  |     return browser.tabs.create({ | ||||||
|  |       url, | ||||||
|  |       openerTabId, | ||||||
|  |       active, | ||||||
|  |       index: tabs[0].index + 1 | ||||||
|  |     }); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   onSelected(listener) { |   onSelected(listener) { | ||||||
|  |  | ||||||
							
								
								
									
										27
									
								
								src/background/usecases/link.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/background/usecases/link.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,27 @@ | ||||||
|  | import SettingRepository from '../repositories/setting'; | ||||||
|  | import TabPresenter from '../presenters/tab'; | ||||||
|  | 
 | ||||||
|  | export default class LinkInteractor { | ||||||
|  |   constructor() { | ||||||
|  |     this.settingRepository = new SettingRepository(); | ||||||
|  |     this.tabPresenter = new TabPresenter(); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   openToTab(url, tabId) { | ||||||
|  |     this.tabPresenter.open(url, tabId); | ||||||
|  | 
 | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   async openNewTab(url, openerId, background) { | ||||||
|  |     let settings = await this.settingRepository.get(); | ||||||
|  |     let { adjacenttab } = settings.properties; | ||||||
|  |     if (adjacenttab) { | ||||||
|  |       return this.tabPresenter.create(url, { | ||||||
|  |         openerTabId: openerId, active: !background | ||||||
|  |       }); | ||||||
|  |     } | ||||||
|  |     return this.tabPresenter.create(url, { | ||||||
|  |       openerTabId: openerId, active: !background | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | } | ||||||
		Reference in a new issue