Spaces:
Sleeping
Sleeping
/* | |
Dimension by HTML5 UP | |
html5up.net | @ajlkn | |
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) | |
*/ | |
function zoomImage(image) { | |
image.style.transform = image.style.transform == "scale(2)" ? "scale(1)" : "scale(2)"; | |
} | |
(function($) { | |
var $window = $(window), | |
$body = $('body'), | |
$wrapper = $('#wrapper'), | |
$header = $('#header'), | |
$footer = $('#footer'), | |
$main = $('#main'), | |
$main_articles = $main.children('article'); | |
// Breakpoints. | |
breakpoints({ | |
xlarge: [ '1281px', '1680px' ], | |
large: [ '981px', '1280px' ], | |
medium: [ '737px', '980px' ], | |
small: [ '481px', '736px' ], | |
xsmall: [ '361px', '480px' ], | |
xxsmall: [ null, '360px' ] | |
}); | |
// Play initial animations on page load. | |
$window.on('load', function() { | |
window.setTimeout(function() { | |
$body.removeClass('is-preload'); | |
}, 100); | |
}); | |
// Fix: Flexbox min-height bug on IE. | |
if (browser.name == 'ie') { | |
var flexboxFixTimeoutId; | |
$window.on('resize.flexbox-fix', function() { | |
clearTimeout(flexboxFixTimeoutId); | |
flexboxFixTimeoutId = setTimeout(function() { | |
if ($wrapper.prop('scrollHeight') > $window.height()) | |
$wrapper.css('height', 'auto'); | |
else | |
$wrapper.css('height', '100vh'); | |
}, 250); | |
}).triggerHandler('resize.flexbox-fix'); | |
} | |
// Nav. | |
var $nav = $header.children('nav'), | |
$nav_li = $nav.find('li'); | |
// Add "middle" alignment classes if we're dealing with an even number of items. | |
if ($nav_li.length % 2 == 0) { | |
$nav.addClass('use-middle'); | |
$nav_li.eq( ($nav_li.length / 2) ).addClass('is-middle'); | |
} | |
// Main. | |
var delay = 325, | |
locked = false; | |
// Methods. | |
$main._show = function(id, initial) { | |
var $article = $main_articles.filter('#' + id); | |
// No such article? Bail. | |
if ($article.length == 0) | |
return; | |
// Handle lock. | |
// Already locked? Speed through "show" steps w/o delays. | |
if (locked || (typeof initial != 'undefined' && initial === true)) { | |
// Mark as switching. | |
$body.addClass('is-switching'); | |
// Mark as visible. | |
$body.addClass('is-article-visible'); | |
// Deactivate all articles (just in case one's already active). | |
$main_articles.removeClass('active'); | |
// Hide header, footer. | |
$header.hide(); | |
$footer.hide(); | |
// Show main, article. | |
$main.show(); | |
$article.show(); | |
// Activate article. | |
$article.addClass('active'); | |
// Unlock. | |
locked = false; | |
// Unmark as switching. | |
setTimeout(function() { | |
$body.removeClass('is-switching'); | |
}, (initial ? 1000 : 0)); | |
return; | |
} | |
// Lock. | |
locked = true; | |
// Article already visible? Just swap articles. | |
if ($body.hasClass('is-article-visible')) { | |
// Deactivate current article. | |
var $currentArticle = $main_articles.filter('.active'); | |
$currentArticle.removeClass('active'); | |
// Show article. | |
setTimeout(function() { | |
// Hide current article. | |
$currentArticle.hide(); | |
// Show article. | |
$article.show(); | |
// Activate article. | |
setTimeout(function() { | |
$article.addClass('active'); | |
// Window stuff. | |
$window | |
.scrollTop(0) | |
.triggerHandler('resize.flexbox-fix'); | |
// Unlock. | |
setTimeout(function() { | |
locked = false; | |
}, delay); | |
}, 25); | |
}, delay); | |
} | |
// Otherwise, handle as normal. | |
else { | |
// Mark as visible. | |
$body | |
.addClass('is-article-visible'); | |
// Show article. | |
setTimeout(function() { | |
// Hide header, footer. | |
$header.hide(); | |
$footer.hide(); | |
// Show main, article. | |
$main.show(); | |
$article.show(); | |
// Activate article. | |
setTimeout(function() { | |
$article.addClass('active'); | |
// Window stuff. | |
$window | |
.scrollTop(0) | |
.triggerHandler('resize.flexbox-fix'); | |
// Unlock. | |
setTimeout(function() { | |
locked = false; | |
}, delay); | |
}, 25); | |
}, delay); | |
} | |
}; | |
$main._hide = function(addState) { | |
var $article = $main_articles.filter('.active'); | |
// Article not visible? Bail. | |
if (!$body.hasClass('is-article-visible')) | |
return; | |
// Add state? | |
if (typeof addState != 'undefined' | |
&& addState === true) | |
history.pushState(null, null, '#'); | |
// Handle lock. | |
// Already locked? Speed through "hide" steps w/o delays. | |
if (locked) { | |
// Mark as switching. | |
$body.addClass('is-switching'); | |
// Deactivate article. | |
$article.removeClass('active'); | |
// Hide article, main. | |
$article.hide(); | |
$main.hide(); | |
// Show footer, header. | |
$footer.show(); | |
$header.show(); | |
// Unmark as visible. | |
$body.removeClass('is-article-visible'); | |
// Unlock. | |
locked = false; | |
// Unmark as switching. | |
$body.removeClass('is-switching'); | |
// Window stuff. | |
$window | |
.scrollTop(0) | |
.triggerHandler('resize.flexbox-fix'); | |
return; | |
} | |
// Lock. | |
locked = true; | |
// Deactivate article. | |
$article.removeClass('active'); | |
// Hide article. | |
setTimeout(function() { | |
// Hide article, main. | |
$article.hide(); | |
$main.hide(); | |
// Show footer, header. | |
$footer.show(); | |
$header.show(); | |
// Unmark as visible. | |
setTimeout(function() { | |
$body.removeClass('is-article-visible'); | |
// Window stuff. | |
$window | |
.scrollTop(0) | |
.triggerHandler('resize.flexbox-fix'); | |
// Unlock. | |
setTimeout(function() { | |
locked = false; | |
}, delay); | |
}, 25); | |
}, delay); | |
}; | |
// Articles. | |
$main_articles.each(function() { | |
var $this = $(this); | |
// Close. | |
$('<div class="close">Close</div>') | |
.appendTo($this) | |
.on('click', function() { | |
location.hash = ''; | |
}); | |
// Prevent clicks from inside article from bubbling. | |
$this.on('click', function(event) { | |
event.stopPropagation(); | |
}); | |
}); | |
// Events. | |
$body.on('click', function(event) { | |
// Article visible? Hide. | |
if ($body.hasClass('is-article-visible')) | |
$main._hide(true); | |
}); | |
$window.on('keyup', function(event) { | |
switch (event.keyCode) { | |
case 27: | |
// Article visible? Hide. | |
if ($body.hasClass('is-article-visible')) | |
$main._hide(true); | |
break; | |
default: | |
break; | |
} | |
}); | |
$window.on('hashchange', function(event) { | |
// Empty hash? | |
if (location.hash == '' | |
|| location.hash == '#') { | |
// Prevent default. | |
event.preventDefault(); | |
event.stopPropagation(); | |
// Hide. | |
$main._hide(); | |
} | |
// Otherwise, check for a matching article. | |
else if ($main_articles.filter(location.hash).length > 0) { | |
// Prevent default. | |
event.preventDefault(); | |
event.stopPropagation(); | |
// Show article. | |
$main._show(location.hash.substr(1)); | |
} | |
}); | |
// Scroll restoration. | |
// This prevents the page from scrolling back to the top on a hashchange. | |
if ('scrollRestoration' in history) | |
history.scrollRestoration = 'manual'; | |
else { | |
var oldScrollPos = 0, | |
scrollPos = 0, | |
$htmlbody = $('html,body'); | |
$window | |
.on('scroll', function() { | |
oldScrollPos = scrollPos; | |
scrollPos = $htmlbody.scrollTop(); | |
}) | |
.on('hashchange', function() { | |
$window.scrollTop(oldScrollPos); | |
}); | |
} | |
// Initialize. | |
// Hide main, articles. | |
$main.hide(); | |
$main_articles.hide(); | |
// Initial article. | |
if (location.hash != '' | |
&& location.hash != '#') | |
$window.on('load', function() { | |
$main._show(location.hash.substr(1), true); | |
}); | |
})(jQuery); |