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.
148 lines
4.7 KiB
148 lines
4.7 KiB
import * as operations from '../../shared/operations'; |
|
import KeymapUseCase from '../usecases/KeymapUseCase'; |
|
import AddonEnabledUseCase from '../usecases/AddonEnabledUseCase'; |
|
import FindSlaveUseCase from '../usecases/FindSlaveUseCase'; |
|
import ScrollUseCase from '../usecases/ScrollUseCase'; |
|
import NavigateUseCase from '../usecases/NavigateUseCase'; |
|
import FocusUseCase from '../usecases/FocusUseCase'; |
|
import ClipboardUseCase from '../usecases/ClipboardUseCase'; |
|
import BackgroundClient from '../client/BackgroundClient'; |
|
import MarkKeyyUseCase from '../usecases/MarkKeyUseCase'; |
|
import FollowMasterClient, { FollowMasterClientImpl } |
|
from '../client/FollowMasterClient'; |
|
import Key from '../domains/Key'; |
|
|
|
export default class KeymapController { |
|
private keymapUseCase: KeymapUseCase; |
|
|
|
private addonEnabledUseCase: AddonEnabledUseCase; |
|
|
|
private findSlaveUseCase: FindSlaveUseCase; |
|
|
|
private scrollUseCase: ScrollUseCase; |
|
|
|
private navigateUseCase: NavigateUseCase; |
|
|
|
private focusUseCase: FocusUseCase; |
|
|
|
private clipbaordUseCase: ClipboardUseCase; |
|
|
|
private backgroundClient: BackgroundClient; |
|
|
|
private markKeyUseCase: MarkKeyyUseCase; |
|
|
|
private followMasterClient: FollowMasterClient; |
|
|
|
constructor({ |
|
keymapUseCase = new KeymapUseCase(), |
|
addonEnabledUseCase = new AddonEnabledUseCase(), |
|
findSlaveUseCase = new FindSlaveUseCase(), |
|
scrollUseCase = new ScrollUseCase(), |
|
navigateUseCase = new NavigateUseCase(), |
|
focusUseCase = new FocusUseCase(), |
|
clipbaordUseCase = new ClipboardUseCase(), |
|
backgroundClient = new BackgroundClient(), |
|
markKeyUseCase = new MarkKeyyUseCase(), |
|
followMasterClient = new FollowMasterClientImpl(window.top), |
|
} = {}) { |
|
this.keymapUseCase = keymapUseCase; |
|
this.addonEnabledUseCase = addonEnabledUseCase; |
|
this.findSlaveUseCase = findSlaveUseCase; |
|
this.scrollUseCase = scrollUseCase; |
|
this.navigateUseCase = navigateUseCase; |
|
this.focusUseCase = focusUseCase; |
|
this.clipbaordUseCase = clipbaordUseCase; |
|
this.backgroundClient = backgroundClient; |
|
this.markKeyUseCase = markKeyUseCase; |
|
this.followMasterClient = followMasterClient; |
|
} |
|
|
|
// eslint-disable-next-line complexity, max-lines-per-function |
|
press(key: Key): boolean { |
|
let op = this.keymapUseCase.nextOp(key); |
|
if (op === null) { |
|
return false; |
|
} |
|
|
|
// do not await due to return a boolean immediately |
|
switch (op.type) { |
|
case operations.ADDON_ENABLE: |
|
this.addonEnabledUseCase.enable(); |
|
break; |
|
case operations.ADDON_DISABLE: |
|
this.addonEnabledUseCase.disable(); |
|
break; |
|
case operations.ADDON_TOGGLE_ENABLED: |
|
this.addonEnabledUseCase.toggle(); |
|
break; |
|
case operations.FIND_NEXT: |
|
this.findSlaveUseCase.findNext(); |
|
break; |
|
case operations.FIND_PREV: |
|
this.findSlaveUseCase.findPrev(); |
|
break; |
|
case operations.SCROLL_VERTICALLY: |
|
this.scrollUseCase.scrollVertically(op.count); |
|
break; |
|
case operations.SCROLL_HORIZONALLY: |
|
this.scrollUseCase.scrollHorizonally(op.count); |
|
break; |
|
case operations.SCROLL_PAGES: |
|
this.scrollUseCase.scrollPages(op.count); |
|
break; |
|
case operations.SCROLL_TOP: |
|
this.scrollUseCase.scrollToTop(); |
|
break; |
|
case operations.SCROLL_BOTTOM: |
|
this.scrollUseCase.scrollToBottom(); |
|
break; |
|
case operations.SCROLL_HOME: |
|
this.scrollUseCase.scrollToHome(); |
|
break; |
|
case operations.SCROLL_END: |
|
this.scrollUseCase.scrollToEnd(); |
|
break; |
|
case operations.FOLLOW_START: |
|
this.followMasterClient.startFollow(op.newTab, op.background); |
|
break; |
|
case operations.MARK_SET_PREFIX: |
|
this.markKeyUseCase.enableSetMode(); |
|
break; |
|
case operations.MARK_JUMP_PREFIX: |
|
this.markKeyUseCase.enableJumpMode(); |
|
break; |
|
case operations.NAVIGATE_HISTORY_PREV: |
|
this.navigateUseCase.openHistoryPrev(); |
|
break; |
|
case operations.NAVIGATE_HISTORY_NEXT: |
|
this.navigateUseCase.openHistoryNext(); |
|
break; |
|
case operations.NAVIGATE_LINK_PREV: |
|
this.navigateUseCase.openLinkPrev(); |
|
break; |
|
case operations.NAVIGATE_LINK_NEXT: |
|
this.navigateUseCase.openLinkNext(); |
|
break; |
|
case operations.NAVIGATE_PARENT: |
|
this.navigateUseCase.openParent(); |
|
break; |
|
case operations.NAVIGATE_ROOT: |
|
this.navigateUseCase.openRoot(); |
|
break; |
|
case operations.FOCUS_INPUT: |
|
this.focusUseCase.focusFirstInput(); |
|
break; |
|
case operations.URLS_YANK: |
|
this.clipbaordUseCase.yankCurrentURL(); |
|
break; |
|
case operations.URLS_PASTE: |
|
this.clipbaordUseCase.openOrSearch( |
|
op.newTab ? op.newTab : false, |
|
); |
|
break; |
|
default: |
|
this.backgroundClient.execBackgroundOp(op); |
|
} |
|
return true; |
|
} |
|
}
|
|
|