nodebb-theme-harmony 0.0.1 → 0.0.3
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 -0
- package/library.js +101 -26
- package/package.json +5 -2
- package/plugin.json +14 -2
- package/public/harmony.js +101 -0
- package/scss/account.scss +38 -0
- package/scss/chats.scss +72 -0
- package/scss/common.scss +65 -0
- package/scss/fonts.scss +17 -0
- package/scss/groups.scss +30 -0
- package/scss/harmony.scss +23 -3
- package/scss/header.scss +16 -0
- package/scss/mixins.scss +183 -0
- package/scss/modals.scss +4 -0
- package/scss/modules/bottom-sheet.scss +52 -0
- package/scss/modules/breadcrumbs.scss +16 -0
- package/scss/modules/composer.scss +21 -0
- package/scss/modules/cover.scss +115 -0
- package/scss/modules/tags.scss +6 -0
- package/scss/modules/topic-navigator.scss +61 -0
- package/scss/modules/topics-list.scss +20 -0
- package/scss/modules/user-menu.scss +5 -0
- package/scss/overrides.scss +65 -0
- package/scss/sidebar.scss +125 -0
- package/scss/skins.scss +13 -0
- package/scss/status.scss +25 -0
- package/scss/topic.scss +128 -0
- package/templates/account/best.tpl +0 -2
- package/templates/account/blocks.tpl +31 -26
- package/templates/account/bookmarks.tpl +0 -2
- package/templates/account/categories.tpl +1 -3
- package/templates/account/controversial.tpl +0 -2
- package/templates/account/downvoted.tpl +0 -2
- package/templates/account/followers.tpl +14 -10
- package/templates/account/following.tpl +14 -10
- package/templates/account/groups.tpl +13 -11
- package/templates/account/ignored.tpl +0 -2
- package/templates/account/posts.tpl +29 -10
- package/templates/account/profile.tpl +76 -159
- package/templates/account/topics.tpl +32 -21
- package/templates/account/uploads.tpl +38 -35
- package/templates/account/upvoted.tpl +0 -2
- package/templates/account/watched.tpl +0 -2
- package/templates/admin/plugins/harmony.tpl +17 -0
- package/templates/categories.tpl +5 -5
- package/templates/category.tpl +26 -26
- package/templates/chat.tpl +9 -9
- package/templates/chats.tpl +5 -7
- package/templates/footer.tpl +11 -7
- package/templates/groups/details.tpl +74 -64
- package/templates/groups/list.tpl +19 -14
- package/templates/header.tpl +34 -21
- package/templates/login.tpl +51 -45
- package/templates/partials/account/admin-menu.tpl +36 -0
- package/templates/partials/account/category-item.tpl +17 -17
- package/templates/partials/account/header.tpl +77 -35
- package/templates/partials/account/sidebar-left.tpl +82 -0
- package/templates/partials/breadcrumbs.tpl +4 -12
- package/templates/partials/categories/item.tpl +48 -44
- package/templates/partials/categories/lastpost.tpl +17 -19
- package/templates/partials/categories/link.tpl +5 -13
- package/templates/partials/category/sort.tpl +4 -7
- package/templates/partials/category/subcategory.tpl +4 -4
- package/templates/partials/category/tools.tpl +6 -9
- package/templates/partials/category/watch.tpl +7 -11
- package/templates/partials/category-filter-content.tpl +5 -6
- package/templates/partials/category-filter.tpl +0 -2
- package/templates/partials/category-selector-content.tpl +4 -5
- package/templates/partials/category-selector.tpl +0 -2
- package/templates/partials/chats/dropdown.tpl +24 -32
- package/templates/partials/chats/message-window.tpl +7 -7
- package/templates/partials/chats/message.tpl +34 -34
- package/templates/partials/chats/recent_room.tpl +16 -29
- package/templates/partials/chats/system-message.tpl +4 -4
- package/templates/partials/chats/user.tpl +1 -3
- package/templates/partials/groups/admin.tpl +82 -183
- package/templates/partials/groups/badge.tpl +1 -3
- package/templates/partials/groups/invited.tpl +33 -0
- package/templates/partials/groups/list.tpl +14 -21
- package/templates/partials/groups/memberlist.tpl +28 -24
- package/templates/partials/groups/pending.tpl +30 -0
- package/templates/partials/groups/sidebar-left.tpl +27 -0
- package/templates/partials/mobile-footer.tpl +70 -0
- package/templates/partials/notifications_list.tpl +19 -27
- package/templates/partials/paginator.tpl +22 -24
- package/templates/partials/post_bar.tpl +23 -18
- package/templates/partials/posts_list.tpl +0 -2
- package/templates/partials/posts_list_item.tpl +14 -29
- package/templates/partials/quick-search-results.tpl +36 -25
- package/templates/partials/search-results.tpl +4 -1
- package/templates/partials/sidebar/chats.tpl +53 -0
- package/templates/partials/sidebar/drafts.tpl +41 -0
- package/templates/partials/sidebar/logged-out-menu.tpl +38 -0
- package/templates/partials/sidebar/notifications.tpl +28 -0
- package/templates/partials/sidebar/search-mobile.tpl +29 -0
- package/templates/partials/sidebar/search.tpl +30 -0
- package/templates/partials/sidebar/user-menu.tpl +87 -0
- package/templates/partials/sidebar-left.tpl +40 -0
- package/templates/partials/sidebar-right.tpl +41 -0
- package/templates/partials/skin-switcher.tpl +35 -0
- package/templates/partials/tags_list.tpl +0 -2
- package/templates/partials/toast.tpl +6 -8
- package/templates/partials/topic/event.tpl +4 -20
- package/templates/partials/topic/navigator.tpl +20 -41
- package/templates/partials/topic/necro-post.tpl +5 -4
- package/templates/partials/topic/post-menu.tpl +23 -2
- package/templates/partials/topic/post-placeholder.tpl +15 -0
- package/templates/partials/topic/post.tpl +67 -64
- package/templates/partials/topic/quickreply.tpl +12 -14
- package/templates/partials/topic/reactions.tpl +0 -2
- package/templates/partials/topic/reply-button.tpl +16 -20
- package/templates/partials/topic/selection-tooltip.tpl +0 -2
- package/templates/partials/topic/sort.tpl +8 -6
- package/templates/partials/topic/stats.tpl +15 -14
- package/templates/partials/topic/tag.tpl +1 -3
- package/templates/partials/topic/tags.tpl +1 -5
- package/templates/partials/topic/tools.tpl +13 -0
- package/templates/partials/topic/watch.tpl +15 -13
- package/templates/partials/topic-filters.tpl +4 -5
- package/templates/partials/topic-list-bar.tpl +54 -0
- package/templates/partials/topic-terms.tpl +4 -5
- package/templates/partials/topics_list.tpl +109 -100
- package/templates/partials/users/item.tpl +7 -0
- package/templates/partials/users_list.tpl +11 -60
- package/templates/partials/users_list_menu.tpl +10 -18
- package/templates/popular.tpl +1 -18
- package/templates/recent.tpl +8 -24
- package/templates/register.tpl +74 -60
- package/templates/tag.tpl +3 -15
- package/templates/tags.tpl +3 -4
- package/templates/top.tpl +1 -18
- package/templates/topic.tpl +39 -43
- package/templates/unread.tpl +1 -22
- package/templates/users.tpl +17 -17
- package/templates/admin/plugins/persona.tpl +0 -29
- package/templates/partials/account/menu.tpl +0 -103
- package/templates/partials/header/user-menu.tpl +0 -87
- package/templates/partials/menu.tpl +0 -188
- package/templates/partials/thread_tools.tpl +0 -10
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<div class="col-12 col-md-3 col-lg-2 border-end-md text-sm mb-3">
|
|
2
|
+
<div class="nav sticky-top d-flex flex-row flex-md-column flex-wrap gap-1" style="z-index: 1;">
|
|
3
|
+
<button data-bs-toggle="tab" data-bs-target="#groups-posts" class="btn-ghost fw-semibold {{{ if template.groups/details }}}active{{{ end }}}">
|
|
4
|
+
<div class="flex-1">[[global:posts]]</div>
|
|
5
|
+
</button>
|
|
6
|
+
<button data-bs-toggle="tab" data-bs-target="#groups-members" class="btn-ghost fw-semibold">
|
|
7
|
+
<div class="flex-1">[[groups:members]]</div>
|
|
8
|
+
<span class="text-xs human-readable-number" title="{group.memberCount}">{group.memberCount}</span>
|
|
9
|
+
</button>
|
|
10
|
+
|
|
11
|
+
{{{ if group.isOwner }}}
|
|
12
|
+
<button data-bs-toggle="tab" data-bs-target="#groups-pending" class="btn-ghost fw-semibold">
|
|
13
|
+
<div class="flex-1">[[groups:details.pending]]</div>
|
|
14
|
+
<span class="text-xs human-readable-number" title="{group.pending.length}">{group.group.pending.length}</span>
|
|
15
|
+
</button>
|
|
16
|
+
|
|
17
|
+
<button data-bs-toggle="tab" data-bs-target="#groups-invited" class="btn-ghost fw-semibold">
|
|
18
|
+
<div class="flex-1">[[groups:details.invited]]</div>
|
|
19
|
+
<span class="text-xs human-readable-number" title="{group.invited.length}">{group.group.invited.length}</span>
|
|
20
|
+
</button>
|
|
21
|
+
|
|
22
|
+
<button data-bs-toggle="tab" data-bs-target="#groups-admin" class="btn-ghost fw-semibold">
|
|
23
|
+
<div class="flex-1">[[global:header.admin]]</div>
|
|
24
|
+
</button>
|
|
25
|
+
{{{ end }}}
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
<div class="text-dark bg-light bottombar p-2 d-flex d-md-none justify-content-between fixed-bottom ff-secondary align-items-center">
|
|
2
|
+
<div class="bottom-sheet">
|
|
3
|
+
<button class="btn" data-bs-toggle="dropdown">
|
|
4
|
+
<i class="fa fa-bars"></i>
|
|
5
|
+
</button>
|
|
6
|
+
<ul class="dropdown-menu">
|
|
7
|
+
{{{ each navigation }}}
|
|
8
|
+
<!-- IF function.displayMenuItem, @index -->
|
|
9
|
+
<li class="nav-item {./class}{{{ if ./dropdown }}} dropend{{{ end }}}" title="{./title}">
|
|
10
|
+
<a class="nav-link nav-btn navigation-link p-3 {{{ if navigation.dropdown }}}dropdown-toggle{{{ end }}}"
|
|
11
|
+
{{{ if ./dropdown }}} href="#" role="button" data-bs-toggle="collapse" data-bs-target="#collapse-target-{@index}" onclick="event.stopPropagation();" {{{ else }}} href="{./route}"{{{ end }}} {{{ if ./id }}}id="{./id}"{{{ end }}}{{{ if ./targetBlank }}} target="_blank"{{{ end }}}>
|
|
12
|
+
<span class="d-inline-flex justify-content-between align-items-center w-100">
|
|
13
|
+
<span class="text-nowrap truncate-open">
|
|
14
|
+
{{{ if ./iconClass }}}
|
|
15
|
+
<i class="fa fa-fw {./iconClass}" data-content="{./content}"></i>
|
|
16
|
+
{{{ end }}}
|
|
17
|
+
{{{ if navigation.text }}}
|
|
18
|
+
<span class="nav-text visible-open px-2 fw-semibold">{navigation.text}</span>
|
|
19
|
+
{{{ end }}}
|
|
20
|
+
</span>
|
|
21
|
+
<span component="navigation/count" class="visible-open badge rounded-1 bg-primary {{{ if !./content }}}hidden{{{ end }}}">{./content}</span>
|
|
22
|
+
</span>
|
|
23
|
+
</a>
|
|
24
|
+
{{{ if navigation.dropdown }}}
|
|
25
|
+
<div class="ps-3">
|
|
26
|
+
<ul id="collapse-target-{@index}" class="collapse list-unstyled ps-3">
|
|
27
|
+
{navigation.dropdownContent}
|
|
28
|
+
</ul>
|
|
29
|
+
</div>
|
|
30
|
+
{{{ end }}}
|
|
31
|
+
</li>
|
|
32
|
+
<!-- ENDIF function.displayMenuItem -->
|
|
33
|
+
{{{end}}}
|
|
34
|
+
</ul>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<div class="">
|
|
38
|
+
{{{ if config.loggedIn }}}
|
|
39
|
+
<ul id="logged-in-menu" class="list-unstyled d-flex align-items-center w-100 gap-3 mb-0">
|
|
40
|
+
{{{ if config.searchEnabled }}}
|
|
41
|
+
<li component="sidebar/search" class="nav-item m-0 search bottom-sheet position-relative">
|
|
42
|
+
<!-- IMPORT partials/sidebar/search-mobile.tpl -->
|
|
43
|
+
</li>
|
|
44
|
+
{{{ end }}}
|
|
45
|
+
|
|
46
|
+
<li component="notifications" class="nav-item m-0 notifications bottom-sheet">
|
|
47
|
+
<!-- IMPORT partials/sidebar/notifications.tpl -->
|
|
48
|
+
</li>
|
|
49
|
+
|
|
50
|
+
{{{ if canChat }}}
|
|
51
|
+
<li class="nav-item m-0 chats bottom-sheet">
|
|
52
|
+
<!-- IMPORT partials/sidebar/chats.tpl -->
|
|
53
|
+
</li>
|
|
54
|
+
{{{ end }}}
|
|
55
|
+
|
|
56
|
+
<li component="sidebar/drafts" class="nav-item m-0 drafts bottom-sheet">
|
|
57
|
+
<!-- IMPORT partials/sidebar/drafts.tpl -->
|
|
58
|
+
</li>
|
|
59
|
+
|
|
60
|
+
<li id="user_label" class="nav-item m-0 py-2 bottom-sheet usermenu">
|
|
61
|
+
<!-- IMPORT partials/sidebar/user-menu.tpl -->
|
|
62
|
+
</li>
|
|
63
|
+
</ul>
|
|
64
|
+
{{{ else }}}
|
|
65
|
+
<ul id="logged-out-menu" class="list-unstyled d-flex w-100 gap-3 mb-0 logged-out-menu">
|
|
66
|
+
<!-- IMPORT partials/sidebar/logged-out-menu.tpl -->
|
|
67
|
+
</ul>
|
|
68
|
+
{{{ end }}}
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
@@ -1,32 +1,24 @@
|
|
|
1
|
-
|
|
1
|
+
{{{ if !notifications.length }}}
|
|
2
|
+
<li class="no-notifs text-center"><a href="#" class="text-reset">[[notifications:no_notifs]]</a></li>
|
|
3
|
+
{{{ end }}}
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
<
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
{
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
<span class="text">{notifications.bodyShort}</span>
|
|
20
|
-
</a>
|
|
21
|
-
|
|
22
|
-
<div class="notification-chat-controls">
|
|
23
|
-
{{{ if ./nid }}}
|
|
24
|
-
<div class="mark-read" aria-label="Mark Read">
|
|
25
|
-
<i class="unread fa fa-circle"></i>
|
|
26
|
-
<i class="read fa fa-circle-o"></i>
|
|
5
|
+
{{{ each notifications }}}
|
|
6
|
+
<li class="{./readClass} mb-2" data-nid="{./nid}" data-path="{./path}" {{{ if ./pid }}}data-pid="{./pid}"{{{ end }}}{{{ if ./tid }}}data-tid="{./tid}"{{{ end }}}>
|
|
7
|
+
<div class="d-flex gap-1 justify-content-between">
|
|
8
|
+
<div>
|
|
9
|
+
<a href="{./path}" class="notification-chat-content text-reset">
|
|
10
|
+
<span class="text text-sm">{./bodyShort}</span>
|
|
11
|
+
</a>
|
|
12
|
+
<div class="text-xs text-muted">{./timeagoLong}</div>
|
|
13
|
+
</div>
|
|
14
|
+
<div class="notification-chat-controls">
|
|
15
|
+
{{{ if ./nid }}}
|
|
16
|
+
<button class="mark-read btn btn-light btn-sm" aria-label="Mark Read">
|
|
17
|
+
<i class="unread fa fa-xs fa-circle text-primary {{{ if ./read }}}hidden{{{ end }}}"></i>
|
|
18
|
+
<i class="read fa fa-xs fa-circle-o text-secondary {{{ if !./read }}}hidden{{{ end }}}"></i>
|
|
19
|
+
</button>
|
|
20
|
+
{{{ end }}}
|
|
27
21
|
</div>
|
|
28
|
-
{{{ end }}}
|
|
29
|
-
<span class="relTime">{notifications.timeago}</span>
|
|
30
22
|
</div>
|
|
31
23
|
</li>
|
|
32
24
|
{{{end}}}
|
|
@@ -1,47 +1,45 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
<li class="page-item previous float-start<!-- IF !pagination.prev.active --> disabled<!-- ENDIF !pagination.prev.active -->">
|
|
6
|
-
<a class="page-link" href="?{pagination.prev.qs}" data-page="{pagination.prev.page}"><i class="fa fa-chevron-left"></i> </a>
|
|
1
|
+
<div component="pagination" class="pagination-container mt-3{{{ if !pagination.pages.length }}} hidden{{{ end }}}">
|
|
2
|
+
<ul class="pagination pagination-sm gap-1 hidden-xs hidden-sm justify-content-center">
|
|
3
|
+
<li class="page-item previous float-start{{{ if !pagination.prev.active }}} disabled{{{ end }}}">
|
|
4
|
+
<a class="page-link rounded fw-secondary text-reset px-3" href="?{pagination.prev.qs}" data-page="{pagination.prev.page}"><i class="fa fa-chevron-left"></i> </a>
|
|
7
5
|
</li>
|
|
8
6
|
|
|
9
7
|
{{{each pagination.pages}}}
|
|
10
|
-
|
|
8
|
+
{{{ if pagination.pages.separator }}}
|
|
11
9
|
<li component="pagination/select-page" class="page-item page select-page">
|
|
12
|
-
<a class="page-link" href="#"><i class="fa fa-ellipsis-h"></i></a>
|
|
10
|
+
<a class="page-link rounded fw-secondary text-reset px-3" href="#"><i class="fa fa-ellipsis-h"></i></a>
|
|
13
11
|
</li>
|
|
14
|
-
|
|
15
|
-
<li class="page-item page
|
|
16
|
-
<a class="page-link" href="?{pagination.pages.qs}" data-page="{pagination.pages.page}">{pagination.pages.page}</a>
|
|
12
|
+
{{{ else }}}
|
|
13
|
+
<li class="page-item page{{{ if pagination.pages.active }}} active{{{ end }}}" >
|
|
14
|
+
<a class="page-link rounded fw-secondary text-reset px-3" href="?{pagination.pages.qs}" data-page="{pagination.pages.page}">{pagination.pages.page}</a>
|
|
17
15
|
</li>
|
|
18
|
-
|
|
16
|
+
{{{ end }}}
|
|
19
17
|
{{{end}}}
|
|
20
18
|
|
|
21
|
-
<li class="page-item next float-end
|
|
22
|
-
<a class="page-link" href="?{pagination.next.qs}" data-page="{pagination.next.page}"> <i class="fa fa-chevron-right"></i></a>
|
|
19
|
+
<li class="page-item next float-end {{{ if !pagination.next.active }}} disabled{{{ end }}}">
|
|
20
|
+
<a class="page-link rounded fw-secondary text-reset px-3" href="?{pagination.next.qs}" data-page="{pagination.next.page}"> <i class="fa fa-chevron-right"></i></a>
|
|
23
21
|
</li>
|
|
24
22
|
</ul>
|
|
25
23
|
|
|
26
|
-
<ul class="pagination
|
|
27
|
-
<li class="page-item first
|
|
28
|
-
<a class="page-link" href="?{pagination.first.qs}" data-page="1"><i class="fa fa-fast-backward"></i> </a>
|
|
24
|
+
<ul class="pagination pagination-sm hidden-md hidden-lg justify-content-center">
|
|
25
|
+
<li class="page-item first{{{ if !pagination.prev.active }}} disabled{{{ end }}}">
|
|
26
|
+
<a class="page-link fw-secondary text-reset" href="?{pagination.first.qs}" data-page="1"><i class="fa fa-fast-backward"></i> </a>
|
|
29
27
|
</li>
|
|
30
28
|
|
|
31
|
-
<li class="page-item previous
|
|
32
|
-
<a class="page-link" href="?{pagination.prev.qs}" data-page="{pagination.prev.page}"><i class="fa fa-chevron-left"></i> </a>
|
|
29
|
+
<li class="page-item previous{{{ if !pagination.prev.active }}} disabled{{{ end }}}">
|
|
30
|
+
<a class="page-link fw-secondary text-reset" href="?{pagination.prev.qs}" data-page="{pagination.prev.page}"><i class="fa fa-chevron-left"></i> </a>
|
|
33
31
|
</li>
|
|
34
32
|
|
|
35
33
|
<li component="pagination/select-page" class="page-item page select-page">
|
|
36
|
-
<a class="page-link" href="#">{pagination.currentPage} / {pagination.pageCount}</a>
|
|
34
|
+
<a class="page-link fw-secondary text-reset" href="#">{pagination.currentPage} / {pagination.pageCount}</a>
|
|
37
35
|
</li>
|
|
38
36
|
|
|
39
|
-
<li class="page-item next
|
|
40
|
-
<a class="page-link" href="?{pagination.next.qs}" data-page="{pagination.next.page}"> <i class="fa fa-chevron-right"></i></a>
|
|
37
|
+
<li class="page-item next{{{ if !pagination.next.active }}} disabled{{{ end }}}">
|
|
38
|
+
<a class="page-link fw-secondary text-reset" href="?{pagination.next.qs}" data-page="{pagination.next.page}"> <i class="fa fa-chevron-right"></i></a>
|
|
41
39
|
</li>
|
|
42
40
|
|
|
43
|
-
<li class="page-item last
|
|
44
|
-
<a class="page-link" href="?{pagination.last.qs}" data-page="{pagination.pageCount}"><i class="fa fa-fast-forward"></i> </a>
|
|
41
|
+
<li class="page-item last{{{ if !pagination.next.active }}} disabled{{{ end }}}">
|
|
42
|
+
<a class="page-link fw-secondary text-reset" href="?{pagination.last.qs}" data-page="{pagination.pageCount}"><i class="fa fa-fast-forward"></i> </a>
|
|
45
43
|
</li>
|
|
46
44
|
</ul>
|
|
47
45
|
</div>
|
|
@@ -1,22 +1,27 @@
|
|
|
1
|
-
|
|
1
|
+
<nav class="sticky-tools navbar navbar-expand mt-4 p-0 border-0 rounded topic-main-buttons">
|
|
2
|
+
<div class="card card-header flex-row p-2 border rounded ff-secondary w-100">
|
|
3
|
+
<ul class="navbar-nav me-auto gap-2 align-items-center">
|
|
4
|
+
{{{ if loggedIn }}}
|
|
5
|
+
<button component="topic/mark-unread" class="btn btn-link d-flex gap-2 align-items-center">
|
|
6
|
+
<i class="fa fa-fw fa-inbox small link-primary"></i>
|
|
7
|
+
<span class="d-none d-md-inline small">[[topic:mark_unread]]</span>
|
|
8
|
+
</button>
|
|
9
|
+
{{{ end }}}
|
|
2
10
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
</span>
|
|
11
|
+
<!-- IMPORT partials/topic/watch.tpl -->
|
|
12
|
+
<!-- IMPORT partials/topic/sort.tpl -->
|
|
13
|
+
<!-- IMPORT partials/topic/tools.tpl -->
|
|
7
14
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
</button>
|
|
12
|
-
<!-- ENDIF loggedIn -->
|
|
15
|
+
{{{ if (!feeds:disableRSS && rssFeedUrl) }}}
|
|
16
|
+
<a class="btn btn-link link-primary hidden-xs" target="_blank" href="{rssFeedUrl}" itemprop="item"><i class="fa fa-rss"></i></a>
|
|
17
|
+
{{{ end }}}
|
|
13
18
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
<span class="loading-indicator btn float-start text-muted navbar-text hidden" done="0">
|
|
20
|
+
<i class="fa fa-refresh fa-spin"></i>
|
|
21
|
+
<span class="hidden-xs">[[topic:loading_more_posts]]</span>
|
|
22
|
+
</span>
|
|
23
|
+
</ul>
|
|
24
|
+
<!-- IMPORT partials/topic/reply-button.tpl -->
|
|
20
25
|
</div>
|
|
21
|
-
|
|
22
|
-
</
|
|
26
|
+
|
|
27
|
+
</nav>
|
|
@@ -1,34 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
<hr/>
|
|
2
|
+
<a class="topic-title fw-semibold fs-5 text-reset" href="{config.relative_path}/post/{./pid}">
|
|
3
|
+
{{{ if !./isMainPost }}}RE: {{{ end }}}{./topic.title}
|
|
4
|
+
</a>
|
|
5
|
+
<li component="post" class="posts-list-item {{{ if ./deleted }}} deleted{{{ else }}}{{{ if ./topic.deleted }}} deleted{{{ end }}}{{{ end }}}{{{ if ./topic.scheduled }}} scheduled{{{ end }}}" data-pid="{./pid}" data-uid="{./uid}">
|
|
6
|
+
<div class="post-body d-flex flex-column gap-1">
|
|
7
|
+
<div class="d-flex gap-3 post-info">
|
|
8
|
+
<div class="post-author d-flex gap-1">
|
|
9
|
+
<a class="lh-1" href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(./user, "16px", true, "not-responsive")}</a>
|
|
10
|
+
<a class="fw-semibold text-sm" href="{config.relative_path}/user/{./user.userslug}">{../user.displayname}</a>
|
|
11
|
+
</div>
|
|
12
|
+
<span class="timeago text-sm text-muted" title="{../timestampISO}"></span>
|
|
11
13
|
</div>
|
|
12
14
|
|
|
13
|
-
<
|
|
14
|
-
|
|
15
|
-
{{{ if ../isMainPost }}}
|
|
16
|
-
{{{ if ../topic.tags.length }}}
|
|
17
|
-
<span class="tag-list">
|
|
18
|
-
{{{ each ../topic.tags }}}
|
|
19
|
-
<a href="{config.relative_path}/tags/{topic.tags.valueEncoded}"><span class="tag tag-item tag-class-{topic.tags.class}">{topic.tags.valueEscaped}</span></a>
|
|
20
|
-
{{{ end }}}
|
|
21
|
-
</span>
|
|
22
|
-
{{{ end }}}
|
|
23
|
-
{{{ end }}}
|
|
24
|
-
|
|
25
|
-
<div class="post-info">
|
|
26
|
-
<a href="{config.relative_path}/user/{../user.userslug}">{buildAvatar(../user, "28px", true, "user-img not-responsive")}</a>
|
|
27
|
-
|
|
28
|
-
<div class="post-author">
|
|
29
|
-
<a href="{config.relative_path}/user/{../user.userslug}">{../user.displayname}</a><br />
|
|
30
|
-
<span class="timeago" title="{../timestampISO}"></span>
|
|
31
|
-
</div>
|
|
15
|
+
<div component="post/content" class="content text-sm">
|
|
16
|
+
{../content}
|
|
32
17
|
</div>
|
|
33
18
|
</div>
|
|
34
19
|
</li>
|
|
@@ -1,36 +1,47 @@
|
|
|
1
|
-
|
|
1
|
+
{{{ if multiplePages }}}
|
|
2
|
+
<div class="show-more-container">
|
|
3
|
+
<div class="text-center d-block d-md-none">
|
|
4
|
+
<a href="{url}" class="btn btn-primary">
|
|
5
|
+
[[search:see-more-results, {matchCount}]]
|
|
6
|
+
</a>
|
|
7
|
+
</div>
|
|
8
|
+
<li role="separator" class="dropdown-divider d-block d-md-none"></li>
|
|
9
|
+
</div>
|
|
10
|
+
{{{ end }}}
|
|
2
11
|
|
|
3
12
|
<ul id="quick-search-results" class="quick-search-results list-unstyled mb-0 p-0 overflow-auto" style="max-width:400px; max-height: 500px;">
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
<
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
<li role="separator" class="dropdown-divider d-none d-md-block"></li>
|
|
14
|
+
{{{ each posts }}}
|
|
15
|
+
<li data-tid="{posts.topic.tid}" data-pid="{posts.pid}" class="d-flex flex-column gap-1">
|
|
16
|
+
<a href="{config.relative_path}/post/{posts.pid}"
|
|
17
|
+
class="dropdown-item rounded-1 text-reset d-block text-truncate px-2 py-1">
|
|
18
|
+
<span class="quick-search-title fw-semibold text-sm">{posts.topic.title}</span>
|
|
19
|
+
<br/>
|
|
20
|
+
<p class="snippet text-xs text-break text-wrap mb-0">
|
|
21
|
+
{posts.snippet}
|
|
22
|
+
</p>
|
|
23
|
+
</a>
|
|
24
|
+
<div class="d-flex gap-1 post-info px-2 text-xs">
|
|
15
25
|
<div class="category-item d-inline-block">
|
|
16
|
-
{
|
|
17
|
-
• <span class="timeago" title="{posts.timestampISO}"></span>
|
|
26
|
+
<span>{function.buildCategoryLabel, posts.category}</span>
|
|
18
27
|
</div>
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
</li>
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
{{{end}}}
|
|
28
|
+
<span class="timeago text-muted" title="{posts.timestampISO}"></span>
|
|
29
|
+
</div>
|
|
30
|
+
</li>
|
|
31
|
+
<li role="separator" class="dropdown-divider"></li>
|
|
32
|
+
{{{ end }}}
|
|
33
|
+
|
|
26
34
|
</ul>
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
35
|
+
|
|
36
|
+
{{{ if multiplePages }}}
|
|
37
|
+
<div class="text-center mt-2 d-none d-md-block">
|
|
38
|
+
<a href="{url}" class="btn btn-sm btn-primary">
|
|
30
39
|
[[search:see-more-results, {matchCount}]]
|
|
31
40
|
</a>
|
|
32
41
|
</div>
|
|
33
|
-
|
|
42
|
+
{{{ end }}}
|
|
43
|
+
|
|
34
44
|
{{{if !posts.length}}}
|
|
35
45
|
<div class="text-center no-results">[[search:no-matches]]</li>
|
|
46
|
+
<li role="separator" class="dropdown-divider d-block d-md-none"></li>
|
|
36
47
|
{{{end}}}
|
|
@@ -46,8 +46,11 @@
|
|
|
46
46
|
{{{ end }}}
|
|
47
47
|
|
|
48
48
|
{{{ if categories.length }}}
|
|
49
|
-
<ul class="categories">
|
|
49
|
+
<ul class="categories list-unstyled">
|
|
50
50
|
{{{each categories}}}
|
|
51
|
+
{{{ if !@first }}}
|
|
52
|
+
<hr class="text-muted opacity-25"/>
|
|
53
|
+
{{{ end }}}
|
|
51
54
|
<!-- IMPORT partials/categories/item.tpl -->
|
|
52
55
|
{{{end}}}
|
|
53
56
|
</ul>
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<a data-bs-toggle="dropdown" href="#" role="button" class="nav-link nav-btn d-flex gap-2 justify-content-between align-items-center position-relative" title="[[global:header.chats]]" component="chat/dropdown">
|
|
2
|
+
<span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
|
|
3
|
+
<span class="position-relative">
|
|
4
|
+
<i component="chat/icon" class="fa fa-fw {{{ if unreadCount.chat}}}fa-comment{{{ else }}}fa-comment-o{{{ end }}} unread-count" data-content="{unreadCount.chat}"></i>
|
|
5
|
+
<span component="chat/count" class="visible-closed position-absolute top-0 start-100 translate-middle badge rounded-1 bg-primary {{{ if !unreadCount.chat }}}hidden{{{ end }}}">{unreadCount.chat}</span>
|
|
6
|
+
</span>
|
|
7
|
+
<span class="nav-text small visible-open fw-semibold">[[global:header.chats]]</span>
|
|
8
|
+
</span>
|
|
9
|
+
<span component="chat/count" class="visible-open badge rounded-1 bg-primary {{{ if !unreadCount.chat }}}hidden{{{ end }}}">{unreadCount.chat}</span>
|
|
10
|
+
</a>
|
|
11
|
+
<ul class="chats-dropdown dropdown-menu p-1 shadow">
|
|
12
|
+
<li>
|
|
13
|
+
<ul component="chat/list" class="chat-list chats-list list-unstyled p-2">
|
|
14
|
+
<li class="dropdown-item rounded-1 p-2 d-flex gap-2 placeholder-wave">
|
|
15
|
+
<div class="main-avatar">
|
|
16
|
+
<div class="placeholder" style="width: 32px; height: 32px;"></div>
|
|
17
|
+
</div>
|
|
18
|
+
<div class="d-flex flex-grow-1 flex-column w-100">
|
|
19
|
+
<div class="text-xs placeholder col-3"> </div>
|
|
20
|
+
<div class="text-sm placeholder col-11"> </div>
|
|
21
|
+
<div class="text-xs placeholder col-4"> </div>
|
|
22
|
+
</div>
|
|
23
|
+
</li>
|
|
24
|
+
<li class="dropdown-item rounded-1 p-2 d-flex gap-2 placeholder-wave">
|
|
25
|
+
<div class="main-avatar">
|
|
26
|
+
<div class="placeholder" style="width: 32px; height: 32px;"></div>
|
|
27
|
+
</div>
|
|
28
|
+
<div class="d-flex flex-grow-1 flex-column w-100">
|
|
29
|
+
<div class="text-xs placeholder col-3"> </div>
|
|
30
|
+
<div class="text-sm placeholder col-11"> </div>
|
|
31
|
+
<div class="text-xs placeholder col-4"> </div>
|
|
32
|
+
</div>
|
|
33
|
+
</li>
|
|
34
|
+
<li class="dropdown-item rounded-1 p-2 d-flex gap-2 placeholder-wave">
|
|
35
|
+
<div class="main-avatar">
|
|
36
|
+
<div class="placeholder" style="width: 32px; height: 32px;"></div>
|
|
37
|
+
</div>
|
|
38
|
+
<div class="d-flex flex-grow-1 flex-column w-100">
|
|
39
|
+
<div class="text-xs placeholder col-3"> </div>
|
|
40
|
+
<div class="text-sm placeholder col-11"> </div>
|
|
41
|
+
<div class="text-xs placeholder col-4"> </div>
|
|
42
|
+
</div>
|
|
43
|
+
</li>
|
|
44
|
+
</ul>
|
|
45
|
+
</li>
|
|
46
|
+
<li class="dropdown-divider"></li>
|
|
47
|
+
<li class="notif-dropdown-link">
|
|
48
|
+
<div class="d-flex justify-content-center gap-1 flex-nowrap">
|
|
49
|
+
<a component="chats/mark-all-read" role="button" href="#" class="btn btn-sm btn-light mark-all-read flex-fill text-nowrap ff-secondary"><i class="fa fa-check-double"></i> [[modules:chat.mark_all_read]]</a>
|
|
50
|
+
<a class="btn btn-sm btn-primary flex-fill text-nowrap ff-secondary" href="{relative_path}/user/{user.userslug}/chats"><i class="fa fa-list"></i> [[modules:chat.see_all]]</a>
|
|
51
|
+
</div>
|
|
52
|
+
</li>
|
|
53
|
+
</ul>
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<a data-bs-toggle="dropdown" href="#" role="button" class="nav-link nav-btn d-flex gap-2 justify-content-between align-items-center position-relative" title="[[global:header.drafts]]">
|
|
2
|
+
<span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
|
|
3
|
+
<span class="position-relative">
|
|
4
|
+
<i component="drafts/icon" class="fa fa-fw fa-pen-to-square unread-count"></i>
|
|
5
|
+
<span component="drafts/count" class="visible-closed position-absolute top-0 start-100 translate-middle badge rounded-1 bg-primary hidden">0</span>
|
|
6
|
+
</span>
|
|
7
|
+
<span class="nav-text small visible-open fw-semibold">[[global:header.drafts]]</span>
|
|
8
|
+
</span>
|
|
9
|
+
<span component="drafts/count" class="visible-open badge rounded-1 bg-primary hidden">0</span>
|
|
10
|
+
</a>
|
|
11
|
+
<ul class="drafts-dropdown dropdown-menu p-1 shadow">
|
|
12
|
+
<li>
|
|
13
|
+
<ul component="drafts/list" class="draft-list list-unstyled d-flex flex-column gap-1">
|
|
14
|
+
<li class="no-drafts text-center hidden p-3 text-sm text-muted">[[modules:composer.no-drafts]]</li>
|
|
15
|
+
|
|
16
|
+
{{{ each drafts }}}
|
|
17
|
+
{{{ if !@first}}}
|
|
18
|
+
<hr class="m-0"/>
|
|
19
|
+
{{{ end }}}
|
|
20
|
+
<li class="dropdown-item rounded-1 p-2" data-save-id="{./save_id}">
|
|
21
|
+
<div class="d-flex gap-1 justify-content-between">
|
|
22
|
+
<div class="d-flex flex-column" component="drafts/open" data-save-id="{./save_id}">
|
|
23
|
+
{{{ if ./title}}}
|
|
24
|
+
<div class="text text-xs fw-semibold">{./title}</div>
|
|
25
|
+
{{{ end }}}
|
|
26
|
+
{{{ if ./text }}}
|
|
27
|
+
<div class="text text-sm line-clamp-3">{./text}</div>
|
|
28
|
+
{{{ end }}}
|
|
29
|
+
<div class="timeago text-xs text-muted" title="{./timestampISO}"></div>
|
|
30
|
+
</div>
|
|
31
|
+
<div class="">
|
|
32
|
+
<button component="drafts/delete" data-save-id="{./save_id}" class="btn btn-light btn-sm">
|
|
33
|
+
<i class="unread fa fa-xs fa-trash text-secondary"></i>
|
|
34
|
+
</button>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
</li>
|
|
38
|
+
{{{ end }}}
|
|
39
|
+
</ul>
|
|
40
|
+
</li>
|
|
41
|
+
</ul>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
|
|
2
|
+
<li class="nav-item mx-2" title="[[global:login]]">
|
|
3
|
+
<a class="nav-link nav-btn" href="{relative_path}/login">
|
|
4
|
+
<span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
|
|
5
|
+
<span class="position-relative">
|
|
6
|
+
<i class="fa fa-fw fa-sign-in"></i>
|
|
7
|
+
</span>
|
|
8
|
+
<span class="nav-text small visible-open fw-semibold">[[global:login]]</span>
|
|
9
|
+
</span>
|
|
10
|
+
</a>
|
|
11
|
+
</li>
|
|
12
|
+
<hr class="my-2 mx-2 visible-open">
|
|
13
|
+
{{{ if allowRegistration }}}
|
|
14
|
+
<li class="nav-item mx-2" title="[[global:register]]">
|
|
15
|
+
<span class="text-xs visible-open">[[login:dont_have_account]]</span>
|
|
16
|
+
<a class="nav-link nav-btn" href="{relative_path}/register">
|
|
17
|
+
<span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
|
|
18
|
+
<span class="position-relative">
|
|
19
|
+
<i class="fa fa-fw fa-user-plus"></i>
|
|
20
|
+
</span>
|
|
21
|
+
<span class="nav-text small visible-open fw-semibold">[[global:register]]</span>
|
|
22
|
+
</span>
|
|
23
|
+
</a>
|
|
24
|
+
</li>
|
|
25
|
+
<hr class="my-2 mx-2 visible-open">
|
|
26
|
+
{{{ end }}}
|
|
27
|
+
|
|
28
|
+
{{{ if config.searchEnabled }}}
|
|
29
|
+
<li component="sidebar/search" class="visible-open nav-item mx-2 search">
|
|
30
|
+
<div class="d-flex gap-2 py-1 px-2 align-items-center" title="[[harmony:login-register-to-search]]">
|
|
31
|
+
<i class="fa fa-fw fa-search text-muted"></i>
|
|
32
|
+
<span class="nav-text visible-open text-xs text-muted">[[harmony:login-register-to-search]]</span>
|
|
33
|
+
</a>
|
|
34
|
+
</a>
|
|
35
|
+
{{{ end }}}
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<a data-bs-toggle="dropdown" href="#" role="button" class="nav-link nav-btn d-flex gap-2 justify-content-between align-items-center position-relative" title="[[global:header.notifications]]">
|
|
2
|
+
<span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
|
|
3
|
+
<span class="position-relative">
|
|
4
|
+
<i component="notifications/icon" class="fa fa-fw {{{ if unreadCount.notification}}}fa-bell{{{ else }}}fa-bell-o{{{ end }}} unread-count" data-content="{unreadCount.notification}"></i>
|
|
5
|
+
<span component="notifications/count" class="visible-closed position-absolute top-0 start-100 translate-middle badge rounded-1 bg-primary {{{ if !unreadCount.notification }}}hidden{{{ end }}}">{unreadCount.notification}</span>
|
|
6
|
+
</span>
|
|
7
|
+
<span class="nav-text small visible-open fw-semibold">[[global:header.notifications]]</span>
|
|
8
|
+
</span>
|
|
9
|
+
<span component="notifications/count" class="visible-open badge rounded-1 bg-primary {{{ if !unreadCount.notification }}}hidden{{{ end }}}">{unreadCount.notification}</span>
|
|
10
|
+
</a>
|
|
11
|
+
<ul class="notifications-dropdown dropdown-menu p-2 shadow">
|
|
12
|
+
<li>
|
|
13
|
+
<ul component="notifications/list" class="notification-list list-unstyled p-2">
|
|
14
|
+
<li class="mb-2 placeholder-wave">
|
|
15
|
+
<div class="text-sm placeholder col-11"> </div>
|
|
16
|
+
<div class="text-sm placeholder col-5"> </div><br />
|
|
17
|
+
<div class="text-xs placeholder col-3"> </div>
|
|
18
|
+
</li>
|
|
19
|
+
</ul>
|
|
20
|
+
</li>
|
|
21
|
+
<li class="dropdown-divider"></li>
|
|
22
|
+
<li class="notif-dropdown-link">
|
|
23
|
+
<div class="d-flex justify-content-center gap-1 flex-nowrap">
|
|
24
|
+
<a role="button" href="#" class="btn btn-sm btn-light mark-all-read flex-fill text-nowrap ff-secondary"><i class="fa fa-check-double"></i> [[notifications:mark_all_read]]</a>
|
|
25
|
+
<a class="btn btn-sm btn-primary flex-fill text-nowrap ff-secondary" href="{relative_path}/notifications"><i class="fa fa-list"></i> [[notifications:see_all]]</a>
|
|
26
|
+
</div>
|
|
27
|
+
</li>
|
|
28
|
+
</ul>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<a component="search/button" id="search-button" href="#" role="button" class="nav-link nav-btn text-truncate" data-bs-toggle="dropdown" title="[[global:header.search]]">
|
|
2
|
+
<i class="fa fa-search fa-fw"></i>
|
|
3
|
+
<span class="nav-text visible-open px-2 fw-semibold">[[global:search]]</span>
|
|
4
|
+
</a>
|
|
5
|
+
<div class="search-dropdown dropdown-menu p-2 shadow">
|
|
6
|
+
<form component="search/form" id="search-form" class="d-flex justify-content-end align-items-center" role="search" method="GET">
|
|
7
|
+
<div component="search/fields" class="w-100" id="search-fields">
|
|
8
|
+
<div id="quick-search-container" class="quick-search-container d-block hidden">
|
|
9
|
+
<div class="form-check filter-category mb-2 ms-2">
|
|
10
|
+
<input class="form-check-input" type="checkbox" checked>
|
|
11
|
+
<label class="form-check-label name"></label>
|
|
12
|
+
</div>
|
|
13
|
+
|
|
14
|
+
<div class="text-center loading-indicator"><i class="fa fa-spinner fa-spin"></i></div>
|
|
15
|
+
<div class="quick-search-results-container"></div>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
<div class="d-flex gap-1 input-container mt-2">
|
|
19
|
+
<input autocomplete="off" type="text" class="form-control" placeholder="[[global:search]]" name="query" value="">
|
|
20
|
+
|
|
21
|
+
<div class="nav-btn d-flex justify-content-center align-items-center advanced-search-link">
|
|
22
|
+
<i class="fa fa-gears fa-fw text-muted"></i>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
<button type="submit" class="btn btn-outline-secondary hide">[[global:search]]</button>
|
|
27
|
+
</div>
|
|
28
|
+
</form>
|
|
29
|
+
</div>
|