From 41a2c5a3f77a15b2ad5f386f1a2a194df49d107d Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Fri, 16 Jan 2015 16:01:03 +0000 Subject: Use selection.collapseToStart() for performFindInPlace(). --- content_scripts/vimium_frontend.coffee | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) (limited to 'content_scripts') diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee index a3ab051b..ddedb1ef 100644 --- a/content_scripts/vimium_frontend.coffee +++ b/content_scripts/vimium_frontend.coffee @@ -702,18 +702,10 @@ handleEnterForFindMode = -> settings.set("findModeRawQuery", findModeQuery.rawQuery) performFindInPlace = -> - cachedScrollX = window.scrollX - cachedScrollY = window.scrollY - query = if findModeQuery.isRegex then getNextQueryFromRegexMatches(0) else 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. - executeFind(query, { backwards: true, caseSensitive: !findModeQuery.ignoreCase }) - - # We need to restore the scroll position because we might've lost the right position by searching - # backwards. - window.scrollTo(cachedScrollX, cachedScrollY) + selection = window.getSelection() + selection.collapseToStart() if selection.type == "Range" findModeQueryHasResults = executeFind(query, { caseSensitive: !findModeQuery.ignoreCase }) -- cgit v1.2.3 From 8d3665862400b46216c1c42d063890dee1850918 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Fri, 16 Jan 2015 16:59:27 +0000 Subject: Instead, just restore the selection, for performFindInPlace(). --- content_scripts/vimium_frontend.coffee | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'content_scripts') diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee index ddedb1ef..a6ddffd3 100644 --- a/content_scripts/vimium_frontend.coffee +++ b/content_scripts/vimium_frontend.coffee @@ -11,6 +11,7 @@ findMode = false findModeQuery = { rawQuery: "", matchCount: 0 } findModeQueryHasResults = false findModeAnchorNode = null +findModeInitialRange = null isShowingHelpDialog = false keyPort = null # Users can disable Vimium on URL patterns via the settings page. The following two variables @@ -702,11 +703,8 @@ handleEnterForFindMode = -> settings.set("findModeRawQuery", findModeQuery.rawQuery) performFindInPlace = -> + findModeRestoreSelection() query = if findModeQuery.isRegex then getNextQueryFromRegexMatches(0) else findModeQuery.parsedQuery - - selection = window.getSelection() - selection.collapseToStart() if selection.type == "Range" - findModeQueryHasResults = executeFind(query, { caseSensitive: !findModeQuery.ignoreCase }) # :options is an optional dict. valid parameters are 'caseSensitive' and 'backwards'. @@ -920,7 +918,27 @@ showFindModeHUDForQuery = -> else HUD.show("/" + findModeQuery.rawQuery + " (No Matches)") +getCurrentRange = -> + selection = getSelection() + if selection.type == "None" + range = document.createRange() + range.setStart document.body, 0 + range.setEnd document.body, 0 + range + else + selection.collapseToStart() if selection.type == "Range" + range = selection.getRangeAt 0 + +findModeSaveSelection = -> + findModeInitialRange = getCurrentRange() + +findModeRestoreSelection = (range = findModeInitialRange) -> + selection = getSelection() + selection.removeAllRanges() + selection.addRange range + window.enterFindMode = -> + findModeSaveSelection() findModeQuery = { rawQuery: "" } findMode = true HUD.show("/") -- cgit v1.2.3 From f24752c8224425075129f9f10ac79bf081619722 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Sat, 17 Jan 2015 08:16:03 +0000 Subject: Add comments for performFindInPlace(). --- content_scripts/vimium_frontend.coffee | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'content_scripts') diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee index a6ddffd3..4b132d33 100644 --- a/content_scripts/vimium_frontend.coffee +++ b/content_scripts/vimium_frontend.coffee @@ -703,6 +703,8 @@ handleEnterForFindMode = -> settings.set("findModeRawQuery", findModeQuery.rawQuery) performFindInPlace = -> + # Restore the selection. That way, we're always searching forward from the same place, so we find the right + # match as the user adds matching characters, or removes previously-matched characters. See #1434. findModeRestoreSelection() query = if findModeQuery.isRegex then getNextQueryFromRegexMatches(0) else findModeQuery.parsedQuery findModeQueryHasResults = executeFind(query, { caseSensitive: !findModeQuery.ignoreCase }) @@ -927,7 +929,7 @@ getCurrentRange = -> range else selection.collapseToStart() if selection.type == "Range" - range = selection.getRangeAt 0 + selection.getRangeAt 0 findModeSaveSelection = -> findModeInitialRange = getCurrentRange() @@ -938,6 +940,7 @@ findModeRestoreSelection = (range = findModeInitialRange) -> selection.addRange range window.enterFindMode = -> + # Save the selection, so performFindInPlace can restore it. findModeSaveSelection() findModeQuery = { rawQuery: "" } findMode = true -- cgit v1.2.3