allow mods to delete topics
This commit is contained in:
		@@ -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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								js/topic.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								js/topic.js
									
									
									
									
									
										Normal file
									
								
							@@ -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();
 | 
			
		||||
    }
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
@@ -21,6 +21,7 @@
 | 
			
		||||
      <input type="hidden" name="is_locked" value="<%= not is_locked %>">
 | 
			
		||||
      <input class="warn" type="submit" id="lock" value="<%= is_locked and "Unlock topic" or "Lock topic" %>">
 | 
			
		||||
    </form>
 | 
			
		||||
    <button type="button" class="critical" id="topic-delete-dialog-open">Delete</button>
 | 
			
		||||
  <% end %>
 | 
			
		||||
  </div>
 | 
			
		||||
</nav>
 | 
			
		||||
@@ -70,3 +71,15 @@
 | 
			
		||||
<nav id="bottomnav">
 | 
			
		||||
  <% render("views.common.pagination", {page_count = pages, current_page = page}) %>
 | 
			
		||||
</nav>
 | 
			
		||||
<dialog id="delete-dialog">
 | 
			
		||||
  <div class=delete-dialog-inner>
 | 
			
		||||
    Are you sure you want to delete this topic?
 | 
			
		||||
    <span>
 | 
			
		||||
      <button id=topic-delete-dialog-close>Cancel</button>
 | 
			
		||||
      <button class="critical" form=topic-delete-form>Delete</button>
 | 
			
		||||
      <form id="topic-delete-form" method="post" action="<%= url_for("topic_delete", {slug = topic.slug}) %>"></form>
 | 
			
		||||
    </span>
 | 
			
		||||
  </div>
 | 
			
		||||
</dialog>
 | 
			
		||||
 | 
			
		||||
<script src="/static/js/topic.js"></script>
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,10 @@
 | 
			
		||||
  <% end %>
 | 
			
		||||
</nav>
 | 
			
		||||
 | 
			
		||||
<% if infobox then %>
 | 
			
		||||
  <% render("views.common.infobox", infobox) %>
 | 
			
		||||
<% end %>
 | 
			
		||||
 | 
			
		||||
<% if #topic_list == 0 then %>
 | 
			
		||||
  <p>There are no topics.</p>
 | 
			
		||||
<% else %>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user