pure-angular-advanced-searchbox
Version:
Pure angular-based advanced search
127 lines (66 loc) • 2.5 kB
JavaScript
;
/**
* @ngdoc filter
* @name paasb.filter:paasbSuggest
* @description
* # paasbSuggest filter
*/
angular.module('paasb')
.filter('paasbSuggest', [function () {
return _.memoize(function (suggestions, value, filter, suggested) {
if(!value) {
var modifiedSuggestions = [];
angular.forEach(suggestions, function (suggestion) {
modifiedSuggestions.push({
'modified': suggestion,
'value': suggestion
});
});
return modifiedSuggestions;
}
var percentageSuggestions = [],
showSuggestions = [],
val = new String(value);
angular.forEach(suggestions, function (suggestion) {
var lSuggestion = suggestion.toLowerCase(),
lVal = val.toLowerCase();
if(lSuggestion.indexOf(lVal) !== -1) {
var matches = [],
looping = true,
needle = -1;
while(looping) {
needle = lSuggestion.indexOf(lVal, ((matches.length) ? (needle + 1) : needle));
if(needle !== -1) {
var len = lVal.length;
matches.push({
'start': needle,
'end': len,
'len': len - 1
});
} else {
looping = false;
}
};
var modifiedSuggestion = suggestion,
addedCharacters = 0;
angular.forEach(matches, function (match) {
var firstString = modifiedSuggestion.substr(0, match.start + addedCharacters),
middleString = '<b>' + modifiedSuggestion.substr(match.start + addedCharacters, match.end) + '</b>',
endString = modifiedSuggestion.substr(match.start + addedCharacters + 1 + match.len, modifiedSuggestion.length);
modifiedSuggestion = firstString + middleString + endString;
addedCharacters += 7;
});
}
if(modifiedSuggestion) {
showSuggestions.push({
'modified': modifiedSuggestion,
'value': suggestion
});
}
});
filter.suggestedValue = (showSuggestions && showSuggestions.length ? showSuggestions[0] : null);
return showSuggestions;
}, function (items, field) {
return items.length + field;
});
}]);