nodebb-theme-harmony 2.0.1 → 2.0.2
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
|
@@ -1,103 +1,103 @@
|
|
|
1
|
-
<a component="header/avatar" id="user_dropdown" href="#" role="button" class="nav-link d-flex gap-2 align-items-center text-truncate" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-label="[[user:user-menu]]">
|
|
2
|
-
{buildAvatar(user, "20px", true)}
|
|
3
|
-
<span id="user-header-name" class="nav-text small visible-open fw-semibold">{user.username}</span>
|
|
4
|
-
</a>
|
|
5
|
-
<ul id="user-control-list" component="header/usercontrol" class="overscroll-behavior-contain user-dropdown dropdown-menu shadow p-1 text-sm ff-base" role="menu">
|
|
6
|
-
<li>
|
|
7
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="header/profilelink" href="{relative_path}/user/{user.userslug}" role="menuitem" aria-label="[[user:profile]]">
|
|
8
|
-
<span component="user/status" class="flex-shrink-0 border border-white border-2 rounded-circle status {user.status}"><span class="visually-hidden">[[global:{user.status}]]</span></span>
|
|
9
|
-
<span class="fw-semibold" component="header/username">{user.username}</span>
|
|
10
|
-
</a>
|
|
11
|
-
</li>
|
|
12
|
-
<li role="presentation" class="dropdown-divider"></li>
|
|
13
|
-
<li><h6 class="dropdown-header text-xs">[[global:status]]</h6></li>
|
|
14
|
-
<li>
|
|
15
|
-
<a href="#" class="dropdown-item rounded-1 user-status d-flex align-items-center gap-2 {{{ if user.online }}}selected{{{ end }}}" data-status="online" role="menuitem">
|
|
16
|
-
<span component="user/status" class="flex-shrink-0 border border-white border-2 rounded-circle status online"></span>
|
|
17
|
-
<span class="flex-grow-1">[[global:online]]</span>
|
|
18
|
-
<i class="fa-solid fa-check text-secondary flex-shrink-0" aria-label="[[global:selected]]"></i>
|
|
19
|
-
</a>
|
|
20
|
-
</li>
|
|
21
|
-
<li>
|
|
22
|
-
<a href="#" class="dropdown-item rounded-1 user-status d-flex align-items-center gap-2 {{{ if user.away }}}selected{{{ end }}}" data-status="away" role="menuitem">
|
|
23
|
-
<span component="user/status" class="flex-shrink-0 border border-white border-2 rounded-circle status away"></span>
|
|
24
|
-
<span class="flex-grow-1">[[global:away]]</span>
|
|
25
|
-
<i class="fa-solid fa-check text-secondary flex-shrink-0"><span class="visually-hidden"></span>[[global:selected]]</span></i>
|
|
26
|
-
</a>
|
|
27
|
-
</li>
|
|
28
|
-
<li>
|
|
29
|
-
<a href="#" class="dropdown-item rounded-1 user-status d-flex align-items-center gap-2 {{{ if user.dnd }}}selected{{{ end }}}" data-status="dnd" role="menuitem">
|
|
30
|
-
<span component="user/status" class="flex-shrink-0 border border-white border-2 rounded-circle status dnd"></span>
|
|
31
|
-
<span class="flex-grow-1">[[global:dnd]]</span>
|
|
32
|
-
<i class="fa-solid fa-check text-secondary flex-shrink-0"></i>
|
|
33
|
-
</a>
|
|
34
|
-
</li>
|
|
35
|
-
<li>
|
|
36
|
-
<a href="#" class="dropdown-item rounded-1 user-status d-flex align-items-center gap-2 {{{ if user.offline }}}selected{{{ end }}}" data-status="offline" role="menuitem">
|
|
37
|
-
<span component="user/status" class="flex-shrink-0 border border-white border-2 rounded-circle status offline"></span>
|
|
38
|
-
<span class="flex-grow-1">[[global:invisible]]</span>
|
|
39
|
-
<i class="fa-solid fa-check text-secondary flex-shrink-0"></i>
|
|
40
|
-
</a>
|
|
41
|
-
</li>
|
|
42
|
-
<li role="presentation" class="dropdown-divider"></li>
|
|
43
|
-
<li>
|
|
44
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="{relative_path}/user/{user.userslug}/bookmarks" role="menuitem">
|
|
45
|
-
<i class="fa fa-fw fa-bookmark text-secondary"></i> <span>[[user:bookmarks]]</span>
|
|
46
|
-
</a>
|
|
47
|
-
</li>
|
|
48
|
-
<li>
|
|
49
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="header/profilelink/edit" href="{relative_path}/user/{user.userslug}/edit" role="menuitem">
|
|
50
|
-
<i class="fa fa-fw fa-edit text-secondary"></i> <span>[[user:edit-profile]]</span>
|
|
51
|
-
</a>
|
|
52
|
-
</li>
|
|
53
|
-
<li>
|
|
54
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="header/profilelink/settings" href="{relative_path}/user/{user.userslug}/settings" role="menuitem">
|
|
55
|
-
<i class="fa fa-fw fa-gear text-secondary"></i> <span>[[user:settings]]</span>
|
|
56
|
-
</a>
|
|
57
|
-
</li>
|
|
58
|
-
{{{ if showModMenu }}}
|
|
59
|
-
<li role="presentation" class="dropdown-divider"></li>
|
|
60
|
-
<li><h6 class="dropdown-header text-xs">[[pages:moderator-tools]]</h6></li>
|
|
61
|
-
<li>
|
|
62
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="{relative_path}/flags" role="menuitem">
|
|
63
|
-
<i class="fa fa-fw fa-flag text-secondary"></i> <span>[[pages:flagged-content]]</span>
|
|
64
|
-
</a>
|
|
65
|
-
</li>
|
|
66
|
-
<li>
|
|
67
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="{relative_path}/post-queue" role="menuitem">
|
|
68
|
-
<i class="fa fa-fw fa-list-alt text-secondary"></i> <span>[[pages:post-queue]]</span>
|
|
69
|
-
</a>
|
|
70
|
-
</li>
|
|
71
|
-
{{{ if registrationQueueEnabled }}}
|
|
72
|
-
<li>
|
|
73
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="{relative_path}/registration-queue" role="menuitem">
|
|
74
|
-
<i class="fa fa-fw fa-list-alt text-secondary"></i> <span>[[pages:registration-queue]]</span>
|
|
75
|
-
</a>
|
|
76
|
-
</li>
|
|
77
|
-
{{{ end }}}
|
|
78
|
-
<li>
|
|
79
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="{relative_path}/ip-blacklist" role="menuitem">
|
|
80
|
-
<i class="fa fa-fw fa-ban text-secondary"></i> <span>[[pages:ip-blacklist]]</span>
|
|
81
|
-
</a>
|
|
82
|
-
</li>
|
|
83
|
-
{{{ else }}}
|
|
84
|
-
{{{ if postQueueEnabled }}}
|
|
85
|
-
<li>
|
|
86
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="{relative_path}/post-queue" role="menuitem">
|
|
87
|
-
<i class="fa fa-fw fa-list-alt text-secondary"></i> <span>[[pages:post-queue]]</span>
|
|
88
|
-
</a>
|
|
89
|
-
</li>
|
|
90
|
-
{{{ end }}}
|
|
91
|
-
{{{ end }}}
|
|
92
|
-
|
|
93
|
-
<li role="presentation" class="dropdown-divider"></li>
|
|
94
|
-
<li component="user/logout">
|
|
95
|
-
<form method="post" action="{relative_path}/logout" role="menuitem">
|
|
96
|
-
<input type="hidden" name="_csrf" value="{config.csrf_token}">
|
|
97
|
-
<input type="hidden" name="noscript" value="true">
|
|
98
|
-
<button type="submit" class="dropdown-item rounded-1 d-flex align-items-center gap-2">
|
|
99
|
-
<i class="fa fa-fw fa-sign-out text-secondary"></i><span>[[global:logout]]</span>
|
|
100
|
-
</button>
|
|
101
|
-
</form>
|
|
102
|
-
</li>
|
|
103
|
-
</ul>
|
|
1
|
+
<a component="header/avatar" id="user_dropdown" href="#" role="button" class="nav-link d-flex gap-2 align-items-center text-truncate" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-label="[[user:user-menu]]">
|
|
2
|
+
{buildAvatar(user, "20px", true)}
|
|
3
|
+
<span id="user-header-name" class="nav-text small visible-open fw-semibold">{user.username}</span>
|
|
4
|
+
</a>
|
|
5
|
+
<ul id="user-control-list" component="header/usercontrol" class="overscroll-behavior-contain user-dropdown dropdown-menu shadow p-1 text-sm ff-base" role="menu">
|
|
6
|
+
<li>
|
|
7
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="header/profilelink" href="{relative_path}/user/{user.userslug}" role="menuitem" aria-label="[[user:profile]]">
|
|
8
|
+
<span component="user/status" class="flex-shrink-0 border border-white border-2 rounded-circle status {user.status}"><span class="visually-hidden">[[global:{user.status}]]</span></span>
|
|
9
|
+
<span class="fw-semibold" component="header/username">{user.username}</span>
|
|
10
|
+
</a>
|
|
11
|
+
</li>
|
|
12
|
+
<li role="presentation" class="dropdown-divider"></li>
|
|
13
|
+
<li><h6 class="dropdown-header text-xs">[[global:status]]</h6></li>
|
|
14
|
+
<li>
|
|
15
|
+
<a href="#" class="dropdown-item rounded-1 user-status d-flex align-items-center gap-2 {{{ if user.online }}}selected{{{ end }}}" data-status="online" role="menuitem">
|
|
16
|
+
<span component="user/status" class="flex-shrink-0 border border-white border-2 rounded-circle status online"></span>
|
|
17
|
+
<span class="flex-grow-1">[[global:online]]</span>
|
|
18
|
+
<i class="fa-solid fa-check text-secondary flex-shrink-0" aria-label="[[global:selected]]"></i>
|
|
19
|
+
</a>
|
|
20
|
+
</li>
|
|
21
|
+
<li>
|
|
22
|
+
<a href="#" class="dropdown-item rounded-1 user-status d-flex align-items-center gap-2 {{{ if user.away }}}selected{{{ end }}}" data-status="away" role="menuitem">
|
|
23
|
+
<span component="user/status" class="flex-shrink-0 border border-white border-2 rounded-circle status away"></span>
|
|
24
|
+
<span class="flex-grow-1">[[global:away]]</span>
|
|
25
|
+
<i class="fa-solid fa-check text-secondary flex-shrink-0"><span class="visually-hidden"></span>[[global:selected]]</span></i>
|
|
26
|
+
</a>
|
|
27
|
+
</li>
|
|
28
|
+
<li>
|
|
29
|
+
<a href="#" class="dropdown-item rounded-1 user-status d-flex align-items-center gap-2 {{{ if user.dnd }}}selected{{{ end }}}" data-status="dnd" role="menuitem">
|
|
30
|
+
<span component="user/status" class="flex-shrink-0 border border-white border-2 rounded-circle status dnd"></span>
|
|
31
|
+
<span class="flex-grow-1">[[global:dnd]]</span>
|
|
32
|
+
<i class="fa-solid fa-check text-secondary flex-shrink-0"></i>
|
|
33
|
+
</a>
|
|
34
|
+
</li>
|
|
35
|
+
<li>
|
|
36
|
+
<a href="#" class="dropdown-item rounded-1 user-status d-flex align-items-center gap-2 {{{ if user.offline }}}selected{{{ end }}}" data-status="offline" role="menuitem">
|
|
37
|
+
<span component="user/status" class="flex-shrink-0 border border-white border-2 rounded-circle status offline"></span>
|
|
38
|
+
<span class="flex-grow-1">[[global:invisible]]</span>
|
|
39
|
+
<i class="fa-solid fa-check text-secondary flex-shrink-0"></i>
|
|
40
|
+
</a>
|
|
41
|
+
</li>
|
|
42
|
+
<li role="presentation" class="dropdown-divider"></li>
|
|
43
|
+
<li>
|
|
44
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="{relative_path}/user/{user.userslug}/bookmarks" role="menuitem">
|
|
45
|
+
<i class="fa fa-fw fa-bookmark text-secondary"></i> <span>[[user:bookmarks]]</span>
|
|
46
|
+
</a>
|
|
47
|
+
</li>
|
|
48
|
+
<li>
|
|
49
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="header/profilelink/edit" href="{relative_path}/user/{user.userslug}/edit" role="menuitem">
|
|
50
|
+
<i class="fa fa-fw fa-edit text-secondary"></i> <span>[[user:edit-profile]]</span>
|
|
51
|
+
</a>
|
|
52
|
+
</li>
|
|
53
|
+
<li>
|
|
54
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="header/profilelink/settings" href="{relative_path}/user/{user.userslug}/settings" role="menuitem">
|
|
55
|
+
<i class="fa fa-fw fa-gear text-secondary"></i> <span>[[user:settings]]</span>
|
|
56
|
+
</a>
|
|
57
|
+
</li>
|
|
58
|
+
{{{ if showModMenu }}}
|
|
59
|
+
<li role="presentation" class="dropdown-divider"></li>
|
|
60
|
+
<li><h6 class="dropdown-header text-xs">[[pages:moderator-tools]]</h6></li>
|
|
61
|
+
<li>
|
|
62
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="{relative_path}/flags" role="menuitem">
|
|
63
|
+
<i class="fa fa-fw fa-flag text-secondary"></i> <span>[[pages:flagged-content]]</span>
|
|
64
|
+
</a>
|
|
65
|
+
</li>
|
|
66
|
+
<li>
|
|
67
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="{relative_path}/post-queue" role="menuitem">
|
|
68
|
+
<i class="fa fa-fw fa-list-alt text-secondary"></i> <span>[[pages:post-queue]]</span>
|
|
69
|
+
</a>
|
|
70
|
+
</li>
|
|
71
|
+
{{{ if registrationQueueEnabled }}}
|
|
72
|
+
<li>
|
|
73
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="{relative_path}/registration-queue" role="menuitem">
|
|
74
|
+
<i class="fa fa-fw fa-list-alt text-secondary"></i> <span>[[pages:registration-queue]]</span>
|
|
75
|
+
</a>
|
|
76
|
+
</li>
|
|
77
|
+
{{{ end }}}
|
|
78
|
+
<li>
|
|
79
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="{relative_path}/ip-blacklist" role="menuitem">
|
|
80
|
+
<i class="fa fa-fw fa-ban text-secondary"></i> <span>[[pages:ip-blacklist]]</span>
|
|
81
|
+
</a>
|
|
82
|
+
</li>
|
|
83
|
+
{{{ else }}}
|
|
84
|
+
{{{ if postQueueEnabled }}}
|
|
85
|
+
<li>
|
|
86
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="{relative_path}/post-queue" role="menuitem">
|
|
87
|
+
<i class="fa fa-fw fa-list-alt text-secondary"></i> <span>[[pages:post-queue]]</span>
|
|
88
|
+
</a>
|
|
89
|
+
</li>
|
|
90
|
+
{{{ end }}}
|
|
91
|
+
{{{ end }}}
|
|
92
|
+
|
|
93
|
+
<li role="presentation" class="dropdown-divider"></li>
|
|
94
|
+
<li component="user/logout">
|
|
95
|
+
<form method="post" action="{relative_path}/logout" role="menuitem">
|
|
96
|
+
<input type="hidden" name="_csrf" value="{config.csrf_token}">
|
|
97
|
+
<input type="hidden" name="noscript" value="true">
|
|
98
|
+
<button type="submit" class="dropdown-item rounded-1 d-flex align-items-center gap-2">
|
|
99
|
+
<i class="fa fa-fw fa-sign-out text-secondary"></i><span>[[global:logout]]</span>
|
|
100
|
+
</button>
|
|
101
|
+
</form>
|
|
102
|
+
</li>
|
|
103
|
+
</ul>
|
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
<nav component="sidebar/left" class="{{{ if config.theme.openSidebars}}}open{{{ end }}} text-dark bg-light sidebar sidebar-left start-0 border-end vh-100 d-none d-lg-flex flex-column justify-content-between sticky-top">
|
|
2
|
-
<ul id="main-nav" class="list-unstyled d-flex flex-column w-100 gap-2 mt-2 overflow-y-auto">
|
|
3
|
-
{{{ each navigation }}}
|
|
4
|
-
{{{ if displayMenuItem(@root, @index) }}}
|
|
5
|
-
<li class="nav-item mx-2 {./class}{{{ if ./dropdown }}} dropend{{{ end }}}" title="{./title}">
|
|
6
|
-
<a class="nav-link navigation-link d-flex gap-2 justify-content-between align-items-center {{{ if ./dropdown }}}dropdown-toggle{{{ end }}}" {{{ if ./dropdown }}} href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" {{{ else }}} href="{./route}"{{{ end }}} {{{ if ./id }}}id="{./id}"{{{ end }}}{{{ if ./targetBlank }}} target="_blank"{{{ end }}} {{{ if ./text }}}aria-label="{./text}"{{{ end }}}>
|
|
7
|
-
<span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
|
|
8
|
-
<span class="position-relative">
|
|
9
|
-
{{{ if ./iconClass }}}
|
|
10
|
-
<i class="fa fa-fw {./iconClass}" data-content="{./content}"></i>
|
|
11
|
-
<span component="navigation/count" class="visible-closed position-absolute top-0 start-100 translate-middle badge rounded-1 bg-primary {{{ if !./content }}}hidden{{{ end }}}">{./content}</span>
|
|
12
|
-
{{{ end }}}
|
|
13
|
-
</span>
|
|
14
|
-
{{{ if ./text }}}<span class="nav-text small visible-open fw-semibold text-truncate">{./text}</span>{{{ end }}}
|
|
15
|
-
</span>
|
|
16
|
-
<span component="navigation/count" class="visible-open badge rounded-1 bg-primary {{{ if !./content }}}hidden{{{ end }}}">{./content}</span>
|
|
17
|
-
</a>
|
|
18
|
-
{{{ if ./dropdown }}}
|
|
19
|
-
<ul class="dropdown-menu p-1 shadow" role="menu">
|
|
20
|
-
{./dropdownContent}
|
|
21
|
-
</ul>
|
|
22
|
-
{{{ end }}}
|
|
23
|
-
</li>
|
|
24
|
-
{{{ end }}}
|
|
25
|
-
{{{ end }}}
|
|
26
|
-
</ul>
|
|
27
|
-
<div class="sidebar-toggle-container align-self-start">
|
|
28
|
-
{{{ if !config.disableCustomUserSkins }}}
|
|
29
|
-
<!-- IMPORT partials/skin-switcher.tpl -->
|
|
30
|
-
{{{ end }}}
|
|
31
|
-
|
|
32
|
-
<div class="sidebar-toggle m-2 d-none d-lg-block">
|
|
33
|
-
<a href="#" role="button" component="sidebar/toggle" class="nav-link d-flex gap-2 align-items-center p-2 pointer w-100 text-nowrap" title="[[themes/harmony:expand]]" aria-label="[[themes/harmony:sidebar-toggle]]">
|
|
34
|
-
<i class="fa fa-fw fa-angles-right"></i>
|
|
35
|
-
<i class="fa fa-fw fa-angles-left"></i>
|
|
36
|
-
<span class="nav-text visible-open fw-semibold small lh-1">[[themes/harmony:collapse]]</span>
|
|
37
|
-
</a>
|
|
38
|
-
</div>
|
|
39
|
-
</div>
|
|
1
|
+
<nav component="sidebar/left" class="{{{ if config.theme.openSidebars}}}open{{{ end }}} text-dark bg-light sidebar sidebar-left start-0 border-end vh-100 d-none d-lg-flex flex-column justify-content-between sticky-top">
|
|
2
|
+
<ul id="main-nav" class="list-unstyled d-flex flex-column w-100 gap-2 mt-2 overflow-y-auto">
|
|
3
|
+
{{{ each navigation }}}
|
|
4
|
+
{{{ if displayMenuItem(@root, @index) }}}
|
|
5
|
+
<li class="nav-item mx-2 {./class}{{{ if ./dropdown }}} dropend{{{ end }}}" title="{./title}">
|
|
6
|
+
<a class="nav-link navigation-link d-flex gap-2 justify-content-between align-items-center {{{ if ./dropdown }}}dropdown-toggle{{{ end }}}" {{{ if ./dropdown }}} href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" {{{ else }}} href="{./route}"{{{ end }}} {{{ if ./id }}}id="{./id}"{{{ end }}}{{{ if ./targetBlank }}} target="_blank"{{{ end }}} {{{ if ./text }}}aria-label="{./text}"{{{ end }}}>
|
|
7
|
+
<span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
|
|
8
|
+
<span class="position-relative">
|
|
9
|
+
{{{ if ./iconClass }}}
|
|
10
|
+
<i class="fa fa-fw {./iconClass}" data-content="{./content}"></i>
|
|
11
|
+
<span component="navigation/count" class="visible-closed position-absolute top-0 start-100 translate-middle badge rounded-1 bg-primary {{{ if !./content }}}hidden{{{ end }}}">{./content}</span>
|
|
12
|
+
{{{ end }}}
|
|
13
|
+
</span>
|
|
14
|
+
{{{ if ./text }}}<span class="nav-text small visible-open fw-semibold text-truncate">{./text}</span>{{{ end }}}
|
|
15
|
+
</span>
|
|
16
|
+
<span component="navigation/count" class="visible-open badge rounded-1 bg-primary {{{ if !./content }}}hidden{{{ end }}}">{./content}</span>
|
|
17
|
+
</a>
|
|
18
|
+
{{{ if ./dropdown }}}
|
|
19
|
+
<ul class="dropdown-menu p-1 shadow" role="menu">
|
|
20
|
+
{./dropdownContent}
|
|
21
|
+
</ul>
|
|
22
|
+
{{{ end }}}
|
|
23
|
+
</li>
|
|
24
|
+
{{{ end }}}
|
|
25
|
+
{{{ end }}}
|
|
26
|
+
</ul>
|
|
27
|
+
<div class="sidebar-toggle-container align-self-start">
|
|
28
|
+
{{{ if !config.disableCustomUserSkins }}}
|
|
29
|
+
<!-- IMPORT partials/skin-switcher.tpl -->
|
|
30
|
+
{{{ end }}}
|
|
31
|
+
|
|
32
|
+
<div class="sidebar-toggle m-2 d-none d-lg-block">
|
|
33
|
+
<a href="#" role="button" component="sidebar/toggle" class="nav-link d-flex gap-2 align-items-center p-2 pointer w-100 text-nowrap" title="[[themes/harmony:expand]]" aria-label="[[themes/harmony:sidebar-toggle]]">
|
|
34
|
+
<i class="fa fa-fw fa-angles-right"></i>
|
|
35
|
+
<i class="fa fa-fw fa-angles-left"></i>
|
|
36
|
+
<span class="nav-text visible-open fw-semibold small lh-1">[[themes/harmony:collapse]]</span>
|
|
37
|
+
</a>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
40
|
</nav>
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
<nav component="sidebar/right" class="{{{ if config.theme.openSidebars}}}open{{{ end }}} text-dark bg-light sidebar sidebar-right end-0 border-start vh-100 d-none d-lg-flex flex-column sticky-top">
|
|
2
|
-
{{{ if config.loggedIn }}}
|
|
3
|
-
<ul id="logged-in-menu" class="list-unstyled d-flex flex-column w-100 gap-2 mt-2" role="menu">
|
|
4
|
-
<!-- IMPORT partials/sidebar/logged-in-menu.tpl -->
|
|
5
|
-
</ul>
|
|
6
|
-
{{{ else }}}
|
|
7
|
-
<ul id="logged-out-menu" class="list-unstyled d-flex flex-column w-100 gap-2 mt-2" role="menu">
|
|
8
|
-
<!-- IMPORT partials/sidebar/logged-out-menu.tpl -->
|
|
9
|
-
</ul>
|
|
10
|
-
{{{ end }}}
|
|
11
|
-
|
|
12
|
-
<div class="visible-open small text-secondary mt-auto" data-widget-area="sidebar-footer">
|
|
13
|
-
{{{each widgets.sidebar-footer}}}
|
|
14
|
-
{{./html}}
|
|
15
|
-
{{{end}}}
|
|
16
|
-
</div>
|
|
1
|
+
<nav component="sidebar/right" class="{{{ if config.theme.openSidebars}}}open{{{ end }}} text-dark bg-light sidebar sidebar-right end-0 border-start vh-100 d-none d-lg-flex flex-column sticky-top">
|
|
2
|
+
{{{ if config.loggedIn }}}
|
|
3
|
+
<ul id="logged-in-menu" class="list-unstyled d-flex flex-column w-100 gap-2 mt-2" role="menu">
|
|
4
|
+
<!-- IMPORT partials/sidebar/logged-in-menu.tpl -->
|
|
5
|
+
</ul>
|
|
6
|
+
{{{ else }}}
|
|
7
|
+
<ul id="logged-out-menu" class="list-unstyled d-flex flex-column w-100 gap-2 mt-2" role="menu">
|
|
8
|
+
<!-- IMPORT partials/sidebar/logged-out-menu.tpl -->
|
|
9
|
+
</ul>
|
|
10
|
+
{{{ end }}}
|
|
11
|
+
|
|
12
|
+
<div class="visible-open small text-secondary mt-auto" data-widget-area="sidebar-footer">
|
|
13
|
+
{{{each widgets.sidebar-footer}}}
|
|
14
|
+
{{./html}}
|
|
15
|
+
{{{end}}}
|
|
16
|
+
</div>
|
|
17
17
|
</nav>
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
<div class="dropend m-2" component="skinSwitcher" title="[[themes/harmony:skins]]">
|
|
2
|
-
<a data-bs-toggle="dropdown" href="#" role="button" class="nav-link position-relative" aria-haspopup="true" aria-expanded="false" aria-label="[[themes/harmony:skins]]">
|
|
3
|
-
<span class="justify-content-between w-100">
|
|
4
|
-
<span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
|
|
5
|
-
<span>
|
|
6
|
-
<i component="skinSwitcher/icon" class="fa fa-fw fa-paintbrush"></i>
|
|
7
|
-
</span>
|
|
8
|
-
<span class="nav-text small visible-open fw-semibold">[[themes/harmony:skins]]</span>
|
|
9
|
-
</span>
|
|
10
|
-
</span>
|
|
11
|
-
</a>
|
|
12
|
-
|
|
13
|
-
<ul class="dropdown-menu p-1 text-sm overflow-auto p-1" role="menu">
|
|
14
|
-
<div class="d-flex">
|
|
15
|
-
<div>
|
|
16
|
-
<li class="dropdown-header">Light</li>
|
|
17
|
-
<div class="d-grid" style="grid-template-columns: 1fr 1fr;">
|
|
18
|
-
{{{ each bootswatchSkinOptions.light }}}
|
|
19
|
-
<li>
|
|
20
|
-
<a href="#" class="dropdown-item rounded-1" data-value="{./value}" role="menuitem">{./name} <i class="fa fa-fw fa-check {{{ if !./selected }}} invisible {{{ end }}}"></i></a>
|
|
21
|
-
</li>
|
|
22
|
-
{{{ end }}}
|
|
23
|
-
</div>
|
|
24
|
-
</div>
|
|
25
|
-
<div>
|
|
26
|
-
<li class="dropdown-header">Dark</li>
|
|
27
|
-
{{{ each bootswatchSkinOptions.dark }}}
|
|
28
|
-
<li>
|
|
29
|
-
<a href="#" class="dropdown-item rounded-1" data-value="{./value}" role="menuitem">{./name} <i class="fa fa-fw fa-check {{{ if !./selected }}} invisible {{{ end }}}"></i></a>
|
|
30
|
-
</li>
|
|
31
|
-
{{{ end }}}
|
|
32
|
-
</div>
|
|
33
|
-
</div>
|
|
34
|
-
|
|
35
|
-
<hr class="my-1"/>
|
|
36
|
-
|
|
37
|
-
<div class="d-grid" style="grid-template-columns: 1fr 1fr;">
|
|
38
|
-
{{{ each bootswatchSkinOptions.default }}}
|
|
39
|
-
<li>
|
|
40
|
-
<a href="#" class="dropdown-item rounded-1" data-value="{./value}" role="menuitem">{./name} <i class="fa fa-fw fa-check {{{ if !./selected }}} invisible {{{ end }}}"></i></a>
|
|
41
|
-
</li>
|
|
42
|
-
{{{ end }}}
|
|
43
|
-
{{{ each bootswatchSkinOptions.custom }}}
|
|
44
|
-
<li>
|
|
45
|
-
<a href="#" class="dropdown-item rounded-1" data-value="{./value}" role="menuitem">{./name} <i class="fa fa-fw fa-check {{{ if !./selected }}} invisible {{{ end }}}"></i></a>
|
|
46
|
-
</li>
|
|
47
|
-
{{{ end }}}
|
|
48
|
-
</div>
|
|
49
|
-
</ul>
|
|
50
|
-
</div>
|
|
1
|
+
<div class="dropend m-2" component="skinSwitcher" title="[[themes/harmony:skins]]">
|
|
2
|
+
<a data-bs-toggle="dropdown" href="#" role="button" class="nav-link position-relative" aria-haspopup="true" aria-expanded="false" aria-label="[[themes/harmony:skins]]">
|
|
3
|
+
<span class="justify-content-between w-100">
|
|
4
|
+
<span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
|
|
5
|
+
<span>
|
|
6
|
+
<i component="skinSwitcher/icon" class="fa fa-fw fa-paintbrush"></i>
|
|
7
|
+
</span>
|
|
8
|
+
<span class="nav-text small visible-open fw-semibold">[[themes/harmony:skins]]</span>
|
|
9
|
+
</span>
|
|
10
|
+
</span>
|
|
11
|
+
</a>
|
|
12
|
+
|
|
13
|
+
<ul class="dropdown-menu p-1 text-sm overflow-auto p-1" role="menu">
|
|
14
|
+
<div class="d-flex">
|
|
15
|
+
<div>
|
|
16
|
+
<li class="dropdown-header">Light</li>
|
|
17
|
+
<div class="d-grid" style="grid-template-columns: 1fr 1fr;">
|
|
18
|
+
{{{ each bootswatchSkinOptions.light }}}
|
|
19
|
+
<li>
|
|
20
|
+
<a href="#" class="dropdown-item rounded-1" data-value="{./value}" role="menuitem">{./name} <i class="fa fa-fw fa-check {{{ if !./selected }}} invisible {{{ end }}}"></i></a>
|
|
21
|
+
</li>
|
|
22
|
+
{{{ end }}}
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
<div>
|
|
26
|
+
<li class="dropdown-header">Dark</li>
|
|
27
|
+
{{{ each bootswatchSkinOptions.dark }}}
|
|
28
|
+
<li>
|
|
29
|
+
<a href="#" class="dropdown-item rounded-1" data-value="{./value}" role="menuitem">{./name} <i class="fa fa-fw fa-check {{{ if !./selected }}} invisible {{{ end }}}"></i></a>
|
|
30
|
+
</li>
|
|
31
|
+
{{{ end }}}
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
<hr class="my-1"/>
|
|
36
|
+
|
|
37
|
+
<div class="d-grid" style="grid-template-columns: 1fr 1fr;">
|
|
38
|
+
{{{ each bootswatchSkinOptions.default }}}
|
|
39
|
+
<li>
|
|
40
|
+
<a href="#" class="dropdown-item rounded-1" data-value="{./value}" role="menuitem">{./name} <i class="fa fa-fw fa-check {{{ if !./selected }}} invisible {{{ end }}}"></i></a>
|
|
41
|
+
</li>
|
|
42
|
+
{{{ end }}}
|
|
43
|
+
{{{ each bootswatchSkinOptions.custom }}}
|
|
44
|
+
<li>
|
|
45
|
+
<a href="#" class="dropdown-item rounded-1" data-value="{./value}" role="menuitem">{./name} <i class="fa fa-fw fa-check {{{ if !./selected }}} invisible {{{ end }}}"></i></a>
|
|
46
|
+
</li>
|
|
47
|
+
{{{ end }}}
|
|
48
|
+
</div>
|
|
49
|
+
</ul>
|
|
50
|
+
</div>
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
{{{each tags}}}
|
|
2
|
-
<div>
|
|
3
|
-
<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">
|
|
4
|
-
<div class="fw-semibold text-nowrap tag-item w-100 text-start text-truncate">{./valueEscaped}</div>
|
|
5
|
-
<div class="text-xs text-muted text-nowrap tag-topic-count">[[global:x-topics, {txEscape(formattedNumber(./score))}]]</div>
|
|
6
|
-
</a>
|
|
7
|
-
</div>
|
|
1
|
+
{{{each tags}}}
|
|
2
|
+
<div>
|
|
3
|
+
<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">
|
|
4
|
+
<div class="fw-semibold text-nowrap tag-item w-100 text-start text-truncate">{./valueEscaped}</div>
|
|
5
|
+
<div class="text-xs text-muted text-nowrap tag-topic-count">[[global:x-topics, {txEscape(formattedNumber(./score))}]]</div>
|
|
6
|
+
</a>
|
|
7
|
+
</div>
|
|
8
8
|
{{{end}}}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
<div id="{alert_id}" role="alert" class="alert alert-dismissible alert-{type} fade show" component="toaster/toast">
|
|
2
|
-
<div class="alert-progress position-absolute top-0 start-0 bottom-0 h-100 z-0" style=" opacity:0.1;"></div>
|
|
3
|
-
<div class="d-flex flex-wrap gap-2 position-relative">
|
|
4
|
-
{{{ if image }}}
|
|
5
|
-
<img src="{image}" height="80" style="width: auto;" />
|
|
6
|
-
{{{ end }}}
|
|
7
|
-
<div class="d-flex flex-column gap-2">
|
|
8
|
-
{{{ if title }}}
|
|
9
|
-
<strong>{title}</strong>
|
|
10
|
-
{{{ end }}}
|
|
11
|
-
|
|
12
|
-
{{{ if message }}}
|
|
13
|
-
<p class="m-0">{message}</p>
|
|
14
|
-
{{{ end }}}
|
|
15
|
-
</div>
|
|
16
|
-
</div>
|
|
17
|
-
|
|
18
|
-
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="close"></button>
|
|
19
|
-
</div>
|
|
1
|
+
<div id="{alert_id}" role="alert" class="alert alert-dismissible alert-{type} fade show" component="toaster/toast">
|
|
2
|
+
<div class="alert-progress position-absolute top-0 start-0 bottom-0 h-100 z-0" style=" opacity:0.1;"></div>
|
|
3
|
+
<div class="d-flex flex-wrap gap-2 position-relative">
|
|
4
|
+
{{{ if image }}}
|
|
5
|
+
<img src="{image}" height="80" style="width: auto;" />
|
|
6
|
+
{{{ end }}}
|
|
7
|
+
<div class="d-flex flex-column gap-2">
|
|
8
|
+
{{{ if title }}}
|
|
9
|
+
<strong>{title}</strong>
|
|
10
|
+
{{{ end }}}
|
|
11
|
+
|
|
12
|
+
{{{ if message }}}
|
|
13
|
+
<p class="m-0">{message}</p>
|
|
14
|
+
{{{ end }}}
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="close"></button>
|
|
19
|
+
</div>
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
<li component="topic/event" class="timeline-event text-muted d-flex gap-2 pt-4" data-topic-event-id="{./id}" data-topic-event-type="{./type}">
|
|
2
|
-
<div class="timeline-badge">
|
|
3
|
-
<i class="fa {{{ if ./icon }}}{./icon}{{{ else }}}fa-circle{{{ end }}} small"></i>
|
|
4
|
-
</div>
|
|
5
|
-
<span class="timeline-text small d-flex align-items-center gap-1 flex-wrap">
|
|
6
|
-
{./text}
|
|
7
|
-
</span>
|
|
8
|
-
{{{ if (privileges.isAdminOrMod && ./id) }}}
|
|
9
|
-
<span component="topic/event/delete" data-topic-event-id="{./id}" data-topic-event-type="{./type}" class="timeline-text pointer" title="[[topic:delete-event]]"><i class="fa fa-trash"></i></span>
|
|
10
|
-
{{{ end }}}
|
|
11
|
-
</li>
|
|
12
|
-
|
|
1
|
+
<li component="topic/event" class="timeline-event text-muted d-flex gap-2 pt-4" data-topic-event-id="{./id}" data-topic-event-type="{./type}">
|
|
2
|
+
<div class="timeline-badge">
|
|
3
|
+
<i class="fa {{{ if ./icon }}}{./icon}{{{ else }}}fa-circle{{{ end }}} small"></i>
|
|
4
|
+
</div>
|
|
5
|
+
<span class="timeline-text small d-flex align-items-center gap-1 flex-wrap">
|
|
6
|
+
{./text}
|
|
7
|
+
</span>
|
|
8
|
+
{{{ if (privileges.isAdminOrMod && ./id) }}}
|
|
9
|
+
<span component="topic/event/delete" data-topic-event-id="{./id}" data-topic-event-type="{./type}" class="timeline-text pointer" title="[[topic:delete-event]]"><i class="fa fa-trash"></i></span>
|
|
10
|
+
{{{ end }}}
|
|
11
|
+
</li>
|
|
12
|
+
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
<div class="d-flex gap-2 mb-2 justify-content-between align-items-center flex-nowrap">
|
|
2
|
-
<div class="icon text-truncate">
|
|
3
|
-
<a href="{{{ if post.user.userslug }}}{config.relative_path}/user/{post.user.userslug}{{{else }}}#{{{ end }}}">
|
|
4
|
-
{buildAvatar(post.user, "24px", true)} {post.user.username}
|
|
5
|
-
</a>
|
|
6
|
-
</div>
|
|
7
|
-
<span class="timeago text-nowrap text-sm" title="{post.timestampISO}"></span>
|
|
8
|
-
</div>
|
|
9
|
-
|
|
1
|
+
<div class="d-flex gap-2 mb-2 justify-content-between align-items-center flex-nowrap">
|
|
2
|
+
<div class="icon text-truncate">
|
|
3
|
+
<a href="{{{ if post.user.userslug }}}{config.relative_path}/user/{post.user.userslug}{{{else }}}#{{{ end }}}">
|
|
4
|
+
{buildAvatar(post.user, "24px", true)} {post.user.username}
|
|
5
|
+
</a>
|
|
6
|
+
</div>
|
|
7
|
+
<span class="timeago text-nowrap text-sm" title="{post.timestampISO}"></span>
|
|
8
|
+
</div>
|
|
9
|
+
|
|
10
10
|
<div>{post.content}</div>
|