diff options
| author | Stephen Blott | 2016-04-08 13:54:28 +0100 |
|---|---|---|
| committer | Stephen Blott | 2016-04-08 13:54:30 +0100 |
| commit | 047befd24c2cbb1ab35158cc480653591843efc0 (patch) | |
| tree | a2fd512d819029ddb58359d8da254a8f0b52af50 | |
| parent | 9d7351903d0148373a2ad4c06d006e8ee0613be2 (diff) | |
| download | vimium-047befd24c2cbb1ab35158cc480653591843efc0.tar.bz2 | |
Simplify filtered hint matching.
- Reduce the number of passes over hint markers from two to one.
- Filter out non-matching hints before sorting.
- Do not trim the search string twice.
| -rw-r--r-- | content_scripts/link_hints.coffee | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee index c012edba..13f28f06 100644 --- a/content_scripts/link_hints.coffee +++ b/content_scripts/link_hints.coffee @@ -474,13 +474,13 @@ class FilterHints # Filter link hints by search string, renumbering the hints as necessary. filterLinkHints: (hintMarkers) -> - linkSearchString = @linkTextKeystrokeQueue.join("").trim().toLowerCase() - do (scoreFunction = @scoreLinkHint linkSearchString) -> - linkMarker.score = scoreFunction linkMarker for linkMarker in hintMarkers - matchingHintMarkers = hintMarkers[..].sort (a,b) -> - if b.score == a.score then b.stableSortCount - a.stableSortCount else b.score - a.score - - matchingHintMarkers = (linkMarker for linkMarker in matchingHintMarkers when 0 < linkMarker.score) + scoreFunction = @scoreLinkHint @linkTextKeystrokeQueue.join "" + matchingHintMarkers = hintMarkers + .filter (linkMarker) -> + linkMarker.score = scoreFunction linkMarker + 0 < linkMarker.score + .sort (a, b) -> + if b.score == a.score then b.stableSortCount - a.stableSortCount else b.score - a.score if matchingHintMarkers.length == 0 and @hintKeystrokeQueue.length == 0 and 0 < @linkTextKeystrokeQueue.length # We don't accept typed text which doesn't match any hints. @@ -496,7 +496,7 @@ class FilterHints # Assign a score to a filter match (higher is better). We assign a higher score for matches at the start of # a word, and a considerably higher score still for matches which are whole words. scoreLinkHint: (linkSearchString) -> - searchWords = linkSearchString.trim().split @splitRegexp + searchWords = linkSearchString.trim().toLowerCase().split @splitRegexp (linkMarker) => text = linkMarker.linkText.trim() linkWords = linkMarker.linkWords ?= text.toLowerCase().split @splitRegexp |
