nodebb-theme-harmony 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc +3 -3
- package/README.md +22 -22
- package/lib/controllers.js +29 -29
- package/library.js +183 -183
- package/package.json +48 -48
- package/plugin.json +24 -24
- package/public/.eslintrc +3 -3
- package/public/admin.js +15 -15
- package/public/harmony.js +287 -287
- package/public/settings.js +31 -31
- package/renovate.json +6 -6
- package/scss/account.scss +27 -27
- package/scss/category.scss +3 -3
- package/scss/chats.scss +11 -11
- package/scss/common.scss +122 -122
- package/scss/fonts.scss +19 -19
- package/scss/groups.scss +22 -22
- package/scss/harmony.scss +24 -24
- package/scss/header.scss +15 -15
- package/scss/mixins.scss +183 -183
- package/scss/modals.scss +6 -6
- package/scss/modules/breadcrumbs.scss +15 -15
- package/scss/modules/cover.scss +102 -102
- package/scss/modules/filters.scss +7 -7
- package/scss/modules/nprogress.scss +80 -80
- package/scss/modules/paginator.scss +23 -23
- package/scss/modules/tags.scss +5 -5
- package/scss/modules/topic-navigator.scss +52 -52
- package/scss/modules/topics-list.scss +40 -40
- package/scss/modules/user-menu.scss +10 -10
- package/scss/overrides.scss +65 -65
- package/scss/sidebar.scss +188 -188
- package/scss/skins.scss +58 -58
- package/scss/status.scss +24 -24
- package/scss/topic.scss +130 -130
- package/templates/account/blocks.tpl +51 -51
- package/templates/account/categories.tpl +63 -63
- package/templates/account/consent.tpl +73 -73
- package/templates/account/edit/password.tpl +34 -34
- package/templates/account/edit/username.tpl +29 -29
- package/templates/account/edit.tpl +137 -137
- package/templates/account/followers.tpl +14 -14
- package/templates/account/following.tpl +15 -15
- package/templates/account/groups.tpl +15 -15
- package/templates/account/info.tpl +270 -270
- package/templates/account/posts.tpl +35 -35
- package/templates/account/profile.tpl +92 -92
- package/templates/account/sessions.tpl +8 -8
- package/templates/account/settings.tpl +236 -236
- package/templates/account/shares.tpl +19 -19
- package/templates/account/tags.tpl +12 -12
- package/templates/account/theme.tpl +63 -63
- package/templates/account/topics.tpl +44 -44
- package/templates/account/uploads.tpl +37 -37
- package/templates/admin/plugins/harmony.tpl +57 -57
- package/templates/categories.tpl +29 -29
- package/templates/category.tpl +72 -72
- package/templates/footer.tpl +17 -17
- package/templates/groups/details.tpl +86 -86
- package/templates/groups/list.tpl +58 -58
- package/templates/groups/members.tpl +9 -9
- package/templates/header.tpl +45 -45
- package/templates/notifications.tpl +32 -32
- package/templates/partials/account/admin-menu.tpl +36 -36
- package/templates/partials/account/category-item.tpl +22 -22
- package/templates/partials/account/footer.tpl +2 -2
- package/templates/partials/account/header.tpl +98 -98
- package/templates/partials/account/session-list.tpl +18 -18
- package/templates/partials/account/sidebar-left.tpl +116 -116
- package/templates/partials/breadcrumbs-json-ld.tpl +15 -15
- package/templates/partials/breadcrumbs.tpl +12 -12
- package/templates/partials/buttons/newTopic.tpl +22 -22
- package/templates/partials/categories/item.tpl +56 -56
- package/templates/partials/categories/lastpost.tpl +24 -24
- package/templates/partials/categories/link.tpl +4 -4
- package/templates/partials/category/subcategory.tpl +18 -18
- package/templates/partials/category/tags.tpl +3 -3
- package/templates/partials/cookie-consent.tpl +6 -6
- package/templates/partials/groups/admin.tpl +95 -95
- package/templates/partials/groups/invited.tpl +32 -32
- package/templates/partials/groups/list.tpl +15 -15
- package/templates/partials/groups/memberlist.tpl +46 -46
- package/templates/partials/groups/pending.tpl +29 -29
- package/templates/partials/groups/sidebar-left.tpl +27 -27
- package/templates/partials/header/brand.tpl +27 -27
- package/templates/partials/mobile-footer.tpl +95 -95
- package/templates/partials/notifications_list.tpl +44 -44
- package/templates/partials/paginator.tpl +46 -46
- package/templates/partials/post_bar.tpl +27 -27
- package/templates/partials/posts_list.tpl +7 -7
- package/templates/partials/posts_list_item.tpl +19 -19
- package/templates/partials/quick-search-results.tpl +46 -46
- package/templates/partials/search-filters.tpl +183 -183
- package/templates/partials/search-results.tpl +54 -54
- package/templates/partials/sidebar/chats.tpl +45 -45
- package/templates/partials/sidebar/drafts.tpl +63 -63
- package/templates/partials/sidebar/logged-in-menu.tpl +22 -22
- package/templates/partials/sidebar/logged-out-menu.tpl +44 -44
- package/templates/partials/sidebar/notifications.tpl +49 -49
- package/templates/partials/sidebar/search-mobile.tpl +28 -28
- package/templates/partials/sidebar/search.tpl +30 -30
- package/templates/partials/sidebar/user-menu.tpl +103 -103
- package/templates/partials/sidebar-left.tpl +39 -39
- package/templates/partials/sidebar-right.tpl +16 -16
- package/templates/partials/skin-switcher.tpl +50 -50
- package/templates/partials/tags_list.tpl +7 -7
- package/templates/partials/toast.tpl +19 -19
- package/templates/partials/topic/event.tpl +12 -12
- package/templates/partials/topic/navigation-post.tpl +9 -9
- package/templates/partials/topic/navigator-mobile.tpl +61 -61
- package/templates/partials/topic/navigator.tpl +26 -26
- package/templates/partials/topic/necro-post.tpl +5 -5
- package/templates/partials/topic/post-menu-list.tpl +156 -156
- package/templates/partials/topic/post-menu.tpl +4 -4
- package/templates/partials/topic/post-placeholder.tpl +14 -14
- package/templates/partials/topic/post.tpl +146 -146
- package/templates/partials/topic/quickreply.tpl +28 -28
- package/templates/partials/topic/reply-button.tpl +26 -26
- package/templates/partials/topic/selection-tooltip.tpl +2 -2
- package/templates/partials/topic/sort.tpl +27 -27
- package/templates/partials/topic/stats.tpl +14 -14
- package/templates/partials/topic/thumbs.tpl +4 -4
- package/templates/partials/topic/tools.tpl +8 -8
- package/templates/partials/topic/topic-menu-list.tpl +73 -73
- package/templates/partials/topic/watch.tpl +59 -59
- package/templates/partials/topic-filters.tpl +15 -15
- package/templates/partials/topic-list-bar.tpl +54 -54
- package/templates/partials/topic-terms.tpl +15 -15
- package/templates/partials/topics_list.tpl +131 -131
- package/templates/partials/users/item.tpl +39 -39
- package/templates/partials/users_list.tpl +4 -4
- package/templates/partials/users_list_menu.tpl +14 -14
- package/templates/popular.tpl +34 -34
- package/templates/post-queue.tpl +211 -211
- package/templates/recent.tpl +42 -42
- package/templates/search.tpl +46 -46
- package/templates/tag.tpl +34 -34
- package/templates/tags.tpl +49 -49
- package/templates/top.tpl +34 -34
- package/templates/topic.tpl +123 -123
- package/templates/unread.tpl +31 -31
- package/templates/users.tpl +39 -39
- package/templates/world.tpl +66 -66
- package/theme.json +6 -6
- package/package-lock.json +0 -2338
|
@@ -1,131 +1,131 @@
|
|
|
1
|
-
<ul component="category" class="topics-list list-unstyled" itemscope itemtype="http://www.schema.org/ItemList" data-nextstart="{nextStart}" data-set="{set}">
|
|
2
|
-
|
|
3
|
-
{{{ each topics }}}
|
|
4
|
-
<li component="category/topic" class="category-item hover-parent border-bottom py-3 py-lg-4 d-flex flex-column flex-lg-row align-items-start {function.generateTopicClass}" <!-- IMPORT partials/data/category.tpl -->>
|
|
5
|
-
<link itemprop="url" content="{config.relative_path}/topic/{./slug}" />
|
|
6
|
-
<meta itemprop="name" content="{function.stripTags, ./title}" />
|
|
7
|
-
<meta itemprop="itemListOrder" content="descending" />
|
|
8
|
-
<meta itemprop="position" content="{increment(./index, "1")}" />
|
|
9
|
-
<a id="{./index}" data-index="{./index}" component="topic/anchor"></a>
|
|
10
|
-
|
|
11
|
-
<div class="d-flex p-0 col-12 col-lg-7 gap-2 gap-lg-3 pe-1 align-items-start {{{ if config.theme.mobileTopicTeasers }}}mb-2 mb-lg-0{{{ end }}}">
|
|
12
|
-
<div class="flex-shrink-0 position-relative">
|
|
13
|
-
<a class="d-inline-block text-decoration-none avatar-tooltip" title="{./user.displayname}" href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}">
|
|
14
|
-
{buildAvatar(./user, "40px", true)}
|
|
15
|
-
</a>
|
|
16
|
-
{{{ if showSelect }}}
|
|
17
|
-
<div class="checkbox position-absolute top-100 start-50 translate-middle-x pt-2 m-0 d-none d-lg-flex" style="max-width:max-content">
|
|
18
|
-
<i component="topic/select" class="fa text-muted pointer fa-square-o p-1 hover-visible"></i>
|
|
19
|
-
</div>
|
|
20
|
-
{{{ end }}}
|
|
21
|
-
</div>
|
|
22
|
-
<div class="flex-grow-1 d-flex flex-wrap gap-1 position-relative">
|
|
23
|
-
<h3 component="topic/header" class="title text-break fs-5 fw-semibold m-0 tracking-tight w-100 {{{ if showSelect }}}me-4 me-lg-0{{{ end }}}">
|
|
24
|
-
<a class="text-reset" href="{{{ if topics.noAnchor }}}#{{{ else }}}{config.relative_path}/topic/{./slug}{{{ if ./bookmark }}}/{./bookmark}{{{ end }}}{{{ end }}}">{./title}</a>
|
|
25
|
-
</h3>
|
|
26
|
-
<span component="topic/labels" class="d-flex flex-wrap gap-1 w-100">
|
|
27
|
-
<span component="topic/watched" class="badge border border-gray-300 text-body {{{ if !./followed }}}hidden{{{ end }}}">
|
|
28
|
-
<i class="fa fa-bell-o"></i>
|
|
29
|
-
<span>[[topic:watching]]</span>
|
|
30
|
-
</span>
|
|
31
|
-
<span component="topic/ignored" class="badge border border-gray-300 text-body {{{ if !./ignored }}}hidden{{{ end }}}">
|
|
32
|
-
<i class="fa fa-eye-slash"></i>
|
|
33
|
-
<span>[[topic:ignoring]]</span>
|
|
34
|
-
</span>
|
|
35
|
-
<span component="topic/scheduled" class="badge border border-gray-300 text-body {{{ if !./scheduled }}}hidden{{{ end }}}">
|
|
36
|
-
<i class="fa fa-clock-o"></i>
|
|
37
|
-
<span>[[topic:scheduled]]</span>
|
|
38
|
-
</span>
|
|
39
|
-
<span component="topic/pinned" class="badge border border-gray-300 text-body {{{ if (./scheduled || !./pinned) }}}hidden{{{ end }}}">
|
|
40
|
-
<i class="fa fa-thumb-tack"></i>
|
|
41
|
-
<span>{{{ if !./pinExpiry }}}[[topic:pinned]]{{{ else }}}[[topic:pinned-with-expiry, {isoTimeToLocaleString(./pinExpiryISO, config.userLang)}]]{{{ end }}}</span>
|
|
42
|
-
</span>
|
|
43
|
-
<span component="topic/locked" class="badge border border-gray-300 text-body {{{ if !./locked }}}hidden{{{ end }}}">
|
|
44
|
-
<i class="fa fa-lock"></i>
|
|
45
|
-
<span>[[topic:locked]]</span>
|
|
46
|
-
</span>
|
|
47
|
-
<span component="topic/moved" class="badge border border-gray-300 text-body {{{ if (!./oldCid || (./oldCid == "-1")) }}}hidden{{{ end }}}">
|
|
48
|
-
<i class="fa fa-arrow-circle-right"></i>
|
|
49
|
-
<span>[[topic:moved]]</span>
|
|
50
|
-
</span>
|
|
51
|
-
{{{each ./icons}}}<span class="lh-1">{@value}</span>{{{end}}}
|
|
52
|
-
|
|
53
|
-
{{{ if (!template.category && !template.world) }}}
|
|
54
|
-
{function.buildCategoryLabel, ./category, "a", "border"}
|
|
55
|
-
{{{ end }}}
|
|
56
|
-
|
|
57
|
-
<span data-tid="{./tid}" component="topic/tags" class="lh-1 tag-list hidden-xs d-flex flex-wrap gap-1 {{{ if !./tags.length }}}hidden{{{ end }}}">
|
|
58
|
-
{{{ each ./tags }}}
|
|
59
|
-
<a href="{config.relative_path}/tags/{./valueEncoded}"><span class="badge border border-gray-300 fw-normal tag tag-class-{./class}" data-tag="{./value}">{./valueEscaped}</span></a>
|
|
60
|
-
{{{ end }}}
|
|
61
|
-
</span>
|
|
62
|
-
|
|
63
|
-
<div class="d-flex gap-1 d-block d-lg-none w-100">
|
|
64
|
-
<span class="badge text-body border stats text-xs text-muted">
|
|
65
|
-
<i class="fa-regular fa-fw fa-message"></i>
|
|
66
|
-
<span component="topic/post-count" class="fw-normal">{humanReadableNumber(./postcount, 0)}</span>
|
|
67
|
-
</span>
|
|
68
|
-
|
|
69
|
-
<a href="{config.relative_path}/topic/{./slug}{{{ if (./teaser.timestampISO && !config.theme.mobileTopicTeasers) }}}/{./teaser.index}{{{ end }}}" class="border badge bg-transparent text-muted fw-normal timeago" title="{{{ if (./teaser.timestampISO && !config.theme.mobileTopicTeasers) }}}{./teaser.timestampISO}{{{ else }}}{./timestampISO}{{{ end }}}"></a>
|
|
70
|
-
</div>
|
|
71
|
-
|
|
72
|
-
<a href="{config.relative_path}/topic/{./slug}" class="d-none d-lg-block badge bg-transparent text-muted fw-normal timeago" title="{./timestampISO}"></a>
|
|
73
|
-
</span>
|
|
74
|
-
{{{ if showSelect }}}
|
|
75
|
-
<div class="checkbox position-absolute top-0 end-0 m-0 d-flex d-lg-none" style="max-width:max-content">
|
|
76
|
-
<i component="topic/select" class="fa fa-square-o text-muted pointer p-1"></i>
|
|
77
|
-
</div>
|
|
78
|
-
{{{ end }}}
|
|
79
|
-
</div>
|
|
80
|
-
{{{ if ./thumbs.length }}}
|
|
81
|
-
<a class="topic-thumbs position-relative text-decoration-none flex-shrink-0 d-none d-xl-block" href="{config.relative_path}/topic/{./slug}{{{ if ./bookmark }}}/{./bookmark}{{{ end }}}" aria-label="[[topic:thumb-image]]">
|
|
82
|
-
<img class="topic-thumb rounded-1 bg-light" style="width:auto;max-width: 5.33rem;height: 3.33rem;object-fit: contain;" src="{./thumbs.0.url}" alt=""/>
|
|
83
|
-
<span data-numthumbs="{./thumbs.length}" class="px-1 position-absolute top-0 start-100 translate-middle badge rounded text-bg-info" style="z-index: 1;">+{increment(./thumbs.length, "-1")}</span>
|
|
84
|
-
</a>
|
|
85
|
-
{{{ end }}}
|
|
86
|
-
</div>
|
|
87
|
-
|
|
88
|
-
<div class="d-flex p-0 col-lg-5 col-12 align-content-stretch">
|
|
89
|
-
<div class="meta stats d-none d-lg-grid col-6 gap-1 pe-2 text-muted" style="grid-template-columns: 1fr 1fr 1fr;">
|
|
90
|
-
{{{ if !reputation:disabled }}}
|
|
91
|
-
<div class="stats-votes card card-header border-0 p-2 overflow-hidden rounded-1 d-flex flex-column align-items-center">
|
|
92
|
-
<span class="fs-5 ff-secondary lh-1" title="{./votes}">{humanReadableNumber(./votes, 0)}</span>
|
|
93
|
-
<span class="d-none d-xl-flex text-lowercase text-xs">[[global:votes]]</span>
|
|
94
|
-
<i class="d-xl-none fa fa-fw text-xs text-muted opacity-75 fa-chevron-up"></i>
|
|
95
|
-
</div>
|
|
96
|
-
{{{ end }}}
|
|
97
|
-
<div class="stats-postcount card card-header border-0 p-2 overflow-hidden rounded-1 d-flex flex-column align-items-center">
|
|
98
|
-
<span class="fs-5 ff-secondary lh-1" title="{./postcount}">{humanReadableNumber(./postcount, 0)}</span>
|
|
99
|
-
<span class="d-none d-xl-flex text-lowercase text-xs">[[global:posts]]</span>
|
|
100
|
-
<i class="d-xl-none fa-regular fa-fw text-xs text-muted opacity-75 fa-message"></i>
|
|
101
|
-
</div>
|
|
102
|
-
<div class="stats-viewcount card card-header border-0 p-2 overflow-hidden rounded-1 d-flex flex-column align-items-center">
|
|
103
|
-
<span class="fs-5 ff-secondary lh-1" title="{./viewcount}">{humanReadableNumber(./viewcount, 0)}</span>
|
|
104
|
-
<span class="d-none d-xl-flex text-lowercase text-xs">[[global:views]]</span>
|
|
105
|
-
<i class="d-xl-none fa fa-fw text-xs text-muted opacity-75 fa-eye"></i>
|
|
106
|
-
</div>
|
|
107
|
-
</div>
|
|
108
|
-
<div component="topic/teaser" class="meta teaser col-lg-6 col-12 {{{ if !config.theme.mobileTopicTeasers }}}d-none d-lg-block{{{ end }}}">
|
|
109
|
-
<div class="lastpost border-start border-2 lh-sm h-100 d-flex flex-column gap-1" style="border-color: {./category.bgColor}!important;">
|
|
110
|
-
{{{ if ./unreplied }}}
|
|
111
|
-
<div class="ps-2 text-xs">
|
|
112
|
-
[[category:no-replies]]
|
|
113
|
-
</div>
|
|
114
|
-
{{{ else }}}
|
|
115
|
-
{{{ if ./teaser.pid }}}
|
|
116
|
-
<div class="ps-2">
|
|
117
|
-
<a href="{{{ if ./teaser.user.userslug }}}{config.relative_path}/user/{./teaser.user.userslug}{{{ else }}}#{{{ end }}}" class="text-decoration-none avatar-tooltip" title="{./teaser.user.displayname}">{buildAvatar(./teaser.user, "18px", true)}</a>
|
|
118
|
-
<a class="permalink text-muted timeago text-xs" href="{config.relative_path}/topic/{./slug}/{./teaser.index}" title="{./teaser.timestampISO}" aria-label="[[global:lastpost]]"></a>
|
|
119
|
-
</div>
|
|
120
|
-
<div class="post-content text-xs ps-2 line-clamp-sm-2 lh-sm text-break position-relative flex-fill">
|
|
121
|
-
<a class="stretched-link" tabindex="-1" href="{config.relative_path}/topic/{./slug}/{./teaser.index}" aria-label="[[global:lastpost]]"></a>
|
|
122
|
-
{./teaser.content}
|
|
123
|
-
</div>
|
|
124
|
-
{{{ end }}}
|
|
125
|
-
{{{ end }}}
|
|
126
|
-
</div>
|
|
127
|
-
</div>
|
|
128
|
-
</div>
|
|
129
|
-
</li>
|
|
130
|
-
{{{end}}}
|
|
131
|
-
</ul>
|
|
1
|
+
<ul component="category" class="topics-list list-unstyled" itemscope itemtype="http://www.schema.org/ItemList" data-nextstart="{nextStart}" data-set="{set}">
|
|
2
|
+
|
|
3
|
+
{{{ each topics }}}
|
|
4
|
+
<li component="category/topic" class="category-item hover-parent border-bottom py-3 py-lg-4 d-flex flex-column flex-lg-row align-items-start {function.generateTopicClass}" <!-- IMPORT partials/data/category.tpl -->>
|
|
5
|
+
<link itemprop="url" content="{config.relative_path}/topic/{./slug}" />
|
|
6
|
+
<meta itemprop="name" content="{function.stripTags, ./title}" />
|
|
7
|
+
<meta itemprop="itemListOrder" content="descending" />
|
|
8
|
+
<meta itemprop="position" content="{increment(./index, "1")}" />
|
|
9
|
+
<a id="{./index}" data-index="{./index}" component="topic/anchor"></a>
|
|
10
|
+
|
|
11
|
+
<div class="d-flex p-0 col-12 col-lg-7 gap-2 gap-lg-3 pe-1 align-items-start {{{ if config.theme.mobileTopicTeasers }}}mb-2 mb-lg-0{{{ end }}}">
|
|
12
|
+
<div class="flex-shrink-0 position-relative">
|
|
13
|
+
<a class="d-inline-block text-decoration-none avatar-tooltip" title="{./user.displayname}" href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}">
|
|
14
|
+
{buildAvatar(./user, "40px", true)}
|
|
15
|
+
</a>
|
|
16
|
+
{{{ if showSelect }}}
|
|
17
|
+
<div class="checkbox position-absolute top-100 start-50 translate-middle-x pt-2 m-0 d-none d-lg-flex" style="max-width:max-content">
|
|
18
|
+
<i component="topic/select" class="fa text-muted pointer fa-square-o p-1 hover-visible"></i>
|
|
19
|
+
</div>
|
|
20
|
+
{{{ end }}}
|
|
21
|
+
</div>
|
|
22
|
+
<div class="flex-grow-1 d-flex flex-wrap gap-1 position-relative">
|
|
23
|
+
<h3 component="topic/header" class="title text-break fs-5 fw-semibold m-0 tracking-tight w-100 {{{ if showSelect }}}me-4 me-lg-0{{{ end }}}">
|
|
24
|
+
<a class="text-reset" href="{{{ if topics.noAnchor }}}#{{{ else }}}{config.relative_path}/topic/{./slug}{{{ if ./bookmark }}}/{./bookmark}{{{ end }}}{{{ end }}}">{./title}</a>
|
|
25
|
+
</h3>
|
|
26
|
+
<span component="topic/labels" class="d-flex flex-wrap gap-1 w-100">
|
|
27
|
+
<span component="topic/watched" class="badge border border-gray-300 text-body {{{ if !./followed }}}hidden{{{ end }}}">
|
|
28
|
+
<i class="fa fa-bell-o"></i>
|
|
29
|
+
<span>[[topic:watching]]</span>
|
|
30
|
+
</span>
|
|
31
|
+
<span component="topic/ignored" class="badge border border-gray-300 text-body {{{ if !./ignored }}}hidden{{{ end }}}">
|
|
32
|
+
<i class="fa fa-eye-slash"></i>
|
|
33
|
+
<span>[[topic:ignoring]]</span>
|
|
34
|
+
</span>
|
|
35
|
+
<span component="topic/scheduled" class="badge border border-gray-300 text-body {{{ if !./scheduled }}}hidden{{{ end }}}">
|
|
36
|
+
<i class="fa fa-clock-o"></i>
|
|
37
|
+
<span>[[topic:scheduled]]</span>
|
|
38
|
+
</span>
|
|
39
|
+
<span component="topic/pinned" class="badge border border-gray-300 text-body {{{ if (./scheduled || !./pinned) }}}hidden{{{ end }}}">
|
|
40
|
+
<i class="fa fa-thumb-tack"></i>
|
|
41
|
+
<span>{{{ if !./pinExpiry }}}[[topic:pinned]]{{{ else }}}[[topic:pinned-with-expiry, {isoTimeToLocaleString(./pinExpiryISO, config.userLang)}]]{{{ end }}}</span>
|
|
42
|
+
</span>
|
|
43
|
+
<span component="topic/locked" class="badge border border-gray-300 text-body {{{ if !./locked }}}hidden{{{ end }}}">
|
|
44
|
+
<i class="fa fa-lock"></i>
|
|
45
|
+
<span>[[topic:locked]]</span>
|
|
46
|
+
</span>
|
|
47
|
+
<span component="topic/moved" class="badge border border-gray-300 text-body {{{ if (!./oldCid || (./oldCid == "-1")) }}}hidden{{{ end }}}">
|
|
48
|
+
<i class="fa fa-arrow-circle-right"></i>
|
|
49
|
+
<span>[[topic:moved]]</span>
|
|
50
|
+
</span>
|
|
51
|
+
{{{each ./icons}}}<span class="lh-1">{@value}</span>{{{end}}}
|
|
52
|
+
|
|
53
|
+
{{{ if (!template.category && !template.world) }}}
|
|
54
|
+
{function.buildCategoryLabel, ./category, "a", "border"}
|
|
55
|
+
{{{ end }}}
|
|
56
|
+
|
|
57
|
+
<span data-tid="{./tid}" component="topic/tags" class="lh-1 tag-list hidden-xs d-flex flex-wrap gap-1 {{{ if !./tags.length }}}hidden{{{ end }}}">
|
|
58
|
+
{{{ each ./tags }}}
|
|
59
|
+
<a href="{config.relative_path}/tags/{./valueEncoded}"><span class="badge border border-gray-300 fw-normal tag tag-class-{./class}" data-tag="{./value}">{./valueEscaped}</span></a>
|
|
60
|
+
{{{ end }}}
|
|
61
|
+
</span>
|
|
62
|
+
|
|
63
|
+
<div class="d-flex gap-1 d-block d-lg-none w-100">
|
|
64
|
+
<span class="badge text-body border stats text-xs text-muted">
|
|
65
|
+
<i class="fa-regular fa-fw fa-message"></i>
|
|
66
|
+
<span component="topic/post-count" class="fw-normal">{humanReadableNumber(./postcount, 0)}</span>
|
|
67
|
+
</span>
|
|
68
|
+
|
|
69
|
+
<a href="{config.relative_path}/topic/{./slug}{{{ if (./teaser.timestampISO && !config.theme.mobileTopicTeasers) }}}/{./teaser.index}{{{ end }}}" class="border badge bg-transparent text-muted fw-normal timeago" title="{{{ if (./teaser.timestampISO && !config.theme.mobileTopicTeasers) }}}{./teaser.timestampISO}{{{ else }}}{./timestampISO}{{{ end }}}"></a>
|
|
70
|
+
</div>
|
|
71
|
+
|
|
72
|
+
<a href="{config.relative_path}/topic/{./slug}" class="d-none d-lg-block badge bg-transparent text-muted fw-normal timeago" title="{./timestampISO}"></a>
|
|
73
|
+
</span>
|
|
74
|
+
{{{ if showSelect }}}
|
|
75
|
+
<div class="checkbox position-absolute top-0 end-0 m-0 d-flex d-lg-none" style="max-width:max-content">
|
|
76
|
+
<i component="topic/select" class="fa fa-square-o text-muted pointer p-1"></i>
|
|
77
|
+
</div>
|
|
78
|
+
{{{ end }}}
|
|
79
|
+
</div>
|
|
80
|
+
{{{ if ./thumbs.length }}}
|
|
81
|
+
<a class="topic-thumbs position-relative text-decoration-none flex-shrink-0 d-none d-xl-block" href="{config.relative_path}/topic/{./slug}{{{ if ./bookmark }}}/{./bookmark}{{{ end }}}" aria-label="[[topic:thumb-image]]">
|
|
82
|
+
<img class="topic-thumb rounded-1 bg-light" style="width:auto;max-width: 5.33rem;height: 3.33rem;object-fit: contain;" src="{./thumbs.0.url}" alt=""/>
|
|
83
|
+
<span data-numthumbs="{./thumbs.length}" class="px-1 position-absolute top-0 start-100 translate-middle badge rounded text-bg-info" style="z-index: 1;">+{increment(./thumbs.length, "-1")}</span>
|
|
84
|
+
</a>
|
|
85
|
+
{{{ end }}}
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
<div class="d-flex p-0 col-lg-5 col-12 align-content-stretch">
|
|
89
|
+
<div class="meta stats d-none d-lg-grid col-6 gap-1 pe-2 text-muted" style="grid-template-columns: 1fr 1fr 1fr;">
|
|
90
|
+
{{{ if !reputation:disabled }}}
|
|
91
|
+
<div class="stats-votes card card-header border-0 p-2 overflow-hidden rounded-1 d-flex flex-column align-items-center">
|
|
92
|
+
<span class="fs-5 ff-secondary lh-1" title="{./votes}">{humanReadableNumber(./votes, 0)}</span>
|
|
93
|
+
<span class="d-none d-xl-flex text-lowercase text-xs">[[global:votes]]</span>
|
|
94
|
+
<i class="d-xl-none fa fa-fw text-xs text-muted opacity-75 fa-chevron-up"></i>
|
|
95
|
+
</div>
|
|
96
|
+
{{{ end }}}
|
|
97
|
+
<div class="stats-postcount card card-header border-0 p-2 overflow-hidden rounded-1 d-flex flex-column align-items-center">
|
|
98
|
+
<span class="fs-5 ff-secondary lh-1" title="{./postcount}">{humanReadableNumber(./postcount, 0)}</span>
|
|
99
|
+
<span class="d-none d-xl-flex text-lowercase text-xs">[[global:posts]]</span>
|
|
100
|
+
<i class="d-xl-none fa-regular fa-fw text-xs text-muted opacity-75 fa-message"></i>
|
|
101
|
+
</div>
|
|
102
|
+
<div class="stats-viewcount card card-header border-0 p-2 overflow-hidden rounded-1 d-flex flex-column align-items-center">
|
|
103
|
+
<span class="fs-5 ff-secondary lh-1" title="{./viewcount}">{humanReadableNumber(./viewcount, 0)}</span>
|
|
104
|
+
<span class="d-none d-xl-flex text-lowercase text-xs">[[global:views]]</span>
|
|
105
|
+
<i class="d-xl-none fa fa-fw text-xs text-muted opacity-75 fa-eye"></i>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
<div component="topic/teaser" class="meta teaser col-lg-6 col-12 {{{ if !config.theme.mobileTopicTeasers }}}d-none d-lg-block{{{ end }}}">
|
|
109
|
+
<div class="lastpost border-start border-2 lh-sm h-100 d-flex flex-column gap-1" style="border-color: {./category.bgColor}!important;">
|
|
110
|
+
{{{ if ./unreplied }}}
|
|
111
|
+
<div class="ps-2 text-xs">
|
|
112
|
+
[[category:no-replies]]
|
|
113
|
+
</div>
|
|
114
|
+
{{{ else }}}
|
|
115
|
+
{{{ if ./teaser.pid }}}
|
|
116
|
+
<div class="ps-2">
|
|
117
|
+
<a href="{{{ if ./teaser.user.userslug }}}{config.relative_path}/user/{./teaser.user.userslug}{{{ else }}}#{{{ end }}}" class="text-decoration-none avatar-tooltip" title="{./teaser.user.displayname}">{buildAvatar(./teaser.user, "18px", true)}</a>
|
|
118
|
+
<a class="permalink text-muted timeago text-xs" href="{config.relative_path}/topic/{./slug}/{./teaser.index}" title="{./teaser.timestampISO}" aria-label="[[global:lastpost]]"></a>
|
|
119
|
+
</div>
|
|
120
|
+
<div class="post-content text-xs ps-2 line-clamp-sm-2 lh-sm text-break position-relative flex-fill">
|
|
121
|
+
<a class="stretched-link" tabindex="-1" href="{config.relative_path}/topic/{./slug}/{./teaser.index}" aria-label="[[global:lastpost]]"></a>
|
|
122
|
+
{./teaser.content}
|
|
123
|
+
</div>
|
|
124
|
+
{{{ end }}}
|
|
125
|
+
{{{ end }}}
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
|
+
</div>
|
|
129
|
+
</li>
|
|
130
|
+
{{{end}}}
|
|
131
|
+
</ul>
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
<div>
|
|
2
|
-
<a href="{config.relative_path}/user/{./userslug}" class="btn btn-ghost gap-2 ff-base d-flex align-items-start justify-content-start p-2 text-start">
|
|
3
|
-
{buildAvatar(@value, "48px", true, "flex-shrink-0")}
|
|
4
|
-
<div class="d-flex flex-column gap-1 text-truncate">
|
|
5
|
-
<div class="fw-semibold text-truncate" title="{./displayname}">{./displayname}</div>
|
|
6
|
-
<div class="text-xs text-muted text-truncate">@{./username}</div>
|
|
7
|
-
|
|
8
|
-
{{{ if section_online }}}
|
|
9
|
-
<div class="text-xs text-muted text-truncate">
|
|
10
|
-
<span class="timeago" title="{./lastonlineISO}"></span>
|
|
11
|
-
</div>
|
|
12
|
-
{{{ end }}}
|
|
13
|
-
|
|
14
|
-
{{{ if section_joindate }}}
|
|
15
|
-
<div class="text-xs text-muted text-truncate">
|
|
16
|
-
<span class="timeago" title="{./joindateISO}"></span>
|
|
17
|
-
</div>
|
|
18
|
-
{{{ end }}}
|
|
19
|
-
|
|
20
|
-
{{{ if section_sort-reputation }}}
|
|
21
|
-
<div class="text-xs text-muted text-truncate">
|
|
22
|
-
<span>{formattedNumber(./reputation)}</span>
|
|
23
|
-
</div>
|
|
24
|
-
{{{ end }}}
|
|
25
|
-
|
|
26
|
-
{{{ if section_sort-posts }}}
|
|
27
|
-
<div class="text-xs text-muted text-truncate">
|
|
28
|
-
<span>{formattedNumber(./postcount)}</span>
|
|
29
|
-
</div>
|
|
30
|
-
{{{ end }}}
|
|
31
|
-
|
|
32
|
-
{{{ if section_flagged }}}
|
|
33
|
-
<div class="text-xs text-muted text-truncate">
|
|
34
|
-
<span>{formattedNumber(./flags)}</span>
|
|
35
|
-
</div>
|
|
36
|
-
{{{ end }}}
|
|
37
|
-
</div>
|
|
38
|
-
</a>
|
|
39
|
-
</div>
|
|
1
|
+
<div>
|
|
2
|
+
<a href="{config.relative_path}/user/{./userslug}" class="btn btn-ghost gap-2 ff-base d-flex align-items-start justify-content-start p-2 text-start">
|
|
3
|
+
{buildAvatar(@value, "48px", true, "flex-shrink-0")}
|
|
4
|
+
<div class="d-flex flex-column gap-1 text-truncate">
|
|
5
|
+
<div class="fw-semibold text-truncate" title="{./displayname}">{./displayname}</div>
|
|
6
|
+
<div class="text-xs text-muted text-truncate">@{./username}</div>
|
|
7
|
+
|
|
8
|
+
{{{ if section_online }}}
|
|
9
|
+
<div class="text-xs text-muted text-truncate">
|
|
10
|
+
<span class="timeago" title="{./lastonlineISO}"></span>
|
|
11
|
+
</div>
|
|
12
|
+
{{{ end }}}
|
|
13
|
+
|
|
14
|
+
{{{ if section_joindate }}}
|
|
15
|
+
<div class="text-xs text-muted text-truncate">
|
|
16
|
+
<span class="timeago" title="{./joindateISO}"></span>
|
|
17
|
+
</div>
|
|
18
|
+
{{{ end }}}
|
|
19
|
+
|
|
20
|
+
{{{ if section_sort-reputation }}}
|
|
21
|
+
<div class="text-xs text-muted text-truncate">
|
|
22
|
+
<span>{formattedNumber(./reputation)}</span>
|
|
23
|
+
</div>
|
|
24
|
+
{{{ end }}}
|
|
25
|
+
|
|
26
|
+
{{{ if section_sort-posts }}}
|
|
27
|
+
<div class="text-xs text-muted text-truncate">
|
|
28
|
+
<span>{formattedNumber(./postcount)}</span>
|
|
29
|
+
</div>
|
|
30
|
+
{{{ end }}}
|
|
31
|
+
|
|
32
|
+
{{{ if section_flagged }}}
|
|
33
|
+
<div class="text-xs text-muted text-truncate">
|
|
34
|
+
<span>{formattedNumber(./flags)}</span>
|
|
35
|
+
</div>
|
|
36
|
+
{{{ end }}}
|
|
37
|
+
</div>
|
|
38
|
+
</a>
|
|
39
|
+
</div>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
<div id="users-container" class="users-container row row-cols-2 row-cols-lg-3 row-cols-xl-4 g-4">
|
|
2
|
-
{{{ each users }}}
|
|
3
|
-
<!-- IMPORT partials/users/item.tpl -->
|
|
4
|
-
{{{ end }}}
|
|
1
|
+
<div id="users-container" class="users-container row row-cols-2 row-cols-lg-3 row-cols-xl-4 g-4">
|
|
2
|
+
{{{ each users }}}
|
|
3
|
+
<!-- IMPORT partials/users/item.tpl -->
|
|
4
|
+
{{{ end }}}
|
|
5
5
|
</div>
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
<div component="user/list/menu" class="text-sm d-flex flex-wrap align-items-center gap-2">
|
|
2
|
-
<a class="btn btn-ghost btn-sm ff-secondary fw-semibold" href="{config.relative_path}/users?section=online">[[global:online]]</a>
|
|
3
|
-
|
|
4
|
-
<a class="btn btn-ghost btn-sm ff-secondary fw-semibold" href="{config.relative_path}/users?section=sort-posts">[[users:top-posters]]</a>
|
|
5
|
-
|
|
6
|
-
{{{ if !reputation:disabled }}}
|
|
7
|
-
<a class="btn btn-ghost btn-sm ff-secondary fw-semibold" href="{config.relative_path}/users?section=sort-reputation">[[users:most-reputation]]</a>
|
|
8
|
-
{{{ end }}}
|
|
9
|
-
|
|
10
|
-
{{{ if isAdminOrGlobalMod }}}
|
|
11
|
-
<a class="btn btn-ghost btn-sm ff-secondary fw-semibold" href="{config.relative_path}/users?section=flagged">[[users:most-flags]]</a>
|
|
12
|
-
|
|
13
|
-
<a class="btn btn-ghost btn-sm ff-secondary fw-semibold" href="{config.relative_path}/users?section=banned">[[user:banned]]</a>
|
|
14
|
-
{{{ end }}}
|
|
1
|
+
<div component="user/list/menu" class="text-sm d-flex flex-wrap align-items-center gap-2">
|
|
2
|
+
<a class="btn btn-ghost btn-sm ff-secondary fw-semibold" href="{config.relative_path}/users?section=online">[[global:online]]</a>
|
|
3
|
+
|
|
4
|
+
<a class="btn btn-ghost btn-sm ff-secondary fw-semibold" href="{config.relative_path}/users?section=sort-posts">[[users:top-posters]]</a>
|
|
5
|
+
|
|
6
|
+
{{{ if !reputation:disabled }}}
|
|
7
|
+
<a class="btn btn-ghost btn-sm ff-secondary fw-semibold" href="{config.relative_path}/users?section=sort-reputation">[[users:most-reputation]]</a>
|
|
8
|
+
{{{ end }}}
|
|
9
|
+
|
|
10
|
+
{{{ if isAdminOrGlobalMod }}}
|
|
11
|
+
<a class="btn btn-ghost btn-sm ff-secondary fw-semibold" href="{config.relative_path}/users?section=flagged">[[users:most-flags]]</a>
|
|
12
|
+
|
|
13
|
+
<a class="btn btn-ghost btn-sm ff-secondary fw-semibold" href="{config.relative_path}/users?section=banned">[[user:banned]]</a>
|
|
14
|
+
{{{ end }}}
|
|
15
15
|
</div>
|
package/templates/popular.tpl
CHANGED
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
{{{ if widgets.header.length }}}
|
|
2
|
-
<div data-widget-area="header">
|
|
3
|
-
{{{each widgets.header}}}
|
|
4
|
-
{{widgets.header.html}}
|
|
5
|
-
{{{end}}}
|
|
6
|
-
</div>
|
|
7
|
-
{{{ end }}}
|
|
8
|
-
|
|
9
|
-
<div class="row">
|
|
10
|
-
<div class="popular {{{if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
|
|
11
|
-
<!-- IMPORT partials/topic-list-bar.tpl -->
|
|
12
|
-
<div class="category">
|
|
13
|
-
{{{ if !topics.length }}}
|
|
14
|
-
<div class="alert alert-info" id="category-no-topics">[[recent:no-popular-topics]]</div>
|
|
15
|
-
{{{ end }}}
|
|
16
|
-
|
|
17
|
-
<!-- IMPORT partials/topics_list.tpl -->
|
|
18
|
-
|
|
19
|
-
{{{ if config.usePagination }}}
|
|
20
|
-
<!-- IMPORT partials/paginator.tpl -->
|
|
21
|
-
{{{ end }}}
|
|
22
|
-
</div>
|
|
23
|
-
</div>
|
|
24
|
-
<div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
|
|
25
|
-
{{{ each widgets.sidebar }}}
|
|
26
|
-
{{widgets.sidebar.html}}
|
|
27
|
-
{{{ end }}}
|
|
28
|
-
</div>
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
<div data-widget-area="footer">
|
|
32
|
-
{{{each widgets.footer}}}
|
|
33
|
-
{{widgets.footer.html}}
|
|
34
|
-
{{{end}}}
|
|
1
|
+
{{{ if widgets.header.length }}}
|
|
2
|
+
<div data-widget-area="header">
|
|
3
|
+
{{{each widgets.header}}}
|
|
4
|
+
{{widgets.header.html}}
|
|
5
|
+
{{{end}}}
|
|
6
|
+
</div>
|
|
7
|
+
{{{ end }}}
|
|
8
|
+
|
|
9
|
+
<div class="row">
|
|
10
|
+
<div class="popular {{{if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
|
|
11
|
+
<!-- IMPORT partials/topic-list-bar.tpl -->
|
|
12
|
+
<div class="category">
|
|
13
|
+
{{{ if !topics.length }}}
|
|
14
|
+
<div class="alert alert-info" id="category-no-topics">[[recent:no-popular-topics]]</div>
|
|
15
|
+
{{{ end }}}
|
|
16
|
+
|
|
17
|
+
<!-- IMPORT partials/topics_list.tpl -->
|
|
18
|
+
|
|
19
|
+
{{{ if config.usePagination }}}
|
|
20
|
+
<!-- IMPORT partials/paginator.tpl -->
|
|
21
|
+
{{{ end }}}
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
24
|
+
<div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
|
|
25
|
+
{{{ each widgets.sidebar }}}
|
|
26
|
+
{{widgets.sidebar.html}}
|
|
27
|
+
{{{ end }}}
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
<div data-widget-area="footer">
|
|
32
|
+
{{{each widgets.footer}}}
|
|
33
|
+
{{widgets.footer.html}}
|
|
34
|
+
{{{end}}}
|
|
35
35
|
</div>
|