summaryrefslogtreecommitdiff
path: root/client/js/views/posts_header_view.js
diff options
context:
space:
mode:
authorNeo <50623835+neobooru@users.noreply.github.com>2023-01-19 18:44:31 +0100
committerGitHub <noreply@github.com>2023-01-19 18:44:31 +0100
commite3062b1c77b52ff9fad23a279844b946d6491417 (patch)
treea037b90b2a6a2f4fb5da20a339efdd8642c7871a /client/js/views/posts_header_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_header_view.js')
-rw-r--r--client/js/views/posts_header_view.js45
1 files changed, 45 insertions, 0 deletions
diff --git a/client/js/views/posts_header_view.js b/client/js/views/posts_header_view.js
index f64060d..38a4aa9 100644
--- a/client/js/views/posts_header_view.js
+++ b/client/js/views/posts_header_view.js
@@ -141,6 +141,34 @@ class BulkTagEditor extends BulkEditor {
}
}
+class BulkDeleteEditor extends BulkEditor {
+ constructor(hostNode) {
+ super(hostNode);
+ this._hostNode.addEventListener("submit", (e) =>
+ this._evtFormSubmit(e)
+ );
+ }
+
+ _evtFormSubmit(e) {
+ e.preventDefault();
+ this.dispatchEvent(
+ new CustomEvent("deleteSelectedPosts", { detail: {} })
+ );
+ }
+
+ _evtOpenLinkClick(e) {
+ e.preventDefault();
+ this.toggleOpen(true);
+ this.dispatchEvent(new CustomEvent("open", { detail: {} }));
+ }
+
+ _evtCloseLinkClick(e) {
+ e.preventDefault();
+ this.toggleOpen(false);
+ this.dispatchEvent(new CustomEvent("close", { detail: {} }));
+ }
+}
+
class PostsHeaderView extends events.EventTarget {
constructor(ctx) {
super();
@@ -186,6 +214,13 @@ class PostsHeaderView extends events.EventTarget {
this._bulkEditors.push(this._bulkSafetyEditor);
}
+ if (this._bulkEditDeleteNode) {
+ this._bulkDeleteEditor = new BulkDeleteEditor(
+ this._bulkEditDeleteNode
+ );
+ this._bulkEditors.push(this._bulkDeleteEditor);
+ }
+
for (let editor of this._bulkEditors) {
editor.addEventListener("submit", (e) => {
this._navigate();
@@ -204,6 +239,8 @@ class PostsHeaderView extends events.EventTarget {
this._openBulkEditor(this._bulkTagEditor);
} else if (ctx.parameters.safety && this._bulkSafetyEditor) {
this._openBulkEditor(this._bulkSafetyEditor);
+ } else if (ctx.parameters.delete && this._bulkDeleteEditor) {
+ this._openBulkEditor(this._bulkDeleteEditor);
}
}
@@ -227,6 +264,10 @@ class PostsHeaderView extends events.EventTarget {
return this._hostNode.querySelector(".bulk-edit-safety");
}
+ get _bulkEditDeleteNode() {
+ return this._hostNode.querySelector(".bulk-edit-delete");
+ }
+
_openBulkEditor(editor) {
editor.toggleOpen(true);
this._hideBulkEditorsExcept(editor);
@@ -293,6 +334,10 @@ class PostsHeaderView extends events.EventTarget {
this._bulkSafetyEditor && this._bulkSafetyEditor.opened
? "1"
: null;
+ parameters.delete =
+ this._bulkDeleteEditor && this._bulkDeleteEditor.opened
+ ? "1"
+ : null;
this.dispatchEvent(
new CustomEvent("navigate", { detail: { parameters: parameters } })
);