| Index: static/js/main.js | 
| =================================================================== | 
| --- a/static/js/main.js | 
| +++ b/static/js/main.js | 
| @@ -1,36 +1,36 @@ | 
| (function(){ | 
| document.addEventListener("DOMContentLoaded", function() | 
| { | 
| /************************************************************************** | 
| * General | 
| **************************************************************************/ | 
|  | 
| -     document.documentElement.classList.add("js"); | 
| -     document.documentElement.classList.remove("no-js"); | 
| -     // the class "open" was added just in case it's a no-js state | 
| -     document.getElementById("sidebar").classList.remove("open"); | 
| +    document.documentElement.classList.add("js"); | 
| +    document.documentElement.classList.remove("no-js"); | 
| +    // the class "open" was added just in case it's a no-js state | 
| +    document.getElementById("sidebar").classList.remove("open"); | 
|  | 
| /************************************************************************** | 
| * Sidebar | 
| **************************************************************************/ | 
|  | 
| -    var sidebar = document.getElementById("sidebar"); | 
| var sidebarOpen = document.getElementById("sidebar-open"); | 
| var sidebarClose = document.getElementById("sidebar-close"); | 
| +    var root = document.documentElement; | 
|  | 
| sidebarOpen.addEventListener("click", function() | 
| { | 
| -      sidebar.classList.add("open"); | 
| +      root.classList.add("open-sidebar"); | 
| }, false); | 
|  | 
| sidebarClose.addEventListener("click", function() | 
| { | 
| -      sidebar.classList.remove("open"); | 
| +      root.classList.remove("open-sidebar"); | 
| }, false); | 
|  | 
|  | 
| /************************************************************************** | 
| * Youtube Embed | 
| **************************************************************************/ | 
|  | 
| function YoutubeEmbed(container) | 
| @@ -75,10 +75,65 @@ | 
| this.container.classList.add("show-disclaimer"); | 
| this.timeClickedVideo = new Date().getTime(); | 
| } | 
| }; | 
|  | 
| if (document.querySelector(".youtube-embed")) | 
| new YoutubeEmbed(document.querySelector(".youtube-embed")); | 
|  | 
| +      /************************************************************************** | 
| +       * Header disappears on scroll down and re-appears on scroll up in small screens | 
| +       **************************************************************************/ | 
| + | 
| +    function initNavbarToggle() | 
| +    { | 
| +      var sidebarHeight = document.getElementById("sidebar").offsetHeight; | 
| +      var scrollHandled = false; | 
| +      var lastScrollTop = 0; | 
| +      var desktopBreakpoint = 1199; | 
| + | 
| +      // IE9 does not support offsetHeight when element is fixed | 
| +      if (!sidebarHeight) | 
| +        return; | 
| + | 
| +      window.addEventListener("scroll", (function() | 
| +      { | 
| +        scrollHandled = false; | 
| +      })); | 
| + | 
| +      setInterval(function() | 
| +      { | 
| +        if (window.innerWidth <= desktopBreakpoint) | 
| +        { | 
| +          root.classList.add("mobile"); | 
| +          if (!root.classList.contains("open-sidebar") && !scrollHandled) | 
| +          { | 
| +            scrollHandled = handleScroll(); | 
| +          } | 
| +        } | 
| +        else | 
| +        { | 
| +          root.classList.remove("mobile"); | 
| +        } | 
| +      }, 250); | 
| + | 
| +      function handleScroll() | 
| +      { | 
| +        var currentScroll = window.pageYOffset; | 
| +        if (currentScroll > lastScrollTop) | 
| +        { | 
| +          root.classList.add("scrollDown"); | 
| +        } | 
| +        else | 
| +        { | 
| +          root.classList.remove("scrollDown"); | 
| +        } | 
| +        lastScrollTop = currentScroll; | 
| +        return true; | 
| +      } | 
| +    } | 
| + | 
| +    initNavbarToggle(); | 
| + | 
| }, false); | 
| + | 
| }()); | 
|  |