diff options
Diffstat (limited to 'src/content/components')
-rw-r--r-- | src/content/components/top-content/find.js | 39 |
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)); } } |