text: /**
   * Sets up Justified Gallery.
   */
  if (!!$.prototype.justifiedGallery) {
    var options = {
      rowHeight: 140,
      margins: 4,
      lastRow: "justify"
    };
    $(".article-gallery").justifiedGallery(options);
  }
  
  $(document).ready(function() {
  
    /**
     * Shows the responsive navigation menu on mobile.
     */
    $("#header > #nav > ul > .icon").click(function() {
      $("#header > #nav > ul").toggleClass("responsive");
    });
  
  
    /**
     * Controls the different versions of  the menu in blog post articles
     * for Desktop, tablet and mobile.
     */
    if ($(".post").length) {
      var menu = $("#menu");
      var nav = $("#menu > #nav");
      var menuIcon = $("#menu-icon, #menu-icon-tablet");
  
      /**
       * Display the menu on hi-res laptops and desktops.
       */
      if ($(document).width() >= 1440) {
        menu.css("visibility", "visible");
        menuIcon.addClass("active");
      }
  
      /**
       * Display the menu if the menu icon is clicked.
       */
      menuIcon.click(function() {
        if (menu.css("visibility") === "hidden") {
          menu.css("visibility", "visible");
          menuIcon.addClass("active");
        } else {
          menu.css("visibility", "hidden");
          menuIcon.removeClass("active");
        }
        return false;
      });
  
      /**
       * Add a scroll listener to the menu to hide/show the navigation links.
       */
      if (menu.length) {
        $(window).on("scroll", function() {
          var topDistance = menu.offset().top;
  
          // hide only the navigation links on desktop
          if (!nav.is(":visible") && topDistance < 50) {
            nav.show();
          } else if (nav.is(":visible") && topDistance > 100) {
            nav.hide();
          }
  
          // on tablet, hide the navigation icon as well and show a "scroll to top
          // icon" instead
          if ( ! $( "#menu-icon" ).is(":visible") && topDistance < 50 ) {
            $("#menu-icon-tablet").show();
            $("#top-icon-tablet").hide();
          } else if (! $( "#menu-icon" ).is(":visible") && topDistance > 100) {
            $("#menu-icon-tablet").hide();
            $("#top-icon-tablet").show();
          }
        });
      }
  
      /**
       * Show mobile navigation menu after scrolling upwards,
       * hide it again after scrolling downwards.
       */
      if ($( "#footer-post").length) {
        var lastScrollTop = 0;
        $(window).on("scroll", function() {
          var topDistance = $(window).scrollTop();
  
          if (topDistance > lastScrollTop){
            // downscroll -> show menu
            $("#footer-post").hide();
          } else {
            // upscroll -> hide menu
            $("#footer-post").show();
          }
          lastScrollTop = topDistance;
  
          // close all submenu"s on scroll
          $("#nav-footer").hide();
          $("#toc-footer").hide();
          $("#share-footer").hide();
  
          // show a "navigation" icon when close to the top of the page,
          // otherwise show a "scroll to the top" icon
          if (topDistance < 50) {
            $("#actions-footer > #top").hide();
          } else if (topDistance > 100) {
            $("#actions-footer > #top").show();
          }
        });
      }
    }
  
    /* Expandable sections */
    (function () {
      function toggle (button, target) {
        var expanded = button.getAttribute('aria-expanded') === 'true';
        button.setAttribute('aria-expanded', !expanded);
        target.hidden = !target.hidden;
      }
  
      var expanders = document.querySelectorAll('[data-expands]');
  
      Array.prototype.forEach.call(expanders, function (expander) {
        var target = document.getElementById(expander.getAttribute('data-expands'));
  
        expander.addEventListener('click', function () {
          toggle(expander, target);
        })
      })
    }());
  });
  