/* Editorial by HTML5 UP html5up.net | @ajlkn Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) */ (function($) { var $acWindow = $(window), $acHead = $('head'), $acBody = $('body'); // Breakpoints. breakpoints({ xlarge: [ '1281px', '1680px' ], large: [ '981px', '1280px' ], medium: [ '737px', '980px' ], small: [ '481px', '736px' ], xsmall: [ '361px', '480px' ], xxsmall: [ null, '360px' ], 'xlarge-to-max': '(min-width: 1681px)', 'small-to-xlarge': '(min-width: 481px) and (max-width: 1680px)' }); // Stops animations/transitions until the page has ... // ... loaded. $acWindow.on('load', function() { window.setTimeout(function() { $acBody.removeClass('is-preload'); }, 100); }); // ... stopped resizing. var resizeTimeout; $acWindow.on('resize', function() { // Mark as resizing. $acBody.addClass('is-resizing'); // Unmark after delay. clearTimeout(resizeTimeout); resizeTimeout = setTimeout(function() { $acBody.removeClass('is-resizing'); }, 100); }); // Fixes. // Object fit images. if (!browser.canUse('object-fit') || browser.name == '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 $acSidebar = $('#sideasbar'), $acSidebar_inner = $acSidebar.children('.asinner'); // Inactive by default on <= large. breakpoints.on('<=large', function() { $acSidebar.addClass('inactive'); }); breakpoints.on('>large', function() { $acSidebar.removeClass('inactive'); }); // Hack: Workaround for Chrome/Android scrollbar position bug. if (browser.os == 'android' && browser.name == 'chrome') $('') .appendTo($acHead); // Toggle. $('Toggle') .appendTo($acSidebar) .on('click', function(event) { // Prevent default. event.preventDefault(); event.stopPropagation(); // Toggle. $acSidebar.toggleClass('inactive'); }); // Events. // Link clicks. $acSidebar.on('click', 'a', function(event) { // >large? Bail. if (breakpoints.active('>large')) 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. $acSidebar.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. $acSidebar.on('click touchend touchstart touchmove', function(event) { // >large? Bail. if (breakpoints.active('>large')) return; // Prevent propagation. event.stopPropagation(); }); // Hide panel on body click/tap. $acBody.on('click touchend', function(event) { // >large? Bail. if (breakpoints.active('>large')) return; // Deactivate. $acSidebar.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 $acWindow so stuff doesn't get out of sync. $acWindow.on('load.sidebar-lock', function() { var sh, wh, st; // Reset scroll position to 0 if it's 1. if ($acWindow.scrollTop() == 1) $acWindow.scrollTop(0); $acWindow .on('scroll.sidebar-lock', function() { var x, y; // <=large? Bail. if (breakpoints.active('<=large')) { $acSidebar_inner .data('locked', 0) .css('position', '') .css('top', ''); return; } // Calculate positions. x = Math.max(sh - wh, 0); y = Math.max(0, $acWindow.scrollTop() - x); // Lock/unlock. if ($acSidebar_inner.data('locked') == 1) { if (y <= 0) $acSidebar_inner .data('locked', 0) .css('position', '') .css('top', ''); else $acSidebar_inner .css('top', -1 * x); } else { if (y > 0) $acSidebar_inner .data('locked', 1) .css('position', 'fixed') .css('top', -1 * x); } }) .on('resize.sidebar-lock', function() { // Calculate heights. wh = $acWindow.height(); sh = $acSidebar_inner.outerHeight() + 30; // Trigger scroll. $acWindow.trigger('scroll.sidebar-lock'); }) .trigger('resize.sidebar-lock'); }); // Menu. var $acMenu = $('#menuas'), $acMenu_openers = $acMenu.children('ul').find('.opener'); // Openers. $acMenu_openers.each(function() { var $this = $(this); $this.on('click', function(event) { // Prevent default. event.preventDefault(); // Toggle. $acMenu_openers.not($this).removeClass('active'); $this.toggleClass('active'); // Trigger resize (sidebar lock). $acWindow.triggerHandler('resize.sidebar-lock'); }); }); })(jQuery);