forked from acolangelo/jPanelMenu
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjquery.jPanelMenu-raywalker.min.js
More file actions
2 lines (2 loc) · 10 KB
/
Copy pathjquery.jPanelMenu-raywalker.min.js
File metadata and controls
2 lines (2 loc) · 10 KB
1
2
/** jPanelMenu-raywalker - 1.3.1 - 2014-03-24 - MIT*/
!function(a,b){a.jPanelMenu=function(c){var d={options:a.extend({menu:"#menu",trigger:".menu-trigger",excludedPanelContent:"style, script",keepEventHandlers:!1,direction:"left",openPosition:"250px",animated:!0,closeOnContentClick:!0,keyboardShortcuts:[{code:27,open:!1,close:!0},{code:37,open:!1,close:!0},{code:39,open:!0,close:!0},{code:77,open:!0,close:!0}],duration:150,openDuration:c.duration||150,closeDuration:c.duration||150,easing:"ease-in-out",openEasing:c.easing||"ease-in-out",closeEasing:c.easing||"ease-in-out",before:function(){},beforeOpen:function(){},beforeClose:function(){},after:function(){},afterOpen:function(){},afterClose:function(){},beforeOn:function(){},afterOn:function(){},beforeOff:function(){},afterOff:function(){}},c||{}),settings:{transitionsSupported:"WebkitTransition"in b.body.style||"MozTransition"in b.body.style||"msTransition"in b.body.style||"OTransition"in b.body.style||"Transition"in b.body.style,shiftFixedChildren:!1,panelPosition:"relative",positionUnits:"px"},menu:"#jPanelMenu-menu",panel:".jPanelMenu-panel",fixedChildren:[],timeouts:{},clearTimeouts:function(){clearTimeout(d.timeouts.open),clearTimeout(d.timeouts.afterOpen),clearTimeout(d.timeouts.afterClose)},setPositionUnits:function(){var a=!1,b=["%","px","em"];for(var c in b){var e=b[c];d.options.openPosition.toString().substr(-e.length)===e&&(a=!0,d.settings.positionUnits=e)}a||(d.options.openPosition=parseInt(d.options.openPosition)+d.settings.positionUnits)},checkFixedChildren:function(){d.disableTransitions();var b={position:a(d.panel).css("position")};if(b[d.options.direction]="auto"===a(d.panel).css(d.options.direction)?0:a(d.panel).css(d.options.direction),a(d.panel).find("> *").each(function(){"fixed"===a(this).css("position")&&"auto"===a(this).css(d.options.direction)&&d.fixedChildren.push(this)}),d.fixedChildren.length>0){var c={position:"relative"};c[d.options.direction]="1px",d.setPanelStyle(c),0===parseInt(a(d.fixedChildren[0]).offset().left)&&(d.settings.shiftFixedChildren=!0)}d.setPanelStyle(b)},setjPanelMenuStyles:function(){var b="#fff",c=a("html").css("background-color"),e=a("body").css("background-color");b="transparent"!==e&&"rgba(0, 0, 0, 0)"!==e?e:"transparent"!==c&&"rgba(0, 0, 0, 0)"!==c?c:"#fff",0===a("#jPanelMenu-style-master").length&&a("body").append('<style id="jPanelMenu-style-master">body{width:100%}.jPanelMenu,body{overflow-x:hidden}#jPanelMenu-menu{display:block;position:fixed;top:0;'+d.options.direction+":0;height:100%;z-index:-1;overflow-x:hidden;overflow-y:scroll;-webkit-overflow-scrolling:touch}.jPanelMenu-panel{position:static;"+d.options.direction+":0;top:0;z-index:2;width:100%;min-height:100%;background:"+b+"}</style>")},setMenuState:function(b){var c=b?"open":"closed";a("body").attr("data-menu-position",c)},getMenuState:function(){return a("body").attr("data-menu-position")},menuIsOpen:function(){return"open"===d.getMenuState()?!0:!1},setMenuStyle:function(b){a(d.menu).css(b)},setPanelStyle:function(b){a(d.panel).css(b)},showMenu:function(){d.setMenuStyle({display:"block"}),d.setMenuStyle({"z-index":"1"})},hideMenu:function(){d.setMenuStyle({"z-index":"-1"}),d.setMenuStyle({display:"none"})},enableTransitions:function(b,c){var e=b/1e3,f=d.getCSSEasingFunction(c);d.disableTransitions(),a("body").append('<style id="jPanelMenu-style-transitions">.jPanelMenu-panel{-webkit-transition: all '+e+"s "+f+"; -moz-transition: all "+e+"s "+f+"; -o-transition: all "+e+"s "+f+"; transition: all "+e+"s "+f+";}</style>")},disableTransitions:function(){a("#jPanelMenu-style-transitions").remove()},enableFixedTransitions:function(b,c,e,f){var g=e/1e3,h=d.getCSSEasingFunction(f);d.disableFixedTransitions(c),a("body").append('<style id="jPanelMenu-style-fixed-'+c+'">'+b+"{-webkit-transition: all "+g+"s "+h+"; -moz-transition: all "+g+"s "+h+"; -o-transition: all "+g+"s "+h+"; transition: all "+g+"s "+h+";}</style>")},disableFixedTransitions:function(b){a("#jPanelMenu-style-fixed-"+b).remove()},getCSSEasingFunction:function(a){switch(a){case"linear":return a;case"ease":return a;case"ease-in":return a;case"ease-out":return a;case"ease-in-out":return a;default:return"ease-in-out"}},getJSEasingFunction:function(a){switch(a){case"linear":return a;default:return"swing"}},openMenu:function(b){("undefined"==typeof b||null===b)&&(b=d.options.animated),d.clearTimeouts(),d.options.before(),d.options.beforeOpen(),d.setMenuState(!0),d.setPanelStyle({position:"relative"}),d.showMenu();var c={none:b?!1:!0,transitions:b&&d.settings.transitionsSupported?!0:!1};if(c.transitions||c.none){c.none&&d.disableTransitions(),c.transitions&&d.enableTransitions(d.options.openDuration,d.options.openEasing);var e={};e[d.options.direction]=d.options.openPosition,d.setPanelStyle(e),d.settings.shiftFixedChildren&&a(d.fixedChildren).each(function(){var b=a(this).prop("tagName").toLowerCase()+" "+a(this).attr("class"),e=b.replace(" ","."),f=b.replace(" ","-"),g={};c.none&&d.disableFixedTransitions(f),c.transitions&&d.enableFixedTransitions(e,f,d.options.openDuration,d.options.openEasing),g[d.options.direction]=d.options.openPosition,a(this).css(g)}),d.timeouts.afterOpen=setTimeout(function(){d.disableTransitions(),d.settings.shiftFixedChildren&&a(d.fixedChildren).each(function(){var b=a(this).prop("tagName").toLowerCase()+" "+a(this).attr("class");d.disableFixedTransitions(b.replace(" ","-"))}),d.options.after(),d.options.afterOpen(),d.initiateContentClickListeners()},d.options.openDuration)}else{var f=d.getJSEasingFunction(d.options.openEasing),g={};g[d.options.direction]=d.options.openPosition,a(d.panel).stop().animate(g,d.options.openDuration,f,function(){d.options.after(),d.options.afterOpen(),d.initiateContentClickListeners()}),d.settings.shiftFixedChildren&&a(d.fixedChildren).each(function(){var b={};b[d.options.direction]=d.options.openPosition,a(this).stop().animate(b,d.options.openDuration,f)})}},closeMenu:function(b){("undefined"==typeof b||null===b)&&(b=d.options.animated),d.clearTimeouts(),d.options.before(),d.options.beforeClose(),d.setMenuState(!1);var c={none:b?!1:!0,transitions:b&&d.settings.transitionsSupported?!0:!1};if(c.transitions||c.none){c.none&&d.disableTransitions(),c.transitions&&d.enableTransitions(d.options.closeDuration,d.options.closeEasing);var e={};e[d.options.direction]=0+d.settings.positionUnits,d.setPanelStyle(e),d.settings.shiftFixedChildren&&a(d.fixedChildren).each(function(){var b=a(this).prop("tagName").toLowerCase()+" "+a(this).attr("class"),e=b.replace(" ","."),f=b.replace(" ","-"),g={};c.none&&d.disableFixedTransitions(f),c.transitions&&d.enableFixedTransitions(e,f,d.options.closeDuration,d.options.closeEasing),g[d.options.direction]=0+d.settings.positionUnits,a(this).css(g)}),d.timeouts.afterClose=setTimeout(function(){d.setPanelStyle({position:d.settings.panelPosition}),d.disableTransitions(),d.settings.shiftFixedChildren&&a(d.fixedChildren).each(function(){var b=a(this).prop("tagName").toLowerCase()+" "+a(this).attr("class");d.disableFixedTransitions(b.replace(" ","-"))}),d.hideMenu(),d.options.after(),d.options.afterClose(),d.destroyContentClickListeners()},d.options.closeDuration)}else{var f=d.getJSEasingFunction(d.options.closeEasing),g={};g[d.options.direction]=0+d.settings.positionUnits,a(d.panel).stop().animate(g,d.options.closeDuration,f,function(){d.setPanelStyle({position:d.settings.panelPosition}),d.hideMenu(),d.options.after(),d.options.afterClose(),d.destroyContentClickListeners()}),d.settings.shiftFixedChildren&&a(d.fixedChildren).each(function(){var b={};b[d.options.direction]=0+d.settings.positionUnits,a(this).stop().animate(b,d.options.closeDuration,f)})}},triggerMenu:function(a){d.menuIsOpen()?d.closeMenu(a):d.openMenu(a)},initiateClickListeners:function(){a(b).on("click",d.options.trigger,function(){return d.triggerMenu(d.options.animated),!1})},destroyClickListeners:function(){a(b).off("click",d.options.trigger,null)},initiateContentClickListeners:function(){return d.options.closeOnContentClick?(a(b).on("click",d.panel,function(){d.menuIsOpen()&&d.closeMenu(d.options.animated)}),void a(b).on("touchend",d.panel,function(){d.menuIsOpen()&&d.closeMenu(d.options.animated)})):!1},destroyContentClickListeners:function(){return d.options.closeOnContentClick?(a(b).off("click",d.panel,null),void a(b).off("touchend",d.panel,null)):!1},initiateKeyboardListeners:function(){var c=["input","textarea"];a(b).on("keydown",function(b){var e=a(b.target),f=!1;if(a.each(c,function(){e.is(this.toString())&&(f=!0)}),f)return!0;for(var g in d.options.keyboardShortcuts)if(b.which===d.options.keyboardShortcuts[g].code){var h=d.options.keyboardShortcuts[g];return h.open&&h.close?d.triggerMenu(d.options.animated):!h.open||h.close||d.menuIsOpen()?!h.open&&h.close&&d.menuIsOpen()&&d.closeMenu(d.options.animated):d.openMenu(d.options.animated),!1}})},destroyKeyboardListeners:function(){a(b).off("keydown",null)},setupMarkup:function(){a("html").addClass("jPanelMenu"),a("body > *").not(d.menu+", "+d.options.excludedPanelContent).wrapAll('<div class="'+d.panel.replace(".","")+'"/>'),a(d.options.menu).clone(d.options.keepEventHandlers).attr("id",d.menu.replace("#","")).insertAfter("body > "+d.panel)},resetMarkup:function(){a("html").removeClass("jPanelMenu"),a("body > "+d.panel+" > *").unwrap(),a(d.menu).remove()},init:function(){d.options.beforeOn(),d.initiateClickListeners(),"[object Array]"===Object.prototype.toString.call(d.options.keyboardShortcuts)&&d.initiateKeyboardListeners(),d.setjPanelMenuStyles(),d.setMenuState(!1),d.setupMarkup(),d.setMenuStyle({width:d.options.openPosition}),d.checkFixedChildren(),d.setPositionUnits(),d.closeMenu(!1),d.options.afterOn()},destroy:function(){d.options.beforeOff(),d.closeMenu(),d.destroyClickListeners(),"[object Array]"===Object.prototype.toString.call(d.options.keyboardShortcuts)&&d.destroyKeyboardListeners(),d.resetMarkup();var b={};b[d.options.direction]="auto",a(d.fixedChildren).each(function(){a(this).css(b)}),d.fixedChildren=[],d.options.afterOff()}};return{on:d.init,off:d.destroy,trigger:d.triggerMenu,open:d.openMenu,close:d.closeMenu,isOpen:d.menuIsOpen,menu:d.menu,getMenu:function(){return a(d.menu)},panel:d.panel,getPanel:function(){return a(d.panel)}}}}(jQuery,document);