aboutsummaryrefslogtreecommitdiffstats
path: root/content_scripts
diff options
context:
space:
mode:
authorStephen Blott2015-04-29 07:44:39 +0100
committerStephen Blott2015-04-29 07:45:54 +0100
commit61f75448a216037251264e496e147299a1e264ae (patch)
tree86a15dcc2cf1d9f3f7b17edbdb5f5285344b911d /content_scripts
parent92b3c36a57111cf5fb72bca7dcd811f81f606a20 (diff)
downloadvimium-61f75448a216037251264e496e147299a1e264ae.tar.bz2
Fix text matching/exclusion for text link hints.
We need to sort elements by their text length. This allows us to exclude the text of descendants from the hint text generated for their ancestors. Note: Tests not yet fixed.
Diffstat (limited to 'content_scripts')
-rw-r--r--content_scripts/link_hints.coffee8
1 files changed, 6 insertions, 2 deletions
diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee
index 440e6598..fc95bcd8 100644
--- a/content_scripts/link_hints.coffee
+++ b/content_scripts/link_hints.coffee
@@ -60,6 +60,12 @@ LinkHints =
# For these modes, we filter out those elements which don't have an HREF (since there's nothing we can do
# with them).
elements = (el for el in elements when el.element.href?) if mode in [ COPY_LINK_URL, OPEN_INCOGNITO ]
+ if settings.get "filterLinkHints"
+ # When using text filtering, we sort the elements such that we visit descendants before their ancestors.
+ # This allows us to exclude the text used for matching descendants from that used for matching their
+ # ancestors.
+ textLength = (el) -> el.element.textContent?.length ? 0
+ elements = elements.sort (a,b) -> textLength(a) - textLength b
hintMarkers = (@createMarkerFor(el) for el in elements)
@getMarkerMatcher().fillInMarkers(hintMarkers)
@@ -238,8 +244,6 @@ LinkHints =
# Remove rects from elements where another clickable element lies above it.
nonOverlappingElements = []
# Traverse the DOM from first to last, since later elements show above earlier elements.
- # NOTE(smblott). filterHints.generateLinkText also assumes this order when generating the content text for
- # each hint. Specifically, we consider descendents before we consider their ancestors.
visibleElements = visibleElements.reverse()
while visibleElement = visibleElements.pop()
rects = [visibleElement.rect]