aboutsummaryrefslogtreecommitdiff
path: root/src/content/client/FollowMasterClient.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/content/client/FollowMasterClient.ts')
-rw-r--r--src/content/client/FollowMasterClient.ts47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/content/client/FollowMasterClient.ts b/src/content/client/FollowMasterClient.ts
new file mode 100644
index 0000000..c841902
--- /dev/null
+++ b/src/content/client/FollowMasterClient.ts
@@ -0,0 +1,47 @@
+import * as messages from '../../shared/messages';
+import Key from '../domains/Key';
+
+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), '*');
+ }
+}