144 lines
4.7 KiB
JavaScript
144 lines
4.7 KiB
JavaScript
|
|
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");
|
|
}
|