diff options
| author | Jez Ng | 2012-01-29 07:50:15 -0500 |
|---|---|---|
| committer | Jez Ng | 2012-01-29 23:43:33 -0500 |
| commit | 6fa1109ef7b2834d027b296744aa4399ce5408b8 (patch) | |
| tree | 5f4a283b220d34a1a27af0638ea43f9f4f677e96 /vimiumFrontend.js | |
| parent | 91efdd2a8912d7fa57b73b7b51a2b4e7f382cfb6 (diff) | |
| download | vimium-6fa1109ef7b2834d027b296744aa4399ce5408b8.tar.bz2 | |
Fix bug in 'no matches' message. Refactor and simplify.
The message was not showing up the first time the user pressed 'n'.
Diffstat (limited to 'vimiumFrontend.js')
| -rw-r--r-- | vimiumFrontend.js | 49 |
1 files changed, 19 insertions, 30 deletions
diff --git a/vimiumFrontend.js b/vimiumFrontend.js index 954d192c..5cf3a4cc 100644 --- a/vimiumFrontend.js +++ b/vimiumFrontend.js @@ -728,16 +728,7 @@ function performFindInPlace() { var cachedScrollX = window.scrollX; var cachedScrollY = window.scrollY; - if (findModeQuery.isRegex) { - if (!findModeQuery.regexMatches) { - findModeQueryHasResults = false; - return; - } - else - var query = findModeQuery.regexMatches[0]; - } - else - var query = findModeQuery.parsedQuery; + var query = findModeQuery.isRegex ? getNextQueryFromRegexMatches(0) : findModeQuery.parsedQuery; // Search backwards first to "free up" the current word as eligible for the real forward search. This allows // us to search in place without jumping around between matches as the query grows. @@ -810,40 +801,38 @@ function selectFoundInputElement() { } } +function getNextQueryFromRegexMatches(stepSize) { + if (!findModeQuery.regexMatches) + return ""; // find()ing an empty query always returns false + + var totalMatches = findModeQuery.regexMatches.length; + findModeQuery.activeRegexIndex += stepSize + totalMatches; + findModeQuery.activeRegexIndex %= totalMatches; + + return findModeQuery.regexMatches[findModeQuery.activeRegexIndex]; +} + function findAndFocus(backwards) { // check if the query has been changed by a script in another frame var mostRecentQuery = settings.get("findModeRawQuery") || ""; if (mostRecentQuery !== findModeQuery.rawQuery) { findModeQuery.rawQuery = mostRecentQuery; updateFindModeQuery(); - performFindInPlace(); - return; } + var query = findModeQuery.isRegex ? getNextQueryFromRegexMatches(backwards ? -1 : 1) : + findModeQuery.parsedQuery; + + findModeQueryHasResults = executeFind(query, { backwards: backwards, caseSensitive: !findModeQuery.ignoreCase }); + if (!findModeQueryHasResults) { - HUD.showForDuration("No matches for '" + findModeQuery.rawQuery + "'", 1000); + HUD.showForDuration(insertSpaces("No matches for '" + findModeQuery.rawQuery + "'"), 1000); return; } - if (findModeQuery.isRegex) { - if (!backwards) { - if (++findModeQuery.activeRegexIndex == findModeQuery.regexMatches.length) - findModeQuery.activeRegexIndex = 0; - } - else { - if (--findModeQuery.activeRegexIndex == -1) - findModeQuery.activeRegexIndex = findModeQuery.regexMatches.length - 1; - } - var query = findModeQuery.regexMatches[findModeQuery.activeRegexIndex]; - } - else - var query = findModeQuery.parsedQuery; - - findModeQueryHasResults = executeFind(query, { backwards: backwards, caseSensitive: !findModeQuery.ignoreCase }); - // if we have found an input element via 'n', pressing <esc> immediately afterwards sends us into insert // mode - var elementCanTakeInput = findModeQueryHasResults && domUtils.isSelectable(document.activeElement) && + var elementCanTakeInput = domUtils.isSelectable(document.activeElement) && isDOMDescendant(findModeAnchorNode, document.activeElement); if (elementCanTakeInput) { handlerStack.push({ |
