X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fresources%2Fstatic%2Fjavascript%2Fsone.js;h=c9521b7b0e281c85dc3017ebb6a38d3a8e8251fa;hb=2288fe8a74e888e9d6a8b13ccbd322ca006c1cec;hp=b44f19e2822e6cf498f1ec1b53b1baf95b37d52b;hpb=1a7c78f5bf78ad39d3b3c8c32a87749750cae14b;p=Sone.git
diff --git a/src/main/resources/static/javascript/sone.js b/src/main/resources/static/javascript/sone.js
index b44f19e..c9521b7 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();
- 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);
- }
- });
+ (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));
});
}
@@ -583,7 +585,7 @@ function getStatus() {
});
/* process new posts. */
$.each(data.newPosts, function(index, value) {
- loadNewPost(value);
+ loadNewPost(value.id, value.sone, value.recipient);
});
/* process new replies. */
$.each(data.newReplies, function(index, value) {
@@ -602,6 +604,16 @@ function getStatus() {
}
/**
+ * Returns the ID of the currently logged in Sone.
+ *
+ * @return The ID of the current Sone, or an empty string if no Sone is logged
+ * in
+ */
+function getCurrentSoneId() {
+ return $("#currentSoneId").text();
+}
+
+/**
* Returns the content of the page-id attribute.
*
* @returns The page ID
@@ -670,19 +682,42 @@ 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) {
+function loadNewPost(postId, soneId, recipientId) {
+ if (hasPost(postId)) {
+ return;
+ }
+ if (!isIndexPage() && (!isViewPostPage() || (getShownPostId() != postId))) {
return;
}
$.getJSON("getPost.ajax", { "post" : postId }, function(data, textStatus) {
- if (postId in loadedPosts) {
- return;
- }
- loadedPosts[postId] = true;
if ((data != null) && data.success) {
+ if (hasPost(data.post.id)) {
+ return;
+ }
if (!isIndexPage() && !(isViewSonePage() && ((getShownSoneId() == data.post.sone) || (getShownSoneId() == data.post.recipient)))) {
return;
}
@@ -707,16 +742,15 @@ function loadNewPost(postId) {
}
function loadNewReply(replyId) {
- if (replyId in loadedReplies) {
+ if (hasReply(replyId)) {
return;
}
$.getJSON("getReply.ajax", { "reply": replyId }, function(data, textStatus) {
- if (replyId in loadedReplies) {
- return;
- }
- loadedReplies[replyId] = true;
/* 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() {
@@ -809,6 +843,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
//
@@ -821,6 +866,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) {