From 1a71dc6c8f323cef31eb006a8a6299b4dfe71332 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Fri, 8 Apr 2016 09:42:22 +0100 Subject: Filtered hints; ignore unmatched text. When the user is typing a link's text, any mistyped character exits link hints mode. This makes little sense. In practice, this usually happens because the user mis-typed something. Here, we ignore typed characters which do not match any hints. (Also, add a test for this.) --- content_scripts/link_hints.coffee | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'content_scripts/link_hints.coffee') diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee index 56cea78d..56edf22f 100644 --- a/content_scripts/link_hints.coffee +++ b/content_scripts/link_hints.coffee @@ -465,15 +465,21 @@ class FilterHints linkSearchString = @linkTextKeystrokeQueue.join("").trim().toLowerCase() do (scoreFunction = @scoreLinkHint linkSearchString) -> linkMarker.score = scoreFunction linkMarker for linkMarker in hintMarkers - hintMarkers = hintMarkers[..].sort (a,b) -> + matchingHintMarkers = hintMarkers[..].sort (a,b) -> if b.score == a.score then b.stableSortCount - a.stableSortCount else b.score - a.score - linkHintNumber = 1 - for linkMarker in hintMarkers - continue unless 0 < linkMarker.score - linkMarker.hintString = @generateHintString linkHintNumber++ - @renderMarker linkMarker - linkMarker + matchingHintMarkers = (linkMarker for linkMarker in matchingHintMarkers when 0 < linkMarker.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. + @linkTextKeystrokeQueue.pop() + @filterLinkHints hintMarkers + else + linkHintNumber = 1 + for linkMarker in matchingHintMarkers + linkMarker.hintString = @generateHintString linkHintNumber++ + @renderMarker linkMarker + linkMarker # 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. -- cgit v1.2.3