aboutsummaryrefslogtreecommitdiff
path: root/src/content/repositories
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/repositories
parent6ec560bca33e774ff7e363270c423c919fdcf4ce (diff)
parentc4dcdff9844e2404e3bc035f4cea9fce2f7770ab (diff)
Merge pull request #587 from ueokande/refactor-content
Refactor content scripts
Diffstat (limited to 'src/content/repositories')
-rw-r--r--src/content/repositories/AddonEnabledRepository.ts19
-rw-r--r--src/content/repositories/ClipboardRepository.ts46
-rw-r--r--src/content/repositories/FindRepository.ts19
-rw-r--r--src/content/repositories/FollowKeyRepository.ts35
-rw-r--r--src/content/repositories/FollowMasterRepository.ts59
-rw-r--r--src/content/repositories/FollowSlaveRepository.ts31
-rw-r--r--src/content/repositories/KeymapRepository.ts24
-rw-r--r--src/content/repositories/MarkKeyRepository.ts52
-rw-r--r--src/content/repositories/MarkRepository.ts25
-rw-r--r--src/content/repositories/SettingRepository.ts21
10 files changed, 331 insertions, 0 deletions
diff --git a/src/content/repositories/AddonEnabledRepository.ts b/src/content/repositories/AddonEnabledRepository.ts
new file mode 100644
index 0000000..4eaabb1
--- /dev/null
+++ b/src/content/repositories/AddonEnabledRepository.ts
@@ -0,0 +1,19 @@
+let enabled: boolean = false;
+
+export default interface AddonEnabledRepository {
+ set(on: boolean): void;
+
+ get(): boolean;
+
+ // eslint-disable-next-line semi
+}
+
+export class AddonEnabledRepositoryImpl implements AddonEnabledRepository {
+ set(on: boolean): void {
+ enabled = on;
+ }
+
+ get(): boolean {
+ return enabled;
+ }
+}
diff --git a/src/content/repositories/ClipboardRepository.ts b/src/content/repositories/ClipboardRepository.ts
new file mode 100644
index 0000000..747ae6a
--- /dev/null
+++ b/src/content/repositories/ClipboardRepository.ts
@@ -0,0 +1,46 @@
+export default interface ClipboardRepository {
+ read(): string;
+
+ write(text: string): void;
+
+ // eslint-disable-next-line semi
+}
+
+export class ClipboardRepositoryImpl {
+ read(): string {
+ let textarea = window.document.createElement('textarea');
+ window.document.body.append(textarea);
+
+ textarea.style.position = 'fixed';
+ textarea.style.top = '-100px';
+ textarea.contentEditable = 'true';
+ textarea.focus();
+
+ let ok = window.document.execCommand('paste');
+ let value = textarea.textContent!!;
+ textarea.remove();
+
+ if (!ok) {
+ throw new Error('failed to access clipbaord');
+ }
+
+ return value;
+ }
+
+ write(text: string): void {
+ let input = window.document.createElement('input');
+ window.document.body.append(input);
+
+ input.style.position = 'fixed';
+ input.style.top = '-100px';
+ input.value = text;
+ input.select();
+
+ let ok = window.document.execCommand('copy');
+ input.remove();
+
+ if (!ok) {
+ throw new Error('failed to access clipbaord');
+ }
+ }
+}
diff --git a/src/content/repositories/FindRepository.ts b/src/content/repositories/FindRepository.ts
new file mode 100644
index 0000000..85eca40
--- /dev/null
+++ b/src/content/repositories/FindRepository.ts
@@ -0,0 +1,19 @@
+export default interface FindRepository {
+ getLastKeyword(): string | null;
+
+ setLastKeyword(keyword: string): void;
+
+ // eslint-disable-next-line semi
+}
+
+let current: string | null = null;
+
+export class FindRepositoryImpl implements FindRepository {
+ getLastKeyword(): string | null {
+ return current;
+ }
+
+ setLastKeyword(keyword: string): void {
+ current = keyword;
+ }
+}
diff --git a/src/content/repositories/FollowKeyRepository.ts b/src/content/repositories/FollowKeyRepository.ts
new file mode 100644
index 0000000..a671b5c
--- /dev/null
+++ b/src/content/repositories/FollowKeyRepository.ts
@@ -0,0 +1,35 @@
+export default interface FollowKeyRepository {
+ getKeys(): string[];
+
+ pushKey(key: string): void;
+
+ popKey(): void;
+
+ clearKeys(): void;
+
+ // eslint-disable-next-line semi
+}
+
+const current: {
+ keys: string[];
+} = {
+ keys: [],
+};
+
+export class FollowKeyRepositoryImpl implements FollowKeyRepository {
+ getKeys(): string[] {
+ return current.keys;
+ }
+
+ pushKey(key: string): void {
+ current.keys.push(key);
+ }
+
+ popKey(): void {
+ current.keys.pop();
+ }
+
+ clearKeys(): void {
+ current.keys = [];
+ }
+}
diff --git a/src/content/repositories/FollowMasterRepository.ts b/src/content/repositories/FollowMasterRepository.ts
new file mode 100644
index 0000000..a964953
--- /dev/null
+++ b/src/content/repositories/FollowMasterRepository.ts
@@ -0,0 +1,59 @@
+export default interface FollowMasterRepository {
+ setCurrentFollowMode(newTab: boolean, background: boolean): void;
+
+ getTags(): string[];
+
+ getTagsByPrefix(prefix: string): string[];
+
+ addTag(tag: string): void;
+
+ clearTags(): void;
+
+ getCurrentNewTabMode(): boolean;
+
+ getCurrentBackgroundMode(): boolean;
+
+ // eslint-disable-next-line semi
+}
+
+const current: {
+ newTab: boolean;
+ background: boolean;
+ tags: string[];
+} = {
+ newTab: false,
+ background: false,
+ tags: [],
+};
+
+export class FollowMasterRepositoryImpl implements FollowMasterRepository {
+ setCurrentFollowMode(newTab: boolean, background: boolean): void {
+ current.newTab = newTab;
+ current.background = background;
+ }
+
+ getTags(): string[] {
+ return current.tags;
+ }
+
+ getTagsByPrefix(prefix: string): string[] {
+ return current.tags.filter(t => t.startsWith(prefix));
+ }
+
+ addTag(tag: string): void {
+ current.tags.push(tag);
+ }
+
+ clearTags(): void {
+ current.tags = [];
+ }
+
+ getCurrentNewTabMode(): boolean {
+ return current.newTab;
+ }
+
+ getCurrentBackgroundMode(): boolean {
+ return current.background;
+ }
+}
+
diff --git a/src/content/repositories/FollowSlaveRepository.ts b/src/content/repositories/FollowSlaveRepository.ts
new file mode 100644
index 0000000..4c2de72
--- /dev/null
+++ b/src/content/repositories/FollowSlaveRepository.ts
@@ -0,0 +1,31 @@
+export default interface FollowSlaveRepository {
+ enableFollowMode(): void;
+
+ disableFollowMode(): void;
+
+ isFollowMode(): boolean;
+
+ // eslint-disable-next-line semi
+}
+
+const current: {
+ enabled: boolean;
+} = {
+ enabled: false,
+};
+
+export class FollowSlaveRepositoryImpl implements FollowSlaveRepository {
+ enableFollowMode(): void {
+ current.enabled = true;
+ }
+
+ disableFollowMode(): void {
+ current.enabled = false;
+ }
+
+ isFollowMode(): boolean {
+ return current.enabled;
+ }
+}
+
+
diff --git a/src/content/repositories/KeymapRepository.ts b/src/content/repositories/KeymapRepository.ts
new file mode 100644
index 0000000..770ba0b
--- /dev/null
+++ b/src/content/repositories/KeymapRepository.ts
@@ -0,0 +1,24 @@
+import Key from '../domains/Key';
+import KeySequence from '../domains/KeySequence';
+
+export default interface KeymapRepository {
+ enqueueKey(key: Key): KeySequence;
+
+ clear(): void;
+
+ // eslint-disable-next-line semi
+}
+
+let current: KeySequence = KeySequence.from([]);
+
+export class KeymapRepositoryImpl {
+
+ enqueueKey(key: Key): KeySequence {
+ current.push(key);
+ return current;
+ }
+
+ clear(): void {
+ current = KeySequence.from([]);
+ }
+}
diff --git a/src/content/repositories/MarkKeyRepository.ts b/src/content/repositories/MarkKeyRepository.ts
new file mode 100644
index 0000000..c24548a
--- /dev/null
+++ b/src/content/repositories/MarkKeyRepository.ts
@@ -0,0 +1,52 @@
+export default interface MarkKeyRepository {
+ isSetMode(): boolean;
+
+ enableSetMode(): void;
+
+ disabeSetMode(): void;
+
+ isJumpMode(): boolean;
+
+ enableJumpMode(): void;
+
+ disabeJumpMode(): void;
+
+ // eslint-disable-next-line semi
+}
+
+interface Mode {
+ setMode: boolean;
+ jumpMode: boolean;
+}
+
+let current: Mode = {
+ setMode: false,
+ jumpMode: false,
+};
+
+export class MarkKeyRepositoryImpl implements MarkKeyRepository {
+
+ isSetMode(): boolean {
+ return current.setMode;
+ }
+
+ enableSetMode(): void {
+ current.setMode = true;
+ }
+
+ disabeSetMode(): void {
+ current.setMode = false;
+ }
+
+ isJumpMode(): boolean {
+ return current.jumpMode;
+ }
+
+ enableJumpMode(): void {
+ current.jumpMode = true;
+ }
+
+ disabeJumpMode(): void {
+ current.jumpMode = false;
+ }
+}
diff --git a/src/content/repositories/MarkRepository.ts b/src/content/repositories/MarkRepository.ts
new file mode 100644
index 0000000..ed5afe2
--- /dev/null
+++ b/src/content/repositories/MarkRepository.ts
@@ -0,0 +1,25 @@
+import Mark from '../domains/Mark';
+
+export default interface MarkRepository {
+ set(key: string, mark: Mark): void;
+
+ get(key: string): Mark | null;
+
+ // eslint-disable-next-line semi
+}
+
+const saved: {[key: string]: Mark} = {};
+
+export class MarkRepositoryImpl implements MarkRepository {
+ set(key: string, mark: Mark): void {
+ saved[key] = mark;
+ }
+
+ get(key: string): Mark | null {
+ let v = saved[key];
+ if (!v) {
+ return null;
+ }
+ return { ...v };
+ }
+}
diff --git a/src/content/repositories/SettingRepository.ts b/src/content/repositories/SettingRepository.ts
new file mode 100644
index 0000000..711b2a2
--- /dev/null
+++ b/src/content/repositories/SettingRepository.ts
@@ -0,0 +1,21 @@
+import Settings, { DefaultSetting } from '../../shared/Settings';
+
+let current: Settings = DefaultSetting;
+
+export default interface SettingRepository {
+ set(setting: Settings): void;
+
+ get(): Settings;
+
+ // eslint-disable-next-line semi
+}
+
+export class SettingRepositoryImpl implements SettingRepository {
+ set(setting: Settings): void {
+ current = setting;
+ }
+
+ get(): Settings {
+ return current;
+ }
+}