aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/content/actions/addon.js22
-rw-r--r--src/content/actions/index.js4
-rw-r--r--src/content/actions/operation.js4
-rw-r--r--src/content/actions/setting.js2
-rw-r--r--src/content/components/common/index.js35
-rw-r--r--src/content/components/common/keymapper.js4
-rw-r--r--src/content/index.js1
-rw-r--r--src/content/reducers/addon.js10
-rw-r--r--src/shared/blacklists.js4
-rw-r--r--test/content/actions/addon.test.js25
-rw-r--r--test/content/reducers/addon.test.js24
11 files changed, 34 insertions, 101 deletions
diff --git a/src/content/actions/addon.js b/src/content/actions/addon.js
index 8d38025..b30cf16 100644
--- a/src/content/actions/addon.js
+++ b/src/content/actions/addon.js
@@ -1,15 +1,19 @@
+import messages from 'shared/messages';
import actions from 'content/actions';
-const enable = () => {
- return { type: actions.ADDON_ENABLE };
-};
+const enable = () => setEnabled(true);
-const disable = () => {
- return { type: actions.ADDON_DISABLE };
-};
+const disable = () => setEnabled(false);
-const toggleEnabled = () => {
- return { type: actions.ADDON_TOGGLE_ENABLED };
+const setEnabled = async(enabled) => {
+ await browser.runtime.sendMessage({
+ type: messages.ADDON_ENABLED_RESPONSE,
+ enabled,
+ });
+ return {
+ type: actions.ADDON_SET_ENABLED,
+ enabled,
+ };
};
-export { enable, disable, toggleEnabled };
+export { enable, disable, setEnabled };
diff --git a/src/content/actions/index.js b/src/content/actions/index.js
index 7e32e12..1c51ab0 100644
--- a/src/content/actions/index.js
+++ b/src/content/actions/index.js
@@ -1,8 +1,6 @@
export default {
// Enable/disable
- ADDON_ENABLE: 'addon.enable',
- ADDON_DISABLE: 'addon.disable',
- ADDON_TOGGLE_ENABLED: 'addon.toggle.enabled',
+ ADDON_SET_ENABLED: 'addon.set.enabled',
// Settings
SETTING_SET: 'setting.set',
diff --git a/src/content/actions/operation.js b/src/content/actions/operation.js
index a1761fc..c1bd1c8 100644
--- a/src/content/actions/operation.js
+++ b/src/content/actions/operation.js
@@ -9,7 +9,7 @@ import * as addonActions from './addon';
import * as properties from 'shared/settings/properties';
// eslint-disable-next-line complexity, max-lines-per-function
-const exec = (operation, repeat, settings) => {
+const exec = (operation, repeat, settings, addonEnabled) => {
let smoothscroll = settings.properties.smoothscroll ||
properties.defaults.smoothscroll;
switch (operation.type) {
@@ -18,7 +18,7 @@ const exec = (operation, repeat, settings) => {
case operations.ADDON_DISABLE:
return addonActions.disable();
case operations.ADDON_TOGGLE_ENABLED:
- return addonActions.toggleEnabled();
+ return addonActions.setEnabled(!addonEnabled);
case operations.FIND_NEXT:
window.top.postMessage(JSON.stringify({
type: messages.FIND_NEXT,
diff --git a/src/content/actions/setting.js b/src/content/actions/setting.js
index 50c09ca..1c15dd7 100644
--- a/src/content/actions/setting.js
+++ b/src/content/actions/setting.js
@@ -34,4 +34,4 @@ const load = async() => {
return set(settings);
};
-export { load };
+export { set, load };
diff --git a/src/content/components/common/index.js b/src/content/components/common/index.js
index e81bf1f..a1e71a1 100644
--- a/src/content/components/common/index.js
+++ b/src/content/components/common/index.js
@@ -4,7 +4,6 @@ import FollowComponent from './follow';
import * as settingActions from 'content/actions/setting';
import messages from 'shared/messages';
import * as addonActions from '../../actions/addon';
-import * as re from 'shared/utils/re';
import * as blacklists from 'shared/blacklists';
export default class Common {
@@ -24,44 +23,26 @@ export default class Common {
this.reloadSettings();
messages.onMessage(this.onMessage.bind(this));
- store.subscribe(() => this.update());
}
onMessage(message) {
+ let { enabled } = this.store.getState().addon;
switch (message.type) {
case messages.SETTINGS_CHANGED:
return this.reloadSettings();
case messages.ADDON_TOGGLE_ENABLED:
- return this.store.dispatch(addonActions.toggleEnabled());
- }
- }
-
- update() {
- let enabled = this.store.getState().addon.enabled;
- if (enabled !== this.prevEnabled) {
- this.prevEnabled = enabled;
-
- browser.runtime.sendMessage({
- type: messages.ADDON_ENABLED_RESPONSE,
- enabled,
- });
- }
-
- let blacklist = this.store.getState().setting.blacklist;
- let str = JSON.stringify(blacklist)
- if (blacklist !== str) {
- this.prevBlacklist = str;
- if (blacklists.includes(blacklist, this.win.location)) {
- this.store.dispatch(addonActions.disable());
- } else {
- this.store.dispatch(addonActions.enable());
- }
+ this.store.dispatch(addonActions.setEnabled(!enabled));
}
}
reloadSettings() {
try {
- this.store.dispatch(settingActions.load());
+ this.store.dispatch(settingActions.load()).then(({ value: settings }) => {
+ let enabled = !blacklists.includes(
+ settings.blacklist, this.win.location.href
+ );
+ this.store.dispatch(addonActions.setEnabled(enabled));
+ });
} catch (e) {
// Sometime sendMessage fails when background script is not ready.
console.warn(e);
diff --git a/src/content/components/common/keymapper.js b/src/content/components/common/keymapper.js
index 326bdd9..4c294b4 100644
--- a/src/content/components/common/keymapper.js
+++ b/src/content/components/common/keymapper.js
@@ -48,7 +48,9 @@ export default class KeymapperComponent {
return true;
}
let operation = keymaps.get(matched[0]);
- let act = operationActions.exec(operation, key.repeat, state.setting);
+ let act = operationActions.exec(
+ operation, key.repeat, state.setting, state.addon.enabled
+ );
this.store.dispatch(act);
this.store.dispatch(inputActions.clearKeys());
return true;
diff --git a/src/content/index.js b/src/content/index.js
index d6743ce..3b0b49b 100644
--- a/src/content/index.js
+++ b/src/content/index.js
@@ -10,7 +10,6 @@ const store = createStore(
applyMiddleware(promise),
);
-
if (window.self === window.top) {
new TopContentComponent(window, store); // eslint-disable-line no-new
} else {
diff --git a/src/content/reducers/addon.js b/src/content/reducers/addon.js
index b881ca0..0def55a 100644
--- a/src/content/reducers/addon.js
+++ b/src/content/reducers/addon.js
@@ -6,15 +6,9 @@ const defaultState = {
export default function reducer(state = defaultState, action = {}) {
switch (action.type) {
- case actions.ADDON_ENABLE:
+ case actions.ADDON_SET_ENABLED:
return { ...state,
- enabled: true, };
- case actions.ADDON_DISABLE:
- return { ...state,
- enabled: false, };
- case actions.ADDON_TOGGLE_ENABLED:
- return { ...state,
- enabled: !state.enabled, };
+ enabled: action.enabled, };
default:
return state;
}
diff --git a/src/shared/blacklists.js b/src/shared/blacklists.js
index 21e3e14..19ed3f1 100644
--- a/src/shared/blacklists.js
+++ b/src/shared/blacklists.js
@@ -1,13 +1,13 @@
import * as re from 'shared/utils/re';
const includes = (blacklist, url) => {
- let u = new URL(url)
+ let u = new URL(url);
return blacklist.some((item) => {
if (!item.includes('/')) {
return re.fromWildcard(item).test(u.hostname);
}
return re.fromWildcard(item).test(u.hostname + u.pathname);
});
-}
+};
export { includes };
diff --git a/test/content/actions/addon.test.js b/test/content/actions/addon.test.js
deleted file mode 100644
index 5f96372..0000000
--- a/test/content/actions/addon.test.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import actions from 'content/actions';
-import * as addonActions from 'content/actions/addon';
-
-describe("addon actions", () => {
- describe("enable", () => {
- it('create ADDON_ENABLE action', () => {
- let action = addonActions.enable();
- expect(action.type).to.equal(actions.ADDON_ENABLE);
- });
- });
-
- describe("disable", () => {
- it('create ADDON_DISABLE action', () => {
- let action = addonActions.disable();
- expect(action.type).to.equal(actions.ADDON_DISABLE);
- });
- });
-
- describe("toggle", () => {
- it('create ADDON_TOGGLE_ENABLED action', () => {
- let action = addonActions.toggleEnabled();
- expect(action.type).to.equal(actions.ADDON_TOGGLE_ENABLED);
- });
- });
-});
diff --git a/test/content/reducers/addon.test.js b/test/content/reducers/addon.test.js
index 8c546d2..d4eb845 100644
--- a/test/content/reducers/addon.test.js
+++ b/test/content/reducers/addon.test.js
@@ -7,31 +7,11 @@ describe("addon reducer", () => {
expect(state).to.have.property('enabled', true);
});
- it('return next state for ADDON_ENABLE', () => {
- let action = { type: actions.ADDON_ENABLE};
+ it('return next state for ADDON_SET_ENABLED', () => {
+ let action = { type: actions.ADDON_SET_ENABLED, enabled: true };
let prev = { enabled: false };
let state = addonReducer(prev, action);
expect(state.enabled).is.equal(true);
});
-
- it('return next state for ADDON_DISABLE', () => {
- let action = { type: actions.ADDON_DISABLE};
- let prev = { enabled: true };
- let state = addonReducer(prev, action);
-
- expect(state.enabled).is.equal(false);
- });
-
- it('return next state for ADDON_TOGGLE_ENABLED', () => {
- let action = { type: actions.ADDON_TOGGLE_ENABLED };
- let state = { enabled: false };
-
- state = addonReducer(state, action);
- expect(state.enabled).is.equal(true);
-
- state = addonReducer(state, action);
- expect(state.enabled).is.equal(false);
- });
-
});