Define client and presenter for follow
This commit is contained in:
parent
17dc2bb5ec
commit
a88324acd9
9 changed files with 358 additions and 179 deletions
47
src/content/client/FollowMasterClient.ts
Normal file
47
src/content/client/FollowMasterClient.ts
Normal file
|
@ -0,0 +1,47 @@
|
|||
import * as messages from '../../shared/messages';
|
||||
import { Key } from '../../shared/utils/keys';
|
||||
|
||||
export default interface FollowMasterClient {
|
||||
startFollow(newTab: boolean, background: boolean): void;
|
||||
|
||||
responseHintCount(count: number): void;
|
||||
|
||||
sendKey(key: Key): void;
|
||||
|
||||
// eslint-disable-next-line semi
|
||||
}
|
||||
|
||||
export class FollowMasterClientImpl implements FollowMasterClient {
|
||||
private window: Window;
|
||||
|
||||
constructor(window: Window) {
|
||||
this.window = window;
|
||||
}
|
||||
|
||||
startFollow(newTab: boolean, background: boolean): void {
|
||||
this.postMessage({
|
||||
type: messages.FOLLOW_START,
|
||||
newTab,
|
||||
background,
|
||||
});
|
||||
}
|
||||
|
||||
responseHintCount(count: number): void {
|
||||
this.postMessage({
|
||||
type: messages.FOLLOW_RESPONSE_COUNT_TARGETS,
|
||||
count,
|
||||
});
|
||||
}
|
||||
|
||||
sendKey(key: Key): void {
|
||||
this.postMessage({
|
||||
type: messages.FOLLOW_KEY_PRESS,
|
||||
key: key.key,
|
||||
ctrlKey: key.ctrlKey || false,
|
||||
});
|
||||
}
|
||||
|
||||
private postMessage(msg: messages.Message): void {
|
||||
this.window.postMessage(JSON.stringify(msg), '*');
|
||||
}
|
||||
}
|
76
src/content/client/FollowSlaveClient.ts
Normal file
76
src/content/client/FollowSlaveClient.ts
Normal file
|
@ -0,0 +1,76 @@
|
|||
import * as messages from '../../shared/messages';
|
||||
|
||||
interface Size {
|
||||
width: number;
|
||||
height: number;
|
||||
}
|
||||
|
||||
interface Point {
|
||||
x: number;
|
||||
y: number;
|
||||
}
|
||||
|
||||
export default interface FollowSlaveClient {
|
||||
filterHints(prefix: string): void;
|
||||
|
||||
requestHintCount(viewSize: Size, framePosition: Point): void;
|
||||
|
||||
createHints(viewSize: Size, framePosition: Point, tags: string[]): void;
|
||||
|
||||
clearHints(): void;
|
||||
|
||||
activateIfExists(tag: string, newTab: boolean, background: boolean): void;
|
||||
|
||||
// eslint-disable-next-line semi
|
||||
}
|
||||
|
||||
export class FollowSlaveClientImpl implements FollowSlaveClient {
|
||||
private target: Window;
|
||||
|
||||
constructor(target: Window) {
|
||||
this.target = target;
|
||||
}
|
||||
|
||||
filterHints(prefix: string): void {
|
||||
this.postMessage({
|
||||
type: messages.FOLLOW_SHOW_HINTS,
|
||||
prefix,
|
||||
});
|
||||
}
|
||||
|
||||
requestHintCount(viewSize: Size, framePosition: Point): void {
|
||||
this.postMessage({
|
||||
type: messages.FOLLOW_REQUEST_COUNT_TARGETS,
|
||||
viewSize,
|
||||
framePosition,
|
||||
});
|
||||
}
|
||||
|
||||
createHints(viewSize: Size, framePosition: Point, tags: string[]): void {
|
||||
this.postMessage({
|
||||
type: messages.FOLLOW_CREATE_HINTS,
|
||||
viewSize,
|
||||
framePosition,
|
||||
tags,
|
||||
});
|
||||
}
|
||||
|
||||
clearHints(): void {
|
||||
this.postMessage({
|
||||
type: messages.FOLLOW_REMOVE_HINTS,
|
||||
});
|
||||
}
|
||||
|
||||
activateIfExists(tag: string, newTab: boolean, background: boolean): void {
|
||||
this.postMessage({
|
||||
type: messages.FOLLOW_ACTIVATE,
|
||||
tag,
|
||||
newTab,
|
||||
background,
|
||||
});
|
||||
}
|
||||
|
||||
private postMessage(msg: messages.Message): void {
|
||||
this.target.postMessage(JSON.stringify(msg), '*');
|
||||
}
|
||||
}
|
Reference in a new issue