aboutsummaryrefslogtreecommitdiff
path: root/src/content/components/common
diff options
context:
space:
mode:
authorShin'ya Ueoka <ueokande@i-beam.org>2017-10-21 21:17:27 +0900
committerGitHub <noreply@github.com>2017-10-21 21:17:27 +0900
commit7639e99b755e372712dca36e077a85d9a025cd9f (patch)
tree177a523e5996e302d647853cf4b11767e669de3c /src/content/components/common
parent941073404b534d7f79e90f29b514a5f06fb8080d (diff)
parent6ad143d294df0a0cc2dfb775ecab9f8b12ee7be5 (diff)
Merge pull request #86 from ueokande/10-disable-temporary
Disable add-on temporary
Diffstat (limited to 'src/content/components/common')
-rw-r--r--src/content/components/common/index.js4
-rw-r--r--src/content/components/common/input.js29
-rw-r--r--src/content/components/common/keymapper.js16
3 files changed, 39 insertions, 10 deletions
diff --git a/src/content/components/common/index.js b/src/content/components/common/index.js
index 98a2337..db0ac43 100644
--- a/src/content/components/common/index.js
+++ b/src/content/components/common/index.js
@@ -10,8 +10,8 @@ export default class Common {
const input = new InputComponent(win.document.body, store);
const keymapper = new KeymapperComponent(store);
- input.onKey((key, ctrl) => follow.key(key, ctrl));
- input.onKey((key, ctrl) => keymapper.key(key, ctrl));
+ input.onKey(key => follow.key(key));
+ input.onKey(key => keymapper.key(key));
this.store = store;
this.children = [
diff --git a/src/content/components/common/input.js b/src/content/components/common/input.js
index df09894..f285b0c 100644
--- a/src/content/components/common/input.js
+++ b/src/content/components/common/input.js
@@ -1,3 +1,21 @@
+const modifierdKeyName = (name) => {
+ if (name.length === 1) {
+ return name.toUpperCase();
+ } else if (name === 'Escape') {
+ return 'Esc';
+ }
+ return name;
+};
+
+const mapKey = (e) => {
+ if (e.ctrlKey) {
+ return '<C-' + modifierdKeyName(e.key) + '>';
+ } else if (e.shiftKey && e.key.length !== 1) {
+ return '<S-' + modifierdKeyName(e.key) + '>';
+ }
+ return e.key;
+};
+
export default class InputComponent {
constructor(target) {
this.pressed = {};
@@ -47,17 +65,16 @@ export default class InputComponent {
return;
}
- let stop = false;
+ let key = mapKey(e);
+
for (let listener of this.onKeyListeners) {
- stop = stop || listener(e.key, e.ctrlKey);
+ let stop = listener(key);
if (stop) {
+ e.preventDefault();
+ e.stopPropagation();
break;
}
}
- if (stop) {
- e.preventDefault();
- e.stopPropagation();
- }
}
fromInput(e) {
diff --git a/src/content/components/common/keymapper.js b/src/content/components/common/keymapper.js
index 655c3f2..5070cd8 100644
--- a/src/content/components/common/keymapper.js
+++ b/src/content/components/common/keymapper.js
@@ -1,5 +1,6 @@
import * as inputActions from 'content/actions/input';
import * as operationActions from 'content/actions/operation';
+import operations from 'shared/operations';
export default class KeymapperComponent {
constructor(store) {
@@ -9,13 +10,24 @@ export default class KeymapperComponent {
update() {
}
- key(key, ctrl) {
- this.store.dispatch(inputActions.keyPress(key, ctrl));
+ 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) => {
return keyStr.startsWith(input.keys);
});
+ if (!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;
+ return type === operations.ADDON_ENABLE ||
+ type === operations.ADDON_TOGGLE_ENABLED;
+ });
+ }
if (matched.length === 0) {
this.store.dispatch(inputActions.clearKeys());
return false;