diff options
| author | jez | 2010-12-31 05:56:47 +0800 | 
|---|---|---|
| committer | jez | 2010-12-31 05:56:47 +0800 | 
| commit | 09a959e97a260bc359bdcbadea814cd436691837 (patch) | |
| tree | 1bee1c92392cfb037b76c9ee98cbc678a9a94859 /linkHints.js | |
| parent | f9998b6d62d5c0fa2b7e262a5b698c5dc3a1252e (diff) | |
| download | vimium-09a959e97a260bc359bdcbadea814cd436691837.tar.bz2 | |
Refactoring. Make hint filtering more 'functional'.
Diffstat (limited to 'linkHints.js')
| -rw-r--r-- | linkHints.js | 77 | 
1 files changed, 21 insertions, 56 deletions
diff --git a/linkHints.js b/linkHints.js index cff513db..d9d33828 100644 --- a/linkHints.js +++ b/linkHints.js @@ -225,24 +225,20 @@ var linkHintsPrototype = {    },    /* -   * Hides link hints which do not match the given search string. To allow the backspace key to work, this -   * will also show link hints which do match but were previously hidden. +   * Hides linkMarker if it does not match testString, and shows linkMarker +   * if it does match but was previously hidden. To be used with Array.filter().     */ -  highlightLinkMatches: function(searchString) { -    var linksMatched = []; -    for (var i = 0; i < linkHints.hintMarkers.length; i++) { -      var linkMarker = linkHints.hintMarkers[i]; -      if (linkMarker.getAttribute("hintString").indexOf(searchString) == 0) { -        if (linkMarker.style.display == "none") -          linkMarker.style.display = ""; -        for (var j = 0; j < linkMarker.childNodes.length; j++) -          linkMarker.childNodes[j].className = (j >= searchString.length) ? "" : "matchingCharacter"; -        linksMatched.push(linkMarker.clickableItem); -      } else { -        linkMarker.style.display = "none"; -      } +  toggleHighlights: function(testString, linkMarker) { +    if (linkMarker.getAttribute("hintString").indexOf(testString) == 0) { +      if (linkMarker.style.display == "none") +        linkMarker.style.display = ""; +      for (var j = 0; j < linkMarker.childNodes.length; j++) +        linkMarker.childNodes[j].className = (j >= testString.length) ? "" : "matchingCharacter"; +      return true; +    } else { +      linkMarker.style.display = "none"; +      return false;      } -    return linksMatched;    },    /* @@ -332,6 +328,7 @@ var linkHintsPrototype = {        innerHTML.push("<span>" + hintString[i].toUpperCase() + "</span>");      return innerHTML.join("");    }, +  };  var linkHints; @@ -364,34 +361,17 @@ function initializeLinkHints() {          } else {            linkHints.hintKeystrokeQueue.pop();            var matchString = linkHints.hintKeystrokeQueue.join(""); -          linkHints.highlightLinkMatches(matchString); +          linkHints.hintMarkers.filter(function(linkMarker) { return linkHints.toggleHighlights(matchString, linkMarker); });          }        } else if (settings.linkHintCharacters.indexOf(keyChar) >= 0) {          linkHints.hintKeystrokeQueue.push(keyChar);          var matchString = linkHints.hintKeystrokeQueue.join(""); -        linksMatched = linkHints.highlightLinkMatches(matchString); +        linksMatched = linkHints.hintMarkers.filter(function(linkMarker) { return linkHints.toggleHighlights(matchString, linkMarker); });          if (linksMatched.length == 0)            linkHints.deactivateLinkHintsMode();          else if (linksMatched.length == 1) -          linkHints.activateLink(linksMatched[0]); -      } -    }; - -    linkHints['highlightLinkMatches'] = function(searchString) { -      var linksMatched = []; -      for (var i = 0; i < linkHints.hintMarkers.length; i++) { -        var linkMarker = linkHints.hintMarkers[i]; -        if (linkMarker.getAttribute("hintString").indexOf(searchString) == 0) { -          if (linkMarker.style.display == "none") -            linkMarker.style.display = ""; -          for (var j = 0; j < linkMarker.childNodes.length; j++) -            linkMarker.childNodes[j].className = (j >= searchString.length) ? "" : "matchingCharacter"; -          linksMatched.push(linkMarker.clickableItem); -        } else { -          linkMarker.style.display = "none"; -        } +          linkHints.activateLink(linksMatched[0].clickableItem);        } -      return linksMatched;      };    } else { @@ -426,7 +406,11 @@ function initializeLinkHints() {          if (/[0-9]/.test(keyChar)) {            linkHints.hintKeystrokeQueue.push(keyChar);            matchString = linkHints.hintKeystrokeQueue.join(""); -          linksMatched = linkHints.highlightLinkMatches(matchString); +          linksMatched = linkHints.hintMarkers.filter(function(linkMarker) { +              if (linkMarker.getAttribute('filtered') == 'true') +                return false; +              return linkHints.toggleHighlights(matchString, linkMarker); +          });          } else {            // since we might renumber the hints, the current hintKeyStrokeQueue            // should be rendered invalid (i.e. reset). @@ -443,25 +427,6 @@ function initializeLinkHints() {        }      }; -    linkHints['highlightLinkMatches'] = function(searchString) { -      var linksMatched = []; -      for (var i = 0; i < linkHints.hintMarkers.length; i++) { -        var linkMarker = linkHints.hintMarkers[i]; -        if (linkMarker.getAttribute("filtered") == "true") -          continue; -        if (linkMarker.getAttribute("hintString").indexOf(searchString) == 0) { -          if (linkMarker.style.display == "none") -            linkMarker.style.display = ""; -          for (var j = 0; j < linkMarker.childNodes.length; j++) -            linkMarker.childNodes[j].className = (j >= searchString.length) ? "" : "matchingCharacter"; -          linksMatched.push(linkMarker.clickableItem); -        } else { -          linkMarker.style.display = "none"; -        } -      } -      return linksMatched; -    }; -      /*       * Hides the links that do not match the linkText search string, and       * renumbers the remainder. Should only be called when there is a change in  | 
