aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/background/components/background.js6
-rw-r--r--src/console/components/console.js40
-rw-r--r--src/console/index.js2
-rw-r--r--src/content/actions/find.js6
-rw-r--r--src/content/actions/operation.js9
-rw-r--r--src/content/components/top-content/find.js23
-rw-r--r--src/content/components/top-content/index.js4
-rw-r--r--src/shared/messages.js9
8 files changed, 74 insertions, 25 deletions
diff --git a/src/background/components/background.js b/src/background/components/background.js
index a5f4f5f..2d94310 100644
--- a/src/background/components/background.js
+++ b/src/background/components/background.js
@@ -34,11 +34,7 @@ export default class BackgroundComponent {
}
return this.store.dispatch(
tabActions.openToTab(message.url, sender.tab), sender);
- case messages.CONSOLE_BLURRED:
- return browser.tabs.sendMessage(sender.tab.id, {
- type: messages.CONSOLE_HIDE_COMMAND,
- });
- case messages.CONSOLE_ENTERED:
+ case messages.CONSOLE_ENTER_COMMAND:
return commands.exec(message.text, settings.value).catch((e) => {
return browser.tabs.sendMessage(sender.tab.id, {
type: messages.CONSOLE_SHOW_ERROR,
diff --git a/src/console/components/console.js b/src/console/components/console.js
index 605feb2..e83a1c9 100644
--- a/src/console/components/console.js
+++ b/src/console/components/console.js
@@ -25,23 +25,18 @@ export default class ConsoleComponent {
}
onBlur() {
- return browser.runtime.sendMessage({
- type: messages.CONSOLE_BLURRED,
- });
+ let state = this.store.getState();
+ if (state.mode === 'command') {
+ this.hideCommand();
+ }
}
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();
+ return this.hideCommand();
case KeyboardEvent.DOM_VK_RETURN:
- return browser.runtime.sendMessage({
- type: messages.CONSOLE_ENTERED,
- text: e.target.value
- }).then(this.onBlur);
+ return this.onEntered(e.target.value);
case KeyboardEvent.DOM_VK_TAB:
if (e.shiftKey) {
this.store.dispatch(consoleActions.completionPrev());
@@ -54,6 +49,22 @@ 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,
+ }).then(this.hideCommand);
+ } else if (state.mode === 'find') {
+ this.hideCommand();
+ window.top.postMessage(JSON.stringify({
+ type: messages.CONSOLE_ENTER_FIND,
+ text: value,
+ }), '*');
+ }
+ }
+
onInput(e) {
this.store.dispatch(consoleActions.setConsoleText(e.target.value));
@@ -78,6 +89,13 @@ export default class ConsoleComponent {
}
}
+ 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 f886520..86edd9a 100644
--- a/src/console/index.js
+++ b/src/console/index.js
@@ -24,8 +24,6 @@ const onMessage = (message) => {
return store.dispatch(consoleActions.showError(message.text));
case messages.CONSOLE_SHOW_INFO:
return store.dispatch(consoleActions.showInfo(message.text));
- case messages.CONSOLE_HIDE_COMMAND:
- return store.dispatch(consoleActions.hideCommand());
}
};
diff --git a/src/content/actions/find.js b/src/content/actions/find.js
index 90c9de9..2d301fb 100644
--- a/src/content/actions/find.js
+++ b/src/content/actions/find.js
@@ -1,6 +1,6 @@
//
// window.find(aString, aCaseSensitive, aBackwards, aWrapAround,
-// aWholeWord, aSearchInFrames, aShowDialog);
+// aWholeWord, aSearchInFrames);
//
// NOTE: window.find is not standard API
// https://developer.mozilla.org/en-US/docs/Web/API/Window/find
@@ -17,7 +17,7 @@ const hide = () => {
const next = (keyword) => {
// TODO Error on no matched
- window.find(keyword, false, false, true, false, true, false);
+ window.find(keyword, false, false, true, false, true);
return {
type: actions.FIND_SET_KEYWORD,
keyword,
@@ -26,7 +26,7 @@ const next = (keyword) => {
const prev = (keyword) => {
// TODO Error on no matched
- window.find(keyword, false, true, true, false, true, false);
+ window.find(keyword, false, true, true, false, true);
return {
type: actions.FIND_SET_KEYWORD,
keyword,
diff --git a/src/content/actions/operation.js b/src/content/actions/operation.js
index 897f361..767f14b 100644
--- a/src/content/actions/operation.js
+++ b/src/content/actions/operation.js
@@ -6,6 +6,7 @@ import * as urls from 'content/urls';
import * as consoleFrames from 'content/console-frames';
import * as addonActions from './addon';
+// eslint-disable-next-line complexity
const exec = (operation) => {
switch (operation.type) {
case operations.ADDON_ENABLE:
@@ -14,6 +15,14 @@ const exec = (operation) => {
return addonActions.disable();
case operations.ADDON_TOGGLE_ENABLED:
return addonActions.toggleEnabled();
+ case operations.FIND_NEXT:
+ return window.top.postMessage(JSON.stringify({
+ type: messages.FIND_NEXT,
+ }), '*');
+ case operations.FIND_PREV:
+ return window.top.postMessage(JSON.stringify({
+ type: messages.FIND_PREV,
+ }), '*');
case operations.SCROLL_VERTICALLY:
return scrolls.scrollVertically(window, operation.count);
case operations.SCROLL_HORIZONALLY:
diff --git a/src/content/components/top-content/find.js b/src/content/components/top-content/find.js
new file mode 100644
index 0000000..6696f00
--- /dev/null
+++ b/src/content/components/top-content/find.js
@@ -0,0 +1,23 @@
+import * as findActions from 'content/actions/find';
+import messages from 'shared/messages';
+
+export default class FindComponent {
+ constructor(win, store) {
+ this.win = win;
+ this.store = store;
+
+ messages.onMessage(this.onMessage.bind(this));
+ }
+
+ onMessage(message) {
+ let state = this.store.getState().find;
+ switch (message.type) {
+ case messages.CONSOLE_ENTER_FIND:
+ return this.store.dispatch(findActions.next(message.text));
+ case messages.FIND_NEXT:
+ return this.store.dispatch(findActions.next(state.keyword));
+ case messages.FIND_PREV:
+ return this.store.dispatch(findActions.prev(state.keyword));
+ }
+ }
+}
diff --git a/src/content/components/top-content/index.js b/src/content/components/top-content/index.js
index 5124f83..cf21ec4 100644
--- a/src/content/components/top-content/index.js
+++ b/src/content/components/top-content/index.js
@@ -1,5 +1,6 @@
import CommonComponent from '../common';
import FollowController from './follow-controller';
+import FindComponent from './find';
import * as consoleFrames from '../../console-frames';
import * as addonActions from '../../actions/addon';
import messages from 'shared/messages';
@@ -14,6 +15,7 @@ export default class TopContent {
new CommonComponent(win, store); // eslint-disable-line no-new
new FollowController(win, store); // eslint-disable-line no-new
+ new FindComponent(win, store); // eslint-disable-line no-new
// TODO make component
consoleFrames.initialize(this.win.document);
@@ -47,7 +49,7 @@ export default class TopContent {
onMessage(message) {
switch (message.type) {
- case messages.CONSOLE_HIDE_COMMAND:
+ case messages.CONSOLE_UNFOCUS:
this.win.focus();
consoleFrames.blur(window.document);
return Promise.resolve();
diff --git a/src/shared/messages.js b/src/shared/messages.js
index f859e93..de00a3f 100644
--- a/src/shared/messages.js
+++ b/src/shared/messages.js
@@ -24,13 +24,13 @@ const onMessage = (listener) => {
export default {
BACKGROUND_OPERATION: 'background.operation',
- CONSOLE_BLURRED: 'console.blured',
- CONSOLE_ENTERED: 'console.entered',
+ CONSOLE_UNFOCUS: 'console.unfocus',
+ CONSOLE_ENTER_COMMAND: 'console.enter.command',
+ CONSOLE_ENTER_FIND: 'console.enter.find',
CONSOLE_QUERY_COMPLETIONS: 'console.query.completions',
CONSOLE_SHOW_COMMAND: 'console.show.command',
CONSOLE_SHOW_ERROR: 'console.show.error',
CONSOLE_SHOW_INFO: 'console.show.info',
- CONSOLE_HIDE_COMMAND: 'console.hide.command',
CONSOLE_SHOW_FIND: 'console.show.find',
FOLLOW_START: 'follow.start',
@@ -42,6 +42,9 @@ export default {
FOLLOW_ACTIVATE: 'follow.activate',
FOLLOW_KEY_PRESS: 'follow.key.press',
+ FIND_NEXT: 'find.next',
+ FIND_PREV: 'find.prev',
+
OPEN_URL: 'open.url',
SETTINGS_RELOAD: 'settings.reload',