diff --git a/apps/topics.lua b/apps/topics.lua index a6cb525..51cd75b 100644 --- a/apps/topics.lua +++ b/apps/topics.lua @@ -194,4 +194,20 @@ app:post("topic_edit", "/:slug/edit", function(self) return {redirect_to = self:url_for("topic", {slug = self.params.slug})} end) +app:post("topic_delete", "/:slug/delete", function(self) + local user = util.get_logged_in_user(self) + if not user then + return {redirect_to = self:url_for("topic", {slug = self.params.slug})} + end + + if not user:is_mod() then + return {redirect_to = self:url_for("topic", {slug = self.params.slug})} + end + + local topic = Topics:find({slug = self.params.slug}) + topic:delete() + util.inject_infobox(self, "Topic deleted.") + return {redirect_to = self:url_for("all_topics")} +end) + return app diff --git a/js/topic.js b/js/topic.js new file mode 100644 index 0000000..6489843 --- /dev/null +++ b/js/topic.js @@ -0,0 +1,16 @@ +{ + const deleteDialog = document.getElementById("delete-dialog"); + const deleteDialogOpenButton = document.getElementById("topic-delete-dialog-open"); + deleteDialogOpenButton.addEventListener("click", (e) => { + deleteDialog.showModal(); + }); + const deleteDialogCloseButton = document.getElementById("topic-delete-dialog-close"); + deleteDialogCloseButton.addEventListener("click", (e) => { + deleteDialog.close(); + }) + deleteDialog.addEventListener("click", (e) => { + if (e.target === deleteDialog) { + deleteDialog.close(); + } + }) +} diff --git a/views/topics/topic.etlua b/views/topics/topic.etlua index 7785d7c..f6fde8b 100644 --- a/views/topics/topic.etlua +++ b/views/topics/topic.etlua @@ -21,6 +21,7 @@ "> + <% end %> @@ -70,3 +71,15 @@ + +
+ Are you sure you want to delete this topic? + + + +
">
+
+
+
+ + diff --git a/views/topics/topics.etlua b/views/topics/topics.etlua index 17fae1b..950e3ed 100644 --- a/views/topics/topics.etlua +++ b/views/topics/topics.etlua @@ -6,6 +6,10 @@ <% end %> +<% if infobox then %> + <% render("views.common.infobox", infobox) %> +<% end %> + <% if #topic_list == 0 then %>

There are no topics.

<% else %>