parent
749eea5ecf
commit
0c0a7efe70
3 changed files with 146 additions and 84 deletions
@ -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'; |
||||||
|
} |
||||||
|
} |
Reference in new issue