commento.js: don't recursively delete comments

This commit is contained in:
Adhityaa Chandrasekar 2019-09-13 18:13:38 -07:00
parent 3ef4a79547
commit ee7875cc1e
6 changed files with 31 additions and 13 deletions

View File

@ -16,4 +16,5 @@ type comment struct {
State string `json:"state,omitempty"`
CreationDate time.Time `json:"creationDate"`
Direction int `json:"direction"`
Deleted bool `json:"deleted"`
}

View File

@ -10,8 +10,9 @@ func commentDelete(commentHex string) error {
}
statement := `
DELETE FROM comments
WHERE commentHex=$1;
UPDATE comments
SET deleted = true, markdown = '[deleted]', html = '[deleted]', commenterHex = 'anonymous'
WHERE commentHex = $1;
`
_, err := db.Exec(statement, commentHex)

View File

@ -16,6 +16,7 @@ func commentGetByCommentHex(commentHex string) (comment, error) {
parentHex,
score,
state,
deleted,
creationDate
FROM comments
WHERE comments.commentHex = $1;
@ -31,6 +32,7 @@ func commentGetByCommentHex(commentHex string) (comment, error) {
&c.ParentHex,
&c.Score,
&c.State,
&c.Deleted,
&c.CreationDate); err != nil {
// TODO: is this the only error?
return c, errorNoSuchComment

View File

@ -20,6 +20,7 @@ func commentList(commenterHex string, domain string, path string, includeUnappro
parentHex,
score,
state,
deleted,
creationDate
FROM comments
WHERE
@ -66,6 +67,7 @@ func commentList(commenterHex string, domain string, path string, includeUnappro
&c.ParentHex,
&c.Score,
&c.State,
&c.Deleted,
&c.CreationDate); err != nil {
return nil, nil, errorInternal
}

View File

@ -0,0 +1,6 @@
DROP TRIGGER IF EXISTS commentsDeleteTrigger ON comments;
DROP FUNCTION IF EXISTS commentsDeleteTriggerFunction;
ALTER TABLE comments
ADD deleted BOOLEAN NOT NULL DEFAULT false;

View File

@ -764,9 +764,9 @@
}
cur.sort(function(a, b) {
if (a.commentHex === stickyCommentHex) {
if (!a.deleted && a.commentHex === stickyCommentHex) {
return -Infinity;
} else if (b.commentHex === stickyCommentHex) {
} else if (!b.deleted && b.commentHex === stickyCommentHex) {
return Infinity;
}
@ -852,7 +852,11 @@
timeago.title = comment.creationDate.toString();
card.style["borderLeft"] = "2px solid " + color;
if (comment.deleted) {
name.innerText = "[deleted]";
} else {
name.innerText = commenter.name;
}
text.innerHTML = comment.html;
timeago.innerHTML = timeDifference(curTime, comment.creationDate);
score.innerText = scorify(comment.score);
@ -947,20 +951,22 @@
append(options, collapse);
if (!comment.deleted) {
append(options, downvote);
append(options, upvote);
}
if (comment.commenterHex === selfHex) {
append(options, edit);
} else {
} else if (!comment.deleted) {
append(options, reply);
}
if (isModerator && parentHex === "root") {
if (!comment.deleted && (isModerator && parentHex === "root")) {
append(options, sticky);
}
if (isModerator || comment.commenterHex === selfHex) {
if (!comment.deleted && (isModerator || comment.commenterHex === selfHex)) {
append(options, remove);
}
@ -968,7 +974,7 @@
append(options, approve);
}
if (!isModerator && stickyCommentHex === comment.commentHex) {
if (!comment.deleted && (!isModerator && stickyCommentHex === comment.commentHex)) {
append(options, sticky);
}
@ -1048,8 +1054,8 @@
errorHide();
}
var card = $(ID_CARD + commentHex);
remove(card);
var text = $(ID_TEXT + commentHex);
text.innerText = "[deleted]";
});
}