Add methods to post replies and get replies.
[Sone.git] / src / main / resources / static / javascript / sone.js
index 01f13e3..361fc53 100644 (file)
@@ -43,28 +43,40 @@ function addCommentLinks() {
        }
        $("#sone .post").each(function() {
                postId = $(this).attr("id");
-               commentElement = (function(postId) {
-                       var commentElement = $("<div><span>Comment</span></div>").addClass("show-reply-form").click(function() {
-                               replyElement = $("#sone .post#" + postId + " .create-reply");
-                               replyElement.removeClass("hidden");
-                               replyElement.removeClass("light");
-                               (function(replyElement) {
-                                       replyElement.find("input.reply-input").blur(function() {
-                                               if ($(this).hasClass("default")) {
-                                                       replyElement.addClass("light");
-                                               }
-                                       }).focus(function() {
-                                               replyElement.removeClass("light");
-                                       });
-                               })(replyElement);
-                               replyElement.find("input.reply-input").focus();
-                       });
-                       return commentElement;
-               })(postId);
-               $(this).find(".create-reply").addClass("hidden");
-               $(this).find(".status-line .time").each(function() {
-                       $(this).after(commentElement.clone(true));
+               addCommentLink(postId, $(this));
+       });
+}
+
+/**
+ * Adds a “comment” link to all status lines contained in the given element.
+ *
+ * @param postId
+ *            The ID of the post
+ * @param element
+ *            The element to add a “comment” link to
+ */
+function addCommentLink(postId, element) {
+       commentElement = (function(postId) {
+               var commentElement = $("<div><span>Comment</span></div>").addClass("show-reply-form").click(function() {
+                       replyElement = $("#sone .post#" + postId + " .create-reply");
+                       replyElement.removeClass("hidden");
+                       replyElement.removeClass("light");
+                       (function(replyElement) {
+                               replyElement.find("input.reply-input").blur(function() {
+                                       if ($(this).hasClass("default")) {
+                                               replyElement.addClass("light");
+                                       }
+                               }).focus(function() {
+                                       replyElement.removeClass("light");
+                               });
+                       })(replyElement);
+                       replyElement.find("input.reply-input").focus();
                });
+               return commentElement;
+       })(postId);
+       element.find(".create-reply").addClass("hidden");
+       element.find(".status-line .time").each(function() {
+               $(this).after(commentElement.clone(true));
        });
 }
 
@@ -351,3 +363,41 @@ function updateReplyLikes(replyId) {
                }
        });
 }
+
+/**
+ * Posts a reply and calls the given callback when the request finishes.
+ *
+ * @param postId
+ *            The ID of the post the reply refers to
+ * @param text
+ *            The text to post
+ * @param callbackFunction
+ *            The callback function to call when the request finishes (takes 3
+ *            parameters: success, error, replyId)
+ */
+function postReply(postId, text, callbackFunction) {
+       $.getJSON("ajax/createReply.ajax", { "formPassword" : getFormPassword(), "post" : postId, "text": text }, function(data, textStatus) {
+               if (data.success) {
+                       callbackFunction(true, null, data.reply);
+               } else {
+                       callbackFunction(false, data.error);
+               }
+       });
+}
+
+/**
+ * Requests information about the reply with the given ID.
+ *
+ * @param replyId
+ *            The ID of the reply
+ * @param callbackFunction
+ *            A callback function (parameters soneId, soneName, replyTime,
+ *            replyDisplayTime, text, html)
+ */
+function getReply(replyId, callbackFunction) {
+       $.getJSON("ajax/getReply.ajax", { "reply" : replyId }, function(data, textStatus) {
+               if (data.success) {
+                       callbackFunction(data.soneId, data.soneName, data.time, data.displayTime, data.text, data.html);
+               }
+       });
+}