103 lines
3.2 KiB
TypeScript
103 lines
3.2 KiB
TypeScript
import { injectable, inject } from 'tsyringe';
|
|
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 FocusUseCase from '../usecases/FocusUseCase';
|
|
import ClipboardUseCase from '../usecases/ClipboardUseCase';
|
|
import OperationClient from '../client/OperationClient';
|
|
import MarkKeyyUseCase from '../usecases/MarkKeyUseCase';
|
|
import FollowMasterClient from '../client/FollowMasterClient';
|
|
import Key from '../domains/Key';
|
|
|
|
@injectable()
|
|
export default class KeymapController {
|
|
constructor(
|
|
private keymapUseCase: KeymapUseCase,
|
|
private addonEnabledUseCase: AddonEnabledUseCase,
|
|
private findSlaveUseCase: FindSlaveUseCase,
|
|
private scrollUseCase: ScrollUseCase,
|
|
private focusUseCase: FocusUseCase,
|
|
private clipbaordUseCase: ClipboardUseCase,
|
|
private markKeyUseCase: MarkKeyyUseCase,
|
|
|
|
@inject('OperationClient')
|
|
private backgroundClient: OperationClient,
|
|
|
|
@inject('FollowMasterClient')
|
|
private 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.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;
|
|
}
|
|
}
|