/** * bootstrap-multiselect.js * https://github.com/davidstutz/bootstrap-multiselect * * Copyright 2012, 2013 David Stutz * * Dual licensed under the BSD-3-Clause and the Apache License, Version 2.0. */ !function(b){if(typeof ko!=="undefined"&&ko.bindingHandlers&&!ko.bindingHandlers.multiselect){ko.bindingHandlers.multiselect={init:function(e,f,g,d,c){},update:function(h,i,j,g,c){var f=ko.utils.unwrapObservable(i());var d=j().options;var e=b(h).data("multiselect");if(!e){b(h).multiselect(f)}else{e.updateOriginalOptions();if(d&&d().length!==e.originalOptions.length){b(h).multiselect("rebuild")}}}}}function a(c,d){this.options=this.mergeOptions(d);this.$select=b(c);this.originalOptions=this.$select.clone()[0].options;this.query="";this.searchTimeout=null;this.options.multiple=this.$select.attr("multiple")==="multiple";this.options.onChange=b.proxy(this.options.onChange,this);this.options.onDropdownShow=b.proxy(this.options.onDropdownShow,this);this.options.onDropdownHide=b.proxy(this.options.onDropdownHide,this);this.buildContainer();this.buildButton();this.buildSelectAll();this.buildDropdown();this.buildDropdownOptions();this.buildFilter();this.updateButtonText();this.updateSelectAll();this.$select.hide().after(this.$container)}a.prototype={defaults:{buttonText:function(d,c){if(d.length===0){return this.nonSelectedText+' '}else{if(d.length>this.numberDisplayed){return d.length+" "+this.nSelectedText+' '}else{var e="";d.each(function(){var f=(b(this).attr("label")!==undefined)?b(this).attr("label"):b(this).html();e+=f+", "});return e.substr(0,e.length-2)+' '}}},buttonTitle:function(d,c){if(d.length===0){return this.nonSelectedText}else{var e="";d.each(function(){e+=b(this).text()+", "});return e.substr(0,e.length-2)}},label:function(c){return b(c).attr("label")||b(c).html()},onChange:function(c,d){},onDropdownShow:function(c){},onDropdownHide:function(c){},buttonClass:"btn btn-default",dropRight:false,selectedClass:"active",buttonWidth:"auto",buttonContainer:'
',maxHeight:false,includeSelectAllOption:false,selectAllText:" Select all",selectAllValue:"multiselect-all",enableFiltering:false,enableCaseInsensitiveFiltering:false,filterPlaceholder:"Search",filterBehavior:"text",preventInputChangeEvent:false,nonSelectedText:"None selected",nSelectedText:"selected",numberDisplayed:3},templates:{button:'',ul:'',filter:'
',li:'
  • ',divider:'
  • ',liGroup:'
  • '},constructor:a,buildContainer:function(){this.$container=b(this.options.buttonContainer);this.$container.on("show.bs.dropdown",this.options.onDropdownShow);this.$container.on("hide.bs.dropdown",this.options.onDropdownHide)},buildButton:function(){this.$button=b(this.templates.button).addClass(this.options.buttonClass);if(this.$select.prop("disabled")){this.disable()}else{this.enable()}if(this.options.buttonWidth&&this.options.buttonWidth!="auto"){this.$button.css({width:this.options.buttonWidth})}var c=this.$select.attr("tabindex");if(c){this.$button.attr("tabindex",c)}this.$container.prepend(this.$button)},buildDropdown:function(){this.$ul=b(this.templates.ul);if(this.options.dropRight){this.$ul.addClass("pull-right")}if(this.options.maxHeight){this.$ul.css({"max-height":this.options.maxHeight+"px","overflow-y":"auto","overflow-x":"hidden"})}this.$container.append(this.$ul)},buildDropdownOptions:function(){this.$select.children().each(b.proxy(function(d,e){var c=b(e).prop("tagName").toLowerCase();if(c==="optgroup"){this.createOptgroup(e)}else{if(c==="option"){if(b(e).data("role")==="divider"){this.createDivider()}else{this.createOptionValue(e)}}}},this));b("li input",this.$ul).on("change",b.proxy(function(d){var j=b(d.target).prop("checked")||false;var k=b(d.target).val()===this.options.selectAllValue;if(this.options.selectedClass){if(j){b(d.target).parents("li").addClass(this.options.selectedClass)}else{b(d.target).parents("li").removeClass(this.options.selectedClass)}}var h=b(d.target).val();var c=this.getOptionByValue(h);var g=b("option",this.$select).not(c);var f=b("input",this.$container).not(b(d.target));if(k){if(this.$select[0][0].value===this.options.selectAllValue){var l=[];var m=b('option[value!="'+this.options.selectAllValue+'"]',this.$select);for(var e=0;ec){b(g.target).parents("li:last").prevUntil(e).each(function(){b(this).find("input:first").prop("checked",true).trigger("change")})}else{b(g.target).parents("li:last").nextUntil(e).each(function(){b(this).find("input:first").prop("checked",true).trigger("change")})}}}b(g.target).blur()});this.$container.on("keydown",b.proxy(function(f){if(b('input[type="text"]',this.$container).is(":focus")){return}if((f.keyCode===9||f.keyCode===27)&&this.$container.hasClass("open")){this.$button.click()}else{var g=b(this.$container).find("li:not(.divider):visible a");if(!g.length){return}var c=g.index(g.filter(":focus"));if(f.keyCode===38&&c>0){c--}else{if(f.keyCode===40&&c');var f=b(d).prop("selected")||false;var e=b("input",i);e.val(h);if(h===this.options.selectAllValue){e.parent().parent().addClass("multiselect-all")}b("label",i).append(" "+c);this.$ul.append(i);if(b(d).is(":disabled")){e.attr("disabled","disabled").prop("disabled",true).parents("li").addClass("disabled")}e.prop("checked",f);if(f&&this.options.selectedClass){e.parents("li").addClass(this.options.selectedClass)}},createDivider:function(d){var c=b(this.templates.divider);this.$ul.append(c)},createOptgroup:function(c){var e=b(c).prop("label");var d=b(this.templates.liGroup);b("label",d).text(e);this.$ul.append(d);b("option",c).each(b.proxy(function(f,g){this.createOptionValue(g)},this))},buildSelectAll:function(){var c=this.hasSelectAll();if(this.options.includeSelectAllOption&&this.options.multiple&&!c){this.$select.prepend('")}},buildFilter:function(){if(this.options.enableFiltering||this.options.enableCaseInsensitiveFiltering){var c=Math.max(this.options.enableFiltering,this.options.enableCaseInsensitiveFiltering);if(this.$select.find("option").length>=c){this.$filter=b(this.templates.filter);b("input",this.$filter).attr("placeholder",this.options.filterPlaceholder);this.$ul.prepend(this.$filter);this.$filter.val(this.query).on("click",function(d){d.stopPropagation()}).on("input keydown",b.proxy(function(d){clearTimeout(this.searchTimeout);this.searchTimeout=this.asyncFunction(b.proxy(function(){if(this.query!==d.target.value){this.query=d.target.value;b.each(b("li",this.$ul),b.proxy(function(f,g){var i=b("input",g).val();var j=b("label",g).text();if(i!==this.options.selectAllValue&&j){var h=false;var e="";if((this.options.filterBehavior==="text"||this.options.filterBehavior==="both")){e=j}if((this.options.filterBehavior==="value"||this.options.filterBehavior==="both")){e=i}if(this.options.enableCaseInsensitiveFiltering&&e.toLowerCase().indexOf(this.query.toLowerCase())>-1){h=true}else{if(e.indexOf(this.query)>-1){h=true}}if(h){b(g).show()}else{b(g).hide()}}},this))}},this),300,this)},this))}}},destroy:function(){this.$container.remove();this.$select.show()},refresh:function(){b("option",this.$select).each(b.proxy(function(c,d){var e=b("li input",this.$ul).filter(function(){return b(this).val()===b(d).val()});if(b(d).is(":selected")){e.prop("checked",true);if(this.options.selectedClass){e.parents("li").addClass(this.options.selectedClass)}}else{e.prop("checked",false);if(this.options.selectedClass){e.parents("li").removeClass(this.options.selectedClass)}}if(b(d).is(":disabled")){e.attr("disabled","disabled").prop("disabled",true).parents("li").addClass("disabled")}else{e.prop("disabled",false).parents("li").removeClass("disabled")}},this));this.updateButtonText();this.updateSelectAll()},select:function(g){if(g&&!b.isArray(g)){g=[g]}for(var c=0;c'+e.label+""});this.$select.html(d);this.rebuild()},enable:function(){this.$select.prop("disabled",false);this.$button.prop("disabled",false).removeClass("disabled")},disable:function(){this.$select.prop("disabled",true);this.$button.prop("disabled",true).addClass("disabled")},setOptions:function(c){this.options=this.mergeOptions(c)},mergeOptions:function(c){return b.extend({},this.defaults,c)},hasSelectAll:function(){return this.$select[0][0]?this.$select[0][0].value===this.options.selectAllValue:false},updateSelectAll:function(){if(this.hasSelectAll()){var c=this.getSelected();if(c.length===b("option",this.$select).length-1){this.select(this.options.selectAllValue)}else{this.deselect(this.options.selectAllValue)}}},updateButtonText:function(){var c=this.getSelected();b("button",this.$container).html(this.options.buttonText(c,this.$select));b("button",this.$container).attr("title",this.options.buttonTitle(c,this.$select))},getSelected:function(){return b('option[value!="'+this.options.selectAllValue+'"]:selected',this.$select).filter(function(){return b(this).prop("selected")})},getOptionByValue:function(c){return b("option",this.$select).filter(function(){return b(this).val()===c})},getInputByValue:function(c){return b("li input",this.$ul).filter(function(){return b(this).val()===c})},updateOriginalOptions:function(){this.originalOptions=this.$select.clone()[0].options},asyncFunction:function(f,e,c){var d=Array.prototype.slice.call(arguments,3);return setTimeout(function(){f.apply(c||window,d)},e)}};b.fn.multiselect=function(c,d){return this.each(function(){var f=b(this).data("multiselect");var e=typeof c==="object"&&c;if(!f){b(this).data("multiselect",(f=new a(this,e)))}if(typeof c==="string"){f[c](d)}})};b.fn.multiselect.Constructor=a;b(function(){b("select[data-role=multiselect]").multiselect()})}(window.jQuery);