-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathasearch.min.js
More file actions
1 lines (1 loc) · 3.93 KB
/
asearch.min.js
File metadata and controls
1 lines (1 loc) · 3.93 KB
1
!function(t){"use strict";function e(e,r){var a=e.cache[e.source],n={};if(a){for(var l in a)if(l===r)return void i(e,a[l],r)}else a=e.cache[e.source]={};e.query&&(n[e.search]=r,r=t.extend({},e.query,n)),t.ajax({url:e.source,data:r,method:e.method||"get",dataType:e.type||"json"}).done(function(t){t=e.normalize(t),a[r]=t,i(e,t,r)}).fail(function(t){e.target.trigger("error",t)})}function r(r,a){var n=e;a&&(a=t.trim(a.toLowerCase())),Array.isArray(r.source)&&(n=function(){i(r,r.source,a)}),r.timer&&(clearTimeout(r.timer),r.timer=null),r.timer=setTimeout(function(){n(r,a)},r.delay)}function i(e,r,a){function n(t){var r="";return Object.keys(t).forEach(function(i,a){r+="<"+e.li+">\n",r+="<"+e.lt+' title="'+i+'" data-row="'+a+'">\n',r+=o(t[i]),r+="</"+e.lt+">\n",r+="</"+e.li+">\n"}),r}function l(t,r){var i="",a=t.title||" ",n=t.price&&parseFloat(t.price)||0,l=t.compare_price&&parseFloat(t.compare_price)||0,o=l>n;return i+="<"+e.li+' title="'+a+'" data-row="'+r+'">',t.url?i+='<a href="'+t.url+'">':i+="<div>",t.thumbnail&&(i+='<img src="'+t.thumbnail+'">'),i+="<h4>"+a+"</h4>",t.description&&(i+="<p>"+t.description+"</p>"),o&&l&&(i+="<i>"+l+"</i>"),n&&(i+='<b class="'+(o?"discount":"")+'">'+n+"</b>"),t.url?i+="</a>":i+="</div>",i+="</"+e.li+">\n"}function o(t){var r="";return"object"==typeof t?Array.isArray(t)?t.forEach(function(t){"string"==typeof t?(r+="<"+e.li+">",r+=t,r+="</"+e.li+">\n"):r+=l(t)}):Object.keys(t).forEach(function(e){r+=n(t[e])}):(r+="<"+e.li+">",r+=t,r+="</"+e.li+">\n"),r}var s=t(e.lt,e.elem),c="";if(a&&"function"==typeof e.filter)return i(e,e.filter(r,a));e.elem.data("results",r);for(var u=0,p=r.length;u<p;u++)"object"==typeof r[u]?c+=l(r[u],u):(0===u&&(c+="<"+e.li+">\n",c+="<"+e.lt+">\n"),c+=o(r[u]),u===p-1&&(c+="</"+e.lt+">\n",c+="</"+e.li+">\n"));return c||(e.notFound?(c+="<"+e.li+' title="'+e.notFound+'">',c+=e.notFound,c+="</"+e.li+">\n"):e.toggle(!1)),s.html(c),this}function a(e){function i(e){var r=a.elem.data("results"),i=t(e).attr("data-row"),n=t(e).attr("href");n||(n=t(e).find("a").first().attr("href")),a.target.trigger("selected",n,r[i])}e=e||{},(Array.isArray(e)||"string"==typeof e)&&(e={source:e});var a=t.extend({},n,e),o=[a.lt,a.li].join(" ");if(a.target=t(this),a.wrapper.indexOf("id=")<0){var s=a.wrapper.indexOf(">");if(s<0)throw new TypeError("wrapper");a.className=a.asClass+"-wrapper",a.id=a.asClass+l++,a.wrapper=a.wrapper.substr(0,s-1)+' id="'+a.id+'" class="'+a.className+'"'+a.wrapper.substr(s,a.wrapper.length)}t(this).wrap(a.wrapper),a.elem=t("#"+a.id),t("<"+a.lt+' class="'+a.asClass+'"></'+a.lt+">\n").appendTo(a.elem),a.listElem=t(a.lt,a.elem),a.toggle=function(t){a.visible=void 0===t?!a.visible:t,a.visible?(a.listElem.show(a.animate),a.target.trigger("show")):(a.listElem.hide(a.animate),a.target.trigger("hide"))},a.toggle(a.visible),a.chars||r(a,null);var c="",u=!1;return a.elem.on("touchstart",o,function(t){u=t.timeStamp}).on("touchend",o,function(t){var e;return e=t.timeStamp-u,t.preventDefault(),t.stopPropagation(),e<a.threshold&&i(this),!1}).on("click",o,function(t){t.preventDefault(),i(this)}).on("keyup","input",function(t){this.value!==c&&((c=this.value).length>=a.chars?(r(a,c),a.toggle(!0)):a.toggle(!1))}).on("click","input",function(t){this.value.length>=a.chars&&a.toggle()}).on("blur","input",function(t){setTimeout(function(){a.toggle(!1)},a.delay)}),this}var n={source:"/search.json",notFound:void 0,asClass:"asearch",visible:!1,wrapper:"<div/>",animate:300,search:"q",delay:200,threshold:250,chars:3,cache:{},lt:"ul",li:"li"};n.query={type:"product",fields:["title","url","thumbnail","price","compare_at_price"],limit:0},n.normalize=function(t){return t.results?t.results.map(function(t){return{url:t.url,title:t.title,thumbnail:t.thumbnail,description:t.meta_description,price:t.price,compare_price:t.compare_at_price}}):[]};var l=0;t.fn.aSearch=function(){var e=Array.prototype.slice.call(arguments);return t.data(this,"aSearch")?this:t(this).each(function(){a.apply(this,e),t.data(this,"aSearch")})}}(jQuery);