forked from jakiestfu/Snap.js
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsnap.min.js
More file actions
executable file
·11 lines (11 loc) · 9.78 KB
/
snap.min.js
File metadata and controls
executable file
·11 lines (11 loc) · 9.78 KB
1
2
3
4
5
6
7
8
9
10
11
/*
* Snap.js
*
* Copyright 2013, Jacob Kelley - http://jakiestfu.com/
* Released under the MIT Licence
* http://opensource.org/licenses/MIT
*
* Github: http://github.com/jakiestfu/Snap.js/
* Version: 1.9.2
*/
(function(c,b){var a=a||function(j){var f={element:null,dragger:null,disable:"none",addBodyClasses:true,hyperextensible:true,resistance:0.5,flickThreshold:50,transitionSpeed:0.3,easing:"ease",maxPosition:266,minPosition:-266,tapToClose:true,touchToDrag:true,slideIntent:40,minDragDistance:5},e={simpleStates:{opening:null,towards:null,hyperExtending:null,halfway:null,flick:null,translation:{absolute:0,relative:0,sinceDirectionChange:0,percentage:0}}},d={},i=this,k={hasTouch:("ontouchstart" in b.documentElement||c.navigator.msPointerEnabled),eventType:function(n){var m={down:(k.hasTouch?"touchstart":"mousedown"),move:(k.hasTouch?"touchmove":"mousemove"),up:(k.hasTouch?"touchend":"mouseup"),out:(k.hasTouch?"touchcancel":"mouseout")};return m[n]},page:function(m,n){return(k.hasTouch&&n.touches.length&&n.touches[0])?n.touches[0]["page"+m]:n["page"+m]},klass:{has:function(n,m){return(n.className).indexOf(m)!==-1},add:function(n,m){if(!k.klass.has(n,m)&&f.addBodyClasses){n.className+=" "+m}},remove:function(n,m){if(f.addBodyClasses){n.className=(n.className).replace(m,"").replace(/^\s+|\s+$/g,"")}}},dispatchEvent:function(m){if(typeof d[m]==="function"){return d[m](i,e)}},vendor:function(){var n=b.createElement("div"),o="webkit Moz O ms".split(" "),m;for(m in o){if(typeof n.style[o[m]+"Transition"]!=="undefined"){return o[m]}}},transitionCallback:function(){return(e.vendor==="Moz"||e.vendor==="ms")?"transitionend":e.vendor+"TransitionEnd"},canTransform:function(){return typeof f.element.style[e.vendor+"Transform"]!=="undefined"},deepExtend:function(m,o){var n;for(n in o){if(o[n]&&o[n].constructor&&o[n].constructor===Object){m[n]=m[n]||{};k.deepExtend(m[n],o[n])}else{m[n]=o[n]}}return m},angleOfDrag:function(m,p){var o,n;n=Math.atan2(-(e.startDragY-p),(e.startDragX-m));if(n<0){n+=2*Math.PI}o=Math.floor(n*(180/Math.PI)-180);if(o<0&&o>-180){o=360-Math.abs(o)}return Math.abs(o)},events:{addEvent:function h(n,m,o){if(n.addEventListener){return n.addEventListener(m,o,false)}else{if(n.attachEvent){return n.attachEvent("on"+m,o)}}},removeEvent:function h(n,m,o){if(n.addEventListener){return n.removeEventListener(m,o,false)}else{if(n.attachEvent){return n.detachEvent("on"+m,o)}}},prevent:function(m){if(m.preventDefault){m.preventDefault()}else{m.returnValue=false}}},parentUntil:function(o,m){var n=typeof m==="string";while(o.parentNode){if(n&&o.getAttribute&&o.getAttribute(m)){return o}else{if(!n&&o===m){return o}}o=o.parentNode}return null}},g={translate:{get:{matrix:function(o){if(!k.canTransform()){return parseInt(f.element.style.left,10)}else{var n=c.getComputedStyle(f.element)[e.vendor+"Transform"].match(/\((.*)\)/),m=8;if(n){n=n[1].split(",");if(n.length===16){o+=m}return parseInt(n[o],10)}return 0}}},easeCallback:function(){f.element.style[e.vendor+"Transition"]="";e.translation=g.translate.get.matrix(4);e.easing=false;clearInterval(e.animatingInterval);if(e.easingTo===0){k.klass.remove(b.body,"snapjs-right");k.klass.remove(b.body,"snapjs-left")}k.dispatchEvent("animated");k.events.removeEvent(f.element,k.transitionCallback(),g.translate.easeCallback)},easeTo:function(m){if(!k.canTransform()){e.translation=m;g.translate.x(m)}else{e.easing=true;e.easingTo=m;f.element.style[e.vendor+"Transition"]="all "+f.transitionSpeed+"s "+f.easing;e.animatingInterval=setInterval(function(){k.dispatchEvent("animating")},1);k.events.addEvent(f.element,k.transitionCallback(),g.translate.easeCallback);g.translate.x(m)}if(m===0){f.element.style[e.vendor+"Transform"]=""}},x:function(o){if((f.disable==="left"&&o>0)||(f.disable==="right"&&o<0)){return}if(!f.hyperextensible){if(o===f.maxPosition||o>f.maxPosition){o=f.maxPosition}else{if(o===f.minPosition||o<f.minPosition){o=f.minPosition}}}o=parseInt(o,10);if(isNaN(o)){o=0}if(k.canTransform()){var m="translate3d("+o+"px, 0,0)";f.element.style[e.vendor+"Transform"]=m}else{f.element.style.width=(c.innerWidth||b.documentElement.clientWidth)+"px";f.element.style.left=o+"px";f.element.style.right=""}}},drag:{listen:function(){e.translation=0;e.easing=false;k.events.addEvent(f.element,k.eventType("down"),g.drag.startDrag);k.events.addEvent(f.element,k.eventType("move"),g.drag.dragging);k.events.addEvent(f.element,k.eventType("up"),g.drag.endDrag)},stopListening:function(){k.events.removeEvent(f.element,k.eventType("down"),g.drag.startDrag);k.events.removeEvent(f.element,k.eventType("move"),g.drag.dragging);k.events.removeEvent(f.element,k.eventType("up"),g.drag.endDrag)},startDrag:function(o){var n=o.target?o.target:o.srcElement,m=k.parentUntil(n,"data-snap-ignore");if(m){k.dispatchEvent("ignore");return}if(f.dragger){var p=k.parentUntil(n,f.dragger);if(!p&&(e.translation!==f.minPosition&&e.translation!==f.maxPosition)){return}}k.dispatchEvent("start");f.element.style[e.vendor+"Transition"]="";e.isDragging=true;e.hasIntent=null;e.intentChecked=false;e.startDragX=k.page("X",o);e.startDragY=k.page("Y",o);e.dragWatchers={current:0,last:0,hold:0,state:""};e.simpleStates={opening:null,towards:null,hyperExtending:null,halfway:null,flick:null,translation:{absolute:0,relative:0,sinceDirectionChange:0,percentage:0}}},dragging:function(t){if(e.isDragging&&f.touchToDrag){var w=k.page("X",t),v=k.page("Y",t),u=e.translation,p=g.translate.get.matrix(4),o=w-e.startDragX,q=p>0,r=o,x;if((e.intentChecked&&!e.hasIntent)){return}if(f.addBodyClasses){if((p)>0){k.klass.add(b.body,"snapjs-left");k.klass.remove(b.body,"snapjs-right")}else{if((p)<0){k.klass.add(b.body,"snapjs-right");k.klass.remove(b.body,"snapjs-left")}}}if(e.hasIntent===false||e.hasIntent===null){var n=k.angleOfDrag(w,v),m=(n>=0&&n<=f.slideIntent)||(n<=360&&n>(360-f.slideIntent)),s=(n>=180&&n<=(180+f.slideIntent))||(n<=180&&n>=(180-f.slideIntent));if(!s&&!m){e.hasIntent=false}else{e.hasIntent=true}e.intentChecked=true}if((f.minDragDistance>=Math.abs(w-e.startDragX))||(e.hasIntent===false)){return}k.events.prevent(t);k.dispatchEvent("drag");e.dragWatchers.current=w;if(e.dragWatchers.last>w){if(e.dragWatchers.state!=="left"){e.dragWatchers.state="left";e.dragWatchers.hold=w}e.dragWatchers.last=w}else{if(e.dragWatchers.last<w){if(e.dragWatchers.state!=="right"){e.dragWatchers.state="right";e.dragWatchers.hold=w}e.dragWatchers.last=w}}if(q){if(f.maxPosition<p){x=(p-f.maxPosition)*f.resistance;r=o-x}e.simpleStates={opening:"left",towards:e.dragWatchers.state,hyperExtending:f.maxPosition<p,halfway:p>(f.maxPosition/2),flick:Math.abs(e.dragWatchers.current-e.dragWatchers.hold)>f.flickThreshold,translation:{absolute:p,relative:o,sinceDirectionChange:(e.dragWatchers.current-e.dragWatchers.hold),percentage:(p/f.maxPosition)*100}}}else{if(f.minPosition>p){x=(p-f.minPosition)*f.resistance;r=o-x}e.simpleStates={opening:"right",towards:e.dragWatchers.state,hyperExtending:f.minPosition>p,halfway:p<(f.minPosition/2),flick:Math.abs(e.dragWatchers.current-e.dragWatchers.hold)>f.flickThreshold,translation:{absolute:p,relative:o,sinceDirectionChange:(e.dragWatchers.current-e.dragWatchers.hold),percentage:(p/f.minPosition)*100}}}g.translate.x(r+u)}},endDrag:function(n){if(e.isDragging){k.dispatchEvent("end");var m=g.translate.get.matrix(4);if(e.dragWatchers.current===0&&m!==0&&f.tapToClose){k.dispatchEvent("close");k.events.prevent(n);g.translate.easeTo(0);e.isDragging=false;e.startDragX=0;return}if(e.simpleStates.opening==="left"){if((e.simpleStates.halfway||e.simpleStates.hyperExtending||e.simpleStates.flick)){if(e.simpleStates.flick&&e.simpleStates.towards==="left"){g.translate.easeTo(0)}else{if((e.simpleStates.flick&&e.simpleStates.towards==="right")||(e.simpleStates.halfway||e.simpleStates.hyperExtending)){g.translate.easeTo(f.maxPosition)}}}else{g.translate.easeTo(0)}}else{if(e.simpleStates.opening==="right"){if((e.simpleStates.halfway||e.simpleStates.hyperExtending||e.simpleStates.flick)){if(e.simpleStates.flick&&e.simpleStates.towards==="right"){g.translate.easeTo(0)}else{if((e.simpleStates.flick&&e.simpleStates.towards==="left")||(e.simpleStates.halfway||e.simpleStates.hyperExtending)){g.translate.easeTo(f.minPosition)}}}else{g.translate.easeTo(0)}}}e.isDragging=false;e.startDragX=k.page("X",n)}}}},l=function(m){if(m.element){k.deepExtend(f,m);e.vendor=k.vendor();g.drag.listen()}};this.open=function(m){k.dispatchEvent("open");k.klass.remove(b.body,"snapjs-expand-left");k.klass.remove(b.body,"snapjs-expand-right");if(m==="left"){e.simpleStates.opening="left";e.simpleStates.towards="right";k.klass.add(b.body,"snapjs-left");k.klass.remove(b.body,"snapjs-right");g.translate.easeTo(f.maxPosition)}else{if(m==="right"){e.simpleStates.opening="right";e.simpleStates.towards="left";k.klass.remove(b.body,"snapjs-left");k.klass.add(b.body,"snapjs-right");g.translate.easeTo(f.minPosition)}}};this.close=function(){k.dispatchEvent("close");g.translate.easeTo(0)};this.expand=function(m){var n=c.innerWidth||b.documentElement.clientWidth;if(m==="left"){k.dispatchEvent("expandLeft");k.klass.add(b.body,"snapjs-expand-left");k.klass.remove(b.body,"snapjs-expand-right")}else{k.dispatchEvent("expandRight");k.klass.add(b.body,"snapjs-expand-right");k.klass.remove(b.body,"snapjs-expand-left");n*=-1}g.translate.easeTo(n)};this.on=function(m,n){d[m]=n;return this};this.off=function(m){if(d[m]){d[m]=false}};this.enable=function(){k.dispatchEvent("enable");g.drag.listen()};this.disable=function(){k.dispatchEvent("disable");g.drag.stopListening()};this.settings=function(m){k.deepExtend(f,m)};this.state=function(){var m,n=g.translate.get.matrix(4);if(n===f.maxPosition){m="left"}else{if(n===f.minPosition){m="right"}else{m="closed"}}return{state:m,info:e.simpleStates}};l(j)};if((typeof module!=="undefined")&&module.exports){module.exports=a}if(typeof ender==="undefined"){this.Snap=a}if((typeof define==="function")&&define.amd){define("snap",[],function(){return a})}}).call(this,window,document);