diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/background/infrastructures/content-message-listener.js | 6 | ||||
-rw-r--r-- | src/background/repositories/find.js | 3 | ||||
-rw-r--r-- | src/background/usecases/command.js | 3 | ||||
-rw-r--r-- | src/background/usecases/link.js | 3 | ||||
-rw-r--r-- | src/background/usecases/operation.js | 6 | ||||
-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 |
9 files changed, 51 insertions, 42 deletions
diff --git a/src/background/infrastructures/content-message-listener.js b/src/background/infrastructures/content-message-listener.js index 58716fb..4fcc6a6 100644 --- a/src/background/infrastructures/content-message-listener.js +++ b/src/background/infrastructures/content-message-listener.js @@ -19,7 +19,11 @@ export default class ContentMessageListener { run() { browser.runtime.onMessage.addListener((message, sender) => { try { - return this.onMessage(message, sender).catch((e) => { + let ret = this.onMessage(message, sender); + if (!(ret instanceof Promise)) { + return {}; + } + return ret.catch((e) => { return browser.tabs.sendMessage(sender.tab.id, { type: messages.CONSOLE_SHOW_ERROR, text: e.message, diff --git a/src/background/repositories/find.js b/src/background/repositories/find.js index 9482e78..6656c58 100644 --- a/src/background/repositories/find.js +++ b/src/background/repositories/find.js @@ -12,7 +12,8 @@ export default class FindRepository { } setKeyword(keyword) { - return this.cache.set(FIND_KEYWORD_KEY, keyword); + this.cache.set(FIND_KEYWORD_KEY, keyword); + return Promise.resolve(); } } 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/link.js b/src/background/usecases/link.js index f9e474a..1339fdf 100644 --- a/src/background/usecases/link.js +++ b/src/background/usecases/link.js @@ -8,8 +8,7 @@ export default class LinkInteractor { } openToTab(url, tabId) { - this.tabPresenter.open(url, tabId); - + return this.tabPresenter.open(url, tabId); } async openNewTab(url, openerId, background) { diff --git a/src/background/usecases/operation.js b/src/background/usecases/operation.js index 86f39ca..7bf93e4 100644 --- a/src/background/usecases/operation.js +++ b/src/background/usecases/operation.js @@ -126,7 +126,7 @@ export default class OperationInteractor { async showCommand() { let tab = await this.tabPresenter.getCurrent(); - this.consolePresenter.showCommand(tab.id, ''); + return this.consolePresenter.showCommand(tab.id, ''); } async showOpenCommand(alter) { @@ -173,12 +173,12 @@ export default class OperationInteractor { async findStart() { let tab = await this.tabPresenter.getCurrent(); - this.consolePresenter.showFind(tab.id); + return this.consolePresenter.showFind(tab.id); } async hideConsole() { let tab = await this.tabPresenter.getCurrent(); - this.consolePresenter.hide(tab.id); + return this.consolePresenter.hide(tab.id); } onTabSelected(tabId) { 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 }; |