nodebb-theme-harmony 1.0.0-beta.4 → 1.0.0-beta.41
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/library.js +21 -7
- package/package.json +1 -1
- package/public/harmony.js +107 -9
- package/public/settings.js +1 -0
- package/scss/common.scss +46 -4
- package/scss/harmony.scss +2 -0
- package/scss/mixins.scss +7 -3
- package/scss/modals.scss +6 -1
- package/scss/modules/bottom-sheet.scss +1 -1
- package/scss/modules/composer.scss +0 -4
- package/scss/modules/cover.scss +1 -11
- package/scss/modules/paginator.scss +24 -0
- package/scss/overrides.scss +3 -1
- package/scss/search.scss +8 -0
- package/scss/sidebar.scss +7 -4
- package/scss/topic.scss +22 -12
- package/templates/account/blocks.tpl +35 -41
- package/templates/account/categories.tpl +23 -30
- package/templates/account/consent.tpl +66 -10
- package/templates/account/edit/password.tpl +25 -30
- package/templates/account/edit/username.tpl +21 -26
- package/templates/account/edit.tpl +105 -116
- package/templates/account/followers.tpl +12 -19
- package/templates/account/following.tpl +12 -18
- package/templates/account/groups.tpl +12 -17
- package/templates/account/info.tpl +178 -206
- package/templates/account/posts.tpl +31 -36
- package/templates/account/profile.tpl +66 -73
- package/templates/account/sessions.tpl +8 -30
- package/templates/account/settings.tpl +193 -198
- package/templates/account/theme.tpl +34 -25
- package/templates/account/topics.tpl +33 -38
- package/templates/account/uploads.tpl +33 -40
- package/templates/categories.tpl +1 -1
- package/templates/category.tpl +12 -13
- package/templates/flags/detail.tpl +24 -25
- package/templates/flags/list.tpl +11 -11
- package/templates/footer.tpl +2 -2
- package/templates/groups/details.tpl +20 -17
- package/templates/groups/members.tpl +0 -2
- package/templates/partials/account/footer.tpl +3 -0
- package/templates/partials/account/header.tpl +78 -81
- package/templates/partials/account/session-list.tpl +18 -0
- package/templates/partials/breadcrumbs.tpl +6 -6
- package/templates/partials/categories/item.tpl +19 -18
- package/templates/partials/categories/lastpost.tpl +2 -2
- package/templates/partials/{category-filter-content.tpl → category/filter-dropdown-content.tpl} +8 -6
- package/templates/partials/{category-selector-content.tpl → category/selector-dropdown-content.tpl} +3 -3
- package/templates/partials/category/subcategory.tpl +1 -1
- package/templates/partials/category/tags.tpl +0 -2
- package/templates/partials/category/watch.tpl +28 -4
- package/templates/partials/chats/message-window.tpl +1 -0
- package/templates/partials/chats/message.tpl +4 -6
- package/templates/partials/cookie-consent.tpl +5 -5
- package/templates/partials/flags/filters.tpl +1 -1
- package/templates/partials/groups/admin.tpl +4 -4
- package/templates/partials/groups/badge.tpl +1 -1
- package/templates/partials/groups/memberlist.tpl +1 -1
- package/templates/partials/groups/sidebar-left.tpl +1 -1
- package/templates/partials/header/brand.tpl +1 -1
- package/templates/partials/mobile-footer.tpl +69 -61
- package/templates/partials/paginator.tpl +9 -9
- package/templates/partials/post_bar.tpl +6 -5
- package/templates/partials/posts_list_item.tpl +5 -5
- package/templates/partials/quick-search-results.tpl +1 -1
- package/templates/partials/search-filters.tpl +184 -0
- package/templates/partials/search-results.tpl +28 -32
- package/templates/partials/sidebar/chats.tpl +2 -2
- package/templates/partials/sidebar/drafts.tpl +42 -34
- package/templates/partials/sidebar/logged-in-menu.tpl +5 -5
- package/templates/partials/sidebar/notifications.tpl +3 -3
- package/templates/partials/sidebar/search.tpl +1 -1
- package/templates/partials/sidebar/user-menu.tpl +1 -1
- package/templates/partials/sidebar-left.tpl +13 -10
- package/templates/partials/sidebar-right.tpl +1 -1
- package/templates/partials/skin-switcher.tpl +2 -2
- package/templates/partials/tags_list.tpl +6 -4
- package/templates/partials/topic/browsing-users.tpl +0 -2
- package/templates/partials/topic/event.tpl +1 -1
- package/templates/partials/topic/navigation-post.tpl +5 -9
- package/templates/partials/topic/navigator-mobile.tpl +48 -0
- package/templates/partials/topic/post-editor.tpl +0 -2
- package/templates/partials/topic/post-menu-list.tpl +35 -37
- package/templates/partials/topic/post.tpl +27 -10
- package/templates/partials/topic/quickreply.tpl +6 -6
- package/templates/partials/topic/reply-button.tpl +1 -1
- package/templates/partials/topic/topic-menu-list.tpl +16 -18
- package/templates/partials/topic/watch.tpl +28 -4
- package/templates/partials/topic-list-bar.tpl +7 -7
- package/templates/partials/topics_list.tpl +41 -41
- package/templates/partials/users/filter-dropdown-content.tpl +20 -0
- package/templates/popular.tpl +1 -1
- package/templates/post-queue.tpl +112 -0
- package/templates/recent.tpl +1 -1
- package/templates/search.tpl +39 -177
- package/templates/tags.tpl +1 -1
- package/templates/top.tpl +1 -1
- package/templates/topic.tpl +4 -4
- package/templates/unread.tpl +1 -1
- package/templates/users.tpl +1 -1
- package/templates/modules/usercard.tpl +0 -39
- package/templates/partials/acceptTos.tpl +0 -11
- package/templates/partials/category-filter-right.tpl +0 -5
- package/templates/partials/category-filter.tpl +0 -3
- package/templates/partials/category-selector-right.tpl +0 -5
- package/templates/partials/category-selector.tpl +0 -3
- package/templates/partials/slideout-menu.tpl +0 -6
|
@@ -1,70 +1,78 @@
|
|
|
1
|
-
<div class="
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
<
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
1
|
+
<div component="bottombar" class="bottombar d-flex flex-column d-md-none fixed-bottom ff-secondary gap-1 align-items-center">
|
|
2
|
+
|
|
3
|
+
<!-- IMPORT partials/topic/navigator-mobile.tpl -->
|
|
4
|
+
|
|
5
|
+
<div class="bottombar-nav p-2 text-dark bg-light d-flex justify-content-between align-items-center w-100">
|
|
6
|
+
<div class="">
|
|
7
|
+
<a href="#" role="button" class="nav-link nav-btn d-flex justify-content-between align-items-center position-relative" data-bs-toggle="dropdown">
|
|
8
|
+
<span class="position-relative">
|
|
9
|
+
<i class="fa fa-fw fa-lg fa-bars"></i>
|
|
10
|
+
<span component="unread/count" data-unread-url="{unreadCount.unreadUrl}" class="position-absolute top-0 start-100 translate-middle badge rounded-1 bg-primary {{{ if !unreadCount.mobileUnread }}}hidden{{{ end }}}">{unreadCount.mobileUnread}</span>
|
|
11
|
+
</span>
|
|
12
|
+
</a>
|
|
13
|
+
<ul class="navigation-dropdown dropdown-menu">
|
|
14
|
+
{{{ each navigation }}}
|
|
15
|
+
{{{ if displayMenuItem(@root, @index) }}}
|
|
16
|
+
<li class="nav-item {./class}{{{ if ./dropdown }}} dropend{{{ end }}}" title="{./title}">
|
|
17
|
+
<a class="nav-link nav-btn navigation-link px-3 py-2 {{{ if ./dropdown }}}dropdown-toggle{{{ end }}}"
|
|
18
|
+
{{{ 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 }}}>
|
|
19
|
+
<span class="d-inline-flex justify-content-between align-items-center w-100">
|
|
20
|
+
<span class="text-nowrap">
|
|
21
|
+
{{{ if ./iconClass }}}
|
|
22
|
+
<i class="fa fa-fw {./iconClass}" data-content="{./content}"></i>
|
|
23
|
+
{{{ end }}}
|
|
24
|
+
{{{ if ./text }}}
|
|
25
|
+
<span class="nav-text px-2 fw-semibold">{./text}</span>
|
|
26
|
+
{{{ end }}}
|
|
27
|
+
</span>
|
|
28
|
+
<span component="navigation/count" class="badge rounded-1 bg-primary {{{ if !./content }}}hidden{{{ end }}}">{./content}</span>
|
|
20
29
|
</span>
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
</
|
|
30
|
+
</a>
|
|
31
|
+
{{{ if ./dropdown }}}
|
|
32
|
+
<div class="ps-3">
|
|
33
|
+
<ul id="collapse-target-{@index}" class="collapse list-unstyled ps-3">
|
|
34
|
+
{./dropdownContent}
|
|
35
|
+
</ul>
|
|
36
|
+
</div>
|
|
37
|
+
{{{ end }}}
|
|
38
|
+
</li>
|
|
30
39
|
{{{ end }}}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
</ul>
|
|
35
|
-
</div>
|
|
40
|
+
{{{ end }}}
|
|
41
|
+
</ul>
|
|
42
|
+
</div>
|
|
36
43
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
44
|
+
<div class="">
|
|
45
|
+
{{{ if config.loggedIn }}}
|
|
46
|
+
<ul id="logged-in-menu" class="list-unstyled d-flex align-items-center w-100 gap-3 mb-0">
|
|
47
|
+
{{{ if config.searchEnabled }}}
|
|
48
|
+
<li component="sidebar/search" class="nav-item m-0 search">
|
|
49
|
+
<!-- IMPORT partials/sidebar/search-mobile.tpl -->
|
|
50
|
+
</li>
|
|
51
|
+
{{{ end }}}
|
|
45
52
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
53
|
+
<li component="notifications" class="nav-item m-0 notifications">
|
|
54
|
+
<!-- IMPORT partials/sidebar/notifications.tpl -->
|
|
55
|
+
</li>
|
|
49
56
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
57
|
+
{{{ if canChat }}}
|
|
58
|
+
<li class="nav-item m-0 chats">
|
|
59
|
+
<!-- IMPORT partials/sidebar/chats.tpl -->
|
|
60
|
+
</li>
|
|
61
|
+
{{{ end }}}
|
|
55
62
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
63
|
+
<li component="sidebar/drafts" class="hidden nav-item m-0 drafts">
|
|
64
|
+
<!-- IMPORT partials/sidebar/drafts.tpl -->
|
|
65
|
+
</li>
|
|
59
66
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
67
|
+
<li id="user_label" class="nav-item m-0 py-2 usermenu">
|
|
68
|
+
<!-- IMPORT partials/sidebar/user-menu.tpl -->
|
|
69
|
+
</li>
|
|
70
|
+
</ul>
|
|
71
|
+
{{{ else }}}
|
|
72
|
+
<ul id="logged-out-menu" class="list-unstyled d-flex w-100 gap-3 mb-0 logged-out-menu">
|
|
73
|
+
<!-- IMPORT partials/sidebar/logged-out-menu.tpl -->
|
|
74
|
+
</ul>
|
|
75
|
+
{{{ end }}}
|
|
76
|
+
</div>
|
|
69
77
|
</div>
|
|
70
78
|
</div>
|
|
@@ -1,45 +1,45 @@
|
|
|
1
1
|
<div component="pagination" class="pagination-container mt-3{{{ if !pagination.pages.length }}} hidden{{{ end }}}">
|
|
2
2
|
<ul class="pagination pagination-sm gap-1 hidden-xs hidden-sm justify-content-center">
|
|
3
3
|
<li class="page-item previous float-start{{{ if !pagination.prev.active }}} disabled{{{ end }}}">
|
|
4
|
-
<a class="page-link rounded fw-secondary
|
|
4
|
+
<a class="page-link rounded fw-secondary px-3" href="?{pagination.prev.qs}" data-page="{pagination.prev.page}"><i class="fa fa-chevron-left"></i> </a>
|
|
5
5
|
</li>
|
|
6
6
|
|
|
7
7
|
{{{each pagination.pages}}}
|
|
8
8
|
{{{ if pagination.pages.separator }}}
|
|
9
9
|
<li component="pagination/select-page" class="page-item page select-page">
|
|
10
|
-
<a class="page-link rounded fw-secondary
|
|
10
|
+
<a class="page-link rounded fw-secondary px-3" href="#"><i class="fa fa-ellipsis-h"></i></a>
|
|
11
11
|
</li>
|
|
12
12
|
{{{ else }}}
|
|
13
13
|
<li class="page-item page{{{ if pagination.pages.active }}} active{{{ end }}}" >
|
|
14
|
-
<a class="page-link rounded fw-secondary
|
|
14
|
+
<a class="page-link rounded fw-secondary px-3" href="?{pagination.pages.qs}" data-page="{pagination.pages.page}">{pagination.pages.page}</a>
|
|
15
15
|
</li>
|
|
16
16
|
{{{ end }}}
|
|
17
17
|
{{{end}}}
|
|
18
18
|
|
|
19
19
|
<li class="page-item next float-end {{{ if !pagination.next.active }}} disabled{{{ end }}}">
|
|
20
|
-
<a class="page-link rounded fw-secondary
|
|
20
|
+
<a class="page-link rounded fw-secondary px-3" href="?{pagination.next.qs}" data-page="{pagination.next.page}"> <i class="fa fa-chevron-right"></i></a>
|
|
21
21
|
</li>
|
|
22
22
|
</ul>
|
|
23
23
|
|
|
24
24
|
<ul class="pagination pagination-sm hidden-md hidden-lg justify-content-center">
|
|
25
25
|
<li class="page-item first{{{ if !pagination.prev.active }}} disabled{{{ end }}}">
|
|
26
|
-
<a class="page-link fw-secondary
|
|
26
|
+
<a class="page-link fw-secondary href="?{pagination.first.qs}" data-page="1"><i class="fa fa-fast-backward"></i> </a>
|
|
27
27
|
</li>
|
|
28
28
|
|
|
29
29
|
<li class="page-item previous{{{ if !pagination.prev.active }}} disabled{{{ end }}}">
|
|
30
|
-
<a class="page-link fw-secondary
|
|
30
|
+
<a class="page-link fw-secondary href="?{pagination.prev.qs}" data-page="{pagination.prev.page}"><i class="fa fa-chevron-left"></i> </a>
|
|
31
31
|
</li>
|
|
32
32
|
|
|
33
33
|
<li component="pagination/select-page" class="page-item page select-page">
|
|
34
|
-
<a class="page-link fw-secondary
|
|
34
|
+
<a class="page-link fw-secondary href="#">{pagination.currentPage} / {pagination.pageCount}</a>
|
|
35
35
|
</li>
|
|
36
36
|
|
|
37
37
|
<li class="page-item next{{{ if !pagination.next.active }}} disabled{{{ end }}}">
|
|
38
|
-
<a class="page-link fw-secondary
|
|
38
|
+
<a class="page-link fw-secondary href="?{pagination.next.qs}" data-page="{pagination.next.page}"> <i class="fa fa-chevron-right"></i></a>
|
|
39
39
|
</li>
|
|
40
40
|
|
|
41
41
|
<li class="page-item last{{{ if !pagination.next.active }}} disabled{{{ end }}}">
|
|
42
|
-
<a class="page-link fw-secondary
|
|
42
|
+
<a class="page-link fw-secondary href="?{pagination.last.qs}" data-page="{pagination.pageCount}"><i class="fa fa-fast-forward"></i> </a>
|
|
43
43
|
</li>
|
|
44
44
|
</ul>
|
|
45
45
|
</div>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<nav class="{{{ if config.stickyToolbar }}}sticky-tools{{{ end }}} navbar navbar-expand mt-4 p-0 border-0 rounded topic-main-buttons">
|
|
1
|
+
<nav class="{{{ if config.theme.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 }}}
|
|
@@ -16,10 +16,11 @@
|
|
|
16
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
</
|
|
19
|
+
{{{ if browsingUsers }}}
|
|
20
|
+
<div class="hidden-xs">
|
|
21
|
+
<!-- IMPORT partials/topic/browsing-users.tpl -->
|
|
22
|
+
</div>
|
|
23
|
+
{{{ end }}}
|
|
23
24
|
</ul>
|
|
24
25
|
<!-- IMPORT partials/topic/reply-button.tpl -->
|
|
25
26
|
</div>
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
<hr/>
|
|
2
|
-
<a class="topic-title fw-semibold fs-5 text-reset" href="{config.relative_path}/post/{./pid}">
|
|
2
|
+
<a class="d-inline-block topic-title fw-semibold fs-5 mb-3 text-reset text-break" href="{config.relative_path}/post/{./pid}">
|
|
3
3
|
{{{ if !./isMainPost }}}RE: {{{ end }}}{./topic.title}
|
|
4
4
|
</a>
|
|
5
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
6
|
<div class="post-body d-flex flex-column gap-1">
|
|
7
7
|
<div class="d-flex gap-3 post-info">
|
|
8
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>
|
|
9
|
+
<a class="lh-1 text-decoration-none" href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(./user, "16px", true, "not-responsive")}</a>
|
|
10
10
|
<a class="fw-semibold text-sm" href="{config.relative_path}/user/{./user.userslug}">{../user.displayname}</a>
|
|
11
11
|
</div>
|
|
12
|
-
<span class="timeago text-sm text-muted" title="{
|
|
12
|
+
<span class="timeago text-sm text-muted" title="{./timestampISO}"></span>
|
|
13
13
|
</div>
|
|
14
14
|
|
|
15
|
-
<div component="post/content" class="content text-sm">
|
|
16
|
-
{
|
|
15
|
+
<div component="post/content" class="content text-sm text-break">
|
|
16
|
+
{./content}
|
|
17
17
|
</div>
|
|
18
18
|
</div>
|
|
19
19
|
</li>
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
</div>
|
|
10
10
|
{{{ end }}}
|
|
11
11
|
|
|
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;">
|
|
12
|
+
<ul id="quick-search-results" class="quick-search-results list-unstyled mb-0 p-0 overflow-auto overscroll-behavior-contain" style="max-width: 400px; max-height: 500px;">
|
|
13
13
|
<li role="separator" class="dropdown-divider d-none d-md-block"></li>
|
|
14
14
|
{{{ each posts }}}
|
|
15
15
|
<li data-tid="{posts.topic.tid}" data-pid="{posts.pid}" class="d-flex flex-column gap-1">
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
<div class="d-flex flex-wrap gap-2 align-items-center" component="search/filters">
|
|
2
|
+
<!-- category filter -->
|
|
3
|
+
<div class="post-search-item">
|
|
4
|
+
<div component="category/filter" class="dropdown" data-filter-name="category">
|
|
5
|
+
<a component="category/filter/button" class="filter-btn btn btn-light btn-sm border {{{ if filters.categories.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
|
|
6
|
+
<span class="filter-label">{{{ if filters.categories.active }}}{filters.categories.label}{{{ else }}}[[search:categories]]{{{ end }}}</span>
|
|
7
|
+
<span class="caret"></span>
|
|
8
|
+
</a>
|
|
9
|
+
|
|
10
|
+
<ul class="dropdown-menu">
|
|
11
|
+
<li class="px-3 py-1 mb-2 d-flex flex-column gap-2">
|
|
12
|
+
<div component="category-selector-search">
|
|
13
|
+
<input type="text" class="form-control" component="category/filter/search" placeholder="[[search:type-a-category]]">
|
|
14
|
+
</div>
|
|
15
|
+
</li>
|
|
16
|
+
<div component="category/list" class="overflow-auto" style="max-height: 350px;"></div>
|
|
17
|
+
<div class="px-3 py-1">
|
|
18
|
+
<div class="form-check">
|
|
19
|
+
<input id="search-children" class="form-check-input" type="checkbox"/>
|
|
20
|
+
<label class="form-check-label" for="search-children">[[search:search-child-categories]]</label>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
</ul>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
<!-- tag filter -->
|
|
29
|
+
<div class="post-search-item">
|
|
30
|
+
<div component="tag/filter" class="dropdown" data-filter-name="tag">
|
|
31
|
+
<a component="tag/filter/button" class="filter-btn btn btn-light btn-sm border {{{ if filters.tags.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
|
|
32
|
+
<span class="filter-label">{{{ if filters.tags.active }}}{filters.tags.label}{{{ else }}}[[search:tags]]{{{ end }}}</span>
|
|
33
|
+
<span class="caret"></span>
|
|
34
|
+
</a>
|
|
35
|
+
|
|
36
|
+
<ul class="dropdown-menu" style="width: 350px;">
|
|
37
|
+
<li class="px-3 py-1 d-flex flex-column gap-2">
|
|
38
|
+
<input type="text" class="form-control" component="tag/filter/search" placeholder="[[search:type-a-tag]]">
|
|
39
|
+
<div component="tag/filter/selected" class="d-flex flex-wrap gap-2">
|
|
40
|
+
{{{ each tagFilterSelected }}}
|
|
41
|
+
<div class="d-flex px-2 py-1 rounded-1 text-bg-primary gap-2 align-items-center text-sm">
|
|
42
|
+
<div>{./valueEscaped}</div>
|
|
43
|
+
<button component="tag/filter/delete" data-tag="{./valueEscaped}" class="btn btn-primary btn-sm py-0"><i class="fa fa-times fa-xs"></i></button>
|
|
44
|
+
</div>
|
|
45
|
+
{{{ end }}}
|
|
46
|
+
</div>
|
|
47
|
+
<hr/>
|
|
48
|
+
<div component="tag/filter/results" class="d-flex flex-wrap gap-2">
|
|
49
|
+
{{{ each tagFilterResults }}}
|
|
50
|
+
<button class="btn btn-light btn-sm border" data-tag="{./valueEscaped}">{./valueEscaped}</button>
|
|
51
|
+
{{{ end }}}
|
|
52
|
+
</div>
|
|
53
|
+
</li>
|
|
54
|
+
</ul>
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
|
|
58
|
+
<!-- user name filter -->
|
|
59
|
+
<div class="post-search-item">
|
|
60
|
+
<div component="user/filter" class="dropdown" data-filter-name="user">
|
|
61
|
+
<a component="user/filter/button" class="filter-btn btn btn-light btn-sm border {{{ if filters.users.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
|
|
62
|
+
<span class="filter-label">{{{ if filters.users.active }}}{filters.users.label}{{{ else }}}[[search:posted-by]]{{{ end }}}</span>
|
|
63
|
+
<span class="caret"></span>
|
|
64
|
+
</a>
|
|
65
|
+
|
|
66
|
+
<ul class="dropdown-menu" style="width: 350px;">
|
|
67
|
+
<li class="px-3 py-1 d-flex flex-column gap-2">
|
|
68
|
+
<input type="text" class="form-control" component="user/filter/search" placeholder="[[search:type-a-username]]">
|
|
69
|
+
<div component="user/filter/selected" class="d-flex flex-wrap gap-2">
|
|
70
|
+
{{{ each userFilterSelected }}}
|
|
71
|
+
<div class="d-flex px-2 py-1 rounded-1 text-bg-primary gap-2 align-items-center text-sm">
|
|
72
|
+
{buildAvatar(@value, "16px", true)} {./username}
|
|
73
|
+
<button component="user/filter/delete" data-uid="{./uid}" class="btn btn-primary btn-sm py-0"><i class="fa fa-times fa-xs"></i></button>
|
|
74
|
+
</div>
|
|
75
|
+
{{{ end }}}
|
|
76
|
+
</div>
|
|
77
|
+
<hr/>
|
|
78
|
+
<div component="user/filter/results" class="d-flex flex-wrap gap-2">
|
|
79
|
+
{{{ each userFilterResults }}}
|
|
80
|
+
<button class="btn btn-light btn-sm border" data-uid="{./uid}" data-username="{./username}">{buildAvatar(@value, "16px", true)} {./username}</button>
|
|
81
|
+
{{{ end }}}
|
|
82
|
+
</div>
|
|
83
|
+
</li>
|
|
84
|
+
</ul>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
<!-- reply count filter -->
|
|
90
|
+
<div class="post-search-item">
|
|
91
|
+
<div class="dropdown" data-filter-name="replies">
|
|
92
|
+
<a id="reply-count-button" class="filter-btn btn btn-light btn-sm border {{{ if filters.replies.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
|
93
|
+
<span class="filter-label">{{{ if filters.replies.active }}}{filters.replies.label}{{{ else }}}[[search:replies]]{{{ end }}}</span>
|
|
94
|
+
<span class="caret"></span>
|
|
95
|
+
</a>
|
|
96
|
+
|
|
97
|
+
<ul class="dropdown-menu" style="width: 300px;">
|
|
98
|
+
<li class="px-3 py-1 d-flex flex-nowrap gap-2">
|
|
99
|
+
<select id="reply-count-filter" class="form-select py-2 ps-2 pe-3">
|
|
100
|
+
<option value="atleast">[[search:at-least]]</option>
|
|
101
|
+
<option value="atmost">[[search:at-most]]</option>
|
|
102
|
+
</select>
|
|
103
|
+
<input id="reply-count" type="number" min="0" class="form-control py-2 ps-2 pe-3" />
|
|
104
|
+
</li>
|
|
105
|
+
</ul>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
|
|
109
|
+
<!-- time filter -->
|
|
110
|
+
<div class="post-search-item">
|
|
111
|
+
<div class="dropdown" data-filter-name="time">
|
|
112
|
+
<a id="post-time-button" class="filter-btn btn btn-light btn-sm border {{{ if filters.time.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
|
113
|
+
<span class="filter-label">{{{ if filters.time.active }}}{filters.time.label}{{{ else }}}[[search:time]]{{{ end }}}</span>
|
|
114
|
+
<span class="caret"></span>
|
|
115
|
+
</a>
|
|
116
|
+
|
|
117
|
+
<ul class="dropdown-menu" style="width: 350px;">
|
|
118
|
+
<li class="px-3 py-1 d-flex flex-nowrap gap-2">
|
|
119
|
+
<select id="post-time-filter" class="form-select py-2 ps-2 pe-3">
|
|
120
|
+
<option value="newer">[[search:newer-than]]</option>
|
|
121
|
+
<option value="older">[[search:older-than]]</option>
|
|
122
|
+
</select>
|
|
123
|
+
<select id="post-time-range" class="form-select py-2 ps-2 pe-3">
|
|
124
|
+
<option value="">[[search:any-date]]</option>
|
|
125
|
+
<option value="86400">[[search:yesterday]]</option>
|
|
126
|
+
<option value="604800">[[search:one-week]]</option>
|
|
127
|
+
<option value="1209600">[[search:two-weeks]]</option>
|
|
128
|
+
<option value="2592000">[[search:one-month]]</option>
|
|
129
|
+
<option value="7776000">[[search:three-months]]</option>
|
|
130
|
+
<option value="15552000">[[search:six-months]]</option>
|
|
131
|
+
<option value="31104000">[[search:one-year]]</option>
|
|
132
|
+
</select>
|
|
133
|
+
</li>
|
|
134
|
+
</ul>
|
|
135
|
+
</div>
|
|
136
|
+
</div>
|
|
137
|
+
|
|
138
|
+
<!-- sort filter -->
|
|
139
|
+
<div class="post-search-item">
|
|
140
|
+
<div class="dropdown" data-filter-name="sort">
|
|
141
|
+
<a id="sort-by-button" class="filter-btn btn btn-light btn-sm border {{{ if filters.sort.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
|
142
|
+
<span class="filter-label">{{{ if filters.sort.active }}}{filters.sort.label}{{{ else }}}[[search:sort]]{{{ end }}}</span>
|
|
143
|
+
<span class="caret"></span>
|
|
144
|
+
</a>
|
|
145
|
+
|
|
146
|
+
<ul class="dropdown-menu" style="width: 250px;">
|
|
147
|
+
<li class="px-3 py-1 d-flex flex-column gap-2">
|
|
148
|
+
<select id="post-sort-by" class="form-select py-2 ps-2 pe-3">
|
|
149
|
+
<option value="relevance">[[search:relevance]]</option>
|
|
150
|
+
<option value="timestamp">[[search:post-time]]</option>
|
|
151
|
+
<option value="votes">[[search:votes]]</option>
|
|
152
|
+
<option value="topic.lastposttime">[[search:last-reply-time]]</option>
|
|
153
|
+
<option value="topic.title">[[search:topic-title]]</option>
|
|
154
|
+
<option value="topic.postcount">[[search:number-of-replies]]</option>
|
|
155
|
+
<option value="topic.viewcount">[[search:number-of-views]]</option>
|
|
156
|
+
<option value="topic.votes">[[search:topic-votes]]</option>
|
|
157
|
+
<option value="topic.timestamp">[[search:topic-start-date]]</option>
|
|
158
|
+
<option value="user.username">[[search:username]]</option>
|
|
159
|
+
<option value="category.name">[[search:category]]</option>
|
|
160
|
+
</select>
|
|
161
|
+
<select id="post-sort-direction" class="form-select py-2 ps-2 pe-3">
|
|
162
|
+
<option value="desc">[[search:descending]]</option>
|
|
163
|
+
<option value="asc">[[search:ascending]]</option>
|
|
164
|
+
</select>
|
|
165
|
+
</li>
|
|
166
|
+
</ul>
|
|
167
|
+
</div>
|
|
168
|
+
</div>
|
|
169
|
+
|
|
170
|
+
<!-- save & reset preferences -->
|
|
171
|
+
<div class="post-search-item">
|
|
172
|
+
<div class="dropdown">
|
|
173
|
+
<a class="btn btn-light btn-sm border border-gray-300 dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">[[search:save]] <span class="caret"></span>
|
|
174
|
+
</a>
|
|
175
|
+
|
|
176
|
+
<ul class="dropdown-menu" style="width: 300px;">
|
|
177
|
+
<li class="px-3 py-1 d-flex flex-column gap-2">
|
|
178
|
+
<button id="save-preferences" class="btn btn-primary">[[search:save-preferences]]</button>
|
|
179
|
+
<button id="clear-preferences" class="btn-outline border">[[search:clear-preferences]]</button>
|
|
180
|
+
</li>
|
|
181
|
+
</ul>
|
|
182
|
+
</div>
|
|
183
|
+
</div>
|
|
184
|
+
</div>
|
|
@@ -1,41 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
{{{ if matchCount }}}
|
|
2
|
+
<div class="card card-header text-xs px-2 py-1 fw-semibold border-0 align-self-start">[[search:results_matching, {matchCount}, {search_query}, {time}]] </div>
|
|
3
|
+
{{{ else }}}
|
|
4
|
+
{{{ if search_query }}}
|
|
5
|
+
<div class="badge text-bg-warning align-self-start">[[search:no-matches]]</div>
|
|
6
|
+
{{{ end }}}
|
|
7
|
+
{{{ end }}}
|
|
8
|
+
|
|
9
|
+
<div id="results" class="search-results" data-search-query="{search_query}">
|
|
10
|
+
{{{ if showAsPosts }}}
|
|
11
|
+
{{{ if posts.length }}}
|
|
12
|
+
<!-- IMPORT partials/posts_list.tpl -->
|
|
9
13
|
{{{ end }}}
|
|
10
14
|
{{{ end }}}
|
|
11
15
|
|
|
12
|
-
{{{
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
{{{ if showAsTopics }}}
|
|
17
|
+
{{{ each posts }}}
|
|
18
|
+
<hr/>
|
|
19
|
+
<div class="topic-row mb-3">
|
|
20
|
+
<a class="topic-title fw-semibold fs-5 text-reset text-break" href="{config.relative_path}/post/{./pid}">
|
|
21
|
+
{{{ if !./isMainPost }}}RE: {{{ end }}}{./topic.title}
|
|
22
|
+
</a>
|
|
23
|
+
<div class="post-body d-flex flex-column gap-1">
|
|
24
|
+
<div class="d-flex gap-3 post-info">
|
|
25
|
+
<div class="post-author d-flex gap-1">
|
|
26
|
+
<a class="lh-1 text-decoration-none" href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(./user, "16px", true, "not-responsive")}</a>
|
|
27
|
+
<a class="fw-semibold text-sm" href="{config.relative_path}/user/{./user.userslug}">{../user.displayname}</a>
|
|
28
|
+
</div>
|
|
29
|
+
<span class="timeago text-sm text-muted" title="{./timestampISO}"></span>
|
|
24
30
|
</div>
|
|
25
|
-
{{{ end }}}
|
|
26
|
-
|
|
27
|
-
<small class="post-info float-end">
|
|
28
|
-
<a href="{config.relative_path}/category/{./category.slug}">
|
|
29
|
-
<div class="category-item d-inline-block">
|
|
30
|
-
{buildCategoryIcon(./category, "24px", "rounded-circle")}
|
|
31
|
-
{./category.name}
|
|
32
|
-
</div>
|
|
33
|
-
</a> •
|
|
34
|
-
<span class="timeago" title="{./timestampISO}"></span>
|
|
35
|
-
</small>
|
|
36
31
|
</div>
|
|
37
32
|
</div>
|
|
38
|
-
{{{end}}}
|
|
33
|
+
{{{ end }}}
|
|
34
|
+
{{{ end }}}
|
|
39
35
|
|
|
40
36
|
{{{ if users.length }}}
|
|
41
37
|
<!-- IMPORT partials/users_list.tpl -->
|
|
@@ -1,4 +1,4 @@
|
|
|
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"
|
|
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" component="chat/dropdown">
|
|
2
2
|
<span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
|
|
3
3
|
<span class="position-relative">
|
|
4
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>
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
</a>
|
|
11
11
|
<ul class="chats-dropdown dropdown-menu p-1 shadow">
|
|
12
12
|
<li>
|
|
13
|
-
<ul component="chat/list" class="chat-list chats-list list-unstyled p-0 pe-1">
|
|
13
|
+
<ul component="chat/list" class="chat-list chats-list list-unstyled overscroll-behavior-contain p-0 pe-1">
|
|
14
14
|
<li class="dropdown-item rounded-1 p-2 d-flex gap-2 placeholder-wave">
|
|
15
15
|
<div class="main-avatar">
|
|
16
16
|
<div class="placeholder" style="width: 32px; height: 32px;"></div>
|
|
@@ -1,4 +1,4 @@
|
|
|
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"
|
|
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">
|
|
2
2
|
<span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
|
|
3
3
|
<span class="position-relative">
|
|
4
4
|
<i component="drafts/icon" class="fa fa-fw fa-pen-to-square unread-count"></i>
|
|
@@ -10,43 +10,51 @@
|
|
|
10
10
|
</a>
|
|
11
11
|
<ul class="drafts-dropdown dropdown-menu p-1 shadow">
|
|
12
12
|
<li>
|
|
13
|
-
<
|
|
14
|
-
<
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
13
|
+
<div component="drafts/list" class="draft-list list-unstyled d-flex flex-column overscroll-behavior-contain gap-1 pe-1">
|
|
14
|
+
<div class="dropdown-item rounded-1 p-2 d-flex gap-2 placeholder-wave">
|
|
15
|
+
<div class="d-flex flex-grow-1 flex-column w-100">
|
|
16
|
+
<div class="text-xs placeholder col-3"> </div>
|
|
17
|
+
<div class="text-sm placeholder col-11"> </div>
|
|
18
|
+
<div class="text-xs placeholder col-4"> </div>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="hidden no-drafts text-center p-2">[[modules:composer.no-drafts]]</div>
|
|
22
|
+
<div class="draft-item-container">
|
|
23
|
+
{{{ each drafts }}}
|
|
24
|
+
{{{ if !@first}}}
|
|
25
|
+
<hr class="my-1"/>
|
|
26
|
+
{{{ end }}}
|
|
27
|
+
<div data-save-id="{./save_id}">
|
|
28
|
+
<div class="d-flex gap-1 justify-content-between ff-base">
|
|
29
|
+
<div class="dropdown-item rounded-1 p-2 d-flex flex-column gap-2 pointer" component="drafts/open" data-save-id="{./save_id}">
|
|
30
|
+
{{{ if (./action == "topics.post") }}}
|
|
31
|
+
{{{ if ./title}}}
|
|
32
|
+
<div class="text text-xs fw-semibold line-clamp-2 text-break">{./title}</div>
|
|
33
|
+
{{{ end }}}
|
|
34
|
+
{{{ end }}}
|
|
28
35
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
36
|
+
{{{ if (./action == "posts.reply") }}}
|
|
37
|
+
<div class="text text-xs fw-semibold line-clamp-2 text-break">[[topic:composer.replying_to, "{./title}"]]</div>
|
|
38
|
+
{{{ end }}}
|
|
32
39
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
40
|
+
{{{ if (./action == "posts.edit") }}}
|
|
41
|
+
<div class="text text-xs fw-semibold line-clamp-2">[[topic:composer.editing]]</div>
|
|
42
|
+
{{{ end }}}
|
|
36
43
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
{{{ if ./text }}}
|
|
45
|
+
<div class="text text-sm line-clamp-3 text-break">{./text}</div>
|
|
46
|
+
{{{ end }}}
|
|
47
|
+
<div class="timeago text-xs text-muted" title="{./timestampISO}"></div>
|
|
48
|
+
</div>
|
|
49
|
+
<div>
|
|
50
|
+
<button component="drafts/delete" data-save-id="{./save_id}" class="btn btn-light btn-sm">
|
|
51
|
+
<i class="unread fa fa-xs fa-trash text-secondary"></i>
|
|
52
|
+
</button>
|
|
53
|
+
</div>
|
|
46
54
|
</div>
|
|
47
55
|
</div>
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
</
|
|
56
|
+
{{{ end }}}
|
|
57
|
+
</div>
|
|
58
|
+
</div>
|
|
51
59
|
</li>
|
|
52
60
|
</ul>
|