aboutsummaryrefslogtreecommitdiff
path: root/src/content/components
diff options
context:
space:
mode:
Diffstat (limited to 'src/content/components')
-rw-r--r--src/content/components/top-content/find.js39
1 files changed, 35 insertions, 4 deletions
diff --git a/src/content/components/top-content/find.js b/src/content/components/top-content/find.js
index 6696f00..bccf040 100644
--- a/src/content/components/top-content/find.js
+++ b/src/content/components/top-content/find.js
@@ -1,5 +1,6 @@
import * as findActions from 'content/actions/find';
import messages from 'shared/messages';
+import * as consoleFrames from '../../console-frames';
export default class FindComponent {
constructor(win, store) {
@@ -10,14 +11,44 @@ export default class FindComponent {
}
onMessage(message) {
- let state = this.store.getState().find;
switch (message.type) {
case messages.CONSOLE_ENTER_FIND:
- return this.store.dispatch(findActions.next(message.text));
+ return this.start(message.text);
case messages.FIND_NEXT:
- return this.store.dispatch(findActions.next(state.keyword));
+ return this.next();
case messages.FIND_PREV:
- return this.store.dispatch(findActions.prev(state.keyword));
+ return this.prev();
+ }
+ }
+
+ start(text) {
+ let state = this.store.getState().find;
+
+ if (text.length === 0) {
+ return this.store.dispatch(findActions.next(state.keyword, true));
+ }
+ return this.store.dispatch(findActions.next(text, true));
+ }
+
+ next() {
+ let state = this.store.getState().find;
+
+ if (!state.found) {
+ return consoleFrames.postError(
+ window.document,
+ 'Pattern not found: ' + state.keyword);
+ }
+ return this.store.dispatch(findActions.next(state.keyword, false));
+ }
+
+ prev() {
+ let state = this.store.getState().find;
+
+ if (!state.found) {
+ return consoleFrames.postError(
+ window.document,
+ 'Pattern not found: ' + state.keyword);
}
+ return this.store.dispatch(findActions.prev(state.keyword, false));
}
}