81 lines
2.1 KiB
JavaScript
81 lines
2.1 KiB
JavaScript
|
|
(function() {
|
||
|
|
var PathSeparator, SpaceRegex, filter, matcher, scorer;
|
||
|
|
|
||
|
|
scorer = require('./scorer');
|
||
|
|
|
||
|
|
filter = require('./filter');
|
||
|
|
|
||
|
|
matcher = require('./matcher');
|
||
|
|
|
||
|
|
PathSeparator = require('path').sep;
|
||
|
|
|
||
|
|
SpaceRegex = /\ /g;
|
||
|
|
|
||
|
|
module.exports = {
|
||
|
|
filter: function(candidates, query, options) {
|
||
|
|
var queryHasSlashes;
|
||
|
|
if (query) {
|
||
|
|
queryHasSlashes = query.indexOf(PathSeparator) !== -1;
|
||
|
|
query = query.replace(SpaceRegex, '');
|
||
|
|
}
|
||
|
|
return filter(candidates, query, queryHasSlashes, options);
|
||
|
|
},
|
||
|
|
score: function(string, query) {
|
||
|
|
var queryHasSlashes, score;
|
||
|
|
if (!string) {
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
if (!query) {
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
if (string === query) {
|
||
|
|
return 2;
|
||
|
|
}
|
||
|
|
queryHasSlashes = query.indexOf(PathSeparator) !== -1;
|
||
|
|
query = query.replace(SpaceRegex, '');
|
||
|
|
score = scorer.score(string, query);
|
||
|
|
if (!queryHasSlashes) {
|
||
|
|
score = scorer.basenameScore(string, query, score);
|
||
|
|
}
|
||
|
|
return score;
|
||
|
|
},
|
||
|
|
match: function(string, query) {
|
||
|
|
var baseMatches, index, matches, queryHasSlashes, seen, _i, _ref, _results;
|
||
|
|
if (!string) {
|
||
|
|
return [];
|
||
|
|
}
|
||
|
|
if (!query) {
|
||
|
|
return [];
|
||
|
|
}
|
||
|
|
if (string === query) {
|
||
|
|
return (function() {
|
||
|
|
_results = [];
|
||
|
|
for (var _i = 0, _ref = string.length; 0 <= _ref ? _i < _ref : _i > _ref; 0 <= _ref ? _i++ : _i--){ _results.push(_i); }
|
||
|
|
return _results;
|
||
|
|
}).apply(this);
|
||
|
|
}
|
||
|
|
queryHasSlashes = query.indexOf(PathSeparator) !== -1;
|
||
|
|
query = query.replace(SpaceRegex, '');
|
||
|
|
matches = matcher.match(string, query);
|
||
|
|
if (!queryHasSlashes) {
|
||
|
|
baseMatches = matcher.basenameMatch(string, query);
|
||
|
|
matches = matches.concat(baseMatches).sort(function(a, b) {
|
||
|
|
return a - b;
|
||
|
|
});
|
||
|
|
seen = null;
|
||
|
|
index = 0;
|
||
|
|
while (index < matches.length) {
|
||
|
|
if (index && seen === matches[index]) {
|
||
|
|
matches.splice(index, 1);
|
||
|
|
} else {
|
||
|
|
seen = matches[index];
|
||
|
|
index++;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return matches;
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
}).call(this);
|