nodebb-theme-harmony 1.1.108 → 1.2.1

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 (57) hide show
  1. package/package.json +1 -1
  2. package/scss/chats.scss +2 -126
  3. package/scss/common.scss +3 -60
  4. package/scss/overrides.scss +0 -14
  5. package/templates/account/categories.tpl +1 -1
  6. package/templates/account/posts.tpl +6 -6
  7. package/templates/account/topics.tpl +3 -3
  8. package/templates/flags/detail.tpl +4 -4
  9. package/templates/groups/list.tpl +3 -3
  10. package/templates/notifications.tpl +1 -1
  11. package/templates/partials/account/sidebar-left.tpl +16 -16
  12. package/templates/partials/category/filter-dropdown-content.tpl +1 -1
  13. package/templates/partials/category/selector-dropdown-content.tpl +1 -1
  14. package/templates/partials/category/sort.tpl +1 -1
  15. package/templates/partials/category/subcategory.tpl +1 -1
  16. package/templates/partials/category/tools.tpl +1 -1
  17. package/templates/partials/category/watch.tpl +1 -1
  18. package/templates/partials/flags/filters.tpl +8 -8
  19. package/templates/partials/groups/filter-dropdown-content.tpl +2 -2
  20. package/templates/partials/groups/sidebar-left.tpl +5 -5
  21. package/templates/partials/post_bar.tpl +1 -1
  22. package/templates/partials/quick-search-results.tpl +1 -1
  23. package/templates/partials/search-filters.tpl +8 -8
  24. package/templates/partials/tags/filter-dropdown-content.tpl +1 -1
  25. package/templates/partials/tags/watch.tpl +1 -1
  26. package/templates/partials/tags_list.tpl +1 -1
  27. package/templates/partials/topic/navigator.tpl +2 -2
  28. package/templates/partials/topic/post-menu.tpl +1 -1
  29. package/templates/partials/topic/post.tpl +2 -2
  30. package/templates/partials/topic/quickreply.tpl +1 -1
  31. package/templates/partials/topic/sort.tpl +1 -1
  32. package/templates/partials/topic/tools.tpl +1 -1
  33. package/templates/partials/topic/watch.tpl +1 -1
  34. package/templates/partials/topic-filters.tpl +1 -1
  35. package/templates/partials/topic-terms.tpl +1 -1
  36. package/templates/partials/users/filter-dropdown-content.tpl +2 -2
  37. package/templates/partials/users/item.tpl +1 -1
  38. package/templates/partials/users_list_menu.tpl +5 -5
  39. package/templates/post-queue.tpl +4 -4
  40. package/templates/chat.tpl +0 -37
  41. package/templates/chats.tpl +0 -54
  42. package/templates/partials/chats/add-reaction.tpl +0 -1
  43. package/templates/partials/chats/composer.tpl +0 -27
  44. package/templates/partials/chats/dropdown.tpl +0 -10
  45. package/templates/partials/chats/message-window.tpl +0 -43
  46. package/templates/partials/chats/message.tpl +0 -73
  47. package/templates/partials/chats/messages.tpl +0 -7
  48. package/templates/partials/chats/options.tpl +0 -100
  49. package/templates/partials/chats/parent.tpl +0 -13
  50. package/templates/partials/chats/pinned-messages-list.tpl +0 -32
  51. package/templates/partials/chats/pinned-messages.tpl +0 -12
  52. package/templates/partials/chats/reactions.tpl +0 -1
  53. package/templates/partials/chats/recent_room.tpl +0 -55
  54. package/templates/partials/chats/scroll-up-alert.tpl +0 -3
  55. package/templates/partials/chats/system-message.tpl +0 -7
  56. package/templates/partials/chats/user-list.tpl +0 -11
  57. package/templates/partials/chats/user.tpl +0 -1
@@ -1,25 +1,25 @@
1
1
  <div class="flex-shrink-0 pe-2 border-end-md text-sm mb-3 flex-basis-md-200">
2
2
  <div class="nav sticky-md-top d-flex flex-row flex-md-column flex-wrap gap-1" style="top: 1rem; z-index: 1;">
3
- <button data-bs-toggle="tab" data-bs-target="#groups-posts" class="btn-ghost fw-semibold {{{ if template.groups/details }}}active{{{ end }}}">
3
+ <button data-bs-toggle="tab" data-bs-target="#groups-posts" class="btn-ghost ff-secondary fw-semibold {{{ if template.groups/details }}}active{{{ end }}}">
4
4
  <div class="flex-grow-1">[[global:posts]]</div>
5
5
  </button>
6
- <button data-bs-toggle="tab" data-bs-target="#groups-members" class="btn-ghost fw-semibold">
6
+ <button data-bs-toggle="tab" data-bs-target="#groups-members" class="btn-ghost ff-secondary fw-semibold">
7
7
  <div class="flex-grow-1">[[groups:members]]</div>
8
8
  <span class="flex-shrink-0 text-xs" title="{group.memberCount}">{humanReadableNumber(group.memberCount)}</span>
9
9
  </button>
10
10
 
11
11
  {{{ if group.isOwner }}}
12
- <button data-bs-toggle="tab" data-bs-target="#groups-pending" class="btn-ghost fw-semibold">
12
+ <button data-bs-toggle="tab" data-bs-target="#groups-pending" class="btn-ghost ff-secondary fw-semibold">
13
13
  <div class="flex-grow-1">[[groups:details.pending]]</div>
14
14
  <span class="flex-shrink-0 text-xs" title="{group.pending.length}">{humanReadableNumber(group.group.pending.length)}</span>
15
15
  </button>
16
16
 
17
- <button data-bs-toggle="tab" data-bs-target="#groups-invited" class="btn-ghost fw-semibold">
17
+ <button data-bs-toggle="tab" data-bs-target="#groups-invited" class="btn-ghost ff-secondary fw-semibold">
18
18
  <div class="flex-grow-1">[[groups:details.invited]]</div>
19
19
  <span class="flex-shrink-0 text-xs" title="{group.invited.length}">{humanReadableNumber(group.group.invited.length)}</span>
20
20
  </button>
21
21
 
22
- <button data-bs-toggle="tab" data-bs-target="#groups-admin" class="btn-ghost fw-semibold">
22
+ <button data-bs-toggle="tab" data-bs-target="#groups-admin" class="btn-ghost ff-secondary fw-semibold">
23
23
  <div class="flex-grow-1">[[global:header.admin]]</div>
24
24
  </button>
25
25
  {{{ end }}}
@@ -3,7 +3,7 @@
3
3
  <div class="d-flex flex-row p-2 text-bg-light border rounded w-100 align-items-center">
4
4
  <ul class="d-flex list-unstyled me-auto mb-0 gap-2 align-items-center flex-wrap">
5
5
  {{{ if loggedIn }}}
6
- <button component="topic/mark-unread" class="btn-ghost-sm d-flex gap-2 align-items-center">
6
+ <button component="topic/mark-unread" class="btn-ghost-sm ff-secondary d-flex gap-2 align-items-center">
7
7
  <i class="fa fa-fw fa-inbox text-primary"></i>
8
8
  <span class="d-none d-md-inline fw-semibold">[[topic:mark-unread]]</span>
9
9
  </button>
@@ -14,7 +14,7 @@
14
14
  {{{ each posts }}}
15
15
  <li data-tid="{posts.topic.tid}" data-pid="{posts.pid}" class="d-flex flex-column gap-1">
16
16
  <a href="{config.relative_path}/post/{posts.pid}"
17
- class="btn-ghost-sm rounded-1 text-reset d-block text-truncate px-2 py-1">
17
+ class="btn-ghost-sm ff-secondary rounded-1 text-reset d-block text-truncate px-2 py-1">
18
18
  <span class="quick-search-title fw-semibold text-sm">{posts.topic.title}</span>
19
19
  <br/>
20
20
  <p class="snippet text-xs text-break text-wrap mb-0">
@@ -4,7 +4,7 @@
4
4
  <div component="category/filter" class="dropdown" data-filter-name="category">
5
5
  <a component="category/filter/button" class="filter-btn btn btn-light btn-sm border {{{ if filters.categories.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
6
6
  <span class="filter-label">{{{ if filters.categories.active }}}{filters.categories.label}{{{ else }}}[[search:categories]]{{{ end }}}</span>
7
- <span class="caret"></span>
7
+ <span class="caret text-primary opacity-75"></span>
8
8
  </a>
9
9
 
10
10
  <ul class="dropdown-menu p-1 text-sm">
@@ -30,7 +30,7 @@
30
30
  <div component="tag/filter" class="dropdown" data-filter-name="tag">
31
31
  <a component="tag/filter/button" class="filter-btn btn btn-light btn-sm border {{{ if filters.tags.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
32
32
  <span class="filter-label">{{{ if filters.tags.active }}}{filters.tags.label}{{{ else }}}[[search:tags]]{{{ end }}}</span>
33
- <span class="caret"></span>
33
+ <span class="caret text-primary opacity-75"></span>
34
34
  </a>
35
35
 
36
36
  <ul class="dropdown-menu p-1 text-sm" style="width: 350px;">
@@ -60,7 +60,7 @@
60
60
  <div component="user/filter" class="dropdown" data-filter-name="user">
61
61
  <a component="user/filter/button" class="filter-btn btn btn-light btn-sm border {{{ if filters.users.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
62
62
  <span class="filter-label">{{{ if filters.users.active }}}{filters.users.label}{{{ else }}}[[search:posted-by]]{{{ end }}}</span>
63
- <span class="caret"></span>
63
+ <span class="caret text-primary opacity-75"></span>
64
64
  </a>
65
65
 
66
66
  <ul class="dropdown-menu p-1 text-sm" style="width: 350px;">
@@ -91,7 +91,7 @@
91
91
  <div class="dropdown" data-filter-name="replies">
92
92
  <a id="reply-count-button" class="filter-btn btn btn-light btn-sm border {{{ if filters.replies.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
93
93
  <span class="filter-label">{{{ if filters.replies.active }}}{filters.replies.label}{{{ else }}}[[search:replies]]{{{ end }}}</span>
94
- <span class="caret"></span>
94
+ <span class="caret text-primary opacity-75"></span>
95
95
  </a>
96
96
 
97
97
  <ul class="dropdown-menu p-1 text-sm" style="width: 300px;">
@@ -111,7 +111,7 @@
111
111
  <div class="dropdown" data-filter-name="time">
112
112
  <a id="post-time-button" class="filter-btn btn btn-light btn-sm border {{{ if filters.time.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
113
113
  <span class="filter-label">{{{ if filters.time.active }}}{filters.time.label}{{{ else }}}[[search:time]]{{{ end }}}</span>
114
- <span class="caret"></span>
114
+ <span class="caret text-primary opacity-75"></span>
115
115
  </a>
116
116
 
117
117
  <ul class="dropdown-menu p-1 text-sm" style="width: 350px;">
@@ -140,7 +140,7 @@
140
140
  <div class="dropdown" data-filter-name="sort">
141
141
  <a id="sort-by-button" class="filter-btn btn btn-light btn-sm border {{{ if filters.sort.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
142
142
  <span class="filter-label">{{{ if filters.sort.active }}}{filters.sort.label}{{{ else }}}[[search:sort]]{{{ end }}}</span>
143
- <span class="caret"></span>
143
+ <span class="caret text-primary opacity-75"></span>
144
144
  </a>
145
145
 
146
146
  <ul class="dropdown-menu p-1 text-sm" style="width: 250px;">
@@ -170,13 +170,13 @@
170
170
  <!-- save & reset preferences -->
171
171
  <div class="post-search-item">
172
172
  <div class="dropdown">
173
- <a class="btn btn-light btn-sm border border-gray-300 dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">[[search:save]] <span class="caret"></span>
173
+ <a class="btn btn-light btn-sm border border-gray-300 dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">[[search:save]] <span class="caret text-primary opacity-75"></span>
174
174
  </a>
175
175
 
176
176
  <ul class="dropdown-menu p-1 text-sm" style="width: 300px;">
177
177
  <li class="px-3 py-1 d-flex flex-column gap-2">
178
178
  <button id="save-preferences" class="btn btn-primary">[[search:save-preferences]]</button>
179
- <button id="clear-preferences" class="btn-outline border">[[search:clear-preferences]]</button>
179
+ <button id="clear-preferences" class="btn-ghost border">[[search:clear-preferences]]</button>
180
180
  </li>
181
181
  </ul>
182
182
  </div>
@@ -1,4 +1,4 @@
1
- <button type="button" class="btn-ghost-sm d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown">
1
+ <button type="button" class="btn-ghost-sm ff-secondary d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown">
2
2
  {{{ if selectedTag }}}
3
3
  <span class="d-inline-flex align-items-center gap-1">
4
4
  <i class="fa fa-fw fa-tags text-primary"></i>
@@ -1,6 +1,6 @@
1
1
  {{{ if config.loggedIn }}}
2
2
  <div class="btn-group bottom-sheet" component="tag/watch">
3
- <button class="btn-ghost-sm d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" type="button">
3
+ <button class="btn-ghost-sm ff-secondary d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" type="button">
4
4
  <span component="tag/following/menu" class="d-flex gap-2 align-items-center{{{ if !isFollowing }}} hidden{{{ end }}}">
5
5
  <i class="flex-shrink-0 fa fa-fw fa-bell-o text-primary"></i>
6
6
  <span class="d-none d-md-inline fw-semibold">[[tags:watching]]</span>
@@ -1,5 +1,5 @@
1
1
  {{{each tags}}}
2
- <a href="{config.relative_path}/tags/{./valueEncoded}" data-tag="{./valueEscaped}" class="btn-ghost flex-column gap-0 align-items-start justify-content-start text-truncate p-2 ff-base">
2
+ <a href="{config.relative_path}/tags/{./valueEncoded}" data-tag="{./valueEscaped}" class="btn-ghost ff-secondary flex-column gap-0 align-items-start justify-content-start text-truncate p-2 ff-base">
3
3
  <div class="fw-semibold text-nowrap tag-item w-100 text-truncate">{./valueEscaped}</div>
4
4
  <div class="text-xs text-muted text-nowrap tag-topic-count">[[global:x-topics, {formattedNumber(./score)}]]</div>
5
5
  </a>
@@ -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 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
+ <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>
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 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
+ <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>
22
22
  </div>
23
23
  </div>
24
24
  </div>
@@ -1,5 +1,5 @@
1
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 dropdown-toggle d-block" href="#" data-bs-toggle="dropdown"><i class="fa fa-fw fa-ellipsis-v text-primary"></i></a>
2
+ <a class="btn-ghost-sm ff-secondary dropdown-toggle d-block" href="#" data-bs-toggle="dropdown"><i class="fa fa-fw fa-ellipsis-v text-primary"></i></a>
3
3
  <ul class="dropdown-menu dropdown-menu-end p-1 text-sm" role="menu">
4
4
  <li class="dropdown-item placeholder-wave">
5
5
  <div class="placeholder" style="width: 20px;"></div>
@@ -82,7 +82,7 @@
82
82
 
83
83
  <div class="d-flex">
84
84
  {{{ 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-outline border rounded-1 p-1 threaded-replies user-select-none text-muted text-decoration-none text-xs {{{ if (!./replies || shouldHideReplyContainer(@value)) }}}hidden{{{ end }}}">
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
86
  <span component="post/reply-count/avatars" class="avatars d-inline-flex gap-1 align-items-top {{{ if posts.replies.hasMore }}}hasMore{{{ end }}}">
87
87
  {{{each posts.replies.users}}}
88
88
  <span>{buildAvatar(posts.replies.users, "20px", true, "avatar-tooltip")}</span>
@@ -117,7 +117,7 @@
117
117
 
118
118
  <meta itemprop="upvoteCount" content="{posts.upvotes}">
119
119
  <meta itemprop="downvoteCount" content="{posts.downvotes}">
120
- <div class="d-inline-block px-2 mx-1 btn-ghost-sm" component="post/vote-count" data-votes="{posts.votes}">{posts.votes}</div>
120
+ <div class="d-inline-block px-2 mx-1 btn-ghost-sm ff-secondary" component="post/vote-count" data-votes="{posts.votes}">{posts.votes}</div>
121
121
 
122
122
  {{{ if !downvote:disabled }}}
123
123
  <a component="post/downvote" href="#" class="btn-ghost-sm {{{ if posts.downvoted }}}downvoted{{{ end }}}">
@@ -15,7 +15,7 @@
15
15
  </div>
16
16
  <div>
17
17
  <div class="d-flex justify-content-end gap-2">
18
- <button type="submit" component="topic/quickreply/expand" class="btn btn-sm btn-outline" formmethod="get"><i class="fa fa-expand"></i></button>
18
+ <button type="submit" component="topic/quickreply/expand" class="btn btn-sm btn-ghost-sm border" formmethod="get"><i class="fa fa-expand"></i></button>
19
19
  <button type="submit" component="topic/quickreply/button" class="btn btn-sm btn-primary">[[topic:post-quick-reply]]</button>
20
20
  </div>
21
21
  </div>
@@ -1,5 +1,5 @@
1
1
  <div class="btn-group bottom-sheet" component="thread/sort">
2
- <button class="btn-ghost-sm d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" type="button">
2
+ <button class="btn-ghost-sm ff-secondary 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>
@@ -1,6 +1,6 @@
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 dropdown-toggle" data-bs-toggle="dropdown" type="button">
3
+ <button class="btn-ghost-sm ff-secondary d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" type="button">
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>
@@ -1,6 +1,6 @@
1
1
  {{{ if config.loggedIn }}}
2
2
  <div class="btn-group bottom-sheet" component="topic/watch">
3
- <button class="btn-ghost-sm d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" type="button">
3
+ <button class="btn-ghost-sm ff-secondary d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" type="button">
4
4
  <span component="topic/following/menu" class="d-flex gap-2 align-items-center{{{ if !isFollowing }}} hidden{{{ end }}}">
5
5
  <i class="flex-shrink-0 fa fa-fw fa-bell-o text-primary"></i>
6
6
  <span class="d-none d-md-inline fw-semibold">[[topic:watching]]</span>
@@ -1,5 +1,5 @@
1
1
  <div class="btn-group bottom-sheet{{{ if !filters.length }}} hidden{{{ end }}}">
2
- <button type="button" class="btn-ghost-sm d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown">
2
+ <button type="button" class="btn-ghost-sm ff-secondary d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown">
3
3
  <i class="fa fa-fw fa-filter text-primary"></i>
4
4
  <span class="visible-md-inline visible-lg-inline fw-semibold">{selectedFilter.name}</span>
5
5
  </button>
@@ -1,5 +1,5 @@
1
1
  <div class="btn-group bottom-sheet {{{ if !terms.length }}}hidden{{{ end }}}">
2
- <button type="button" class="btn-ghost-sm d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown">
2
+ <button type="button" class="btn-ghost-sm ff-secondary d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown">
3
3
  <i class="fa fa-fw fa-clock text-primary"></i>
4
4
  <span class="visible-md-inline visible-lg-inline fw-semibold">{selectedTerm.name}</span>
5
5
  </button>
@@ -1,9 +1,9 @@
1
- <button type="button" class="btn-ghost-sm dropdown-toggle" data-bs-toggle="dropdown">
1
+ <button type="button" class="btn-ghost-sm ff-secondary dropdown-toggle" data-bs-toggle="dropdown">
2
2
  {{{ if selectedUser }}}
3
3
  <span class="fw-semibold">{buildAvatar(selectedUser, "20px", true, "not-responsive")} {selectedUser.username}</span>
4
4
  {{{ else }}}
5
5
  <span class="fw-semibold">[[users:all-users]]</span>
6
- {{{ end }}} <span class="caret"></span>
6
+ {{{ end }}} <span class="caret text-primary opacity-75"></span>
7
7
  </button>
8
8
  <ul class="dropdown-menu p-1 text-sm" role="menu">
9
9
  <li role="presentation" class="user {{{ if !selectedUser}}}selected{{{end}}}">
@@ -1,4 +1,4 @@
1
- <a href="{config.relative_path}/user/{./userslug}" class="btn-ghost align-items-start justify-content-start p-2 ff-base">
1
+ <a href="{config.relative_path}/user/{./userslug}" class="btn-ghost ff-secondary align-items-start justify-content-start p-2 ff-base">
2
2
  {buildAvatar(@value, "48px", true, "flex-shrink-0")}
3
3
  <div class="d-flex flex-column text-truncate">
4
4
  <div class="fw-semibold text-truncate" title="{./displayname}">{./displayname}</div>
@@ -1,15 +1,15 @@
1
1
  <div component="user/list/menu" class="text-sm d-flex flex-wrap align-items-center gap-2">
2
- <a class="btn-ghost fw-semibold" href="{config.relative_path}/users?section=online">[[global:online]]</a>
2
+ <a class="btn-ghost ff-secondary fw-semibold" href="{config.relative_path}/users?section=online">[[global:online]]</a>
3
3
 
4
- <a class="btn-ghost fw-semibold" href="{config.relative_path}/users?section=sort-posts">[[users:top-posters]]</a>
4
+ <a class="btn-ghost ff-secondary fw-semibold" href="{config.relative_path}/users?section=sort-posts">[[users:top-posters]]</a>
5
5
 
6
6
  {{{ if !reputation:disabled }}}
7
- <a class="btn-ghost fw-semibold" href="{config.relative_path}/users?section=sort-reputation">[[users:most-reputation]]</a>
7
+ <a class="btn-ghost ff-secondary fw-semibold" href="{config.relative_path}/users?section=sort-reputation">[[users:most-reputation]]</a>
8
8
  {{{ end }}}
9
9
 
10
10
  {{{ if isAdminOrGlobalMod }}}
11
- <a class="btn-ghost fw-semibold" href="{config.relative_path}/users?section=flagged">[[users:most-flags]]</a>
11
+ <a class="btn-ghost ff-secondary fw-semibold" href="{config.relative_path}/users?section=flagged">[[users:most-flags]]</a>
12
12
 
13
- <a class="btn-ghost fw-semibold" href="{config.relative_path}/users?section=banned">[[user:banned]]</a>
13
+ <a class="btn-ghost ff-secondary fw-semibold" href="{config.relative_path}/users?section=banned">[[user:banned]]</a>
14
14
  {{{ end }}}
15
15
  </div>
@@ -14,14 +14,14 @@
14
14
  {{{ end }}}
15
15
 
16
16
  {{{ if (!singlePost && posts.length) }}}
17
- <div class="btn-toolbar justify-content-end">
17
+ <div class="btn-toolbar justify-content-end mb-3">
18
18
  <div class="me-2">
19
19
  <!-- IMPORT partials/category/filter-dropdown-right.tpl -->
20
20
  </div>
21
21
 
22
22
  <div class="btn-group bottom-sheet" component="post-queue/bulk-actions">
23
- <button type="button" class="btn-ghost-sm dropdown-toggle" data-bs-toggle="dropdown" autocomplete="off" aria-haspopup="true" aria-expanded="false">
24
- <i class="fa fa-clone"></i><span class="fw-semibold"> [[post-queue:bulk-actions]]</span>
23
+ <button type="button" class="btn-ghost-sm ff-secondary dropdown-toggle" data-bs-toggle="dropdown" autocomplete="off" aria-haspopup="true" aria-expanded="false">
24
+ <i class="fa fa-clone text-primary"></i><span class="fw-semibold"> [[post-queue:bulk-actions]]</span>
25
25
  </button>
26
26
  <ul class="dropdown-menu p-1 text-sm dropdown-menu-end">
27
27
  {{{ if canAccept }}}
@@ -78,7 +78,7 @@
78
78
  [[post-queue:user]]
79
79
  {{{ if ((privileges.ban || privileges.mute) || privileges.admin:users) }}}
80
80
  <div class="ms-auto btn-group bottom-sheet">
81
- <button href="#" class="btn btn-outline-sm text-xs dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">[[global:actions]]</button>
81
+ <button href="#" class="btn btn-ghost-sm ff-secondary border text-xs dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">[[global:actions]]</button>
82
82
  <ul class="dropdown-menu p-1 text-sm">
83
83
  {{{ if privileges.view:users:info }}}
84
84
  <li><a class="dropdown-item rounded-1" href="{config.relative_path}/user/{./user.userslug}/info">[[user:account-info]]</a></li>
@@ -1,37 +0,0 @@
1
- <div id="chat-modal" class="chat-modal d-flex flex-nowrap modal hide overflow-visible" tabindex="-1" role="dialog" aria-labelledby="Chat" aria-hidden="true" data-center="false">
2
- <div class="modal-dialog">
3
- <div class="modal-content" component="chat/message/window">
4
- <div class="modal-header d-flex gap-4 justify-content-between">
5
- <div class="fs-6 flex-grow-1 fw-semibold tracking-tight text-truncate text-nowrap" component="chat/room/name" data-icon="{icon}">{{{ if ./roomName }}}<i class="fa {icon} text-muted"></i> {roomName}{{{ else }}}{./chatWithMessage}{{{ end}}}</div>
6
- <div class="d-flex gap-1 align-items-center">
7
- <button type="button" class="btn-ghost-sm d-none d-md-flex" data-action="maximize" title="[[modules:chat.maximize]]" data-bs-toggle="tooltip" data-bs-placement="bottom">
8
- <i class="fa fa-fw fa-expand text-muted"></i>
9
- </button>
10
-
11
- <!-- IMPORT partials/chats/options.tpl -->
12
-
13
- <button id="chat-close-btn" type="button" class="btn-close btn-ghost-sm" aria-label="Close"></button>
14
- </div>
15
- </div>
16
- <!-- IMPORT partials/chats/scroll-up-alert.tpl -->
17
- <div class="modal-body d-flex flex-column" style="height: 500px;">
18
- <div class="d-flex flex-grow-1 gap-1 overflow-auto" style="min-width: 0px;">
19
- <div component="chat/messages" class="expanded-chat d-flex flex-column flex-grow-1" data-roomid="{roomId}" style="min-width: 0px;">
20
-
21
- <ul component="chat/message/content" class="chat-content p-0 m-0 list-unstyled overflow-auto flex-grow-1">
22
- <!-- IMPORT partials/chats/messages.tpl -->
23
- </ul>
24
- <ul component="chat/message/search/results" class="chat-content p-0 m-0 list-unstyled overflow-auto flex-grow-1 hidden">
25
- <div component="chat/message/search/no-results" class="text-center p-4 d-flex flex-column">
26
- <div class="p-4"><i class="fa-solid fa-wind fs-2 text-muted"></i></div>
27
- <div class="text-xs fw-semibold text-muted">[[search:no-matches]]</div>
28
- </div>
29
- </ul>
30
- <!-- IMPORT partials/chats/composer.tpl -->
31
- </div>
32
- </div>
33
- </div>
34
- <div class="imagedrop"><div>[[topic:composer.drag-and-drop-images]]</div></div>
35
- </div>
36
- </div>
37
- </div>
@@ -1,54 +0,0 @@
1
- <div class="chats-full d-flex gap-1 h-100 mt-3 mt-md-0 py-md-3">
2
- <div component="chat/nav-wrapper" class="flex-shrink-0 d-flex flex-column h-100 gap-1" data-loaded="{{{ if roomId }}}1{{{ else }}}0{{{ end }}}">
3
-
4
- <div>
5
- <button component="chat/create" class="btn btn-primary btn-sm w-100">[[modules:chat.create-room]]</button>
6
- </div>
7
-
8
- {{{ if publicRooms.length }}}
9
- <hr class="my-1">
10
-
11
- <div class="d-flex flex-column gap-1">
12
- <div class="d-flex gap-1 align-items-center justify-content-between justify-content-lg-start">
13
- <button class="btn-ghost-sm p-1 order-1 order-lg-0" data-bs-toggle="collapse" data-bs-target="#public-rooms"
14
- onclick="$(this).find('i').toggleClass('fa-rotate-180');"><i class="fa fa-fw fa-chevron-up" style="transition: 0.25s ease;"></i></button>
15
- <label class="text-sm text-muted lh-1">[[modules:chat.public-rooms, {publicRooms.length}]]</label>
16
- </div>
17
- <div id="public-rooms" component="chat/public" class="collapse show">
18
- <div class="d-flex gap-1 flex-column">
19
- {{{ each publicRooms }}}
20
- <div component="chat/public/room" class="btn-ghost-sm ff-sans justify-content-between hover-parent {{{ if ./unread}}}unread{{{ end }}}" data-roomid="{./roomId}">
21
- <div class="d-flex gap-1 align-items-center"><i class="fa {./icon} text-muted"></i> {./roomName} <div component="chat/public/room/unread/count" data-count="{./unreadCount}" class="badge border bg-light text-primary {{{ if !./unreadCount }}}hidden{{{ end }}}">{./unreadCountText}</div></div>
22
- <div>
23
- <div component="chat/public/room/sort/handle" class="text-muted {{{ if isAdmin }}}hover-d-block{{{ else }}}d-none{{{ end }}}" style="cursor:grab;"><i class="fa fa-bars"></i></div>
24
- </div>
25
- </div>
26
- {{{ end }}}
27
- </div>
28
- </div>
29
- </div>
30
- {{{ end }}}
31
-
32
- <hr class="my-1">
33
-
34
- <div class="d-flex flex-column gap-1 overflow-auto">
35
- {{{ if publicRooms.length }}}
36
- <div class="d-flex gap-1 align-items-center justify-content-between justify-content-lg-start">
37
- <button class="btn-ghost-sm p-1 order-1 order-lg-0" data-bs-toggle="collapse" data-bs-target="#private-rooms"
38
- onclick="$(this).find('i').toggleClass('fa-rotate-180')"><i class="fa fa-fw fa-chevron-up" style="transition: 0.25s ease;"></i></button>
39
- <label class="text-sm text-muted lh-1">[[modules:chat.private-rooms, {privateRoomCount}]]</label>
40
- </div>
41
- {{{ end }}}
42
-
43
- <div id="private-rooms" component="chat/recent" class="chats-list overflow-auto mb-0 pe-1 pb-5 pb-lg-0 collapse show" data-nextstart="{nextStart}">
44
- {{{each rooms}}}
45
- <!-- IMPORT partials/chats/recent_room.tpl -->
46
- {{{end}}}
47
- </div>
48
- </div>
49
- </div>
50
- <div component="chat/main-wrapper" class="flex-grow-1 ms-md-2 ps-md-2 border-1 border-start-md h-100" style="min-width: 0;" data-roomid="{roomId}">
51
- <!-- IMPORT partials/chats/message-window.tpl -->
52
- </div>
53
- <div class="imagedrop"><div>[[topic:composer.drag-and-drop-images]]</div></div>
54
- </div>
@@ -1 +0,0 @@
1
- <!-- This partial intentionally left blank; overwritten by nodebb-plugin-reactions -->
@@ -1,27 +0,0 @@
1
- <div component="chat/composer" class="d-flex flex-column border-top pt-2 align-items-start">
2
- <div component="chat/composer/replying-to" data-tomid="" class="text-sm px-2 mb-1 d-flex gap-2 align-items-center hidden">
3
- <div component="chat/composer/replying-to-text"></div> <button component="chat/composer/replying-to-cancel" class="btn-ghost-sm px-2 py-1"><i class="fa fa-times"></i></button>
4
- </div>
5
- <div class="w-100 flex-grow-1 flex-nowrap position-relative d-flex rounded-2 border border-secondary p-1 align-items-end">
6
- <button component="chat/upload/button" class="btn-ghost-sm px-2" type="button" title="[[global:upload]]" data-bs-toggle="tooltip"><i class="fa fa-fw fa-upload"></i></button>
7
- <div class="flex-grow-1 align-self-center">
8
- <textarea component="chat/input" placeholder="[[modules:chat.placeholder.mobile]]" class="bg-transparent text-body form-control chat-input mousetrap rounded-0 border-0 shadow-none px-1 py-0" style="min-height: 1.5rem;height:0;max-height:30vh;resize:none;"></textarea>
9
- </div>
10
- <div class="d-flex gap-1">
11
- {{{ each composerActions }}}
12
- <button data-action="{./action}" class="btn-ghost-sm px-2 {./class}" type="button" title="{./title}" data-bs-toggle="tooltip"><i class="fa {./icon}"></i></button>
13
- {{{ end }}}
14
- <button class="btn-ghost-sm px-2" type="button" data-action="send" title="[[modules:chat.send]]" data-bs-toggle="tooltip"><i class="fa fa-fw fa-paper-plane text-primary"></i></button>
15
- </div>
16
- </div>
17
- <div class="d-flex justify-content-between align-items-center text-xs w-100 px-2 mt-1">
18
- <div component="chat/composer/typing" class="">
19
- <div component="chat/composer/typing/users" class="hidden"></div>
20
- <div component="chat/composer/typing/text" class="hidden"></div>
21
- </div>
22
- <div component="chat/message/remaining" class="text-xs text-muted">{maximumChatMessageLength}</div>
23
- </div>
24
- <form class="hidden" component="chat/upload" method="post" enctype="multipart/form-data">
25
- <input type="file" name="files[]" multiple class="hidden"/>
26
- </form>
27
- </div>
@@ -1,10 +0,0 @@
1
- {{{ if !rooms.length }}}
2
- <li class="text-center p-4 d-flex flex-column">
3
- <div class="p-4"><i class="fa-solid fa-wind fs-2 text-muted"></i></div>
4
- <div class="text-xs fw-semibold text-muted">[[modules:chat.no-active]]</div>
5
- </li>
6
- {{{ end }}}
7
-
8
- {{{ each rooms }}}
9
- <!-- IMPORT partials/chats/recent_room.tpl -->
10
- {{{ end }}}
@@ -1,43 +0,0 @@
1
- <div component="chat/message/window" class="d-flex flex-column h-100">
2
- {{{ if widgets.header.length }}}
3
- <div data-widget-area="header">
4
- {{{each widgets.header}}}
5
- {{widgets.header.html}}
6
- {{{end}}}
7
- </div>
8
- {{{ end }}}
9
- {{{ if !roomId }}}
10
- <div class="d-flex flex-column align-items-center gap-3 my-auto">
11
- <i class="fa-solid fa-wind fs-2 text-muted"></i>
12
- <span class="text-muted text-sm">[[modules:chat.no-active]]</span>
13
- </div>
14
- {{{ else }}}
15
- <div component="chat/header" class="d-flex align-items-center px-md-3 gap-3">
16
- <a href="#" data-action="close" role="button" class="flex-shrink-0 d-flex d-md-none btn btn-outline align-text-top"><i class="fa fa-chevron-left"></i></a>
17
- <h5 component="chat/header/title" class="members flex-grow-1 fw-semibold tracking-tight mb-0 text-truncate text-nowrap">
18
- {{{ if ./roomName }}}<i class="fa {icon} text-muted"></i> {roomName}{{{ else }}}{./chatWithMessage}{{{ end}}}
19
- </h5>
20
-
21
- <!-- IMPORT partials/chats/options.tpl -->
22
- </div>
23
- <!-- IMPORT partials/chats/scroll-up-alert.tpl -->
24
- <hr class="my-1"/>
25
- <div class="d-flex flex-grow-1 gap-1 overflow-auto" style="min-width: 0px;">
26
- <div component="chat/messages" class="expanded-chat d-flex flex-column flex-grow-1" data-roomid="{roomId}" style="min-width: 0px;">
27
- <ul component="chat/message/content" class="chat-content p-0 m-0 list-unstyled overflow-auto flex-grow-1">
28
- <!-- IMPORT partials/chats/messages.tpl -->
29
- </ul>
30
- <ul component="chat/message/search/results" class="chat-content p-0 m-0 list-unstyled overflow-auto flex-grow-1 hidden">
31
- <div component="chat/message/search/no-results" class="text-center p-4 d-flex flex-column">
32
- <div class="p-4"><i class="fa-solid fa-wind fs-2 text-muted"></i></div>
33
- <div class="text-xs fw-semibold text-muted">[[search:no-matches]]</div>
34
- </div>
35
- </ul>
36
- <!-- IMPORT partials/chats/composer.tpl -->
37
- </div>
38
-
39
- <!-- IMPORT partials/chats/user-list.tpl -->
40
- <!-- IMPORT partials/chats/pinned-messages.tpl -->
41
- </div>
42
- {{{ end }}}
43
- </div>
@@ -1,73 +0,0 @@
1
- <li component="chat/message" class="chat-message mx-2 pe-2 {{{ if messages.deleted }}} deleted{{{ end }}} {{{ if messages.pinned}}} pinned{{{ end }}} {{{ if messages.newSet }}}border-top pt-3{{{ end }}}" data-mid="{messages.messageId}" data-uid="{messages.fromuid}" data-index="{messages.index}" data-self="{messages.self}" data-break="{messages.newSet}" data-timestamp="{messages.timestamp}" data-username="{messages.fromUser.username}">
2
-
3
- {{{ if messages.parent }}}
4
- <!-- IMPORT partials/chats/parent.tpl -->
5
- {{{ end }}}
6
-
7
- <div class="message-header lh-1 d-flex align-items-center gap-2 text-sm {{{ if !messages.newSet }}}hidden{{{ end }}} pb-2">
8
- <a href="{config.relative_path}/user/{messages.fromUser.userslug}" class="text-decoration-none">{buildAvatar(messages.fromUser, "18px", true, "not-responsive")}</a>
9
- <span class="chat-user fw-semibold"><a href="{config.relative_path}/user/{messages.fromUser.userslug}">{messages.fromUser.displayname}</a></span>
10
- {{{ if messages.fromUser.banned }}}
11
- <span class="badge bg-danger">[[user:banned]]</span>
12
- {{{ end }}}
13
- {{{ if messages.fromUser.deleted }}}
14
- <span class="badge bg-danger">[[user:deleted]]</span>
15
- {{{ end }}}
16
- <span class="chat-timestamp text-muted timeago" title="{messages.timestampISO}"></span>
17
-
18
- <div component="chat/message/edited" class="text-muted ms-auto {{{ if !messages.edited }}}hidden{{{ end }}}" title="[[global:edited-timestamp, {isoTimeToLocaleString(messages.editedISO, config.userLang)}]]"><i class="fa fa-edit"></i></span></div>
19
- </div>
20
- <div class="message-body-wrapper">
21
- <div component="chat/message/body" class="message-body ps-0 py-0 overflow-auto text-break">
22
- {messages.content}
23
- </div>
24
- <!-- IMPORT partials/chats/reactions.tpl -->
25
- <div component="chat/message/controls" class="position-relative">
26
- <div class="btn-group border shadow-sm controls position-absolute bg-body end-0" style="bottom:1rem;">
27
- <!-- IMPORT partials/chats/add-reaction.tpl -->
28
- <button class="btn btn-sm btn-link" data-action="reply" title="[[topic:reply]]"><i class="fa fa-reply"></i></button>
29
-
30
- <div class="btn-group d-inline-block">
31
- <button class="btn btn-sm btn-link dropdown-toggle" data-bs-toggle="dropdown"><i class="fa fa-ellipsis" type="button"></i></button>
32
- <ul class="dropdown-menu dropdown-menu-end p-1 text-sm list-unstyled">
33
- {{{ if (isAdminOrGlobalMod || (!config.disableChatMessageEditing && messages.self)) }}}
34
- <li>
35
- <a href="#" class="dropdown-item rounded-1" data-action="edit"><span class="d-inline-flex align-items-center gap-2"><i class="fa fa-fw fa-pencil text-muted"></i> [[topic:edit]]</span></a>
36
- </li>
37
- <li>
38
- <a href="#" class="dropdown-item rounded-1" data-action="delete"><span class="d-inline-flex align-items-center gap-2"><i class="fa fa-fw fa-trash text-muted"></i> [[topic:delete]]</span></a>
39
- </li>
40
- <li>
41
- <a href="#" class="dropdown-item rounded-1" data-action="restore"><span class="d-inline-flex align-items-center gap-2"><i class="fa fa-fw fa-repeat text-muted"></i> [[topic:restore]]</span></a>
42
- </li>
43
- {{{ end }}}
44
-
45
- {{{ if (isAdminOrGlobalMod || isOwner )}}}
46
- <li>
47
- <a href="#" class="dropdown-item rounded-1" data-action="pin"><span class="d-inline-flex align-items-center gap-2"><i class="fa fa-fw fa-thumbtack text-muted"></i> [[modules:chat.pin-message]]</span></a>
48
- </li>
49
- <li>
50
- <a href="#" class="dropdown-item rounded-1" data-action="unpin"><span class="d-inline-flex align-items-center gap-2"><i class="fa fa-fw fa-thumbtack fa-rotate-90 text-muted"></i> [[modules:chat.unpin-message]]</span></a>
51
- </li>
52
- <li class="dropdown-divider"></li>
53
- {{{ end }}}
54
-
55
- {{{ if isAdminOrGlobalMod }}}
56
- <li>
57
- <a href="#" class="dropdown-item rounded-1 chat-ip-button"><span class="d-inline-flex align-items-center gap-2"><i class="fa fa-fw fa-info-circle text-muted"></i> [[modules:chat.show-ip]]</span></a>
58
- </li>
59
- {{{ end }}}
60
-
61
- <li>
62
- <a href="#" class="dropdown-item rounded-1" data-action="copy-text" data-mid="{messages.mid}"><span class="d-inline-flex align-items-center gap-2"><i class="fa fa-fw fa-copy text-muted"></i> [[modules:chat.copy-text]]</span></a>
63
- </li>
64
-
65
- <li>
66
- <a href="#" class="dropdown-item rounded-1" data-action="copy-link" data-mid="{messages.mid}"><span class="d-inline-flex align-items-center gap-2"><i class="fa fa-fw fa-link text-muted"></i> [[modules:chat.copy-link]]</span></a>
67
- </li>
68
- </ul>
69
- </div>
70
- </div>
71
- </div>
72
- </div>
73
- </li>
@@ -1,7 +0,0 @@
1
- {{{each messages}}}
2
- {{{ if !./system }}}
3
- <!-- IMPORT partials/chats/message.tpl -->
4
- {{{ else }}}
5
- <!-- IMPORT partials/chats/system-message.tpl -->
6
- {{{ end }}}
7
- {{{end}}}