nodebb-theme-harmony 0.0.9 → 0.0.11
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/languages/en-GB/harmony.json +5 -1
- package/lib/controllers.js +15 -0
- package/library.js +63 -6
- package/package.json +1 -1
- package/plugin.json +5 -1
- package/public/settings.js +28 -0
- package/scss/account.scss +0 -3
- package/scss/common.scss +6 -0
- package/scss/modules/bottom-sheet.scss +1 -1
- package/scss/modules/topic-navigator.scss +0 -6
- package/scss/sidebar.scss +18 -16
- package/templates/account/blocks.tpl +2 -2
- package/templates/account/categories.tpl +27 -21
- package/templates/account/consent.tpl +10 -64
- package/templates/account/edit/password.tpl +29 -24
- package/templates/account/edit/username.tpl +25 -20
- package/templates/account/edit.tpl +110 -115
- package/templates/account/followers.tpl +2 -3
- package/templates/account/following.tpl +2 -3
- package/templates/account/groups.tpl +2 -3
- package/templates/account/info.tpl +206 -204
- package/templates/account/posts.tpl +4 -4
- package/templates/account/profile.tpl +9 -9
- package/templates/account/sessions.tpl +3 -6
- package/templates/account/settings.tpl +193 -206
- package/templates/account/theme.tpl +25 -21
- package/templates/account/topics.tpl +17 -16
- package/templates/account/uploads.tpl +4 -8
- package/templates/admin/plugins/harmony.tpl +4 -0
- package/templates/groups/details.tpl +3 -20
- package/templates/groups/list.tpl +10 -9
- package/templates/header.tpl +3 -21
- package/templates/login.tpl +1 -1
- package/templates/notifications.tpl +4 -4
- package/templates/partials/account/header.tpl +58 -47
- package/templates/partials/account/sidebar-left.tpl +19 -12
- package/templates/partials/buttons/newTopic.tpl +1 -3
- package/templates/partials/categories/item.tpl +1 -8
- package/templates/partials/category/sort.tpl +3 -3
- package/templates/partials/category/subcategory.tpl +1 -1
- package/templates/partials/category/tools.tpl +3 -3
- package/templates/partials/category/watch.tpl +7 -7
- package/templates/partials/category-filter-content.tpl +4 -4
- package/templates/partials/category-selector-content.tpl +10 -9
- package/templates/partials/chats/message-window.tpl +9 -7
- package/templates/partials/groups/admin.tpl +3 -5
- package/templates/partials/groups/sidebar-left.tpl +1 -1
- package/templates/partials/header/brand.tpl +19 -0
- package/templates/partials/notifications_list.tpl +5 -5
- package/templates/partials/post_bar.tpl +5 -5
- package/templates/partials/sidebar/logged-in-menu.tpl +23 -0
- package/templates/partials/sidebar/user-menu.tpl +1 -1
- package/templates/partials/sidebar-left.tpl +1 -1
- package/templates/partials/sidebar-right.tpl +1 -23
- package/templates/partials/tags_list.tpl +3 -2
- package/templates/partials/topic/navigator.tpl +2 -2
- package/templates/partials/topic/post-menu.tpl +2 -4
- package/templates/partials/topic/post.tpl +13 -13
- package/templates/partials/topic/reply-button.tpl +3 -3
- package/templates/partials/topic/sort.tpl +3 -3
- package/templates/partials/topic/tools.tpl +3 -3
- package/templates/partials/topic/watch.tpl +17 -16
- package/templates/partials/topic-filters.tpl +3 -3
- package/templates/partials/topic-list-bar.tpl +8 -12
- package/templates/partials/topic-terms.tpl +3 -3
- package/templates/partials/topics_list.tpl +4 -4
- package/templates/partials/users/item.tpl +27 -25
- package/templates/partials/users_list_menu.tpl +1 -1
- package/templates/search.tpl +0 -2
- package/templates/tags.tpl +12 -8
- package/templates/topic.tpl +1 -3
- package/templates/users.tpl +4 -5
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
<!-- IMPORT partials/breadcrumbs.tpl -->
|
|
2
1
|
<div data-widget-area="header">
|
|
3
2
|
{{{each widgets.header}}}
|
|
4
3
|
{{widgets.header.html}}
|
|
@@ -6,20 +5,22 @@
|
|
|
6
5
|
</div>
|
|
7
6
|
<div class="groups list">
|
|
8
7
|
<h2 class="fw-semibold">[[pages:groups]]</h2>
|
|
9
|
-
<div class="
|
|
10
|
-
<div class="
|
|
11
|
-
<div class="text-sm d-flex align-items-center gap-2">
|
|
8
|
+
<div class="d-flex flex-wrap justify-content-between">
|
|
9
|
+
<div class="mb-2 mb-md-0">
|
|
10
|
+
<div class="text-sm d-flex flex-wrap align-items-center gap-2">
|
|
12
11
|
[[topic:sort_by]]
|
|
13
|
-
<
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
<div class="d-flex gap-2">
|
|
13
|
+
<a href="?sort=alpha" class="btn-ghost fw-semibold {{{ if (sort == "alpha") }}}active{{{ end }}}">[[groups:details.group_name]]</a>
|
|
14
|
+
<a href="?sort=count" class="btn-ghost fw-semibold {{{ if (sort == "count") }}}active{{{ end }}}">[[groups:details.member_count]]</a>
|
|
15
|
+
<a href="?sort=date" class="btn-ghost fw-semibold {{{ if (sort == "date") }}}active{{{ end }}}">[[groups:details.creation_date]]</a>
|
|
16
|
+
</div>
|
|
16
17
|
</div>
|
|
17
18
|
</div>
|
|
18
|
-
<div class="
|
|
19
|
+
<div class="">
|
|
19
20
|
<div class="d-flex justify-content-end gap-2">
|
|
20
21
|
<div class="">
|
|
21
22
|
{{{ if allowGroupCreation }}}
|
|
22
|
-
<button class="btn btn-primary btn-sm" data-action="new"><i class="fa fa-
|
|
23
|
+
<button class="btn btn-primary btn-sm text-nowrap" data-action="new"><i class="fa fa-users"></i> [[groups:new_group]]</button>
|
|
23
24
|
{{{ end }}}
|
|
24
25
|
<select class="form-select hidden" id="search-sort">
|
|
25
26
|
<option value="alpha">[[groups:details.group_name]]</option>
|
package/templates/header.tpl
CHANGED
|
@@ -27,26 +27,8 @@
|
|
|
27
27
|
<div class="d-flex justify-content-between pb-4 pb-md-0">
|
|
28
28
|
<!-- IMPORT partials/sidebar-left.tpl -->
|
|
29
29
|
|
|
30
|
-
<main id="panel" class="d-flex flex-column gap-3 flex-grow-1 mt-3">
|
|
31
|
-
|
|
32
|
-
<div class="container brand-container">
|
|
33
|
-
<div class="col-12 d-flex border-bottom pb-3 {{{ if config.centerHeaderElements }}}justify-content-center{{{ end }}}">
|
|
34
|
-
<div component="brand/wrapper" class="d-flex align-items-center gap-3 p-2 rounded-1 align-content-stretch ">
|
|
35
|
-
{{{ if brand:logo }}}
|
|
36
|
-
<a component="brand/anchor" href="{{{ if brand:logo:url }}}{brand:logo:url}{{{ else }}}{relative_path}/{{{ end }}}">
|
|
37
|
-
<img component="brand/logo" alt="{brand:logo:alt}" class="{brand:logo:display}" src="{brand:logo}?{config.cache-buster}" />
|
|
38
|
-
</a>
|
|
39
|
-
{{{ end }}}
|
|
40
|
-
|
|
41
|
-
{{{ if config.showSiteTitle }}}
|
|
42
|
-
<a component="siteTitle" class="text-truncate align-self-stretch align-items-center d-flex" href="{{{ if title:url }}}{title:url}{{{ else }}}{relative_path}/{{{ end }}}">
|
|
43
|
-
<h1 class="fs-6 fw-bold text-body mb-0">{config.siteTitle}</h1>
|
|
44
|
-
</a>
|
|
45
|
-
{{{ end }}}
|
|
46
|
-
</div>
|
|
47
|
-
</div>
|
|
48
|
-
</div>
|
|
49
|
-
{{{ end }}}
|
|
30
|
+
<main id="panel" class="d-flex flex-column gap-3 flex-grow-1 mt-3" style="min-width: 0;">
|
|
31
|
+
<!-- IMPORT partials/header/brand.tpl -->
|
|
50
32
|
<script>
|
|
51
33
|
const headerEl = document.getElementById('header-menu');
|
|
52
34
|
if (headerEl) {
|
|
@@ -57,6 +39,6 @@
|
|
|
57
39
|
document.documentElement.style.setProperty('--panel-offset', `0px`);
|
|
58
40
|
}
|
|
59
41
|
</script>
|
|
60
|
-
<div class="container d-flex flex-column gap-
|
|
42
|
+
<div class="container d-flex flex-column gap-3" id="content">
|
|
61
43
|
<!-- IMPORT partials/noscript/warning.tpl -->
|
|
62
44
|
<!-- IMPORT partials/noscript/message.tpl -->
|
package/templates/login.tpl
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
<div class="d-flex justify-content-between align-items-center">
|
|
28
28
|
<label for="password">[[user:password]]</label>
|
|
29
29
|
{{{ if allowPasswordReset }}}
|
|
30
|
-
<a id="reset-link" class="text-sm text-reset text-decoration-underline" href="{config.relative_path}/reset">[[login:forgot_password]]</a>
|
|
30
|
+
<a id="reset-link" tabindex="-1" class="text-sm text-reset text-decoration-underline" href="{config.relative_path}/reset">[[login:forgot_password]]</a>
|
|
31
31
|
{{{ end }}}
|
|
32
32
|
</div>
|
|
33
33
|
<div>
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
|
|
6
6
|
<hr class="text-muted opacity-25"/>
|
|
7
7
|
|
|
8
|
-
<div class="row">
|
|
9
|
-
<div class="
|
|
8
|
+
<div class="d-flex flex-column flex-md-row">
|
|
9
|
+
<div class="flex-0 pe-2 border-end-md text-sm mb-3 flex-basis-md-200">
|
|
10
10
|
<div class="nav sticky-top d-flex flex-row flex-md-column flex-wrap gap-1" style="z-index: 1;">
|
|
11
11
|
{{{ each filters }}}
|
|
12
12
|
{{{ if ./separator }}}
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
{{{ end }}}
|
|
21
21
|
</div>
|
|
22
22
|
</div>
|
|
23
|
-
<div class="
|
|
24
|
-
<ul class="notifications-list list-unstyled" data-nextstart="{nextStart}">
|
|
23
|
+
<div class="flex-1 ps-md-2 ps-lg-5">
|
|
24
|
+
<ul component="notifications/list" class="notifications-list list-unstyled" data-nextstart="{nextStart}">
|
|
25
25
|
<!-- IMPORT partials/notifications_list.tpl -->
|
|
26
26
|
</ul>
|
|
27
27
|
<!-- IMPORT partials/paginator.tpl -->
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
</div>
|
|
21
21
|
</div>
|
|
22
22
|
|
|
23
|
-
<div class="d-flex gap-2 w-100 pb-4 mb-4 mt-2 border-bottom">
|
|
23
|
+
<div class="d-flex flex-column flex-md-row gap-2 w-100 pb-4 mb-4 mt-2 border-bottom">
|
|
24
24
|
<div class="avatar-wrapper border-4 position-relative align-self-start d-none d-md-block" style="margin-top: -75px;">
|
|
25
25
|
{{{ if picture }}}
|
|
26
26
|
<img src="{picture}" class="avatar avatar-rounded" style="--avatar-size: 142px;" />
|
|
@@ -28,62 +28,73 @@
|
|
|
28
28
|
<div class="avatar avatar-rounded" style="background-color: {icon:bgColor}; --avatar-size: 142px;" title="{username}">{icon:text}</div>
|
|
29
29
|
{{{ end }}}
|
|
30
30
|
</div>
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
31
|
+
|
|
32
|
+
<div class="avatar-wrapper border-4 position-relative align-self-center d-block d-md-none" style="margin-top: -75px;">
|
|
33
|
+
{{{ if picture }}}
|
|
34
|
+
<img src="{picture}" class="avatar avatar-rounded" style="--avatar-size: 142px;" />
|
|
35
|
+
{{{ else }}}
|
|
36
|
+
<div class="avatar avatar-rounded" style="background-color: {icon:bgColor}; --avatar-size: 142px;" title="{username}">{icon:text}</div>
|
|
37
|
+
{{{ end }}}
|
|
38
|
+
</div>
|
|
39
|
+
|
|
40
|
+
<div class="d-flex flex-column flex-md-row mt-1 justify-content-between w-100 gap-2">
|
|
41
|
+
<div class="d-flex flex-1 flex-row gap-2">
|
|
42
|
+
<div class="d-flex flex-column">
|
|
43
|
+
<h2 class="fullname fw-semibold fs-2 tracking-tight mb-0">{{{ if fullname }}}{fullname}{{{ else }}}{username}{{{ end }}}</h2>
|
|
44
|
+
<div class="d-flex flex-wrap gap-1 text-sm align-items-center">
|
|
45
|
+
<span class="username fw-bold">{{{ if !banned }}}@{username}{{{ else }}}[[user:banned]]{{{ end }}}</span>
|
|
46
|
+
<div class="d-flex align-items-center gap-1 p-1">
|
|
47
|
+
{{{ if selectedGroup.length }}}
|
|
48
|
+
{{{ each selectedGroup }}}
|
|
49
|
+
{{{ if ./slug }}}
|
|
50
|
+
<!-- IMPORT partials/groups/badge.tpl -->
|
|
51
|
+
{{{ end }}}
|
|
52
|
+
{{{ end }}}
|
|
53
|
+
{{{ end }}}
|
|
54
|
+
</div>
|
|
55
|
+
</div>
|
|
56
|
+
|
|
57
|
+
{{{ if isAdminOrGlobalModeratorOrModerator }}}
|
|
58
|
+
{{{ if banned }}}
|
|
59
|
+
<div class="text-xm text-muted">
|
|
60
|
+
{{{ if banned_until }}}
|
|
61
|
+
[[user:info.banned-until, {banned_until_readable}]]
|
|
62
|
+
{{{ else }}}
|
|
63
|
+
[[user:info.banned-permanently]]
|
|
43
64
|
{{{ end }}}
|
|
44
65
|
</div>
|
|
66
|
+
{{{ end }}}
|
|
67
|
+
{{{ end }}}
|
|
45
68
|
</div>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
<div class="d-flex gap-1 align-self-stretch align-self-md-start justify-content-end">
|
|
72
|
+
{{{ if loggedIn }}}
|
|
73
|
+
{{{ if !isSelf }}}
|
|
74
|
+
<a component="account/unfollow" href="#" class="btn btn-info flex-fill{{{ if !isFollowing }}} hide{{{ end }}}">[[user:unfollow]]</a>
|
|
75
|
+
<a component="account/follow" href="#" class="btn btn-primary flex-fill{{{ if isFollowing }}} hide{{{ end }}}">[[user:follow]]</a>
|
|
76
|
+
{{{ end }}}
|
|
77
|
+
{{{ end }}}
|
|
46
78
|
|
|
47
|
-
{{{ if
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
{{{ if
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
79
|
+
{{{ if (loggedIn && (!isSelf && (!banned && !config.disableChat))) }}}
|
|
80
|
+
<div class="btn-group flex-fill">
|
|
81
|
+
<a {{{ if hasPrivateChat }}}component="account/chat"{{{ else }}}component="account/new-chat"{{{ end }}} href="#" class="btn btn-light" role="button">[[user:chat]]</a>
|
|
82
|
+
{{{ if hasPrivateChat}}}
|
|
83
|
+
<button type="button" class="btn btn-light dropdown-toggle flex-0" data-bs-toggle="dropdown">
|
|
84
|
+
<i class="fa fa-caret-down"></i>
|
|
85
|
+
</button>
|
|
86
|
+
<ul class="dropdown-menu dropdown-menu-end" role="menu">
|
|
87
|
+
<li><a class="dropdown-item" href="#" component="account/new-chat">[[user:new_chat_with, {username}]]</a></li>
|
|
88
|
+
</ul>
|
|
54
89
|
{{{ end }}}
|
|
55
90
|
</div>
|
|
56
91
|
{{{ end }}}
|
|
92
|
+
{{{ if !isSelf }}}
|
|
93
|
+
{{{ if (isAdmin || (canBan || canMute ))}}}
|
|
94
|
+
<!-- IMPORT partials/account/admin-menu.tpl -->
|
|
57
95
|
{{{ end }}}
|
|
58
|
-
</div>
|
|
59
|
-
</div>
|
|
60
|
-
|
|
61
|
-
<div class="d-flex gap-1 align-self-start">
|
|
62
|
-
{{{ if loggedIn }}}
|
|
63
|
-
{{{ if !isSelf }}}
|
|
64
|
-
<a component="account/unfollow" href="#" class="btn btn-info{{{ if !isFollowing }}} hide{{{ end }}}">[[user:unfollow]]</a>
|
|
65
|
-
<a component="account/follow" href="#" class="btn btn-primary{{{ if isFollowing }}} hide{{{ end }}}">[[user:follow]]</a>
|
|
66
|
-
{{{ end }}}
|
|
67
|
-
{{{ end }}}
|
|
68
|
-
|
|
69
|
-
{{{ if (loggedIn && (!isSelf && (!banned && !config.disableChat))) }}}
|
|
70
|
-
<div class="btn-group">
|
|
71
|
-
<a {{{ if hasPrivateChat }}}component="account/chat"{{{ else }}}component="account/new-chat"{{{ end }}} href="#" class="btn btn-light" role="button">[[user:chat]]</a>
|
|
72
|
-
{{{ if hasPrivateChat}}}
|
|
73
|
-
<button type="button" class="btn btn-light dropdown-toggle" data-bs-toggle="dropdown">
|
|
74
|
-
<i class="fa fa-caret-down"></i>
|
|
75
|
-
</button>
|
|
76
|
-
<ul class="dropdown-menu dropdown-menu-end" role="menu">
|
|
77
|
-
<li><a class="dropdown-item" href="#" component="account/new-chat">[[user:new_chat_with, {username}]]</a></li>
|
|
78
|
-
</ul>
|
|
79
96
|
{{{ end }}}
|
|
80
97
|
</div>
|
|
81
|
-
{{{ end }}}
|
|
82
|
-
{{{ if !isSelf }}}
|
|
83
|
-
{{{ if (isAdmin || (canBan || canMute ))}}}
|
|
84
|
-
<!-- IMPORT partials/account/admin-menu.tpl -->
|
|
85
|
-
{{{ end }}}
|
|
86
|
-
{{{ end }}}
|
|
87
98
|
</div>
|
|
88
99
|
</div>
|
|
89
100
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
<div class="
|
|
2
|
-
<div class="sticky-top d-flex flex-row flex-md-column flex-wrap gap-1" style="z-index: 1;">
|
|
1
|
+
<div class="flex-0 pe-2 border-end-md text-sm mb-3 flex-basis-md-200">
|
|
2
|
+
<div class="sticky-md-top d-flex flex-row flex-md-column flex-wrap gap-1" style="top: 1rem;z-index: 1;">
|
|
3
3
|
<a href="{config.relative_path}/user/{userslug}" class="btn-ghost fw-semibold {{{ if template.account/profile }}}active{{{ end }}}">
|
|
4
4
|
<div class="flex-1">[[global:about]]</div>
|
|
5
5
|
</a>
|
|
@@ -20,34 +20,39 @@
|
|
|
20
20
|
<div class="flex-1">[[global:topics]]</div>
|
|
21
21
|
<span class="text-xs human-readable-number" title="{counts.topics}">{counts.topics}</span>
|
|
22
22
|
</a>
|
|
23
|
-
<a href="{config.relative_path}/user/{userslug}/groups" class="btn-ghost fw-semibold
|
|
23
|
+
<a href="{config.relative_path}/user/{userslug}/groups" class="btn-ghost fw-semibold
|
|
24
|
+
{{{ if template.account/groups }}}active{{{ end }}}">
|
|
24
25
|
<div class="flex-1">[[global:header.groups]]</div>
|
|
25
26
|
<span class="text-xs human-readable-number" title="{counts.groups}">{counts.groups}</span>
|
|
26
27
|
</a>
|
|
27
28
|
|
|
28
|
-
<a href="{config.relative_path}/user/{userslug}/followers" class="btn-ghost fw-semibold
|
|
29
|
+
<a href="{config.relative_path}/user/{userslug}/followers" class="btn-ghost fw-semibold
|
|
30
|
+
{{{ if template.account/followers }}}active{{{ end }}}">
|
|
29
31
|
<div class="flex-1">[[user:followers]]</div>
|
|
30
32
|
<span class="text-xs human-readable-number" title="{counts.followers}">{counts.followers}</span>
|
|
31
33
|
</a>
|
|
32
34
|
|
|
33
|
-
<a href="{config.relative_path}/user/{userslug}/following" class="btn-ghost fw-semibold
|
|
35
|
+
<a href="{config.relative_path}/user/{userslug}/following" class="btn-ghost fw-semibold
|
|
36
|
+
{{{ if template.account/following }}}active{{{ end }}}">
|
|
34
37
|
<div class="flex-1">[[user:following]]</div>
|
|
35
38
|
<span class="text-xs human-readable-number" title="{counts.following}">{counts.following}</span>
|
|
36
39
|
</a>
|
|
37
40
|
|
|
38
41
|
{{{ if canEdit }}}
|
|
39
|
-
<a href="{config.relative_path}/user/{userslug}/blocks" class="btn-ghost fw-semibold
|
|
42
|
+
<a href="{config.relative_path}/user/{userslug}/blocks" class="btn-ghost fw-semibold
|
|
43
|
+
{{{ if template.account/blocks }}}active{{{ end }}}">
|
|
40
44
|
<div class="flex-1">[[user:blocked-users]]</div>
|
|
41
45
|
<span class="text-xs human-readable-number" title="{counts.blocks}">{counts.blocks}</span>
|
|
42
46
|
</a>
|
|
43
47
|
|
|
44
|
-
<a href="{config.relative_path}/user/{userslug}/uploads" class="btn-ghost fw-semibold
|
|
48
|
+
<a href="{config.relative_path}/user/{userslug}/uploads" class="btn-ghost fw-semibold
|
|
49
|
+
{{{ if template.account/uploads }}}active{{{ end }}}">
|
|
45
50
|
<div class="flex-1">[[global:uploads]]</div>
|
|
46
51
|
<span class="text-xs human-readable-number" title="{counts.uploaded}">{counts.uploaded}</span>
|
|
47
52
|
</a>
|
|
48
53
|
{{{ end }}}
|
|
49
54
|
|
|
50
|
-
<hr/>
|
|
55
|
+
<hr class="w-100 my-2"/>
|
|
51
56
|
{{{ if (loggedIn && (!isSelf && !banned)) }}}
|
|
52
57
|
<a href="#" component="account/flag" class="btn-ghost-sm">
|
|
53
58
|
<i class="fa-solid fa-flag text-danger"></i>
|
|
@@ -61,20 +66,22 @@
|
|
|
61
66
|
<i class="fa-solid fa-ban text-danger"></i>
|
|
62
67
|
<div class="flex-1 text-nowrap">[[user:unblock_user]]</div>
|
|
63
68
|
</a>
|
|
64
|
-
<hr/>
|
|
69
|
+
<hr class="w-100 my-2"/>
|
|
65
70
|
{{{ end }}}
|
|
66
71
|
|
|
67
72
|
{{{ if canEdit }}}
|
|
68
|
-
<a href="{config.relative_path}/user/{userslug}/edit" class="btn-ghost-sm text-xs
|
|
73
|
+
<a href="{config.relative_path}/user/{userslug}/edit" class="btn-ghost-sm text-xs
|
|
74
|
+
{{{ if template.account/edit }}}active{{{ end }}}">
|
|
69
75
|
<div class="flex-1">[[user:edit-profile]]</div>
|
|
70
76
|
</a>
|
|
71
|
-
<a href="{config.relative_path}/user/{userslug}/settings" class="btn-ghost-sm text-xs
|
|
77
|
+
<a href="{config.relative_path}/user/{userslug}/settings" class="btn-ghost-sm text-xs
|
|
78
|
+
{{{ if template.account/settings }}}active{{{ end }}}">
|
|
72
79
|
<div class="flex-1">[[user:settings]]</div>
|
|
73
80
|
</a>
|
|
74
81
|
{{{ end }}}
|
|
75
82
|
|
|
76
83
|
{{{ each profile_links }}}
|
|
77
|
-
<a href="{config.relative_path}/user/{userslug}/{./route}" class="btn-ghost-sm text-xs plugin-link {{{ if ./public }}}public{{{ else }}}private{{{ end }}}" id="{./id}">
|
|
84
|
+
<a href="{config.relative_path}/user/{userslug}/{./route}" class="btn-ghost-sm text-xs plugin-link {{{ if ./public }}}public{{{ else }}}private{{{ end }}} {{{ if (url == ./url) }}}active{{{ end }}}" id="{./id}">
|
|
78
85
|
<div class="flex-1">{./name}</div>
|
|
79
86
|
</a>
|
|
80
87
|
{{{end}}}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
|
-
|
|
3
1
|
<noscript><div class="dropdown" component="category-selector"></noscript>
|
|
4
|
-
<button component="category/post" for="category-dropdown-check" class="btn btn-primary text-nowrap" id="new_topic" role="button">
|
|
2
|
+
<button component="category/post" for="category-dropdown-check" class="btn btn-primary btn-sm text-nowrap" id="new_topic" role="button">
|
|
5
3
|
[[category:new_topic_button]]
|
|
6
4
|
</button>
|
|
7
5
|
<noscript>
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
{{{ end }}}
|
|
17
17
|
{{{ if !config.hideSubCategories }}}
|
|
18
18
|
{{{ if ./children.length }}}
|
|
19
|
-
<div class="category-children
|
|
19
|
+
<div class="category-children row row-cols-2 g-2">
|
|
20
20
|
{{{ each ./children }}}
|
|
21
21
|
{{{ if !./isSection }}}
|
|
22
22
|
<span class="category-children-item small">
|
|
@@ -31,13 +31,6 @@
|
|
|
31
31
|
</div>
|
|
32
32
|
{{{ end }}}
|
|
33
33
|
{{{ end }}}
|
|
34
|
-
<span class="d-block d-sm-none">
|
|
35
|
-
{{{ if ./teaser.timestampISO }}}
|
|
36
|
-
<a class="permalink" href="{./teaser.url}">
|
|
37
|
-
<small class="timeago" title="{./teaser.timestampISO}"></small>
|
|
38
|
-
</a>
|
|
39
|
-
{{{ end }}}
|
|
40
|
-
</span>
|
|
41
34
|
</div>
|
|
42
35
|
</div>
|
|
43
36
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<div class="btn-group bottom-sheet" component="thread/sort">
|
|
2
|
-
<button class="btn
|
|
3
|
-
<i class="fa fa-fw fa-arrow-down-wide-short
|
|
4
|
-
<span class="visible-md-inline visible-lg-inline
|
|
2
|
+
<button class="btn-ghost-sm d-flex gap-2 align-items-baseline dropdown-toggle" data-bs-toggle="dropdown" type="button">
|
|
3
|
+
<i class="fa fa-fw fa-arrow-down-wide-short text-primary"></i>
|
|
4
|
+
<span class="visible-md-inline visible-lg-inline fw-semibold">[[topic:sort_by]]</span>
|
|
5
5
|
</button>
|
|
6
6
|
|
|
7
7
|
<ul class="dropdown-menu">
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
{{{end}}}
|
|
15
15
|
</ul>
|
|
16
16
|
{{{ if hasMoreSubCategories}}}
|
|
17
|
-
<button class="btn
|
|
17
|
+
<button class="btn-ghost-sm mb-2" component="category/load-more-subcategories">[[category:x-more-categories, {subCategoriesLeft}]]</button>
|
|
18
18
|
{{{ end }}}
|
|
19
19
|
</div>
|
|
20
20
|
{{{ end }}}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{{{ if showTopicTools }}}
|
|
2
2
|
<div class="btn-group thread-tools bottom-sheet">
|
|
3
|
-
<button class="btn
|
|
4
|
-
<i class="fa fa-fw fa-gear
|
|
5
|
-
<span class="visible-md-inline visible-lg-inline
|
|
3
|
+
<button class="btn-ghost-sm d-flex gap-2 align-items-baseline dropdown-toggle" data-bs-toggle="dropdown" type="button">
|
|
4
|
+
<i class="fa fa-fw fa-gear text-primary"></i>
|
|
5
|
+
<span class="visible-md-inline visible-lg-inline fw-semibold">[[topic:thread_tools.title]]</span>
|
|
6
6
|
</button>
|
|
7
7
|
<ul class="dropdown-menu">
|
|
8
8
|
<li>
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{{{ if config.loggedIn }}}
|
|
2
2
|
<div class="btn-group topic-watch-dropdown bottom-sheet" component="topic/watch">
|
|
3
|
-
<button class="btn
|
|
4
|
-
<span component="category/watching/menu"
|
|
3
|
+
<button class="btn-ghost-sm d-flex gap-2 align-items-baseline dropdown-toggle" data-bs-toggle="dropdown" type="button">
|
|
4
|
+
<span component="category/watching/menu" {{{ if !./isWatched }}}class="hidden"{{{ end }}}><i class="fa fa-fw fa-inbox text-primary"></i><span class="visible-md-inline visible-lg-inline fw-semibold"> [[category:watching]]</span></span>
|
|
5
5
|
|
|
6
|
-
<span component="category/notwatching/menu"
|
|
6
|
+
<span component="category/notwatching/menu" {{{ if !./isNotWatched }}}class="hidden"{{{ end }}}><i class="fa fa-fw fa-clock-o text-primary"></i><span class="visible-md-inline visible-lg-inline fw-semibold"> [[category:not-watching]]</span></span>
|
|
7
7
|
|
|
8
|
-
<span component="category/ignoring/menu"
|
|
8
|
+
<span component="category/ignoring/menu" {{{ if !./isIgnored }}}class="hidden"{{{ end }}}><i class="fa fa-fw fa-eye-slash text-primary"></i><span class="visible-md-inline visible-lg-inline fw-semibold"> [[category:ignoring]]</span></span>
|
|
9
9
|
</button>
|
|
10
10
|
|
|
11
11
|
<ul class="dropdown-menu">
|
|
12
|
-
<li><a class="dropdown-item" href="#" component="category/watching" data-state="watching"><i component="category/watching/check" class="fa fa-fw
|
|
12
|
+
<li><a class="dropdown-item" href="#" component="category/watching" data-state="watching"><i component="category/watching/check" class="fa fa-fw {{{ if ./isWatched }}}fa-check{{{ end }}}"></i><i class="fa fa-fw fa-inbox"></i> [[category:watching]]<p class="help-text text-muted"><small>[[category:watching.description]]</small></p></a></li>
|
|
13
13
|
|
|
14
|
-
<li><a class="dropdown-item" href="#" component="category/notwatching" data-state="notwatching"><i component="category/notwatching/check" class="fa fa-fw
|
|
14
|
+
<li><a class="dropdown-item" href="#" component="category/notwatching" data-state="notwatching"><i component="category/notwatching/check" class="fa fa-fw {{{ if ./isNotWatched }}}fa-check{{{ end }}}"></i><i class="fa fa-fw fa-clock-o"></i> [[category:not-watching]]<p class="help-text text-muted"><small>[[category:not-watching.description]]</small></p></a></li>
|
|
15
15
|
|
|
16
|
-
<li><a class="dropdown-item" href="#" component="category/ignoring" data-state="ignoring"><i component="category/ignoring/check" class="fa fa-fw
|
|
16
|
+
<li><a class="dropdown-item" href="#" component="category/ignoring" data-state="ignoring"><i component="category/ignoring/check" class="fa fa-fw {{{ if ./isIgnored }}}fa-check{{{ end }}}"></i><i class="fa fa-fw fa-eye-slash"></i> [[category:ignoring]]<p class="help-text text-muted"><small>[[category:ignoring.description]]</small></p></a></li>
|
|
17
17
|
</ul>
|
|
18
18
|
</div>
|
|
19
19
|
{{{ end }}}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
<button type="button" class="btn
|
|
1
|
+
<button type="button" class="btn-ghost-sm d-flex gap-2 align-items-baseline dropdown-toggle" data-bs-toggle="dropdown">
|
|
2
2
|
{{{ if selectedCategory }}}
|
|
3
3
|
<span class="category-item">
|
|
4
4
|
{buildCategoryIcon(selectedCategory, "20px", "rounded-circle")}
|
|
5
|
-
<span class="visible-md-inline visible-lg-inline
|
|
5
|
+
<span class="visible-md-inline visible-lg-inline fw-semibold">{selectedCategory.name}</span>
|
|
6
6
|
</span>
|
|
7
7
|
{{{ else }}}
|
|
8
|
-
<i class="fa fa-fw fa-list
|
|
9
|
-
<span class="visible-md-inline visible-lg-inline
|
|
8
|
+
<i class="fa fa-fw fa-list link-primary"></i>
|
|
9
|
+
<span class="visible-md-inline visible-lg-inline fw-semibold">[[unread:all_categories]]</span>{{{ end }}}
|
|
10
10
|
</button>
|
|
11
11
|
<div component="category-selector-search" class="hidden position-absolute">
|
|
12
12
|
<input type="text" class="form-control" autocomplete="off">
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
<button type="button" class="btn
|
|
1
|
+
<button type="button" class="btn-ghost-sm d-flex gap-2 align-items-baseline dropdown-toggle" data-bs-toggle="dropdown">
|
|
2
2
|
<span component="category-selector-selected">
|
|
3
3
|
{{{ if (selectedCategory && !showCategorySelectLabel) }}}
|
|
4
4
|
<span class="category-item">
|
|
5
5
|
{buildCategoryIcon(selectedCategory, "24px", "rounded-circle")}
|
|
6
|
-
{selectedCategory.name}
|
|
6
|
+
<span class="fw-semibold">{selectedCategory.name}</span>
|
|
7
7
|
</span>
|
|
8
8
|
{{{ else }}}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
<i class="fa fa-fw {{{ if selectCategoryIcon }}}{selectCategoryIcon}{{{ else }}}fa-list{{{ end }}} text-primary"></i>
|
|
10
|
+
<span class="visible-md-inline visible-lg-inline fw-semibold">{{{ if selectCategoryLabel }}}{selectCategoryLabel}{{{ else }}}[[topic:thread_tools.select_category]]{{{ end }}}</span>
|
|
11
|
+
{{{ end }}}
|
|
12
|
+
</span>
|
|
12
13
|
</button>
|
|
13
14
|
<div component="category-selector-search" class="hidden position-absolute">
|
|
14
15
|
<input type="text" class="form-control" autocomplete="off">
|
|
@@ -17,10 +18,10 @@
|
|
|
17
18
|
<li component="category/no-matches" role="presentation" class="category hidden">
|
|
18
19
|
<a class="dropdown-item" role="menu-item">[[search:no-matches]]</a>
|
|
19
20
|
</li>
|
|
20
|
-
{{{each categoryItems}}}
|
|
21
|
-
<li role="presentation" class="category {{{ if
|
|
22
|
-
<a class="dropdown-item" role="menu-item">{
|
|
23
|
-
<span component="category-markup" style="{{{ if
|
|
21
|
+
{{{ each categoryItems }}}
|
|
22
|
+
<li role="presentation" class="category {{{ if ./disabledClass }}}disabled {{{ end }}}" data-cid="{./cid}" data-name="{./name}" data-parent-cid="{./parentCid}">
|
|
23
|
+
<a class="dropdown-item" role="menu-item">{./level}
|
|
24
|
+
<span component="category-markup" style="{{{ if ./match }}}font-weight: bold;{{{end}}}">
|
|
24
25
|
<div class="category-item d-inline-block">
|
|
25
26
|
{{{ if ./icon }}}
|
|
26
27
|
{buildCategoryIcon(@value, "24px", "rounded-circle")}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
{{{ if !roomId }}}
|
|
2
|
+
<div class="text-center p-2">
|
|
3
|
+
[[modules:chat.no_active]]
|
|
4
|
+
</div>
|
|
5
|
+
{{{ end }}}
|
|
6
|
+
|
|
7
|
+
{{{ if roomId }}}
|
|
2
8
|
<div component="chat/messages" class="expanded-chat d-flex flex-column h-100" data-roomid="{roomId}">
|
|
3
9
|
<div component="chat/header" class="d-flex align-items-center px-3 gap-1">
|
|
4
10
|
<h5 class="members flex-1 fw-semibold tracking-tight">
|
|
@@ -9,7 +15,7 @@
|
|
|
9
15
|
</div>
|
|
10
16
|
<hr class="text-muted opacity-25"/>
|
|
11
17
|
<div class="position-relative">
|
|
12
|
-
<div component="chat/messages/scroll-up-alert" class="position-absolute me-4 end-0 text-sm scroll-up-alert alert alert-info hidden w-25" role="button" style="z-index: 1;">[[modules:chat.scroll-up-alert]]</div>
|
|
18
|
+
<div component="chat/messages/scroll-up-alert" class="position-absolute me-md-4 end-0 text-sm scroll-up-alert alert alert-info hidden w-25 d-none d-md-block" role="button" style="z-index: 1;">[[modules:chat.scroll-up-alert]]</div>
|
|
13
19
|
</div>
|
|
14
20
|
<ul class="chat-content p-0 m-0 list-unstyled overflow-auto flex-grow-1">
|
|
15
21
|
<!-- IMPORT partials/chats/messages.tpl -->
|
|
@@ -25,8 +31,4 @@
|
|
|
25
31
|
</form>
|
|
26
32
|
</div>
|
|
27
33
|
</div>
|
|
28
|
-
|
|
29
|
-
<div class="alert alert-info me-3">
|
|
30
|
-
[[modules:chat.no-messages]]
|
|
31
|
-
</div>
|
|
32
|
-
<!-- ENDIF roomId -->
|
|
34
|
+
{{{ end }}}
|
|
@@ -80,13 +80,11 @@
|
|
|
80
80
|
|
|
81
81
|
<div class="mb-3">
|
|
82
82
|
<label class="form-label" for="memberPostCids">[[groups:details.member-post-cids]]</label>
|
|
83
|
-
<div class="
|
|
84
|
-
<div class="
|
|
85
|
-
<input id="memberPostCids" type="text" class="form-control" value="{group.memberPostCids}">
|
|
86
|
-
</div>
|
|
87
|
-
<div class="col-md-6 member-post-cids-selector">
|
|
83
|
+
<div class="d-flex gap-1">
|
|
84
|
+
<div class="member-post-cids-selector">
|
|
88
85
|
<!-- IMPORT partials/category-selector.tpl -->
|
|
89
86
|
</div>
|
|
87
|
+
<input id="memberPostCids" type="text" class="form-control" value="{group.memberPostCids}">
|
|
90
88
|
</div>
|
|
91
89
|
</div>
|
|
92
90
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<div class="
|
|
1
|
+
<div class="flex-0 pe-2 border-end-md text-sm mb-3 flex-basis-md-200">
|
|
2
2
|
<div class="nav sticky-top d-flex flex-row flex-md-column flex-wrap gap-1" style="z-index: 1;">
|
|
3
3
|
<button data-bs-toggle="tab" data-bs-target="#groups-posts" class="btn-ghost fw-semibold {{{ if template.groups/details }}}active{{{ end }}}">
|
|
4
4
|
<div class="flex-1">[[global:posts]]</div>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{{{ if (brand:logo || config.showSiteTitle)}}}
|
|
2
|
+
<div class="container brand-container">
|
|
3
|
+
<div class="col-12 d-flex border-bottom pb-3 {{{ if config.centerHeaderElements }}}justify-content-center{{{ end }}}">
|
|
4
|
+
<div component="brand/wrapper" class="d-flex align-items-center gap-3 p-2 rounded-1 align-content-stretch ">
|
|
5
|
+
{{{ if brand:logo }}}
|
|
6
|
+
<a component="brand/anchor" href="{{{ if brand:logo:url }}}{brand:logo:url}{{{ else }}}{relative_path}/{{{ end }}}">
|
|
7
|
+
<img component="brand/logo" alt="{brand:logo:alt}" class="{brand:logo:display}" src="{brand:logo}?{config.cache-buster}" />
|
|
8
|
+
</a>
|
|
9
|
+
{{{ end }}}
|
|
10
|
+
|
|
11
|
+
{{{ if config.showSiteTitle }}}
|
|
12
|
+
<a component="siteTitle" class="text-truncate align-self-stretch align-items-center d-flex" href="{{{ if title:url }}}{title:url}{{{ else }}}{relative_path}/{{{ end }}}">
|
|
13
|
+
<h1 class="fs-6 fw-bold text-body mb-0">{config.siteTitle}</h1>
|
|
14
|
+
</a>
|
|
15
|
+
{{{ end }}}
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
{{{ end }}}
|
|
@@ -14,17 +14,17 @@
|
|
|
14
14
|
<a class="text-decoration-none" href="{config.relative_path}/user/{./user.userslug}"><div class="avatar avatar-rounded" style="--avatar-size: 32px; background-color: {./user.icon:bgColor};">{./user.icon:text}</div></a>
|
|
15
15
|
{{{ end }}}
|
|
16
16
|
<div class=" d-flex flex-column">
|
|
17
|
-
<a href="{./path}" class="text-decoration-none
|
|
17
|
+
<a href="{./path}" class="text-decoration-none text-reset text text-sm">
|
|
18
18
|
{./bodyShort}
|
|
19
19
|
</a>
|
|
20
20
|
<div class="text-xs text-muted">{{{ if ./timeagoLong }}}{./timeagoLong}{{{ else }}}<span class="timeago" title="{./datetimeISO}"></span>{{{ end }}}</div>
|
|
21
21
|
</div>
|
|
22
22
|
</div>
|
|
23
|
-
<div class="
|
|
23
|
+
<div class="">
|
|
24
24
|
{{{ if ./nid }}}
|
|
25
|
-
<button class="mark-read btn
|
|
26
|
-
<i class="unread fa fa-
|
|
27
|
-
<i class="read fa fa-
|
|
25
|
+
<button class="mark-read btn-ghost-sm" style="width: 1.5rem; height: 1.5rem;">
|
|
26
|
+
<i class="unread fa fa-2xs fa-circle text-primary {{{ if ./read }}}hidden{{{ end }}}"></i>
|
|
27
|
+
<i class="read fa fa-2xs fa-circle-o text-secondary {{{ if !./read }}}hidden{{{ end }}}"></i>
|
|
28
28
|
</button>
|
|
29
29
|
{{{ end }}}
|
|
30
30
|
</div>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
<nav class="sticky-tools navbar navbar-expand mt-4 p-0 border-0 rounded topic-main-buttons">
|
|
1
|
+
<nav class="{{{ if config.stickyToolbar }}}sticky-tools{{{ end }}} navbar navbar-expand mt-4 p-0 border-0 rounded topic-main-buttons">
|
|
2
2
|
<div class="card card-header flex-row p-2 border rounded ff-secondary w-100">
|
|
3
3
|
<ul class="navbar-nav me-auto gap-2 align-items-center">
|
|
4
4
|
{{{ if loggedIn }}}
|
|
5
|
-
<button component="topic/mark-unread" class="btn
|
|
6
|
-
<i class="fa fa-fw fa-inbox
|
|
7
|
-
<span class="d-none d-md-inline
|
|
5
|
+
<button component="topic/mark-unread" class="btn-ghost-sm d-flex gap-2 align-items-center">
|
|
6
|
+
<i class="fa fa-fw fa-inbox text-primary"></i>
|
|
7
|
+
<span class="d-none d-md-inline fw-semibold">[[topic:mark_unread]]</span>
|
|
8
8
|
</button>
|
|
9
9
|
{{{ end }}}
|
|
10
10
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
<!-- IMPORT partials/topic/tools.tpl -->
|
|
14
14
|
|
|
15
15
|
{{{ if (!feeds:disableRSS && rssFeedUrl) }}}
|
|
16
|
-
<a class="btn
|
|
16
|
+
<a class="btn-ghost-sm d-none d-lg-flex align-self-stretch" target="_blank" href="{rssFeedUrl}" itemprop="item"><i class="fa fa-rss text-primary"></i></a>
|
|
17
17
|
{{{ end }}}
|
|
18
18
|
|
|
19
19
|
<span class="loading-indicator btn float-start text-muted navbar-text hidden" done="0">
|