-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfast-n-fuzzy.min.js
5 lines (5 loc) · 9.59 KB
/
fast-n-fuzzy.min.js
1
2
3
4
5
!function(a){"use strict";function b(){this.entries=[]}b.prototype.add=function(a,b){for(var c=0;c<this.entries.length&&this.entries[c].k<=a;)c++;if(c>=this.entries.length)this.entries.push({k:a,v:[b]});else{var d=this.entries[c];d.k==a?d.v.indexOf(b)<0&&d.v.push(b):this.entries.splice(c,0,{k:a,v:[b]})}},b.prototype.search=function(a,b,c){for(var d,e,f,g=[],h=[],i=0,j=this._closestBinarySearch(this.entries,"k",a),k=0;c>k;k++)d=j-k,i=j+k,d>=0&&(e=this.entries[d],f=Math.abs(e.k-a),b>=f&&this._addSearchResult(g,h,f,e)),d!=i&&i<this.entries.length&&(e=this.entries[i],f=Math.abs(e.k-a),b>=f&&this._addSearchResult(g,h,f,e));return g=g.sort(sortByAttribute("distance",!0)),g.length>c?g.slice(0,c):g},b.prototype._addSearchResult=function(a,b,c,d){for(var e,f=null,g=0;g<d.v.length;g++)e={distance:c,value:d.v[g]},f=b.indexOf(e.value),f>=0?a[f].distance>c&&a.splice(f,1,e):(a.push(e),b.push(e.value))},b.prototype._closestBinarySearch=function(a,b,c){for(var d=0,e=a.length-1,f=0;e>=d;)if(f=Math.floor((d+e)/2),a[f][b]>c)e=f-1;else{if(!(a[f][b]<c))break;d=f+1}return f},a.NumericMap=b}(this);
!function(a){"use strict";function b(a){a=a||{},this.mergedResults=[],this.distanceSize=0,this.maxDistance=a.maxDistance||100}b.prototype.merge=function(a,b){b=b||1;for(var c,d=0;d<this.mergedResults.length;d++)c=this.mergedResults[d],c.distances.push(this.maxDistance);for(var e,f,g=0;g<a.length;g++){if(e=a[g],f=this.findByValue(this.mergedResults,e.value),null===f){f={distances:[],value:e.value};for(var h=0;h<this.distanceSize+1;h++)f.distances.push(this.maxDistance);this.mergedResults.push(f)}f.distances[this.distanceSize]=Math.min(f.distances[this.distanceSize],e.distance*b)}this.distanceSize++},b.prototype.findByValue=function(a,b){for(var c=0;c<a.length;c++)if(a[c].value==b)return a[c];return null},b.prototype.getSortedResults=function(){for(var a=[],b=0;b<this.distanceSize;b++)a.push(0);a.push(this.distanceSize);for(var c,d,e,f=[],g=0;g<this.mergedResults.length;g++)c=this.mergedResults[g],e=c.value.split(/[\s,.]+/).length,d=c.distances.concat([e]),f.push({value:c.value,distances:c.distances,distance:distanceBetweenVectors(d,a,c.value)});return f.sort(sortByAttribute("distance",!0)),f},b.prototype.getSortedResultsLevensthein=function(a){var b=[];a=a.trim();for(var c=0;c<this.mergedResults.length;c++){var d=this.mergedResults[c];b.push({value:d.value,distance:StringUtils.getEditDistance(a,d.value)})}return b.sort(sortByAttribute("distance",!0)),b},a.StringMapSearchResult=b}(this);
!function(a){"use strict";function b(a){a=a||{},this.charsDistribution=a.charsDistribution||"QWERTY",this.LTRMap=new NumericMap,this.RTLMap=new NumericMap,this.rtlDistanceFactor=1.5,this.maxDistance=100,this.maxSearchDistance=a.maxSearchDistance||this.maxDistance,this.maxSearchResults=a.maxSearchResults||10,this.charsDistributions={ASCII:"abcdefghijklmnopqrstuvwxyz",QWERTY:"qazwsxedcrfvtgbyhnujmikolp"},this.setCharsDistribution(this.charsDistribution)}b.prototype.add=function(a,b){for(var c,d=a.trim().split(/[\s,.]+/),e=0;e<d.length;e++)c=this.normalizeTerm(d[e].trim()),""!==c&&(this.LTRMap.add(this.calculateLTRStringIndex(c),b),this.RTLMap.add(this.calculateRTLStringIndex(c),b))},b.prototype.search=function(a,b){b=b||{};for(var c,d=b.maxSearchDistance||this.maxSearchDistance,e=b.maxSearchResults||this.maxSearchResults,f=a.trim().split(/[\s,.]+/),g=new StringMapSearchResult({maxDistance:this.maxDistance}),h=0;h<f.length;h++)c=f[h].trim(),""!==c&&g.merge(this.searchTerm(c,d,e));var i=g.getSortedResults();return i.length>e?i.slice(0,e):i},b.prototype.searchTerm=function(a,b){b=b||{};var c=b.maxSearchDistance||this.maxSearchDistance,d=b.maxSearchResults||this.maxSearchResults;if(a=this.normalizeTerm(a),""!==a){for(var e,f=new StringMapSearchResult({maxDistance:this.maxDistance}),g=this.LTRMap.search(this.calculateLTRStringIndex(a),c,d),h=this.RTLMap.search(this.calculateRTLStringIndex(a),c,d),i=[].concat(g),j=0;j<h.length;j++)e=h[j],i.push({value:e.value,distance:e.distance*this.rtlDistanceFactor});return f.merge(i),f.getSortedResults()}return[]},b.prototype.calculateLTRStringIndex=function(a){for(var b,c=this.maxDistance,d=0,e=c,f=c,g=0;g<a.length;g++)b=this.charToInt(a[g]),c=e-d,e=d+b*(c/f),d+=(b-1)*(c/f);var h=(e+d)/2;return h},b.prototype.calculateRTLStringIndex=function(a){var b=a.split("").reverse().join("");return this.calculateLTRStringIndex(b)},b.prototype.charToInt=function(a){return this.distribution[a]},b.prototype.setCharsDistribution=function(a){var b=this.charsDistributions[a.toUpperCase()];b||(b=this.charsDistributions.QWERTY);for(var c=b.split(""),d={},e=0;e<c.length;e++)d[c[e]]=e+1;this.distribution=d},b.prototype.normalizeTerm=function(a){return StringUtils.removeDiacritics(a.toLowerCase().trim()).replace(/[^a-z]*/g,"")},a.StringMap=b}(this);
!function(a){"use strict";function b(a){return a.replace(/[^\u0000-\u007E]/g,function(a){return e[a]||a})}function c(a,b){if(0===a.length)return b.length;if(0===b.length)return a.length;var c,d=[];for(c=0;c<=b.length;c++)d[c]=[c];var e;for(e=0;e<=a.length;e++)d[0][e]=e;for(c=1;c<=b.length;c++)for(e=1;e<=a.length;e++)d[c][e]=b.charAt(c-1)==a.charAt(e-1)?d[c-1][e-1]:Math.min(d[c-1][e-1]+1,Math.min(d[c][e-1]+1,d[c-1][e]+1));return d[b.length][a.length]}for(var d=[{base:"A",letters:"AⒶAÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ"},{base:"AA",letters:"Ꜳ"},{base:"AE",letters:"ÆǼǢ"},{base:"AO",letters:"Ꜵ"},{base:"AU",letters:"Ꜷ"},{base:"AV",letters:"ꜸꜺ"},{base:"AY",letters:"Ꜽ"},{base:"B",letters:"BⒷBḂḄḆɃƂƁ"},{base:"C",letters:"CⒸCĆĈĊČÇḈƇȻꜾ"},{base:"D",letters:"DⒹDḊĎḌḐḒḎĐƋƊƉꝹ"},{base:"DZ",letters:"DZDŽ"},{base:"Dz",letters:"DzDž"},{base:"E",letters:"EⒺEÈÉÊỀẾỄỂẼĒḔḖĔĖËẺĚȄȆẸỆȨḜĘḘḚƐƎ"},{base:"F",letters:"FⒻFḞƑꝻ"},{base:"G",letters:"GⒼGǴĜḠĞĠǦĢǤƓꞠꝽꝾ"},{base:"H",letters:"HⒽHĤḢḦȞḤḨḪĦⱧⱵꞍ"},{base:"I",letters:"IⒾIÌÍÎĨĪĬİÏḮỈǏȈȊỊĮḬƗ"},{base:"J",letters:"JⒿJĴɈ"},{base:"K",letters:"KⓀKḰǨḲĶḴƘⱩꝀꝂꝄꞢ"},{base:"L",letters:"LⓁLĿĹĽḶḸĻḼḺŁȽⱢⱠꝈꝆꞀ"},{base:"LJ",letters:"LJ"},{base:"Lj",letters:"Lj"},{base:"M",letters:"MⓂMḾṀṂⱮƜ"},{base:"N",letters:"NⓃNǸŃÑṄŇṆŅṊṈȠƝꞐꞤ"},{base:"NJ",letters:"NJ"},{base:"Nj",letters:"Nj"},{base:"O",letters:"OⓄOÒÓÔỒỐỖỔÕṌȬṎŌṐṒŎȮȰÖȪỎŐǑȌȎƠỜỚỠỞỢỌỘǪǬØǾƆƟꝊꝌ"},{base:"OI",letters:"Ƣ"},{base:"OO",letters:"Ꝏ"},{base:"OU",letters:"Ȣ"},{base:"OE",letters:"Œ"},{base:"oe",letters:"œ"},{base:"P",letters:"PⓅPṔṖƤⱣꝐꝒꝔ"},{base:"Q",letters:"QⓆQꝖꝘɊ"},{base:"R",letters:"RⓇRŔṘŘȐȒṚṜŖṞɌⱤꝚꞦꞂ"},{base:"S",letters:"SⓈSẞŚṤŜṠŠṦṢṨȘŞⱾꞨꞄ"},{base:"T",letters:"TⓉTṪŤṬȚŢṰṮŦƬƮȾꞆ"},{base:"TZ",letters:"Ꜩ"},{base:"U",letters:"UⓊUÙÚÛŨṸŪṺŬÜǛǗǕǙỦŮŰǓȔȖƯỪỨỮỬỰỤṲŲṶṴɄ"},{base:"V",letters:"VⓋVṼṾƲꝞɅ"},{base:"VY",letters:"Ꝡ"},{base:"W",letters:"WⓌWẀẂŴẆẄẈⱲ"},{base:"X",letters:"XⓍXẊẌ"},{base:"Y",letters:"YⓎYỲÝŶỸȲẎŸỶỴƳɎỾ"},{base:"Z",letters:"ZⓏZŹẐŻŽẒẔƵȤⱿⱫꝢ"},{base:"a",letters:"aⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐ"},{base:"aa",letters:"ꜳ"},{base:"ae",letters:"æǽǣ"},{base:"ao",letters:"ꜵ"},{base:"au",letters:"ꜷ"},{base:"av",letters:"ꜹꜻ"},{base:"ay",letters:"ꜽ"},{base:"b",letters:"bⓑbḃḅḇƀƃɓ"},{base:"c",letters:"cⓒcćĉċčçḉƈȼꜿↄ"},{base:"d",letters:"dⓓdḋďḍḑḓḏđƌɖɗꝺ"},{base:"dz",letters:"dzdž"},{base:"e",letters:"eⓔeèéêềếễểẽēḕḗĕėëẻěȅȇẹệȩḝęḙḛɇɛǝ"},{base:"f",letters:"fⓕfḟƒꝼ"},{base:"g",letters:"gⓖgǵĝḡğġǧģǥɠꞡᵹꝿ"},{base:"h",letters:"hⓗhĥḣḧȟḥḩḫẖħⱨⱶɥ"},{base:"hv",letters:"ƕ"},{base:"i",letters:"iⓘiìíîĩīĭïḯỉǐȉȋịįḭɨı"},{base:"j",letters:"jⓙjĵǰɉ"},{base:"k",letters:"kⓚkḱǩḳķḵƙⱪꝁꝃꝅꞣ"},{base:"l",letters:"lⓛlŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇ"},{base:"lj",letters:"lj"},{base:"m",letters:"mⓜmḿṁṃɱɯ"},{base:"n",letters:"nⓝnǹńñṅňṇņṋṉƞɲʼnꞑꞥ"},{base:"nj",letters:"nj"},{base:"o",letters:"oⓞoòóôồốỗổõṍȭṏōṑṓŏȯȱöȫỏőǒȍȏơờớỡởợọộǫǭøǿɔꝋꝍɵ"},{base:"oi",letters:"ƣ"},{base:"ou",letters:"ȣ"},{base:"oo",letters:"ꝏ"},{base:"p",letters:"pⓟpṕṗƥᵽꝑꝓꝕ"},{base:"q",letters:"qⓠqɋꝗꝙ"},{base:"r",letters:"rⓡrŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ"},{base:"s",letters:"sⓢsßśṥŝṡšṧṣṩșşȿꞩꞅẛ"},{base:"t",letters:"tⓣtṫẗťṭțţṱṯŧƭʈⱦꞇ"},{base:"tz",letters:"ꜩ"},{base:"u",letters:"uⓤuùúûũṹūṻŭüǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ"},{base:"v",letters:"vⓥvṽṿʋꝟʌ"},{base:"vy",letters:"ꝡ"},{base:"w",letters:"wⓦwẁẃŵẇẅẘẉⱳ"},{base:"x",letters:"xⓧxẋẍ"},{base:"y",letters:"yⓨyỳýŷỹȳẏÿỷẙỵƴɏỿ"},{base:"z",letters:"zⓩzźẑżžẓẕƶȥɀⱬꝣ"}],e={},f=0;f<d.length;f++)for(var g=d[f].letters.split(""),h=0;h<g.length;h++)e[g[h]]=d[f].base;a.StringUtils={removeDiacritics:b,getEditDistance:c}}(this);
!function(a){"use strict";function b(a,b){return function(c,d){if(b){if(c[a]>d[a])return 1}else if(c[a]<d[a])return 1;return c[a]==d[a]?0:-1}}function c(a,b){for(var c=0,d=0,e=0,f=0;f<a.length;f++)d=a[f]?a[f]:0,e=b[f]?b[f]:0,c+=Math.pow(d-e,2);return Math.sqrt(c)}a.distanceBetweenVectors=c,a.sortByAttribute=b}(this);