aboutsummaryrefslogtreecommitdiffstats
path: root/syte/static/js/components/blog-posts.js
diff options
context:
space:
mode:
authorSamrat Man Singh <samratmansingh@gmail.com>2012-07-07 08:31:08 +0545
committerSamrat Man Singh <samratmansingh@gmail.com>2012-07-07 08:31:08 +0545
commit2ce26b4ed17e153d9834e6dd21ec0da92d71139e (patch)
tree9b59308831e99ed534f28aac51b5b236ac54ce87 /syte/static/js/components/blog-posts.js
parent705357519b7345422a003d8970d1f396579d91b2 (diff)
downloadpelican-themes-2ce26b4ed17e153d9834e6dd21ec0da92d71139e.tar.gz
Move syte-pelican to syte
Diffstat (limited to 'syte/static/js/components/blog-posts.js')
-rw-r--r--syte/static/js/components/blog-posts.js143
1 files changed, 143 insertions, 0 deletions
diff --git a/syte/static/js/components/blog-posts.js b/syte/static/js/components/blog-posts.js
new file mode 100644
index 0000000..27f8ab5
--- /dev/null
+++ b/syte/static/js/components/blog-posts.js
@@ -0,0 +1,143 @@
+
+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");
+}