From c21aa9ab03d5537d575d3c46d3affce7f3ece5e5 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Sat, 13 Jun 2015 12:55:01 +0100 Subject: Refactor findInPlace. This code belongs together, so we put it together. --- content_scripts/hud.coffee | 4 +--- content_scripts/mode_find.coffee | 5 ++++- content_scripts/mode_visual_edit.coffee | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/content_scripts/hud.coffee b/content_scripts/hud.coffee index cd34efe8..2f4e008c 100644 --- a/content_scripts/hud.coffee +++ b/content_scripts/hud.coffee @@ -33,9 +33,7 @@ HUD = @tween.fade 1.0, 150 search: (data) -> - window.scrollTo @findMode.scrollX, @findMode.scrollY if @findMode.options.returnToViewport - FindMode.updateQuery data.query - @findMode.findInPlace() + @findMode.findInPlace data.query # Show the number of matches in the HUD UI. matchCount = if FindMode.query.parsedQuery.length > 0 then FindMode.query.matchCount else 0 diff --git a/content_scripts/mode_find.coffee b/content_scripts/mode_find.coffee index ff9506e7..21918be2 100644 --- a/content_scripts/mode_find.coffee +++ b/content_scripts/mode_find.coffee @@ -84,7 +84,10 @@ class FindMode extends Mode selection.removeAllRanges() selection.addRange range - findInPlace: -> + findInPlace: (query) -> + # If requested, restore the scroll position (so that failed searches leave the scroll position unchanged). + window.scrollTo @scrollX, @scrollY if @options.returnToViewport + FindMode.updateQuery query # 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. @restoreSelection() diff --git a/content_scripts/mode_visual_edit.coffee b/content_scripts/mode_visual_edit.coffee index eaaf94d4..170071ac 100644 --- a/content_scripts/mode_visual_edit.coffee +++ b/content_scripts/mode_visual_edit.coffee @@ -353,7 +353,7 @@ class Movement extends CountPrefix do => doFind = (count, backwards) => initialRange = @selection.getRangeAt(0).cloneRange() - for [0...count] by 1 + for [0...count] unless FindMode.execute null, {colorSelection: false, backwards} @setSelectionRange initialRange HUD.showForDuration("No matches for '#{FindMode.query.rawQuery}'", 1000) -- cgit v1.2.3 From f34f842417bdac363fac5a3e47366b3ee94c2454 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Sat, 13 Jun 2015 12:59:17 +0100 Subject: Fix returnToViewport. The super-class's constructor sets @options, so we can't set it here; instead, we pass the options along. --- content_scripts/mode_find.coffee | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/content_scripts/mode_find.coffee b/content_scripts/mode_find.coffee index 21918be2..297c4158 100644 --- a/content_scripts/mode_find.coffee +++ b/content_scripts/mode_find.coffee @@ -60,14 +60,15 @@ class FindMode extends Mode matchCount: 0 hasResults: false - constructor: (@options = {}) -> + constructor: (options = {}) -> + console.log "constructor", @options # Save the selection, so findInPlace can restore it. @initialRange = getCurrentRange() FindMode.query = rawQuery: "" - if @options.returnToViewport + if options.returnToViewport @scrollX = window.scrollX @scrollY = window.scrollY - super + super extend options, name: "find" indicator: false exitOnClick: true -- cgit v1.2.3 From 4f426affde34c895cf342dac256895ffe98ee4f3 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Sat, 13 Jun 2015 13:03:10 +0100 Subject: Refactor duplicate code. --- content_scripts/hud.coffee | 2 +- content_scripts/mode_find.coffee | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/content_scripts/hud.coffee b/content_scripts/hud.coffee index 2f4e008c..bfad71b7 100644 --- a/content_scripts/hud.coffee +++ b/content_scripts/hud.coffee @@ -57,7 +57,7 @@ HUD = @tween.fade 0, 150, => @hide true, updateIndicator hideFindMode: (data) -> - window.scrollTo @findMode.scrollX, @findMode.scrollY if @findMode.options.returnToViewport + @findMode.checkReturnToViewPort() # An element element won't receive a focus event if the search landed on it while we were in the HUD # iframe. To end up with the correct modes active, we create a focus/blur event manually after refocusing diff --git a/content_scripts/mode_find.coffee b/content_scripts/mode_find.coffee index 297c4158..bba457b6 100644 --- a/content_scripts/mode_find.coffee +++ b/content_scripts/mode_find.coffee @@ -87,7 +87,7 @@ class FindMode extends Mode findInPlace: (query) -> # If requested, restore the scroll position (so that failed searches leave the scroll position unchanged). - window.scrollTo @scrollX, @scrollY if @options.returnToViewport + @checkReturnToViewPort() FindMode.updateQuery query # 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. @@ -196,6 +196,9 @@ class FindMode extends Mode @restoreDefaultSelectionHighlight: -> document.body.classList.remove("vimiumFindMode") + checkReturnToViewPort: -> + window.scrollTo @scrollX, @scrollY if @options.returnToViewport + getCurrentRange = -> selection = getSelection() if selection.type == "None" -- cgit v1.2.3 From 14076fe862efc99970d160bd76b5434c89ab6387 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Sat, 13 Jun 2015 13:30:03 +0100 Subject: Place cursor at end of find-mode input... ... for FindModeHistory. --- pages/hud.coffee | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/pages/hud.coffee b/pages/hud.coffee index f9c29cce..357c3a9e 100644 --- a/pages/hud.coffee +++ b/pages/hud.coffee @@ -1,5 +1,17 @@ findMode = null +# Set the input element's text, and move the cursor to the end. +setTextInInputElement = (inputElement, text) -> + inputElement.textContent = text + # Move the cursor to the end. Based on one of the solutions here: + # http://stackoverflow.com/questions/1125292/how-to-move-cursor-to-end-of-contenteditable-entity + range = document.createRange() + range.selectNodeContents inputElement + range.collapse false + selection = window.getSelection() + selection.removeAllRanges() + selection.addRange range + document.addEventListener "keydown", (event) -> inputElement = document.getElementById "hud-find-input" return unless inputElement? # Don't do anything if we're not in find mode. @@ -20,12 +32,12 @@ document.addEventListener "keydown", (event) -> if rawQuery = FindModeHistory.getQuery findMode.historyIndex + 1 findMode.historyIndex += 1 findMode.partialQuery = findMode.rawQuery if findMode.historyIndex == 0 - inputElement.textContent = rawQuery + setTextInInputElement inputElement, rawQuery findMode.executeQuery() else if event.keyCode == keyCodes.downArrow findMode.historyIndex = Math.max -1, findMode.historyIndex - 1 rawQuery = if 0 <= findMode.historyIndex then FindModeHistory.getQuery findMode.historyIndex else findMode.partialQuery - inputElement.textContent = rawQuery + setTextInInputElement inputElement, rawQuery findMode.executeQuery() handlers = @@ -46,7 +58,7 @@ handlers = inputElement = document.createElement "span" inputElement.contentEditable = "plaintext-only" - inputElement.textContent = data.text + setTextInInputElement inputElement, data.text ? "" inputElement.id = "hud-find-input" hud.appendChild inputElement -- cgit v1.2.3 From 8151d592b3ec2b37d4c41123cf94ed23d119d3c9 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Sat, 13 Jun 2015 13:32:06 +0100 Subject: Suppress arrow events in find-mode HUD. --- pages/hud.coffee | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pages/hud.coffee b/pages/hud.coffee index 357c3a9e..76ed693f 100644 --- a/pages/hud.coffee +++ b/pages/hud.coffee @@ -22,7 +22,6 @@ document.addEventListener "keydown", (event) -> if (event.keyCode in [keyCodes.backspace, keyCodes.deleteKey] and inputElement.textContent.length == 0) or event.keyCode == keyCodes.enter or KeyboardUtils.isEscape event - DomUtils.suppressEvent event UIComponentServer.postMessage name: "hideFindMode" event: transferrableEvent @@ -39,6 +38,11 @@ document.addEventListener "keydown", (event) -> rawQuery = if 0 <= findMode.historyIndex then FindModeHistory.getQuery findMode.historyIndex else findMode.partialQuery setTextInInputElement inputElement, rawQuery findMode.executeQuery() + else + return + + DomUtils.suppressEvent event + false handlers = show: (data) -> -- cgit v1.2.3