diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/background/controllers/operation.js | 2 | ||||
| -rw-r--r-- | src/background/usecases/command.js | 2 | ||||
| -rw-r--r-- | src/background/usecases/operation.js | 13 | ||||
| -rw-r--r-- | src/content/urls.js | 2 | ||||
| -rw-r--r-- | src/settings/components/form/keymaps-form.jsx | 2 | ||||
| -rw-r--r-- | src/shared/operations.js | 1 | ||||
| -rw-r--r-- | src/shared/settings/default.js | 2 | ||||
| -rw-r--r-- | src/shared/urls.js | 22 | 
8 files changed, 41 insertions, 5 deletions
| diff --git a/src/background/controllers/operation.js b/src/background/controllers/operation.js index 1339006..aea85fc 100644 --- a/src/background/controllers/operation.js +++ b/src/background/controllers/operation.js @@ -37,6 +37,8 @@ export default class OperationController {        return this.operationInteractor.duplicate();      case operations.PAGE_SOURCE:        return this.operationInteractor.openPageSource(); +    case operations.PAGE_HOME: +      return this.operationInteractor.openHome(operation.newTab);      case operations.ZOOM_IN:        return this.operationInteractor.zoomIn();      case operations.ZOOM_OUT: diff --git a/src/background/usecases/command.js b/src/background/usecases/command.js index f6ade43..0d21041 100644 --- a/src/background/usecases/command.js +++ b/src/background/usecases/command.js @@ -120,6 +120,6 @@ export default class CommandIndicator {    async urlOrSearch(keywords) {      let settings = await this.settingRepository.get(); -    return urls.normalizeUrl(keywords, settings.search); +    return urls.searchUrl(keywords, settings.search);    }  } diff --git a/src/background/usecases/operation.js b/src/background/usecases/operation.js index 74ea830..bf905be 100644 --- a/src/background/usecases/operation.js +++ b/src/background/usecases/operation.js @@ -1,5 +1,6 @@  import TabPresenter from '../presenters/tab';  import ConsolePresenter from '../presenters/console'; +import * as urls from '../../shared/urls';  const ZOOM_SETTINGS = [    0.33, 0.50, 0.66, 0.75, 0.80, 0.90, 1.00, @@ -172,5 +173,17 @@ export default class OperationInteractor {      let tab = await this.tabPresenter.getCurrent();      return this.consolePresenter.hide(tab.id);    } + +  async openHome(newTab) { +    let tab = await this.tabPresenter.getCurrent(); +    let result = await browser.browserSettings.homepageOverride.get({}); +    let us = urls.homepageUrls(result.value); +    if (us.length === 1 && !newTab) { +      return this.tabPresenter.open(us[0], tab.id); +    } +    for (let u of us) { +      this.tabPresenter.create(u, { openerTabId: tab.id }); +    } +  }  } diff --git a/src/content/urls.js b/src/content/urls.js index 1c5b7e5..6e7ea31 100644 --- a/src/content/urls.js +++ b/src/content/urls.js @@ -26,7 +26,7 @@ const paste = (win, newTab, searchSettings) => {    if (win.document.execCommand('paste')) {      let value = textarea.textContent; -    let url = urls.normalizeUrl(value, searchSettings); +    let url = urls.searchUrl(value, searchSettings);      browser.runtime.sendMessage({        type: messages.OPEN_URL,        url, diff --git a/src/settings/components/form/keymaps-form.jsx b/src/settings/components/form/keymaps-form.jsx index 8c6be54..eaa8336 100644 --- a/src/settings/components/form/keymaps-form.jsx +++ b/src/settings/components/form/keymaps-form.jsx @@ -40,6 +40,8 @@ const KeyMapFields = [      ['navigate.parent', 'Go to parent directory'],      ['navigate.root', 'Go to root directory'],      ['page.source', 'Open page source'], +    ['page.home', 'Open start page to current tab'], +    ['page.home?{"newTab":true}', 'Open start page in new tab'],      ['focus.input', 'Focus input'],    ], [      ['find.start', 'Start find mode'], diff --git a/src/shared/operations.js b/src/shared/operations.js index 778b1cf..026f97c 100644 --- a/src/shared/operations.js +++ b/src/shared/operations.js @@ -40,6 +40,7 @@ export default {    // Page    PAGE_SOURCE: 'page.source', +  PAGE_HOME: 'page.home',    // Tabs    TAB_CLOSE: 'tabs.close', diff --git a/src/shared/settings/default.js b/src/shared/settings/default.js index 4163064..5b0950e 100644 --- a/src/shared/settings/default.js +++ b/src/shared/settings/default.js @@ -52,6 +52,8 @@ export default {      "gU": { "type": "navigate.root" },      "gi": { "type": "focus.input" },      "gf": { "type": "page.source" }, +    "gh": { "type": "page.home" }, +    "gH": { "type": "page.home", "newTab": true },      "y": { "type": "urls.yank" },      "p": { "type": "urls.paste", "newTab": false },      "P": { "type": "urls.paste", "newTab": true }, diff --git a/src/shared/urls.js b/src/shared/urls.js index d6c31e6..f7e917d 100644 --- a/src/shared/urls.js +++ b/src/shared/urls.js @@ -3,9 +3,9 @@ const trimStart = (str) => {    return str.replace(/^\s+/, '');  }; -const SUPPORTED_PROTOCOLS = ['http:', 'https:', 'ftp:', 'mailto:']; +const SUPPORTED_PROTOCOLS = ['http:', 'https:', 'ftp:', 'mailto:', 'about:']; -const normalizeUrl = (keywords, searchSettings) => { +const searchUrl = (keywords, searchSettings) => {    try {      let u = new URL(keywords);      if (SUPPORTED_PROTOCOLS.includes(u.protocol.toLowerCase())) { @@ -28,4 +28,20 @@ const normalizeUrl = (keywords, searchSettings) => {    return template.replace('{}', encodeURIComponent(query));  }; -export { normalizeUrl }; +const normalizeUrl = (url) => { +  try { +    let u = new URL(url); +    if (SUPPORTED_PROTOCOLS.includes(u.protocol.toLowerCase())) { +      return u.href; +    } +  } catch (e) { +    // fallthrough +  } +  return 'http://' + url; +}; + +const homepageUrls = (value) => { +  return value.split('|').map(normalizeUrl); +}; + +export { searchUrl, normalizeUrl, homepageUrls }; | 
