uxrocket.autocomplete
Version:
UX Rocket Autocomplete: A jQueryUI autocomplete wrapper
2 lines • 7.27 kB
JavaScript
!function($){var ux,defaults={type:"list",item:10,service:null,minLength:2,formdata:null,categoryTextLimit:25,queryType:"GET",hidden:null,template:null,highlight:!0,arrowSelection:!1,arrowNavigation:!0,cache:!1,onReady:!1,onSelect:!1,onButtonClick:!1,onClearCache:!1,onUpdate:!1,onRemove:!1},templates={list:{wrap:"<ul></ul>",item:'<li> <a {{#if url}}href="{{url}}"{{/if}}> {{{name}}} {{#if title}} <br /><em>{{substr title 50}}</em> {{/if}} </a></li>'},image:{wrap:"<ul></ul>",item:'<li> <a {{#if url}}href="{{url}}"{{/if}}> <span class="item-image"><img src="{{image}}"/></span> {{{name}}} {{#if title}} <br /><em>{{substr title 50}}</em> {{/if}} </a></li>'},category:{wrap:"<ul></ul>",head:'<li class="uxitd-autocomplete-category ui-autocomplete-category"> <span class="uxitd-category-head" title="{{category}}">{{substr category 25}}</span></li>',item:'<li> <a {{#if url}}href="{{url}}"{{/if}}> {{{name}}} {{#if title}} <br /><em>{{substr title 50}}</em> {{/if}} </a></li>'},tree:{wrap:"<ul></ul>",head:'<li class="uxitd-autocomplete-category ui-autocomplete-category"> <span class="uxitd-category-head" title="{{category}}">{{substr category 25}}</span></li>',item:'<li> <a {{#if url}}href="{{url}}"{{/if}}> <span class="item-image"><img src="{{image}}"/></span> {{{name}}} {{#if title}} <br /><em>{{substr title 50}}</em> {{/if}} </a></li>'}},events={click:"click.uxAutocomplete",search:"autocompletesearch.uxAutocomplete",response:"autocompleteresponse.uxAutocomplete"},ns={rocket:"uxRocket",data:"uxAutocomplete",ready:"uxitd-autocomplete-ready",rocketWrap:"uxitd-plugin-wrap",wrap:"uxitd-autocomplete-wrap",icon:"icon-search",loading:"icon-loading"},AutoComplete=function(e,t,a){var s=$(e),n=$.extend({},defaults,t,s.data(),{selector:a});n.terms={},s.data(ns.data,n),setLayout(s),callback(n.onReady),bindUIActions(s),setTemplate(s)},setLayout=function(e){var t,a=e.data(ns.data);t=" "+e.context.className.replace(ns.ready,""),"."==a.selector.charAt(0)&&(t=t.replace(" "+a.selector.substr(1),""),t=t.replace(a.selector.substr(1)+" ","")),e.parent().is("."+ns.rocketWrap)?e.parent().addClass(ns.wrap+t+" group"):e.wrap('<span class="'+ns.rocketWrap+" "+ns.wrap+t+' group"></span>'),e.after('<i class="'+ns.icon+'"></i>')},setSource=function($el){var _opts=$el.data(ns.data),fdata=null,url_pattern=/^(http|https|\/|\.\/|\.\.\/)/,source=_opts.service,sourceFunction;return url_pattern.test(source)?sourceFunction=function(e,t){var a=e.term;if($el.is(":focus")){if(_opts.cache&&a in _opts.terms)return void t($.map(_opts.terms[a].itemList.slice(0,_opts.item),function(e){return setItem(e)}));null!=_opts.formdata&&(fdata=$(_opts.formdata).serialize()),$.ajax({url:source,dataType:"json",type:_opts.queryType,data:{type:_opts.type,term:a,formdata:fdata},success:function(e){_opts.cache&&(_opts.terms[a]=e,$el.data(ns.data,_opts)),t($.map(e.itemList.slice(0,_opts.item),function(e){return setItem(e)}))}})}}:(source=eval(source),sourceFunction=function(e,t){if($el.is(":focus")){var a=new RegExp($.ui.autocomplete.escapeRegex(e.term),"i");t($.map(source.itemList,function(e){return a.test(e.name)?setItem(e):void 0}))}}),sourceFunction},bindUIActions=function($el){var _opts=$el.data(ns.data);if("undefined"!=typeof _opts.props&&""!=_opts.props){var props=_opts.props.split(":");$el.next("."+ns.icon).addClass("uxitd-autocomplete-icon-clickable").on(events.click,function(e){e.preventDefault(),eval(props[1])})}_opts.onButtonClick!==!1&&$el.next("."+ns.icon).on(events.click,function(){callback(_opts.onButtonClick)}),$el.on(events.search,function(e,t){$(this).siblings("."+ns.icon).addClass(ns.loading)}),$el.on(events.response,function(e,t){$(this).siblings("."+ns.loading).removeClass(ns.loading)}),$el.autocomplete({open:function(e,t){$(".uxitd-autocomplete-category").removeClass("ui-menu-item"),$(this).autocomplete("widget").css({width:$(this).outerWidth()+"px"})},minLength:_opts.minLength,source:setSource($el),focus:function(e,t){_opts.arrowNavigation||e.preventDefault()},select:function(e,t){if(null!=_opts.hidden&&$(_opts.hidden).val(t.item.id),_opts.arrowSelection===!0&&13==e.keyCode&&"undefined"!=typeof t.item.url){var a=$("#"+e.currentTarget.id).find(".ui-state-focus a").attr("target");"_blank"==a?window.open(t.item.url):window.location=t.item.url}callback(_opts.onSelect)}})},setTemplate=function(e){var t=e.data("uiAutocomplete")?e.data("uiAutocomplete"):e.data("ui-autocomplete"),a=e.data(ns.data),s={};if(null===a.template)switch(a.type){default:case"list":s=templates.list;break;case"image":s=templates.image;break;case"category":s=templates.category;break;case"tree":s=templates.tree}else s=a.template;t._renderMenu=function(e,t){var n=this,o=[],i="";$.each(t,function(t,r){var c;if(("category"==a.type||"tree"==a.type)&&"undefined"!=typeof r.category&&r.category!=i){var l=Handlebars.compile(s.head)(r);o.push(l),i=r.category}c=n._renderItemData(e,r),o.push(c)}),e.append(o),""!=i&&e.addClass("uxitd-category")},t._create=function(){var e=this;e._super(),e.widget().menu("option","items","> :not(.ui-autocomplete-category)")},t._renderItemData=function(e,t){var n,o=Handlebars.compile(s.item)(t);return n=o,a.highlight===!0&&(n=o.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+$.ui.autocomplete.escapeRegex(this.term)+")(?![^<>]*>)(?![^&;]+;)","gi"),'<span class="matched">$1</span>')),$(n).addClass("ui-menu-item").data("ui-autocomplete-item",t).attr("role","presentation")}},setItem=function(e){return"undefined"==typeof e.value&&(e.value=e.name),"undefined"!=typeof e.visiblename&&(e.value=e.visiblename),e},callback=function(e){if("function"==typeof e)e.apply(this);else if(e!==!1){var t=new Function("return "+e);t()}};ux=$.fn.uxitdautocomplete=$.uxautocomplete=function(e){var t=this.selector;return this.each(function(){var a=$(this),s=a.data("uxRocket")||{},n;a.hasClass(ns.ready)||a.hasClass(ns.rocketWrap)||(a.addClass(ns.ready),s[ns.data]={hasWrapper:!0,wrapper:ns.wrap,ready:ns.ready,selector:t,options:e},a.data(ns.rocket,s),n=new AutoComplete(this,e,t))})},ux.clearCache=function(e){var t=$(void 0!==e?e:"."+ns.ready);t.filter("input").each(function(){var e=$(this),t=e.data(ns.data);t.terms={},e.data(ns.data,t),callback(t.onClearCache)})},ux.update=function(e){var t=$(void 0!==e?e:"."+ns.ready);t.filter("input").each(function(){var e=$(this),t=e.data(ns.data),a=e.data(ns.rocket);e.autocomplete("destroy"),e.removeData(ns.data),t=$.extend({},defaults,a[ns.data].options,$(this).data()),e.data(ns.data,t),e.off(events.click+" "+events.search+" "+events.response),bindUIActions(e),setTemplate(e),callback(t.onUpdate)})},ux.remove=function(e){var t=$(void 0!==e?e:"."+ns.ready);t.filter("input").each(function(){var e=$(this),t=e.data(ns.data),a=e.data(ns.rocket);e.removeClass(ns.ready),e.off(events.click+" "+events.search+" "+events.response),e.next("."+ns.icon).remove(),a[ns.data].hasWrapper&&(Object.keys&&1==Object.keys(a).length?e.unwrap():e.parent().removeClass(ns.wrap)),e.removeData(ns.data),delete a[ns.data],e.data(ns.rocket,a),e.autocomplete("destroy"),callback(t.onRemove)})},ux.version="1.6.0",ux.settings=defaults}(jQuery);
//# sourceMappingURL=./uxrocket.autocomplete.min.js.map