first find implementation

jh-changes
Shin'ya Ueoka 7 years ago
parent 956dd937d3
commit e021504356
  1. 6
      src/background/components/background.js
  2. 40
      src/console/components/console.js
  3. 2
      src/console/index.js
  4. 6
      src/content/actions/find.js
  5. 9
      src/content/actions/operation.js
  6. 23
      src/content/components/top-content/find.js
  7. 4
      src/content/components/top-content/index.js
  8. 9
      src/shared/messages.js

@ -34,11 +34,7 @@ export default class BackgroundComponent {
} }
return this.store.dispatch( return this.store.dispatch(
tabActions.openToTab(message.url, sender.tab), sender); tabActions.openToTab(message.url, sender.tab), sender);
case messages.CONSOLE_BLURRED: case messages.CONSOLE_ENTER_COMMAND:
return browser.tabs.sendMessage(sender.tab.id, {
type: messages.CONSOLE_HIDE_COMMAND,
});
case messages.CONSOLE_ENTERED:
return commands.exec(message.text, settings.value).catch((e) => { return commands.exec(message.text, settings.value).catch((e) => {
return browser.tabs.sendMessage(sender.tab.id, { return browser.tabs.sendMessage(sender.tab.id, {
type: messages.CONSOLE_SHOW_ERROR, type: messages.CONSOLE_SHOW_ERROR,

@ -25,23 +25,18 @@ export default class ConsoleComponent {
} }
onBlur() { onBlur() {
return browser.runtime.sendMessage({ let state = this.store.getState();
type: messages.CONSOLE_BLURRED, if (state.mode === 'command') {
}); this.hideCommand();
}
} }
onKeyDown(e) { onKeyDown(e) {
let doc = this.wrapper.ownerDocument;
let input = doc.querySelector('#vimvixen-console-command-input');
switch (e.keyCode) { switch (e.keyCode) {
case KeyboardEvent.DOM_VK_ESCAPE: case KeyboardEvent.DOM_VK_ESCAPE:
return input.blur(); return this.hideCommand();
case KeyboardEvent.DOM_VK_RETURN: case KeyboardEvent.DOM_VK_RETURN:
return browser.runtime.sendMessage({ return this.onEntered(e.target.value);
type: messages.CONSOLE_ENTERED,
text: e.target.value
}).then(this.onBlur);
case KeyboardEvent.DOM_VK_TAB: case KeyboardEvent.DOM_VK_TAB:
if (e.shiftKey) { if (e.shiftKey) {
this.store.dispatch(consoleActions.completionPrev()); 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) { onInput(e) {
this.store.dispatch(consoleActions.setConsoleText(e.target.value)); 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() { update() {
let state = this.store.getState(); let state = this.store.getState();

@ -24,8 +24,6 @@ const onMessage = (message) => {
return store.dispatch(consoleActions.showError(message.text)); return store.dispatch(consoleActions.showError(message.text));
case messages.CONSOLE_SHOW_INFO: case messages.CONSOLE_SHOW_INFO:
return store.dispatch(consoleActions.showInfo(message.text)); return store.dispatch(consoleActions.showInfo(message.text));
case messages.CONSOLE_HIDE_COMMAND:
return store.dispatch(consoleActions.hideCommand());
} }
}; };

@ -1,6 +1,6 @@
// //
// window.find(aString, aCaseSensitive, aBackwards, aWrapAround, // window.find(aString, aCaseSensitive, aBackwards, aWrapAround,
// aWholeWord, aSearchInFrames, aShowDialog); // aWholeWord, aSearchInFrames);
// //
// NOTE: window.find is not standard API // NOTE: window.find is not standard API
// https://developer.mozilla.org/en-US/docs/Web/API/Window/find // https://developer.mozilla.org/en-US/docs/Web/API/Window/find
@ -17,7 +17,7 @@ const hide = () => {
const next = (keyword) => { const next = (keyword) => {
// TODO Error on no matched // TODO Error on no matched
window.find(keyword, false, false, true, false, true, false); window.find(keyword, false, false, true, false, true);
return { return {
type: actions.FIND_SET_KEYWORD, type: actions.FIND_SET_KEYWORD,
keyword, keyword,
@ -26,7 +26,7 @@ const next = (keyword) => {
const prev = (keyword) => { const prev = (keyword) => {
// TODO Error on no matched // TODO Error on no matched
window.find(keyword, false, true, true, false, true, false); window.find(keyword, false, true, true, false, true);
return { return {
type: actions.FIND_SET_KEYWORD, type: actions.FIND_SET_KEYWORD,
keyword, keyword,

@ -6,6 +6,7 @@ import * as urls from 'content/urls';
import * as consoleFrames from 'content/console-frames'; import * as consoleFrames from 'content/console-frames';
import * as addonActions from './addon'; import * as addonActions from './addon';
// eslint-disable-next-line complexity
const exec = (operation) => { const exec = (operation) => {
switch (operation.type) { switch (operation.type) {
case operations.ADDON_ENABLE: case operations.ADDON_ENABLE:
@ -14,6 +15,14 @@ const exec = (operation) => {
return addonActions.disable(); return addonActions.disable();
case operations.ADDON_TOGGLE_ENABLED: case operations.ADDON_TOGGLE_ENABLED:
return addonActions.toggleEnabled(); 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: case operations.SCROLL_VERTICALLY:
return scrolls.scrollVertically(window, operation.count); return scrolls.scrollVertically(window, operation.count);
case operations.SCROLL_HORIZONALLY: case operations.SCROLL_HORIZONALLY:

@ -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));
}
}
}

@ -1,5 +1,6 @@
import CommonComponent from '../common'; import CommonComponent from '../common';
import FollowController from './follow-controller'; import FollowController from './follow-controller';
import FindComponent from './find';
import * as consoleFrames from '../../console-frames'; import * as consoleFrames from '../../console-frames';
import * as addonActions from '../../actions/addon'; import * as addonActions from '../../actions/addon';
import messages from 'shared/messages'; import messages from 'shared/messages';
@ -14,6 +15,7 @@ export default class TopContent {
new CommonComponent(win, store); // eslint-disable-line no-new new CommonComponent(win, store); // eslint-disable-line no-new
new FollowController(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 // TODO make component
consoleFrames.initialize(this.win.document); consoleFrames.initialize(this.win.document);
@ -47,7 +49,7 @@ export default class TopContent {
onMessage(message) { onMessage(message) {
switch (message.type) { switch (message.type) {
case messages.CONSOLE_HIDE_COMMAND: case messages.CONSOLE_UNFOCUS:
this.win.focus(); this.win.focus();
consoleFrames.blur(window.document); consoleFrames.blur(window.document);
return Promise.resolve(); return Promise.resolve();

@ -24,13 +24,13 @@ const onMessage = (listener) => {
export default { export default {
BACKGROUND_OPERATION: 'background.operation', BACKGROUND_OPERATION: 'background.operation',
CONSOLE_BLURRED: 'console.blured', CONSOLE_UNFOCUS: 'console.unfocus',
CONSOLE_ENTERED: 'console.entered', CONSOLE_ENTER_COMMAND: 'console.enter.command',
CONSOLE_ENTER_FIND: 'console.enter.find',
CONSOLE_QUERY_COMPLETIONS: 'console.query.completions', CONSOLE_QUERY_COMPLETIONS: 'console.query.completions',
CONSOLE_SHOW_COMMAND: 'console.show.command', CONSOLE_SHOW_COMMAND: 'console.show.command',
CONSOLE_SHOW_ERROR: 'console.show.error', CONSOLE_SHOW_ERROR: 'console.show.error',
CONSOLE_SHOW_INFO: 'console.show.info', CONSOLE_SHOW_INFO: 'console.show.info',
CONSOLE_HIDE_COMMAND: 'console.hide.command',
CONSOLE_SHOW_FIND: 'console.show.find', CONSOLE_SHOW_FIND: 'console.show.find',
FOLLOW_START: 'follow.start', FOLLOW_START: 'follow.start',
@ -42,6 +42,9 @@ export default {
FOLLOW_ACTIVATE: 'follow.activate', FOLLOW_ACTIVATE: 'follow.activate',
FOLLOW_KEY_PRESS: 'follow.key.press', FOLLOW_KEY_PRESS: 'follow.key.press',
FIND_NEXT: 'find.next',
FIND_PREV: 'find.prev',
OPEN_URL: 'open.url', OPEN_URL: 'open.url',
SETTINGS_RELOAD: 'settings.reload', SETTINGS_RELOAD: 'settings.reload',