X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmain%2Fresources%2Fstatic%2Fjavascript%2Fsone.js;h=9aa0b8219168935b14f8293583ca024e0661422b;hb=53d4a995d90cfa5fd86c6cb7e4c04cb8ebb878f2;hp=bed9e6684cb9c8d61dd5da905555f25c64486881;hpb=c8e5397e51af306fb6db4faa6af4887c88fae9aa;p=Sone.git
diff --git a/src/main/resources/static/javascript/sone.js b/src/main/resources/static/javascript/sone.js
index bed9e66..9aa0b82 100644
--- a/src/main/resources/static/javascript/sone.js
+++ b/src/main/resources/static/javascript/sone.js
@@ -449,16 +449,18 @@ 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) {
- loadNewReply(replyId);
- markPostAsKnown(getPostElement(inputField));
- $("#sone .post#" + postId + " .create-reply").addClass("hidden");
- } else {
- alert(error);
- }
- });
+ (function(postId, text, inputField) {
+ postReply(postId, text, function(success, error, replyId) {
+ if (success) {
+ $(inputField).val("");
+ loadNewReply(replyId);
+ markPostAsKnown(getPostElement(inputField));
+ $("#sone .post#" + postId + " .create-reply").addClass("hidden");
+ } else {
+ alert(error);
+ }
+ });
+ })(postId, text, inputField);
return false;
});
@@ -534,7 +536,7 @@ function ajaxifyReply(replyElement) {
/* mark post and all replies as known on click. */
$(replyElement).click(function() {
- markPostAsKnown(getPostElement(replyElement));
+ markPostAsKnown(getPostElement(this));
});
}
@@ -670,17 +672,40 @@ function isKnownSonesPage() {
return getPageId() == "known-sones";
}
-var loadedPosts = {};
-var loadedReplies = {};
+/**
+ * Returns whether a post with the given ID exists on the current page.
+ *
+ * @param postId
+ * The post ID to check for
+ * @returns {Boolean} true
if a post with the given ID already
+ * exists on the page, false
otherwise
+ */
+function hasPost(postId) {
+ return $(".post#" + postId).length > 0;
+}
+
+/**
+ * Returns whether a reply with the given ID exists on the current page.
+ *
+ * @param replyId
+ * The reply ID to check for
+ * @returns {Boolean} true
if a reply with the given ID already
+ * exists on the page, false
otherwise
+ */
+function hasReply(replyId) {
+ return $("#sone .reply#" + replyId).length > 0;
+}
function loadNewPost(postId) {
- if (postId in loadedPosts) {
+ if (hasPost(postId)) {
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 (hasPost(data.post.id)) {
+ return;
+ }
+ if (!isIndexPage() && !(isViewSonePage() && ((getShownSoneId() == data.post.sone) || (getShownSoneId() == data.post.recipient)))) {
return;
}
var firstOlderPost = null;
@@ -694,7 +719,7 @@ function loadNewPost(postId) {
if (firstOlderPost != null) {
newPost.insertBefore(firstOlderPost);
} else {
- $("#sone .post:last").append(newPost);
+ $("#sone #posts").append(newPost);
}
ajaxifyPost(newPost);
newPost.slideDown();
@@ -704,13 +729,15 @@ function loadNewPost(postId) {
}
function loadNewReply(replyId) {
- if (replyId in loadedReplies) {
+ if (hasReply(replyId)) {
return;
}
- loadedReplies[replyId] = true;
$.getJSON("getReply.ajax", { "reply": replyId }, function(data, textStatus) {
/* find post. */
if ((data != null) && data.success) {
+ if (hasReply(data.reply.id)) {
+ return;
+ }
$("#sone .post#" + data.reply.postId).each(function() {
var firstNewerReply = null;
$(this).find(".replies .reply").each(function() {
@@ -732,6 +759,7 @@ function loadNewReply(replyId) {
ajaxifyReply(newReply);
newReply.slideDown();
setActivity();
+ return false;
});
}
});
@@ -802,6 +830,17 @@ function createNotification(id, text, dismissable) {
return notification;
}
+/**
+ * Shows the details of the notification with the given ID.
+ *
+ * @param notificationId
+ * The ID of the notification
+ */
+function showNotificationDetails(notificationId) {
+ $("#sone .notification#" + notificationId + " .text").show();
+ $("#sone .notification#" + notificationId + " .short-text").hide();
+}
+
//
// EVERYTHING BELOW HERE IS EXECUTED AFTER LOADING THE PAGE
//
@@ -814,6 +853,9 @@ $(document).ready(function() {
getTranslation("WebInterface.DefaultText.StatusUpdate", function(defaultText) {
registerInputTextareaSwap("#sone #update-status .status-input", defaultText, "text", false, false);
$("#sone #update-status").submit(function() {
+ if ($(this).find(":input.default:enabled").length > 0) {
+ return false;
+ }
text = $(this).find(":input:enabled").val();
$.getJSON("createPost.ajax", { "formPassword": getFormPassword(), "text": text }, function(data, textStatus) {
if ((data != null) && data.success) {
@@ -830,7 +872,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("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);
}