popular tags display option

This commit is contained in:
Barış Soner Uşaklı 2025-02-19 19:21:24 -05:00
parent 735596af5e
commit dfa1b77c8b
4 changed files with 48 additions and 73 deletions

View file

@ -310,6 +310,7 @@ Widget.renderCategories = async function (widget) {

Widget.renderPopularTags = async function (widget) {
const numTags = widget.data.numTags || 8;
const display = widget.data.display || 'buttons';
let tags = [];
if (widget.templateData.template.category) {
tags = await topics.getCategoryTagsData(widget.templateData.cid, 0, numTags - 1);
@ -330,6 +331,7 @@ Widget.renderPopularTags = async function (widget) {

widget.html = await app.renderAsync('widgets/populartags', {
tags: tags,
display,
template: widget.templateData.template,
relative_path: nconf.get('relative_path'),
});

View file

@ -5,78 +5,30 @@
"url": "https://github.com/psychobunny/nodebb-widget-essentials",
"library": "./library.js",
"hooks": [
{
"hook": "static:app.load", "method": "init"
},
{
"hook": "filter:widgets.getWidgets", "method": "defineWidgets"
},
{
"hook": "filter:widget.render:text", "method": "renderTextWidget"
},
{
"hook": "filter:widget.render:html", "method": "renderHTMLWidget"
},
{
"hook": "filter:widget.render:search", "method": "renderSearchWidget"
},
{
"hook": "filter:widget.render:onlineusers", "method": "renderOnlineUsersWidget"
},
{
"hook": "filter:widget.render:activeusers", "method": "renderActiveUsersWidget"
},
{
"hook": "filter:widget.render:latestusers", "method": "renderLatestUsersWidget"
},
{
"hook": "filter:widget.render:topposters", "method": "renderTopPostersWidget"
},
{
"hook": "filter:widget.render:moderators", "method": "renderModeratorsWidget"
},
{
"hook": "filter:widget.render:forumstats", "method": "renderForumStatsWidget"
},
{
"hook": "filter:widget.render:recentposts", "method": "renderRecentPostsWidget"
},
{
"hook": "filter:widget.render:recenttopics", "method": "renderRecentTopicsWidget"
},
{
"hook": "filter:widget.render:recentview", "method": "renderRecentViewWidget"
},
{
"hook": "filter:widget.render:categories", "method": "renderCategories"
},
{
"hook": "filter:widget.render:populartags", "method": "renderPopularTags"
},
{
"hook": "filter:widget.render:populartopics", "method": "renderPopularTopics"
},
{
"hook": "filter:widget.render:toptopics", "method": "renderTopTopics"
},
{
"hook": "filter:widget.render:newgroups", "method": "renderNewGroups"
},
{
"hook": "filter:widget.render:mygroups", "method": "renderMyGroups"
},
{
"hook": "filter:widget.render:groupposts", "method": "renderGroupPosts"
},
{
"hook": "filter:widget.render:suggestedtopics", "method": "renderSuggestedTopics"
},
{
"hook": "filter:widget.render:userpost", "method": "renderUserPost"
},
{
"hook": "filter:widget.render:chat", "method": "renderChatRoom"
}
{ "hook": "static:app.load", "method": "init" },
{ "hook": "filter:widgets.getWidgets", "method": "defineWidgets" },
{ "hook": "filter:widget.render:text", "method": "renderTextWidget" },
{ "hook": "filter:widget.render:html", "method": "renderHTMLWidget" },
{ "hook": "filter:widget.render:search", "method": "renderSearchWidget"},
{ "hook": "filter:widget.render:onlineusers", "method": "renderOnlineUsersWidget" },
{ "hook": "filter:widget.render:activeusers", "method": "renderActiveUsersWidget" },
{ "hook": "filter:widget.render:latestusers", "method": "renderLatestUsersWidget" },
{ "hook": "filter:widget.render:topposters", "method": "renderTopPostersWidget" },
{ "hook": "filter:widget.render:moderators", "method": "renderModeratorsWidget" },
{ "hook": "filter:widget.render:forumstats", "method": "renderForumStatsWidget" },
{ "hook": "filter:widget.render:recentposts", "method": "renderRecentPostsWidget" },
{ "hook": "filter:widget.render:recenttopics", "method": "renderRecentTopicsWidget" },
{ "hook": "filter:widget.render:recentview", "method": "renderRecentViewWidget" },
{ "hook": "filter:widget.render:categories", "method": "renderCategories" },
{ "hook": "filter:widget.render:populartags", "method": "renderPopularTags" },
{ "hook": "filter:widget.render:populartopics", "method": "renderPopularTopics" },
{ "hook": "filter:widget.render:toptopics", "method": "renderTopTopics" },
{ "hook": "filter:widget.render:newgroups", "method": "renderNewGroups" },
{ "hook": "filter:widget.render:mygroups", "method": "renderMyGroups" },
{ "hook": "filter:widget.render:groupposts", "method": "renderGroupPosts" },
{ "hook": "filter:widget.render:suggestedtopics", "method": "renderSuggestedTopics" },
{ "hook": "filter:widget.render:userpost", "method": "renderUserPost" },
{ "hook": "filter:widget.render:chat", "method": "renderChatRoom" }
],
"templates": "./public/templates",
"css": [

View file

@ -2,3 +2,10 @@
<label class="form-label">Amount of Tags to display:</label>
<input type="text" class="form-control" name="numTags" placeholder="8" />
</div>
<div class="mb-3">
<label class="form-label">Display Type:</label>
<select class="form-select" name="display">
<option value="buttons">Buttons</option>
<option value="bars">Bars</option>
</select>
</div>

View file

@ -1,5 +1,6 @@
<div class="popular-tags d-flex flex-column gap-2 mb-3">
{{{ each tags }}}
{{{ if (display == "bars") }}}
{{{ each tags }}}
<div class="d-flex align-items-center gap-2">
<div class="w-75 p-1 border position-relative" style="min-width: 0;">
<div class="position-absolute bg-info opacity-25 start-0 top-0" style="width: 100%; height:100%; z-index: 0;"></div>
@ -11,6 +12,19 @@

<div class="text-center fw-bold p-1 text-end w-25 tag-topic-count border rounded">{./score}</div>
</div>
{{{ end }}}
{{{ end }}}
{{{ if (display == "buttons") }}}
<div class="tag-list row row-cols-2 gx-3 gy-2">
{{{ each tags }}}
<div>
<a href="{config.relative_path}/tags/{./valueEncoded}" data-tag="{./valueEscaped}" class="btn btn-ghost ff-base d-flex flex-column gap-1 align-items-start justify-content-start text-truncate p-2">
<div class="fw-semibold text-nowrap tag-item w-100 text-start text-truncate">{./valueEscaped}</div>
<div class="text-xs text-muted text-nowrap tag-topic-count">[[global:x-topics, {txEscape(formattedNumber(./score))}]]</div>
</a>
</div>
{{{ end }}}
</div>
{{{ end }}}
</div>
<script>