nodebb-theme-harmony 2.0.0-pre.3 → 2.0.0-pre.30

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.
Files changed (56) hide show
  1. package/package.json +3 -3
  2. package/public/harmony.js +2 -5
  3. package/scss/common.scss +2 -1
  4. package/scss/header.scss +1 -1
  5. package/scss/modules/topics-list.scss +2 -2
  6. package/scss/overrides.scss +2 -0
  7. package/scss/topic.scss +1 -4
  8. package/templates/account/blocks.tpl +18 -7
  9. package/templates/account/consent.tpl +2 -2
  10. package/templates/account/info.tpl +142 -73
  11. package/templates/account/posts.tpl +1 -1
  12. package/templates/account/settings.tpl +7 -7
  13. package/templates/category.tpl +1 -1
  14. package/templates/flags/detail.tpl +2 -2
  15. package/templates/footer.tpl +1 -1
  16. package/templates/groups/list.tpl +3 -3
  17. package/templates/login.tpl +11 -12
  18. package/templates/partials/account/sidebar-left.tpl +5 -1
  19. package/templates/partials/breadcrumbs-json-ld.tpl +15 -25
  20. package/templates/partials/buttons/newTopic.tpl +1 -1
  21. package/templates/partials/category/filter-dropdown-content.tpl +28 -24
  22. package/templates/partials/category/selector-dropdown-content.tpl +23 -19
  23. package/templates/partials/category/sort.tpl +9 -9
  24. package/templates/partials/category/tools.tpl +13 -13
  25. package/templates/partials/category/watch.tpl +8 -8
  26. package/templates/partials/flags/bulk-actions.tpl +1 -0
  27. package/templates/partials/flags/filters.tpl +21 -18
  28. package/templates/partials/groups/memberlist.tpl +1 -1
  29. package/templates/partials/mobile-footer.tpl +3 -6
  30. package/templates/partials/post_bar.tpl +1 -3
  31. package/templates/partials/posts_list_item.tpl +1 -1
  32. package/templates/partials/quick-search-results.tpl +1 -1
  33. package/templates/partials/search-filters.tpl +1 -1
  34. package/templates/partials/search-results.tpl +1 -1
  35. package/templates/partials/sidebar/chats.tpl +1 -1
  36. package/templates/partials/sidebar/drafts.tpl +1 -1
  37. package/templates/partials/sidebar/notifications.tpl +1 -1
  38. package/templates/partials/sidebar/user-menu.tpl +13 -13
  39. package/templates/partials/sidebar-left.tpl +2 -5
  40. package/templates/partials/tags/filter-dropdown-content.tpl +24 -20
  41. package/templates/partials/topic/event.tpl +1 -1
  42. package/templates/partials/topic/navigator.tpl +2 -2
  43. package/templates/partials/topic/post-menu-list.tpl +28 -20
  44. package/templates/partials/topic/post-menu.tpl +3 -29
  45. package/templates/partials/topic/post.tpl +20 -29
  46. package/templates/partials/topic/reply-button.tpl +4 -2
  47. package/templates/partials/topic/sort.tpl +3 -3
  48. package/templates/partials/topic/tools.tpl +1 -5
  49. package/templates/partials/topic/topic-menu-list.tpl +15 -15
  50. package/templates/partials/topic/watch.tpl +6 -6
  51. package/templates/partials/topic-list-bar.tpl +4 -4
  52. package/templates/partials/topics_list.tpl +11 -3
  53. package/templates/post-queue.tpl +4 -0
  54. package/templates/topic.tpl +81 -88
  55. package/templates/users.tpl +1 -1
  56. package/templates/world.tpl +21 -0
@@ -15,44 +15,44 @@
15
15
  <a href="#" class="dropdown-item rounded-1 user-status d-flex align-items-center gap-2 {{{ if user.online }}}selected{{{ end }}}" data-status="online" role="menuitem">
16
16
  <span component="user/status" class="flex-shrink-0 border border-white border-2 rounded-circle status online"></span>
17
17
  <span class="flex-grow-1">[[global:online]]</span>
18
- <i class="fa-solid fa-check text-muted flex-shrink-0" aria-label="[[global:selected]]"></i>
18
+ <i class="fa-solid fa-check text-secondary flex-shrink-0" aria-label="[[global:selected]]"></i>
19
19
  </a>
20
20
  </li>
21
21
  <li>
22
22
  <a href="#" class="dropdown-item rounded-1 user-status d-flex align-items-center gap-2 {{{ if user.away }}}selected{{{ end }}}" data-status="away" role="menuitem">
23
23
  <span component="user/status" class="flex-shrink-0 border border-white border-2 rounded-circle status away"></span>
24
24
  <span class="flex-grow-1">[[global:away]]</span>
25
- <i class="fa-solid fa-check text-muted flex-shrink-0"><span class="visually-hidden"></span>[[global:selected]]</span></i>
25
+ <i class="fa-solid fa-check text-secondary flex-shrink-0"><span class="visually-hidden"></span>[[global:selected]]</span></i>
26
26
  </a>
27
27
  </li>
28
28
  <li>
29
29
  <a href="#" class="dropdown-item rounded-1 user-status d-flex align-items-center gap-2 {{{ if user.dnd }}}selected{{{ end }}}" data-status="dnd" role="menuitem">
30
30
  <span component="user/status" class="flex-shrink-0 border border-white border-2 rounded-circle status dnd"></span>
31
31
  <span class="flex-grow-1">[[global:dnd]]</span>
32
- <i class="fa-solid fa-check text-muted flex-shrink-0"></i>
32
+ <i class="fa-solid fa-check text-secondary flex-shrink-0"></i>
33
33
  </a>
34
34
  </li>
35
35
  <li>
36
36
  <a href="#" class="dropdown-item rounded-1 user-status d-flex align-items-center gap-2 {{{ if user.offline }}}selected{{{ end }}}" data-status="offline" role="menuitem">
37
37
  <span component="user/status" class="flex-shrink-0 border border-white border-2 rounded-circle status offline"></span>
38
38
  <span class="flex-grow-1">[[global:invisible]]</span>
39
- <i class="fa-solid fa-check text-muted flex-shrink-0"></i>
39
+ <i class="fa-solid fa-check text-secondary flex-shrink-0"></i>
40
40
  </a>
41
41
  </li>
42
42
  <li role="presentation" class="dropdown-divider"></li>
43
43
  <li>
44
44
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="{relative_path}/user/{user.userslug}/bookmarks" role="menuitem">
45
- <i class="fa fa-fw fa-bookmark text-muted"></i> <span>[[user:bookmarks]]</span>
45
+ <i class="fa fa-fw fa-bookmark text-secondary"></i> <span>[[user:bookmarks]]</span>
46
46
  </a>
47
47
  </li>
48
48
  <li>
49
49
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="header/profilelink/edit" href="{relative_path}/user/{user.userslug}/edit" role="menuitem">
50
- <i class="fa fa-fw fa-edit text-muted"></i> <span>[[user:edit-profile]]</span>
50
+ <i class="fa fa-fw fa-edit text-secondary"></i> <span>[[user:edit-profile]]</span>
51
51
  </a>
52
52
  </li>
53
53
  <li>
54
54
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="header/profilelink/settings" href="{relative_path}/user/{user.userslug}/settings" role="menuitem">
55
- <i class="fa fa-fw fa-gear text-muted"></i> <span>[[user:settings]]</span>
55
+ <i class="fa fa-fw fa-gear text-secondary"></i> <span>[[user:settings]]</span>
56
56
  </a>
57
57
  </li>
58
58
  {{{ if showModMenu }}}
@@ -60,31 +60,31 @@
60
60
  <li><h6 class="dropdown-header text-xs">[[pages:moderator-tools]]</h6></li>
61
61
  <li>
62
62
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="{relative_path}/flags" role="menuitem">
63
- <i class="fa fa-fw fa-flag text-muted"></i> <span>[[pages:flagged-content]]</span>
63
+ <i class="fa fa-fw fa-flag text-secondary"></i> <span>[[pages:flagged-content]]</span>
64
64
  </a>
65
65
  </li>
66
66
  <li>
67
67
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="{relative_path}/post-queue" role="menuitem">
68
- <i class="fa fa-fw fa-list-alt text-muted"></i> <span>[[pages:post-queue]]</span>
68
+ <i class="fa fa-fw fa-list-alt text-secondary"></i> <span>[[pages:post-queue]]</span>
69
69
  </a>
70
70
  </li>
71
71
  {{{ if registrationQueueEnabled }}}
72
72
  <li>
73
73
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="{relative_path}/registration-queue" role="menuitem">
74
- <i class="fa fa-fw fa-list-alt text-muted"></i> <span>[[pages:registration-queue]]</span>
74
+ <i class="fa fa-fw fa-list-alt text-secondary"></i> <span>[[pages:registration-queue]]</span>
75
75
  </a>
76
76
  </li>
77
77
  {{{ end }}}
78
78
  <li>
79
79
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="{relative_path}/ip-blacklist" role="menuitem">
80
- <i class="fa fa-fw fa-ban text-muted"></i> <span>[[pages:ip-blacklist]]</span>
80
+ <i class="fa fa-fw fa-ban text-secondary"></i> <span>[[pages:ip-blacklist]]</span>
81
81
  </a>
82
82
  </li>
83
83
  {{{ else }}}
84
84
  {{{ if postQueueEnabled }}}
85
85
  <li>
86
86
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="{relative_path}/post-queue" role="menuitem">
87
- <i class="fa fa-fw fa-list-alt text-muted"></i> <span>[[pages:post-queue]]</span>
87
+ <i class="fa fa-fw fa-list-alt text-secondary"></i> <span>[[pages:post-queue]]</span>
88
88
  </a>
89
89
  </li>
90
90
  {{{ end }}}
@@ -96,7 +96,7 @@
96
96
  <input type="hidden" name="_csrf" value="{config.csrf_token}">
97
97
  <input type="hidden" name="noscript" value="true">
98
98
  <button type="submit" class="dropdown-item rounded-1 d-flex align-items-center gap-2">
99
- <i class="fa fa-fw fa-sign-out text-muted"></i><span>[[global:logout]]</span>
99
+ <i class="fa fa-fw fa-sign-out text-secondary"></i><span>[[global:logout]]</span>
100
100
  </button>
101
101
  </form>
102
102
  </li>
@@ -3,8 +3,7 @@
3
3
  {{{ each navigation }}}
4
4
  {{{ if displayMenuItem(@root, @index) }}}
5
5
  <li class="nav-item mx-2 {./class}{{{ if ./dropdown }}} dropend{{{ end }}}" title="{./title}">
6
- <a class="nav-link navigation-link d-flex gap-2 justify-content-between align-items-center {{{ if ./dropdown }}}dropdown-toggle{{{ end }}}"
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 }}} {{{ if ./text }}}aria-label="{./text}"{{{ end }}}>
6
+ <a class="nav-link navigation-link d-flex gap-2 justify-content-between align-items-center {{{ if ./dropdown }}}dropdown-toggle{{{ end }}}" {{{ if ./dropdown }}} href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" {{{ else }}} href="{./route}"{{{ end }}} {{{ if ./id }}}id="{./id}"{{{ end }}}{{{ if ./targetBlank }}} target="_blank"{{{ end }}} {{{ if ./text }}}aria-label="{./text}"{{{ end }}}>
8
7
  <span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
9
8
  <span class="position-relative">
10
9
  {{{ if ./iconClass }}}
@@ -12,9 +11,7 @@
12
11
  <span component="navigation/count" class="visible-closed position-absolute top-0 start-100 translate-middle badge rounded-1 bg-primary {{{ if !./content }}}hidden{{{ end }}}">{./content}</span>
13
12
  {{{ end }}}
14
13
  </span>
15
- {{{ if ./text }}}
16
- <span class="nav-text small visible-open fw-semibold text-truncate">{./text}</span>
17
- {{{ end }}}
14
+ {{{ if ./text }}}<span class="nav-text small visible-open fw-semibold text-truncate">{./text}</span>{{{ end }}}
18
15
  </span>
19
16
  <span component="navigation/count" class="visible-open badge rounded-1 bg-primary {{{ if !./content }}}hidden{{{ end }}}">{./content}</span>
20
17
  </a>
@@ -9,26 +9,30 @@
9
9
  <span class="visible-md-inline visible-lg-inline fw-semibold">[[tags:all-tags]]</span>
10
10
  {{{ end }}}
11
11
  </button>
12
+
12
13
  <div component="tag/filter/search" class="hidden position-absolute top-0">
13
14
  <input type="text" class="form-control form-control-sm" placeholder="[[search:type-to-search]]" autocomplete="off">
14
15
  </div>
15
- <ul component="tag/filter/list" class="dropdown-menu p-1 text-sm overflow-auto" role="menu" style="max-height: 500px;" role="menu">
16
- <li role="presentation" data-tag="">
17
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" href="#">
18
- <span class="flex-grow-1">[[tags:all-tags]]</span>
19
- <i component="tag/select/icon" class="flex-shrink-0 fa fa-fw fa-check {{{if selectedTag }}}invisible{{{ end }}}"></i>
20
- </a>
21
- </li>
22
- {{{ each tagItems }}}
23
- <li role="presentation" data-tag="{./valueEscaped}">
24
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" href="#">
25
- <span component="tag-markup" class="flex-grow-1">
26
- <div class="d-inline-flex align-items-center gap-1">
27
- {./valueEscaped}
28
- </div>
29
- </span>
30
- <i component="tag/select/icon" class="flex-shrink-0 fa fa-fw fa-check {{{ if !./selected }}}invisible{{{ end }}}"></i>
31
- </a>
32
- </li>
33
- {{{ end }}}
34
- </ul>
16
+
17
+ <div class="dropdown-menu p-1">
18
+ <ul component="tag/filter/list" class="list-unstyled mb-0 text-sm overflow-auto ghost-scrollbar" role="menu" style="max-height: 500px;" role="menu">
19
+ <li role="presentation" data-tag="">
20
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" href="#">
21
+ <span class="flex-grow-1">[[tags:all-tags]]</span>
22
+ <i component="tag/select/icon" class="flex-shrink-0 fa fa-fw fa-check {{{if selectedTag }}}invisible{{{ end }}}"></i>
23
+ </a>
24
+ </li>
25
+ {{{ each tagItems }}}
26
+ <li role="presentation" data-tag="{./valueEscaped}">
27
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" href="#">
28
+ <span component="tag-markup" class="flex-grow-1">
29
+ <div class="d-inline-flex align-items-center gap-1">
30
+ {./valueEscaped}
31
+ </div>
32
+ </span>
33
+ <i component="tag/select/icon" class="flex-shrink-0 fa fa-fw fa-check {{{ if !./selected }}}invisible{{{ end }}}"></i>
34
+ </a>
35
+ </li>
36
+ {{{ end }}}
37
+ </ul>
38
+ </div>
@@ -5,7 +5,7 @@
5
5
  <span class="timeline-text small d-flex align-items-center gap-1 flex-wrap">
6
6
  {./text}
7
7
  </span>
8
- {{{ if privileges.isAdminOrMod }}}
8
+ {{{ if (privileges.isAdminOrMod && ./id) }}}
9
9
  <span component="topic/event/delete" data-topic-event-id="{./id}" data-topic-event-type="{./type}" class="timeline-text pointer" title="[[topic:delete-event]]"><i class="fa fa-trash"></i></span>
10
10
  {{{ end }}}
11
11
  </li>
@@ -2,7 +2,7 @@
2
2
  <div class="d-flex justify-content-end sticky-top mt-4" style="top:6rem;z-index:1;">
3
3
  <div class="ps-1 ps-md-0 d-inline-block">
4
4
  <div class="scroller-content d-flex gap-2 flex-column align-items-start">
5
- <div class="pointer pagetop btn-ghost-sm ff-secondary d-inline-flex" style="padding: 4px;"><i class="fa fa-chevron-up"></i> <span class="timeago text-xs text-muted text-nowrap" title="{./timestampISO}"></span></div>
5
+ <button class="pagetop btn-ghost-sm ff-secondary d-inline-flex border-0" style="padding: 4px;"><i class="fa fa-chevron-up"></i> <span class="timeago text-xs text-muted text-nowrap" title="{./timestampISO}"></span></button>
6
6
  <div class="scroller-container position-relative">
7
7
  <div class="scroller-thumb d-flex gap-2 text-nowrap position-relative" style="height: 40px;">
8
8
  <div class="scroller-thumb-icon bg-primary rounded d-inline-block" style="width:9px; height: 40px;"></div>
@@ -18,7 +18,7 @@
18
18
  </div>
19
19
  </div>
20
20
  </div>
21
- <div class="pointer pagebottom btn-ghost-sm ff-secondary d-inline-flex" style="padding: 4px;"><i class="fa fa-chevron-down"></i> <span class="timeago text-xs text-muted text-nowrap" title="{./lastposttimeISO}"></span></div>
21
+ <button class="pagebottom btn-ghost-sm ff-secondary d-inline-flex border-0" style="padding: 4px;"><i class="fa fa-chevron-down"></i> <span class="timeago text-xs text-muted text-nowrap" title="{./lastposttimeISO}"></span></button>
22
22
  </div>
23
23
  </div>
24
24
  </div>
@@ -1,23 +1,23 @@
1
1
  {{{ if posts.display_moderator_tools }}}
2
2
  <li>
3
3
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/edit" role="menuitem" href="#">
4
- <span class="menu-icon"><i class="fa fa-fw text-muted fa-pencil"></i></span> [[topic:edit]]
4
+ <span class="menu-icon"><i class="fa fa-fw text-secondary fa-pencil"></i></span> [[topic:edit]]
5
5
  </a>
6
6
  </li>
7
7
  <li {{{ if posts.deleted }}}hidden{{{ end }}}>
8
8
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/delete" role="menuitem" href="#" class="{{{ if posts.deleted }}}hidden{{{ end }}}">
9
- <span class="menu-icon"><i class="fa fa-fw text-muted fa-trash-o"></i></span> [[topic:delete]]
9
+ <span class="menu-icon"><i class="fa fa-fw text-secondary fa-trash-o"></i></span> [[topic:delete]]
10
10
  </a>
11
11
  </li>
12
12
  <li {{{ if !posts.deleted }}}hidden{{{ end }}}>
13
13
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/restore" role="menuitem" href="#" class="{{{ if !posts.deleted }}}hidden{{{ end }}}">
14
- <span class="menu-icon"><i class="fa fa-fw text-muted fa-history"></i></span> [[topic:restore]]
14
+ <span class="menu-icon"><i class="fa fa-fw text-secondary fa-history"></i></span> [[topic:restore]]
15
15
  </a>
16
16
  </li>
17
17
  {{{ if posts.display_purge_tools }}}
18
18
  <li {{{ if !posts.deleted }}}hidden{{{ end }}}>
19
19
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/purge" role="menuitem" href="#" class="{{{ if !posts.deleted }}}hidden{{{ end }}}">
20
- <span class="menu-icon"><i class="fa fa-fw text-muted fa-eraser"></i></span> [[topic:purge]]
20
+ <span class="menu-icon"><i class="fa fa-fw text-secondary fa-eraser"></i></span> [[topic:purge]]
21
21
  </a>
22
22
  </li>
23
23
  {{{ end }}}
@@ -25,7 +25,7 @@
25
25
  {{{ if posts.display_move_tools }}}
26
26
  <li>
27
27
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/move" role="menuitem" href="#">
28
- <span class="menu-icon"><i class="fa fa-fw text-muted fa-arrows"></i></span> [[topic:move]]
28
+ <span class="menu-icon"><i class="fa fa-fw text-secondary fa-arrows"></i></span> [[topic:move]]
29
29
  </a>
30
30
  </li>
31
31
  {{{ end }}}
@@ -33,7 +33,7 @@
33
33
  {{{ if posts.display_change_owner_tools }}}
34
34
  <li>
35
35
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/change-owner" role="menuitem" href="#">
36
- <span class="menu-icon"><i class="fa fa-fw text-muted fa-user"></i></span> [[topic:change-owner]]
36
+ <span class="menu-icon"><i class="fa fa-fw text-secondary fa-user"></i></span> [[topic:change-owner]]
37
37
  </a>
38
38
  </li>
39
39
  {{{ end }}}
@@ -41,13 +41,13 @@
41
41
  {{{ if posts.ip }}}
42
42
  <li>
43
43
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/copy-ip" role="menuitem" href="#" data-clipboard-text="{posts.ip}">
44
- <span class="menu-icon" ><i class="fa fa-fw text-muted fa-copy"></i></span> [[topic:copy-ip]] {posts.ip}
44
+ <span class="menu-icon" ><i class="fa fa-fw text-secondary fa-copy"></i></span> [[topic:copy-ip]] {posts.ip}
45
45
  </a>
46
46
  </li>
47
47
  {{{ if posts.display_ip_ban }}}
48
48
  <li>
49
49
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/ban-ip" role="menuitem" href="#" data-ip="{posts.ip}">
50
- <span class="menu-icon"><i class="fa fa-fw text-muted fa-ban"></i></span> [[topic:ban-ip]] {posts.ip}
50
+ <span class="menu-icon"><i class="fa fa-fw text-secondary fa-ban"></i></span> [[topic:ban-ip]] {posts.ip}
51
51
  </a>
52
52
  </li>
53
53
  {{{ end }}}
@@ -57,7 +57,7 @@
57
57
  {{{ each posts.tools }}}
58
58
  <li {{{ if ./disabled }}}class="disabled" {{{ end }}}>
59
59
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" {{{ if ./action}}}component="{./action}"{{{ end }}} role="menuitem" href="{{{ if ./href }}}{./href}{{{ else }}}#{{{ end }}}">
60
- <span class="menu-icon"><i class="fa fa-fw text-muted {./icon}"></i></span> {{./html}}
60
+ <span class="menu-icon"><i class="fa fa-fw text-secondary {./icon}"></i></span> {{./html}}
61
61
  </a>
62
62
  </li>
63
63
  {{{ end }}}
@@ -66,7 +66,7 @@
66
66
  {{{ if posts.display_history}}}
67
67
  <li>
68
68
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/view-history" role="menuitem" href="#">
69
- <span class="menu-icon"><i class="fa fa-fw text-muted fa-history"></i></span> [[topic:view-history]]
69
+ <span class="menu-icon"><i class="fa fa-fw text-secondary fa-history"></i></span> [[topic:view-history]]
70
70
  </a>
71
71
  </li>
72
72
  {{{ end }}}
@@ -75,8 +75,8 @@
75
75
  <li>
76
76
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/bookmark" role="menuitem" href="#" data-bookmarked="{posts.bookmarked}">
77
77
  <span class="menu-icon">
78
- <i component="post/bookmark/on" class="fa fa-fw text-muted fa-bookmark {{{ if !posts.bookmarked }}}hidden{{{ end }}}"></i>
79
- <i component="post/bookmark/off" class="fa fa-fw text-muted fa-bookmark-o {{{ if posts.bookmarked }}}hidden{{{ end }}}"></i>
78
+ <i component="post/bookmark/on" class="fa fa-fw text-secondary fa-bookmark {{{ if !posts.bookmarked }}}hidden{{{ end }}}"></i>
79
+ <i component="post/bookmark/off" class="fa fa-fw text-secondary fa-bookmark-o {{{ if posts.bookmarked }}}hidden{{{ end }}}"></i>
80
80
  </span>
81
81
  <span class="bookmark-text">[[topic:bookmark]]</span>
82
82
  <span component="post/bookmark-count" class="bookmarkCount badge bg-secondary" data-bookmarks="{posts.bookmarks}">{posts.bookmarks}</span>&nbsp;
@@ -86,17 +86,25 @@
86
86
 
87
87
  <li>
88
88
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" href="#" data-clipboard-text="{posts.absolute_url}">
89
- <i class="fa fa-fw text-muted fa-link"></i> [[topic:copy-permalink]]
89
+ <i class="fa fa-fw text-secondary fa-link"></i> [[topic:copy-permalink]]
90
90
  </a>
91
91
  </li>
92
92
 
93
+ {{{ if posts.display_original_url }}}
94
+ <li>
95
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" href="{{{ if posts.url }}}{posts.url}{{{ else }}}{posts.pid}{{{ end }}}">
96
+ <i class="fa fa-fw text-secondary fa-external-link"></i> [[topic:go-to-original]]
97
+ </a>
98
+ </li>
99
+ {{{ end }}}
100
+
93
101
  {{{ if postSharing.length }}}
94
102
  {{{ if config.loggedIn }}}<li class="dropdown-divider"></li>{{{ end }}}
95
103
  <li class="dropdown-header">[[topic:share-this-post]]</li>
96
104
  {{{ end }}}
97
105
  <li class="d-flex gap-2 px-3">
98
106
  {{{ each postSharing }}}
99
- <a class="dropdown-item rounded-1 d-flex align-items-center px-1 py-2 w-auto" role="menuitem" component="share/{./id}" href="#" title="{./name}"><i class="fa-fw text-muted {./class}"></i></a>
107
+ <a class="dropdown-item rounded-1 d-flex align-items-center px-1 py-2 w-auto" role="menuitem" component="share/{./id}" href="#" title="{./name}"><i class="fa-fw text-secondary {./class}"></i></a>
100
108
  {{{ end }}}
101
109
  </li>
102
110
  {{{ end }}}
@@ -105,15 +113,15 @@
105
113
  <li class="dropdown-divider"></li>
106
114
 
107
115
  <li {{{ if posts.flags.flagged }}}hidden{{{ end }}}>
108
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/flag" role="menuitem" href="#"><i class="fa fa-fw text-muted fa-flag"></i> [[topic:flag-post]]</a>
116
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/flag" role="menuitem" href="#"><i class="fa fa-fw text-secondary fa-flag"></i> [[topic:flag-post]]</a>
109
117
  </li>
110
- <li {{{ if !posts.flags.flagged }}}hidden{{{ end }}} class="disabled text-muted">
111
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/already-flagged" role="menuitem" href="#"><i class="fa fa-fw text-muted fa-flag"></i> [[topic:already-flagged]]</a>
118
+ <li {{{ if !posts.flags.flagged }}}hidden{{{ end }}} class="disabled text-secondary">
119
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/already-flagged" role="menuitem" href="#" data-flag-id="{posts.flagId}"><i class="fa fa-fw text-secondary fa-flag"></i> [[topic:already-flagged]]</a>
112
120
  </li>
113
121
 
114
122
  {{{ if (!posts.selfPost && posts.uid) }}}
115
123
  <li>
116
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/flagUser" role="menuitem" href="#"><i class="fa fa-fw text-muted fa-flag"></i> [[topic:flag-user]]</a>
124
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/flagUser" role="menuitem" href="#"><i class="fa fa-fw text-secondary fa-flag"></i> [[topic:flag-user]]</a>
117
125
  </li>
118
126
  {{{ end }}}
119
127
  {{{ end }}}
@@ -121,11 +129,11 @@
121
129
  {{{ if posts.display_moderator_tools }}}
122
130
  {{{ if posts.flags.exists }}}
123
131
  <li>
124
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" href="{config.relative_path}/flags/{posts.flags.flagId}"><i class="fa fa-fw text-muted fa-exclamation-circle"></i> [[topic:view-flag-report]]</a>
132
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" href="{config.relative_path}/flags/{posts.flags.flagId}"><i class="fa fa-fw text-secondary fa-exclamation-circle"></i> [[topic:view-flag-report]]</a>
125
133
  </li>
126
134
  {{{ if (posts.flags.state == "open") }}}
127
135
  <li>
128
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/flagResolve" data-flagId="{posts.flags.flagId}" role="menuitem" href="#"><i class="fa fa-fw text-muted fa-check"></i> [[topic:resolve-flag]]</a>
136
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/flagResolve" data-flagId="{posts.flags.flagId}" role="menuitem" href="#"><i class="fa fa-fw text-secondary fa-check"></i> [[topic:resolve-flag]]</a>
129
137
  </li>
130
138
  {{{ end }}}
131
139
  {{{ end }}}
@@ -1,30 +1,4 @@
1
- <span component="post/tools" class="dropdown moderator-tools bottom-sheet d-inline-block {{{ if !./display_post_menu }}}hidden{{{ end }}}">
2
- <a class="btn-ghost-sm ff-secondary dropdown-toggle d-block" href="#" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-label="[[topic:post-tools]]"><i class="fa fa-fw fa-ellipsis-v text-primary"></i></a>
3
- <ul class="dropdown-menu dropdown-menu-end p-1 text-sm" role="menu">
4
- <li class="dropdown-item placeholder-wave">
5
- <div class="placeholder" style="width: 20px;"></div>
6
- <div class="placeholder col-3"></div>
7
- </li>
8
- <li class="dropdown-item placeholder-wave">
9
- <div class="placeholder" style="width: 20px;"></div>
10
- <div class="placeholder col-5"></div>
11
- </li>
12
- <li class="dropdown-item placeholder-wave">
13
- <div class="placeholder" style="width: 20px;"></div>
14
- <div class="placeholder col-9"></div>
15
- </li>
16
- <li class="dropdown-item placeholder-wave">
17
- <div class="placeholder" style="width: 20px;"></div>
18
- <div class="placeholder col-7"></div>
19
- </li>
20
- <li class="dropdown-item placeholder-wave">
21
- <div class="placeholder" style="width: 20px;"></div>
22
- <div class="placeholder col-10"></div>
23
- </li>
24
- <li class="dropdown-divider"></li>
25
- <li class="dropdown-item placeholder-wave">
26
- <div class="placeholder" style="width: 20px;"></div>
27
- <div class="placeholder col-10"></div>
28
- </li>
29
- </ul>
1
+ <span component="post/tools" class="dropdown bottom-sheet {{{ if !./display_post_menu }}}hidden{{{ end }}}">
2
+ <a class="btn-ghost-sm ff-secondary dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-label="[[topic:post-tools]]"><i class="fa fa-fw fa-ellipsis-v text-primary"></i></a>
3
+ <ul class="dropdown-menu dropdown-menu-end p-1 text-sm" role="menu"></ul>
30
4
  </span>
@@ -5,30 +5,26 @@
5
5
  {{{ end }}}
6
6
  </div>
7
7
  {{{ end }}}
8
-
9
8
  <div class="d-flex align-items-start gap-3">
10
- <div class="icon bg-body d-none d-sm-block rounded-circle" style="outline: 2px solid var(--bs-body-bg);">
11
- <a class="d-inline-block position-relative text-decoration-none" href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}">
9
+ <div class="bg-body d-none d-sm-block rounded-circle" style="outline: 2px solid var(--bs-body-bg);">
10
+ <a class="d-inline-block position-relative text-decoration-none" href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}" aria-label="[[aria:user-avatar-for, {./user.username}]]">
12
11
  {buildAvatar(posts.user, "48px", true, "", "user/picture")}
13
12
  <span component="user/status" class="position-absolute translate-middle-y border border-white border-2 rounded-circle status {posts.user.status}"><span class="visually-hidden">[[global:{posts.user.status}]]</span></span>
14
13
  </a>
15
14
  </div>
16
-
17
- <div class="post-container d-flex flex-grow-1 flex-column w-100" style="min-width: 0;">
15
+ <div class="post-container d-flex flex-grow-1 flex-column w-100" style="min-width:0;">
18
16
  <div class="d-flex align-items-center gap-1 flex-wrap w-100 post-header mt-1" itemprop="author" itemscope itemtype="https://schema.org/Person">
19
17
  <meta itemprop="name" content="{./user.username}">
20
18
  {{{ if ./user.userslug }}}<meta itemprop="url" content="{config.relative_path}/user/{./user.userslug}">{{{ end }}}
21
19
 
22
- <div class="icon bg-body d-sm-none">
20
+ <div class="bg-body d-sm-none">
23
21
  <a class="d-inline-block position-relative text-decoration-none" href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}">
24
22
  {buildAvatar(posts.user, "20px", true, "", "user/picture")}
25
23
  <span component="user/status" class="position-absolute translate-middle-y border border-white border-2 rounded-circle status {posts.user.status}"><span class="visually-hidden">[[global:{posts.user.status}]]</span></span>
26
24
  </a>
27
25
  </div>
28
26
 
29
- <span class="text-nowrap">
30
- <a class="fw-bold" href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}" data-username="{posts.user.username}" data-uid="{posts.user.uid}">{posts.user.displayname}</a>
31
- </span>
27
+ <a class="fw-bold text-nowrap" href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}" data-username="{posts.user.username}" data-uid="{posts.user.uid}">{posts.user.displayname}</a>
32
28
 
33
29
  {{{ each posts.user.selectedGroups }}}
34
30
  {{{ if posts.user.selectedGroups.slug }}}
@@ -41,31 +37,25 @@
41
37
  {{{ end }}}
42
38
 
43
39
  <div class="d-flex gap-1 align-items-center">
44
- <span class="text-muted">
45
- {{{ if posts.toPid }}}
46
- {generateRepliedTo(@value, config.timeagoCutoff)}
47
- {{{ else }}}
48
- {generateWrote(@value, config.timeagoCutoff)}
49
- {{{ end }}}
50
- </span>
40
+ <span class="text-muted">{generateWroteReplied(@value, config.timeagoCutoff)}</span>
51
41
 
52
42
  <i component="post/edit-indicator" class="fa fa-edit text-muted{{{ if privileges.posts:history }}} pointer{{{ end }}} edit-icon {{{ if !posts.editor.username }}}hidden{{{ end }}}" title="[[global:edited-timestamp, {isoTimeToLocaleString(./editedISO, config.userLang)}]]"></i>
53
43
  <span data-editor="{posts.editor.userslug}" component="post/editor" class="visually-hidden">[[global:last-edited-by, {posts.editor.username}]] <span class="timeago" title="{isoTimeToLocaleString(posts.editedISO, config.userLang)}"></span></span>
54
44
  </div>
55
45
 
46
+ {{{ if posts.user.custom_profile_info.length }}}
56
47
  <div>
57
48
  <span>
58
- {{{ if posts.user.custom_profile_info.length }}}
59
49
  &#124;
60
50
  {{{ each posts.user.custom_profile_info }}}
61
51
  {posts.user.custom_profile_info.content}
62
52
  {{{ end }}}
63
- {{{ end }}}
64
53
  </span>
65
54
  </div>
55
+ {{{ end }}}
66
56
  <div class="d-flex align-items-center gap-1 flex-grow-1 justify-content-end">
67
57
  <span class="bookmarked opacity-0 text-primary"><i class="fa fa-bookmark-o"></i></span>
68
- <a href="{generatePostUrl(@value)}" class="post-index text-muted d-none d-md-inline">#{increment(./index, "1")}</a>
58
+ <a href="{config.relative_path}/post/{encodeURIComponent(./pid)}" class="post-index text-muted d-none d-md-inline">#{increment(./index, "1")}</a>
69
59
  </div>
70
60
  </div>
71
61
 
@@ -82,8 +72,8 @@
82
72
 
83
73
  <div class="d-flex">
84
74
  {{{ if !hideReplies }}}
85
- <a component="post/reply-count" data-target-component="post/replies/container" href="#" class="d-flex gap-2 align-items-center mt-2 btn-ghost ff-secondary border rounded-1 p-1 threaded-replies user-select-none text-muted text-decoration-none text-xs {{{ if (!./replies || shouldHideReplyContainer(@value)) }}}hidden{{{ end }}}">
86
- <span component="post/reply-count/avatars" class="avatars d-inline-flex gap-1 align-items-top {{{ if posts.replies.hasMore }}}hasMore{{{ end }}}">
75
+ <a component="post/reply-count" data-target-component="post/replies/container" href="#" class="d-flex gap-2 align-items-center mt-2 btn-ghost ff-secondary border rounded-1 p-1 text-muted text-decoration-none text-xs {{{ if (!./replies || shouldHideReplyContainer(@value)) }}}hidden{{{ end }}}">
76
+ <span component="post/reply-count/avatars" class="d-flex gap-1 {{{ if posts.replies.hasMore }}}hasMore{{{ end }}}">
87
77
  {{{each posts.replies.users}}}
88
78
  <span>{buildAvatar(posts.replies.users, "20px", true, "avatar-tooltip")}</span>
89
79
  {{{end}}}
@@ -96,8 +86,6 @@
96
86
  <span class="ms-2 replies-last hidden-xs fw-semibold">[[topic:last-reply-time]] <span class="timeago" title="{posts.replies.timestampISO}"></span></span>
97
87
 
98
88
  <i class="fa fa-fw fa-chevron-down" component="post/replies/open"></i>
99
- <i class="fa fa-fw fa-chevron-up hidden" component="post/replies/close"></i>
100
- <i class="fa fa-fw fa-spin fa-spinner hidden" component="post/replies/loading"></i>
101
89
  </a>
102
90
  {{{ end }}}
103
91
  </div>
@@ -106,21 +94,25 @@
106
94
 
107
95
  <div component="post/actions" class="d-flex justify-content-end gap-1 post-tools">
108
96
  <!-- IMPORT partials/topic/reactions.tpl -->
109
- <a component="post/reply" href="#" class="btn-ghost-sm user-select-none {{{ if !privileges.topics:reply }}}hidden{{{ end }}}" title="[[topic:reply]]"><i class="fa fa-fw fa-reply text-primary"></i></a>
110
- <a component="post/quote" href="#" class="btn-ghost-sm user-select-none {{{ if !privileges.topics:reply }}}hidden{{{ end }}}" title="[[topic:quote]]"><i class="fa fa-fw fa-quote-right text-primary"></i></a>
97
+ <a component="post/reply" href="#" class="btn-ghost-sm {{{ if !privileges.topics:reply }}}hidden{{{ end }}}" title="[[topic:reply]]"><i class="fa fa-fw fa-reply text-primary"></i></a>
98
+ <a component="post/quote" href="#" class="btn-ghost-sm {{{ if !privileges.topics:reply }}}hidden{{{ end }}}" title="[[topic:quote]]"><i class="fa fa-fw fa-quote-right text-primary"></i></a>
99
+
100
+ {{{ if ./announces }}}
101
+ <a component="post/announce-count" href="#" class="btn-ghost-sm" title="[[activitypub:announcers]]"><i class="fa fa-share-alt text-primary"></i> {./announces}</a>
102
+ {{{ end }}}
111
103
 
112
104
  {{{ if !reputation:disabled }}}
113
105
  <div class="d-flex votes align-items-center">
114
- <a component="post/upvote" href="#" class="btn-ghost-sm {{{ if posts.upvoted }}}upvoted{{{ end }}}" title="[[topic:upvote-post]]">
106
+ <a component="post/upvote" href="#" class="btn-ghost-sm{{{ if posts.upvoted }}} upvoted{{{ end }}}" title="[[topic:upvote-post]]">
115
107
  <i class="fa fa-fw fa-chevron-up text-primary"></i>
116
108
  </a>
117
109
 
118
110
  <meta itemprop="upvoteCount" content="{posts.upvotes}">
119
111
  <meta itemprop="downvoteCount" content="{posts.downvotes}">
120
- <a href="#" class="d-inline-block px-2 mx-1 btn-ghost-sm ff-secondary" component="post/vote-count" data-votes="{posts.votes}" title="[[global:voters]]">{posts.votes}</a>
112
+ <a href="#" class="px-2 mx-1 btn-ghost-sm" component="post/vote-count" data-votes="{posts.votes}" title="[[global:voters]]">{posts.votes}</a>
121
113
 
122
114
  {{{ if !downvote:disabled }}}
123
- <a component="post/downvote" href="#" class="btn-ghost-sm {{{ if posts.downvoted }}}downvoted{{{ end }}}" title="[[topic:downvote-post]]">
115
+ <a component="post/downvote" href="#" class="btn-ghost-sm{{{ if posts.downvoted }}} downvoted{{{ end }}}" title="[[topic:downvote-post]]">
124
116
  <i class="fa fa-fw fa-chevron-down text-primary"></i>
125
117
  </a>
126
118
  {{{ end }}}
@@ -130,7 +122,6 @@
130
122
  <!-- IMPORT partials/topic/post-menu.tpl -->
131
123
  </div>
132
124
  </div>
133
-
134
125
  {{{ if (!./index && widgets.mainpost-footer.length) }}}
135
126
  <div data-widget-area="mainpost-footer">
136
127
  {{{ each widgets.mainpost-footer }}}
@@ -1,5 +1,6 @@
1
- <div component="topic/reply/container" class="btn-group action-bar {{{ if !privileges.topics:reply }}}hidden{{{ end }}}">
2
- <a href="{config.relative_path}/compose?tid={tid}" class="d-flex align-items-center btn btn-sm btn-primary px-3 fw-semibold " component="topic/reply" data-ajaxify="false" role="button"><i class="fa fa-reply d-sm-block d-md-none"></i><span class="d-none d-md-block"> [[topic:reply]]</span></a>
1
+ {{{ if privileges.topics:reply }}}
2
+ <div component="topic/reply/container" class="btn-group">
3
+ <a href="{config.relative_path}/compose?tid={tid}" class="d-flex align-items-center btn btn-sm btn-primary px-3 fw-semibold" component="topic/reply" data-ajaxify="false" role="button"><i class="fa fa-reply d-sm-block d-md-none"></i><span class="d-none d-md-block"> [[topic:reply]]</span></a>
3
4
  <button type="button" class="btn btn-sm btn-primary dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-label="[[topic:reply-options]]">
4
5
  <span class="caret"></span>
5
6
  </button>
@@ -7,6 +8,7 @@
7
8
  <li><a class="dropdown-item rounded-1" href="#" component="topic/reply-as-topic" role="menuitem">[[topic:reply-as-topic]]</a></li>
8
9
  </ul>
9
10
  </div>
11
+ {{{ end }}}
10
12
 
11
13
  {{{ if loggedIn }}}
12
14
  {{{ if !privileges.topics:reply }}}
@@ -8,19 +8,19 @@
8
8
  <li>
9
9
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" class="oldest_to_newest" data-sort="oldest_to_newest" role="menuitem">
10
10
  <span class="flex-grow-1">[[topic:oldest-to-newest]]</span>
11
- <i class="flex-shrink-0 fa fa-fw"></i>
11
+ <i class="flex-shrink-0 fa fa-fw text-secondary"></i>
12
12
  </a>
13
13
  </li>
14
14
  <li>
15
15
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" class="newest_to_oldest" data-sort="newest_to_oldest" role="menuitem">
16
16
  <span class="flex-grow-1">[[topic:newest-to-oldest]]</span>
17
- <i class="flex-shrink-0 fa fa-fw"></i>
17
+ <i class="flex-shrink-0 fa fa-fw text-secondary"></i>
18
18
  </a>
19
19
  </li>
20
20
  <li>
21
21
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" class="most_votes" data-sort="most_votes" role="menuitem">
22
22
  <span class="flex-grow-1">[[topic:most-votes]]</span>
23
- <i class="flex-shrink-0 fa fa-fw"></i>
23
+ <i class="flex-shrink-0 fa fa-fw text-secondary"></i>
24
24
  </a>
25
25
  </li>
26
26
  </ul>
@@ -4,10 +4,6 @@
4
4
  <i class="fa fa-fw fa-gear text-primary"></i>
5
5
  <span class="d-none d-md-inline fw-semibold">[[topic:thread-tools.title]]</span>
6
6
  </button>
7
- <ul class="dropdown-menu p-1 text-sm" role="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>
7
+ <ul class="dropdown-menu p-1 text-sm" role="menu"></ul>
12
8
  </div>
13
9
  {{{ end }}}