-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathmultipicker.min.js
1 lines (1 loc) · 9.1 KB
/
multipicker.min.js
1
!function(e){var t=function(){this.options={activeClass:"active",valueSource:"index",prePopulate:null,disabled:null,cssOptions:{vertical:!1,quadratic:!1,size:"medium",picker:null,element:null,hover:null,selected:null}},this.type="inline",this.input=null,this.selector=null,this.isPressed=!1,this.lastElem="",this.mouseUpTimer,this.setEvendHandlers=function(){function e(e){var t=e.target;e.originalEvent.changedTouches&&e.originalEvent.changedTouches[0]&&(t=document.elementFromPoint(e.originalEvent.changedTouches[0].clientX,e.originalEvent.changedTouches[0].clientY)),i.isPressed&&i.lastElem!==t&&(i.hover(t),i.lastElem=t),e.preventDefault()}function t(e){i.isPressed=!1,i.mouseUpTimer=setTimeout(function(){i.isPressed=!0},100)}function s(e){i.isPressed=!1}var i=this;this.items.click(function(){i.select.call(this,i,!1)});var o=this.finishHover.bind(this);this.items.on("touchmove",e),this.items.on("touchend",o),this.selector.on("touchstart",t),this.selector.on("touchcancel",s),this.items.mousemove(e),this.items.mouseup(o),this.selector.mousedown(t),this.selector.mouseleave(s)},this.hover=function(t){e(t).hasClass("checklist")||this.select.call(e(t),this,!1)},this.finishHover=function(e){clearTimeout(this.mouseUpTimer),this.lastElem=null,this.isPressed=!1},this.select=function(s,i,o){var n;if(!e(this).attr("data-disabled")){if(n="index"===s.options.valueSource?e(this).index():"data-"===s.options.valueSource.substring(0,5)?e(this).attr(s.options.valueSource):"text"===s.options.valueSource?e(this).text():e(this).val(),s.options.isSingle)return s.clear(),e(this).siblings("."+s.options.activeClass).removeClass(),e(this).addClass(s.options.activeClass),s.addValue(this,n),void(s.options.onSelect&&"function"==typeof s.options.onSelect&&!i&&s.options.onSelect(this,n));if(void 0!==o&&!0===o||void 0===o&&e(this).hasClass(s.options.activeClass)){if(!e(this).hasClass(s.options.activeClass))return;e(this).removeClass(),s.removeValue(this,n),t.updateClasses(e(this),s.options.activeClass),s.options.onUnselect&&"function"==typeof s.options.onUnselect&&!i&&s.options.onUnselect(this,n)}else{if(e(this).hasClass(s.options.activeClass))return;e(this).addClass(s.options.activeClass),s.addValue(this,n),t.updateClasses(e(this),s.options.activeClass),s.options.onSelect&&"function"==typeof s.options.onSelect&&!i&&s.options.onSelect(this,n)}}},this.addValue=function(t,s){if("inline"===this.type){var i=this.input.val();i&&(i+=","),i+=s,this.input.val(i)}else this.selector.find("input[value='"+e(t).attr("data-value")+"']").attr("checked",!0)},this.removeValue=function(t,s){if("inline"===this.type){var i=this.input.val();i=i.replace(","+s,"").replace(s+",","").replace(s,""),this.input.val(i)}else this.selector.find("input[value='"+e(t).attr("data-value")+"']").attr("checked",!1)},this.getValue=function(t){if("inline"===this.type)return t(this.input.val());var s=[];return this.selector.find("input[checked='checked']").each(function(t,i){s.push(e(i).val())}),t(s)},this.clear=function(){"inline"===this.type?(this.input.val(""),this.selector.find(".active").removeClass()):(this.selector.find(".active").removeClass(),this.selector.find("input").attr("checked",!1))},this.prePopulate=function(){if(t.isArray(this.options.prePopulate)&&this.options.prePopulate.length)for(var s in this.options.prePopulate){var i=this.options.prePopulate[s],o=this.getElementSelector(i);e(o).index()<0?console.warn("Multipicker: prepopulated element doesn`t found `%s`",i):this.select.call(o,this,!0)}else{o=this.getElementSelector(this.options.prePopulate);e(o).index()<0?console.warn("Multipicker: prepopulated element doesn`t found`%s`",this.options.prePopulate):this.select.call(o,this,!0)}},this.disable=function(s,i){if(t.isArray(s)&&s.length)for(var o in s){var n=s[o],a=this.getElementSelector(n);e(a).index()<0?console.warn("Multipicker: prepopulated element doesn`t found `%s`",n):i?e(a).removeAttr("data-disabled"):e(a).attr("data-disabled",!0)}else{a=this.getElementSelector(s);e(a).index()<0?console.warn("Multipicker: disabled element doesn`t found`%s`",s):i?e(a).removeAttr("data-disabled"):e(a).attr("data-disabled",!0)}},this.getElementSelector=function(e){return"index"!==this.options.valueSource&&this.options.valueSource?"data-"===this.options.valueSource.substring(0,5)?this.selector.find(this.options.selector+"["+this.options.valueSource+"='"+e+"']"):"text"===this.options.valueSource?this.selector.find(this.options.selector+":contains('"+e+"')"):void 0:this.items.eq(e)}};t.isArray=function(e){if("[object Array]"===Object.prototype.toString.call(e))return!0},t.updateClasses=function(t,s){var i={item:t=e(t),next:t.next(),prev:t.prev(),nextNext:t.next().next(),prevPrev:t.prev().prev()};i.item.hasClass(s)?i.next.hasClass(s)&&i.prev.hasClass(s)?(i.nextNext.hasClass(s)?i.next.attr("class",s+" center-side"):i.next.attr("class",s+" right-side"),i.prevPrev.hasClass(s)?i.prev.attr("class",s+" center-side"):i.prev.attr("class",s+" left-side"),i.item.attr("class","active center-side")):i.next.hasClass(s)&&!i.prev.hasClass(s)?(i.nextNext.hasClass(s)?i.next.attr("class",s+" center-side"):i.next.attr("class",s+" right-side"),i.item.attr("class","active left-side")):!i.next.hasClass(s)&&i.prev.hasClass(s)&&(i.prevPrev.hasClass(s)?i.prev.attr("class",s+" center-side"):i.prev.attr("class",s+" left-side"),i.item.attr("class",s+" right-side")):(i.next.hasClass("right-side")&&i.next.attr("class",s),i.prev.hasClass("left-side")&&i.prev.attr("class",s),i.prev.hasClass("center-side")&&i.prev.attr("class",s+" right-side"),i.next.hasClass("center-side")&&i.next.attr("class",s+" left-side"))},t.generateStyles=function(t,s){var i="";if(s.picker){i+="#"+t+".checklist {";for(var o in s.picker)i+=o+":"+s.picker[o]+";";i+="}"}if(s.element){i+="#"+t+" > * {";for(var o in s.element)i+=o+":"+s.element[o]+";";i+="}"}if(s.selected){i+="#"+t+" > *.active {";for(var o in s.selected)i+=o+":"+s.selected[o]+";";i+="}"}if(s.hover){i+="#"+t+" > *:hover {";for(var o in s.hover)i+=o+":"+s.hover[o]+";";i+="}"}e("head").append("<style type='text/css'>"+i+"</style>")},t.API=function(e,s,i){if(~["select","unselect","enable","disable","clear","get"].indexOf(e))return(t.isArray(this)?this:[this]).forEach(function(o){if("function"==typeof s?i=s:t.isArray(s)||(s=[s]),"get"===e||"clear"==e||s)switch(e){case"select":s.forEach(function(e){var t=o.getElementSelector(e);t.length&&o.select.call(t,o,!1,!1)});break;case"unselect":s.forEach(function(e){var t=o.getElementSelector(e);t.length&&o.select.call(t,o,!1,!0)});break;case"enable":o.disable.call(o,s,!0);break;case"disable":o.disable.call(o,s,!1);break;case"clear":o.clear();break;case"get":o.getValue(i)}else console.warn("Empty enable/disable elements")}),this;console.warn("Method "+e+" doesn't exist")},e.fn.extend({multiPicker:function(s,i){if("string"!=typeof s){var o=[],n=e(this).length>1;return e(this).each(function(i,a){var l=new t;if(l.options=e.extend(l.options,s),l.selector=e(a),"checkbox"===l.options.selector||"radio"===l.options.selector?(l.type=l.options.selector,"radio"===l.type&&(l.options.isSingle=!0),l.selector.find("label").css("display","none"),l.options.disabled?t.isArray(l.options.disabled)||(l.options.disabled=[l.options.disabled]):l.options.disabled=[],e(l.selector).find("input").each(function(t,s){var i=e(s).val(),o=e("label[for='"+e(s).attr("id")+"']").text()||i;l.selector.append("<span data-value='"+i+"'>"+o+"</span>"),e(s).prop("disabled")&&l.options.disabled.push(i)}),l.items=l.selector.find("span"),l.options.valueSource="data-value",l.options.selector="span",l.options.cssOptions.vertical?l.selector.addClass("more-padded-t"):l.selector.addClass("more-padded-l")):(l.options.inputName=l.options.inputName||l.selector.attr("id"),"inline"===l.type&&(e("[name="+l.options.inputName+"]").length?l.input=e("[name="+l.options.inputName+"]"):(l.selector.after("<input type='hidden' name='"+l.options.inputName+"'>"),l.input=e("[name="+l.options.inputName+"]"))),l.items=l.selector.find(l.options.selector)),l.selector.addClass("checklist"),l.options.cssOptions.vertical&&l.selector.addClass("vertical"),l.options.cssOptions.size&&l.selector.addClass(l.options.cssOptions.size),l.options.cssOptions.quadratic&&l.selector.addClass("quadratic"),(l.options.cssOptions.picker||l.options.cssOptions.element||l.options.cssOptions.hover||l.options.cssOptions.selected)&&t.generateStyles(l.selector.attr("id"),l.options.cssOptions),l.options.prePopulate&&t.isArray(l.options.prePopulate)&&l.options.prePopulate.length>1&&l.options.isSingle)throw"Can not prePopulate more then 1 item, with `isSingle` true option";if(l.options.valueSource&&"index"===l.options.valueSource&&"text"===l.options.valueSource&&"data-"!==l.options.valueSource.substring(0,5))throw"Invalid value source";if("data-disabled"===l.options.valueSource)throw"`data-disabled` attribute is reserved, choose another name";(l.options.prePopulate||0===l.options.prePopulate)&&l.prePopulate(),(t.isArray(l.options.disabled)&&l.options.disabled.length||l.options.disabled&&!t.isArray(l.options.disabled)||0===l.options.disabled)&&l.disable(l.options.disabled,!1),l.selector.attr("ondragstart","return false"),l.setEvendHandlers(),l.options.onInit&&"function"==typeof l.options.onInit&&l.options.onInit(),n&&(l.multiPicker=t.API),o.push(l)}),o.multiPicker=t.API,o}}})}(jQuery);