post deletion

v1.18.x
Julian Lam 12 years ago
parent 4fd1244e2d
commit 156d5dce08

@ -9,7 +9,7 @@
<ul id="post-container" class="post-container container"> <ul id="post-container" class="post-container container">
<!-- BEGIN posts --> <!-- BEGIN posts -->
<li class="row {posts.deleted-class}"> <li class="row" data-pid="{posts.pid}" data-deleted="{posts.deleted}">
<div class="span1 profile-image-block visible-desktop"> <div class="span1 profile-image-block visible-desktop">
<!--<i class="icon-spinner icon-spin icon-2x pull-left"></i>--> <!--<i class="icon-spinner icon-spin icon-2x pull-left"></i>-->
<a href="/users/{posts.username}"> <a href="/users/{posts.username}">
@ -210,6 +210,14 @@
} }
}); });
} }
// Fix delete state for this thread's posts
var postEls = document.querySelectorAll('#post-container li[data-deleted]');
for(var x=0,numPosts=postEls.length;x<numPosts;x++) {
console.log(postEls[x].getAttribute('data-pid'));
if (postEls[x].getAttribute('data-deleted') === '1') toggle_post_delete_state(postEls[x].getAttribute('data-pid'));
postEls[x].removeAttribute('data-deleted');
}
}); });
$('.post-container').delegate('.edit', 'click', function(e) { $('.post-container').delegate('.edit', 'click', function(e) {
@ -218,11 +226,15 @@
}); });
$('.post-container').delegate('.delete', 'click', function(e) { $('.post-container').delegate('.delete', 'click', function(e) {
var pid = ($(this).attr('id') || $(this.parentNode).attr('id')).split('_')[1]; var pid = ($(this).attr('id') || $(this.parentNode).attr('id')).split('_')[1],
confirmDel = confirm('Delete this post?'); postEl = $(document.querySelector('#post-container li[data-pid="' + pid + '"]')),
deleteAction = !postEl.hasClass('deleted') ? true : false,
confirmDel = confirm((deleteAction ? 'Delete' : 'Restore') + ' this post?');
if (confirmDel) { if (confirmDel) {
socket.emit('api:posts.delete', { pid: pid }); deleteAction ?
socket.emit('api:posts.delete', { pid: pid }) :
socket.emit('api:posts.restore', { pid: pid });
} }
}); });
@ -320,8 +332,11 @@
}); });
socket.on('event:post_deleted', function(data) { socket.on('event:post_deleted', function(data) {
console.log(data); if (data.pid) toggle_post_delete_state(data.pid, true);
if (data.pid) set_post_delete_state(data.pid, true); });
socket.on('event:post_restored', function(data) {
if (data.pid) toggle_post_delete_state(data.pid, true);
}); });
function adjust_rep(value, pid, uid) { function adjust_rep(value, pid, uid) {
@ -495,8 +510,23 @@
} }
} }
function set_post_delete_state(pid, deleted) { function toggle_post_delete_state(pid) {
console.log('SETTING DELETE STATE: ', pid, deleted); var postEl = $(document.querySelector('#post-container li[data-pid="' + pid + '"]'));
quoteEl = $(postEl[0].querySelector('.quote')),
favEl = $(postEl[0].querySelector('.favourite')),
replyEl = $(postEl[0].querySelector('.post_reply'));
if (!postEl.hasClass('deleted')) {
quoteEl.addClass('none');
favEl.addClass('none');
replyEl.addClass('none');
} else {
quoteEl.removeClass('none');
favEl.removeClass('none');
replyEl.removeClass('none');
}
postEl.toggleClass('deleted');
} }
})(); })();
</script> </script>

@ -23,29 +23,32 @@ marked.setOptions({
function generateThread() { function generateThread() {
if (!post_data || !user_data || !thread_data || !vote_data || !viewer_data) return; if (!post_data || !user_data || !thread_data || !vote_data || !viewer_data) return;
var posts = []; var posts = [],
manage_content = viewer_data.reputation >= config.privilege_thresholds.manage_content;
for (var i=0, ii= post_data.pid.length; i<ii; i++) { for (var i=0, ii= post_data.pid.length; i<ii; i++) {
var uid = post_data.uid[i], var uid = post_data.uid[i],
pid = post_data.pid[i]; pid = post_data.pid[i];
posts.push({ if (post_data.deleted[i] === null || (post_data.deleted[i] === '1' && manage_content)) {
'pid' : pid, posts.push({
'uid' : uid, 'pid' : pid,
'content' : marked(post_data.content[i] || ''), 'uid' : uid,
'post_rep' : post_data.reputation[i] || 0, 'content' : marked(post_data.content[i] || ''),
'timestamp' : post_data.timestamp[i], 'post_rep' : post_data.reputation[i] || 0,
'relativeTime': utils.relativeTime(post_data.timestamp[i]), 'timestamp' : post_data.timestamp[i],
'username' : user_data[uid].username || 'anonymous', 'relativeTime': utils.relativeTime(post_data.timestamp[i]),
'user_rep' : user_data[uid].reputation || 0, 'username' : user_data[uid].username || 'anonymous',
'gravatar' : user_data[uid].picture, 'user_rep' : user_data[uid].reputation || 0,
'fav_star_class' : vote_data[pid] ? 'icon-star' : 'icon-star-empty', 'gravatar' : user_data[uid].picture,
'display_moderator_tools': (uid == current_user || viewer_data.reputation >= config.privilege_thresholds.manage_content) ? 'show' : 'none', 'fav_star_class' : vote_data[pid] ? 'icon-star' : 'icon-star-empty',
'edited-class': post_data.editor[i] !== null ? '' : 'none', 'display_moderator_tools': (uid == current_user || manage_content) ? 'show' : 'none',
'editor': post_data.editor[i] !== null ? user_data[post_data.editor[i]].username : '', 'edited-class': post_data.editor[i] !== null ? '' : 'none',
'relativeEditTime': post_data.editTime !== null ? utils.relativeTime(post_data.editTime[i]) : '', 'editor': post_data.editor[i] !== null ? user_data[post_data.editor[i]].username : '',
'deleted-class': post_data.deleted[i] === '1' ? 'deleted' : '' 'relativeEditTime': post_data.editTime !== null ? utils.relativeTime(post_data.editTime[i]) : '',
}); 'deleted': post_data.deleted[i] || '0'
});
}
} }
callback({ callback({
@ -331,4 +334,23 @@ marked.setOptions({
} }
}); });
} }
Posts.restore = function(uid, pid) {
RDB.mget(['pid:' + pid + ':tid', 'pid:' + pid + ':uid'], function(err, results) {
var tid = results[0],
author = results[1],
success = function() {
RDB.del('pid:' + pid + ':deleted');
io.sockets.in('topic_' + tid).emit('event:post_restored', { pid: pid });
};
if (uid === author) success();
else {
user.getUserField(uid, 'reputation', function(reputation) {
if (reputation >= config.privilege_thresholds.manage_content) success();
});
}
});
}
}(exports)); }(exports));
Loading…
Cancel
Save