From 06604571d4009727ed1cb9c79077c6d3a69e6b9a Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 12 Dec 2022 11:35:32 -0500 Subject: [PATCH] feat: refactor post menu tools to run once instead of checking for content, allow plugins to use skeleton placeholders within --- public/src/client/topic/postTools.js | 47 +++++++++++++++++----------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/public/src/client/topic/postTools.js b/public/src/client/topic/postTools.js index 6c0c827e57..fcab43cc3c 100644 --- a/public/src/client/topic/postTools.js +++ b/public/src/client/topic/postTools.js @@ -31,32 +31,41 @@ define('forum/topic/postTools', [ }; function renderMenu() { - $('[component="topic"]').on('show.bs.dropdown', '.moderator-tools', function () { - const $this = $(this); - const dropdownMenu = $this.find('.dropdown-menu'); - if (dropdownMenu.html()) { - return; - } - const postEl = $this.parents('[data-pid]'); - const pid = postEl.attr('data-pid'); - const index = parseInt(postEl.attr('data-index'), 10); + const container = document.querySelector('[component="topic"]'); + if (!container) { + return; + } - socket.emit('posts.loadPostTools', { pid: pid, cid: ajaxify.data.cid }, async (err, data) => { - if (err) { - return alerts.error(err); + container.querySelectorAll('.moderator-tools').forEach((toolsEl) => { + toolsEl.addEventListener('show.bs.dropdown', (e) => { + const dropdownMenu = e.target.nextElementSibling; + if (!dropdownMenu) { + return; } - data.posts.display_move_tools = data.posts.display_move_tools && index !== 0; - const html = await app.parseAndTranslate('partials/topic/post-menu-list', data); - const clipboard = require('clipboard'); + const postEl = e.target.closest('[data-pid]'); + const pid = postEl.getAttribute('data-pid'); + const index = parseInt(postEl.getAttribute('data-index'), 10); - dropdownMenu.html(html); + socket.emit('posts.loadPostTools', { pid: pid, cid: ajaxify.data.cid }, async (err, data) => { + if (err) { + return alerts.error(err); + } + data.posts.display_move_tools = data.posts.display_move_tools && index !== 0; - new clipboard('[data-clipboard-text]'); + const html = await app.parseAndTranslate('partials/topic/post-menu-list', data); + const clipboard = require('clipboard'); - hooks.fire('action:post.tools.load', { - element: dropdownMenu, + $(dropdownMenu).html(html); + + new clipboard('[data-clipboard-text]'); + + hooks.fire('action:post.tools.load', { + element: $(dropdownMenu), + }); }); + }, { + once: true, }); }); }