1 line
11 KiB
JavaScript
1 line
11 KiB
JavaScript
|
|
!function(a,b){"function"==typeof define&&define.amd?define(["jquery","fastsearch"],b):"object"==typeof module&&module.exports?module.exports=b(require("jquery"),require("fastsearch")):b(a.jQuery)}(this,function(a){function b(a,b){this.init.apply(this,arguments)}function c(a){this.init(a)}var d=a(document),e=0,f=a.fastsearch,g=f.pickTo,h=f.selectorFromClass;return a.extend(b.prototype,{init:function(d,f){this.$input=a(d),this.options=g(a.extend(!0,{},b.defaults,f,{placeholder:this.$input.attr("placeholder")}),this.$input.data(),["url","loadOnce","apiParam","initialValue","userOptionAllowed"]),this.ens=".fastselect"+ ++e,this.hasCustomLoader=this.$input.is("input"),this.isMultiple=!!this.$input.attr("multiple"),this.userOptionAllowed=this.hasCustomLoader&&this.isMultiple&&this.options.userOptionAllowed,this.optionsCollection=new c(g({multipleValues:this.isMultiple},this.options,["url","loadOnce","parseData","matcher"])),this.setupDomElements(),this.setupFastsearch(),this.setupEvents()},setupDomElements:function(){this.$el=a("<div>").addClass(this.options.elementClass),this[this.isMultiple?"setupMultipleElement":"setupSingleElement"](function(){this.updateDomElements(),this.$controls.appendTo(this.$el),this.$el.insertAfter(this.$input),this.$input.detach().appendTo(this.$el)})},setupSingleElement:function(b){var c=this.processInitialOptions(),d=c&&c.length?c[0].text:this.options.placeholder;this.$el.addClass(this.options.singleModeClass),this.$controls=a("<div>").addClass(this.options.controlsClass),this.$toggleBtn=a("<div>").addClass(this.options.toggleButtonClass).text(d).appendTo(this.$el),this.$queryInput=a("<input>").attr("placeholder",this.options.searchPlaceholder).addClass(this.options.queryInputClass).appendTo(this.$controls),b.call(this)},setupMultipleElement:function(b){var c=this,d=c.options,e=this.processInitialOptions();this.$el.addClass(d.multipleModeClass),this.$controls=a("<div>").addClass(d.controlsClass),this.$queryInput=a("<input>").addClass(d.queryInputClass).appendTo(this.$controls),e&&a.each(e,function(a,b){c.addChoiceItem(b)}),b.call(this)},updateDomElements:function(){this.$el.toggleClass(this.options.noneSelectedClass,!this.optionsCollection.hasSelectedValues()),this.adjustQueryInputLayout()},processInitialOptions:function(){var b,c=this;return this.hasCustomLoader?(b=this.options.initialValue,a.isPlainObject(b)&&(b=[b])):b=a.map(this.$input.find("option:selected").get(),function(b){var c=a(b);return{text:c.text(),value:c.attr("value")}}),b&&a.each(b,function(a,b){c.optionsCollection.setSelected(b)}),b},addChoiceItem:function(b){a('<div data-text="'+b.text+'" data-value="'+b.value+'" class="'+this.options.choiceItemClass+'">'+a("<div>").html(b.text).text()+'<button class="'+this.options.choiceRemoveClass+'" type="button">×</button></div>').insertBefore(this.$queryInput)},setupFastsearch:function(){var b=this,c=this.options,d={};g(d,c,["resultsContClass","resultsOpenedClass","resultsFlippedClass","groupClass","itemClass","focusFirstItem","groupTitleClass","loadingClass","noResultsClass","noResultsText","focusedItemClass","flipOnBottom"]),this.fastsearch=new f(this.$queryInput.get(0),a.extend(d,{wrapSelector:this.isMultiple?this.$el:this.$controls,minQueryLength:0,typeTimeout:this.hasCustomLoader?c.typeTimeout:0,preventSubmit:!0,fillInputId:!1,responseFormat:{label:"text",groupCaption:"label"},onItemSelect:function(a,d,e){var f=c.maxItems;b.isMultiple&&f&&b.optionsCollection.getValues().length>f-1?c.onMaxItemsReached&&c.onMaxItemsReached(this):(b.setSelectedOption(d),b.writeToInput(),!b.isMultiple&&b.hide(),c.clearQueryOnSelect&&e.clear(),b.userOptionAllowed&&d.isUserOption&&(e.$resultsCont.remove(),delete e.$resultsCont,b.hide()),c.onItemSelect&&c.onItemSelect.call(b,a,d,b,e))},onItemCreate:function(a,d){d.$item=a,d.selected&&a.addClass(c.itemSelectedClass),b.userOptionAllowed&&d.isUserOption&&a.text(b.options.userOptionPrefix+a.text()).addClass(b.options.userOptionClass),c.onItemCreate&&c.onItemCreate.call(b,a,d,b)}})),this.fastsearch.getResults=function(){b.userOptionAllowed&&b.$queryInput.val(
|