aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Ryan2015-06-13 14:16:07 +0100
committerMatthew Ryan2015-06-13 14:16:07 +0100
commit107c8abd7ea1f2dc6d6a7e36b7cdeb93e1ca9335 (patch)
treeebc3ba8787099d253325d3ba049f2fc110d9f111
parent26a0653318be7bae4254e2e643dcb5ae5e2498e9 (diff)
parent8151d592b3ec2b37d4c41123cf94ed23d119d3c9 (diff)
downloadvimium-107c8abd7ea1f2dc6d6a7e36b7cdeb93e1ca9335.tar.bz2
Merge pull request #1 from smblott-github/hud-iframe-input
Hud iframe input
-rw-r--r--content_scripts/hud.coffee6
-rw-r--r--content_scripts/mode_find.coffee15
-rw-r--r--content_scripts/mode_visual_edit.coffee2
-rw-r--r--pages/hud.coffee24
4 files changed, 34 insertions, 13 deletions
diff --git a/content_scripts/hud.coffee b/content_scripts/hud.coffee
index cd34efe8..bfad71b7 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
@@ -59,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 ff9506e7..bba457b6 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
@@ -84,7 +85,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).
+ @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.
@restoreSelection()
@@ -192,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"
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)
diff --git a/pages/hud.coffee b/pages/hud.coffee
index f9c29cce..76ed693f 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.
@@ -10,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
@@ -20,13 +31,18 @@ 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()
+ else
+ return
+
+ DomUtils.suppressEvent event
+ false
handlers =
show: (data) ->
@@ -46,7 +62,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