switchery.min.js 19 KB

1
  1. (function(){function a(b){var c=a.modules[b];if(!c){throw new Error('failed to require "'+b+'"')}if(!("exports" in c)&&typeof c.definition==="function"){c.client=c.component=true;c.definition.call(this,c.exports={},c);delete c.definition}return c.exports}a.loader="component";a.helper={};a.helper.semVerSort=function(j,h){var c=j.version.split(".");var f=h.version.split(".");for(var e=0;e<c.length;++e){var d=parseInt(c[e],10);var l=parseInt(f[e],10);if(d===l){var k=c[e].substr((""+d).length);var g=f[e].substr((""+l).length);if(k===""&&g!==""){return 1}if(k!==""&&g===""){return -1}if(k!==""&&g!==""){return k>g?1:-1}continue}else{if(d>l){return 1}else{return -1}}}return 0};a.latest=function(e,n){function h(i){throw new Error('failed to find latest module of "'+i+'"')}var d=/(.*)~(.*)@v?(\d+\.\d+\.\d+[^\/]*)$/;var o=/(.*)~(.*)/;if(!o.test(e)){h(e)}var j=Object.keys(a.modules);var l=[];var g=[];for(var k=0;k<j.length;k++){var c=j[k];if(new RegExp(e+"@").test(c)){var m=c.substr(e.length+1);var b=d.exec(c);if(b!=null){l.push({version:m,name:c})}else{g.push({version:m,name:c})}}}if(l.concat(g).length===0){h(e)}if(l.length>0){var f=l.sort(a.helper.semVerSort).pop().name;if(n===true){return f}return a(f)}var f=g.sort(function(p,i){return p.name>i.name})[0].name;if(n===true){return f}return a(f)};a.modules={};a.register=function(b,c){a.modules[b]={definition:c}};a.define=function(c,b){a.modules[c]={exports:b}};a.register("abpetkov~transitionize@0.0.3",function(b,c){c.exports=d;function d(e,f){if(!(this instanceof d)){return new d(e,f)}this.element=e;this.props=f||{};this.init()}d.prototype.isSafari=function(){return(/Safari/).test(navigator.userAgent)&&(/Apple Computer/).test(navigator.vendor)};d.prototype.init=function(){var f=[];for(var e in this.props){f.push(e+" "+this.props[e])}this.element.style.transition=f.join(", ");if(this.isSafari()){this.element.style.webkitTransition=f.join(", ")}}});a.register("ftlabs~fastclick@v0.6.11",function(b,c){function d(f){var g,e=this;this.trackingClick=false;this.trackingClickStart=0;this.targetElement=null;this.touchStartX=0;this.touchStartY=0;this.lastTouchIdentifier=0;this.touchBoundary=10;this.layer=f;if(!f||!f.nodeType){throw new TypeError("Layer must be a document node")}this.onClick=function(){return d.prototype.onClick.apply(e,arguments)};this.onMouse=function(){return d.prototype.onMouse.apply(e,arguments)};this.onTouchStart=function(){return d.prototype.onTouchStart.apply(e,arguments)};this.onTouchMove=function(){return d.prototype.onTouchMove.apply(e,arguments)};this.onTouchEnd=function(){return d.prototype.onTouchEnd.apply(e,arguments)};this.onTouchCancel=function(){return d.prototype.onTouchCancel.apply(e,arguments)};if(d.notNeeded(f)){return}if(this.deviceIsAndroid){f.addEventListener("mouseover",this.onMouse,true);f.addEventListener("mousedown",this.onMouse,true);f.addEventListener("mouseup",this.onMouse,true)}f.addEventListener("click",this.onClick,true);f.addEventListener("touchstart",this.onTouchStart,false);f.addEventListener("touchmove",this.onTouchMove,false);f.addEventListener("touchend",this.onTouchEnd,false);f.addEventListener("touchcancel",this.onTouchCancel,false);if(!Event.prototype.stopImmediatePropagation){f.removeEventListener=function(i,k,h){var j=Node.prototype.removeEventListener;if(i==="click"){j.call(f,i,k.hijacked||k,h)}else{j.call(f,i,k,h)}};f.addEventListener=function(j,k,i){var h=Node.prototype.addEventListener;if(j==="click"){h.call(f,j,k.hijacked||(k.hijacked=function(l){if(!l.propagationStopped){k(l)}}),i)}else{h.call(f,j,k,i)}}}if(typeof f.onclick==="function"){g=f.onclick;f.addEventListener("click",function(h){g(h)},false);f.onclick=null}}d.prototype.deviceIsAndroid=navigator.userAgent.indexOf("Android")>0;d.prototype.deviceIsIOS=/iP(ad|hone|od)/.test(navigator.userAgent);d.prototype.deviceIsIOS4=d.prototype.deviceIsIOS&&(/OS 4_\d(_\d)?/).test(navigator.userAgent);d.prototype.deviceIsIOSWithBadTarget=d.prototype.deviceIsIOS&&(/OS ([6-9]|\d{2})_\d/).test(navigator.userAgent);d.prototype.needsClick=function(e){switch(e.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(e.disabled){return true}break;case"input":if((this.deviceIsIOS&&e.type==="file")||e.disabled){return true}break;case"label":case"video":return true}return(/\bneedsclick\b/).test(e.className)};d.prototype.needsFocus=function(e){switch(e.nodeName.toLowerCase()){case"textarea":return true;case"select":return !this.deviceIsAndroid;case"input":switch(e.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return false}return !e.disabled&&!e.readOnly;default:return(/\bneedsfocus\b/).test(e.className)}};d.prototype.sendClick=function(f,g){var e,h;if(document.activeElement&&document.activeElement!==f){document.activeElement.blur()}h=g.changedTouches[0];e=document.createEvent("MouseEvents");e.initMouseEvent(this.determineEventType(f),true,true,window,1,h.screenX,h.screenY,h.clientX,h.clientY,false,false,false,false,0,null);e.forwardedTouchEvent=true;f.dispatchEvent(e)};d.prototype.determineEventType=function(e){if(this.deviceIsAndroid&&e.tagName.toLowerCase()==="select"){return"mousedown"}return"click"};d.prototype.focus=function(e){var f;if(this.deviceIsIOS&&e.setSelectionRange&&e.type.indexOf("date")!==0&&e.type!=="time"){f=e.value.length;e.setSelectionRange(f,f)}else{e.focus()}};d.prototype.updateScrollParent=function(f){var g,e;g=f.fastClickScrollParent;if(!g||!g.contains(f)){e=f;do{if(e.scrollHeight>e.offsetHeight){g=e;f.fastClickScrollParent=e;break}e=e.parentElement}while(e)}if(g){g.fastClickLastScrollTop=g.scrollTop}};d.prototype.getTargetElementFromEventTarget=function(e){if(e.nodeType===Node.TEXT_NODE){return e.parentNode}return e};d.prototype.onTouchStart=function(g){var e,h,f;if(g.targetTouches.length>1){return true}e=this.getTargetElementFromEventTarget(g.target);h=g.targetTouches[0];if(this.deviceIsIOS){f=window.getSelection();if(f.rangeCount&&!f.isCollapsed){return true}if(!this.deviceIsIOS4){if(h.identifier===this.lastTouchIdentifier){g.preventDefault();return false}this.lastTouchIdentifier=h.identifier;this.updateScrollParent(e)}}this.trackingClick=true;this.trackingClickStart=g.timeStamp;this.targetElement=e;this.touchStartX=h.pageX;this.touchStartY=h.pageY;if((g.timeStamp-this.lastClickTime)<200){g.preventDefault()}return true};d.prototype.touchHasMoved=function(e){var g=e.changedTouches[0],f=this.touchBoundary;if(Math.abs(g.pageX-this.touchStartX)>f||Math.abs(g.pageY-this.touchStartY)>f){return true}return false};d.prototype.onTouchMove=function(e){if(!this.trackingClick){return true}if(this.targetElement!==this.getTargetElementFromEventTarget(e.target)||this.touchHasMoved(e)){this.trackingClick=false;this.targetElement=null}return true};d.prototype.findControl=function(e){if(e.control!==undefined){return e.control}if(e.htmlFor){return document.getElementById(e.htmlFor)}return e.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")};d.prototype.onTouchEnd=function(g){var i,h,f,k,j,e=this.targetElement;if(!this.trackingClick){return true}if((g.timeStamp-this.lastClickTime)<200){this.cancelNextClick=true;return true}this.cancelNextClick=false;this.lastClickTime=g.timeStamp;h=this.trackingClickStart;this.trackingClick=false;this.trackingClickStart=0;if(this.deviceIsIOSWithBadTarget){j=g.changedTouches[0];e=document.elementFromPoint(j.pageX-window.pageXOffset,j.pageY-window.pageYOffset)||e;e.fastClickScrollParent=this.targetElement.fastClickScrollParent}f=e.tagName.toLowerCase();if(f==="label"){i=this.findControl(e);if(i){this.focus(e);if(this.deviceIsAndroid){return false}e=i}}else{if(this.needsFocus(e)){if((g.timeStamp-h)>100||(this.deviceIsIOS&&window.top!==window&&f==="input")){this.targetElement=null;return false}this.focus(e);if(!this.deviceIsIOS4||f!=="select"){this.targetElement=null;g.preventDefault()}return false}}if(this.deviceIsIOS&&!this.deviceIsIOS4){k=e.fastClickScrollParent;if(k&&k.fastClickLastScrollTop!==k.scrollTop){return true}}if(!this.needsClick(e)){g.preventDefault();this.sendClick(e,g)}return false};d.prototype.onTouchCancel=function(){this.trackingClick=false;this.targetElement=null};d.prototype.onMouse=function(e){if(!this.targetElement){return true}if(e.forwardedTouchEvent){return true}if(!e.cancelable){return true}if(!this.needsClick(this.targetElement)||this.cancelNextClick){if(e.stopImmediatePropagation){e.stopImmediatePropagation()}else{e.propagationStopped=true}e.stopPropagation();e.preventDefault();return false}return true};d.prototype.onClick=function(e){var f;if(this.trackingClick){this.targetElement=null;this.trackingClick=false;return true}if(e.target.type==="submit"&&e.detail===0){return true}f=this.onMouse(e);if(!f){this.targetElement=null}return f};d.prototype.destroy=function(){var e=this.layer;if(this.deviceIsAndroid){e.removeEventListener("mouseover",this.onMouse,true);e.removeEventListener("mousedown",this.onMouse,true);e.removeEventListener("mouseup",this.onMouse,true)}e.removeEventListener("click",this.onClick,true);e.removeEventListener("touchstart",this.onTouchStart,false);e.removeEventListener("touchmove",this.onTouchMove,false);e.removeEventListener("touchend",this.onTouchEnd,false);e.removeEventListener("touchcancel",this.onTouchCancel,false)};d.notNeeded=function(f){var e;var g;if(typeof window.ontouchstart==="undefined"){return true}g=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1];if(g){if(d.prototype.deviceIsAndroid){e=document.querySelector("meta[name=viewport]");if(e){if(e.content.indexOf("user-scalable=no")!==-1){return true}if(g>31&&window.innerWidth<=window.screen.width){return true}}}else{return true}}if(f.style.msTouchAction==="none"){return true}return false};d.attach=function(e){return new d(e)};if(typeof define!=="undefined"&&define.amd){define(function(){return d})}else{if(typeof c!=="undefined"&&c.exports){c.exports=d.attach;c.exports.FastClick=d}else{window.FastClick=d}}});a.register("component~indexof@0.0.3",function(b,c){c.exports=function(d,f){if(d.indexOf){return d.indexOf(f)}for(var e=0;e<d.length;++e){if(d[e]===f){return e}}return -1}});a.register("component~classes@1.2.1",function(b,d){var c=a("component~indexof@0.0.3");var e=/\s+/;var f=Object.prototype.toString;d.exports=function(h){return new g(h)};function g(h){if(!h){throw new Error("A DOM element reference is required")}this.el=h;this.list=h.classList}g.prototype.add=function(j){if(this.list){this.list.add(j);return this}var h=this.array();var k=c(h,j);if(!~k){h.push(j)}this.el.className=h.join(" ");return this};g.prototype.remove=function(j){if("[object RegExp]"==f.call(j)){return this.removeMatching(j)}if(this.list){this.list.remove(j);return this}var h=this.array();var k=c(h,j);if(~k){h.splice(k,1)}this.el.className=h.join(" ");return this};g.prototype.removeMatching=function(k){var h=this.array();for(var j=0;j<h.length;j++){if(k.test(h[j])){this.remove(h[j])}}return this};g.prototype.toggle=function(h,i){if(this.list){if("undefined"!==typeof i){if(i!==this.list.toggle(h,i)){this.list.toggle(h)}}else{this.list.toggle(h)}return this}if("undefined"!==typeof i){if(!i){this.remove(h)}else{this.add(h)}}else{if(this.has(h)){this.remove(h)}else{this.add(h)}}return this};g.prototype.array=function(){var i=this.el.className.replace(/^\s+|\s+$/g,"");var h=i.split(e);if(""===h[0]){h.shift()}return h};g.prototype.has=g.prototype.contains=function(h){return this.list?this.list.contains(h):!!~c(this.array(),h)}});a.register("component~event@0.1.4",function(b,c){var f=window.addEventListener?"addEventListener":"attachEvent",d=window.removeEventListener?"removeEventListener":"detachEvent",e=f!=="addEventListener"?"on":"";b.bind=function(j,i,h,g){j[f](e+i,h,g||false);return h};b.unbind=function(j,i,h,g){j[d](e+i,h,g||false);return h}});a.register("component~query@0.0.3",function(b,d){function c(e,f){return f.querySelector(e)}b=d.exports=function(e,f){f=f||document;return c(e,f)};b.all=function(e,f){f=f||document;return f.querySelectorAll(e)};b.engine=function(e){if(!e.one){throw new Error(".one callback required")}if(!e.all){throw new Error(".all callback required")}c=e.one;b.all=e.all;return b}});a.register("component~matches-selector@0.1.5",function(b,d){var f=a("component~query@0.0.3");var e=Element.prototype;var g=e.matches||e.webkitMatchesSelector||e.mozMatchesSelector||e.msMatchesSelector||e.oMatchesSelector;d.exports=c;function c(l,h){if(!l||l.nodeType!==1){return false}if(g){return g.call(l,h)}var j=f.all(h,l.parentNode);for(var k=0;k<j.length;++k){if(j[k]==l){return true}}return false}});a.register("component~closest@0.1.4",function(b,c){var d=a("component~matches-selector@0.1.5");c.exports=function(h,f,e,g){h=e?{parentNode:h}:h;g=g||document;while((h=h.parentNode)&&h!==document){if(d(h,f)){return h}if(h===g){return}}}});a.register("component~delegate@0.2.3",function(b,c){var e=a("component~closest@0.1.4"),d=a("component~event@0.1.4");b.bind=function(j,f,i,h,g){return d.bind(j,i,function(l){var k=l.target||l.srcElement;l.delegateTarget=e(k,f,true,j);if(l.delegateTarget){h.call(j,l)}},g)};b.unbind=function(i,h,g,f){d.unbind(i,h,g,f)}});a.register("component~events@1.0.9",function(c,e){var d=a("component~event@0.1.4");var f=a("component~delegate@0.2.3");e.exports=b;function b(h,i){if(!(this instanceof b)){return new b(h,i)}if(!h){throw new Error("element required")}if(!i){throw new Error("object required")}this.el=h;this.obj=i;this._events={}}b.prototype.sub=function(i,j,h){this._events[i]=this._events[i]||{};this._events[i][j]=h};b.prototype.bind=function(l,o){var n=g(l);var k=this.el;var m=this.obj;var j=n.name;var o=o||"on"+j;var i=[].slice.call(arguments,2);function h(){var p=[].slice.call(arguments).concat(i);m[o].apply(m,p)}if(n.selector){h=f.bind(k,n.selector,j,h)}else{d.bind(k,j,h)}this.sub(j,o,h);return h};b.prototype.unbind=function(i,k){if(0==arguments.length){return this.unbindAll()}if(1==arguments.length){return this.unbindAllOf(i)}var j=this._events[i];if(!j){return}var h=j[k];if(!h){return}d.unbind(this.el,i,h)};b.prototype.unbindAll=function(){for(var h in this._events){this.unbindAllOf(h)}};b.prototype.unbindAllOf=function(h){var j=this._events[h];if(!j){return}for(var i in j){this.unbind(h,i)}};function g(h){var i=h.split(/ +/);return{name:i.shift(),selector:i.join(" ")}}});a.register("switchery",function(d,g){var c=a("abpetkov~transitionize@0.0.3"),b=a("ftlabs~fastclick@v0.6.11"),f=a("component~classes@1.2.1"),e=a("component~events@1.0.9");g.exports=i;var h={color:"#64bd63",secondaryColor:"#dfdfdf",jackColor:"#fff",jackSecondaryColor:null,className:"switchery",disabled:false,disabledOpacity:0.5,speed:"0.4s",size:"default"};function i(l,j){if(!(this instanceof i)){return new i(l,j)}this.element=l;this.options=j||{};for(var k in h){if(this.options[k]==null){this.options[k]=h[k]}}if(this.element!=null&&this.element.type=="checkbox"){this.init()}if(this.isDisabled()===true){this.disable()}}i.prototype.hide=function(){this.element.style.display="none"};i.prototype.show=function(){var j=this.create();this.insertAfter(this.element,j)};i.prototype.create=function(){this.switcher=document.createElement("span");this.jack=document.createElement("small");this.switcher.appendChild(this.jack);this.switcher.className=this.options.className;this.events=e(this.switcher,this);return this.switcher};i.prototype.insertAfter=function(j,k){j.parentNode.insertBefore(k,j.nextSibling)};i.prototype.setPosition=function(k){var m=this.isChecked(),l=this.switcher,j=this.jack;if(k&&m){m=false}else{if(k&&!m){m=true}}if(m===true){this.element.checked=true;j.style.left=$(l).width()-$(j).width()+"px";if(this.options.color){this.colorize()}this.setSpeed()}else{j.style.left=0;this.element.checked=false;this.switcher.style.boxShadow="inset 0 0 0 0 "+this.options.secondaryColor;this.switcher.style.borderColor=this.options.secondaryColor;this.switcher.style.backgroundColor=(this.options.secondaryColor!==h.secondaryColor)?this.options.secondaryColor:"#fff";this.jack.style.backgroundColor=(this.options.jackSecondaryColor!==this.options.jackColor)?this.options.jackSecondaryColor:this.options.jackColor;this.setSpeed()}};i.prototype.setSpeed=function(){var k={},j={"background-color":this.options.speed,left:this.options.speed.replace(/[a-z]/,"")/2+"s"};if(this.isChecked()){k={border:this.options.speed,"box-shadow":this.options.speed,"background-color":this.options.speed.replace(/[a-z]/,"")*3+"s"}}else{k={border:this.options.speed,"box-shadow":this.options.speed}}c(this.switcher,k);c(this.jack,j)};i.prototype.setSize=function(){var k="switchery-small",l="switchery-default",j="switchery-large";switch(this.options.size){case"small":f(this.switcher).add(k);break;case"large":f(this.switcher).add(j);break;default:f(this.switcher).add(l);break}};i.prototype.colorize=function(){var j=this.switcher.offsetHeight/2;this.switcher.style.backgroundColor=this.options.color;this.switcher.style.borderColor=this.options.color;this.switcher.style.boxShadow="inset 0 0 0 "+j+"px "+this.options.color;this.jack.style.backgroundColor=this.options.jackColor};i.prototype.handleOnchange=function(k){if(document.dispatchEvent){var j=document.createEvent("HTMLEvents");j.initEvent("change",true,true);this.element.dispatchEvent(j)}else{this.element.fireEvent("onchange")}};i.prototype.handleChange=function(){var j=this,k=this.element;if(k.addEventListener){k.addEventListener("change",function(){j.setPosition()})}else{k.attachEvent("onchange",function(){j.setPosition()})}};i.prototype.handleClick=function(){var j=this.switcher;b(j);this.events.bind("click","bindClick")};i.prototype.bindClick=function(){var k=this.element.parentNode.tagName.toLowerCase(),j=(k==="label")?false:true;this.setPosition(j);this.handleOnchange(this.element.checked)};i.prototype.markAsSwitched=function(){this.element.setAttribute("data-switchery",true)};i.prototype.markedAsSwitched=function(){return this.element.getAttribute("data-switchery")};i.prototype.init=function(){this.hide();this.show();this.setSize();this.setPosition();this.markAsSwitched();this.handleChange();this.handleClick()};i.prototype.isChecked=function(){return this.element.checked};i.prototype.isDisabled=function(){return this.options.disabled||this.element.disabled||this.element.readOnly};i.prototype.destroy=function(){this.events.unbind()};i.prototype.enable=function(){if(this.options.disabled){this.options.disabled=false}if(this.element.disabled){this.element.disabled=false}if(this.element.readOnly){this.element.readOnly=false}this.switcher.style.opacity=1;this.events.bind("click","bindClick")};i.prototype.disable=function(){if(!this.options.disabled){this.options.disabled=true}if(!this.element.disabled){this.element.disabled=true}if(!this.element.readOnly){this.element.readOnly=true}this.switcher.style.opacity=this.options.disabledOpacity;this.destroy()}});if(typeof exports=="object"){module.exports=a("switchery")}else{if(typeof define=="function"&&define.amd){define("Switchery",[],function(){return a("switchery")})}else{(this||window)["Switchery"]=a("switchery")}}})();