aboutsummaryrefslogtreecommitdiff
path: root/client/js/views/posts_page_view.js
diff options
context:
space:
mode:
authorNeo2023-01-19 18:44:31 +0100
committerGitHub2023-01-19 18:44:31 +0100
commite3062b1c77b52ff9fad23a279844b946d6491417 (patch)
treea037b90b2a6a2f4fb5da20a339efdd8642c7871a /client/js/views/posts_page_view.js
parent8088ff3bbe101907c2cea3341bc4437285b3d12d (diff)
client: add bulk delete feature (#459)
This introduces a new privilege 'posts:bulk-edit:delete' which by default is given to power users.
Diffstat (limited to 'client/js/views/posts_page_view.js')
-rw-r--r--client/js/views/posts_page_view.js35
1 files changed, 35 insertions, 0 deletions
diff --git a/client/js/views/posts_page_view.js b/client/js/views/posts_page_view.js
index ba07a63..c4b1988 100644
--- a/client/js/views/posts_page_view.js
+++ b/client/js/views/posts_page_view.js
@@ -39,6 +39,13 @@ class PostsPageView extends events.EventTarget {
);
}
}
+
+ const deleteFlipperNode = this._getDeleteFlipperNode(listItemNode);
+ if (deleteFlipperNode) {
+ deleteFlipperNode.addEventListener("click", (e) =>
+ this._evtBulkToggleDeleteClick(e, post)
+ );
+ }
}
this._syncBulkEditorsHighlights();
@@ -56,6 +63,10 @@ class PostsPageView extends events.EventTarget {
return listItemNode.querySelector(".safety-flipper");
}
+ _getDeleteFlipperNode(listItemNode) {
+ return listItemNode.querySelector(".delete-flipper");
+ }
+
_evtPostChange(e) {
const listItemNode = this._postIdToListItemNode[e.detail.post.id];
for (let node of listItemNode.querySelectorAll("[data-disabled]")) {
@@ -99,6 +110,20 @@ class PostsPageView extends events.EventTarget {
);
}
+ _evtBulkToggleDeleteClick(e, post) {
+ e.preventDefault();
+ const linkNode = e.target;
+ linkNode.classList.toggle("delete");
+ this.dispatchEvent(
+ new CustomEvent("markForDeletion", {
+ detail: {
+ post,
+ delete: linkNode.classList.contains("delete"),
+ },
+ })
+ );
+ }
+
_syncBulkEditorsHighlights() {
for (let listItemNode of this._listItemNodes) {
const postId = listItemNode.getAttribute("data-post-id");
@@ -123,6 +148,16 @@ class PostsPageView extends events.EventTarget {
);
}
}
+
+ const deleteFlipperNode = this._getDeleteFlipperNode(listItemNode);
+ if (deleteFlipperNode) {
+ deleteFlipperNode.classList.toggle(
+ "delete",
+ this._ctx.bulkEdit.markedForDeletion.some(
+ (x) => x.id == postId
+ )
+ );
+ }
}
}
}

© 2015 - 2026 Jakob L. Kreuze