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
|
@@ -1,28 +1,26 @@
|
|
|
1
|
-
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
|
-
|
|
3
1
|
<!-- IF privileges.topics:reply -->
|
|
4
|
-
<div component="topic/quickreply/container" class="
|
|
5
|
-
<div class="icon
|
|
6
|
-
<a
|
|
2
|
+
<div component="topic/quickreply/container" class="quick-reply d-flex gap-3">
|
|
3
|
+
<div class="icon hidden-xs">
|
|
4
|
+
<a class="d-inline-block position-relative" href="<!-- IF loggedInUser.userslug -->{config.relative_path}/user/{loggedInUser.userslug}<!-- ELSE -->#<!-- ENDIF loggedInUser.userslug -->">
|
|
7
5
|
{buildAvatar(loggedInUser, "48px", true, "", "user/picture")}
|
|
8
|
-
{{{ if loggedInUser.status }}}
|
|
9
|
-
<i component="user/status" class="fa fa-circle status {loggedInUser.status}" title="[[global:{loggedInUser.status}]]"></i>
|
|
10
|
-
{{{ end }}}
|
|
6
|
+
{{{ if loggedInUser.status }}}<span component="user/status" class="position-absolute translate-middle-y badge border border-white border-2 rounded-circle status {loggedInUser.status}"><span class="visually-hidden">[[global:{loggedInUser.status}]]</span></span>{{{ end }}}
|
|
11
7
|
</a>
|
|
12
8
|
</div>
|
|
13
|
-
<form method="post" action="{config.relative_path}/compose">
|
|
9
|
+
<form class="flex-grow-1 d-flex flex-column gap-2" method="post" action="{config.relative_path}/compose">
|
|
14
10
|
<input type="hidden" name="tid" value="{tid}" />
|
|
15
11
|
<input type="hidden" name="_csrf" value="{config.csrf_token}" />
|
|
16
12
|
<div class="quickreply-message">
|
|
17
|
-
<textarea name="content" component="topic/quickreply/text" class="form-control mousetrap"
|
|
13
|
+
<textarea rows="4" name="content" component="topic/quickreply/text" class="form-control mousetrap" placeholder="[[modules:composer.textarea.placeholder]]"></textarea>
|
|
18
14
|
<div class="imagedrop"><div>[[topic:composer.drag_and_drop_images]]</div></div>
|
|
19
15
|
</div>
|
|
20
|
-
<div
|
|
21
|
-
<
|
|
22
|
-
|
|
16
|
+
<div>
|
|
17
|
+
<div class="btn-group">
|
|
18
|
+
<button type="submit" component="topic/quickreply/button" class="btn btn-sm btn-primary">[[topic:post-quick-reply]]</button>
|
|
19
|
+
<button type="submit" component="topic/quickreply/expand" class="btn btn-sm btn-primary" formmethod="get"><i class="fa fa-expand"></i></button>
|
|
20
|
+
</div>
|
|
23
21
|
</div>
|
|
24
22
|
</form>
|
|
25
|
-
<form component="topic/quickreply/upload" method="post" enctype="multipart/form-data">
|
|
23
|
+
<form class="d-none" component="topic/quickreply/upload" method="post" enctype="multipart/form-data">
|
|
26
24
|
<input type="file" name="files[]" multiple class="hidden"/>
|
|
27
25
|
</form>
|
|
28
26
|
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
|
-
|
|
3
1
|
<div component="topic/reply/container" class="btn-group action-bar bottom-sheet <!-- IF !privileges.topics:reply -->hidden<!-- ENDIF !privileges.topics:reply -->">
|
|
4
|
-
<a href="{config.relative_path}/compose?tid={tid}&title={title}" class="btn btn-
|
|
5
|
-
<button type="button" class="btn btn-sm btn-primary dropdown-toggle" data-bs-toggle="dropdown">
|
|
2
|
+
<a href="{config.relative_path}/compose?tid={tid}&title={title}" class="d-flex align-items-center btn btn-primary px-3 py-2 fw-semibold border border-0 " component="topic/reply" data-ajaxify="false" role="button"><i class="fa fa-reply visible-xs-inline"></i><span class="visible-md-inline visible-lg-inline"> [[topic:reply]]</span></a>
|
|
3
|
+
<button type="button" class="btn btn-sm btn-primary dropdown-toggle border border-0 border-start border-primary" data-bs-toggle="dropdown">
|
|
6
4
|
<span class="caret"></span>
|
|
7
5
|
</button>
|
|
8
6
|
<ul class="dropdown-menu dropdown-menu-end" role="menu">
|
|
@@ -10,20 +8,18 @@
|
|
|
10
8
|
</ul>
|
|
11
9
|
</div>
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
<a component="topic/reply/locked" class="
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
<!-- IF !locked -->
|
|
21
|
-
<a component="topic/reply/locked" class="btn btn-sm btn-primary hidden" disabled><i class="fa fa-lock"></i> [[topic:locked]]</a>
|
|
22
|
-
<!-- ENDIF !locked -->
|
|
23
|
-
|
|
24
|
-
<!-- ELSE -->
|
|
11
|
+
{{{ if loggedIn }}}
|
|
12
|
+
{{{ if !privileges.topics:reply }}}
|
|
13
|
+
{{{ if locked }}}
|
|
14
|
+
<a component="topic/reply/locked" class="d-flex gap-2 align-items-center fw-semibold btn btn-primary disabled" disabled><i class="fa fa-lock"></i> [[topic:locked]]</a>
|
|
15
|
+
{{{ end }}}
|
|
16
|
+
{{{ end }}}
|
|
25
17
|
|
|
26
|
-
|
|
27
|
-
<a component="topic/reply/
|
|
28
|
-
|
|
29
|
-
|
|
18
|
+
{{{ if !locked }}}
|
|
19
|
+
<a component="topic/reply/locked" class="d-flex gap-2 align-items-center fw-semibold btn btn-primary disabled hidden" disabled><i class="fa fa-lock"></i> [[topic:locked]]</a>
|
|
20
|
+
{{{ end }}}
|
|
21
|
+
{{{ else }}}
|
|
22
|
+
{{{ if !privileges.topics:reply }}}
|
|
23
|
+
<a component="topic/reply/guest" href="{config.relative_path}/login" class="d-flex align-items-center fw-semibold btn btn-primary">[[topic:guest-login-reply]]</a>
|
|
24
|
+
{{{ end }}}
|
|
25
|
+
{{{ end }}}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
|
-
|
|
3
1
|
<div component="selection/tooltip" class="selection-tooltip-container position-absolute card card-body p-1 rounded-1 mt-2" style="z-index: 1;">
|
|
4
2
|
<button component="selection/tooltip/quote" class="btn btn-sm btn-primary quote-tooltip-btn">[[topic:quote]]</button>
|
|
5
3
|
</div>
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
<div class="btn-group bottom-sheet" component="thread/sort">
|
|
2
|
+
<button class="btn btn-link d-flex gap-2 align-items-baseline dropdown-toggle" data-bs-toggle="dropdown" type="button">
|
|
3
|
+
<span class="d-flex gap-2 align-items-center">
|
|
4
|
+
<i class="fa fa-fw fa-arrow-down-wide-short small link-primary"></i>
|
|
5
|
+
<span class="d-none d-md-inline small">[[topic:sort_by]]</span>
|
|
6
|
+
</span>
|
|
7
|
+
</button>
|
|
8
|
+
<ul class="dropdown-menu">
|
|
7
9
|
<li><a class="dropdown-item" href="#" class="oldest_to_newest" data-sort="oldest_to_newest"><i class="fa fa-fw"></i> [[topic:oldest_to_newest]]</a></li>
|
|
8
10
|
<li><a class="dropdown-item" href="#" class="newest_to_oldest" data-sort="newest_to_oldest"><i class="fa fa-fw"></i> [[topic:newest_to_oldest]]</a></li>
|
|
9
11
|
<li><a class="dropdown-item" href="#" class="most_votes" data-sort="most_votes"><i class="fa fa-fw"></i> [[topic:most_votes]]</a></li>
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
<
|
|
4
|
-
<
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
<
|
|
8
|
-
<
|
|
9
|
-
<span
|
|
10
|
-
</
|
|
11
|
-
<
|
|
12
|
-
<i class="fa fa-fw fa-eye" title="[[global:views]]"></i>
|
|
13
|
-
<span class="human-readable-number" title="{viewcount}">{viewcount}</span>
|
|
14
|
-
</
|
|
1
|
+
<span class="badge text-body border border-gray-300 stats text-xs">
|
|
2
|
+
<i class="fa fa-fw fa-pencil visible-xs-inline" title="[[global:posts]]"></i>
|
|
3
|
+
<span component="topic/post-count" title="{postcount}" class="human-readable-number fw-bold">{postcount}</span>
|
|
4
|
+
<span class="hidden-xs text-lowercase fw-normal">[[global:posts]]</span>
|
|
5
|
+
</span>
|
|
6
|
+
<span class="badge text-body border border-gray-300 stats text-xs">
|
|
7
|
+
<i class="fa fa-fw fa-user visible-xs-inline" title="[[global:posters]]"></i>
|
|
8
|
+
<span title="{postercount}" class="human-readable-number fw-bold">{postercount}</span>
|
|
9
|
+
<span class="hidden-xs text-lowercase fw-normal">[[global:posters]]</span>
|
|
10
|
+
</span>
|
|
11
|
+
<span class="badge text-body border border-gray-300 stats text-xs">
|
|
12
|
+
<i class="fa fa-fw fa-eye visible-xs-inline" title="[[global:views]]"></i>
|
|
13
|
+
<span class="human-readable-number fw-bold" title="{viewcount}">{viewcount}</span>
|
|
14
|
+
<span class="hidden-xs text-lowercase fw-normal">[[global:views]]</span>
|
|
15
|
+
</span>
|
|
@@ -1,3 +1 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
<a href="{config.relative_path}/tags/{./valueEncoded}"><span class="tag tag-item fw-bold tag-class-{./class}" data-tag="{./value}">{./valueEscaped}</span></a>
|
|
1
|
+
<a href="{config.relative_path}/tags/{./valueEncoded}"><span class="badge border border-gray-300 text-xs tag tag-class-{./class}" data-tag="{./value}">{./valueEscaped}</span></a>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{{{ if privileges.view_thread_tools }}}
|
|
2
|
+
<div class="btn-group thread-tools bottom-sheet">
|
|
3
|
+
<button class="btn btn-link d-flex gap-2 align-items-baseline dropdown-toggle" data-bs-toggle="dropdown" type="button">
|
|
4
|
+
<i class="fa fa-fw fa-gear small link-primary"></i>
|
|
5
|
+
<span class="d-none d-md-inline small">[[topic:thread_tools.title]]</span>
|
|
6
|
+
</button>
|
|
7
|
+
<ul class="dropdown-menu">
|
|
8
|
+
<li class="placeholder-wave"><a class="dropdown-item d-flex gap-2" href="#"><div class="placeholder bg-secondary rounded-1" style="width: 1em;"></div><div class="placeholder bg-secondary rounded-1 col-8"></div></a></li>
|
|
9
|
+
<li class="placeholder-wave"><a class="dropdown-item d-flex gap-2" href="#"><div class="placeholder bg-secondary rounded-1" style="width: 1em;"></div><div class="placeholder bg-secondary rounded-1 col-8"></div></a></li>
|
|
10
|
+
<li class="placeholder-wave"><a class="dropdown-item d-flex gap-2" href="#"><div class="placeholder bg-secondary rounded-1" style="width: 1em;"></div><div class="placeholder bg-secondary rounded-1 col-8"></div></a></li>
|
|
11
|
+
</ul>
|
|
12
|
+
</div>
|
|
13
|
+
{{{ end }}}
|
|
@@ -1,21 +1,23 @@
|
|
|
1
|
-
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
|
-
|
|
3
1
|
<!-- IF config.loggedIn -->
|
|
4
|
-
<div class="btn-group topic-watch-dropdown bottom-sheet" component="topic/watch"
|
|
5
|
-
data-bs-toggle="
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
>
|
|
10
|
-
<button class="btn btn-sm btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" type="button">
|
|
11
|
-
<span component="topic/following/menu" <!-- IF !isFollowing -->class="hidden"<!-- ENDIF !isFollowing -->><i class="fa fa-fw fa-bell-o"></i></span>
|
|
2
|
+
<div class="btn-group topic-watch-dropdown bottom-sheet" component="topic/watch">
|
|
3
|
+
<button class="btn btn-link d-flex gap-2 align-items-baseline dropdown-toggle" data-bs-toggle="dropdown" type="button">
|
|
4
|
+
<span component="topic/following/menu" class="d-flex gap-2 align-items-center<!-- IF !isFollowing --> hidden<!-- ENDIF !isFollowing -->">
|
|
5
|
+
<i class="fa fa-fw fa-bell-o small link-primary"></i>
|
|
6
|
+
<span class="d-none d-md-inline small">[[topic:watching]]</span>
|
|
7
|
+
</span>
|
|
12
8
|
|
|
13
|
-
<span component="topic/not-following/menu" <!-- IF !isNotFollowing -->
|
|
9
|
+
<span component="topic/not-following/menu" class="d-flex gap-2 align-items-center<!-- IF !isNotFollowing --> hidden<!-- ENDIF !isNotFollowing -->">
|
|
10
|
+
<i class="fa fa-fw fa-bell-slash-o small link-primary"></i>
|
|
11
|
+
<span class="d-none d-md-inline small">[[topic:not-watching]]</span>
|
|
12
|
+
</span>
|
|
14
13
|
|
|
15
|
-
<span component="topic/ignoring/menu" <!-- IF !isIgnoring -->
|
|
14
|
+
<span component="topic/ignoring/menu" class="d-flex gap-2 align-items-center<!-- IF !isIgnoring --> hidden<!-- ENDIF !isIgnoring -->">
|
|
15
|
+
<i class="fa fa-fw fa-eye-slash small link-primary"></i>
|
|
16
|
+
<span class="d-none d-md-inline small">[[topic:ignoring]]</span>
|
|
17
|
+
</span>
|
|
16
18
|
|
|
17
19
|
</button>
|
|
18
|
-
<ul class="dropdown-menu
|
|
20
|
+
<ul class="dropdown-menu">
|
|
19
21
|
<li><a class="dropdown-item" href="#" component="topic/following"><i component="topic/following/check" class="fa fa-fw <!-- IF isFollowing -->fa-check<!-- ENDIF isFollowing -->"></i><i class="fa fa-fw fa-bell-o"></i> [[topic:watching]]<p class="help-text hidden-xs"><small>[[topic:watching.description]]</small></p></a></li>
|
|
20
22
|
<li><a class="dropdown-item" href="#" component="topic/not-following"><i component="topic/not-following/check" class="fa fa-fw <!-- IF isNotFollowing -->fa-check<!-- ENDIF isNotFollowing -->"></i><i class="fa fa-fw fa-bell-slash-o"></i> [[topic:not-watching]]<p class="help-text hidden-xs"><small>[[topic:not-watching.description]]</small></p></a></li>
|
|
21
23
|
<li><a class="dropdown-item" href="#" component="topic/ignoring"><i component="topic/ignoring/check" class="fa fa-fw <!-- IF isIgnoring -->fa-check<!-- ENDIF isIgnoring -->"></i><i class="fa fa-fw fa-eye-slash"></i> [[topic:ignoring]]<p class="help-text hidden-xs"><small>[[topic:ignoring.description]]</small></p></a></li>
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
|
-
|
|
3
1
|
<div class="btn-group bottom-sheet{{{ if !filters.length }}} hidden{{{ end }}}">
|
|
4
|
-
<button type="button" class="btn btn-
|
|
5
|
-
<
|
|
2
|
+
<button type="button" class="btn btn-link d-flex gap-2 align-items-baseline dropdown-toggle" data-bs-toggle="dropdown">
|
|
3
|
+
<i class="fa fa-fw fa-filter small link-primary"></i>
|
|
4
|
+
<span class="visible-md-inline visible-lg-inline small">{selectedFilter.name}</span>
|
|
6
5
|
</button>
|
|
7
|
-
<ul class="dropdown-menu
|
|
6
|
+
<ul class="dropdown-menu" role="menu">
|
|
8
7
|
{{{each filters}}}
|
|
9
8
|
<li role="presentation" class="category {{{if filters.selected}}}selected{{{end}}}">
|
|
10
9
|
<a class="dropdown-item" role="menu-item" href="{config.relative_path}/{filters.url}"><i class="fa fa-fw {{{ if filters.selected }}}fa-check{{{ end }}}"></i>{filters.name}</a>
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<nav class="topic-list-header sticky-tools navbar navbar-expand p-0 border-0 rounded">
|
|
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 template.category }}}
|
|
5
|
+
<!-- IMPORT partials/category/watch.tpl -->
|
|
6
|
+
<!-- IMPORT partials/category/sort.tpl -->
|
|
7
|
+
{{{ end }}}
|
|
8
|
+
{{{ if (template.popular || template.top)}}}
|
|
9
|
+
<!-- IMPORT partials/topic-terms.tpl -->
|
|
10
|
+
{{{ end }}}
|
|
11
|
+
{{{ if (template.unread || (template.recent || (template.popular || template.top))) }}}
|
|
12
|
+
<!-- IMPORT partials/topic-filters.tpl -->
|
|
13
|
+
<!-- IMPORT partials/category-filter.tpl -->
|
|
14
|
+
{{{ end }}}
|
|
15
|
+
{{{ if template.unread }}}
|
|
16
|
+
<div class="markread btn-group {{{ if !topics.length }}}hidden{{{ end }}}">
|
|
17
|
+
<!-- IMPORT partials/category-selector.tpl -->
|
|
18
|
+
</div>
|
|
19
|
+
{{{ end }}}
|
|
20
|
+
{{{ if template.tag }}}
|
|
21
|
+
<!-- IMPORT partials/category-filter.tpl -->
|
|
22
|
+
{{{ end }}}
|
|
23
|
+
<!-- IMPORT partials/category/tools.tpl -->
|
|
24
|
+
|
|
25
|
+
{{{ if (!feeds:disableRSS && rssFeedUrl) }}}
|
|
26
|
+
<a class="btn btn-link link-primary d-none d-lg-block" target="_blank" href="{rssFeedUrl}" itemprop="item"><i class="fa fa-rss"></i></a>
|
|
27
|
+
{{{ end }}}
|
|
28
|
+
|
|
29
|
+
<a href="{config.relative_path}{{{ if template.category }}}{url}{{{ else }}}/{selectedFilter.url}{querystring}{{{ end }}}" class="d-inline-block">
|
|
30
|
+
<div class="alert alert-warning h-100 m-0 px-2 py-1 d-flex align-items-center hide" id="new-topics-alert"></div>
|
|
31
|
+
</a>
|
|
32
|
+
</ul>
|
|
33
|
+
|
|
34
|
+
<div class="d-flex gap-1 align-items-stretch">
|
|
35
|
+
{{{ if template.category }}}
|
|
36
|
+
{{{ if privileges.topics:create }}}
|
|
37
|
+
<a href="{config.relative_path}/compose?cid={cid}" component="category/post" id="new_topic" class="btn btn-primary text-nowrap" data-ajaxify="false" role="button">[[category:new_topic_button]]</a>
|
|
38
|
+
{{{ else }}}
|
|
39
|
+
{{{ if !loggedIn }}}
|
|
40
|
+
<a component="category/post/guest" href="{config.relative_path}/login" class="btn btn-primary">[[category:guest-login-post]]</a>
|
|
41
|
+
{{{ end }}}
|
|
42
|
+
{{{ end }}}
|
|
43
|
+
{{{ else }}}
|
|
44
|
+
{{{ if canPost }}}
|
|
45
|
+
<!-- IMPORT partials/buttons/newTopic.tpl -->
|
|
46
|
+
{{{ else }}}
|
|
47
|
+
{{{ if !loggedIn }}}
|
|
48
|
+
<a component="category/post/guest" href="{config.relative_path}/login" class="btn btn-primary">[[category:guest-login-post]]</a>
|
|
49
|
+
{{{ end }}}
|
|
50
|
+
{{{ end }}}
|
|
51
|
+
{{{ end }}}
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
</nav>
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
|
-
|
|
3
1
|
<div class="btn-group bottom-sheet {{{ if !terms.length }}}hidden{{{ end }}}">
|
|
4
|
-
<button type="button" class="btn btn-
|
|
5
|
-
|
|
2
|
+
<button type="button" class="btn btn-link d-flex gap-2 align-items-baseline dropdown-toggle" data-bs-toggle="dropdown">
|
|
3
|
+
<i class="fa fa-fw fa-clock small link-primary"></i>
|
|
4
|
+
<span class="visible-md-inline visible-lg-inline small">{selectedTerm.name}</span>
|
|
6
5
|
</button>
|
|
7
|
-
<ul class="dropdown-menu
|
|
6
|
+
<ul class="dropdown-menu" role="menu">
|
|
8
7
|
{{{each terms}}}
|
|
9
8
|
<li role="presentation" class="category">
|
|
10
9
|
<a class="dropdown-item" role="menu-item" href="{config.relative_path}/{terms.url}"><i class="fa fa-fw {{{ if terms.selected }}}fa-check{{{ end }}}"></i>{terms.name}</a>
|
|
@@ -1,118 +1,127 @@
|
|
|
1
|
-
|
|
1
|
+
<ul component="category" class="list-unstyled topic-list pt-3 overflow-auto position-relative" itemscope itemtype="http://www.schema.org/ItemList" data-nextstart="{nextStart}" data-set="{set}">
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
{
|
|
5
|
-
|
|
6
|
-
<
|
|
7
|
-
<meta itemprop="name" content="{function.stripTags, ../title}" />
|
|
3
|
+
{{{ each topics }}}
|
|
4
|
+
<li component="category/topic" class="category-item position-relative {function.generateTopicClass}" <!-- IMPORT partials/data/category.tpl -->>
|
|
5
|
+
<link itemprop="url" content="{config.relative_path}/topic/{./slug}" />
|
|
6
|
+
<meta itemprop="name" content="{function.stripTags, ./title}" />
|
|
8
7
|
<meta itemprop="itemListOrder" content="descending" />
|
|
9
|
-
<meta itemprop="position" content="{
|
|
10
|
-
<a id="{
|
|
8
|
+
<meta itemprop="position" content="{./index}" />
|
|
9
|
+
<a id="{./index}" data-index="{./index}" component="topic/anchor"></a>
|
|
11
10
|
|
|
12
|
-
<div class="
|
|
13
|
-
<div class="
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
11
|
+
<div class="row">
|
|
12
|
+
<div class="col-md-7 col-sm-9 col-12 content d-flex">
|
|
13
|
+
<div class="me-3">
|
|
14
|
+
<div class="avatar">
|
|
15
|
+
<a href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}" class="text-decoration-none">
|
|
16
|
+
{{{ if ./thumbs.length }}}
|
|
17
|
+
<img src="{./thumbs.0.url}" class="not-responsive" />
|
|
18
|
+
{{{ else }}}
|
|
19
|
+
{buildAvatar(./user, "40px", true, "not-responsive")}
|
|
20
|
+
{{{ end }}}
|
|
21
|
+
</a>
|
|
22
|
+
</div>
|
|
22
23
|
</div>
|
|
23
|
-
|
|
24
|
+
<div class="d-flex flex-column gap-1">
|
|
25
|
+
<h2 component="topic/header" class="title mb-1 {{{ if showSelect }}}me-4{{{ end }}} me-md-0 text-md fw-bold">
|
|
26
|
+
{{{ if topics.noAnchor }}}
|
|
27
|
+
<span>{./title}</span>
|
|
28
|
+
{{{ else }}}
|
|
29
|
+
<a class="text-reset" href="{config.relative_path}/topic/{./slug}{{{ if ./bookmark }}}/{./bookmark}{{{ end }}}">{./title}</a>
|
|
30
|
+
{{{ end }}}
|
|
31
|
+
</h2>
|
|
32
|
+
<div class="info d-flex align-items-center flex-wrap">
|
|
33
|
+
<span component="topic/labels" class="d-flex mb-1">
|
|
34
|
+
<span component="topic/scheduled" class="me-2 badge border border-gray-300 text-primary {{{ if !./scheduled }}}hidden{{{ end }}}">
|
|
35
|
+
<i class="fa fa-clock-o"></i>
|
|
36
|
+
[[topic:scheduled]]
|
|
37
|
+
</span>
|
|
38
|
+
<span component="topic/pinned" class="me-2 badge border border-gray-300 text-primary {{{ if (./scheduled || !./pinned) }}}hidden{{{ end }}}">
|
|
39
|
+
<i class="fa fa-thumb-tack"></i>
|
|
40
|
+
{{{ if !./pinExpiry }}}[[topic:pinned]]{{{ else }}}[[topic:pinned-with-expiry, {./pinExpiryISO}]]{{{ end }}}
|
|
41
|
+
</span>
|
|
42
|
+
<span component="topic/locked" class="me-2 badge border border-gray-300 text-primary {{{ if !./locked }}}hidden{{{ end }}}">
|
|
43
|
+
<i class="fa fa-lock"></i>
|
|
44
|
+
[[topic:locked]]
|
|
45
|
+
</span>
|
|
46
|
+
<span class="me-2 badge border border-gray-300 text-primary {{{ if !./oldCid }}}hidden{{{ end }}}">
|
|
47
|
+
<i class="fa fa-arrow-circle-right"></i>
|
|
48
|
+
[[topic:moved]]
|
|
49
|
+
</span>
|
|
50
|
+
{{{each ./icons}}}<span class="me-2">{@value}</span>{{{end}}}
|
|
51
|
+
</span>
|
|
24
52
|
|
|
25
|
-
<!-- IF !showSelect -->
|
|
26
|
-
<a href="<!-- IF topics.user.userslug -->{config.relative_path}/user/{topics.user.userslug}<!-- ELSE -->#<!-- ENDIF topics.user.userslug -->" class="float-start">
|
|
27
|
-
{{{ if ./thumbs.length }}}
|
|
28
|
-
<img src="{./thumbs.0.url}" class="user-img not-responsive" />
|
|
29
|
-
{{{ else }}}
|
|
30
|
-
{buildAvatar(../user, "48px", true, "not-responsive")}
|
|
31
|
-
{{{ end }}}
|
|
32
|
-
</a>
|
|
33
|
-
<!-- ENDIF !showSelect -->
|
|
34
|
-
</div>
|
|
35
53
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
<i component="topic/locked" class="fa fa-lock {{{ if !topics.locked }}}hide{{{ end }}}" title="[[topic:locked]]"></i>
|
|
40
|
-
<i component="topic/moved" class="fa fa-arrow-circle-right {{{ if !topics.oldCid }}}hide{{{ end }}}" title="[[topic:moved]]"></i>
|
|
41
|
-
{{{each topics.icons}}}{@value}{{{end}}}
|
|
54
|
+
{{{ if !template.category }}}
|
|
55
|
+
<a class="lh-1 me-2 mb-1" href="{config.relative_path}/category/{./category.slug}">{function.buildCategoryLabel, ./category, "border"}</a>
|
|
56
|
+
{{{ end }}}
|
|
42
57
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
<!-- IF !template.category -->
|
|
51
|
-
<div class="category-item d-inline-block">
|
|
52
|
-
{buildCategoryIcon(./category, "24px", "rounded-circle")}
|
|
53
|
-
<a class="text-muted" href="{config.relative_path}/category/{topics.category.slug}">{topics.category.name}</a>
|
|
54
|
-
</div>
|
|
55
|
-
•
|
|
56
|
-
<!-- ENDIF !template.category -->
|
|
58
|
+
{{{ if ./tags.length }}}
|
|
59
|
+
<span class="lh-1 tag-list hidden-xs d-flex gap-2 me-2 mb-1">
|
|
60
|
+
{{{ each ./tags }}}
|
|
61
|
+
<a href="{config.relative_path}/tags/{./valueEncoded}"><span class="badge border border-gray-300 text-xs fw-normal tag tag-class-{./class}" data-tag="{./value}">{./valueEscaped}</span></a>
|
|
62
|
+
{{{ end }}}
|
|
63
|
+
</span>
|
|
64
|
+
{{{ end }}}
|
|
57
65
|
|
|
58
|
-
|
|
59
|
-
<span class="tag-list hidden-xs">
|
|
60
|
-
{{{ each ./tags }}}
|
|
61
|
-
<!-- IMPORT partials/topic/tag.tpl -->
|
|
62
|
-
{{{ end }}}
|
|
63
|
-
•
|
|
64
|
-
</span>
|
|
65
|
-
{{{ end }}}
|
|
66
|
-
|
|
67
|
-
<span class="hidden-xs"><span class="timeago text-muted" title="{./timestampISO}"></span> • <a class="text-muted" href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}">{./user.displayname}</a></span>
|
|
66
|
+
<span class="hidden-xs text-xs timeago text-muted me-2 mb-1" title="{./timestampISO}"></span>
|
|
68
67
|
|
|
69
|
-
|
|
68
|
+
<span class="visible-xs-inline timeago text-muted text-xs" title="{{{ if ./teaser.timestampISO }}}{./teaser.timestampISO}{{{ else }}}{./timestampISO}{{{ end }}}"></span>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
70
71
|
</div>
|
|
71
|
-
</div>
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
73
|
+
<div class="col-md-2 d-none d-md-flex stats text-muted gap-2 px-0">
|
|
74
|
+
{{{ if !reputation:disabled }}}
|
|
75
|
+
<div class="stats-votes flex-1">
|
|
76
|
+
<div class="align-items-center card card-header px-0 py-2 border-0 rounded-1">
|
|
77
|
+
<span class="human-readable-number fs-5 fw-semibold ff-secondary lh-1" title="{./votes}" data-toFixed="0">{./votes}</span>
|
|
78
|
+
<span class="text-lowercase text-xs">[[global:votes]]</span>
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
{{{ end }}}
|
|
82
|
+
<div class="stats-postcount flex-1">
|
|
83
|
+
<div class="align-items-center card card-header px-0 py-2 border-0 rounded-1">
|
|
84
|
+
<span class="human-readable-number fs-5 fw-semibold ff-secondary lh-1" title="{./postcount}" data-toFixed="0">{./postcount}</span>
|
|
85
|
+
<span class="text-lowercase text-xs">[[global:posts]]</span>
|
|
86
|
+
</div>
|
|
87
|
+
</div>
|
|
88
|
+
<div class="stats-viewcount flex-1">
|
|
89
|
+
<div class="align-items-center card card-header px-0 py-2 border-0 rounded-1">
|
|
90
|
+
<span class="human-readable-number fs-5 fw-semibold ff-secondary lh-1" title="{./viewcount}" data-toFixed="0">{./viewcount}</span>
|
|
91
|
+
<span class="text-lowercase text-xs">[[global:views]]</span>
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
93
95
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
</
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
96
|
+
<div class="col-md-3 col-sm-3 teaser hidden-xs overflow-hidden" component="topic/teaser">
|
|
97
|
+
<div class="lastpost background-link-container border-start border-2 h-100" style="border-color: {./category.bgColor}!important;">
|
|
98
|
+
<a class="background-link" href="{config.relative_path}/topic/{./slug}/{./teaser.index}"></a>
|
|
99
|
+
{{{ if ./unreplied }}}
|
|
100
|
+
<p class="ps-3 text-xs lh-1">
|
|
101
|
+
[[category:no_replies]]
|
|
102
|
+
</p>
|
|
103
|
+
{{{ else }}}
|
|
104
|
+
{{{ if ./teaser.pid }}}
|
|
105
|
+
<p class="ps-3 mb-0 lh-1">
|
|
106
|
+
<a href="{config.relative_path}/user/{./teaser.user.userslug}" class="text-decoration-none">{buildAvatar(./teaser.user, "18px", true, "not-responsive")}</a>
|
|
107
|
+
<a class="permalink text-muted timeago text-xs" href="{config.relative_path}/topic/{./slug}/{./teaser.index}" title="{./teaser.timestampISO}">
|
|
108
|
+
</a>
|
|
109
|
+
</p>
|
|
110
|
+
<div class="post-content overflow-hidden text-xs line-clamp-2 ps-3">
|
|
111
|
+
{./teaser.content}
|
|
112
|
+
</div>
|
|
113
|
+
{{{ end }}}
|
|
114
|
+
{{{ end }}}
|
|
111
115
|
</div>
|
|
112
|
-
<!-- ENDIF topics.teaser.pid -->
|
|
113
|
-
<!-- ENDIF topics.unreplied -->
|
|
114
116
|
</div>
|
|
117
|
+
|
|
118
|
+
{{{ if showSelect }}}
|
|
119
|
+
<div class="position-absolute top-0 end-0 w-auto p-0">
|
|
120
|
+
<i component="topic/select" class="fa fa-square-o fs-5 text-muted pointer"></i>
|
|
121
|
+
</div>
|
|
122
|
+
{{{ end }}}
|
|
115
123
|
</div>
|
|
124
|
+
<hr class="text-muted opacity-25"/>
|
|
116
125
|
</li>
|
|
117
126
|
{{{end}}}
|
|
118
127
|
</ul>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<a href="{config.relative_path}/user/{./userslug}" class="btn-ghost align-items-start">
|
|
2
|
+
{buildAvatar(@value, "48px", true)}
|
|
3
|
+
<div class="d-flex flex-1 flex-column">
|
|
4
|
+
<div class="fw-semibold">{./displayname}</div>
|
|
5
|
+
<div class="text-xs text-muted">@{./username}</div>
|
|
6
|
+
</div>
|
|
7
|
+
</a>
|