remove deprecated property in KeyboardEvent

jh-changes
Shin'ya Ueoka 7 years ago
parent eff8d9a83e
commit 5ac1f60ece
  1. 12
      src/actions/input.js
  2. 6
      src/components/background-input.js
  3. 2
      src/components/background.js
  4. 2
      src/components/content-input.js
  5. 1
      src/content/index.js
  6. 11
      src/reducers/input.js
  7. 21
      src/shared/keys.js
  8. 11
      test/actions/input.test.js
  9. 22
      test/reducers/input.test.js
  10. 31
      test/shared/keys.test.js

@ -1,10 +1,16 @@
import actions from '../actions';
const keyPress = (code, ctrl) => {
const asKeymapChars = (key, ctrl) => {
if (ctrl) {
return '<C-' + key.toUpperCase() + '>';
}
return key;
};
const keyPress = (key, ctrl) => {
return {
type: actions.INPUT_KEY_PRESS,
code,
ctrl
key: asKeymapChars(key, ctrl),
};
};

@ -1,5 +1,4 @@
import * as inputActions from '../actions/input';
import * as keys from '../shared/keys';
import * as operationActions from '../actions/operation';
export default class BackgroundInputComponent {
@ -37,15 +36,14 @@ export default class BackgroundInputComponent {
}
handleKeysChanged(sender, input) {
let prefix = keys.asKeymapChars(input.keys);
let matched = Object.keys(this.keymaps).filter((keyStr) => {
return keyStr.startsWith(prefix);
return keyStr.startsWith(input.keys);
});
if (matched.length === 0) {
this.store.dispatch(inputActions.clearKeys(), sender);
return Promise.resolve();
} else if (matched.length > 1 ||
matched.length === 1 && prefix !== matched[0]) {
matched.length === 1 && input.keys !== matched[0]) {
return Promise.resolve();
}
let operation = this.keymaps[matched];

@ -35,7 +35,7 @@ export default class BackgroundComponent {
switch (message.type) {
case messages.KEYDOWN:
return this.store.dispatch(
inputActions.keyPress(message.code, message.ctrl), sender);
inputActions.keyPress(message.key, message.ctrl), sender);
case messages.OPEN_URL:
if (message.newTab) {
return this.store.dispatch(

@ -18,7 +18,7 @@ export default class ContentInputComponent {
}
browser.runtime.sendMessage({
type: messages.KEYDOWN,
code: e.which,
key: e.key,
ctrl: e.ctrlKey
});
}

@ -19,6 +19,7 @@ followStore.subscribe(() => {
console.error(e);
}
});
// eslint-disable-next-line no-unused-vars
const contentInputComponent = new ContentInputComponent(window);
consoleFrames.initialize(window.document);

@ -1,23 +1,18 @@
import actions from '../actions';
const defaultState = {
keys: [],
keys: '',
};
export default function reducer(state = defaultState, action = {}) {
switch (action.type) {
case actions.INPUT_KEY_PRESS:
return Object.assign({}, state, {
keys: state.keys.concat([
{
code: action.code,
ctrl: action.ctrl
}
])
keys: state.keys + action.key
});
case actions.INPUT_CLEAR_KEYS:
return Object.assign({}, state, {
keys: [],
keys: '',
});
default:
return state;

@ -1,21 +0,0 @@
const asKeymapChars = (keys) => {
return keys.map((k) => {
let c = String.fromCharCode(k.code);
if (k.ctrl) {
return '<C-' + c.toUpperCase() + '>';
}
return c;
}).join('');
};
const asCaretChars = (keys) => {
return keys.map((k) => {
let c = String.fromCharCode(k.code);
if (k.ctrl) {
return '^' + c.toUpperCase();
}
return c;
}).join('');
};
export { asKeymapChars, asCaretChars };

@ -5,10 +5,15 @@ import * as inputActions from '../../src/actions/input';
describe("input actions", () => {
describe("keyPress", () => {
it('create INPUT_KEY_PRESS action', () => {
let action = inputActions.keyPress(123, true);
let action = inputActions.keyPress('a', false);
expect(action.type).to.equal(actions.INPUT_KEY_PRESS);
expect(action.code).to.equal(123);
expect(action.ctrl).to.be.true;
expect(action.key).to.equal('a');
});
it('create INPUT_KEY_PRESS action from key with ctrl', () => {
let action = inputActions.keyPress('b', true);
expect(action.type).to.equal(actions.INPUT_KEY_PRESS);
expect(action.key).to.equal('<C-B>');
});
});

@ -5,30 +5,22 @@ import inputReducer from '../../src/reducers/input';
describe("input reducer", () => {
it('return the initial state', () => {
let state = inputReducer(undefined, {});
expect(state).to.have.deep.property('keys', []);
expect(state).to.have.deep.property('keys', '');
});
it('return next state for INPUT_KEY_PRESS', () => {
let action = { type: actions.INPUT_KEY_PRESS, code: 123, ctrl: true };
let action = { type: actions.INPUT_KEY_PRESS, key: 'a' };
let state = inputReducer(undefined, action);
expect(state).to.have.deep.property('keys', [{ code: 123, ctrl: true }]);
expect(state).to.have.deep.property('keys', 'a');
action = { type: actions.INPUT_KEY_PRESS, code: 456, ctrl: false };
action = { type: actions.INPUT_KEY_PRESS, key: '<C-B>' };
state = inputReducer(state, action);
expect(state).to.have.deep.property('keys', [
{ code: 123, ctrl: true },
{ code: 456, ctrl: false }
]);
expect(state).to.have.deep.property('keys', 'a<C-B>');
});
it('return next state for INPUT_CLEAR_KEYS', () => {
let action = { type: actions.INPUT_CLEAR_KEYS };
let state = inputReducer({
keys: [
{ code: 123, ctrl: true },
{ code: 456, ctrl: false }
]
}, action);
expect(state).to.have.deep.property('keys', []);
let state = inputReducer({ keys: 'abc' }, action);
expect(state).to.have.deep.property('keys', '');
});
});

@ -1,31 +0,0 @@
import { expect } from "chai";
import * as keys from '../../src/shared/keys';
describe("keys", () => {
const KEYMAP = {
'g<C-X>GG': [],
'gg': { type: 'scroll.top' },
};
const g = 'g'.charCodeAt(0);
const G = 'G'.charCodeAt(0);
const x = 'x'.charCodeAt(0);
describe('#asKeymapChars', () => {
let keySequence = [
{ code: g },
{ code: x, ctrl: true },
{ code: G }
];
expect(keys.asKeymapChars(keySequence)).to.equal('g<C-X>G');
});
describe('#asCaretChars', () => {
let keySequence = [
{ code: g },
{ code: x, ctrl: true },
{ code: G }
];
expect(keys.asCaretChars(keySequence)).to.equal('g^XG');
});
});