diff options
author | Shin'ya Ueoka <ueokande@i-beam.org> | 2018-07-07 14:33:14 +0900 |
---|---|---|
committer | Shin'ya Ueoka <ueokande@i-beam.org> | 2018-07-08 11:44:37 +0900 |
commit | 85b4bd5b073af729ff325e90fa3c9078f90277ac (patch) | |
tree | a67bd01c4a739ede22a12b47dfd217fc52dc2dbb /src/console | |
parent | 4fa93663d7761a8ea67973a5c4f317f4138518ed (diff) |
Use pure redux on console
Diffstat (limited to 'src/console')
-rw-r--r-- | src/console/actions/console.js | 30 | ||||
-rw-r--r-- | src/console/components/console.js | 61 | ||||
-rw-r--r-- | src/console/index.js | 8 |
3 files changed, 53 insertions, 46 deletions
diff --git a/src/console/actions/console.js b/src/console/actions/console.js index f80045f..3713a76 100644 --- a/src/console/actions/console.js +++ b/src/console/actions/console.js @@ -1,3 +1,4 @@ +import messages from 'shared/messages'; import actions from 'console/actions'; const hide = () => { @@ -34,11 +35,30 @@ const showInfo = (text) => { }; const hideCommand = () => { + window.top.postMessage(JSON.stringify({ + type: messages.CONSOLE_UNFOCUS, + }), '*'); return { type: actions.CONSOLE_HIDE_COMMAND, }; }; +const enterCommand = async(text) => { + await browser.runtime.sendMessage({ + type: messages.CONSOLE_ENTER_COMMAND, + text, + }); + return hideCommand(text); +}; + +const enterFind = (text) => { + window.top.postMessage(JSON.stringify({ + type: messages.CONSOLE_ENTER_FIND, + text, + }), '*'); + return hideCommand(); +}; + const setConsoleText = (consoleText) => { return { type: actions.CONSOLE_SET_CONSOLE_TEXT, @@ -46,11 +66,15 @@ const setConsoleText = (consoleText) => { }; }; -const setCompletions = (completionSource, completions) => { +const getCompletions = async(text) => { + let completions = await browser.runtime.sendMessage({ + type: messages.CONSOLE_QUERY_COMPLETIONS, + text, + }); return { type: actions.CONSOLE_SET_COMPLETIONS, - completionSource, completions, + completionSource: text, }; }; @@ -68,5 +92,5 @@ const completionPrev = () => { export { hide, showCommand, showFind, showError, showInfo, hideCommand, setConsoleText, - setCompletions, completionNext, completionPrev + enterCommand, enterFind, getCompletions, completionNext, completionPrev }; diff --git a/src/console/components/console.js b/src/console/components/console.js index 417c9f6..bd3e344 100644 --- a/src/console/components/console.js +++ b/src/console/components/console.js @@ -1,4 +1,3 @@ -import messages from 'shared/messages'; import * as consoleActions from 'console/actions/console'; const inputShownMode = (state) => { @@ -26,15 +25,22 @@ export default class ConsoleComponent { onBlur() { let state = this.store.getState(); - if (state.mode === 'command') { - this.hideCommand(); + if (state.mode === 'command' || state.mode === 'find') { + return this.store.dispatch(consoleActions.hideCommand()); } } doEnter(e) { e.stopPropagation(); e.preventDefault(); - return this.onEntered(e.target.value); + + let state = this.store.getState(); + let value = e.target.value; + if (state.mode === 'command') { + return this.store.dispatch(consoleActions.enterCommand(value)); + } else if (state.mode === 'find') { + return this.store.dispatch(consoleActions.enterFind(value)); + } } selectNext(e) { @@ -51,11 +57,11 @@ export default class ConsoleComponent { onKeyDown(e) { if (e.keyCode === KeyboardEvent.DOM_VK_ESCAPE && e.ctrlKey) { - return this.hideCommand(); + this.store.dispatch(consoleActions.hideCommand()); } switch (e.keyCode) { case KeyboardEvent.DOM_VK_ESCAPE: - return this.hideCommand(); + return this.store.dispatch(consoleActions.hideCommand()); case KeyboardEvent.DOM_VK_RETURN: return this.doEnter(e); case KeyboardEvent.DOM_VK_TAB: @@ -69,7 +75,7 @@ export default class ConsoleComponent { break; case KeyboardEvent.DOM_VK_OPEN_BRACKET: if (e.ctrlKey) { - return this.hideCommand(); + return this.store.dispatch(consoleActions.hideCommand()); } break; case KeyboardEvent.DOM_VK_M: @@ -90,32 +96,10 @@ export default class ConsoleComponent { } } - onEntered(value) { - let state = this.store.getState(); - if (state.mode === 'command') { - browser.runtime.sendMessage({ - type: messages.CONSOLE_ENTER_COMMAND, - text: value, - }); - this.hideCommand(); - } else if (state.mode === 'find') { - this.hideCommand(); - window.top.postMessage(JSON.stringify({ - type: messages.CONSOLE_ENTER_FIND, - text: value, - }), '*'); - } - } - - async onInput(e) { - this.store.dispatch(consoleActions.setConsoleText(e.target.value)); - - let source = e.target.value; - let completions = await browser.runtime.sendMessage({ - type: messages.CONSOLE_QUERY_COMPLETIONS, - text: source, - }); - this.store.dispatch(consoleActions.setCompletions(source, completions)); + onInput(e) { + let text = e.target.value; + this.store.dispatch(consoleActions.setConsoleText(text)); + this.store.dispatch(consoleActions.getCompletions(text)); } onInputShown(state) { @@ -126,17 +110,12 @@ export default class ConsoleComponent { window.focus(); if (state.mode === 'command') { - this.onInput({ target: input }); + let text = state.consoleText; + input.value = text; + this.store.dispatch(consoleActions.getCompletions(text)); } } - hideCommand() { - this.store.dispatch(consoleActions.hideCommand()); - window.top.postMessage(JSON.stringify({ - type: messages.CONSOLE_UNFOCUS, - }), '*'); - } - update() { let state = this.store.getState(); diff --git a/src/console/index.js b/src/console/index.js index 156456c..8724a44 100644 --- a/src/console/index.js +++ b/src/console/index.js @@ -3,10 +3,14 @@ import messages from 'shared/messages'; import CompletionComponent from 'console/components/completion'; import ConsoleComponent from 'console/components/console'; import reducers from 'console/reducers'; -import { createStore } from 'shared/store'; +import { createStore, applyMiddleware } from 'redux'; +import promise from 'redux-promise'; import * as consoleActions from 'console/actions/console'; -const store = createStore(reducers); +const store = createStore( + reducers, + applyMiddleware(promise), +); window.addEventListener('load', () => { let wrapper = document.querySelector('#vimvixen-console-completion'); |