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 | 
