").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});
diff --git a/js/main.js b/js/main.js
new file mode 100644
index 0000000000..fbf46aee2f
--- /dev/null
+++ b/js/main.js
@@ -0,0 +1,140 @@
+// Dean Attali / Beautiful Jekyll 2016
+
+var main = {
+
+ bigImgEl : null,
+ numImgs : null,
+
+ init : function() {
+ // Shorten the navbar after scrolling a little bit down
+ $(window).scroll(function() {
+ if ($(".navbar").offset().top > 50) {
+ $(".navbar").addClass("top-nav-short");
+ $(".navbar-custom .avatar-container").fadeOut(500);
+ } else {
+ $(".navbar").removeClass("top-nav-short");
+ $(".navbar-custom .avatar-container").fadeIn(500);
+ }
+ });
+
+ // On mobile, hide the avatar when expanding the navbar menu
+ $('#main-navbar').on('show.bs.collapse', function () {
+ $(".navbar").addClass("top-nav-expanded");
+ });
+ $('#main-navbar').on('hidden.bs.collapse', function () {
+ $(".navbar").removeClass("top-nav-expanded");
+ });
+
+ // On mobile, when clicking on a multi-level navbar menu, show the child links
+ $('#main-navbar').on("click", ".navlinks-parent", function(e) {
+ var target = e.target;
+ $.each($(".navlinks-parent"), function(key, value) {
+ if (value == target) {
+ $(value).parent().toggleClass("show-children");
+ } else {
+ $(value).parent().removeClass("show-children");
+ }
+ });
+ });
+
+ // Ensure nested navbar menus are not longer than the menu header
+ var menus = $(".navlinks-container");
+ if (menus.length > 0) {
+ var navbar = $("#main-navbar ul");
+ var fakeMenuHtml = "";
+ navbar.append(fakeMenuHtml);
+ var fakeMenu = $(".fake-menu");
+
+ $.each(menus, function(i) {
+ var parent = $(menus[i]).find(".navlinks-parent");
+ var children = $(menus[i]).find(".navlinks-children a");
+ var words = [];
+ $.each(children, function(idx, el) { words = words.concat($(el).text().trim().split(/\s+/)); });
+ var maxwidth = 0;
+ $.each(words, function(id, word) {
+ fakeMenu.html("
" + word + "");
+ var width = fakeMenu.width();
+ if (width > maxwidth) {
+ maxwidth = width;
+ }
+ });
+ $(menus[i]).css('min-width', maxwidth + 'px')
+ });
+
+ fakeMenu.remove();
+ }
+
+ // show the big header image
+ main.initImgs();
+ },
+
+ initImgs : function() {
+ // If the page was large images to randomly select from, choose an image
+ if ($("#header-big-imgs").length > 0) {
+ main.bigImgEl = $("#header-big-imgs");
+ main.numImgs = main.bigImgEl.attr("data-num-img");
+
+ // 2fc73a3a967e97599c9763d05e564189
+ // set an initial image
+ var imgInfo = main.getImgInfo();
+ var src = imgInfo.src;
+ var desc = imgInfo.desc;
+ main.setImg(src, desc);
+
+ // For better UX, prefetch the next image so that it will already be loaded when we want to show it
+ var getNextImg = function() {
+ var imgInfo = main.getImgInfo();
+ var src = imgInfo.src;
+ var desc = imgInfo.desc;
+
+ var prefetchImg = new Image();
+ prefetchImg.src = src;
+ // if I want to do something once the image is ready: `prefetchImg.onload = function(){}`
+
+ setTimeout(function(){
+ var img = $("
").addClass("big-img-transition").css("background-image", 'url(' + src + ')');
+ $(".intro-header.big-img").prepend(img);
+ setTimeout(function(){ img.css("opacity", "1"); }, 50);
+
+ // after the animation of fading in the new image is done, prefetch the next one
+ //img.one("transitioned webkitTransitionEnd oTransitionEnd MSTransitionEnd", function(){
+ setTimeout(function() {
+ main.setImg(src, desc);
+ img.remove();
+ getNextImg();
+ }, 1000);
+ //});
+ }, 6000);
+ };
+
+ // If there are multiple images, cycle through them
+ if (main.numImgs > 1) {
+ getNextImg();
+ }
+ }
+ },
+
+ getImgInfo : function() {
+ var randNum = Math.floor((Math.random() * main.numImgs) + 1);
+ var src = main.bigImgEl.attr("data-img-src-" + randNum);
+ var desc = main.bigImgEl.attr("data-img-desc-" + randNum);
+
+ return {
+ src : src,
+ desc : desc
+ }
+ },
+
+ setImg : function(src, desc) {
+ $(".intro-header.big-img").css("background-image", 'url(' + src + ')');
+ if (typeof desc !== typeof undefined && desc !== false) {
+ $(".img-desc").text(desc).show();
+ } else {
+ $(".img-desc").hide();
+ }
+ }
+};
+
+// 2fc73a3a967e97599c9763d05e564189
+
+document.addEventListener('DOMContentLoaded', main.init);