-
Notifications
You must be signed in to change notification settings - Fork 2k
/
autocomplete.min.js
9 lines (9 loc) · 3.14 KB
/
autocomplete.min.js
1
2
3
4
5
6
7
8
9
this.ckan.module('autocomplete',function(jQuery,_){return{options:{tags:false,key:false,label:false,items:10,source:null,interval:300,dropdownClass:'',containerClass:'',i18n:{noMatches:_('No matches found'),emptySearch:_('Start typing…'),inputTooShort:function(data){return _('Input is too short, must be at least one character').ifPlural(data.min,'Input is too short, must be at least %(min)d characters');}}},initialize:function(){jQuery.proxyAll(this,/_on/,/format/);this.setupAutoComplete();},setupAutoComplete:function(){var settings={width:'resolve',formatResult:this.formatResult,formatNoMatches:this.formatNoMatches,formatInputTooShort:this.formatInputTooShort,dropdownCssClass:this.options.dropdownClass,containerCssClass:this.options.containerClass};if(!this.el.is('select')){if(this.options.tags){settings.tags=this._onQuery;}else{settings.query=this._onQuery;settings.createSearchChoice=this.formatTerm;}
settings.initSelection=this.formatInitialValue;}
else{if(/MSIE (\d+\.\d+);/.test(navigator.userAgent)){var ieversion=new Number(RegExp.$1);if(ieversion<=7){return}}}
var select2=this.el.select2(settings).data('select2');if(this.options.tags&&select2&&select2.search){select2.search.on('keydown',this._onKeydown);}
$('.select2-choice',select2.container).on('click',function(){return false;});this._select2=select2;},getCompletions:function(string,fn){var parts=this.options.source.split('?');var end=parts.pop();var source=parts.join('?')+encodeURIComponent(string)+end;var client=this.sandbox.client;var options={format:function(data){var completion_options=jQuery.extend(options,{objects:true});return{results:client.parseCompletions(data,completion_options)}},key:this.options.key,label:this.options.label};return client.getCompletions(source,options,fn);},lookup:function(string,fn){var module=this;this._lastTerm=string;clearTimeout(this._debounced);fn({results:[]});if(string){this._debounced=setTimeout(function(){var term=module._lastTerm;if(module._last&&typeof module._last.abort=='function'){module._last.abort();}
module._last=module.getCompletions(term,fn);},this.options.interval);$('.select2-search input',this._select2.dropdown).addClass('select2-active');}},formatResult:function(state,container,query){var term=this._lastTerm||null;if(container){container.attr('data-value',state.id);}
return state.text.split(term).join(term&&term.bold());},formatNoMatches:function(term){return!term?this.i18n('emptySearch'):this.i18n('noMatches');},formatInputTooShort:function(term,min){return this.i18n('inputTooShort',{min:min});},formatTerm:function(term){term=jQuery.trim(term||'');return{id:term.replace(/,/g,'\u002C'),text:term};},formatInitialValue:function(element,callback){var value=jQuery.trim(element.val()||'');var formatted;if(this.options.tags){formatted=jQuery.map(value.split(","),this.formatTerm);}else{formatted=this.formatTerm(value);}
if(typeof callback==='function'){callback(formatted);}
return formatted;},_onQuery:function(options){if(options){this.lookup(options.term,options.callback);}},_onKeydown:function(event){if(event.which===188){event.preventDefault();setTimeout(function(){var e=jQuery.Event("keydown",{which:13});jQuery(event.target).trigger(e);},10);}}};});