aboutsummaryrefslogtreecommitdiff
path: root/src/content/presenters
diff options
context:
space:
mode:
authorShin'ya Ueoka <ueokande@i-beam.org>2019-05-11 11:37:18 +0900
committerShin'ya Ueoka <ueokande@i-beam.org>2019-05-11 11:37:18 +0900
commit1ba1660269b24446e9df7df0016de8c3e5596c8f (patch)
tree545e801e2039e1a49f86c6337a7110a8ed62cad8 /src/content/presenters
parentbacf83a32083c5a4c4a45c061288081423bbf18a (diff)
Make find as a clean architecture
Diffstat (limited to 'src/content/presenters')
-rw-r--r--src/content/presenters/FindPresenter.ts59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/content/presenters/FindPresenter.ts b/src/content/presenters/FindPresenter.ts
new file mode 100644
index 0000000..6dd03f8
--- /dev/null
+++ b/src/content/presenters/FindPresenter.ts
@@ -0,0 +1,59 @@
+import ConsoleClient, { ConsoleClientImpl } from '../client/ConsoleClient';
+
+export default interface FindPresenter {
+ find(keyword: string, backwards: boolean): boolean;
+
+ clearSelection(): void;
+
+ // eslint-disable-next-line semi
+}
+
+// window.find(aString, aCaseSensitive, aBackwards, aWrapAround,
+// aWholeWord, aSearchInFrames);
+//
+// NOTE: window.find is not standard API
+// https://developer.mozilla.org/en-US/docs/Web/API/Window/find
+interface MyWindow extends Window {
+ find(
+ aString: string,
+ aCaseSensitive?: boolean,
+ aBackwards?: boolean,
+ aWrapAround?: boolean,
+ aWholeWord?: boolean,
+ aSearchInFrames?: boolean,
+ aShowDialog?: boolean): boolean;
+}
+
+// eslint-disable-next-line no-var, vars-on-top, init-declarations
+declare var window: MyWindow;
+
+export class FindPresenterImpl implements FindPresenter {
+ private consoleClient: ConsoleClient;
+
+ constructor({ consoleClient = new ConsoleClientImpl() } = {}) {
+ this.consoleClient = consoleClient;
+ }
+
+ find(keyword: string, backwards: boolean): boolean {
+ let caseSensitive = false;
+ let wrapScan = true;
+
+
+ // NOTE: aWholeWord dows not implemented, and aSearchInFrames does not work
+ // because of same origin policy
+ let found = window.find(keyword, caseSensitive, backwards, wrapScan);
+ if (found) {
+ return found;
+ }
+ this.clearSelection();
+
+ return window.find(keyword, caseSensitive, backwards, wrapScan);
+ }
+
+ clearSelection(): void {
+ let sel = window.getSelection();
+ if (sel) {
+ sel.removeAllRanges();
+ }
+ }
+}