nodebb-theme-harmony 1.0.0-beta.11 → 1.0.0-beta.110

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 (151) hide show
  1. package/README.md +12 -1
  2. package/languages/en-GB/harmony.json +6 -1
  3. package/library.js +27 -25
  4. package/package.json +1 -1
  5. package/plugin.json +0 -1
  6. package/public/harmony.js +133 -9
  7. package/public/settings.js +1 -0
  8. package/screenshots/categories.png +0 -0
  9. package/screenshots/recent.png +0 -0
  10. package/screenshots/topic.png +0 -0
  11. package/scss/account.scss +1 -1
  12. package/scss/chats.scss +53 -25
  13. package/scss/common.scss +84 -10
  14. package/scss/flags.scss +5 -0
  15. package/scss/groups.scss +2 -2
  16. package/scss/harmony.scss +3 -0
  17. package/scss/mixins.scss +7 -3
  18. package/scss/modals.scss +5 -3
  19. package/scss/modules/bottom-sheet.scss +1 -1
  20. package/scss/modules/composer.scss +0 -4
  21. package/scss/modules/cover.scss +1 -11
  22. package/scss/modules/filters.scss +8 -0
  23. package/scss/modules/paginator.scss +24 -0
  24. package/scss/modules/topic-navigator.scss +18 -42
  25. package/scss/modules/topics-list.scss +32 -17
  26. package/scss/modules/user-menu.scss +6 -0
  27. package/scss/overrides.scss +4 -1
  28. package/scss/sidebar.scss +39 -11
  29. package/scss/topic.scss +19 -13
  30. package/templates/account/blocks.tpl +35 -40
  31. package/templates/account/categories.tpl +47 -29
  32. package/templates/account/consent.tpl +66 -10
  33. package/templates/account/edit/password.tpl +25 -30
  34. package/templates/account/edit/username.tpl +21 -26
  35. package/templates/account/edit.tpl +105 -116
  36. package/templates/account/followers.tpl +12 -19
  37. package/templates/account/following.tpl +12 -18
  38. package/templates/account/groups.tpl +12 -17
  39. package/templates/account/info.tpl +178 -206
  40. package/templates/account/posts.tpl +31 -36
  41. package/templates/account/profile.tpl +66 -73
  42. package/templates/account/sessions.tpl +8 -30
  43. package/templates/account/settings.tpl +222 -203
  44. package/templates/account/theme.tpl +39 -25
  45. package/templates/account/topics.tpl +36 -38
  46. package/templates/account/uploads.tpl +33 -40
  47. package/templates/admin/plugins/harmony.tpl +21 -3
  48. package/templates/categories.tpl +3 -6
  49. package/templates/category.tpl +13 -14
  50. package/templates/chats.tpl +9 -10
  51. package/templates/flags/detail.tpl +160 -193
  52. package/templates/flags/list.tpl +3 -70
  53. package/templates/footer.tpl +2 -2
  54. package/templates/groups/details.tpl +22 -19
  55. package/templates/groups/list.tpl +1 -1
  56. package/templates/groups/members.tpl +0 -2
  57. package/templates/header.tpl +2 -2
  58. package/templates/login.tpl +4 -4
  59. package/templates/notifications.tpl +5 -5
  60. package/templates/partials/account/admin-menu.tpl +9 -9
  61. package/templates/partials/account/category-item.tpl +14 -17
  62. package/templates/partials/account/footer.tpl +3 -0
  63. package/templates/partials/account/header.tpl +78 -81
  64. package/templates/partials/account/session-list.tpl +18 -0
  65. package/templates/partials/account/sidebar-left.tpl +31 -25
  66. package/templates/partials/breadcrumbs.tpl +6 -6
  67. package/templates/partials/buttons/newTopic.tpl +1 -1
  68. package/templates/partials/categories/item.tpl +31 -27
  69. package/templates/partials/categories/lastpost.tpl +7 -7
  70. package/templates/partials/category/filter-dropdown-content.tpl +37 -0
  71. package/templates/partials/{category-selector-content.tpl → category/selector-dropdown-content.tpl} +7 -7
  72. package/templates/partials/category/sort.tpl +22 -7
  73. package/templates/partials/category/subcategory.tpl +2 -3
  74. package/templates/partials/category/tags.tpl +0 -2
  75. package/templates/partials/category/tools.tpl +28 -25
  76. package/templates/partials/category/watch.tpl +39 -6
  77. package/templates/partials/chats/dropdown.tpl +4 -1
  78. package/templates/partials/chats/message-window.tpl +10 -9
  79. package/templates/partials/chats/message.tpl +4 -6
  80. package/templates/partials/chats/options.tpl +14 -6
  81. package/templates/partials/chats/recent_room.tpl +41 -32
  82. package/templates/partials/cookie-consent.tpl +5 -5
  83. package/templates/partials/flags/bulk-actions.tpl +9 -0
  84. package/templates/partials/flags/filters.tpl +165 -78
  85. package/templates/partials/flags/results.tpl +38 -0
  86. package/templates/partials/groups/admin.tpl +4 -4
  87. package/templates/partials/groups/badge.tpl +1 -1
  88. package/templates/partials/groups/list.tpl +2 -2
  89. package/templates/partials/groups/memberlist.tpl +1 -1
  90. package/templates/partials/groups/sidebar-left.tpl +10 -10
  91. package/templates/partials/header/brand.tpl +9 -2
  92. package/templates/partials/mobile-footer.tpl +13 -13
  93. package/templates/partials/notifications_list.tpl +11 -8
  94. package/templates/partials/paginator.tpl +11 -9
  95. package/templates/partials/post_bar.tpl +26 -25
  96. package/templates/partials/posts_list_item.tpl +5 -5
  97. package/templates/partials/quick-search-results.tpl +3 -3
  98. package/templates/partials/search-filters.tpl +184 -0
  99. package/templates/partials/search-results.tpl +28 -35
  100. package/templates/partials/sidebar/chats.tpl +22 -33
  101. package/templates/partials/sidebar/drafts.tpl +45 -34
  102. package/templates/partials/sidebar/logged-in-menu.tpl +5 -5
  103. package/templates/partials/sidebar/logged-out-menu.tpl +1 -1
  104. package/templates/partials/sidebar/notifications.tpl +28 -7
  105. package/templates/partials/sidebar/search.tpl +1 -1
  106. package/templates/partials/sidebar/user-menu.tpl +38 -29
  107. package/templates/partials/sidebar-left.tpl +11 -11
  108. package/templates/partials/sidebar-right.tpl +1 -3
  109. package/templates/partials/skin-switcher.tpl +3 -3
  110. package/templates/partials/tags/filter-dropdown-content.tpl +34 -0
  111. package/templates/partials/tags_list.tpl +4 -4
  112. package/templates/partials/topic/browsing-users.tpl +0 -2
  113. package/templates/partials/topic/event.tpl +1 -1
  114. package/templates/partials/topic/navigator-mobile.tpl +30 -11
  115. package/templates/partials/topic/navigator.tpl +23 -17
  116. package/templates/partials/topic/post-editor.tpl +0 -2
  117. package/templates/partials/topic/post-menu-list.tpl +60 -62
  118. package/templates/partials/topic/post-menu.tpl +16 -11
  119. package/templates/partials/topic/post.tpl +45 -27
  120. package/templates/partials/topic/quickreply.tpl +5 -5
  121. package/templates/partials/topic/reply-button.tpl +3 -3
  122. package/templates/partials/topic/sort.tpl +17 -5
  123. package/templates/partials/topic/tools.tpl +2 -2
  124. package/templates/partials/topic/topic-menu-list.tpl +22 -24
  125. package/templates/partials/topic/watch.tpl +42 -9
  126. package/templates/partials/topic-filters.tpl +6 -3
  127. package/templates/partials/topic-list-bar.tpl +50 -46
  128. package/templates/partials/topic-terms.tpl +6 -3
  129. package/templates/partials/topics_list.tpl +88 -93
  130. package/templates/partials/userFilter-placeholders.tpl +5 -0
  131. package/templates/partials/users/filter-dropdown-content.tpl +23 -0
  132. package/templates/partials/users/item.tpl +25 -27
  133. package/templates/partials/users_list.tpl +1 -1
  134. package/templates/popular.tpl +3 -1
  135. package/templates/post-queue.tpl +166 -0
  136. package/templates/recent.tpl +3 -2
  137. package/templates/register.tpl +4 -4
  138. package/templates/search.tpl +39 -177
  139. package/templates/tags.tpl +3 -3
  140. package/templates/top.tpl +3 -1
  141. package/templates/topic.tpl +74 -68
  142. package/templates/unread.tpl +3 -1
  143. package/templates/users.tpl +7 -3
  144. package/templates/modules/usercard.tpl +0 -39
  145. package/templates/partials/acceptTos.tpl +0 -11
  146. package/templates/partials/category-filter-content.tpl +0 -30
  147. package/templates/partials/category-filter-right.tpl +0 -5
  148. package/templates/partials/category-filter.tpl +0 -3
  149. package/templates/partials/category-selector-right.tpl +0 -5
  150. package/templates/partials/category-selector.tpl +0 -3
  151. package/templates/partials/slideout-menu.tpl +0 -6
@@ -1,20 +1,26 @@
1
- <div class="d-sm-flex 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="visible-open 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="visible-open 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>
1
+ <div class="pagination-block d-none d-lg-block flex-grow-1 mb-2">
2
+ <div class="d-flex justify-content-end sticky-top mt-4" style="top:6rem;z-index:1;">
3
+ <div class="ps-1 ps-md-0 d-inline-block">
4
+ <div class="scroller-content d-flex gap-2 flex-column align-items-start">
5
+ <div class="pointer pagetop btn-ghost-sm 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>
6
+ <div class="scroller-container position-relative">
7
+ <div class="scroller-thumb d-flex gap-2 text-nowrap position-relative" style="height: 40px;">
8
+ <div class="scroller-thumb-icon bg-primary rounded d-inline-block" style="width:9px; height: 40px;"></div>
9
+ <div>
10
+ <p class="small thumb-text d-none d-md-inline-block ff-secondary fw-semibold user-select-none mb-0"></p>
11
+ <p class="meta thumb-timestamp timeago text-xs text-muted ff-secondary fw-semibold mb-0 user-select-none"></p>
12
+ </div>
13
+ </div>
14
+
15
+ <div class="unread d-inline-block position-absolute bottom-0">
16
+ <div class="meta small position-absolute top-50 translate-middle-y text-nowrap fw-semibold ms-2">
17
+ <a class="text-decoration-none" href="{url}"></a>
18
+ </div>
19
+ </div>
20
+ </div>
21
+ <div class="pointer pagebottom btn-ghost-sm 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>
15
22
  </div>
16
23
  </div>
17
24
  </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>
25
+ </div>
26
+
@@ -1,3 +1 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
1
  <small data-editor="{editor.userslug}" component="post/editor" class="hidden">[[global:last_edited_by, {editor.username}]] <span class="timeago" title="{editedISO}"></span></small>
@@ -1,134 +1,132 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
- <!-- IF posts.display_moderator_tools -->
1
+ {{{ if posts.display_moderator_tools }}}
4
2
  <li>
5
- <a class="dropdown-item" component="post/edit" role="menuitem" tabindex="-1" href="#">
6
- <span class="menu-icon"><i class="fa fa-fw fa-pencil"></i></span> [[topic:edit]]
3
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/edit" role="menuitem" tabindex="-1" href="#">
4
+ <span class="menu-icon"><i class="fa fa-fw text-muted fa-pencil"></i></span> [[topic:edit]]
7
5
  </a>
8
6
  </li>
9
- <li <!-- IF posts.deleted -->hidden<!-- ENDIF posts.deleted -->>
10
- <a class="dropdown-item" component="post/delete" role="menuitem" tabindex="-1" href="#" class="<!-- IF posts.deleted -->hidden<!-- ENDIF posts.deleted -->">
11
- <span class="menu-icon"><i class="fa fa-fw fa-trash-o"></i><span> [[topic:delete]]
7
+ <li {{{ if posts.deleted }}}hidden{{{ end }}}>
8
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/delete" role="menuitem" tabindex="-1" 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]]
12
10
  </a>
13
11
  </li>
14
- <li <!-- IF !posts.deleted -->hidden<!-- ENDIF !posts.deleted -->>
15
- <a class="dropdown-item" component="post/restore" role="menuitem" tabindex="-1" href="#" class="<!-- IF !posts.deleted -->hidden<!-- ENDIF !posts.deleted -->">
16
- <span class="menu-icon"><i class="fa fa-fw fa-history"></i><span> [[topic:restore]]
12
+ <li {{{ if !posts.deleted }}}hidden{{{ end }}}>
13
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/restore" role="menuitem" tabindex="-1" 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]]
17
15
  </a>
18
16
  </li>
19
- <!-- IF posts.display_purge_tools -->
20
- <li <!-- IF !posts.deleted -->hidden<!-- ENDIF !posts.deleted -->>
21
- <a class="dropdown-item" component="post/purge" role="menuitem" tabindex="-1" href="#" class="<!-- IF !posts.deleted -->hidden<!-- ENDIF !posts.deleted -->">
22
- <span class="menu-icon"><i class="fa fa-fw fa-eraser"></i></span> [[topic:purge]]
17
+ {{{ if posts.display_purge_tools }}}
18
+ <li {{{ if !posts.deleted }}}hidden{{{ end }}}>
19
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/purge" role="menuitem" tabindex="-1" 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]]
23
21
  </a>
24
22
  </li>
25
- <!-- END -->
23
+ {{{ end }}}
26
24
 
27
- <!-- IF posts.display_move_tools -->
25
+ {{{ if posts.display_move_tools }}}
28
26
  <li>
29
- <a class="dropdown-item" component="post/move" role="menuitem" tabindex="-1" href="#">
30
- <span class="menu-icon"><i class="fa fa-fw fa-arrows"></i></span> [[topic:move]]
27
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/move" role="menuitem" tabindex="-1" href="#">
28
+ <span class="menu-icon"><i class="fa fa-fw text-muted fa-arrows"></i></span> [[topic:move]]
31
29
  </a>
32
30
  </li>
33
- <!-- ENDIF posts.display_move_tools -->
31
+ {{{ end }}}
34
32
 
35
- <!-- IF posts.display_change_owner_tools -->
33
+ {{{ if posts.display_change_owner_tools }}}
36
34
  <li>
37
- <a class="dropdown-item" component="post/change-owner" role="menuitem" tabindex="-1" href="#">
38
- <span class="menu-icon"><i class="fa fa-fw fa-user"></i></span> [[topic:change-owner]]
35
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/change-owner" role="menuitem" tabindex="-1" href="#">
36
+ <span class="menu-icon"><i class="fa fa-fw text-muted fa-user"></i></span> [[topic:change-owner]]
39
37
  </a>
40
38
  </li>
41
- <!-- ENDIF posts.display_change_owner_tools -->
39
+ {{{ end }}}
42
40
 
43
- <!-- IF posts.ip -->
41
+ {{{ if posts.ip }}}
44
42
  <li>
45
- <a class="dropdown-item" component="post/copy-ip" role="menuitem" tabindex="-1" href="#" data-clipboard-text="{posts.ip}">
46
- <span class="menu-icon" ><i class="fa fa-fw fa-copy"></i></span> [[topic:copy-ip]] {posts.ip}
43
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/copy-ip" role="menuitem" tabindex="-1" 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}
47
45
  </a>
48
46
  </li>
49
- <!-- IF posts.display_ip_ban -->
47
+ {{{ if posts.display_ip_ban }}}
50
48
  <li>
51
- <a class="dropdown-item" component="post/ban-ip" role="menuitem" tabindex="-1" href="#" data-ip="{posts.ip}">
52
- <span class="menu-icon"><i class="fa fa-fw fa-ban"></i></span> [[topic:ban-ip]] {posts.ip}
49
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/ban-ip" role="menuitem" tabindex="-1" 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}
53
51
  </a>
54
52
  </li>
55
- <!-- ENDIF posts.display_ip_ban -->
56
- <!-- ENDIF posts.ip -->
57
- <!-- ENDIF posts.display_moderator_tools -->
53
+ {{{ end }}}
54
+ {{{ end }}}
55
+ {{{ end }}}
58
56
 
59
- {{{each posts.tools}}}
57
+ {{{ each posts.tools }}}
60
58
  <li {{{ if ./disabled }}}class="disabled" {{{ end }}}>
61
- <a class="dropdown-item" {{{ if ./action}}}component="{./action}"{{{ end }}} role="menuitem" tabindex="-1" href="{{{ if ./href }}}{./href}{{{ else }}}#{{{ end }}}">
62
- <span class="menu-icon"><i class="fa fa-fw {posts.tools.icon}"></i></span> {{posts.tools.html}}
59
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" {{{ if ./action}}}component="{./action}"{{{ end }}} role="menuitem" tabindex="-1" href="{{{ if ./href }}}{./href}{{{ else }}}#{{{ end }}}">
60
+ <span class="menu-icon"><i class="fa fa-fw text-muted {./icon}"></i></span> {{./html}}
63
61
  </a>
64
62
  </li>
65
- {{{end}}}
63
+ {{{ end }}}
66
64
 
67
- <!-- IF !posts.deleted -->
68
- <!-- IF posts.display_history -->
65
+ {{{ if !posts.deleted }}}
66
+ {{{ if (posts.display_history && privileges.posts:history)}}}
69
67
  <li>
70
- <a class="dropdown-item" component="post/view-history" role="menuitem" tabindex="-1" href="#">
71
- <span class="menu-icon"><i class="fa fa-fw fa-history"></i></span> [[topic:view-history]]
68
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/view-history" role="menuitem" tabindex="-1" href="#">
69
+ <span class="menu-icon"><i class="fa fa-fw text-muted fa-history"></i></span> [[topic:view-history]]
72
70
  </a>
73
71
  </li>
74
- <!-- END -->
72
+ {{{ end }}}
75
73
 
76
74
  {{{ if config.loggedIn }}}
77
75
  <li>
78
- <a class="dropdown-item" component="post/bookmark" role="menuitem" tabindex="-1" href="#" data-bookmarked="{posts.bookmarked}">
76
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/bookmark" role="menuitem" tabindex="-1" href="#" data-bookmarked="{posts.bookmarked}">
79
77
  <span class="menu-icon">
80
- <i component="post/bookmark/on" class="fa fa-fw fa-heart <!-- IF !posts.bookmarked -->hidden<!-- ENDIF !posts.bookmarked -->"></i>
81
- <i component="post/bookmark/off" class="fa fa-fw fa-heart-o <!-- IF posts.bookmarked -->hidden<!-- ENDIF posts.bookmarked -->"></i>
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>
82
80
  </span>
83
81
  <span class="bookmark-text">[[topic:bookmark]]</span>
84
- <span component="post/bookmark-count" class="bookmarkCount badge" data-bookmarks="{posts.bookmarks}">{posts.bookmarks}</span>&nbsp;
82
+ <span component="post/bookmark-count" class="bookmarkCount badge bg-secondary" data-bookmarks="{posts.bookmarks}">{posts.bookmarks}</span>&nbsp;
85
83
  </a>
86
84
  </li>
87
85
  {{{ end }}}
88
86
 
89
87
  <li>
90
- <a class="dropdown-item" role="menuitem" tabindex="-1" href="#" data-clipboard-text="{posts.absolute_url}">
91
- <i class="fa fa-fw fa-link"></i> [[topic:copy-permalink]]
88
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" tabindex="-1" href="#" data-clipboard-text="{posts.absolute_url}">
89
+ <i class="fa fa-fw text-muted fa-link"></i> [[topic:copy-permalink]]
92
90
  </a>
93
91
  </li>
94
92
 
95
- <!-- IF postSharing.length -->
96
- <!-- IF config.loggedIn --><li class="dropdown-divider"></li><!-- ENDIF config.loggedIn -->
93
+ {{{ if postSharing.length }}}
94
+ {{{ if config.loggedIn }}}<li class="dropdown-divider"></li>{{{ end }}}
97
95
  <li class="dropdown-header">[[topic:share_this_post]]</li>
98
- <!-- ENDIF postSharing.length -->
99
- {{{each postSharing}}}
96
+ {{{ end }}}
97
+ {{{ each postSharing }}}
100
98
  <li>
101
- <a class="dropdown-item" role="menuitem" component="share/{postSharing.id}" tabindex="-1" href="#"><span class="menu-icon"><i class="fa fa-fw {postSharing.class}"></i></span> {postSharing.name}</a>
99
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" component="share/{./id}" tabindex="-1" href="#"><span class="menu-icon"><i class="fa fa-fw text-muted {./class}"></i></span> {./name}</a>
102
100
  </li>
103
- {{{end}}}
104
- <!-- ENDIF !posts.deleted -->
101
+ {{{ end }}}
102
+ {{{ end }}}
105
103
 
106
104
  {{{ if posts.display_flag_tools }}}
107
105
  <li class="dropdown-divider"></li>
108
106
 
109
107
  <li {{{ if posts.flags.flagged }}}hidden{{{ end }}}>
110
- <a class="dropdown-item" component="post/flag" role="menuitem" tabindex="-1" href="#"><i class="fa fa-fw fa-flag"></i> [[topic:flag-post]]</a>
108
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/flag" role="menuitem" tabindex="-1" href="#"><i class="fa fa-fw text-muted fa-flag"></i> [[topic:flag-post]]</a>
111
109
  </li>
112
110
  <li {{{ if !posts.flags.flagged }}}hidden{{{ end }}} class="disabled text-muted">
113
- <a class="dropdown-item" component="post/already-flagged" role="menuitem" tabindex="-1" href="#"><i class="fa fa-fw fa-flag"></i> [[topic:already-flagged]]</a>
111
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/already-flagged" role="menuitem" tabindex="-1" href="#"><i class="fa fa-fw text-muted fa-flag"></i> [[topic:already-flagged]]</a>
114
112
  </li>
115
113
 
116
114
  {{{ if (!posts.selfPost && posts.uid) }}}
117
115
  <li>
118
- <a class="dropdown-item" component="post/flagUser" role="menuitem" tabindex="-1" href="#"><i class="fa fa-fw fa-flag"></i> [[topic:flag-user]]</a>
116
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/flagUser" role="menuitem" tabindex="-1" href="#"><i class="fa fa-fw text-muted fa-flag"></i> [[topic:flag-user]]</a>
119
117
  </li>
120
118
  {{{ end }}}
121
119
  {{{ end }}}
122
120
 
123
- <!-- IF posts.display_moderator_tools -->
121
+ {{{ if posts.display_moderator_tools }}}
124
122
  {{{ if posts.flags.exists }}}
125
123
  <li>
126
- <a class="dropdown-item" role="menuitem" tabindex="-1" href="{config.relative_path}/flags/{posts.flags.flagId}"><i class="fa fa-fw fa-exclamation-circle"></i> [[topic:view-flag-report]]</a>
124
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" tabindex="-1" href="{config.relative_path}/flags/{posts.flags.flagId}"><i class="fa fa-fw text-muted fa-exclamation-circle"></i> [[topic:view-flag-report]]</a>
127
125
  </li>
128
126
  {{{ if (posts.flags.state == "open") }}}
129
127
  <li>
130
- <a class="dropdown-item" component="post/flagResolve" data-flagId="{posts.flags.flagId}" role="menuitem" tabindex="-1" href="#"><i class="fa fa-fw fa-check"></i> [[topic:resolve-flag]]</a>
128
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/flagResolve" data-flagId="{posts.flags.flagId}" role="menuitem" tabindex="-1" href="#"><i class="fa fa-fw text-muted fa-check"></i> [[topic:resolve-flag]]</a>
131
129
  </li>
132
130
  {{{ end }}}
133
131
  {{{ end }}}
134
- <!-- ENDIF posts.display_moderator_tools -->
132
+ {{{ end }}}
@@ -1,25 +1,30 @@
1
1
  <span component="post/tools" class="dropdown moderator-tools bottom-sheet d-inline-block {{{ if !./display_post_menu }}}hidden{{{ end }}}">
2
2
  <a class="btn-ghost-sm dropdown-toggle d-block" href="#" data-bs-toggle="dropdown"><i class="fa fa-fw fa-ellipsis-v text-primary"></i></a>
3
- <ul class="dropdown-menu dropdown-menu-end" role="menu">
3
+ <ul class="dropdown-menu dropdown-menu-end p-1 text-sm" role="menu">
4
4
  <li class="dropdown-item placeholder-wave">
5
- <div class="placeholder" style="width: 20px;">&nbsp;</div>
6
- <div class="placeholder col-3">&nbsp;</div>
5
+ <div class="placeholder" style="width: 20px;"></div>
6
+ <div class="placeholder col-3"></div>
7
7
  </li>
8
8
  <li class="dropdown-item placeholder-wave">
9
- <div class="placeholder" style="width: 20px;">&nbsp;</div>
10
- <div class="placeholder col-5">&nbsp;</div>
9
+ <div class="placeholder" style="width: 20px;"></div>
10
+ <div class="placeholder col-5"></div>
11
11
  </li>
12
12
  <li class="dropdown-item placeholder-wave">
13
- <div class="placeholder" style="width: 20px;">&nbsp;</div>
14
- <div class="placeholder col-11">&nbsp;</div>
13
+ <div class="placeholder" style="width: 20px;"></div>
14
+ <div class="placeholder col-9"></div>
15
15
  </li>
16
16
  <li class="dropdown-item placeholder-wave">
17
- <div class="placeholder" style="width: 20px;">&nbsp;</div>
18
- <div class="placeholder col-7">&nbsp;</div>
17
+ <div class="placeholder" style="width: 20px;"></div>
18
+ <div class="placeholder col-7"></div>
19
19
  </li>
20
20
  <li class="dropdown-item placeholder-wave">
21
- <div class="placeholder" style="width: 20px;">&nbsp;</div>
22
- <div class="placeholder col-12">&nbsp;</div>
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>
23
28
  </li>
24
29
  </ul>
25
30
  </span>
@@ -1,22 +1,30 @@
1
+ {{{ if (!./index && widgets.mainpost-header.length) }}}
2
+ <div data-widget-area="mainpost-header">
3
+ {{{ each widgets.mainpost-header }}}
4
+ {widgets.mainpost-header.html}
5
+ {{{ end }}}
6
+ </div>
7
+ {{{ end }}}
8
+
1
9
  <div class="d-flex align-items-start gap-3">
2
10
  <div class="icon py-1 bg-body d-none d-sm-block">
3
11
  <a class="d-inline-block position-relative text-decoration-none" href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}">
4
12
  {buildAvatar(posts.user, "48px", true, "", "user/picture")}
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>
13
+ <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>
6
14
  </a>
7
15
  </div>
8
16
 
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">
17
+ <div class="post-container d-flex flex-grow-1 flex-column w-100" style="min-width: 0;">
18
+ <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">
11
19
  <div class="icon bg-body d-sm-none">
12
20
  <a class="d-inline-block position-relative text-decoration-none" href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}">
13
21
  {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>
22
+ <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>
15
23
  </a>
16
24
  </div>
17
25
 
18
26
  <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>
27
+ <a class="fw-bold" href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}" itemprop="name" data-username="{posts.user.username}" data-uid="{posts.user.uid}">{posts.user.displayname}</a>
20
28
  </span>
21
29
 
22
30
  {{{ each posts.user.selectedGroups }}}
@@ -25,19 +33,18 @@
25
33
  {{{ end }}}
26
34
  {{{ end }}}
27
35
 
28
- <!-- IF posts.user.banned -->
36
+ {{{ if posts.user.banned }}}
29
37
  <span class="badge bg-danger rounded-1">[[user:banned]]</span>
30
- <!-- ENDIF posts.user.banned -->
31
-
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 }}}
38
+ {{{ end }}}
39
39
 
40
- <a class="permalink text-muted" href="{config.relative_path}/post/{posts.pid}"><span class="timeago" title="{posts.timestampISO}"></span></a>
40
+ <div class="d-flex gap-1 align-items-center">
41
+ <span class="text-muted">
42
+ {{{ if posts.toPid }}}
43
+ {generateRepliedTo(@value, config.timeagoCutoff)}
44
+ {{{ else }}}
45
+ {generateWrote(@value, config.timeagoCutoff)}
46
+ {{{ end }}}
47
+ </span>
41
48
 
42
49
  <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, {./editedISO}]]"></i>
43
50
  <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>
@@ -45,16 +52,17 @@
45
52
 
46
53
  <div>
47
54
  <span>
48
- <!-- IF posts.user.custom_profile_info.length -->
55
+ {{{ if posts.user.custom_profile_info.length }}}
49
56
  &#124;
50
- {{{each posts.user.custom_profile_info}}}
57
+ {{{ each posts.user.custom_profile_info }}}
51
58
  {posts.user.custom_profile_info.content}
52
- {{{end}}}
53
- <!-- ENDIF posts.user.custom_profile_info.length -->
59
+ {{{ end }}}
60
+ {{{ end }}}
54
61
  </span>
55
62
  </div>
56
63
  <div class="d-flex align-items-center gap-1 flex-grow-1 justify-content-end">
57
64
  <span class="bookmarked opacity-0 text-primary"><i class="fa fa-bookmark-o"></i></span>
65
+ <a href="{config.relative_path}/post/{./pid}" class="post-index text-muted d-none d-md-inline">#{increment(./index, "1")}</a>
58
66
  </div>
59
67
  </div>
60
68
 
@@ -74,7 +82,7 @@
74
82
  <a component="post/reply-count" data-target-component="post/replies/container" href="#" class="d-flex gap-2 align-items-center mt-2 btn-outline border rounded-1 p-1 threaded-replies user-select-none float-start text-muted text-decoration-none {{{ if !posts.replies.count }}}hidden{{{ end }}}">
75
83
  <span component="post/reply-count/avatars" class="avatars d-inline-flex gap-1 align-items-top {{{ if posts.replies.hasMore }}}hasMore{{{ end }}}">
76
84
  {{{each posts.replies.users}}}
77
- <span>{buildAvatar(posts.replies.users, "20px", true, "")}</span>
85
+ <span>{buildAvatar(posts.replies.users, "20px", true, "avatar-tooltip")}</span>
78
86
  {{{end}}}
79
87
  {{{ if posts.replies.hasMore}}}
80
88
  <span><i class="fa fa-ellipsis"></i></span>
@@ -95,20 +103,22 @@
95
103
 
96
104
  <div component="post/actions" class="d-flex justify-content-end gap-1 post-tools">
97
105
  <!-- IMPORT partials/topic/reactions.tpl -->
98
- <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-reply text-primary"></i></a>
99
- <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-quote-right text-primary"></i></a>
106
+ <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>
107
+ <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>
100
108
 
101
109
  {{{ if !reputation:disabled }}}
102
110
  <div class="d-flex votes align-items-stretch">
103
111
  <a component="post/upvote" href="#" class="btn-ghost-sm {{{ if posts.upvoted }}}upvoted{{{ end }}}">
104
- <i class="fa fa-chevron-up text-primary"></i>
112
+ <i class="fa fa-fw fa-chevron-up text-primary"></i>
105
113
  </a>
106
114
 
107
- <div class="d-inline-block px-3 btn-ghost-sm" component="post/vote-count" data-votes="{posts.votes}">{posts.votes}</div>
115
+ <meta itemprop="upvoteCount" content="{posts.upvotes}">
116
+ <meta itemprop="downvoteCount" content="{posts.downvotes}">
117
+ <div class="d-inline-block px-2 mx-1 btn-ghost-sm" component="post/vote-count" data-votes="{posts.votes}">{posts.votes}</div>
108
118
 
109
119
  {{{ if !downvote:disabled }}}
110
120
  <a component="post/downvote" href="#" class="btn-ghost-sm {{{ if posts.downvoted }}}downvoted{{{ end }}}">
111
- <i class="fa fa-chevron-down text-primary"></i>
121
+ <i class="fa fa-fw fa-chevron-down text-primary"></i>
112
122
  </a>
113
123
  {{{ end }}}
114
124
  </div>
@@ -116,4 +126,12 @@
116
126
 
117
127
  <!-- IMPORT partials/topic/post-menu.tpl -->
118
128
  </div>
119
- </div>
129
+ </div>
130
+
131
+ {{{ if (!./index && widgets.mainpost-footer.length) }}}
132
+ <div data-widget-area="mainpost-footer">
133
+ {{{ each widgets.mainpost-footer }}}
134
+ {widgets.mainpost-footer.html}
135
+ {{{ end }}}
136
+ </div>
137
+ {{{ end }}}
@@ -1,9 +1,9 @@
1
- <!-- IF privileges.topics:reply -->
2
- <div component="topic/quickreply/container" class="quick-reply d-flex gap-3">
1
+ {{{ if privileges.topics:reply }}}
2
+ <div component="topic/quickreply/container" class="quick-reply d-flex gap-3 mb-4">
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 -->">
4
+ <a class="d-inline-block position-relative" href="{{{ if loggedInUser.userslug }}}{config.relative_path}/user/{loggedInUser.userslug}{{{ else }}}#{{{ end }}}">
5
5
  {buildAvatar(loggedInUser, "48px", true, "", "user/picture")}
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 }}}
6
+ {{{ if loggedInUser.status }}}<span component="user/status" class="position-absolute translate-middle-y border border-white border-2 rounded-circle status {loggedInUser.status}"><span class="visually-hidden">[[global:{loggedInUser.status}]]</span></span>{{{ end }}}
7
7
  </a>
8
8
  </div>
9
9
  <form class="flex-grow-1 d-flex flex-column gap-2" method="post" action="{config.relative_path}/compose">
@@ -25,4 +25,4 @@
25
25
  </form>
26
26
 
27
27
  </div>
28
- <!-- ENDIF privileges.topics:reply -->
28
+ {{{ end }}}
@@ -1,10 +1,10 @@
1
- <div component="topic/reply/container" class="btn-group action-bar bottom-sheet {{{ if !privileges.topics:reply }}}hidden{{{ end }}}">
1
+ <div component="topic/reply/container" class="btn-group action-bar {{{ if !privileges.topics:reply }}}hidden{{{ end }}}">
2
2
  <a href="{config.relative_path}/compose?tid={tid}&title={title}" 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
3
  <button type="button" class="btn btn-sm btn-primary dropdown-toggle" data-bs-toggle="dropdown">
4
4
  <span class="caret"></span>
5
5
  </button>
6
- <ul class="dropdown-menu dropdown-menu-end" role="menu">
7
- <li><a class="dropdown-item" href="#" component="topic/reply-as-topic">[[topic:reply-as-topic]]</a></li>
6
+ <ul class="dropdown-menu dropdown-menu-end p-1 text-sm" role="menu">
7
+ <li><a class="dropdown-item rounded-1" href="#" component="topic/reply-as-topic">[[topic:reply-as-topic]]</a></li>
8
8
  </ul>
9
9
  </div>
10
10
 
@@ -1,13 +1,25 @@
1
1
  <div class="btn-group bottom-sheet" component="thread/sort">
2
- <button class="btn-ghost-sm d-flex gap-2 align-items-baseline dropdown-toggle" data-bs-toggle="dropdown" type="button">
2
+ <button class="btn-ghost-sm d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" type="button">
3
3
  <span class="d-flex gap-2 align-items-center">
4
4
  <i class="fa fa-fw fa-arrow-down-wide-short text-primary"></i>
5
5
  <span class="d-none d-md-inline fw-semibold">[[topic:sort_by]]</span>
6
6
  </span>
7
7
  </button>
8
- <ul class="dropdown-menu">
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>
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>
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>
8
+ <ul class="dropdown-menu p-1 text-sm">
9
+ <li><a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" class="oldest_to_newest" data-sort="oldest_to_newest">
10
+ <span class="flex-grow-1">[[topic:oldest_to_newest]]</span>
11
+ <i class="flex-shrink-0 fa fa-fw"></i>
12
+ </a>
13
+ </li>
14
+ <li><a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" class="newest_to_oldest" data-sort="newest_to_oldest">
15
+ <span class="flex-grow-1">[[topic:newest_to_oldest]]</span>
16
+ <i class="flex-shrink-0 fa fa-fw"></i>
17
+ </a>
18
+ </li>
19
+ <li><a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" class="most_votes" data-sort="most_votes">
20
+ <span class="flex-grow-1">[[topic:most_votes]]</span>
21
+ <i class="flex-shrink-0 fa fa-fw"></i>
22
+ </a>
23
+ </li>
12
24
  </ul>
13
25
  </div>
@@ -1,10 +1,10 @@
1
1
  {{{ if privileges.view_thread_tools }}}
2
2
  <div class="btn-group thread-tools bottom-sheet">
3
- <button class="btn-ghost-sm d-flex gap-2 align-items-baseline dropdown-toggle" data-bs-toggle="dropdown" type="button">
3
+ <button class="btn-ghost-sm d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" type="button">
4
4
  <i class="fa fa-fw fa-gear link-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">
7
+ <ul class="dropdown-menu p-1 text-sm">
8
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
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
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>
@@ -1,34 +1,32 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
1
  {{{ if privileges.editable }}}
4
- <li <!-- IF locked -->hidden<!-- ENDIF locked -->><a component="topic/lock" href="#" class="dropdown-item <!-- IF locked -->hidden<!-- ENDIF locked -->"><i class="fa fa-fw fa-lock"></i> [[topic:thread_tools.lock]]</a></li>
5
- <li <!-- IF !locked -->hidden<!-- ENDIF !locked -->><a component="topic/unlock" href="#" class="dropdown-item <!-- IF !locked -->hidden<!-- ENDIF !locked -->"><i class="fa fa-fw fa-unlock"></i> [[topic:thread_tools.unlock]]</a></li>
6
- <li <!-- IF pinned -->hidden<!-- ENDIF pinned -->><a component="topic/pin" href="#" class="dropdown-item <!-- IF pinned -->hidden<!-- ENDIF pinned -->"><i class="fa fa-fw fa-thumb-tack"></i> [[topic:thread_tools.pin]]</a></li>
7
- <li <!-- IF !pinned -->hidden<!-- ENDIF !pinned -->><a component="topic/unpin" href="#" class="dropdown-item <!-- IF !pinned -->hidden<!-- ENDIF !pinned -->"><i class="fa fa-fw fa-thumb-tack fa-rotate-90"></i> [[topic:thread_tools.unpin]]</a></li>
2
+ <li {{{ if locked }}}hidden{{{ end }}}><a component="topic/lock" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2 {{{ if locked }}}hidden{{{ end }}}"><i class="fa fa-fw text-muted fa-lock"></i> [[topic:thread_tools.lock]]</a></li>
3
+ <li {{{ if !locked }}}hidden{{{ end }}}><a component="topic/unlock" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2 {{{ if !locked }}}hidden{{{ end }}}"><i class="fa fa-fw text-muted fa-unlock"></i> [[topic:thread_tools.unlock]]</a></li>
4
+ <li {{{ if pinned }}}hidden{{{ end }}}><a component="topic/pin" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2 {{{ if pinned }}}hidden{{{ end }}}"><i class="fa fa-fw text-muted fa-thumb-tack"></i> [[topic:thread_tools.pin]]</a></li>
5
+ <li {{{ if !pinned }}}hidden{{{ end }}}><a component="topic/unpin" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2 {{{ if !pinned }}}hidden{{{ end }}}"><i class="fa fa-fw text-muted fa-thumb-tack fa-rotate-90"></i> [[topic:thread_tools.unpin]]</a></li>
8
6
 
9
- <li><a component="topic/move" class="dropdown-item" href="#"><i class="fa fa-fw fa-arrows"></i> [[topic:thread_tools.move]]</a></li>
10
- <li><a component="topic/merge" class="dropdown-item" href="#"><i class="fa fa-fw fa-code-fork"></i> [[topic:thread_tools.merge]]</a></li>
11
- <li><a component="topic/fork" class="dropdown-item" href="#"><i class="fa fa-fw fa-code-fork"></i> [[topic:thread_tools.fork]]</a></li>
7
+ <li><a component="topic/move" class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#"><i class="fa fa-fw text-muted fa-arrows"></i> [[topic:thread_tools.move]]</a></li>
8
+ <li><a component="topic/merge" class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#"><i class="fa fa-fw text-muted fa-code-fork"></i> [[topic:thread_tools.merge]]</a></li>
9
+ <li><a component="topic/fork" class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#"><i class="fa fa-fw text-muted fa-code-fork"></i> [[topic:thread_tools.fork]]</a></li>
12
10
  {{{ if !scheduled }}}
13
- <li><a component="topic/move-posts" class="dropdown-item" href="#"><i class="fa fa-fw fa-arrows"></i> [[topic:thread_tools.move-posts]]</a></li>
11
+ <li><a component="topic/move-posts" class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#"><i class="fa fa-fw text-muted fa-arrows"></i> [[topic:thread_tools.move-posts]]</a></li>
14
12
  {{{ end }}}
15
- <li><a component="topic/mark-unread-for-all" class="dropdown-item" href="#"><i class="fa fa-fw fa-inbox"></i> [[topic:thread_tools.markAsUnreadForAll]]</a></li>
13
+ <li><a component="topic/mark-unread-for-all" class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#"><i class="fa fa-fw text-muted fa-inbox"></i> [[topic:thread_tools.markAsUnreadForAll]]</a></li>
16
14
  <li class="dropdown-divider"></li>
17
15
  {{{ end }}}
18
16
 
19
- <!-- IF privileges.deletable -->
20
- <li <!-- IF deleted -->hidden<!-- ENDIF deleted -->><a component="topic/delete" href="#" class="dropdown-item <!-- IF deleted -->hidden<!-- ENDIF deleted -->"><i class="fa fa-fw fa-trash-o"></i> [[topic:thread_tools.delete]]</a></li>
17
+ {{{ if privileges.deletable }}}
18
+ <li {{{ if deleted }}}hidden{{{ end }}}><a component="topic/delete" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2 {{{ if deleted }}}hidden{{{ end }}}"><i class="fa fa-fw text-muted fa-trash-o"></i> [[topic:thread_tools.delete]]</a></li>
21
19
  {{{ if !scheduled }}}
22
- <li <!-- IF !deleted -->hidden<!-- ENDIF !deleted -->><a component="topic/restore" href="#" class="dropdown-item <!-- IF !deleted -->hidden<!-- ENDIF !deleted -->"><i class="fa fa-fw fa-history"></i> [[topic:thread_tools.restore]]</a></li>
20
+ <li {{{ if !deleted }}}hidden{{{ end }}}><a component="topic/restore" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2 {{{ if !deleted }}}hidden{{{ end }}}"><i class="fa fa-fw text-muted fa-history"></i> [[topic:thread_tools.restore]]</a></li>
21
+ {{{ end }}}
22
+ {{{ if privileges.purge }}}
23
+ <li {{{ if !deleted }}}hidden{{{ end }}}><a component="topic/purge" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2 {{{ if !deleted }}}hidden{{{ end }}}"><i class="fa fa-fw text-muted fa-eraser"></i> [[topic:thread_tools.purge]]</a></li>
24
+ {{{ end }}}
25
+ {{{ if privileges.isAdminOrMod }}}
26
+ <li><a component="topic/delete/posts" class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#"><i class="fa fa-fw text-muted fa-trash-o"></i> [[topic:thread_tools.delete-posts]]</a></li>
23
27
  {{{ end }}}
24
- <!-- IF privileges.purge -->
25
- <li <!-- IF !deleted -->hidden<!-- ENDIF !deleted -->><a component="topic/purge" href="#" class="dropdown-item <!-- IF !deleted -->hidden<!-- ENDIF !deleted -->"><i class="fa fa-fw fa-eraser"></i> [[topic:thread_tools.purge]]</a></li>
26
- <!-- END -->
27
- <!-- IF privileges.isAdminOrMod -->
28
- <li><a component="topic/delete/posts" class="dropdown-item" href="#"><i class="fa fa-fw fa-trash-o"></i> [[topic:thread_tools.delete-posts]]</a></li>
29
- <!-- ENDIF privileges.isAdminOrMod -->
30
28
 
31
- {{{each thread_tools}}}
32
- <li><a href="#" class="dropdown-item {thread_tools.class}"><i class="fa fa-fw {thread_tools.icon}"></i> {thread_tools.title}</a></li>
33
- {{{end}}}
34
- <!-- ENDIF privileges.deletable -->
29
+ {{{ each thread_tools }}}
30
+ <li><a href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2 {./class}"><i class="fa fa-fw text-muted {./icon}"></i> {./title}</a></li>
31
+ {{{ end }}}
32
+ {{{ end }}}