add setting actions in content

This commit is contained in:
Shin'ya Ueoka 2017-10-22 17:45:16 +09:00
parent 7639e99b75
commit c6eb5553d0
10 changed files with 74 additions and 25 deletions

View file

@ -1,12 +1,15 @@
export default {
// User input
// Enable/disable
ADDON_ENABLE: 'addon.enable',
ADDON_DISABLE: 'addon.disable',
ADDON_TOGGLE_ENABLED: 'addon.toggle.enabled',
// Settings
SETTING_SET: 'setting.set',
// User input
INPUT_KEY_PRESS: 'input.key,press',
INPUT_CLEAR_KEYS: 'input.clear.keys',
INPUT_SET_KEYMAPS: 'input.set.keymaps',
// Completion
COMPLETION_SET_ITEMS: 'completion.set.items',

View file

@ -13,11 +13,4 @@ const clearKeys = () => {
};
};
const setKeymaps = (keymaps) => {
return {
type: actions.INPUT_SET_KEYMAPS,
keymaps,
};
};
export { keyPress, clearKeys, setKeymaps };
export { keyPress, clearKeys };

View file

@ -0,0 +1,10 @@
import actions from 'content/actions';
const set = (value) => {
return {
type: actions.SETTING_SET,
value,
};
};
export { set };

View file

@ -1,7 +1,7 @@
import InputComponent from './input';
import KeymapperComponent from './keymapper';
import FollowComponent from './follow';
import * as inputActions from 'content/actions/input';
import * as settingActions from 'content/actions/setting';
import messages from 'shared/messages';
export default class Common {
@ -40,7 +40,7 @@ export default class Common {
browser.runtime.sendMessage({
type: messages.SETTINGS_QUERY,
}).then((settings) => {
this.store.dispatch(inputActions.setKeymaps(settings.keymaps));
this.store.dispatch(settingActions.set(settings));
});
}
}

View file

@ -11,19 +11,20 @@ export default class KeymapperComponent {
}
key(key) {
let enabled = this.store.getState().addon.enabled;
this.store.dispatch(inputActions.keyPress(key));
let input = this.store.getState().input;
let matched = Object.keys(input.keymaps).filter((keyStr) => {
let state = this.store.getState();
let input = state.input;
let keymaps = state.setting.keymaps;
let matched = Object.keys(keymaps).filter((keyStr) => {
return keyStr.startsWith(input.keys);
});
if (!enabled) {
if (!state.addon.enabled) {
// available keymaps are only ADDON_ENABLE and ADDON_TOGGLE_ENABLED if
// the addon disabled
matched = matched.filter((keys) => {
let type = input.keymaps[keys].type;
let type = keymaps[keys].type;
return type === operations.ADDON_ENABLE ||
type === operations.ADDON_TOGGLE_ENABLED;
});
@ -35,7 +36,7 @@ export default class KeymapperComponent {
matched.length === 1 && input.keys !== matched[0]) {
return true;
}
let operation = input.keymaps[matched];
let operation = keymaps[matched];
this.store.dispatch(operationActions.exec(operation));
this.store.dispatch(inputActions.clearKeys());
return true;

View file

@ -1,10 +1,12 @@
import addonReducer from './addon';
import settingReducer from './setting';
import inputReducer from './input';
import followReducer from './follow';
// Make setting reducer instead of re-use
const defaultState = {
addon: addonReducer(undefined, {}),
setting: settingReducer(undefined, {}),
input: inputReducer(undefined, {}),
follow: followReducer(undefined, {}),
};
@ -12,6 +14,7 @@ const defaultState = {
export default function reducer(state = defaultState, action = {}) {
return Object.assign({}, state, {
addon: addonReducer(state.addon, action),
setting: settingReducer(state.setting, action),
input: inputReducer(state.input, action),
follow: followReducer(state.follow, action),
});

View file

@ -1,8 +1,7 @@
import actions from 'content/actions';
const defaultState = {
keys: '',
keymaps: {},
keys: ''
};
export default function reducer(state = defaultState, action = {}) {
@ -15,10 +14,6 @@ export default function reducer(state = defaultState, action = {}) {
return Object.assign({}, state, {
keys: '',
});
case actions.INPUT_SET_KEYMAPS:
return Object.assign({}, state, {
keymaps: action.keymaps,
});
default:
return state;
}

View file

@ -0,0 +1,13 @@
import actions from 'content/actions';
const defaultState = {};
export default function reducer(state = defaultState, action = {}) {
switch (action.type) {
case actions.SETTING_SET:
return Object.assign({}, action.value);
default:
return state;
}
}