aboutsummaryrefslogtreecommitdiff
path: root/src/content/client
diff options
context:
space:
mode:
authorShin'ya Ueoka <ueokande@i-beam.org>2019-05-19 15:59:05 +0900
committerGitHub <noreply@github.com>2019-05-19 15:59:05 +0900
commit3f4bc62ed515f1c5da90ee1c3e42f3d435ea6e39 (patch)
tree8af9f8e5b12d007ce9628b40f3046b73f18e29f8 /src/content/client
parent6ec560bca33e774ff7e363270c423c919fdcf4ce (diff)
parentc4dcdff9844e2404e3bc035f4cea9fce2f7770ab (diff)
Merge pull request #587 from ueokande/refactor-content
Refactor content scripts
Diffstat (limited to 'src/content/client')
-rw-r--r--src/content/client/AddonIndicatorClient.ts16
-rw-r--r--src/content/client/BackgroundClient.ts11
-rw-r--r--src/content/client/ConsoleClient.ts30
-rw-r--r--src/content/client/FindClient.ts25
-rw-r--r--src/content/client/FindMasterClient.ts23
-rw-r--r--src/content/client/FollowMasterClient.ts47
-rw-r--r--src/content/client/FollowSlaveClient.ts76
-rw-r--r--src/content/client/MarkClient.ts28
-rw-r--r--src/content/client/SettingClient.ts17
-rw-r--r--src/content/client/TabsClient.ts22
10 files changed, 295 insertions, 0 deletions
diff --git a/src/content/client/AddonIndicatorClient.ts b/src/content/client/AddonIndicatorClient.ts
new file mode 100644
index 0000000..afb9fa4
--- /dev/null
+++ b/src/content/client/AddonIndicatorClient.ts
@@ -0,0 +1,16 @@
+import * as messages from '../../shared/messages';
+
+export default interface AddonIndicatorClient {
+ setEnabled(enabled: boolean): Promise<void>;
+
+ // eslint-disable-next-line semi
+}
+
+export class AddonIndicatorClientImpl implements AddonIndicatorClient {
+ setEnabled(enabled: boolean): Promise<void> {
+ return browser.runtime.sendMessage({
+ type: messages.ADDON_ENABLED_RESPONSE,
+ enabled,
+ });
+ }
+}
diff --git a/src/content/client/BackgroundClient.ts b/src/content/client/BackgroundClient.ts
new file mode 100644
index 0000000..2fe8d01
--- /dev/null
+++ b/src/content/client/BackgroundClient.ts
@@ -0,0 +1,11 @@
+import * as operations from '../../shared/operations';
+import * as messages from '../../shared/messages';
+
+export default class BackgroundClient {
+ execBackgroundOp(op: operations.Operation): Promise<void> {
+ return browser.runtime.sendMessage({
+ type: messages.BACKGROUND_OPERATION,
+ operation: op,
+ });
+ }
+}
diff --git a/src/content/client/ConsoleClient.ts b/src/content/client/ConsoleClient.ts
new file mode 100644
index 0000000..e7046e5
--- /dev/null
+++ b/src/content/client/ConsoleClient.ts
@@ -0,0 +1,30 @@
+import * as messages from '../../shared/messages';
+
+export default interface ConsoleClient {
+ info(text: string): Promise<void>;
+ error(text: string): Promise<void>;
+
+ // eslint-disable-next-line semi
+}
+
+export class ConsoleClientImpl implements ConsoleClient {
+ async info(text: string): Promise<void> {
+ await browser.runtime.sendMessage({
+ type: messages.CONSOLE_FRAME_MESSAGE,
+ message: {
+ type: messages.CONSOLE_SHOW_INFO,
+ text,
+ },
+ });
+ }
+
+ async error(text: string): Promise<void> {
+ await browser.runtime.sendMessage({
+ type: messages.CONSOLE_FRAME_MESSAGE,
+ message: {
+ type: messages.CONSOLE_SHOW_ERROR,
+ text,
+ },
+ });
+ }
+}
diff --git a/src/content/client/FindClient.ts b/src/content/client/FindClient.ts
new file mode 100644
index 0000000..22cd3cb
--- /dev/null
+++ b/src/content/client/FindClient.ts
@@ -0,0 +1,25 @@
+import * as messages from '../../shared/messages';
+
+export default interface FindClient {
+ getGlobalLastKeyword(): Promise<string | null>;
+
+ setGlobalLastKeyword(keyword: string): Promise<void>;
+
+ // eslint-disable-next-line semi
+}
+
+export class FindClientImpl implements FindClient {
+ async getGlobalLastKeyword(): Promise<string | null> {
+ let keyword = await browser.runtime.sendMessage({
+ type: messages.FIND_GET_KEYWORD,
+ });
+ return keyword as string;
+ }
+
+ async setGlobalLastKeyword(keyword: string): Promise<void> {
+ await browser.runtime.sendMessage({
+ type: messages.FIND_SET_KEYWORD,
+ keyword: keyword,
+ });
+ }
+}
diff --git a/src/content/client/FindMasterClient.ts b/src/content/client/FindMasterClient.ts
new file mode 100644
index 0000000..0481ec1
--- /dev/null
+++ b/src/content/client/FindMasterClient.ts
@@ -0,0 +1,23 @@
+import * as messages from '../../shared/messages';
+
+export default interface FindMasterClient {
+ findNext(): void;
+
+ findPrev(): void;
+
+ // eslint-disable-next-line semi
+}
+
+export class FindMasterClientImpl implements FindMasterClient {
+ findNext(): void {
+ window.top.postMessage(JSON.stringify({
+ type: messages.FIND_NEXT,
+ }), '*');
+ }
+
+ findPrev(): void {
+ window.top.postMessage(JSON.stringify({
+ type: messages.FIND_PREV,
+ }), '*');
+ }
+}
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), '*');
+ }
+}
diff --git a/src/content/client/FollowSlaveClient.ts b/src/content/client/FollowSlaveClient.ts
new file mode 100644
index 0000000..0905cd9
--- /dev/null
+++ b/src/content/client/FollowSlaveClient.ts
@@ -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), '*');
+ }
+}
diff --git a/src/content/client/MarkClient.ts b/src/content/client/MarkClient.ts
new file mode 100644
index 0000000..b7cf535
--- /dev/null
+++ b/src/content/client/MarkClient.ts
@@ -0,0 +1,28 @@
+import Mark from '../domains/Mark';
+import * as messages from '../../shared/messages';
+
+export default interface MarkClient {
+ setGloablMark(key: string, mark: Mark): Promise<void>;
+
+ jumpGlobalMark(key: string): Promise<void>;
+
+ // eslint-disable-next-line semi
+}
+
+export class MarkClientImpl implements MarkClient {
+ async setGloablMark(key: string, mark: Mark): Promise<void> {
+ await browser.runtime.sendMessage({
+ type: messages.MARK_SET_GLOBAL,
+ key,
+ x: mark.x,
+ y: mark.y,
+ });
+ }
+
+ async jumpGlobalMark(key: string): Promise<void> {
+ await browser.runtime.sendMessage({
+ type: messages.MARK_JUMP_GLOBAL,
+ key,
+ });
+ }
+}
diff --git a/src/content/client/SettingClient.ts b/src/content/client/SettingClient.ts
new file mode 100644
index 0000000..c67f544
--- /dev/null
+++ b/src/content/client/SettingClient.ts
@@ -0,0 +1,17 @@
+import Settings from '../../shared/Settings';
+import * as messages from '../../shared/messages';
+
+export default interface SettingClient {
+ load(): Promise<Settings>;
+
+ // eslint-disable-next-line semi
+}
+
+export class SettingClientImpl {
+ async load(): Promise<Settings> {
+ let settings = await browser.runtime.sendMessage({
+ type: messages.SETTINGS_QUERY,
+ });
+ return settings as Settings;
+ }
+}
diff --git a/src/content/client/TabsClient.ts b/src/content/client/TabsClient.ts
new file mode 100644
index 0000000..e1af078
--- /dev/null
+++ b/src/content/client/TabsClient.ts
@@ -0,0 +1,22 @@
+import * as messages from '../../shared/messages';
+
+export default interface TabsClient {
+ openUrl(url: string, newTab: boolean, background?: boolean): Promise<void>;
+
+ // eslint-disable-next-line semi
+}
+
+export class TabsClientImpl implements TabsClient {
+ async openUrl(
+ url: string,
+ newTab: boolean,
+ background?: boolean,
+ ): Promise<void> {
+ await browser.runtime.sendMessage({
+ type: messages.OPEN_URL,
+ url,
+ newTab,
+ background,
+ });
+ }
+}