Merge pull request #300 from usk/feature/open-clipboard's-url
open clipboard's URL in current/new tab
This commit is contained in:
commit
be1f8e4d71
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>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>z</kbd><kbd>z</kbd>: set zoom level as default
|
||||||
- [ ] <kbd>y</kbd>: yank current URL and show a message
|
- [ ] <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>
|
- [ ] Toggle enabled/disabled of plugin bu <kbd>Shift</kbd>+<kbd>Esc</kbd>
|
||||||
|
|
||||||
### Following links
|
### 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>i</kbd>, <kbd>z</kbd><kbd>o</kbd>: zoom-in/zoom-out
|
||||||
- <kbd>z</kbd><kbd>z</kbd>: Set default zoom level
|
- <kbd>z</kbd><kbd>z</kbd>: Set default zoom level
|
||||||
- <kbd>y</kbd>: copy URL in current tab
|
- <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.
|
- <kbd>Shift</kbd>+<kbd>Esc</kbd>: enable or disable the add-on in current tab.
|
||||||
|
|
||||||
### Console commands
|
### Console commands
|
||||||
|
|
|
@ -30,7 +30,8 @@
|
||||||
"history",
|
"history",
|
||||||
"sessions",
|
"sessions",
|
||||||
"storage",
|
"storage",
|
||||||
"tabs"
|
"tabs",
|
||||||
|
"clipboardRead"
|
||||||
],
|
],
|
||||||
"web_accessible_resources": [
|
"web_accessible_resources": [
|
||||||
"build/console.html",
|
"build/console.html",
|
||||||
|
|
|
@ -63,6 +63,8 @@ const exec = (operation, repeat, settings) => {
|
||||||
type: messages.CONSOLE_SHOW_INFO,
|
type: messages.CONSOLE_SHOW_INFO,
|
||||||
text: 'Current url yanked',
|
text: 'Current url yanked',
|
||||||
});
|
});
|
||||||
|
case operations.URLS_PASTE:
|
||||||
|
return urls.paste(window, operation.newTab ? operation.newTab : false);
|
||||||
default:
|
default:
|
||||||
browser.runtime.sendMessage({
|
browser.runtime.sendMessage({
|
||||||
type: messages.BACKGROUND_OPERATION,
|
type: messages.BACKGROUND_OPERATION,
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import messages from 'shared/messages';
|
||||||
|
|
||||||
const yank = (win) => {
|
const yank = (win) => {
|
||||||
let input = win.document.createElement('input');
|
let input = win.document.createElement('input');
|
||||||
win.document.body.append(input);
|
win.document.body.append(input);
|
||||||
|
@ -12,4 +14,26 @@ const yank = (win) => {
|
||||||
input.remove();
|
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'],
|
['addon.toggle.enabled', 'Enable or disable'],
|
||||||
['urls.yank', 'Copy current URL'],
|
['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.in', 'Zoom-in'],
|
||||||
['zoom.out', 'Zoom-out'],
|
['zoom.out', 'Zoom-out'],
|
||||||
['zoom.neutral', 'Reset zoom level'],
|
['zoom.neutral', 'Reset zoom level'],
|
||||||
|
|
|
@ -49,8 +49,9 @@ export default {
|
||||||
ZOOM_OUT: 'zoom.out',
|
ZOOM_OUT: 'zoom.out',
|
||||||
ZOOM_NEUTRAL: 'zoom.neutral',
|
ZOOM_NEUTRAL: 'zoom.neutral',
|
||||||
|
|
||||||
// Url yank
|
// Url yank/paste
|
||||||
URLS_YANK: 'urls.yank',
|
URLS_YANK: 'urls.yank',
|
||||||
|
URLS_PASTE: 'urls.paste',
|
||||||
|
|
||||||
// Find
|
// Find
|
||||||
FIND_START: 'find.start',
|
FIND_START: 'find.start',
|
||||||
|
|
|
@ -44,6 +44,8 @@ export default {
|
||||||
"gu": { "type": "navigate.parent" },
|
"gu": { "type": "navigate.parent" },
|
||||||
"gU": { "type": "navigate.root" },
|
"gU": { "type": "navigate.root" },
|
||||||
"y": { "type": "urls.yank" },
|
"y": { "type": "urls.yank" },
|
||||||
|
"p": { "type": "urls.paste", "newTab": false },
|
||||||
|
"P": { "type": "urls.paste", "newTab": true },
|
||||||
"/": { "type": "find.start" },
|
"/": { "type": "find.start" },
|
||||||
"n": { "type": "find.next" },
|
"n": { "type": "find.next" },
|
||||||
"N": { "type": "find.prev" },
|
"N": { "type": "find.prev" },
|
||||||
|
|
Reference in a new issue