aboutsummaryrefslogtreecommitdiff
path: root/src/content/actions/operation.ts
diff options
context:
space:
mode:
authorShin'ya Ueoka <ueokande@i-beam.org>2019-05-07 21:16:47 +0900
committerGitHub <noreply@github.com>2019-05-07 21:16:47 +0900
commit05ef6a8ca35aaa801c11eb6b4896caa3690058af (patch)
tree2c7708ca91ac2b462cc86aa28612e3d3943496f3 /src/content/actions/operation.ts
parent457d954e08923b4accd28a919c72d0b61db1bb98 (diff)
parent27d0a7f37d24a0ad68a8ccb7dee18fc1d00eea58 (diff)
Merge pull request #578 from ueokande/move-to-typescript
Move to TypeScript
Diffstat (limited to 'src/content/actions/operation.ts')
-rw-r--r--src/content/actions/operation.ts107
1 files changed, 107 insertions, 0 deletions
diff --git a/src/content/actions/operation.ts b/src/content/actions/operation.ts
new file mode 100644
index 0000000..41e080b
--- /dev/null
+++ b/src/content/actions/operation.ts
@@ -0,0 +1,107 @@
+import * as operations from '../../shared/operations';
+import * as actions from './index';
+import * as messages from '../../shared/messages';
+import * as scrolls from '../scrolls';
+import * as navigates from '../navigates';
+import * as focuses from '../focuses';
+import * as urls from '../urls';
+import * as consoleFrames from '../console-frames';
+import * as addonActions from './addon';
+import * as markActions from './mark';
+
+// eslint-disable-next-line complexity, max-lines-per-function
+const exec = (
+ operation: operations.Operation,
+ settings: any,
+ addonEnabled: boolean,
+): Promise<actions.Action> | actions.Action => {
+ let smoothscroll = settings.properties.smoothscroll;
+ switch (operation.type) {
+ case operations.ADDON_ENABLE:
+ return addonActions.enable();
+ case operations.ADDON_DISABLE:
+ return addonActions.disable();
+ case operations.ADDON_TOGGLE_ENABLED:
+ return addonActions.setEnabled(!addonEnabled);
+ case operations.FIND_NEXT:
+ window.top.postMessage(JSON.stringify({
+ type: messages.FIND_NEXT,
+ }), '*');
+ break;
+ case operations.FIND_PREV:
+ window.top.postMessage(JSON.stringify({
+ type: messages.FIND_PREV,
+ }), '*');
+ break;
+ case operations.SCROLL_VERTICALLY:
+ scrolls.scrollVertically(operation.count, smoothscroll);
+ break;
+ case operations.SCROLL_HORIZONALLY:
+ scrolls.scrollHorizonally(operation.count, smoothscroll);
+ break;
+ case operations.SCROLL_PAGES:
+ scrolls.scrollPages(operation.count, smoothscroll);
+ break;
+ case operations.SCROLL_TOP:
+ scrolls.scrollToTop(smoothscroll);
+ break;
+ case operations.SCROLL_BOTTOM:
+ scrolls.scrollToBottom(smoothscroll);
+ break;
+ case operations.SCROLL_HOME:
+ scrolls.scrollToHome(smoothscroll);
+ break;
+ case operations.SCROLL_END:
+ scrolls.scrollToEnd(smoothscroll);
+ break;
+ case operations.FOLLOW_START:
+ window.top.postMessage(JSON.stringify({
+ type: messages.FOLLOW_START,
+ newTab: operation.newTab,
+ background: operation.background,
+ }), '*');
+ break;
+ case operations.MARK_SET_PREFIX:
+ return markActions.startSet();
+ case operations.MARK_JUMP_PREFIX:
+ return markActions.startJump();
+ case operations.NAVIGATE_HISTORY_PREV:
+ navigates.historyPrev(window);
+ break;
+ case operations.NAVIGATE_HISTORY_NEXT:
+ navigates.historyNext(window);
+ break;
+ case operations.NAVIGATE_LINK_PREV:
+ navigates.linkPrev(window);
+ break;
+ case operations.NAVIGATE_LINK_NEXT:
+ navigates.linkNext(window);
+ break;
+ case operations.NAVIGATE_PARENT:
+ navigates.parent(window);
+ break;
+ case operations.NAVIGATE_ROOT:
+ navigates.root(window);
+ break;
+ case operations.FOCUS_INPUT:
+ focuses.focusInput();
+ break;
+ case operations.URLS_YANK:
+ urls.yank(window);
+ consoleFrames.postInfo('Yanked ' + window.location.href);
+ break;
+ case operations.URLS_PASTE:
+ urls.paste(
+ window, operation.newTab ? operation.newTab : false, settings.search
+ );
+ break;
+ default:
+ browser.runtime.sendMessage({
+ type: messages.BACKGROUND_OPERATION,
+ operation,
+ });
+ }
+ return { type: actions.NOOP };
+};
+
+export { exec };