aboutsummaryrefslogtreecommitdiff
path: root/src/content/repositories/ClipboardRepository.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/content/repositories/ClipboardRepository.ts')
-rw-r--r--src/content/repositories/ClipboardRepository.ts46
1 files changed, 46 insertions, 0 deletions
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');
+ }
+ }
+}