open clipboard's URL in current/new tab
This commit is contained in:
		
							parent
							
								
									f484fda718
								
							
						
					
					
						commit
						54a7662cd1
					
				
					 8 changed files with 39 additions and 3 deletions
				
			
		
							
								
								
									
										2
									
								
								QA.md
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								QA.md
									
										
									
									
									
								
							|  | @ -46,6 +46,8 @@ The behaviors of the console are tested in [Console section](#consoles). | |||
| - [ ] <kbd>z</kbd><kbd>i</kbd>, <kbd>z</kbd><kbd>o</kbd>: zoom-in and zoom-out | ||||
| - [ ] <kbd>z</kbd><kbd>z</kbd>: set zoom level as default | ||||
| - [ ] <kbd>y</kbd>: yank current URL and show a message | ||||
| - [ ] <kbd>p</kbd>: open clipbord's URL in current tab | ||||
| - [ ] <kbd>P</kbd>: open clipbord's URL in new tab | ||||
| - [ ] Toggle enabled/disabled of plugin bu <kbd>Shift</kbd>+<kbd>Esc</kbd> | ||||
| 
 | ||||
| ### Following links | ||||
|  |  | |||
|  | @ -54,6 +54,8 @@ The default mappings are as follows: | |||
| - <kbd>z</kbd><kbd>i</kbd>, <kbd>z</kbd><kbd>o</kbd>: zoom-in/zoom-out | ||||
| - <kbd>z</kbd><kbd>z</kbd>: Set default zoom level | ||||
| - <kbd>y</kbd>: copy URL in current tab | ||||
| - <kbd>p</kbd>: open clipbord's URL in current tab | ||||
| - <kbd>P</kbd>: open clipbord's URL in new tab | ||||
| - <kbd>Shift</kbd>+<kbd>Esc</kbd>: enable or disable the add-on in current tab. | ||||
| 
 | ||||
| ### Console commands | ||||
|  |  | |||
|  | @ -30,7 +30,8 @@ | |||
|     "history", | ||||
|     "sessions", | ||||
|     "storage", | ||||
|     "tabs" | ||||
|     "tabs", | ||||
|     "clipboardRead" | ||||
|   ], | ||||
|   "web_accessible_resources": [ | ||||
|     "build/console.html", | ||||
|  |  | |||
|  | @ -60,6 +60,8 @@ const exec = (operation) => { | |||
|       type: messages.CONSOLE_SHOW_INFO, | ||||
|       text: 'Current url yanked', | ||||
|     }); | ||||
|   case operations.URLS_PASTE: | ||||
|     return urls.paste(window, operation.newTab ? operation.newTab : false); | ||||
|   default: | ||||
|     browser.runtime.sendMessage({ | ||||
|       type: messages.BACKGROUND_OPERATION, | ||||
|  |  | |||
|  | @ -1,3 +1,5 @@ | |||
| import messages from 'shared/messages'; | ||||
| 
 | ||||
| const yank = (win) => { | ||||
|   let input = win.document.createElement('input'); | ||||
|   win.document.body.append(input); | ||||
|  | @ -12,4 +14,26 @@ const yank = (win) => { | |||
|   input.remove(); | ||||
| }; | ||||
| 
 | ||||
| export { yank }; | ||||
| const paste = (win, newTab) => { | ||||
|   let textarea = win.document.createElement('textarea'); | ||||
|   win.document.body.append(textarea); | ||||
| 
 | ||||
|   textarea.style.position = 'fixed'; | ||||
|   textarea.style.top = '-100px'; | ||||
|   textarea.contentEditable = 'true'; | ||||
|   textarea.focus(); | ||||
| 
 | ||||
|   if (win.document.execCommand('paste')) { | ||||
|     if (/^(https?|ftp):\/\//.test(textarea.textContent)) { | ||||
|       browser.runtime.sendMessage({ | ||||
|         type: messages.OPEN_URL, | ||||
|         url: textarea.textContent, | ||||
|         newTab: newTab ? newTab : false, | ||||
|       }); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   textarea.remove(); | ||||
| }; | ||||
| 
 | ||||
| export { yank, paste }; | ||||
|  |  | |||
|  | @ -52,6 +52,8 @@ const KeyMapFields = [ | |||
|   ], [ | ||||
|     ['addon.toggle.enabled', 'Enable or disable'], | ||||
|     ['urls.yank', 'Copy current URL'], | ||||
|     ['urls.paste?{"newTab":false}', 'Open clipboard\'s URL in current tab'], | ||||
|     ['urls.paste?{"newTab":true}', 'Open clipboard\'s URL in new tab'], | ||||
|     ['zoom.in', 'Zoom-in'], | ||||
|     ['zoom.out', 'Zoom-out'], | ||||
|     ['zoom.neutral', 'Reset zoom level'], | ||||
|  |  | |||
|  | @ -49,8 +49,9 @@ export default { | |||
|   ZOOM_OUT: 'zoom.out', | ||||
|   ZOOM_NEUTRAL: 'zoom.neutral', | ||||
| 
 | ||||
|   // Url yank
 | ||||
|   // Url yank/paste
 | ||||
|   URLS_YANK: 'urls.yank', | ||||
|   URLS_PASTE: 'urls.paste', | ||||
| 
 | ||||
|   // Find
 | ||||
|   FIND_START: 'find.start', | ||||
|  |  | |||
|  | @ -44,6 +44,8 @@ export default { | |||
|     "gu": { "type": "navigate.parent" }, | ||||
|     "gU": { "type": "navigate.root" }, | ||||
|     "y": { "type": "urls.yank" }, | ||||
|     "p": { "type": "urls.paste", "newTab": false }, | ||||
|     "P": { "type": "urls.paste", "newTab": true }, | ||||
|     "/": { "type": "find.start" }, | ||||
|     "n": { "type": "find.next" }, | ||||
|     "N": { "type": "find.prev" }, | ||||
|  |  | |||
		Reference in a new issue