first find implementation
This commit is contained in:
parent
956dd937d3
commit
e021504356
8 changed files with 74 additions and 25 deletions
|
@ -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,
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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:
|
||||
|
|
23
src/content/components/top-content/find.js
Normal file
23
src/content/components/top-content/find.js
Normal file
|
@ -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 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();
|
||||
|
|
|
@ -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',
|
||||
|
|
Reference in a new issue