Don’t hide replies on “view post” pages.
[Sone.git] / src / main / resources / static / javascript / sone.js
index a4ad957..bded3ce 100644 (file)
@@ -601,6 +601,65 @@ function getStatus() {
        })
 }
 
+/**
+ * Returns the content of the page-id attribute.
+ *
+ * @returns The page ID
+ */
+function getPageId() {
+       return $("#sone .page-id").text();
+}
+
+/**
+ * Returns whether the current page is the index page.
+ *
+ * @returns {Boolean} <code>true</code> if the current page is the index page,
+ *          <code>false</code> otherwise
+ */
+function isIndexPage() {
+       return getPageId() == "index";
+}
+
+/**
+ * Returns whether the current page is a “view Sone” page.
+ *
+ * @returns {Boolean} <code>true</code> if the current page is a “view Sone”
+ *          page, <code>false</code> otherwise
+ */
+function isViewSonePage() {
+       return getPageId() == "view-sone";
+}
+
+/**
+ * Returns the ID of the currently shown Sone. This will only return a sensible
+ * value if isViewSonePage() returns <code>true</code>.
+ *
+ * @returns The ID of the currently shown Sone
+ */
+function getSoneId() {
+       return $("#sone .sone-id").text();
+}
+
+/**
+ * Returns whether the current page is a “view post” page.
+ *
+ * @returns {Boolean} <code>true</code> if the current page is a “view post”
+ *          page, <code>false</code> otherwise
+ */
+function isViewPostPage() {
+       return getPageId() == "view-post";
+}
+
+/**
+ * Returns the ID of the currently shown post. This will only return a sensible
+ * value if isViewPostPage() returns <code>true</code>.
+ *
+ * @returns The ID of the currently shown post
+ */
+function getPostId() {
+       return $("#sone .post-id").text();
+}
+
 var loadedPosts = {};
 var loadedReplies = {};
 
@@ -611,6 +670,9 @@ function loadNewPost(postId) {
        loadedPosts[postId] = true;
        $.getJSON("ajax/getPost.ajax", { "post" : postId }, function(data, textStatus) {
                if ((data != null) && data.success) {
+                       if (!isIndexPage() && !(isViewSonePage() && (getSoneId() == data.post.sone))) {
+                               return;
+                       }
                        var firstOlderPost = null;
                        $("#sone .post").each(function() {
                                if (getPostTime(this) < data.post.time) {
@@ -618,10 +680,11 @@ function loadNewPost(postId) {
                                        return false;
                                }
                        });
+                       newPost = $(data.post.html).addClass("hidden");
                        if (firstOlderPost != null) {
                                newPost.insertBefore(firstOlderPost);
                        } else {
-                               $("#sone #posts").append(newPost);
+                               $("#sone .post:last").append(newPost);
                        }
                        ajaxifyPost(newPost);
                        newPost.slideDown();
@@ -646,6 +709,7 @@ function loadNewReply(replyId) {
                                                return false;
                                        }
                                });
+                               newReply = $(data.reply.html).addClass("hidden");
                                if (firstNewerReply != null) {
                                        newReply.insertBefore(firstNewerReply);
                                } else {
@@ -764,30 +828,32 @@ $(document).ready(function() {
        });
 
        /* hides all replies but the latest two. */
-       getTranslation("WebInterface.ClickToShow.Replies", function(text) {
-               $("#sone .post .replies").each(function() {
-                       allReplies = $(this).find(".reply");
-                       if (allReplies.length > 2) {
-                               newHidden = false;
-                               for (replyIndex = 0; replyIndex < (allReplies.length - 2); ++replyIndex) {
-                                       $(allReplies[replyIndex]).addClass("hidden");
-                                       newHidden |= $(allReplies[replyIndex]).hasClass("new");
-                               }
-                               clickToShowElement = $("<div></div>").addClass("click-to-show");
-                               if (newHidden) {
-                                       clickToShowElement.addClass("new");
+       if (!isViewPostPage()) {
+               getTranslation("WebInterface.ClickToShow.Replies", function(text) {
+                       $("#sone .post .replies").each(function() {
+                               allReplies = $(this).find(".reply");
+                               if (allReplies.length > 2) {
+                                       newHidden = false;
+                                       for (replyIndex = 0; replyIndex < (allReplies.length - 2); ++replyIndex) {
+                                               $(allReplies[replyIndex]).addClass("hidden");
+                                               newHidden |= $(allReplies[replyIndex]).hasClass("new");
+                                       }
+                                       clickToShowElement = $("<div></div>").addClass("click-to-show");
+                                       if (newHidden) {
+                                               clickToShowElement.addClass("new");
+                                       }
+                                       (function(clickToShowElement, allReplies, text) {
+                                               clickToShowElement.text(text);
+                                               clickToShowElement.click(function() {
+                                                       allReplies.removeClass("hidden");
+                                                       clickToShowElement.addClass("hidden");
+                                               });
+                                       })(clickToShowElement, allReplies, text);
+                                       $(allReplies[0]).before(clickToShowElement);
                                }
-                               (function(clickToShowElement, allReplies, text) {
-                                       clickToShowElement.text(text);
-                                       clickToShowElement.click(function() {
-                                               allReplies.removeClass("hidden");
-                                               clickToShowElement.addClass("hidden");
-                                       });
-                               })(clickToShowElement, allReplies, text);
-                               $(allReplies[0]).before(clickToShowElement);
-                       }
+                       });
                });
-       });
+       }
 
        /*
         * convert all “follow”, “unfollow”, “lock”, and “unlock” links to something