function fetchBlogPosts(post, tag) { var blog_fetch_url = '/blog.json'; if (post) blog_fetch_url = '/post/' + post; else if (tag) blog_fetch_url = '/tags/' + tag; $.getJSON(blog_fetch_url, function(blog_posts) { require(["text!templates/blog-post-text.html", "text!templates/blog-post-photo.html", "text!templates/blog-post-link.html", "text!templates/blog-post-video.html", "text!templates/blog-post-audio.html", "text!templates/blog-post-quote.html"], function(text_post_template, photo_post_template, link_post_template, video_post_template, audio_post_template, quote_post_template) { var text_template = Handlebars.compile(text_post_template); var photo_template = Handlebars.compile(photo_post_template); var link_template = Handlebars.compile(link_post_template); var video_template = Handlebars.compile(video_post_template); var audio_template = Handlebars.compile(audio_post_template); var quote_template = Handlebars.compile(quote_post_template); $('.loading').remove(); $.each(blog_posts.response.posts, function(i, p) { p.formated_date = moment(p.date).format('MMMM DD, YYYY') if (p.type == 'text') $('#blog-posts').append(text_template(p)); else if (p.type == 'photo') $('#blog-posts').append(photo_template(p)); else if (p.type == 'link') $('#blog-posts').append(link_template(p)); else if (p.type == 'video') $('#blog-posts').append(video_template(p)); else if (p.type == 'audio') $('#blog-posts').append(audio_template(p)); else if (p.type == 'quote') $('#blog-posts').append(quote_template(p)); }); setupLinks(); adjustBlogHeaders(); prettyPrint(); setTimeout(setupBlogHeaderScroll, 1000); adjustSelection('home-link'); }); }); } function adjustBlogHeaders() { if(isMobileView) return; $('.blog-section article hgroup').each(function(i, e) { $(e).find('h3 a').css({ 'margin-top': '-' + ($(e).height() + 100) + 'px' }).addClass('adjusted'); }); } function setupBlogHeaderScroll() { if(isMobileView) return; var previousTarget, activeTarget, $window = $(window), offsets = [], targets = [], $posts = $('.blog-section article hgroup h3 a').each(function() { if (this.hash) { targets.push(this.hash); offsets.push($(this.hash).offset().top); } }); function processScroll(e) { var scrollTop = $window.scrollTop(), i = offsets.length; for (i; i--;) { if (activeTarget != targets[i] && scrollTop > offsets[i] && (!offsets[i + 1] || scrollTop < offsets[i + 1])) { var hgroup = $(activeTarget).find("hgroup"); var margintop = ''; if (hgroup.length) { margintop = '-' + ($(hgroup[0]).height() + 100) + 'px'; } //set current target to be absolute $("h3 a[href=" + activeTarget + "]").removeClass("active").css({ position: "absolute", top: "auto", 'margin-top': margintop }); //set new target to be fixed activeTarget = targets[i]; $("h3 a[href=" + activeTarget + "]").attr('style', '').addClass("active"); } if (activeTarget && activeTarget != targets[i] && scrollTop + 50 >= offsets[i] && (!offsets[i + 1] || scrollTop + 50 <= offsets[i + 1])) { // if it's close to the new target scroll the current target up $("h3 a[href=" + activeTarget + "]") .removeClass("active") .css({ position: "absolute", top: ($(activeTarget).outerHeight(true) + $(activeTarget).offset().top - 50) + "px", bottom: "auto" }); } if (activeTarget == targets[i] && scrollTop > offsets[i] - 50 && (!offsets[i + 1] || scrollTop <= offsets[i + 1] - 50)) { // if the current target is not fixed make it fixed. if (!$("h3 a[href=" + activeTarget + "]").hasClass("active")) { $("h3 a[href=" + activeTarget + "]").attr('style', '').addClass("active"); } } } } $posts.click(function(e) { if (!this.hash) return; $('html, body').stop().animate({ scrollTop: $(this.hash).offset().top }, 500, 'linear'); processScroll(); e.preventDefault(); }); $window.scroll(processScroll).trigger("scroll"); }