diff options
Diffstat (limited to 'src/components')
-rw-r--r-- | src/components/background-input.js | 4 | ||||
-rw-r--r-- | src/components/background.js | 36 | ||||
-rw-r--r-- | src/components/completion.js | 6 | ||||
-rw-r--r-- | src/components/console.js | 30 | ||||
-rw-r--r-- | src/components/content-input.js | 2 | ||||
-rw-r--r-- | src/components/follow.js | 10 | ||||
-rw-r--r-- | src/components/setting.js | 4 |
7 files changed, 56 insertions, 36 deletions
diff --git a/src/components/background-input.js b/src/components/background-input.js index 4735d5a..bd6ecf9 100644 --- a/src/components/background-input.js +++ b/src/components/background-input.js @@ -1,5 +1,5 @@ -import * as inputActions from '../actions/input'; -import * as operationActions from '../actions/operation'; +import * as inputActions from 'actions/input'; +import * as operationActions from 'actions/operation'; export default class BackgroundInputComponent { constructor(store) { diff --git a/src/components/background.js b/src/components/background.js index 0585a04..487e3af 100644 --- a/src/components/background.js +++ b/src/components/background.js @@ -1,9 +1,8 @@ -import messages from '../content/messages'; -import * as commandActions from '../actions/command'; -import * as consoleActions from '../actions/console'; -import * as inputActions from '../actions/input'; -import * as settingsActions from '../actions/setting'; -import * as tabActions from '../actions/tab'; +import messages from 'content/messages'; +import * as inputActions from 'actions/input'; +import * as settingsActions from 'actions/setting'; +import * as tabActions from 'actions/tab'; +import * as commands from 'shared/commands'; export default class BackgroundComponent { constructor(store) { @@ -12,9 +11,12 @@ export default class BackgroundComponent { browser.runtime.onMessage.addListener((message, sender) => { try { - this.onMessage(message, sender); + return this.onMessage(message, sender); } catch (e) { - this.store.dispatch(consoleActions.showError(e.message), sender); + return browser.tabs.sendMessage(sender.tab.id, { + type: messages.CONSOLE_SHOW_ERROR, + text: e.message, + }); } }); } @@ -44,14 +46,18 @@ export default class BackgroundComponent { return this.store.dispatch( tabActions.openToTab(message.url, sender.tab), sender); case messages.CONSOLE_BLURRED: - return this.store.dispatch( - consoleActions.hide(), sender); + return browser.tabs.sendMessage(sender.tab.id, { + type: messages.CONSOLE_HIDE, + }); case messages.CONSOLE_ENTERED: - return this.store.dispatch( - commandActions.exec(message.text, this.settings), sender); - case messages.CONSOLE_CHANGEED: - return this.store.dispatch( - commandActions.complete(message.text, this.settings), sender); + return commands.exec(message.text, this.settings).catch((e) => { + return browser.tabs.sendMessage(sender.tab.id, { + type: messages.CONSOLE_SHOW_ERROR, + text: e.message, + }); + }); + case messages.CONSOLE_QUERY_COMPLETIONS: + return commands.complete(message.text, this.settings); case messages.SETTINGS_RELOAD: this.store.dispatch(settingsActions.load()); } diff --git a/src/components/completion.js b/src/components/completion.js index 489061c..f527a84 100644 --- a/src/components/completion.js +++ b/src/components/completion.js @@ -6,15 +6,15 @@ export default class Completion { } update() { - let state = this.store.getState(); + let state = this.store.getState().console; if (JSON.stringify(this.prevState) === JSON.stringify(state)) { return; } this.wrapper.innerHTML = ''; - for (let i = 0; i < state.groups.length; ++i) { - let group = state.groups[i]; + for (let i = 0; i < state.completions.length; ++i) { + let group = state.completions[i]; let title = this.createCompletionTitle(group.name); this.wrapper.append(title); diff --git a/src/components/console.js b/src/components/console.js index 9580dcf..12341c1 100644 --- a/src/components/console.js +++ b/src/components/console.js @@ -1,5 +1,5 @@ -import messages from '../content/messages'; -import * as completionActions from '../actions/completion'; +import messages from 'content/messages'; +import * as consoleActions from 'actions/console'; export default class ConsoleComponent { constructor(wrapper, store) { @@ -36,12 +36,12 @@ export default class ConsoleComponent { return browser.runtime.sendMessage({ type: messages.CONSOLE_ENTERED, text: e.target.value - }); + }).then(this.onBlur); case KeyboardEvent.DOM_VK_TAB: if (e.shiftKey) { - this.store.dispatch(completionActions.selectPrev()); + this.store.dispatch(consoleActions.completionPrev()); } else { - this.store.dispatch(completionActions.selectNext()); + this.store.dispatch(consoleActions.completionNext()); } e.stopPropagation(); e.preventDefault(); @@ -63,13 +63,15 @@ export default class ConsoleComponent { this.prevValue = e.target.value; return browser.runtime.sendMessage({ - type: messages.CONSOLE_CHANGEED, + type: messages.CONSOLE_QUERY_COMPLETIONS, text: e.target.value + }).then((completions) => { + this.store.dispatch(consoleActions.setCompletions(completions)); }); } - // TODO use store/reducer to update state. - update(state) { + update() { + let state = this.store.getState().console; if (!this.prevState.commandShown && state.commandShown) { this.showCommand(state.commandText); } else if (!state.commandShown) { @@ -83,6 +85,18 @@ export default class ConsoleComponent { this.hideError(); } + if (state.groupSelection >= 0 && state.itemSelection >= 0) { + let group = state.completions[state.groupSelection]; + let item = group.items[state.itemSelection]; + this.setCommandValue(item.content); + } else if (state.completions.length > 0 && + JSON.stringify(this.prevState.completions) === + JSON.stringify(state.completions)) { + // Reset input only completion groups not changed (unselected an item in + // completion) in order to avoid to override previous input + this.setCommandCompletionOrigin(); + } + this.prevState = state; } diff --git a/src/components/content-input.js b/src/components/content-input.js index 10c785b..38d57fd 100644 --- a/src/components/content-input.js +++ b/src/components/content-input.js @@ -1,4 +1,4 @@ -import messages from '../content/messages'; +import messages from 'content/messages'; export default class ContentInputComponent { constructor(target) { diff --git a/src/components/follow.js b/src/components/follow.js index 4fe4c58..9221759 100644 --- a/src/components/follow.js +++ b/src/components/follow.js @@ -1,7 +1,7 @@ -import * as followActions from '../actions/follow'; -import messages from '../content/messages'; -import Hint from '../content/hint'; -import HintKeyProducer from '../content/hint-key-producer'; +import * as followActions from 'actions/follow'; +import messages from 'content/messages'; +import Hint from 'content/hint'; +import HintKeyProducer from 'content/hint-key-producer'; const DEFAULT_HINT_CHARSET = 'abcdefghijklmnopqrstuvwxyz'; @@ -44,7 +44,7 @@ export default class FollowComponent { update() { let prevState = this.state; - this.state = this.store.getState(); + this.state = this.store.getState().follow; if (!prevState.enabled && this.state.enabled) { this.create(); } else if (prevState.enabled && !this.state.enabled) { diff --git a/src/components/setting.js b/src/components/setting.js index 1f3b3fe..c2f99b6 100644 --- a/src/components/setting.js +++ b/src/components/setting.js @@ -1,5 +1,5 @@ -import * as settingActions from '../actions/setting'; -import { validate } from '../shared/validators/setting'; +import * as settingActions from 'actions/setting'; +import { validate } from 'shared/validators/setting'; export default class SettingComponent { constructor(wrapper, store) { |