diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/background/usecases/command.js | 3 | ||||
-rw-r--r-- | src/background/usecases/parsers.js | 26 | ||||
-rw-r--r-- | src/content/actions/operation.js | 4 | ||||
-rw-r--r-- | src/content/urls.js | 17 | ||||
-rw-r--r-- | src/shared/urls.js | 25 |
5 files changed, 40 insertions, 35 deletions
diff --git a/src/background/usecases/command.js b/src/background/usecases/command.js index 3dbf768..7fd2e57 100644 --- a/src/background/usecases/command.js +++ b/src/background/usecases/command.js @@ -1,4 +1,5 @@ import * as parsers from './parsers'; +import * as urls from '../../shared/urls'; import TabPresenter from '../presenters/tab'; import WindowPresenter from '../presenters/window'; import SettingRepository from '../repositories/setting'; @@ -103,6 +104,6 @@ export default class CommandIndicator { async urlOrSearch(keywords) { let settings = await this.settingRepository.get(); - return parsers.normalizeUrl(keywords, settings.search); + return urls.normalizeUrl(keywords, settings.search); } } diff --git a/src/background/usecases/parsers.js b/src/background/usecases/parsers.js index cda26c3..43c8177 100644 --- a/src/background/usecases/parsers.js +++ b/src/background/usecases/parsers.js @@ -1,27 +1,3 @@ -const trimStart = (str) => { - // NOTE String.trimStart is available on Firefox 61 - return str.replace(/^\s+/, ''); -}; - -const normalizeUrl = (keywords, searchSettings) => { - try { - return new URL(keywords).href; - } catch (e) { - if (keywords.includes('.') && !keywords.includes(' ')) { - return 'http://' + keywords; - } - let template = searchSettings.engines[searchSettings.default]; - let query = keywords; - - let first = trimStart(keywords).split(' ')[0]; - if (Object.keys(searchSettings.engines).includes(first)) { - template = searchSettings.engines[first]; - query = trimStart(trimStart(keywords).slice(first.length)); - } - return template.replace('{}', encodeURIComponent(query)); - } -}; - const mustNumber = (v) => { let num = Number(v); if (isNaN(num)) { @@ -52,4 +28,4 @@ const parseSetOption = (word, types) => { } }; -export { normalizeUrl, parseSetOption }; +export { parseSetOption }; diff --git a/src/content/actions/operation.js b/src/content/actions/operation.js index c1bd1c8..89d7fec 100644 --- a/src/content/actions/operation.js +++ b/src/content/actions/operation.js @@ -83,7 +83,9 @@ const exec = (operation, repeat, settings, addonEnabled) => { consoleFrames.postInfo(window.document, 'Current url yanked'); break; case operations.URLS_PASTE: - urls.paste(window, operation.newTab ? operation.newTab : false); + urls.paste( + window, operation.newTab ? operation.newTab : false, settings.search + ); break; default: browser.runtime.sendMessage({ diff --git a/src/content/urls.js b/src/content/urls.js index 9b7b284..1c5b7e5 100644 --- a/src/content/urls.js +++ b/src/content/urls.js @@ -1,4 +1,5 @@ import messages from 'shared/messages'; +import * as urls from '../shared/urls'; const yank = (win) => { let input = win.document.createElement('input'); @@ -14,7 +15,7 @@ const yank = (win) => { input.remove(); }; -const paste = (win, newTab) => { +const paste = (win, newTab, searchSettings) => { let textarea = win.document.createElement('textarea'); win.document.body.append(textarea); @@ -24,13 +25,13 @@ const paste = (win, newTab) => { 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, - }); - } + let value = textarea.textContent; + let url = urls.normalizeUrl(value, searchSettings); + browser.runtime.sendMessage({ + type: messages.OPEN_URL, + url, + newTab, + }); } textarea.remove(); diff --git a/src/shared/urls.js b/src/shared/urls.js new file mode 100644 index 0000000..87b1a48 --- /dev/null +++ b/src/shared/urls.js @@ -0,0 +1,25 @@ +const trimStart = (str) => { + // NOTE String.trimStart is available on Firefox 61 + return str.replace(/^\s+/, ''); +}; + +const normalizeUrl = (keywords, searchSettings) => { + try { + return new URL(keywords).href; + } catch (e) { + if (keywords.includes('.') && !keywords.includes(' ')) { + return 'http://' + keywords; + } + let template = searchSettings.engines[searchSettings.default]; + let query = keywords; + + let first = trimStart(keywords).split(' ')[0]; + if (Object.keys(searchSettings.engines).includes(first)) { + template = searchSettings.engines[first]; + query = trimStart(trimStart(keywords).slice(first.length)); + } + return template.replace('{}', encodeURIComponent(query)); + } +}; + +export { normalizeUrl }; |