From db1d04931d86d34520d2a24370e2fbef8f3ba7df Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 2 Dec 2022 17:04:06 -0500 Subject: [PATCH] refactor: fire topic tools load event once instead of checking for empty container This allows for themes to put things inside the container (e.g. skeleton placeholders) --- public/src/client/topic/threadTools.js | 34 ++++++++++++++++---------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/public/src/client/topic/threadTools.js b/public/src/client/topic/threadTools.js index ac409779e5..1cd9935960 100644 --- a/public/src/client/topic/threadTools.js +++ b/public/src/client/topic/threadTools.js @@ -187,23 +187,31 @@ define('forum/topic/threadTools', [ }; function renderMenu(container) { - container.on('show.bs.dropdown', '.thread-tools', function () { - const $this = $(this); - const dropdownMenu = $this.find('.dropdown-menu'); - if (dropdownMenu.html()) { - return; - } + container = container.get(0); + if (!container) { + return; + } - socket.emit('topics.loadTopicTools', { tid: ajaxify.data.tid, cid: ajaxify.data.cid }, function (err, data) { - if (err) { - return alerts.error(err); + container.querySelectorAll('.thread-tools').forEach((toolsEl) => { + toolsEl.addEventListener('show.bs.dropdown', (e) => { + const dropdownMenu = e.target.nextElementSibling; + if (!dropdownMenu) { + return; } - app.parseAndTranslate('partials/topic/topic-menu-list', data, function (html) { - dropdownMenu.html(html); - hooks.fire('action:topic.tools.load', { - element: dropdownMenu, + + socket.emit('topics.loadTopicTools', { tid: ajaxify.data.tid, cid: ajaxify.data.cid }, function (err, data) { + if (err) { + return alerts.error(err); + } + app.parseAndTranslate('partials/topic/topic-menu-list', data, function (html) { + $(dropdownMenu).html(html); + hooks.fire('action:topic.tools.load', { + element: $(dropdownMenu), + }); }); }); + }, { + once: true, }); }); }