console component

This commit is contained in:
Shin'ya Ueoka 2017-10-01 09:59:34 +09:00
parent 749eea5ecf
commit 0c0a7efe70
3 changed files with 146 additions and 84 deletions

131
src/components/console.js Normal file
View file

@ -0,0 +1,131 @@
import messages from '../content/messages';
import * as completionActions from '../actions/completion';
export default class ConsoleComponent {
constructor(wrapper, store) {
this.wrapper = wrapper;
this.prevValue = '';
this.prevState = {};
this.completionOrigin = '';
this.store = store;
let doc = this.wrapper.ownerDocument;
let input = doc.querySelector('#vimvixen-console-command-input');
input.addEventListener('blur', this.onBlur.bind(this));
input.addEventListener('keydown', this.onKeyDown.bind(this));
input.addEventListener('keyup', this.onKeyUp.bind(this));
}
static onBlur() {
return browser.runtime.sendMessage({
type: messages.CONSOLE_BLURRED,
});
}
onKeyDown(e) {
let doc = this.wrapper.ownerDocument;
let input = doc.querySelector('#vimvixen-console-command-input');
switch (e.keyCode) {
case KeyboardEvent.DOM_VK_ESCAPE:
return input.blur();
case KeyboardEvent.DOM_VK_RETURN:
return browser.runtime.sendMessage({
type: messages.CONSOLE_ENTERED,
text: e.target.value
});
case KeyboardEvent.DOM_VK_TAB:
if (e.shiftKey) {
this.store.dispatch(completionActions.selectPrev());
} else {
this.store.dispatch(completionActions.selectNext());
}
e.stopPropagation();
e.preventDefault();
break;
}
}
onKeyUp(e) {
if (e.keyCode === KeyboardEvent.DOM_VK_TAB) {
return;
}
if (e.target.value === this.prevValue) {
return;
}
let doc = this.wrapper.ownerDocument;
let input = doc.querySelector('#vimvixen-console-command-input');
this.completionOrigin = input.value;
this.prevValue = e.target.value;
return browser.runtime.sendMessage({
type: messages.CONSOLE_CHANGEED,
text: e.target.value
});
}
// TODO use store/reducer to update state.
update(state) {
if (!this.prevState.commandShown && state.commandShown) {
this.showCommand(state.commandText);
} else if (!state.commandShown) {
this.hideCommand();
}
if (state.errorShown) {
this.setErrorText(state.errorText);
this.showError();
} else {
this.hideError();
}
this.prevState = state;
}
showCommand(text) {
let doc = this.wrapper.ownerDocument;
let command = doc.querySelector('#vimvixen-console-command');
let input = doc.querySelector('#vimvixen-console-command-input');
command.style.display = 'block';
input.value = text;
input.focus();
}
hideCommand() {
let doc = this.wrapper.ownerDocument;
let command = doc.querySelector('#vimvixen-console-command');
command.style.display = 'none';
}
setCommandValue(value) {
let doc = this.wrapper.ownerDocument;
let input = doc.querySelector('#vimvixen-console-command-input');
input.value = value;
}
setCommandCompletionOrigin() {
let doc = this.wrapper.ownerDocument;
let input = doc.querySelector('#vimvixen-console-command-input');
input.value = this.completionOrigin;
}
setErrorText(text) {
let doc = this.wrapper.ownerDocument;
let error = doc.querySelector('#vimvixen-console-error');
error.textContent = text;
}
showError() {
let doc = this.wrapper.ownerDocument;
let error = doc.querySelector('#vimvixen-console-error');
error.style.display = 'block';
}
hideError() {
let doc = this.wrapper.ownerDocument;
let error = doc.querySelector('#vimvixen-console-error');
error.style.display = 'none';
}
}