Mark the correct element as known.
[Sone.git] / src / main / resources / static / javascript / sone.js
index 02a02a8..b3b8fdc 100644 (file)
@@ -256,7 +256,7 @@ function getFormPassword() {
 }
 
 function getSoneElement(element) {
-       return $(element).parents(".sone");
+       return $(element).closest(".sone");
 }
 
 /**
@@ -449,9 +449,9 @@ function ajaxifyPost(postElement) {
                inputField = $(this.form).find(":input:enabled").get(0);
                postId = getPostId(this);
                text = $(inputField).val();
-               $(inputField).val("");
                postReply(postId, text, function(success, error, replyId) {
                        if (success) {
+                               $(inputField).val("");
                                loadNewReply(replyId);
                                markPostAsKnown(getPostElement(inputField));
                                $("#sone .post#" + postId + " .create-reply").addClass("hidden");
@@ -534,7 +534,7 @@ function ajaxifyReply(replyElement) {
 
        /* mark post and all replies as known on click. */
        $(replyElement).click(function() {
-               markPostAsKnown(getPostElement(replyElement));
+               markPostAsKnown(getPostElement(this));
        });
 }
 
@@ -677,10 +677,13 @@ function loadNewPost(postId) {
        if (postId in loadedPosts) {
                return;
        }
-       loadedPosts[postId] = true;
        $.getJSON("getPost.ajax", { "post" : postId }, function(data, textStatus) {
                if ((data != null) && data.success) {
-                       if (!isIndexPage() && !(isViewSonePage() && (getShownSoneId() == data.post.sone))) {
+                       if (data.post.id in loadedPosts) {
+                               return;
+                       }
+                       loadedPosts[data.post.id] = true;
+                       if (!isIndexPage() && !(isViewSonePage() && ((getShownSoneId() == data.post.sone) || (getShownSoneId() == data.post.recipient)))) {
                                return;
                        }
                        var firstOlderPost = null;
@@ -694,7 +697,7 @@ function loadNewPost(postId) {
                        if (firstOlderPost != null) {
                                newPost.insertBefore(firstOlderPost);
                        } else {
-                               $("#sone .post:last").append(newPost);
+                               $("#sone #posts").append(newPost);
                        }
                        ajaxifyPost(newPost);
                        newPost.slideDown();
@@ -707,10 +710,13 @@ function loadNewReply(replyId) {
        if (replyId in loadedReplies) {
                return;
        }
-       loadedReplies[replyId] = true;
        $.getJSON("getReply.ajax", { "reply": replyId }, function(data, textStatus) {
                /* find post. */
                if ((data != null) && data.success) {
+                       if (data.reply.id in loadedReplies) {
+                               return;
+                       }
+                       loadedReplies[data.reply.id] = true;
                        $("#sone .post#" + data.reply.postId).each(function() {
                                var firstNewerReply = null;
                                $(this).find(".replies .reply").each(function() {
@@ -732,6 +738,7 @@ function loadNewReply(replyId) {
                                ajaxifyReply(newReply);
                                newReply.slideDown();
                                setActivity();
+                               return false;
                        });
                }
        });
@@ -830,7 +837,7 @@ $(document).ready(function() {
                registerInputTextareaSwap("#sone #post-message input[name=text]", defaultText, "text", false, false);
                $("#sone #post-message").submit(function() {
                        text = $(this).find(":input:enabled").val();
-                       $.getJSON("ajax/createPost.ajax", { "formPassword": getFormPassword(), "recipient": $("#sone #sone-id").text(), "text": text }, function(data, textStatus) {
+                       $.getJSON("createPost.ajax", { "formPassword": getFormPassword(), "recipient": getShownSoneId(), "text": text }, function(data, textStatus) {
                                if ((data != null) && data.success) {
                                        loadNewPost(data.postId);
                                }