/* simpler-sidebar v1.2.0 (http://dcdeiv.github.io/simpler-sidebar) * Copyright 2015-2015 and licensed under GPLv2 (https://github.com/dcdeiv/simpler-sidebar/blob/master/LICENSE) */ (function($) { $.fn.simplerSidebar = function(options) { var cfg = $.extend(true, $.fn.simplerSidebar.settings, options); return this.each(function() { var align, sbw, ssbInit, ssbStyle, maskInit, maskStyle, attr = cfg.attr, $sidebar = $(this), $opener = $(cfg.opener), $links = $(cfg.sidebar.closingLinks), duration = cfg.animation.duration, sbMaxW = cfg.sidebar.width, gap = cfg.sidebar.gap, winMaxW = sbMaxW + gap, w = $(window).width(), animationStart = {}, animationReset = {}, hiddenFlow = function() { $('body, html').css('overflow', 'hidden'); }, autoFlow = function() { $('body, html').css('overflow', 'auto'); }, activate = { duration: duration, easing: cfg.animation.easing, complete: hiddenFlow }, deactivate = { duration: duration, easing: cfg.animation.easing, complete: autoFlow }, $mask = $('
').attr('data-' + attr, 'mask'); //Checking sidebar align if (cfg.sidebar.align === (undefined || 'right')) { align = 'right'; } else if (cfg.sidebar.align === 'left') { align = 'left'; } //Sidebar style if (w < winMaxW) { sbw = w - gap; } else { sbw = sbMaxW; } ssbInit = { position: 'fixed', top: cfg.top, bottom: 0, width: sbw, }; ssbInit[align] = -sbw; animationStart[align] = 0; ssbStyle = $.extend(true, ssbInit, cfg.sidebar.css); $sidebar.css(ssbStyle) .attr('data-' + attr, 'disabled'); //Mask style maskInit = { position: 'fixed', top: cfg.top, right: 0, bottom: 0, left: 0, zIndex: cfg.sidebar.css.zIndex - 1, display: 'none' }; maskStyle = $.extend(true, maskInit, cfg.mask.css); //Appending Mask if mask.display is true if (true === cfg.mask.display) { $mask.appendTo('body').css(maskStyle); } $opener.click(function() { $('.sidebar-wrapper').css('display','block'); var isWhat = $sidebar.attr('data-' + attr), csbw = $sidebar.width(); animationReset[align] = -csbw; if (isWhat === 'disabled') { $sidebar .animate(animationStart, activate) .attr('data-' + attr, 'active'); $mask.fadeIn(duration); } else if (isWhat === 'active') { $sidebar .animate(animationReset, deactivate) .attr('data-' + attr, 'disabled'); $mask.fadeOut(duration); } }); //Closing Sidebar $mask.click(function() { var isWhat = $sidebar.attr('data-' + attr), csbw = $sidebar.width(); //Redefining animationReset animationReset[align] = -csbw; if (isWhat === 'active') { $sidebar.animate(animationReset, deactivate) .attr('data-' + attr, 'disabled'); $mask.fadeOut(duration); } }); $sidebar.on('click', $links, function() { $sidebar.css('display', 'block') var isWhat = $sidebar.attr('data-' + attr), csbw = $sidebar.width(); animationReset[align] = -csbw; if (isWhat === 'active') { $sidebar.animate(animationReset, deactivate) .attr('data-' + attr, 'disabled'); $mask.fadeOut(duration); } }); //Adjusting width; $(window).resize(function() { var rsbw, reset, nw = $(window) .width(); if (nw < winMaxW) { rsbw = nw - gap; } else { rsbw = sbMaxW; } reset = { width: rsbw }; reset[align] = -rsbw; $sidebar .attr('data-' + attr, 'disabled') .css(reset); $mask.fadeOut(duration); $('body, html') .css({ overflow: 'auto' }); }); }); }; $.fn.simplerSidebar.settings = { attr: 'simplersidebar', top: 0, animation: { duration: 500, easing: 'swing' }, sidebar: { width: 350, gap: 64, closingLinks: 'a', css: { zIndex: 3000 } }, mask: { display: true, css: { backgroundColor: 'black', opacity: 0.5, filter: 'Alpha(opacity=50)' } } }; })(jQuery);