diff options
Diffstat (limited to 'client/js/views/posts_page_view.js')
| -rw-r--r-- | client/js/views/posts_page_view.js | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/client/js/views/posts_page_view.js b/client/js/views/posts_page_view.js index c4b1988..463468a 100644 --- a/client/js/views/posts_page_view.js +++ b/client/js/views/posts_page_view.js @@ -1,6 +1,7 @@ "use strict"; const events = require("../events.js"); +const tags = require("../tags.js"); const views = require("../util/views.js"); const template = views.getTemplate("posts-page"); @@ -31,6 +32,13 @@ class PostsPageView extends events.EventTarget { ); } + const relationFlipperNode = this._getRelationFlipperNode(listItemNode); + if (relationFlipperNode) { + relationFlipperNode.addEventListener("click", e => + this._evtBulkAddRelationClick(e, post) + ); + } + const safetyFlipperNode = this._getSafetyFlipperNode(listItemNode); if (safetyFlipperNode) { for (let linkNode of safetyFlipperNode.querySelectorAll("a")) { @@ -63,6 +71,10 @@ class PostsPageView extends events.EventTarget { return listItemNode.querySelector(".safety-flipper"); } + _getRelationFlipperNode(listItemNode) { + return listItemNode.querySelector(".relation-flipper"); + } + _getDeleteFlipperNode(listItemNode) { return listItemNode.querySelector(".delete-flipper"); } @@ -92,6 +104,23 @@ class PostsPageView extends events.EventTarget { ); } + _evtBulkAddRelationClick(e, post) { + e.preventDefault(); + const linkNode = e.target; + if (linkNode.getAttribute("data-disabled")) { + return; + } + linkNode.setAttribute("data-disabled", true); + this.dispatchEvent( + new CustomEvent( + linkNode.classList.contains("related") ? "removeRelation" : "addRelation", + { + detail: { post: post } + } + ) + ); + } + _evtBulkEditSafetyClick(e, post) { e.preventDefault(); const linkNode = e.target; @@ -133,7 +162,8 @@ class PostsPageView extends events.EventTarget { if (tagFlipperNode) { let tagged = true; for (let tag of this._ctx.bulkEdit.tags) { - tagged &= post.tags.isTaggedWith(tag); + let tagData = tags.parseTagAndCategory(tag); + tagged &= post.tags.isTaggedWith(tagData.name); } tagFlipperNode.classList.toggle("tagged", tagged); } @@ -149,6 +179,12 @@ class PostsPageView extends events.EventTarget { } } + const relationFlipperNode = this._getRelationFlipperNode(listItemNode); + if (relationFlipperNode) { + let related = this._ctx.parameters.relations.includes(post.id); + relationFlipperNode.classList.toggle("related", related); + } + const deleteFlipperNode = this._getDeleteFlipperNode(listItemNode); if (deleteFlipperNode) { deleteFlipperNode.classList.toggle( |