filter.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. (function() {
  2. var pluckCandidates, scorer, sortCandidates;
  3. scorer = require('./scorer');
  4. pluckCandidates = function(a) {
  5. return a.candidate;
  6. };
  7. sortCandidates = function(a, b) {
  8. return b.score - a.score;
  9. };
  10. module.exports = function(candidates, query, queryHasSlashes, _arg) {
  11. var candidate, key, maxResults, score, scoredCandidates, string, _i, _len, _ref;
  12. _ref = _arg != null ? _arg : {}, key = _ref.key, maxResults = _ref.maxResults;
  13. if (query) {
  14. scoredCandidates = [];
  15. for (_i = 0, _len = candidates.length; _i < _len; _i++) {
  16. candidate = candidates[_i];
  17. string = key != null ? candidate[key] : candidate;
  18. if (!string) {
  19. continue;
  20. }
  21. score = scorer.score(string, query, queryHasSlashes);
  22. if (!queryHasSlashes) {
  23. score = scorer.basenameScore(string, query, score);
  24. }
  25. if (score > 0) {
  26. scoredCandidates.push({
  27. candidate: candidate,
  28. score: score
  29. });
  30. }
  31. }
  32. scoredCandidates.sort(sortCandidates);
  33. candidates = scoredCandidates.map(pluckCandidates);
  34. }
  35. if (maxResults != null) {
  36. candidates = candidates.slice(0, maxResults);
  37. }
  38. return candidates;
  39. };
  40. }).call(this);