2 lines
7.3 KiB
JavaScript
2 lines
7.3 KiB
JavaScript
|
|
/*! sifter.js | https://github.com/brianreavis/sifter.js | Apache License (v2) */
|
||
|
|
(function(r,t){if(typeof define==="function"&&define.amd){define(t)}else if(typeof exports==="object"){module.exports=t()}else{r.Sifter=t()}})(this,function(){var r=function(r,t){this.items=r;this.settings=t||{diacritics:true}};r.prototype.tokenize=function(r){r=i(String(r||"").toLowerCase());if(!r||!r.length)return[];var t,e,n,f;var s=[];var a=r.split(/ +/);for(t=0,e=a.length;t<e;t++){n=o(a[t]);if(this.settings.diacritics){for(f in u){if(u.hasOwnProperty(f)){n=n.replace(new RegExp(f,"g"),u[f])}}}s.push({string:a[t],regex:new RegExp(n,"i")})}return s};r.prototype.iterator=function(r,t){var e;if(f(r)){e=Array.prototype.forEach||function(r){for(var t=0,e=this.length;t<e;t++){r(this[t],t,this)}}}else{e=function(r){for(var t in this){if(this.hasOwnProperty(t)){r(this[t],t,this)}}}}e.apply(r,[t])};r.prototype.getScoreFunction=function(r,t){var e,i,o,f,u;e=this;r=e.prepareSearch(r,t);o=r.tokens;i=r.options.fields;f=o.length;u=r.options.nesting;var s=function(r,t){var e,n;if(!r)return 0;r=String(r||"");n=r.search(t.regex);if(n===-1)return 0;e=t.string.length/r.length;if(n===0)e+=.5;return e};var a=function(){var r=i.length;if(!r){return function(){return 0}}if(r===1){return function(r,t){return s(n(t,i[0],u),r)}}return function(t,e){for(var o=0,f=0;o<r;o++){f+=s(n(e,i[o],u),t)}return f/r}}();if(!f){return function(){return 0}}if(f===1){return function(r){return a(o[0],r)}}if(r.options.conjunction==="and"){return function(r){var t;for(var e=0,n=0;e<f;e++){t=a(o[e],r);if(t<=0)return 0;n+=t}return n/f}}else{return function(r){for(var t=0,e=0;t<f;t++){e+=a(o[t],r)}return e/f}}};r.prototype.getSortFunction=function(r,e){var i,o,f,u,s,a,c,p,l,h,g;f=this;r=f.prepareSearch(r,e);g=!r.query&&e.sort_empty||e.sort;l=function(r,t){if(r==="$score")return t.score;return n(f.items[t.id],r,e.nesting)};s=[];if(g){for(i=0,o=g.length;i<o;i++){if(r.query||g[i].field!=="$score"){s.push(g[i])}}}if(r.query){h=true;for(i=0,o=s.length;i<o;i++){if(s[i].field==="$score"){h=false;break}}if(h){s.unshift({field:"$score",direction:"desc"})}}else{for(i=0,o=s.length;i<o;i++){if(s[i].field==="$score"){s.splice(i,1);break}}}p=[];for(i=0,o=s.length;i<o;i++){p.push(s[i].direction==="desc"?-1:1)}a=s.length;if(!a){return null}else if(a===1){u=s[0].field;c=p[0];return function(r,e){return c*t(l(u,r),l(u,e))}}else{return function(r,e){var n,i,o,f,u;for(n=0;n<a;n++){u=s[n].field;i=p[n]*t(l(u,r),l(u,e));if(i)return i}return 0}}};r.prototype.prepareSearch=function(r,t){if(typeof r==="object")return r;t=e({},t);var n=t.fields;var i=t.sort;var o=t.sort_empty;if(n&&!f(n))t.fields=[n];if(i&&!f(i))t.sort=[i];if(o&&!f(o))t.sort_empty=[o];return{options:t,query:String(r||"").toLowerCase(),tokens:this.tokenize(r),total:0,items:[]}};r.prototype.search=function(r,t){var e=this,n,i,o,f;var u;var s;o=this.prepareSearch(r,t);t=o.options;r=o.query;s=t.score||e.getScoreFunction(o);if(r.length){e.iterator(e.items,function(r,e){i=s(r);if(t.filter===false||i>0){o.items.push({score:i,id:e})}})}else{e.iterator(e.items,function(r,t){o.items.push({score:1,id:t})})}u=e.getSortFunction(o,t);if(u)o.items.sort(u);o.total=o.items.length;if(typeof t.limit==="number"){o.items=o.items.slice(0,t.limit)}return o};var t=function(r,t){if(typeof r==="number"&&typeof t==="number"){return r>t?1:r<t?-1:0}r=s(String(r||""));t=s(String(t||""));if(r>t)return 1;if(t>r)return-1;return 0};var e=function(r,t){var e,n,i,o;for(e=1,n=arguments.length;e<n;e++){o=arguments[e];if(!o)continue;for(i in o){if(o.hasOwnProperty(i)){r[i]=o[i]}}}return r};var n=function(r,t,e){if(!r||!t)return;if(!e)return r[t];var n=t.split(".");while(n.length&&(r=r[n.shift()]));return r};var i=function(r){return(r+"").replace(/^\s+|\s+$|/g,"")};var o=function(r){return(r+"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")};var f=Array.isArray||typeof $!=="undefined"&&$.isArray||function(r){return Object.prototype.toString.call(r)==="[object Array]"};var u={a:"[a\u1e00\u1e01\u0102\u0103\xc2\xe2\u01cd\u01ce\u023a\u2c65\u0226\u0227\u1ea0\u1ea1\xc4\xe4\xc0\xe0\xc1\xe1\u0100\u0101\xc3\xe3\xc5\xe5\u0105\u0104\xc3\u0105\u0104]",b:"[b\u2422\u03b2\u0392B\u0e
|