From 6af96249d408d3a4131bafc5a6b83b46d6b90523 Mon Sep 17 00:00:00 2001
From: Jez Ng
Date: Sat, 4 Aug 2012 22:41:07 -0700
Subject: Prototype for tab-through-input-elements feature. Refs #508.
---
content_scripts/vimium_frontend.coffee | 35 ++++++++++++++++++++++++----------
1 file changed, 25 insertions(+), 10 deletions(-)
(limited to 'content_scripts/vimium_frontend.coffee')
diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee
index 5b7a7402..1ab938fe 100644
--- a/content_scripts/vimium_frontend.coffee
+++ b/content_scripts/vimium_frontend.coffee
@@ -301,19 +301,34 @@ extend window,
HUD.showForDuration("Yanked URL", 1000)
focusInput: (count) ->
- results = DomUtils.evaluateXPath(textInputXPath, XPathResult.ORDERED_NODE_ITERATOR_TYPE)
+ xpathResult = DomUtils.evaluateXPath(textInputXPath, XPathResult.ORDERED_NODE_ITERATOR_TYPE)
+ visibleInputs =
+ while (currentInputBox = xpathResult.iterateNext())
+ rect = DomUtils.getVisibleClientRect(currentInputBox)
+ continue if rect == null
+ { element: currentInputBox, rect: rect }
- lastInputBox
- i = 0
+ return if visibleInputs.length == 0
- while (i < count)
- currentInputBox = results.iterateNext()
- break unless currentInputBox
- continue if (DomUtils.getVisibleClientRect(currentInputBox) == null)
- lastInputBox = currentInputBox
- i += 1
+ selectedInputIndex = Math.min(count - 1, visibleInputs.length - 1)
- lastInputBox.focus() if lastInputBox
+ visibleInputs[selectedInputIndex].element.focus()
+
+ hintMarkers = (LinkHints.createMarkerFor(el) for el in visibleInputs)
+
+ for marker, idx in hintMarkers
+ marker.innerHTML = "#{idx + 1}"
+
+ hintMarkerContainingDiv = LinkHints.displayHints(hintMarkers)
+
+ handlerStack.push keydown: ->
+ if event.keyCode == KeyboardUtils.keyCodes.tab
+ if ++selectedInputIndex == hintMarkers.length
+ selectedInputIndex = 0
+ hintMarkers[selectedInputIndex].clickableItem.focus()
+ else
+ DomUtils.removeElement hintMarkerContainingDiv
+ handlerStack.pop()
#
# Sends everything except i & ESC to the handler in background_page. i & ESC are special because they control
--
cgit v1.2.3
From 3afb5e6ee1295de6ccb043b3164b53955e8e1fc7 Mon Sep 17 00:00:00 2001
From: Jez Ng
Date: Tue, 7 Aug 2012 21:22:27 -0700
Subject: Don't show hints on `gi` if there is only one input element.
---
content_scripts/vimium_frontend.coffee | 2 ++
1 file changed, 2 insertions(+)
(limited to 'content_scripts/vimium_frontend.coffee')
diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee
index 1ab938fe..2fa6b93f 100644
--- a/content_scripts/vimium_frontend.coffee
+++ b/content_scripts/vimium_frontend.coffee
@@ -314,6 +314,8 @@ extend window,
visibleInputs[selectedInputIndex].element.focus()
+ return if visibleInputs.length == 1
+
hintMarkers = (LinkHints.createMarkerFor(el) for el in visibleInputs)
for marker, idx in hintMarkers
--
cgit v1.2.3
From 972bf075af18266593b63ac50c4bca7cef0ecf43 Mon Sep 17 00:00:00 2001
From: Jez Ng
Date: Tue, 7 Aug 2012 21:39:36 -0700
Subject: Highlight the selected hint with a different color.
The actual color / appearance could probably use some tweaking.
---
content_scripts/vimium_frontend.coffee | 4 ++++
1 file changed, 4 insertions(+)
(limited to 'content_scripts/vimium_frontend.coffee')
diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee
index 2fa6b93f..68b58766 100644
--- a/content_scripts/vimium_frontend.coffee
+++ b/content_scripts/vimium_frontend.coffee
@@ -318,6 +318,8 @@ extend window,
hintMarkers = (LinkHints.createMarkerFor(el) for el in visibleInputs)
+ hintMarkers[0].classList.add 'internalVimiumSelectedHintMarker'
+
for marker, idx in hintMarkers
marker.innerHTML = "#{idx + 1}"
@@ -325,8 +327,10 @@ extend window,
handlerStack.push keydown: ->
if event.keyCode == KeyboardUtils.keyCodes.tab
+ hintMarkers[selectedInputIndex].classList.remove 'internalVimiumSelectedHintMarker'
if ++selectedInputIndex == hintMarkers.length
selectedInputIndex = 0
+ hintMarkers[selectedInputIndex].classList.add 'internalVimiumSelectedHintMarker'
hintMarkers[selectedInputIndex].clickableItem.focus()
else
DomUtils.removeElement hintMarkerContainingDiv
--
cgit v1.2.3
From 872e8391feda36642d36a4c0813bcb053d808fd3 Mon Sep 17 00:00:00 2001
From: Jez Ng
Date: Sun, 19 Aug 2012 00:00:54 -0700
Subject: Shift-tab scrolls backwards in focus-input mode.
---
content_scripts/vimium_frontend.coffee | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
(limited to 'content_scripts/vimium_frontend.coffee')
diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee
index 68b58766..5d31b67a 100644
--- a/content_scripts/vimium_frontend.coffee
+++ b/content_scripts/vimium_frontend.coffee
@@ -325,14 +325,18 @@ extend window,
hintMarkerContainingDiv = LinkHints.displayHints(hintMarkers)
- handlerStack.push keydown: ->
+ handlerStack.push keydown: (event) ->
if event.keyCode == KeyboardUtils.keyCodes.tab
hintMarkers[selectedInputIndex].classList.remove 'internalVimiumSelectedHintMarker'
- if ++selectedInputIndex == hintMarkers.length
- selectedInputIndex = 0
+ if event.shiftKey
+ if --selectedInputIndex == -1
+ selectedInputIndex = hintMarkers.length - 1
+ else
+ if ++selectedInputIndex == hintMarkers.length
+ selectedInputIndex = 0
hintMarkers[selectedInputIndex].classList.add 'internalVimiumSelectedHintMarker'
hintMarkers[selectedInputIndex].clickableItem.focus()
- else
+ else unless event.keyCode == KeyboardUtils.keyCodes.shiftKey
DomUtils.removeElement hintMarkerContainingDiv
handlerStack.pop()
--
cgit v1.2.3
From 3cbe7758d7ca4cfac70c931c4c3fa58c50841d90 Mon Sep 17 00:00:00 2001
From: Jez Ng
Date: Mon, 20 Aug 2012 00:45:01 -0700
Subject: Style input hints as number-less overlays.
---
content_scripts/vimium_frontend.coffee | 39 +++++++++++++++++++++-------------
1 file changed, 24 insertions(+), 15 deletions(-)
(limited to 'content_scripts/vimium_frontend.coffee')
diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee
index 5d31b67a..3f73919b 100644
--- a/content_scripts/vimium_frontend.coffee
+++ b/content_scripts/vimium_frontend.coffee
@@ -301,12 +301,13 @@ extend window,
HUD.showForDuration("Yanked URL", 1000)
focusInput: (count) ->
- xpathResult = DomUtils.evaluateXPath(textInputXPath, XPathResult.ORDERED_NODE_ITERATOR_TYPE)
+ resultSet = DomUtils.evaluateXPath(textInputXPath, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE)
visibleInputs =
- while (currentInputBox = xpathResult.iterateNext())
- rect = DomUtils.getVisibleClientRect(currentInputBox)
+ for i in [0...resultSet.snapshotLength] by 1
+ element = resultSet.snapshotItem(i)
+ rect = DomUtils.getVisibleClientRect(element)
continue if rect == null
- { element: currentInputBox, rect: rect }
+ { element: element, rect: rect }
return if visibleInputs.length == 0
@@ -316,28 +317,36 @@ extend window,
return if visibleInputs.length == 1
- hintMarkers = (LinkHints.createMarkerFor(el) for el in visibleInputs)
+ hints = for tuple in visibleInputs
+ hint = document.createElement("div")
+ hint.className = "vimiumReset internalVimiumInputHint vimiumInputHint"
- hintMarkers[0].classList.add 'internalVimiumSelectedHintMarker'
+ # minus 1 for the border
+ hint.style.left = (tuple.rect.left - 1) + window.scrollX + "px"
+ hint.style.top = (tuple.rect.top - 1) + window.scrollY + "px"
+ hint.style.width = tuple.rect.width + "px"
+ hint.style.height = tuple.rect.height + "px"
- for marker, idx in hintMarkers
- marker.innerHTML = "#{idx + 1}"
+ hint
- hintMarkerContainingDiv = LinkHints.displayHints(hintMarkers)
+ hints[0].classList.add 'internalVimiumSelectedInputHint'
+
+ hintContainingDiv = DomUtils.addElementList(hints,
+ { id: "vimiumInputMarkerContainer", className: "vimiumReset" })
handlerStack.push keydown: (event) ->
if event.keyCode == KeyboardUtils.keyCodes.tab
- hintMarkers[selectedInputIndex].classList.remove 'internalVimiumSelectedHintMarker'
+ hints[selectedInputIndex].classList.remove 'internalVimiumSelectedInputHint'
if event.shiftKey
if --selectedInputIndex == -1
- selectedInputIndex = hintMarkers.length - 1
+ selectedInputIndex = hints.length - 1
else
- if ++selectedInputIndex == hintMarkers.length
+ if ++selectedInputIndex == hints.length
selectedInputIndex = 0
- hintMarkers[selectedInputIndex].classList.add 'internalVimiumSelectedHintMarker'
- hintMarkers[selectedInputIndex].clickableItem.focus()
+ hints[selectedInputIndex].classList.add 'internalVimiumSelectedInputHint'
+ visibleInputs[selectedInputIndex].element.focus()
else unless event.keyCode == KeyboardUtils.keyCodes.shiftKey
- DomUtils.removeElement hintMarkerContainingDiv
+ DomUtils.removeElement hintContainingDiv
handlerStack.pop()
#
--
cgit v1.2.3