function ajaxGet(url, data, successCallback, errorCallback) {
(function(url, data, successCallback, errorCallback) {
- $.ajax({"type": "GET", "url": url, "data": data, "dataType": "json", "success": function(data, textStatus, xmlHttpRequest) {
+ $.ajax({"cache": false, "type": "GET", "url": url, "data": data, "dataType": "json", "success": function(data, textStatus, xmlHttpRequest) {
ajaxSuccess();
if (typeof successCallback != "undefined") {
successCallback(data, textStatus);
replyElement.removeClass("hidden");
replyElement.removeClass("light");
(function(replyElement) {
- replyElement.find("input.reply-input").blur(function() {
+ replyElement.find(":input.reply-input").blur(function() {
if ($(this).hasClass("default")) {
replyElement.addClass("light");
}
replyElement.removeClass("light");
});
})(replyElement);
- textArea = replyElement.find("input.reply-input").focus().data("textarea");
+ textArea = replyElement.find(":input.reply-input").focus().data("textarea");
if (author != getCurrentSoneId()) {
textArea.val(textArea.val() + "@sone://" + author + " ");
}
$(".expand-post-text", getPostElement(this)).toggleClass("hidden");
$(".shrink-post-text", getPostElement(this)).toggleClass("hidden");
return false;
- })
+ });
});
/* ajaxify author/post links */
$(".post-status-line .permalink a", postElement).click(function() {
if (!$(".create-reply", postElement).hasClass("hidden")) {
- textArea = $("input.reply-input", postElement).focus().data("textarea");
+ textArea = $(":input.reply-input", postElement).focus().data("textarea");
$(textArea).replaceSelection($(this).attr("href"));
}
return false;
/* process reply input fields. */
getTranslation("WebInterface.DefaultText.Reply", function(text) {
- $(postElement).find("input.reply-input").each(function() {
+ $(postElement).find(":input.reply-input").each(function() {
registerInputTextareaSwap(this, text, "text", false, false);
});
});
});
/* mark everything as known on click. */
- $(postElement).click(function(event) {
- if ($(event.target).hasClass("click-to-show")) {
- return false;
- }
- markPostAsKnown(this);
- });
+ (function(postElement) {
+ $(postElement).click(function(event) {
+ if ($(event.target).hasClass("click-to-show")) {
+ return false;
+ }
+ markPostAsKnown(postElement, false);
+ });
+ })(postElement);
/* hide reply input field. */
$(postElement).find(".create-reply").addClass("hidden");
}).fadeIn();
}, 1000);
}).mouseleave(function() {
- if (currentSoneMenuId = getPostId(this)) {
+ if (currentSoneMenuId == getPostId(this)) {
clearTimeout(currentSoneMenuTimeoutHandler);
}
});
/* ajaxify author links */
$(".reply-status-line .permalink a", replyElement).click(function() {
if (!$(".create-reply", getPostElement(replyElement)).hasClass("hidden")) {
- textArea = $("input.reply-input", getPostElement(replyElement)).focus().data("textarea");
+ textArea = $(":input.reply-input", getPostElement(replyElement)).focus().data("textarea");
$(textArea).replaceSelection($(this).attr("href"));
}
return false;
}).fadeIn();
}, 1000);
}).mouseleave(function() {
- if (currentSoneMenuId = getPostId(this) + "-" + getReplyId(this)) {
+ if (currentSoneMenuId == getPostId(this) + "-" + getReplyId(this)) {
clearTimeout(currentSoneMenuTimeoutHandler);
}
});
}
notification.find("form.mark-as-read button").click(function() {
allIds = $(":input[name=id]", this.form).val().split(" ");
- for (index = 0; index < allIds.length; index += 16) {
+ for (var index = 0; index < allIds.length; index += 16) {
ids = allIds.slice(index, index + 16).join(" ");
ajaxGet("markAsKnown.ajax", {"formPassword": getFormPassword(), "type": $(":input[name=type]", this.form).val(), "id": ids});
}
}
function getStatus() {
- ajaxGet("getStatus.ajax", isViewSonePage() ? {"soneIds": getShownSoneId() } : {"loadAllSones": isKnownSonesPage()}, function(data, textStatus) {
+ ajaxGet("getStatus.ajax", isViewSonePage() ? {"soneIds": getShownSoneId() } : isKnownSonesPage() ? {"soneIds": getShownSoneIds() } : {}, function(data, textStatus) {
if ((data != null) && data.success) {
/* process Sone information. */
$.each(data.sones, function(index, value) {
if (data.notificationHash != getNotificationHash()) {
console.log("Old hash: ", getNotificationHash(), ", new hash: ", data.notificationHash);
requestNotifications();
+ /* process new posts. */
+ $.each(data.newPosts, function(index, value) {
+ loadNewPost(value.id, value.sone, value.recipient, value.time);
+ });
+ /* process new replies. */
+ $.each(data.newReplies, function(index, value) {
+ loadNewReply(value.id, value.sone, value.post, value.postSone);
+ });
}
- /* process new posts. */
- $.each(data.newPosts, function(index, value) {
- loadNewPost(value.id, value.sone, value.recipient, value.time);
- });
- /* process new replies. */
- $.each(data.newReplies, function(index, value) {
- loadNewReply(value.id, value.sone, value.post, value.postSone);
- });
/* do it again in 5 seconds. */
setTimeout(getStatus, 5000);
} else {
}
/**
+ * Returns the ID of all currently visible Sones. This is mainly used on the
+ * “Known Sones” page.
+ *
+ * @returns The ID of the currently shown Sones
+ */
+function getShownSoneIds() {
+ var soneIds = new Array();
+ $("#sone #known-sones .sone .id").each(function() {
+ soneIds.push($(this).text());
+ });
+ return soneIds.join(",");
+}
+
+/**
* Returns whether the current page is a “view post” page.
*
* @returns {Boolean} <code>true</code> if the current page is a “view post”
* request
*/
function markSoneAsKnown(soneElement, skipRequest) {
- if ($(soneElement).is(".new")) {
+ if ($(soneElement).hasClass("new")) {
$(soneElement).removeClass("new");
if ((typeof skipRequest == "undefined") || !skipRequest) {
ajaxGet("markAsKnown.ajax", {"formPassword": getFormPassword(), "type": "sone", "id": getSoneId(soneElement)});
}
$(".click-to-show", postElement).removeClass("new");
});
- markReplyAsKnown($(postElements).find(".reply"));
+ markReplyAsKnown($(postElements).find(".reply"), true);
}
function markReplyAsKnown(replyElements, skipRequest) {
$(document).ready(function() {
+ /* rip out the status update textarea. */
+ $("#sone .rip-out").each(function() {
+ var oldElement = $(this);
+ newElement = $("<input type='text'/>");
+ newElement.attr("class", oldElement.attr("class")).attr("name", oldElement.attr("name"));
+ oldElement.before(newElement).remove();
+ });
+
/* this initializes the status update input field. */
getTranslation("WebInterface.DefaultText.StatusUpdate", function(defaultText) {
registerInputTextareaSwap("#sone #update-status .status-input", defaultText, "text", false, false);
allReplies = $(this).find(".reply");
if (allReplies.length > 2) {
newHidden = false;
- for (replyIndex = 0; !newHidden && (replyIndex < (allReplies.length - 2)); ++replyIndex) {
+ for (replyIndex = 0; replyIndex < (allReplies.length - 2); ++replyIndex) {
$(allReplies[replyIndex]).addClass("hidden");
newHidden |= $(allReplies[replyIndex]).hasClass("new");
}