aboutsummaryrefslogtreecommitdiff
path: root/src/content/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/content/index.js')
-rw-r--r--src/content/index.js68
1 files changed, 15 insertions, 53 deletions
diff --git a/src/content/index.js b/src/content/index.js
index 2e64af2..0dbc8c1 100644
--- a/src/content/index.js
+++ b/src/content/index.js
@@ -2,62 +2,24 @@ import './console-frame.scss';
import * as consoleFrames from './console-frames';
import * as scrolls from '../content/scrolls';
import * as navigates from '../content/navigates';
-import Follow from '../content/follow';
+import * as followActions from '../actions/follow';
+import * as store from '../store';
+import FollowComponent from '../components/follow';
+import followReducer from '../reducers/follow';
import operations from '../operations';
import messages from './messages';
-consoleFrames.initialize(window.document);
-
-const startFollows = (newTab) => {
- let follow = new Follow(window.document);
- follow.onActivated((element) => {
- switch (element.tagName.toLowerCase()) {
- case 'a':
- if (newTab) {
- // getAttribute() to avoid to resolve absolute path
- let href = element.getAttribute('href');
+const followStore = store.createStore(followReducer);
+const followComponent = new FollowComponent(window.document.body, followStore);
+followStore.subscribe(() => {
+ try {
+ followComponent.update();
+ } catch (e) {
+ console.error(e);
+ }
+});
- // eslint-disable-next-line no-script-url
- if (!href || href === '#' || href.startsWith('javascript:')) {
- return;
- }
- return browser.runtime.sendMessage({
- type: messages.OPEN_URL,
- url: element.href,
- newTab
- });
- }
- if (element.href.startsWith('http://') ||
- element.href.startsWith('https://') ||
- element.href.startsWith('ftp://')) {
- return browser.runtime.sendMessage({
- type: messages.OPEN_URL,
- url: element.href,
- newTab
- });
- }
- return element.click();
- case 'input':
- switch (element.type) {
- case 'file':
- case 'checkbox':
- case 'radio':
- case 'submit':
- case 'reset':
- case 'button':
- case 'image':
- case 'color':
- return element.click();
- default:
- return element.focus();
- }
- case 'textarea':
- return element.focus();
- case 'button':
- return element.click();
- }
- });
-};
+consoleFrames.initialize(window.document);
window.addEventListener('keypress', (e) => {
if (e.target instanceof HTMLInputElement ||
@@ -90,7 +52,7 @@ const execOperation = (operation) => {
case operations.SCROLL_END:
return scrolls.scrollRight(window);
case operations.FOLLOW_START:
- return startFollows(operation.newTab);
+ return followStore.dispatch(followActions.enable(false));
case operations.NAVIGATE_HISTORY_PREV:
return navigates.historyPrev(window);
case operations.NAVIGATE_HISTORY_NEXT: