nodebb-theme-harmony 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +76 -62
- package/templates/groups/list.tpl +16 -11
- 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 -175
- package/templates/partials/groups/badge.tpl +1 -3
- package/templates/partials/groups/invited.tpl +31 -0
- package/templates/partials/groups/list.tpl +14 -21
- package/templates/partials/groups/memberlist.tpl +28 -24
- package/templates/partials/groups/pending.tpl +28 -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,30 @@
|
|
|
1
|
+
<a component="search/button" id="search-button" href="#" role="button" class="nav-link nav-btn d-flex gap-2 align-items-center text-truncate" data-bs-toggle="dropdown" title="[[global:header.search]]">
|
|
2
|
+
<span>
|
|
3
|
+
<i class="fa fa-search fa-fw"></i>
|
|
4
|
+
</span>
|
|
5
|
+
<span class="nav-text small visible-open fw-semibold">[[global:search]]</span>
|
|
6
|
+
</a>
|
|
7
|
+
<div class="search-dropdown dropdown-menu p-2 shadow">
|
|
8
|
+
<form component="search/form" id="search-form" class="d-flex justify-content-end align-items-center" role="search" method="GET">
|
|
9
|
+
<div component="search/fields" class="w-100" id="search-fields">
|
|
10
|
+
<div class="d-flex gap-1">
|
|
11
|
+
<input autocomplete="off" type="text" class="form-control" placeholder="[[global:search]]" name="query" value="">
|
|
12
|
+
|
|
13
|
+
<div class="nav-btn d-flex justify-content-center align-items-center advanced-search-link">
|
|
14
|
+
<i class="fa fa-gears fa-fw text-muted"></i>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
<div id="quick-search-container" class="quick-search-container d-block mt-2 hidden">
|
|
19
|
+
<div class="form-check filter-category mb-2 ms-2">
|
|
20
|
+
<input class="form-check-input" type="checkbox" checked>
|
|
21
|
+
<label class="form-check-label name text-sm"></label>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<div class="text-center loading-indicator"><i class="fa fa-spinner fa-spin"></i></div>
|
|
25
|
+
<div class="quick-search-results-container"></div>
|
|
26
|
+
</div>
|
|
27
|
+
<button type="submit" class="btn btn-outline-secondary hide">[[global:search]]</button>
|
|
28
|
+
</div>
|
|
29
|
+
</form>
|
|
30
|
+
</div>
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
<label class="nav-link nav-btn text-truncate d-flex gap-2 align-items-center" data-bs-toggle="dropdown" id="user_dropdown" role="button">
|
|
2
|
+
{buildAvatar(user, "20px", true)}
|
|
3
|
+
<span id="user-header-name" class="nav-text small visible-open fw-semibold">{user.username}</span>
|
|
4
|
+
</label>
|
|
5
|
+
<ul id="user-control-list" component="header/usercontrol" class="dropdown-menu shadow p-1 text-sm" aria-labelledby="user_dropdown">
|
|
6
|
+
<li>
|
|
7
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-1" component="header/profilelink" href="{relative_path}/user/{user.userslug}">
|
|
8
|
+
<div class="text-center"><span component="user/status" class="badge border border-white border-2 rounded-circle status {user.status}"><span class="visually-hidden">[[global:{user.status}]]</span></span></div>
|
|
9
|
+
<span class="fw-semibold" component="header/username">{user.username}</span>
|
|
10
|
+
</a>
|
|
11
|
+
</li>
|
|
12
|
+
<li role="presentation" class="dropdown-divider"></li>
|
|
13
|
+
<li><h6 class="dropdown-header text-xs">[[global:status]]</h6></li>
|
|
14
|
+
<li>
|
|
15
|
+
<a href="#" class="dropdown-item rounded-1 user-status d-flex align-items-center gap-1" data-status="online">
|
|
16
|
+
<div class="text-center"><span component="user/status" class="badge border border-white border-2 rounded-circle status online"><span class="visually-hidden">[[global:online]]</span></span></div>
|
|
17
|
+
<span{{{ if user.online }}} class="fw-semibold"{{{ end }}}> [[global:online]]</span>
|
|
18
|
+
</a>
|
|
19
|
+
</li>
|
|
20
|
+
<li>
|
|
21
|
+
<a href="#" class="dropdown-item rounded-1 user-status d-flex align-items-center gap-1" data-status="away">
|
|
22
|
+
<div class="text-center"><span component="user/status" class="badge border border-white border-2 rounded-circle status away"><span class="visually-hidden">[[global:away]]</span></span></div>
|
|
23
|
+
<span{{{ if user.away}}} class="fw-semibold"{{{ end }}}> [[global:away]]</span>
|
|
24
|
+
</a>
|
|
25
|
+
</li>
|
|
26
|
+
<li>
|
|
27
|
+
<a href="#" class="dropdown-item rounded-1 user-status d-flex align-items-center gap-1" data-status="dnd">
|
|
28
|
+
<div class="text-center"><span component="user/status" class="badge border border-white border-2 rounded-circle status dnd"><span class="visually-hidden">[[global:dnd]]</span></span></div>
|
|
29
|
+
<span{{{ if user.dnd}}} class="fw-semibold"{{{ end }}}> [[global:dnd]]</span>
|
|
30
|
+
</a>
|
|
31
|
+
</li>
|
|
32
|
+
<li>
|
|
33
|
+
<a href="#" class="dropdown-item rounded-1 user-status d-flex align-items-center gap-1" data-status="offline">
|
|
34
|
+
<div class="text-center"><span component="user/status" class="badge border border-white border-2 rounded-circle status offline"><span class="visually-hidden">[[global:invisible]]</span></span></div>
|
|
35
|
+
<span{{{ if user.offline}}} class="fw-semibold"{{{ end }}}> [[global:invisible]]</span>
|
|
36
|
+
</a>
|
|
37
|
+
</li>
|
|
38
|
+
<li role="presentation" class="dropdown-divider"></li>
|
|
39
|
+
<li>
|
|
40
|
+
<a class="dropdown-item rounded-1" component="header/profilelink/edit" href="{relative_path}/user/{user.userslug}/edit">
|
|
41
|
+
<i class="fa fa-fw fa-edit"></i> <span>[[user:edit-profile]]</span>
|
|
42
|
+
</a>
|
|
43
|
+
</li>
|
|
44
|
+
<li>
|
|
45
|
+
<a class="dropdown-item rounded-1" component="header/profilelink/settings" href="{relative_path}/user/{user.userslug}/settings">
|
|
46
|
+
<i class="fa fa-fw fa-gear"></i> <span>[[user:settings]]</span>
|
|
47
|
+
</a>
|
|
48
|
+
</li>
|
|
49
|
+
{{{ if showModMenu }}}
|
|
50
|
+
<li role="presentation" class="dropdown-divider"></li>
|
|
51
|
+
<li><h6 class="dropdown-header text-xs">[[pages:moderator-tools]]</h6></li>
|
|
52
|
+
<li>
|
|
53
|
+
<a class="dropdown-item rounded-1" href="{relative_path}/flags">
|
|
54
|
+
<i class="fa fa-fw fa-flag"></i> <span>[[pages:flagged-content]]</span>
|
|
55
|
+
</a>
|
|
56
|
+
</li>
|
|
57
|
+
<li>
|
|
58
|
+
<a class="dropdown-item rounded-1" href="{relative_path}/post-queue">
|
|
59
|
+
<i class="fa fa-fw fa-list-alt"></i> <span>[[pages:post-queue]]</span>
|
|
60
|
+
</a>
|
|
61
|
+
</li>
|
|
62
|
+
<li>
|
|
63
|
+
<a class="dropdown-item rounded-1" href="{relative_path}/ip-blacklist">
|
|
64
|
+
<i class="fa fa-fw fa-ban"></i> <span>[[pages:ip-blacklist]]</span>
|
|
65
|
+
</a>
|
|
66
|
+
</li>
|
|
67
|
+
{{{ else }}}
|
|
68
|
+
{{{ if postQueueEnabled }}}
|
|
69
|
+
<li>
|
|
70
|
+
<a class="dropdown-item rounded-1" href="{relative_path}/post-queue">
|
|
71
|
+
<i class="fa fa-fw fa-list-alt"></i> <span>[[pages:post-queue]]</span>
|
|
72
|
+
</a>
|
|
73
|
+
</li>
|
|
74
|
+
{{{ end }}}
|
|
75
|
+
{{{ end }}}
|
|
76
|
+
|
|
77
|
+
<li role="presentation" class="dropdown-divider"></li>
|
|
78
|
+
<li component="user/logout">
|
|
79
|
+
<form method="post" action="{relative_path}/logout">
|
|
80
|
+
<input type="hidden" name="_csrf" value="{config.csrf_token}">
|
|
81
|
+
<input type="hidden" name="noscript" value="true">
|
|
82
|
+
<button type="submit" class="dropdown-item rounded-1">
|
|
83
|
+
<i class="fa fa-fw fa-sign-out"></i><span> [[global:logout]]</span>
|
|
84
|
+
</button>
|
|
85
|
+
</form>
|
|
86
|
+
</li>
|
|
87
|
+
</ul>
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<nav class="text-dark bg-light sidebar sidebar-left vh-100 d-none d-md-flex flex-column justify-content-between sticky-top ff-secondary">
|
|
2
|
+
<ul id="main-nav" class="list-unstyled d-flex flex-column w-100 gap-2 mt-2">
|
|
3
|
+
{{{ each navigation }}}
|
|
4
|
+
<!-- IF function.displayMenuItem, @index -->
|
|
5
|
+
<li class="nav-item mx-2 {./class}{{{ if ./dropdown }}} dropend{{{ end }}}" title="{./title}">
|
|
6
|
+
<a class="nav-link nav-btn navigation-link d-flex gap-2 justify-content-between align-items-center {{{ if navigation.dropdown }}}dropdown-toggle{{{ end }}}"
|
|
7
|
+
{{{ if ./dropdown }}} href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" {{{ else }}} href="{./route}"{{{ end }}} {{{ if ./id }}}id="{./id}"{{{ end }}}{{{ if ./targetBlank }}} target="_blank"{{{ end }}}>
|
|
8
|
+
<span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
|
|
9
|
+
<span class="position-relative">
|
|
10
|
+
{{{ if ./iconClass }}}
|
|
11
|
+
<i class="fa fa-fw {./iconClass}" data-content="{./content}"></i>
|
|
12
|
+
<span component="navigation/count" class="visible-closed position-absolute top-0 start-100 translate-middle badge rounded-1 bg-primary {{{ if !./content }}}hidden{{{ end }}}">{./content}</span>
|
|
13
|
+
{{{ end }}}
|
|
14
|
+
</span>
|
|
15
|
+
{{{ if navigation.text }}}
|
|
16
|
+
<span class="nav-text small visible-open fw-semibold text-truncate">{navigation.text}</span>
|
|
17
|
+
{{{ end }}}
|
|
18
|
+
</span>
|
|
19
|
+
<span component="navigation/count" class="visible-open badge rounded-1 bg-primary {{{ if !./content }}}hidden{{{ end }}}">{./content}</span>
|
|
20
|
+
</a>
|
|
21
|
+
{{{ if navigation.dropdown }}}
|
|
22
|
+
<ul class="dropdown-menu shadow">
|
|
23
|
+
{navigation.dropdownContent}
|
|
24
|
+
</ul>
|
|
25
|
+
{{{ end }}}
|
|
26
|
+
</li>
|
|
27
|
+
<!-- ENDIF function.displayMenuItem -->
|
|
28
|
+
{{{end}}}
|
|
29
|
+
</ul>
|
|
30
|
+
<div class="w-100">
|
|
31
|
+
<!-- IMPORT partials/skin-switcher.tpl -->
|
|
32
|
+
<div class="sidebar-toggle m-2">
|
|
33
|
+
<a href="#" role="button" component="sidebar/toggle" class="nav-btn d-flex gap-2 align-items-center p-2 pointer nav-link w-100 text-nowrap">
|
|
34
|
+
<i class="fa fa-fw fa-angles-right"></i>
|
|
35
|
+
<i class="fa fa-fw fa-angles-left"></i>
|
|
36
|
+
<span class="nav-text visible-open fw-semibold small lh-1">[[harmony:collapse]]</span>
|
|
37
|
+
</a>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
</nav>
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<nav class="text-dark bg-light sidebar sidebar-right vh-100 d-none d-md-flex flex-column sticky-top ff-secondary">
|
|
2
|
+
{{{ if config.loggedIn }}}
|
|
3
|
+
<ul id="logged-in-menu" class="list-unstyled d-flex flex-column w-100 gap-2 mt-2">
|
|
4
|
+
<li id="user_label" class="nav-item mx-2 dropstart usermenu" title="[[global:header.profile]]">
|
|
5
|
+
<!-- IMPORT partials/sidebar/user-menu.tpl -->
|
|
6
|
+
</li>
|
|
7
|
+
|
|
8
|
+
{{{ if config.searchEnabled }}}
|
|
9
|
+
<li component="sidebar/search" class="nav-item mx-2 search dropstart position-relative">
|
|
10
|
+
<!-- IMPORT partials/sidebar/search.tpl -->
|
|
11
|
+
</li>
|
|
12
|
+
{{{ end }}}
|
|
13
|
+
|
|
14
|
+
<li component="notifications" class="nav-item mx-2 notifications dropstart">
|
|
15
|
+
<!-- IMPORT partials/sidebar/notifications.tpl -->
|
|
16
|
+
</li>
|
|
17
|
+
|
|
18
|
+
{{{ if canChat }}}
|
|
19
|
+
<li class="nav-item mx-2 chats dropstart">
|
|
20
|
+
<!-- IMPORT partials/sidebar/chats.tpl -->
|
|
21
|
+
</li>
|
|
22
|
+
{{{ end }}}
|
|
23
|
+
|
|
24
|
+
<li component="sidebar/drafts" class="nav-item mx-2 drafts dropstart">
|
|
25
|
+
<!-- IMPORT partials/sidebar/drafts.tpl -->
|
|
26
|
+
</li>
|
|
27
|
+
</ul>
|
|
28
|
+
{{{ else }}}
|
|
29
|
+
<ul id="logged-out-menu" class="list-unstyled d-flex flex-column w-100 gap-2 mt-2">
|
|
30
|
+
<!-- IMPORT partials/sidebar/logged-out-menu.tpl -->
|
|
31
|
+
</ul>
|
|
32
|
+
{{{ end }}}
|
|
33
|
+
|
|
34
|
+
<!-- IMPORT partials/topic/navigator.tpl -->
|
|
35
|
+
|
|
36
|
+
<div class="visible-open small text-secondary mt-auto" data-widget-area="sidebar-footer">
|
|
37
|
+
{{{each widgets.sidebar-footer}}}
|
|
38
|
+
{{./html}}
|
|
39
|
+
{{{end}}}
|
|
40
|
+
</div>
|
|
41
|
+
</nav>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<div class="dropend m-2" component="skinSwitcher">
|
|
2
|
+
<a data-bs-toggle="dropdown" href="#" role="button" class="nav-link nav-btn position-relative" title="[[harmony:skins]]">
|
|
3
|
+
<span class="justify-content-between w-100">
|
|
4
|
+
<span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
|
|
5
|
+
<span>
|
|
6
|
+
<i component="skinSwitcher/icon" class="fa fa-fw fa-paintbrush"></i>
|
|
7
|
+
</span>
|
|
8
|
+
<span class="nav-text small visible-open fw-semibold">[[harmony:skins]]</span>
|
|
9
|
+
</span>
|
|
10
|
+
</span>
|
|
11
|
+
</a>
|
|
12
|
+
|
|
13
|
+
<ul class="dropdown-menu overflow-auto">
|
|
14
|
+
<div class="d-flex px-2">
|
|
15
|
+
<div>
|
|
16
|
+
<li class="dropdown-header">Light</li>
|
|
17
|
+
<div class="d-grid" style="grid-template-columns: 1fr 1fr;">
|
|
18
|
+
{{{ each bootswatchSkinOptions.light }}}
|
|
19
|
+
<li>
|
|
20
|
+
<a href="#" class="dropdown-item rounded-1" data-value="{./value}">{./name} <i class="fa fa-fw fa-check {{{ if !./selected }}} invisible {{{ end }}}"></i></a>
|
|
21
|
+
</li>
|
|
22
|
+
{{{ end }}}
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
<div>
|
|
26
|
+
<li class="dropdown-header">Dark</li>
|
|
27
|
+
{{{ each bootswatchSkinOptions.dark }}}
|
|
28
|
+
<li>
|
|
29
|
+
<a href="#" class="dropdown-item rounded-1" data-value="{./value}">{./name} <i class="fa fa-fw fa-check {{{ if !./selected }}} invisible {{{ end }}}"></i></a>
|
|
30
|
+
</li>
|
|
31
|
+
{{{ end }}}
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
</ul>
|
|
35
|
+
</div>
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
|
-
|
|
3
1
|
{{{each tags}}}
|
|
4
2
|
<h5 class="float-start tag-container me-4 mb-4 fw-bold">
|
|
5
3
|
<a href="{config.relative_path}/tags/{tags.valueEncoded}" data-tag="{tags.valueEscaped}"><span class="tag-item text-muted text-uppercase text-nowrap tag-class-{tags.class} me-2" data-tag="{tags.valueEscaped}">{tags.valueEscaped}</span><span class="tag-topic-count text-primary text-nowrap human-readable-number" title="{tags.score}">{tags.score}</span></a>
|
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
|
-
|
|
3
1
|
<div id="{alert_id}" role="alert" class="alert alert-dismissible alert-{type}" component="toaster/toast">
|
|
4
2
|
<button type="button" class="btn-close float-end" data-bs-dismiss="alert" aria-label="close"></button>
|
|
5
|
-
|
|
3
|
+
{{{ if image }}}
|
|
6
4
|
<img src="{image}">
|
|
7
|
-
|
|
5
|
+
{{{ end }}}
|
|
8
6
|
|
|
9
|
-
|
|
7
|
+
{{{ if title }}}
|
|
10
8
|
<strong>{title}</strong>
|
|
11
|
-
|
|
9
|
+
{{{ end }}}
|
|
12
10
|
|
|
13
|
-
|
|
11
|
+
{{{ if message }}}
|
|
14
12
|
<p>{message}</p>
|
|
15
|
-
|
|
13
|
+
{{{ end }}}
|
|
16
14
|
</div>
|
|
@@ -1,28 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
<li component="topic/event" class="timeline-event text-muted" data-topic-event-id="{./id}" data-topic-event-type="{./type}">
|
|
1
|
+
<li component="topic/event" class="timeline-event text-muted d-flex gap-2 pt-4" data-topic-event-id="{./id}" data-topic-event-type="{./type}">
|
|
4
2
|
<div class="timeline-badge">
|
|
5
|
-
<i class="fa {{{ if ./icon }}}{./icon}{{{ else }}}fa-circle{{{ end }}}"></i>
|
|
3
|
+
<i class="fa {{{ if ./icon }}}{./icon}{{{ else }}}fa-circle{{{ end }}} small"></i>
|
|
6
4
|
</div>
|
|
7
|
-
<span class="timeline-text">
|
|
8
|
-
{{{ if ./href}}}
|
|
9
|
-
<a href="{config.relative_path}{./href}">{./text}</a>
|
|
10
|
-
{{{ else }}}
|
|
5
|
+
<span class="timeline-text small">
|
|
11
6
|
{./text}
|
|
12
|
-
{{{ end }}}
|
|
13
|
-
|
|
14
7
|
</span>
|
|
15
|
-
{{{ if ./user }}}
|
|
16
|
-
{{{ if ./user.system }}}
|
|
17
|
-
<span class="timeline-text">[[global:system-user]]</span>
|
|
18
|
-
{{{ else }}}
|
|
19
|
-
<span><a href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(./user, "16px", true)} {./user.username}</a></span>
|
|
20
|
-
{{{ end }}}
|
|
21
|
-
{{{ end }}}
|
|
22
|
-
<span class="timeago timeline-text" title="{./timestampISO}"></span>
|
|
23
|
-
|
|
24
8
|
{{{ if privileges.isAdminOrMod }}}
|
|
25
|
-
|
|
9
|
+
<span component="topic/event/delete" data-topic-event-id="{./id}" data-topic-event-type="{./type}" class="timeline-text pointer" title="[[topic:delete-event]]"><i class="fa fa-trash"></i></span>
|
|
26
10
|
{{{ end }}}
|
|
27
11
|
</li>
|
|
28
12
|
|
|
@@ -1,41 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
<div class="scroller-thumb">
|
|
22
|
-
<span class="thumb-text"></span>
|
|
23
|
-
<div class="scroller-thumb-icon"></div>
|
|
24
|
-
</div>
|
|
25
|
-
</div>
|
|
26
|
-
<span class="pointer pagebottom">[[topic:last-post]] <i class="fa fa-angle-double-down"></i></span>
|
|
27
|
-
</div>
|
|
28
|
-
</div>
|
|
29
|
-
</div>
|
|
30
|
-
<div class="row">
|
|
31
|
-
<div class="col-6">
|
|
32
|
-
<button id="myNextPostBtn" class="btn btn-outline-secondary form-control" disabled>[[topic:go-to-my-next-post]]</button>
|
|
33
|
-
</div>
|
|
34
|
-
<div class="col-6">
|
|
35
|
-
<input type="number" class="form-control" id="indexInput" placeholder="[[global:pagination.enter_index]]">
|
|
36
|
-
</div>
|
|
37
|
-
</div>
|
|
38
|
-
</li>
|
|
39
|
-
</ul>
|
|
40
|
-
</div>
|
|
41
|
-
</div>
|
|
1
|
+
<div class="d-none flex-column flex-grow-1 align-items-center mb-2 mx-2 mt-auto" component="topic/navigator">
|
|
2
|
+
<a href="#" class="nav-link border-0 p-2" data-action="toTop"><i class="fa fa-fw fa-angles-up"></i></a>
|
|
3
|
+
<a href="#" class="nav-link border-0 p-2" data-action="scrollUp"><i class="fa fa-fw fa-angle-up"></i></a>
|
|
4
|
+
<div class="track d-inline-block flex-grow-1 position-relative">
|
|
5
|
+
<div class="unread d-inline-block position-absolute">
|
|
6
|
+
<div class="meta small position-absolute top-50 translate-middle-y text-nowrap fw-semibold">
|
|
7
|
+
<a href="{url}"></a>
|
|
8
|
+
</div>
|
|
9
|
+
</div>
|
|
10
|
+
<div class="handle d-inline-block position-absolute">
|
|
11
|
+
<div class="knob d-inline-block rounded-circle translate-middle"></div>
|
|
12
|
+
<div class="meta small position-absolute text-nowrap fw-semibold">
|
|
13
|
+
<p class="index text-body mb-0"></p>
|
|
14
|
+
<p class="timestamp text-secondary timeago mb-0"></p>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
<a href="#" class="nav-link border-0 p-2" data-action="scrollDown"><i class="fa fa-fw fa-angle-down"></i></a>
|
|
19
|
+
<a href="#" class="nav-link border-0 p-2" data-action="toBottom"><i class="fa fa-fw fa-angles-down"></i></a>
|
|
20
|
+
</div>
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
<
|
|
4
|
-
|
|
1
|
+
<li component="topic/necro-post" class="necro-post text-muted timeline-event d-flex gap-2 pt-4">
|
|
2
|
+
<div class="timeline-badge">
|
|
3
|
+
<i class="fa fa-clock small"></i>
|
|
4
|
+
</div>
|
|
5
|
+
<span class="timeline-text small fw-semibold">{text}</span>
|
|
5
6
|
</li>
|
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
2
|
|
|
3
3
|
<span component="post/tools" class="dropdown moderator-tools bottom-sheet d-inline-block<!-- IF !posts.display_post_menu -->hidden<!-- ENDIF !posts.display_post_menu -->">
|
|
4
|
-
<a class="dropdown-toggle d-block" href="#" data-bs-toggle="dropdown"><i class="fa fa-fw fa-ellipsis-v"></i></a>
|
|
5
|
-
<ul class="dropdown-menu dropdown-menu-end" role="menu"
|
|
4
|
+
<a class="btn btn-link dropdown-toggle d-block" href="#" data-bs-toggle="dropdown"><i class="fa fa-fw fa-ellipsis-v"></i></a>
|
|
5
|
+
<ul class="dropdown-menu dropdown-menu-end" role="menu">
|
|
6
|
+
<li class="dropdown-item placeholder-wave">
|
|
7
|
+
<div class="placeholder" style="width: 20px;"> </div>
|
|
8
|
+
<div class="placeholder col-3"> </div>
|
|
9
|
+
</li>
|
|
10
|
+
<li class="dropdown-item placeholder-wave">
|
|
11
|
+
<div class="placeholder" style="width: 20px;"> </div>
|
|
12
|
+
<div class="placeholder col-5"> </div>
|
|
13
|
+
</li>
|
|
14
|
+
<li class="dropdown-item placeholder-wave">
|
|
15
|
+
<div class="placeholder" style="width: 20px;"> </div>
|
|
16
|
+
<div class="placeholder col-11"> </div>
|
|
17
|
+
</li>
|
|
18
|
+
<li class="dropdown-item placeholder-wave">
|
|
19
|
+
<div class="placeholder" style="width: 20px;"> </div>
|
|
20
|
+
<div class="placeholder col-7"> </div>
|
|
21
|
+
</li>
|
|
22
|
+
<li class="dropdown-item placeholder-wave">
|
|
23
|
+
<div class="placeholder" style="width: 20px;"> </div>
|
|
24
|
+
<div class="placeholder col-12"> </div>
|
|
25
|
+
</li>
|
|
26
|
+
</ul>
|
|
6
27
|
</span>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<div class="d-flex align-items-start gap-3">
|
|
2
|
+
<div class="icon py-1 bg-body d-none d-sm-block">
|
|
3
|
+
<div class="placeholder bg-secondary rounded-circle" style="width: 48px; height: 48px;"></div>
|
|
4
|
+
</div>
|
|
5
|
+
|
|
6
|
+
<div class="d-flex flex-grow-1 flex-column placeholder-wave">
|
|
7
|
+
<div class="d-flex align-items-center gap-1 flex-wrap w-100 post-header mt-1">
|
|
8
|
+
<div class="placeholder bg-secondary rounded-1 col-2"> </div>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<div class="content mt-2 placeholder bg-secondary rounded-1 col-5" component="post/content" itemprop="text">
|
|
12
|
+
<p> </p>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
@@ -1,18 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
<
|
|
4
|
-
<div class="icon float-start">
|
|
5
|
-
<a href="<!-- IF posts.user.userslug -->{config.relative_path}/user/{posts.user.userslug}<!-- ELSE -->#<!-- ENDIF posts.user.userslug -->">
|
|
1
|
+
<div class="d-flex align-items-start gap-3">
|
|
2
|
+
<div class="icon py-1 bg-body d-none d-sm-block">
|
|
3
|
+
<a class="d-inline-block position-relative text-decoration-none" href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}">
|
|
6
4
|
{buildAvatar(posts.user, "48px", true, "", "user/picture")}
|
|
7
|
-
<
|
|
5
|
+
<span component="user/status" class="position-absolute translate-middle-y badge border border-white border-2 rounded-circle status {posts.user.status}"><span class="visually-hidden">[[global:{posts.user.status}]]</span></span>
|
|
8
6
|
</a>
|
|
9
7
|
</div>
|
|
10
8
|
|
|
11
|
-
<
|
|
12
|
-
<div class="d-flex align-items-center gap-1 flex-wrap w-100">
|
|
13
|
-
<
|
|
14
|
-
<a href="
|
|
15
|
-
|
|
9
|
+
<div class="d-flex flex-grow-1 flex-column w-100" style="min-width: 0;">
|
|
10
|
+
<div class="d-flex align-items-center gap-1 flex-wrap w-100 post-header mt-1">
|
|
11
|
+
<div class="icon bg-body d-sm-none">
|
|
12
|
+
<a class="d-inline-block position-relative text-decoration-none" href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}">
|
|
13
|
+
{buildAvatar(posts.user, "20px", true, "", "user/picture")}
|
|
14
|
+
<span component="user/status" class="position-absolute translate-middle-y badge border border-white border-2 rounded-circle status {posts.user.status}"><span class="visually-hidden">[[global:{posts.user.status}]]</span></span>
|
|
15
|
+
</a>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
<span class="text-nowrap">
|
|
19
|
+
<a class="fw-bold" href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}" itemprop="author" data-username="{posts.user.username}" data-uid="{posts.user.uid}">{posts.user.displayname}</a>
|
|
20
|
+
</span>
|
|
16
21
|
|
|
17
22
|
{{{ each posts.user.selectedGroups }}}
|
|
18
23
|
{{{ if posts.user.selectedGroups.slug }}}
|
|
@@ -21,14 +26,24 @@
|
|
|
21
26
|
{{{ end }}}
|
|
22
27
|
|
|
23
28
|
<!-- IF posts.user.banned -->
|
|
24
|
-
<span class="badge bg-danger">[[user:banned]]</span>
|
|
29
|
+
<span class="badge bg-danger rounded-1">[[user:banned]]</span>
|
|
25
30
|
<!-- ENDIF posts.user.banned -->
|
|
26
31
|
|
|
27
|
-
<
|
|
28
|
-
|
|
29
|
-
<
|
|
30
|
-
<!-- ENDIF posts.
|
|
32
|
+
<div class="d-flex gap-1 hidden-xs align-items-center">
|
|
33
|
+
{{{ if posts.toPid }}}
|
|
34
|
+
<span class="text-muted">replied to</span><!-- FIX THIS, DOES NOT l10n PROPERLY -->
|
|
35
|
+
<a component="post/parent" data-topid="{posts.toPid}" href="{config.relative_path}/post/{posts.toPid}"><!-- IF posts.parent.username -->{posts.parent.username}<!-- ELSE -->[[global:guest]]<!-- ENDIF posts.parent.username --></a>
|
|
36
|
+
{{{ else }}}
|
|
37
|
+
<span class="text-muted">wrote</span><!-- FIX THIS, DOES NOT l10n PROPERLY -->
|
|
38
|
+
{{{ end }}}
|
|
39
|
+
|
|
40
|
+
<a class="permalink text-muted" href="{config.relative_path}/post/{posts.pid}"><span class="timeago" title="{posts.timestampISO}"></span></a>
|
|
41
|
+
|
|
42
|
+
<i component="post/edit-indicator" class="fa fa-pencil-square<!-- IF privileges.posts:history --> pointer<!-- END --> edit-icon <!-- IF !posts.editor.username -->hidden<!-- ENDIF !posts.editor.username -->"></i>
|
|
43
|
+
<span data-editor="{posts.editor.userslug}" component="post/editor" class="visually-hidden">[[global:last_edited_by, {posts.editor.username}]] <span class="timeago" title="{posts.editedISO}"></span></span>
|
|
44
|
+
</div>
|
|
31
45
|
|
|
46
|
+
<div>
|
|
32
47
|
<span>
|
|
33
48
|
<!-- IF posts.user.custom_profile_info.length -->
|
|
34
49
|
|
|
|
@@ -37,80 +52,68 @@
|
|
|
37
52
|
{{{end}}}
|
|
38
53
|
<!-- ENDIF posts.user.custom_profile_info.length -->
|
|
39
54
|
</span>
|
|
40
|
-
</
|
|
55
|
+
</div>
|
|
41
56
|
<div class="d-flex align-items-center gap-1 flex-grow-1 justify-content-end">
|
|
42
|
-
<span>
|
|
43
|
-
<i component="post/edit-indicator" class="fa fa-pencil-square<!-- IF privileges.posts:history --> pointer<!-- END --> edit-icon <!-- IF !posts.editor.username -->hidden<!-- ENDIF !posts.editor.username -->"></i>
|
|
44
|
-
|
|
45
|
-
<span data-editor="{posts.editor.userslug}" component="post/editor" class="hidden">[[global:last_edited_by, {posts.editor.username}]] <span class="timeago" title="{posts.editedISO}"></span></span>
|
|
46
|
-
|
|
47
|
-
<span class="visible-xs-inline-block visible-sm-inline-block visible-md-inline-block visible-lg-inline-block">
|
|
48
|
-
<a class="permalink text-muted" href="{config.relative_path}/post/{posts.pid}"><span class="timeago" title="{posts.timestampISO}"></span></a>
|
|
49
|
-
</span>
|
|
50
|
-
</span>
|
|
51
|
-
<span class="bookmarked"><i class="fa fa-bookmark-o"></i></span>
|
|
57
|
+
<span class="bookmarked opacity-0 text-primary"><i class="fa fa-bookmark-o"></i></span>
|
|
52
58
|
</div>
|
|
53
59
|
</div>
|
|
54
|
-
</small>
|
|
55
|
-
</div>
|
|
56
|
-
|
|
57
|
-
<br />
|
|
58
60
|
|
|
59
|
-
<div class="content" component="post/content" itemprop="text">
|
|
60
|
-
|
|
61
|
+
<div class="content mt-2 text-break" component="post/content" itemprop="text">
|
|
62
|
+
{posts.content}
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
61
65
|
</div>
|
|
62
66
|
|
|
63
|
-
<div class="post-footer">
|
|
67
|
+
<div component="post/footer" class="post-footer border-bottom pb-2">
|
|
64
68
|
{{{ if posts.user.signature }}}
|
|
65
|
-
<div component="post/signature" data-uid="{posts.user.uid}" class="
|
|
69
|
+
<div component="post/signature" data-uid="{posts.user.uid}" class="text-xs text-muted mt-2">{posts.user.signature}</div>
|
|
66
70
|
{{{ end }}}
|
|
67
71
|
|
|
68
72
|
<div class="clearfix">
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
73
|
+
{{{ if !hideReplies }}}
|
|
74
|
+
<a component="post/reply-count" data-target-component="post/replies/container" href="#" class="d-flex gap-2 align-items-center mt-2 border rounded-1 p-1 threaded-replies user-select-none float-start text-muted text-decoration-none {{{ if !posts.replies.count }}}hidden{{{ end }}}">
|
|
75
|
+
<span component="post/reply-count/avatars" class="avatars d-inline-flex gap-1 align-items-top {{{ if posts.replies.hasMore }}}hasMore{{{ end }}}">
|
|
76
|
+
{{{each posts.replies.users}}}
|
|
77
|
+
<span>{buildAvatar(posts.replies.users, "20px", true, "")}</span>
|
|
78
|
+
{{{end}}}
|
|
79
|
+
{{{ if posts.replies.hasMore}}}
|
|
80
|
+
<span><i class="fa fa-ellipsis"></i></span>
|
|
81
|
+
{{{ end }}}
|
|
82
|
+
</span>
|
|
79
83
|
|
|
80
|
-
|
|
81
|
-
|
|
84
|
+
<span class="ms-2 replies-count fw-semibold" component="post/reply-count/text" data-replies="{posts.replies.count}">{posts.replies.text}</span>
|
|
85
|
+
<span class="ms-2 replies-last hidden-xs fw-semibold">[[topic:last_reply_time]] <span class="timeago" title="{posts.replies.timestampISO}"></span></span>
|
|
82
86
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
87
|
+
<i class="fa fa-fw fa-chevron-down" component="post/replies/open"></i>
|
|
88
|
+
<i class="fa fa-fw fa-chevron-up hidden" component="post/replies/close"></i>
|
|
89
|
+
<i class="fa fa-fw fa-spin fa-spinner hidden" component="post/replies/loading"></i>
|
|
90
|
+
</a>
|
|
91
|
+
{{{ end }}}
|
|
92
|
+
</div>
|
|
93
|
+
|
|
94
|
+
<div component="post/replies/container" class="mt-2 col-11 border rounded-1 p-3"></div>
|
|
88
95
|
|
|
89
|
-
<
|
|
96
|
+
<div component="post/actions" class="d-flex justify-content-end post-tools">
|
|
90
97
|
<!-- IMPORT partials/topic/reactions.tpl -->
|
|
91
|
-
<
|
|
92
|
-
|
|
93
|
-
<a component="post/quote" href="#" class="user-select-none <!-- IF !privileges.topics:reply -->hidden<!-- ENDIF !privileges.topics:reply -->">[[topic:quote]]</a>
|
|
94
|
-
</span>
|
|
98
|
+
<a component="post/reply" href="#" class="btn btn-link user-select-none <!-- IF !privileges.topics:reply -->hidden<!-- ENDIF !privileges.topics:reply -->" title="[[topic:reply]]"><i class="fa fa-reply"></i></a>
|
|
99
|
+
<a component="post/quote" href="#" class="btn btn-link user-select-none <!-- IF !privileges.topics:reply -->hidden<!-- ENDIF !privileges.topics:reply -->" title="[[topic:quote]]"><i class="fa fa-quote-right"></i></a>
|
|
95
100
|
|
|
96
101
|
<!-- IF !reputation:disabled -->
|
|
97
|
-
<
|
|
98
|
-
<a component="post/upvote" href="#" class="<!-- IF posts.upvoted -->upvoted<!-- ENDIF posts.upvoted -->">
|
|
102
|
+
<div class="d-flex votes align-items-center">
|
|
103
|
+
<a component="post/upvote" href="#" class="btn btn-link text-secondary <!-- IF posts.upvoted -->upvoted<!-- ENDIF posts.upvoted -->">
|
|
99
104
|
<i class="fa fa-chevron-up"></i>
|
|
100
105
|
</a>
|
|
101
106
|
|
|
102
|
-
<
|
|
107
|
+
<div class="d-inline-block px-3" component="post/vote-count" data-votes="{posts.votes}">{posts.votes}</div>
|
|
103
108
|
|
|
104
109
|
<!-- IF !downvote:disabled -->
|
|
105
|
-
<a component="post/downvote" href="#" class="<!-- IF posts.downvoted -->downvoted<!-- ENDIF posts.downvoted -->">
|
|
110
|
+
<a component="post/downvote" href="#" class="btn btn-link text-secondary <!-- IF posts.downvoted -->downvoted<!-- ENDIF posts.downvoted -->">
|
|
106
111
|
<i class="fa fa-chevron-down"></i>
|
|
107
112
|
</a>
|
|
108
113
|
<!-- ENDIF !downvote:disabled -->
|
|
109
|
-
</
|
|
114
|
+
</div>
|
|
110
115
|
<!-- ENDIF !reputation:disabled -->
|
|
111
116
|
|
|
112
117
|
<!-- IMPORT partials/topic/post-menu.tpl -->
|
|
113
|
-
</small>
|
|
114
118
|
</div>
|
|
115
|
-
<div component="post/replies/container"></div>
|
|
116
119
|
</div>
|