import net.pterodactylus.sone.web.ajax.DeletePostAjaxPage;
import net.pterodactylus.sone.web.ajax.DeleteReplyAjaxPage;
import net.pterodactylus.sone.web.ajax.FollowSoneAjaxPage;
-import net.pterodactylus.sone.web.ajax.GetPostLikesAjaxPage;
+import net.pterodactylus.sone.web.ajax.GetLikesAjaxPage;
import net.pterodactylus.sone.web.ajax.GetSoneStatusPage;
import net.pterodactylus.sone.web.ajax.GetTranslationPage;
-import net.pterodactylus.sone.web.ajax.LikePostAjaxPage;
+import net.pterodactylus.sone.web.ajax.LikeAjaxPage;
import net.pterodactylus.sone.web.ajax.UnblockSoneAjaxPage;
import net.pterodactylus.sone.web.ajax.UnfollowSoneAjaxPage;
-import net.pterodactylus.sone.web.ajax.UnlikePostAjaxPage;
+import net.pterodactylus.sone.web.ajax.UnlikeAjaxPage;
import net.pterodactylus.sone.web.page.PageToadlet;
import net.pterodactylus.sone.web.page.PageToadletFactory;
import net.pterodactylus.sone.web.page.StaticPage;
pageToadlets.add(pageToadletFactory.createPageToadlet(new UnfollowSoneAjaxPage(this)));
pageToadlets.add(pageToadletFactory.createPageToadlet(new BlockSoneAjaxPage(this)));
pageToadlets.add(pageToadletFactory.createPageToadlet(new UnblockSoneAjaxPage(this)));
- pageToadlets.add(pageToadletFactory.createPageToadlet(new LikePostAjaxPage(this)));
- pageToadlets.add(pageToadletFactory.createPageToadlet(new UnlikePostAjaxPage(this)));
- pageToadlets.add(pageToadletFactory.createPageToadlet(new GetPostLikesAjaxPage(this)));
+ pageToadlets.add(pageToadletFactory.createPageToadlet(new LikeAjaxPage(this)));
+ pageToadlets.add(pageToadletFactory.createPageToadlet(new UnlikeAjaxPage(this)));
+ pageToadlets.add(pageToadletFactory.createPageToadlet(new GetLikesAjaxPage(this)));
ToadletContainer toadletContainer = sonePlugin.pluginRespirator().getToadletContainer();
toadletContainer.getPageMaker().addNavigationCategory("/Sone/index.html", "Navigation.Menu.Name", "Navigation.Menu.Tooltip", sonePlugin);
--- /dev/null
+/*
+ * Sone - GetLikesAjaxPage.java - Copyright © 2010 David Roden
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package net.pterodactylus.sone.web.ajax;
+
+import net.pterodactylus.sone.data.Post;
+import net.pterodactylus.sone.data.Reply;
+import net.pterodactylus.sone.web.WebInterface;
+import net.pterodactylus.util.json.JsonObject;
+
+/**
+ * AJAX page that retrieves the number of “likes” a {@link Post} has.
+ *
+ * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
+ */
+public class GetLikesAjaxPage extends JsonPage {
+
+ /**
+ * Creates a new “get post likes” AJAX page.
+ *
+ * @param webInterface
+ * The Sone web interface
+ */
+ public GetLikesAjaxPage(WebInterface webInterface) {
+ super("ajax/getLikes.ajax", webInterface);
+ }
+
+ //
+ // JSONPAGE METHODS
+ //
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected JsonObject createJsonObject(Request request) {
+ String type = request.getHttpRequest().getParam("type", null);
+ String id = request.getHttpRequest().getParam(type, null);
+ if ((id == null) || (id.length() == 0)) {
+ return new JsonObject().put("success", false).put("error", "invalid-" + type + "-id");
+ }
+ if ("post".equals(type)) {
+ Post post = webInterface.core().getPost(id);
+ return new JsonObject().put("success", true).put("likes", webInterface.core().getLikes(post).size());
+ } else if ("reply".equals(type)) {
+ Reply reply = webInterface.core().getReply(id);
+ return new JsonObject().put("success", true).put("likes", webInterface.core().getLikes(reply).size());
+ }
+ return new JsonObject().put("success", false).put("error", "invalid-type");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected boolean needsFormPassword() {
+ return false;
+ }
+
+}
+++ /dev/null
-/*
- * Sone - GetPostLikesAjaxPage.java - Copyright © 2010 David Roden
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.pterodactylus.sone.web.ajax;
-
-import net.pterodactylus.sone.data.Post;
-import net.pterodactylus.sone.web.WebInterface;
-import net.pterodactylus.util.json.JsonObject;
-
-/**
- * AJAX page that retrieves the number of “likes” a {@link Post} has.
- *
- * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
- */
-public class GetPostLikesAjaxPage extends JsonPage {
-
- /**
- * Creates a new “get post likes” AJAX page.
- *
- * @param webInterface
- * The Sone web interface
- */
- public GetPostLikesAjaxPage(WebInterface webInterface) {
- super("ajax/getPostLikes.ajax", webInterface);
- }
-
- //
- // JSONPAGE METHODS
- //
-
- /**
- * {@inheritDoc}
- */
- @Override
- protected JsonObject createJsonObject(Request request) {
- String postId = request.getHttpRequest().getParam("post", null);
- if ((postId == null) || (postId.length() == 0)) {
- return new JsonObject().put("success", false).put("error", "invalid-post-id");
- }
- Post post = webInterface.core().getPost(postId);
- return new JsonObject().put("success", true).put("likes", webInterface.core().getLikes(post).size());
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- protected boolean needsFormPassword() {
- return false;
- }
-
-}
--- /dev/null
+/*
+ * Sone - LikeAjaxPage.java - Copyright © 2010 David Roden
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package net.pterodactylus.sone.web.ajax;
+
+import net.pterodactylus.sone.data.Post;
+import net.pterodactylus.sone.data.Sone;
+import net.pterodactylus.sone.web.WebInterface;
+import net.pterodactylus.util.json.JsonObject;
+
+/**
+ * AJAX page that lets the user like a {@link Post}.
+ *
+ * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
+ */
+public class LikeAjaxPage extends JsonPage {
+
+ /**
+ * Creates a new “like post” AJAX page.
+ *
+ * @param webInterface
+ */
+ public LikeAjaxPage(WebInterface webInterface) {
+ super("ajax/like.ajax", webInterface);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected JsonObject createJsonObject(Request request) {
+ String type = request.getHttpRequest().getParam("type", null);
+ String id = request.getHttpRequest().getParam(type, null);
+ if ((id == null) || (id.length() == 0)) {
+ return new JsonObject().put("success", false).put("error", "invalid-" + type + "-id");
+ }
+ Sone currentSone = getCurrentSone(request.getToadletContext());
+ if (currentSone == null) {
+ return new JsonObject().put("success", false).put("error", "auth-required");
+ }
+ if ("post".equals(type)) {
+ currentSone.addLikedPostId(id);
+ } else if ("reply".equals(type)) {
+ currentSone.addLikedReplyId(id);
+ } else {
+ return new JsonObject().put("success", false).put("error", "invalid-type");
+ }
+ return new JsonObject().put("success", true);
+ }
+
+}
+++ /dev/null
-/*
- * Sone - LikePostAjaxPage.java - Copyright © 2010 David Roden
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.pterodactylus.sone.web.ajax;
-
-import net.pterodactylus.sone.data.Post;
-import net.pterodactylus.sone.data.Sone;
-import net.pterodactylus.sone.web.WebInterface;
-import net.pterodactylus.util.json.JsonObject;
-
-/**
- * AJAX page that lets the user like a {@link Post}.
- *
- * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
- */
-public class LikePostAjaxPage extends JsonPage {
-
- /**
- * Creates a new “like post” AJAX page.
- *
- * @param webInterface
- */
- public LikePostAjaxPage(WebInterface webInterface) {
- super("ajax/likePost.ajax", webInterface);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- protected JsonObject createJsonObject(Request request) {
- String postId = request.getHttpRequest().getParam("post", null);
- if ((postId == null) || (postId.length() == 0)) {
- return new JsonObject().put("success", false).put("error", "invalid-post-id");
- }
- Sone currentSone = getCurrentSone(request.getToadletContext());
- if (currentSone == null) {
- return new JsonObject().put("success", false).put("error", "auth-required");
- }
- currentSone.addLikedPostId(postId);
- return new JsonObject().put("success", true);
- }
-
-}
--- /dev/null
+/*
+ * Sone - UnlikeAjaxPage.java - Copyright © 2010 David Roden
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package net.pterodactylus.sone.web.ajax;
+
+import net.pterodactylus.sone.data.Post;
+import net.pterodactylus.sone.data.Sone;
+import net.pterodactylus.sone.web.WebInterface;
+import net.pterodactylus.util.json.JsonObject;
+
+/**
+ * AJAX page that lets the user unlike a {@link Post}.
+ *
+ * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
+ */
+public class UnlikeAjaxPage extends JsonPage {
+
+ /**
+ * Creates a new “unlike post” AJAX page.
+ *
+ * @param webInterface
+ */
+ public UnlikeAjaxPage(WebInterface webInterface) {
+ super("ajax/unlike.ajax", webInterface);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected JsonObject createJsonObject(Request request) {
+ String type = request.getHttpRequest().getParam("type", null);
+ String id = request.getHttpRequest().getParam(type, null);
+ if ((id == null) || (id.length() == 0)) {
+ return new JsonObject().put("success", false).put("error", "invalid-" + type + "-id");
+ }
+ Sone currentSone = getCurrentSone(request.getToadletContext());
+ if (currentSone == null) {
+ return new JsonObject().put("success", false).put("error", "auth-required");
+ }
+ if ("post".equals(type)) {
+ currentSone.removeLikedPostId(id);
+ } else if ("reply".equals(type)) {
+ currentSone.removeLikedReplyId(id);
+ } else {
+ return new JsonObject().put("success", false).put("error", "invalid-type");
+ }
+ return new JsonObject().put("success", true);
+ }
+
+}
+++ /dev/null
-/*
- * Sone - UnlikePostAjaxPage.java - Copyright © 2010 David Roden
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.pterodactylus.sone.web.ajax;
-
-import net.pterodactylus.sone.data.Post;
-import net.pterodactylus.sone.data.Sone;
-import net.pterodactylus.sone.web.WebInterface;
-import net.pterodactylus.util.json.JsonObject;
-
-/**
- * AJAX page that lets the user unlike a {@link Post}.
- *
- * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
- */
-public class UnlikePostAjaxPage extends JsonPage {
-
- /**
- * Creates a new “unlike post” AJAX page.
- *
- * @param webInterface
- */
- public UnlikePostAjaxPage(WebInterface webInterface) {
- super("ajax/unlikePost.ajax", webInterface);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- protected JsonObject createJsonObject(Request request) {
- String postId = request.getHttpRequest().getParam("post", null);
- if ((postId == null) || (postId.length() == 0)) {
- return new JsonObject().put("success", false).put("error", "invalid-post-id");
- }
- Sone currentSone = getCurrentSone(request.getToadletContext());
- if (currentSone == null) {
- return new JsonObject().put("success", false).put("error", "auth-required");
- }
- currentSone.removeLikedPostId(postId);
- return new JsonObject().put("success", true);
- }
-
-}
return getPostElement(element).attr("id");
}
+function getReplyElement(element) {
+ return $(element).parents(".reply");
+}
+
+function getReplyId(element) {
+ return getReplyElement(element).attr("id");
+}
+
function likePost(postId) {
- $.getJSON("ajax/likePost.ajax", { "post" : postId, "formPassword": getFormPassword() }, function() {
+ $.getJSON("ajax/like.ajax", { "type": "post", "post" : postId, "formPassword": getFormPassword() }, function() {
$("#sone .post#" + postId + " > .status-line .like").addClass("hidden");
$("#sone .post#" + postId + " > .status-line .unlike").removeClass("hidden");
updatePostLikes(postId);
}
function unlikePost(postId) {
- $.getJSON("ajax/unlikePost.ajax", { "post" : postId, "formPassword": getFormPassword() }, function() {
+ $.getJSON("ajax/unlike.ajax", { "type": "post", "post" : postId, "formPassword": getFormPassword() }, function() {
$("#sone .post#" + postId + " > .status-line .unlike").addClass("hidden");
$("#sone .post#" + postId + " > .status-line .like").removeClass("hidden");
updatePostLikes(postId);
}
function updatePostLikes(postId) {
- $.getJSON("ajax/getPostLikes.ajax", { "post": postId }, function(data, textStatus) {
+ $.getJSON("ajax/getLikes.ajax", { "type": "post", "post": postId }, function(data, textStatus) {
if (data.success) {
$("#sone .post#" + postId + " > .status-line .likes").toggleClass("hidden", data.likes == 0)
$("#sone .post#" + postId + " > .status-line .likes span.like-count").text(data.likes);
}
});
}
+
+function likeReply(replyId) {
+ $.getJSON("ajax/like.ajax", { "type": "reply", "reply" : replyId, "formPassword": getFormPassword() }, function() {
+ $("#sone .reply#" + replyId + " .status-line .like").addClass("hidden");
+ $("#sone .reply#" + replyId + " .status-line .unlike").removeClass("hidden");
+ updateReplyLikes(replyId);
+ });
+}
+
+function unlikeReply(replyId) {
+ $.getJSON("ajax/unlike.ajax", { "type": "reply", "reply" : replyId, "formPassword": getFormPassword() }, function() {
+ $("#sone .reply#" + replyId + " .status-line .unlike").addClass("hidden");
+ $("#sone .reply#" + replyId + " .status-line .like").removeClass("hidden");
+ updateReplyLikes(replyId);
+ });
+}
+
+function updateReplyLikes(replyId) {
+ $.getJSON("ajax/getLikes.ajax", { "type": "reply", "reply": replyId }, function(data, textStatus) {
+ if (data.success) {
+ $("#sone .reply#" + replyId + " .status-line .likes").toggleClass("hidden", data.likes == 0)
+ $("#sone .reply#" + replyId + " .status-line .likes span.like-count").text(data.likes);
+ }
+ });
+}
unlikePost(getPostId(this));
return false;
});
+ $("#sone .post .reply .status-line .like").submit(function() {
+ likeReply(getReplyId(this));
+ return false;
+ });
+ $("#sone .post .reply .status-line .unlike").submit(function() {
+ unlikeReply(getReplyId(this));
+ return false;
+ });
});
</script>