diff options
| author | Stephen Blott | 2015-04-29 07:44:39 +0100 |
|---|---|---|
| committer | Stephen Blott | 2015-04-29 07:45:54 +0100 |
| commit | 61f75448a216037251264e496e147299a1e264ae (patch) | |
| tree | 86a15dcc2cf1d9f3f7b17edbdb5f5285344b911d | |
| parent | 92b3c36a57111cf5fb72bca7dcd811f81f606a20 (diff) | |
| download | vimium-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.
| -rw-r--r-- | content_scripts/link_hints.coffee | 8 |
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] |
