From 48c1de637c8371253636eea25c7c046353a3d1ed Mon Sep 17 00:00:00 2001 From: czaks Date: Sun, 10 Aug 2014 22:47:05 +0200 Subject: [PATCH] live-index.js: load new thread functionality; bugfixes --- js/live-index.js | 77 +++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 28 deletions(-) diff --git a/js/live-index.js b/js/live-index.js index db7b141d..8bce94f0 100644 --- a/js/live-index.js +++ b/js/live-index.js @@ -13,33 +13,69 @@ * */ -if (active_page == 'index' && (""+document.location).match(/\/(index\.html)?(\?|$)/)) +if (active_page == 'index' && (""+document.location).match(/\/(index\.html)?(\?|$|#)/)) +function() { + // Make jQuery respond to reverse() + $.fn.reverse = [].reverse; + var board_name = (""+document.location).match(/\/([^\/])\/[^/]*$/)[1]; var handle_one_thread = function() { - $(this).find("br.clear").before("
"+_("No new posts.")+"
") + if ($(this).find(".new-posts").length <= 0) { + $(this).find("br.clear").before("
"+_("No new posts.")+"
"); + } }; $(function() { $("hr:first").before("
"+_("No new threads.")+"
"); $('div[id^="thread_"]').each(handle_one_thread); + + setInterval(function() { + $.getJSON(configRoot+board_name+"/0.json", function(j) { + var new_threads = 0; + + j.threads.forEach(function(t) { + var s_thread = $("#thread_"+t.posts[0].no); + + if (s_thread.length) { + var my_posts = s_thread.find(".post.reply").length; + + var omitted_posts = s_thread.find(".omitted"); + if (omitted_posts.length) { + omitted_posts = omitted_posts.html().match("^[^0-9]*([0-9]+)")[1]|0; + my_posts += omitted_posts; + } + + my_posts -= t.posts[0].replies|0; + my_posts *= -1; + update_new_posts(my_posts, s_thread); + } + else { + new_threads++; + } + }); + + update_new_threads(new_threads); + }); + }, 1000); }); $(document).on("new_post", function(e, post) { if (!$(post).hasClass("reply")) { - handle_one_thread.bind(post); + handle_one_thread.call(post); } }); var update_new_threads = function(i) { var msg = i ? - fmt(_("There are {0} new threads."), [i]) : + (fmt(_("There are {0} new threads."), [i]) + " "+_("Click to expand")+".") : _("No new threads."); - if ($(".new-threads").html() != msg) + if ($(".new-threads").html() != msg) { $(".new-threads").html(msg); + $(".new-threads a").click(fetch_new_threads); + } }; var update_new_posts = function(i, th) { @@ -53,32 +89,17 @@ if (active_page == 'index' && (""+document.location).match(/\/(index\.html)?(\?| } }; - setInterval(function() { - $.getJSON(configRoot+board_name+"/0.json", function(j, x, r) { - var new_threads = 0; - - j.threads.forEach(function(t) { - var s_thread = $("#thread_"+t.posts[0].no); - - if (s_thread.length) { - var my_posts = s_thread.find(".post.reply").length; - - var omitted_posts = s_thread.find(".omitted"); - if (omitted_posts.length) { - omitted_posts = omitted_posts.html().match("^[^0-9]*([0-9]+)")[1]|0; - my_posts += omitted_posts; - } - - my_posts -= t.posts[0].replies|0; - my_posts *= -1; - update_new_posts(my_posts, s_thread); + var fetch_new_threads = function() { + $.get(""+document.location, function(data) { + $(data).find('div[id^="thread_"]').reverse().each(function() { + if ($("#"+$(this).attr("id")).length) { + // okay, the thread is there } else { - new_threads++; + var thread = $(this).insertBefore('div[id^="thread_"]:first'); + $(document).trigger("new_post", this); } }); - - update_new_threads(new_threads); }); - }, 2000); + }; }();