diff options
| -rw-r--r-- | content_scripts/hud.coffee | 8 | ||||
| -rw-r--r-- | content_scripts/vimium_frontend.coffee | 17 | ||||
| -rw-r--r-- | pages/hud.coffee | 26 |
3 files changed, 40 insertions, 11 deletions
diff --git a/content_scripts/hud.coffee b/content_scripts/hud.coffee index 84b8abeb..3e749da5 100644 --- a/content_scripts/hud.coffee +++ b/content_scripts/hud.coffee @@ -26,6 +26,14 @@ HUD = @hudUI.show {name: "show", text} @tween.fade 1.0, 150 + showFindMode: (text = "") -> + return unless @enabled() + @hudUI.show {name: "showFindMode", text} + @tween.fade 1.0, 150 + + updateMatchesCount: (matchCount, showMatchText = true) -> + @hudUI.postMessage {name: "updateMatchesCount", matchCount, showMatchText} + # Hide the HUD. # If :immediate is falsy, then the HUD is faded out smoothly (otherwise it is hidden immediately). # If :updateIndicator is truthy, then we also refresh the mode indicator. The only time we don't update the diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee index 8c28b4e6..46af3847 100644 --- a/content_scripts/vimium_frontend.coffee +++ b/content_scripts/vimium_frontend.coffee @@ -686,9 +686,6 @@ updateFindModeQuery = -> # default to 'smartcase' mode, unless noIgnoreCase is explicitly specified findModeQuery.ignoreCase = !hasNoIgnoreCaseFlag && !Utils.hasUpperCase(findModeQuery.parsedQuery) - # Don't count matches in the HUD. - HUD.hide(true) - # if we are dealing with a regex, grep for all matches in the text, and then call window.find() on them # sequentially so the browser handles the scrolling / text selection. if findModeQuery.isRegex @@ -993,13 +990,11 @@ window.goNext = -> findAndFollowRel("next") || findAndFollowLink(nextStrings) showFindModeHUDForQuery = -> - if findModeQuery.rawQuery and (findModeQueryHasResults || findModeQuery.parsedQuery.length == 0) - plural = if findModeQuery.matchCount == 1 then "" else "es" - HUD.show("/" + findModeQuery.rawQuery + " (" + findModeQuery.matchCount + " Match#{plural})") - else if findModeQuery.rawQuery - HUD.show("/" + findModeQuery.rawQuery + " (No Matches)") - else - HUD.show("/") + matchCount = if findModeQuery.parsedQuery.length > 0 then findModeQuery.matchCount else 0 + showCount = findModeQuery.rawQuery.length > 0 + + HUD.showFindMode findModeQuery.rawQuery + HUD.updateMatchesCount matchCount, showCount getCurrentRange = -> selection = getSelection() @@ -1027,7 +1022,7 @@ window.enterFindMode = (options = {}) -> findModeSaveSelection() findModeQuery = rawQuery: "" findMode = new FindMode options - HUD.show "/" + HUD.showFindMode() findMode window.showHelpDialog = (html, fid) -> diff --git a/pages/hud.coffee b/pages/hud.coffee index 68283451..a1eef836 100644 --- a/pages/hud.coffee +++ b/pages/hud.coffee @@ -10,6 +10,32 @@ handlers = document.getElementById("hud").classList.add "vimiumUIComponentHidden" document.getElementById("hud").classList.remove "vimiumUIComponentVisible" + showFindMode: (data) -> + hud = document.getElementById "hud" + hud.innerText = "/" + + inputElement = document.createElement "span" + inputElement.innerText = data.text + inputElement.id = "hud-find-input" + hud.appendChild inputElement + + updateMatchesCount: ({matchCount, showMatchText}) -> + inputElement = document.getElementById "hud-find-input" + return unless inputElement? # Don't do anything if we're not in find mode. + nodeAfter = inputElement.nextSibling # The node containing the old match text. + + if showMatchText + plural = if matchCount == 1 then "" else "es" + countText = if matchCount > 0 + " (" + matchCount + " Match#{plural})" + else + " (No matches)" + + # Replace the old count (if there was one) with the new one. + document.getElementById("hud").insertBefore document.createTextNode(countText), nodeAfter + + nodeAfter?.remove() # Remove the old match text. + UIComponentServer.registerHandler (event) -> {data} = event handlers[data.name]? data |
