From 08a2857c3afa6c39464fd710d4ddd55cf7c19bca Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Fri, 22 Oct 2010 22:20:13 +0200 Subject: [PATCH] Enhance all post and reply delete buttons. --- src/main/resources/i18n/sone.en.properties | 2 + src/main/resources/static/css/sone.css | 5 ++ src/main/resources/static/javascript/sone.js | 86 ++++++++++++++++++++++ src/main/resources/templates/include/head.html | 20 +++++ src/main/resources/templates/include/viewPost.html | 2 +- 5 files changed, 114 insertions(+), 1 deletion(-) diff --git a/src/main/resources/i18n/sone.en.properties b/src/main/resources/i18n/sone.en.properties index 0f99640..bce5929 100644 --- a/src/main/resources/i18n/sone.en.properties +++ b/src/main/resources/i18n/sone.en.properties @@ -171,3 +171,5 @@ WebInterface.DefaultText.SoneRequestURI=Sone Request Key WebInterface.DefaultText.FirstName=First name WebInterface.DefaultText.MiddleName=Middle name(s) WebInterface.DefaultText.LastName=Last name +WebInterface.Confirmation.DeletePostButton=Yes, delete! +WebInterface.Confirmation.DeleteReplyButton=Yes, delete! diff --git a/src/main/resources/static/css/sone.css b/src/main/resources/static/css/sone.css index 1f8e785..503555e 100644 --- a/src/main/resources/static/css/sone.css +++ b/src/main/resources/static/css/sone.css @@ -392,3 +392,8 @@ textarea { width: 130ex;; font-size: 75%; } + +#sone .confirm { + font-weight: bold !important; + color: red !important; +} diff --git a/src/main/resources/static/javascript/sone.js b/src/main/resources/static/javascript/sone.js index 3c5e6a7..45a678f 100644 --- a/src/main/resources/static/javascript/sone.js +++ b/src/main/resources/static/javascript/sone.js @@ -146,3 +146,89 @@ function watchSone(soneId) { }, 5000); })(soneId); } + +/** + * Enhances a “delete” button so that the confirmation is done on the same page. + * + * @param buttonId + * The selector of the button + * @param translationKey + * The translation key of the text to show on the button + * @param deleteCallback + * The callback that actually deletes something + */ +function enhanceDeleteButton(buttonId, translationKey, deleteCallback) { + button = $(buttonId); + (function(button) { + getTranslation(translationKey, function(translation) { + newButton = $("").addClass("confirm").hide().text(translation).click(function() { + $(this).fadeOut("slow"); + deleteCallback(); + return false; + }).insertAfter(button); + (function(button, newButton) { + button.click(function() { + button.fadeOut("slow", function() { + newButton.fadeIn("slow"); + $(document).one("click", function() { + if (this != newButton.get(0)) { + newButton.fadeOut(function() { + button.fadeIn(); + }); + } + }); + }); + return false; + }); + })(button, newButton); + }); + })(button); +} + +/** + * Enhances a post’s “delete” button. + * + * @param buttonId + * The selector of the button + * @param postId + * The ID of the post to delete + */ +function enhanceDeletePostButton(buttonId, postId) { + enhanceDeleteButton(buttonId, "WebInterface.Confirmation.DeletePostButton", function() { + $.getJSON("ajax/deletePost.ajax", { "post": postId, "formPassword": $("#sone #formPassword").text() }, function(data, textStatus) { + if (data.success) { + $("#sone .post#" + postId).slideUp(); + } else if (data.error == "invalid-post-id") { + alert("Invalid post ID given!"); + } else if (data.error == "auth-required") { + alert("You need to be logged in."); + } else if (data.error == "not-authorized") { + alert("You are not allowed to delete this post."); + } + }); + }); +} + +/** + * Enhances a reply’s “delete” button. + * + * @param buttonId + * The selector of the button + * @param replyId + * The ID of the reply to delete + */ +function enhanceDeleteReplyButton(buttonId, replyId) { + enhanceDeleteButton(buttonId, "WebInterface.Confirmation.DeleteReplyButton", function() { + $.getJSON("ajax/deleteReply.ajax", { "reply": replyId, "formPassword": $("#sone #formPassword").text() }, function(data, textStatus) { + if (data.success) { + $("#sone .reply#" + replyId).slideUp(); + } else if (data.error == "invalid-reply-id") { + alert("Invalid reply ID given!"); + } else if (data.error == "auth-required") { + alert("You need to be logged in."); + } else if (data.error == "not-authorized") { + alert("You are not allowed to delete this reply."); + } + }); + }); +} diff --git a/src/main/resources/templates/include/head.html b/src/main/resources/templates/include/head.html index fb0f546..9528ecd 100644 --- a/src/main/resources/templates/include/head.html +++ b/src/main/resources/templates/include/head.html @@ -29,6 +29,26 @@ }); + +
diff --git a/src/main/resources/templates/include/viewPost.html b/src/main/resources/templates/include/viewPost.html index 8b41fdb..5c9ef15 100644 --- a/src/main/resources/templates/include/viewPost.html +++ b/src/main/resources/templates/include/viewPost.html @@ -16,7 +16,7 @@
<%foreach post.replies reply> -
+
<% reply.text|html>
-- 2.7.4