UNPKG

pure-angular-advanced-searchbox

Version:
127 lines (66 loc) 2.5 kB
'use strict'; /** * @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; }); }]);