openPerson = false $(() => { // Detect page URL path = window.location.pathname.replace(/\//g, '') if (path == 'jason' || path == 'flo' || path == 'lucy') { // A specific path has been set. Display the profile for that person openPerson = path immediateOpen(openPerson) } // Listen for pop states window.onpopstate = function(event) { path = window.location.pathname.replace(/\//g, '') //alert(path) if (path == '' && openPerson) { animateClose(openPerson) openPerson = false } else if (!openPerson && (path == 'jason' || path == 'flo')) { openPerson = path animateOpen(openPerson) } }; // Handle clicks on profile links (by doing nothing) $('a.openlink, a.closelink').click(function(e) { e.preventDefault(); }) // Handle clicks on the banner $('div.banner, div#backbutton').click(function() { // If there's no person to open, do nothing if (typeof $(this).attr('data-person') == 'undefined') return; if (!openPerson) { // If no profile is open, open one, and push a new page URL openPerson = $(this).attr('data-person') animateOpen(openPerson) window.history.pushState({ id: "100" }, '', '/' + openPerson); } else { // If a profile is open, close it, and push a new page URL animateClose(openPerson) openPerson = false window.history.pushState({ id: "100" }, '', '/'); } }) // Immediately open the content for a defined person, with only the display of links being animated function immediateOpen(p) { $('.main.not' + p).css({ width: 0, height: 0, minHeight: 0 }) $('#main-' + p).css('min-height', '100vh') $('#splash-' + p).css({ width: '50vw', height: '100vh' }) animateLinks(p) } // Animate the opening of content for a defined person function animateOpen(p) { if (window.matchMedia('(orientation: portrait)').matches) { // If we're opening in portrait mode... $('.main.not' + p).css({ height: '50vh', minHeight: 0 }) $('.main.not' + p).animate({ height: 0 }, { duration: 300, queue: false }) $('#main-' + p).animate({ minHeight: '100vh' }, { duration: 300, queue: true, complete: () => { $('.main.not' + p).css('width', 0) $('#splash-' + p).css({ width: '50vw', height: '100vh' }) } }) } else { // If we're opening in landscape mode... $('#splash-' + p).css('height', '100vh') $('.main.not' + p).animate({ width: 0 }, { duration: 300, queue: false }) $('#splash-' + p).animate({ width: '50vw' }, { duration: 300, queue: true, complete: () => { $('.main.not' + p).css({ height: 0, minHeight: 0 }) } }) } // Display the links setTimeout(() => { animateLinks(p) }, 300) } // Animate the closure of a defined person's profile function animateClose(p) { $('#links-' + p).animate({ height: 0 }, { duration: 300, queue: true }) $('#backbutton').animate({ top: '-3rem', right: '-3rem' }, { duration: 300, complete: () => { $('#backbutton').removeAttr('class') } }) if (window.matchMedia('(orientation: portrait)').matches) { // If we're closing in portrait mode... $('.main.not' + p).css('width', '100vw') $('#main-' + p).animate({ minHeight: '50vh' }, { duration: 300, queue: false }) $('.main.not' + p).animate({ height: '50vh' }, { duration: 300, queue: false, complete: () => { $('.main, .splash').removeAttr('style') } }) } else { // If we're closing in landscape mode... $('.main.not' + p).css('height', '100vh') $('#splash-' + p).animate({ width: 0 }, { duration: 300, queue: false }) $('.main.not' + p).animate({ width: '50vw' }, { duration: 300, queue: false, complete: () => { $('.main, .splash').removeAttr('style') } }) } } // Animate the display of links for a defined person, and show the back button function animateLinks(p) { $('#links-' + p).animate({ height: $('#links-' + p).get(0).scrollHeight }, { duration: 300 }) $('#backbutton').addClass(p).animate({ top: '2.5rem', right: '2.5rem' }, { duration: 300 }) } })