(function($) { skel.breakpoints({ xlarge: '(max-width: 1680px)', large: '(max-width: 1280px)', medium: '(max-width: 980px)', small: '(max-width: 736px)', xsmall: '(max-width: 480px)', 'xlarge-to-max': '(min-width: 1681px)', 'small-to-xlarge': '(min-width: 481px) and (max-width: 1680px)' }); $(function() { var $window = $(window), $head = $('head'), $body = $('body'); // Disable animations/transitions ... // ... until the page has loaded. $body.addClass('is-loading'); $window.on('load', function() { setTimeout(function() { $body.removeClass('is-loading'); }, 100); }); // ... when resizing. var resizeTimeout; $window.on('resize', function() { // Mark as resizing. $body.addClass('is-resizing'); // Unmark after delay. clearTimeout(resizeTimeout); resizeTimeout = setTimeout(function() { $body.removeClass('is-resizing'); }, 100); }); // Fix: Placeholder polyfill. $('form').placeholder(); // Prioritize "important" elements on medium. skel.on('+medium -medium', function() { $.prioritize( '.important\\28 medium\\29', skel.breakpoint('medium').active ); }); // Fixes. // Object fit images. if (!skel.canUse('object-fit') || skel.vars.browser == 'safari') $('.image.object').each(function() { var $this = $(this), $img = $this.children('img'); // Hide original image. $img.css('opacity', '0'); // Set background. $this .css('background-image', 'url("' + $img.attr('src') + '")') .css('background-size', $img.css('object-fit') ? $img.css('object-fit') : 'cover') .css('background-position', $img.css('object-position') ? $img.css('object-position') : 'center'); }); // Sidebar. var $sidebar = $('#sidebar'), $sidebar_inner = $sidebar.children('.inner'); // Inactive by default on <= large. skel .on('+large', function() { $sidebar.addClass('inactive'); }) .on('-large !large', function() { $sidebar.removeClass('inactive'); }); // Hack: Workaround for Chrome/Android scrollbar position bug. if (skel.vars.os == 'android' && skel.vars.browser == 'chrome') $('') .appendTo($head); // Toggle. if (skel.vars.IEVersion > 9) { $('Toggle') .appendTo($sidebar) .on('click', function(event) { // Prevent default. event.preventDefault(); event.stopPropagation(); // Toggle. $sidebar.toggleClass('inactive'); }); } // Events. // Link clicks. $sidebar.on('click', 'a', function(event) { // >large? Bail. if (!skel.breakpoint('large').active) return; // Vars. var $a = $(this), href = $a.attr('href'), target = $a.attr('target'); // Prevent default. event.preventDefault(); event.stopPropagation(); // Check URL. if (!href || href == '#' || href == '') return; // Hide sidebar. $sidebar.addClass('inactive'); // Redirect to href. setTimeout(function() { if (target == '_blank') window.open(href); else window.location.href = href; }, 500); }); // Prevent certain events inside the panel from bubbling. $sidebar.on('click touchend touchstart touchmove', function(event) { // >large? Bail. if (!skel.breakpoint('large').active) return; // Prevent propagation. event.stopPropagation(); }); // Hide panel on body click/tap. $body.on('click touchend', function(event) { // >large? Bail. if (!skel.breakpoint('large').active) return; // Deactivate. $sidebar.addClass('inactive'); }); // Scroll lock. // Note: If you do anything to change the height of the sidebar's content, be sure to // trigger 'resize.sidebar-lock' on $window so stuff doesn't get out of sync. $window.on('load.sidebar-lock', function() { var sh, wh, st; // Reset scroll position to 0 if it's 1. if ($window.scrollTop() == 1) $window.scrollTop(0); $window .on('scroll.sidebar-lock', function() { var x, y; // IE<10? Bail. if (skel.vars.IEVersion < 10) return; // <=large? Bail. if (skel.breakpoint('large').active) { $sidebar_inner .data('locked', 0) .css('position', '') .css('top', ''); return; } // Calculate positions. x = Math.max(sh - wh, 0); y = Math.max(0, $window.scrollTop() - x); // Lock/unlock. if ($sidebar_inner.data('locked') == 1) { if (y <= 0) $sidebar_inner .data('locked', 0) .css('position', '') .css('top', ''); else $sidebar_inner .css('top', -1 * x); } else { if (y > 0) $sidebar_inner .data('locked', 1) .css('position', 'fixed') .css('top', -1 * x); } }) .on('resize.sidebar-lock', function() { // Calculate heights. wh = $window.height(); sh = $sidebar_inner.outerHeight() + 30; // Trigger scroll. $window.trigger('scroll.sidebar-lock'); }) .trigger('resize.sidebar-lock'); }); // Menu. var $menu = $('#menu'), $menu_openers = $menu.children('ul').find('.opener'); // Openers. $menu_openers.each(function() { var $this = $(this); $this.on('click', function(event) { // Prevent default. event.preventDefault(); // Toggle. $menu_openers.not($this).removeClass('active'); $this.toggleClass('active'); // Trigger resize (sidebar lock). $window.triggerHandler('resize.sidebar-lock'); }); }); }); })(jQuery);