A fork of https://github.com/ueokande/vim-vixen
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
3.6 KiB
112 lines
3.6 KiB
import * as operations from '../../shared/operations'; |
|
import * as actions from './index'; |
|
import * as messages from '../../shared/messages'; |
|
import * as navigates from '../navigates'; |
|
import * as focuses from '../focuses'; |
|
import * as markActions from './mark'; |
|
|
|
import AddonEnabledUseCase from '../usecases/AddonEnabledUseCase'; |
|
import ClipboardUseCase from '../usecases/ClipboardUseCase'; |
|
import { SettingRepositoryImpl } from '../repositories/SettingRepository'; |
|
import { ScrollPresenterImpl } from '../presenters/ScrollPresenter'; |
|
import { FollowMasterClientImpl } from '../client/FollowMasterClient'; |
|
|
|
let addonEnabledUseCase = new AddonEnabledUseCase(); |
|
let clipbaordUseCase = new ClipboardUseCase(); |
|
let settingRepository = new SettingRepositoryImpl(); |
|
let scrollPresenter = new ScrollPresenterImpl(); |
|
let followMasterClient = new FollowMasterClientImpl(window.top); |
|
|
|
// eslint-disable-next-line complexity, max-lines-per-function |
|
const exec = async( |
|
operation: operations.Operation, |
|
): Promise<actions.Action> => { |
|
let settings = settingRepository.get(); |
|
let smoothscroll = settings.properties.smoothscroll; |
|
switch (operation.type) { |
|
case operations.ADDON_ENABLE: |
|
await addonEnabledUseCase.enable(); |
|
return { type: actions.NOOP }; |
|
case operations.ADDON_DISABLE: |
|
await addonEnabledUseCase.disable(); |
|
return { type: actions.NOOP }; |
|
case operations.ADDON_TOGGLE_ENABLED: |
|
await addonEnabledUseCase.toggle(); |
|
return { type: actions.NOOP }; |
|
case operations.FIND_NEXT: |
|
window.top.postMessage(JSON.stringify({ |
|
type: messages.FIND_NEXT, |
|
}), '*'); |
|
break; |
|
case operations.FIND_PREV: |
|
window.top.postMessage(JSON.stringify({ |
|
type: messages.FIND_PREV, |
|
}), '*'); |
|
break; |
|
case operations.SCROLL_VERTICALLY: |
|
scrollPresenter.scrollVertically(operation.count, smoothscroll); |
|
break; |
|
case operations.SCROLL_HORIZONALLY: |
|
scrollPresenter.scrollHorizonally(operation.count, smoothscroll); |
|
break; |
|
case operations.SCROLL_PAGES: |
|
scrollPresenter.scrollPages(operation.count, smoothscroll); |
|
break; |
|
case operations.SCROLL_TOP: |
|
scrollPresenter.scrollToTop(smoothscroll); |
|
break; |
|
case operations.SCROLL_BOTTOM: |
|
scrollPresenter.scrollToBottom(smoothscroll); |
|
break; |
|
case operations.SCROLL_HOME: |
|
scrollPresenter.scrollToHome(smoothscroll); |
|
break; |
|
case operations.SCROLL_END: |
|
scrollPresenter.scrollToEnd(smoothscroll); |
|
break; |
|
case operations.FOLLOW_START: |
|
followMasterClient.startFollow(operation.newTab, operation.background); |
|
break; |
|
case operations.MARK_SET_PREFIX: |
|
return markActions.startSet(); |
|
case operations.MARK_JUMP_PREFIX: |
|
return markActions.startJump(); |
|
case operations.NAVIGATE_HISTORY_PREV: |
|
navigates.historyPrev(window); |
|
break; |
|
case operations.NAVIGATE_HISTORY_NEXT: |
|
navigates.historyNext(window); |
|
break; |
|
case operations.NAVIGATE_LINK_PREV: |
|
navigates.linkPrev(window); |
|
break; |
|
case operations.NAVIGATE_LINK_NEXT: |
|
navigates.linkNext(window); |
|
break; |
|
case operations.NAVIGATE_PARENT: |
|
navigates.parent(window); |
|
break; |
|
case operations.NAVIGATE_ROOT: |
|
navigates.root(window); |
|
break; |
|
case operations.FOCUS_INPUT: |
|
focuses.focusInput(); |
|
break; |
|
case operations.URLS_YANK: |
|
await clipbaordUseCase.yankCurrentURL(); |
|
break; |
|
case operations.URLS_PASTE: |
|
await clipbaordUseCase.openOrSearch( |
|
operation.newTab ? operation.newTab : false, |
|
); |
|
break; |
|
default: |
|
browser.runtime.sendMessage({ |
|
type: messages.BACKGROUND_OPERATION, |
|
operation, |
|
}); |
|
} |
|
return { type: actions.NOOP }; |
|
}; |
|
|
|
export { exec };
|
|
|