You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6 lines
9.2 KiB
JavaScript
6 lines
9.2 KiB
JavaScript
2 months ago
|
/*
|
||
|
* MultiSelect v0.9.8
|
||
|
* Copyright (c) 2012 Louis Cun
|
||
|
*/
|
||
|
|
||
|
!function(a){"use strict";var b=function(b,c){this.options=c,this.$element=a(b),this.$container=a("<div/>",{"class":"ms-container"}),this.$selectableContainer=a("<div/>",{"class":"ms-selectable"}),this.$selectionContainer=a("<div/>",{"class":"ms-selection"}),this.$selectableUl=a("<ul/>",{"class":"ms-list",tabindex:"-1"}),this.$selectionUl=a("<ul/>",{"class":"ms-list",tabindex:"-1"}),this.scrollTo=0,this.sanitizeRegexp=new RegExp("\\W+","gi"),this.elemsSelector="li:visible:not(.ms-optgroup-label,.ms-optgroup-container,."+c.disabledClass+")"};b.prototype={constructor:b,init:function(){var b=this,c=this.$element;if(0===c.next(".ms-container").length){c.css({position:"absolute",left:"-9999px"}),c.attr("id",c.attr("id")?c.attr("id"):Math.ceil(1e3*Math.random())+"multiselect"),this.$container.attr("id","ms-"+c.attr("id")),c.find("option").each(function(){b.generateLisFromOption(this)}),this.$selectionUl.find(".ms-optgroup-label").hide(),b.options.selectableHeader&&b.$selectableContainer.append(b.options.selectableHeader),b.$selectableContainer.append(b.$selectableUl),b.options.selectableFooter&&b.$selectableContainer.append(b.options.selectableFooter),b.options.selectionHeader&&b.$selectionContainer.append(b.options.selectionHeader),b.$selectionContainer.append(b.$selectionUl),b.options.selectionFooter&&b.$selectionContainer.append(b.options.selectionFooter),b.$container.append(b.$selectableContainer),b.$container.append(b.$selectionContainer),c.after(b.$container),b.activeMouse(b.$selectableUl),b.activeKeyboard(b.$selectableUl);var d=b.options.dblClick?"dblclick":"click";b.$selectableUl.on(d,".ms-elem-selectable",function(){b.select(a(this).data("ms-value"))}),b.$selectionUl.on(d,".ms-elem-selection",function(){b.deselect(a(this).data("ms-value"))}),b.activeMouse(b.$selectionUl),b.activeKeyboard(b.$selectionUl),c.on("focus",function(){b.$selectableUl.focus()})}var e=c.find("option:selected").map(function(){return a(this).val()}).get();b.select(e,"init"),"function"==typeof b.options.afterInit&&b.options.afterInit.call(this,this.$container)},generateLisFromOption:function(b){for(var c=this,d=c.$element,e="",f=a(b),g=0;g<b.attributes.length;g++){var h=b.attributes[g];"value"!==h.name&&(e+=h.name+'="'+h.value+'" ')}var i=a("<li "+e+"><span>"+f.text()+"</span></li>"),j=i.clone(),k=f.val(),l=c.sanitize(k,c.sanitizeRegexp);i.data("ms-value",k).addClass("ms-elem-selectable").attr("id",l+"-selectable"),j.data("ms-value",k).addClass("ms-elem-selection").attr("id",l+"-selection").hide(),(f.prop("disabled")||d.prop("disabled"))&&(j.addClass(c.options.disabledClass),i.addClass(c.options.disabledClass));var m=f.parent("optgroup");if(m.length>0){var n=m.attr("label"),o=c.sanitize(n,c.sanitizeRegexp),p=c.$selectableUl.find("#optgroup-selectable-"+o),q=c.$selectionUl.find("#optgroup-selection-"+o);if(0===p.length){var r='<li class="ms-optgroup-container"></li>',s='<ul class="ms-optgroup"><li class="ms-optgroup-label"><span>'+n+"</span></li></ul>";p=a(r),q=a(r),p.attr("id","optgroup-selectable-"+o),q.attr("id","optgroup-selection-"+o),p.append(a(s)),q.append(a(s)),c.options.selectableOptgroup&&(p.find(".ms-optgroup-label").on("click",function(){var b=m.children(":not(:selected)").map(function(){return a(this).val()}).get();c.select(b)}),q.find(".ms-optgroup-label").on("click",function(){var b=m.children(":selected").map(function(){return a(this).val()}).get();c.deselect(b)})),c.$selectableUl.append(p),c.$selectionUl.append(q)}p.children().append(i),q.children().append(j)}else c.$selectableUl.append(i),c.$selectionUl.append(j)},activeKeyboard:function(b){var c=this;b.on("focus",function(){a(this).addClass("ms-focus")}).on("blur",function(){a(this).removeClass("ms-focus")}).on("keydown",function(d){switch(d.which){case 40:case 38:return d.preventDefault(),d.stopPropagation(),c.moveHighlight(a(this),38===d.which?-1:1),void 0;case 32:return d.preventDefault(),d.stopPropagation(),c.selectHighlighted(b),void 0;case 37:case 39:return d.preventDefault(),d.stopPropagation(),c.switchList(b),void 0}})},moveHighlight:function(a,b){var c=a.find(this.elems
|