diff options
| -rw-r--r-- | src/background/actions/operation.js | 92 | ||||
| -rw-r--r-- | src/background/components/background.js | 5 | ||||
| -rw-r--r-- | src/background/components/operation.js | 113 | ||||
| -rw-r--r-- | src/background/index.js | 3 | 
4 files changed, 116 insertions, 97 deletions
| diff --git a/src/background/actions/operation.js b/src/background/actions/operation.js deleted file mode 100644 index 10c366f..0000000 --- a/src/background/actions/operation.js +++ /dev/null @@ -1,92 +0,0 @@ -import operations from 'shared/operations'; -import messages from 'shared/messages'; -import * as tabs from 'background/tabs'; -import * as zooms from 'background/zooms'; - -const sendConsoleShowCommand = (tab, command) => { -  return browser.tabs.sendMessage(tab.id, { -    type: messages.CONSOLE_SHOW_COMMAND, -    command, -  }); -}; - -// This switch statement is only gonna get longer as more -// features are added, so disable complexity check -/* eslint-disable complexity */ -const exec = (operation, tab) => { -  switch (operation.type) { -  case operations.TAB_CLOSE: -    return tabs.closeTab(tab.id); -  case operations.TAB_CLOSE_FORCE: -    return tabs.closeTabForce(tab.id); -  case operations.TAB_REOPEN: -    return tabs.reopenTab(); -  case operations.TAB_PREV: -    return tabs.selectPrevTab(tab.index, operation.count); -  case operations.TAB_NEXT: -    return tabs.selectNextTab(tab.index, operation.count); -  case operations.TAB_FIRST: -    return tabs.selectFirstTab(); -  case operations.TAB_LAST: -    return tabs.selectLastTab(); -  case operations.TAB_PREV_SEL: -    return tabs.selectPrevSelTab(); -  case operations.TAB_RELOAD: -    return tabs.reload(tab, operation.cache); -  case operations.TAB_PIN: -    return tabs.updateTabPinned(tab, true); -  case operations.TAB_UNPIN: -    return tabs.updateTabPinned(tab, false); -  case operations.TAB_TOGGLE_PINNED: -    return tabs.toggleTabPinned(tab); -  case operations.TAB_DUPLICATE: -    return tabs.duplicate(tab.id); -  case operations.ZOOM_IN: -    return zooms.zoomIn(); -  case operations.ZOOM_OUT: -    return zooms.zoomOut(); -  case operations.ZOOM_NEUTRAL: -    return zooms.neutral(); -  case operations.COMMAND_SHOW: -    return sendConsoleShowCommand(tab, ''); -  case operations.COMMAND_SHOW_OPEN: -    if (operation.alter) { -      // alter url -      return sendConsoleShowCommand(tab, 'open ' + tab.url); -    } -    return sendConsoleShowCommand(tab, 'open '); -  case operations.COMMAND_SHOW_TABOPEN: -    if (operation.alter) { -      // alter url -      return sendConsoleShowCommand(tab, 'tabopen ' + tab.url); -    } -    return sendConsoleShowCommand(tab, 'tabopen '); -  case operations.COMMAND_SHOW_WINOPEN: -    if (operation.alter) { -      // alter url -      return sendConsoleShowCommand(tab, 'winopen ' + tab.url); -    } -    return sendConsoleShowCommand(tab, 'winopen '); -  case operations.COMMAND_SHOW_BUFFER: -    return sendConsoleShowCommand(tab, 'buffer '); -  case operations.FIND_START: -    return browser.tabs.sendMessage(tab.id, { -      type: messages.CONSOLE_SHOW_FIND -    }); -  case operations.CANCEL: -    return browser.tabs.sendMessage(tab.id, { -      type: messages.CONSOLE_HIDE, -    }); -  case operations.PAGE_SOURCE: -    return browser.tabs.create({ -      url: 'view-source:' + tab.url, -      index: tab.index + 1, -      openerTabId: tab.id, -    }); -  default: -    return Promise.resolve(); -  } -}; -/* eslint-enable complexity */ - -export { exec }; diff --git a/src/background/components/background.js b/src/background/components/background.js index fae3fbb..81d815b 100644 --- a/src/background/components/background.js +++ b/src/background/components/background.js @@ -1,5 +1,4 @@  import messages from 'shared/messages'; -import * as operationActions from 'background/actions/operation';  import * as commandActions from 'background/actions/command';  import * as settingActions from 'background/actions/setting';  import * as findActions from 'background/actions/find'; @@ -27,10 +26,6 @@ export default class BackgroundComponent {      let find = this.store.getState().find;      switch (message.type) { -    case messages.BACKGROUND_OPERATION: -      return this.store.dispatch( -        operationActions.exec(message.operation, sender.tab), -        sender);      case messages.OPEN_URL:        if (message.newTab) {          let action = tabActions.openNewTab( diff --git a/src/background/components/operation.js b/src/background/components/operation.js new file mode 100644 index 0000000..e1094c5 --- /dev/null +++ b/src/background/components/operation.js @@ -0,0 +1,113 @@ +import messages from 'shared/messages'; +import operations from 'shared/operations'; +import * as tabs from 'background/tabs'; +import * as zooms from 'background/zooms'; + +export default class BackgroundComponent { +  constructor(store) { +    this.store = store; + +    browser.runtime.onMessage.addListener((message, sender) => { +      try { +        return this.onMessage(message, sender); +      } catch (e) { +        return browser.tabs.sendMessage(sender.tab.id, { +          type: messages.CONSOLE_SHOW_ERROR, +          text: e.message, +        }); +      } +    }); +  } + +  onMessage(message, sender) { +    switch (message.type) { +    case messages.BACKGROUND_OPERATION: +      return this.store.dispatch( +        this.exec(message.operation, sender.tab), +        sender); +    } +  } + +  // eslint-disable-next-line complexity +  exec(operation, tab) { +    switch (operation.type) { +    case operations.TAB_CLOSE: +      return tabs.closeTab(tab.id); +    case operations.TAB_CLOSE_FORCE: +      return tabs.closeTabForce(tab.id); +    case operations.TAB_REOPEN: +      return tabs.reopenTab(); +    case operations.TAB_PREV: +      return tabs.selectPrevTab(tab.index, operation.count); +    case operations.TAB_NEXT: +      return tabs.selectNextTab(tab.index, operation.count); +    case operations.TAB_FIRST: +      return tabs.selectFirstTab(); +    case operations.TAB_LAST: +      return tabs.selectLastTab(); +    case operations.TAB_PREV_SEL: +      return tabs.selectPrevSelTab(); +    case operations.TAB_RELOAD: +      return tabs.reload(tab, operation.cache); +    case operations.TAB_PIN: +      return tabs.updateTabPinned(tab, true); +    case operations.TAB_UNPIN: +      return tabs.updateTabPinned(tab, false); +    case operations.TAB_TOGGLE_PINNED: +      return tabs.toggleTabPinned(tab); +    case operations.TAB_DUPLICATE: +      return tabs.duplicate(tab.id); +    case operations.ZOOM_IN: +      return zooms.zoomIn(); +    case operations.ZOOM_OUT: +      return zooms.zoomOut(); +    case operations.ZOOM_NEUTRAL: +      return zooms.neutral(); +    case operations.COMMAND_SHOW: +      return this.sendConsoleShowCommand(tab, ''); +    case operations.COMMAND_SHOW_OPEN: +      if (operation.alter) { +        // alter url +        return this.sendConsoleShowCommand(tab, 'open ' + tab.url); +      } +      return this.sendConsoleShowCommand(tab, 'open '); +    case operations.COMMAND_SHOW_TABOPEN: +      if (operation.alter) { +        // alter url +        return this.sendConsoleShowCommand(tab, 'tabopen ' + tab.url); +      } +      return this.sendConsoleShowCommand(tab, 'tabopen '); +    case operations.COMMAND_SHOW_WINOPEN: +      if (operation.alter) { +        // alter url +        return this.sendConsoleShowCommand(tab, 'winopen ' + tab.url); +      } +      return this.sendConsoleShowCommand(tab, 'winopen '); +    case operations.COMMAND_SHOW_BUFFER: +      return this.sendConsoleShowCommand(tab, 'buffer '); +    case operations.FIND_START: +      return browser.tabs.sendMessage(tab.id, { +        type: messages.CONSOLE_SHOW_FIND +      }); +    case operations.CANCEL: +      return browser.tabs.sendMessage(tab.id, { +        type: messages.CONSOLE_HIDE, +      }); +    case operations.PAGE_SOURCE: +      return browser.tabs.create({ +        url: 'view-source:' + tab.url, +        index: tab.index + 1, +        openerTabId: tab.id, +      }); +    default: +      return Promise.resolve(); +    } +  } + +  sendConsoleShowCommand(tab, command) { +    return browser.tabs.sendMessage(tab.id, { +      type: messages.CONSOLE_SHOW_COMMAND, +      command, +    }); +  } +} diff --git a/src/background/index.js b/src/background/index.js index ff27796..4f6b23f 100644 --- a/src/background/index.js +++ b/src/background/index.js @@ -1,6 +1,7 @@  import * as settingActions from 'background/actions/setting';  import messages from 'shared/messages';  import BackgroundComponent from 'background/components/background'; +import OperationComponent from 'background/components/operation';  import reducers from 'background/reducers';  import { createStore } from 'shared/store';  import * as versions from 'shared/versions'; @@ -16,6 +17,8 @@ const store = createStore(reducers, (e, sender) => {  });  // eslint-disable-next-line no-unused-vars  const backgroundComponent = new BackgroundComponent(store); +// eslint-disable-next-line no-unused-vars +const operationComponent = new OperationComponent(store);  store.dispatch(settingActions.load()); | 
