diff --git a/gulp/res/js/live.js b/gulp/res/js/live.js index 481a4b71..c444aa71 100644 --- a/gulp/res/js/live.js +++ b/gulp/res/js/live.js @@ -27,14 +27,23 @@ window.addEventListener('settingsReady', function(event) { //after domcontentloa } //add "deleted" title text to posts to show it was deleted - const deletePost = (data) { + const deletePost = (data) => { console.log('got delete post message', data); const anchor = document.getElementById(data.postId); const postContainer = anchor.nextSibling; postContainer.classList.add('deleted'); if (postContainer.classList.contains('op')) { - //OP was deleted, os every post in the thread is "deleted". hide new reply buttons (and disconnect socket) - //todo... + //OP was deleted, so every post in the thread is "deleted". + const postContainers = document.getElementsByClassName('post-container'); + Array.from(postContainers).forEach(e => e.classList.add('deleted')); + //remove new reply buttons and postform + document.getElementById('postform').remove(); + const postButtons = document.getElementsByClassName('post-button'); + Array.from(postButtons).forEach(e => e.remove()); + //and disconnect socket + if (socket.connected === true) { + socket.disconnect(); + } } }; diff --git a/models/forms/deletepost.js b/models/forms/deletepost.js index 030df902..77665922 100644 --- a/models/forms/deletepost.js +++ b/models/forms/deletepost.js @@ -4,6 +4,7 @@ const uploadDirectory = require(__dirname+'/../../helpers/files/uploadDirectory. , { remove } = require('fs-extra') , Mongo = require(__dirname+'/../../db/db.js') , { Posts, Files } = require(__dirname+'/../../db/') + , Socketio = require(__dirname+'/../../socketio.js') , quoteHandler = require(__dirname+'/../../helpers/posting/quotes.js') , { markdown } = require(__dirname+'/../../helpers/posting/markdown.js') , config = require(__dirname+'/../../config.js') @@ -18,13 +19,15 @@ module.exports = async (posts, board, all=false) => { //filter to threads const threads = posts.filter(x => x.thread == null); - if (threads.length > 0) { - //delete the html/json for threads - await Promise.all(threads.map(thread => { - remove(`${uploadDirectory}/html/${thread.board}/thread/${thread.postId}.html`) - remove(`${uploadDirectory}/json/${thread.board}/thread/${thread.postId}.json`) - })); - } + //emits not including the fetched posts from next block because those are based on threads being selected + //and we dont need to send delete message for every reply in a thread when the OP gets deleted. + const deleteEmits = posts.reduce((acc, post) => { + acc.push({ + room: `${post.board}-${post.thread || post.postId}`, + postId: post.postId, + }); + return acc; + }, []); //get posts from all threads let threadPosts = [] @@ -113,7 +116,9 @@ module.exports = async (posts, board, all=false) => { //deleting before remarkup so quotes are accurate const deletedPosts = await Posts.deleteMany(postMongoIds).then(result => result.deletedCount); //emit the deletes to thread sockets (not recent sockets [yet?]) - //Socketio.emitRoom(`board-thread`, 'deletePost', {postId:xxx}); + for (let i = 0; i < deleteEmits.length; i++) { + Socketio.emitRoom(deleteEmits[i].room, 'deletePost', { postId: deleteEmits[i].postId }); + } if (all === false) { //get posts that quoted deleted posts so we can remarkup them @@ -149,6 +154,14 @@ module.exports = async (posts, board, all=false) => { await Posts.db.bulkWrite(bulkWrites); } + if (threads.length > 0) { + //delete the html/json for threads + await Promise.all(threads.map(thread => { + remove(`${uploadDirectory}/html/${thread.board}/thread/${thread.postId}.html`) + remove(`${uploadDirectory}/json/${thread.board}/thread/${thread.postId}.json`) + })); + } + //hooray! return { action: deletedPosts > 0, message:`Deleted ${threads.length > 0 ? (threads.length + ' thread' + (threads.length > 1 ? 's' : '')) : ''} ${threads.length > 0 && deletedPosts-threads.length > 0 ? 'and' : ''} ${deletedPosts-threads.length > 0 ? (deletedPosts-threads.length + ' post' + (deletedPosts-threads.length > 1 ? 's' : '')) : ''}` }; diff --git a/views/includes/postform.pug b/views/includes/postform.pug index a5cd99e1..78d37b76 100644 --- a/views/includes/postform.pug +++ b/views/includes/postform.pug @@ -81,4 +81,4 @@ section.form-wrapper.flex-center else include ./captchaexpand.pug input#submitpost(type='submit', value=`New ${isThread ? 'Reply' : 'Thread'}`) - a.collapse.no-decoration(href='#postform') [#{isThread ? 'New Reply' : 'New Thread'}] + a.collapse.no-decoration.post-button(href='#postform') [#{isThread ? 'New Reply' : 'New Thread'}] diff --git a/views/pages/thread.pug b/views/pages/thread.pug index 99c57a68..d1261f71 100644 --- a/views/pages/thread.pug +++ b/views/pages/thread.pug @@ -53,7 +53,7 @@ block content for post in thread.replies - uids && post.userId && uids.add(post.userId) +post(post) - a.bottom-reply.no-decoration(href='#postform') [New Reply] + a.bottom-reply.no-decoration.post-button(href='#postform') [New Reply] hr(size=1) .wrapbar if modview