nodebb-theme-harmony 1.1.108 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/scss/chats.scss +2 -126
- package/scss/common.scss +3 -59
- package/scss/overrides.scss +0 -14
- package/templates/account/categories.tpl +1 -1
- package/templates/account/posts.tpl +6 -6
- package/templates/account/topics.tpl +3 -3
- package/templates/flags/detail.tpl +4 -4
- package/templates/groups/list.tpl +3 -3
- package/templates/notifications.tpl +1 -1
- package/templates/partials/account/sidebar-left.tpl +16 -16
- package/templates/partials/category/filter-dropdown-content.tpl +1 -1
- package/templates/partials/category/selector-dropdown-content.tpl +1 -1
- package/templates/partials/category/sort.tpl +1 -1
- package/templates/partials/category/subcategory.tpl +1 -1
- package/templates/partials/category/tools.tpl +1 -1
- package/templates/partials/category/watch.tpl +1 -1
- package/templates/partials/groups/filter-dropdown-content.tpl +1 -1
- package/templates/partials/groups/sidebar-left.tpl +5 -5
- package/templates/partials/post_bar.tpl +1 -1
- package/templates/partials/quick-search-results.tpl +1 -1
- package/templates/partials/search-filters.tpl +1 -1
- package/templates/partials/tags/filter-dropdown-content.tpl +1 -1
- package/templates/partials/tags/watch.tpl +1 -1
- package/templates/partials/tags_list.tpl +1 -1
- package/templates/partials/topic/navigator.tpl +2 -2
- package/templates/partials/topic/post-menu.tpl +1 -1
- package/templates/partials/topic/post.tpl +2 -2
- package/templates/partials/topic/quickreply.tpl +1 -1
- package/templates/partials/topic/sort.tpl +1 -1
- package/templates/partials/topic/tools.tpl +1 -1
- package/templates/partials/topic/watch.tpl +1 -1
- package/templates/partials/topic-filters.tpl +1 -1
- package/templates/partials/topic-terms.tpl +1 -1
- package/templates/partials/users/filter-dropdown-content.tpl +1 -1
- package/templates/partials/users/item.tpl +1 -1
- package/templates/partials/users_list_menu.tpl +5 -5
- package/templates/post-queue.tpl +2 -2
- package/templates/chat.tpl +0 -37
- package/templates/chats.tpl +0 -54
- package/templates/partials/chats/add-reaction.tpl +0 -1
- package/templates/partials/chats/composer.tpl +0 -27
- package/templates/partials/chats/dropdown.tpl +0 -10
- package/templates/partials/chats/message-window.tpl +0 -43
- package/templates/partials/chats/message.tpl +0 -73
- package/templates/partials/chats/messages.tpl +0 -7
- package/templates/partials/chats/options.tpl +0 -100
- package/templates/partials/chats/parent.tpl +0 -13
- package/templates/partials/chats/pinned-messages-list.tpl +0 -32
- package/templates/partials/chats/pinned-messages.tpl +0 -12
- package/templates/partials/chats/reactions.tpl +0 -1
- package/templates/partials/chats/recent_room.tpl +0 -55
- package/templates/partials/chats/scroll-up-alert.tpl +0 -3
- package/templates/partials/chats/system-message.tpl +0 -7
- package/templates/partials/chats/user-list.tpl +0 -11
- package/templates/partials/chats/user.tpl +0 -1
|
@@ -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-
|
|
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-
|
|
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,4 +1,4 @@
|
|
|
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 }}}
|
|
@@ -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>
|
package/templates/post-queue.tpl
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
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">
|
|
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
24
|
<i class="fa fa-clone"></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">
|
|
@@ -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-
|
|
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>
|
package/templates/chat.tpl
DELETED
|
@@ -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>
|
package/templates/chats.tpl
DELETED
|
@@ -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,100 +0,0 @@
|
|
|
1
|
-
<div class="d-flex gap-1 align-items-stretch">
|
|
2
|
-
<!-- search -->
|
|
3
|
-
<button class="btn-ghost-sm" component="chat/room/search/toggle" data-manual-tooltip="1" title="[[global:header.search]]">
|
|
4
|
-
<i class="fa fa-search text-muted"></i>
|
|
5
|
-
</button>
|
|
6
|
-
<div component="chat/room/search/container" class="position-relative hidden align-self-center">
|
|
7
|
-
<input component="chat/room/search" class="form-control form-control-sm" placeholder="[[search:type-to-search]]" style="width: 150px;">
|
|
8
|
-
<a component="chat/room/search/clear" href="#" class="hidden px-2 py-1 position-absolute top-50 end-0 translate-middle-y">
|
|
9
|
-
<i class="fa fa-times text-muted opacity-75"></i>
|
|
10
|
-
</a>
|
|
11
|
-
</div>
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
<!-- notification dropdown -->
|
|
15
|
-
<div class="dropdown d-flex" data-manual-tooltip="1" title="[[modules:chat.notification-settings]]" component="chat/notification/setting">
|
|
16
|
-
<button class="btn-ghost-sm position-relative" data-bs-toggle="dropdown">
|
|
17
|
-
<i class="fa fa-bell text-muted"></i>
|
|
18
|
-
<span class="position-absolute top-0 end-0 text-xs text-muted opacity-50" style="font-size: 10px!important; padding: 1px; line-height: 10px;">
|
|
19
|
-
<i component="chat/notification/setting/icon" class="fa {notificationOptionsIcon}"></i>
|
|
20
|
-
</span>
|
|
21
|
-
</button>
|
|
22
|
-
<ul class="dropdown-menu dropdown-menu-end p-1 text-sm">
|
|
23
|
-
{{{ each notificationOptions }}}
|
|
24
|
-
<li>
|
|
25
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" data-value="{./value}" data-icon="{./icon}">
|
|
26
|
-
<div class="d-flex flex-column gap-1">
|
|
27
|
-
<div class="d-flex align-items-center gap-2">
|
|
28
|
-
<div class="flex-grow-1">{./label}</div>
|
|
29
|
-
<i class="flex-shrink-0 fa fa-fw fa-check {{{ if !./selected }}}hidden{{{ end }}}"></i>
|
|
30
|
-
</div>
|
|
31
|
-
{{{ if @first}}}
|
|
32
|
-
<div component="chat/notification/setting/sub-label" class="text-sm text-muted">{./subLabel}</div>
|
|
33
|
-
{{{ end }}}
|
|
34
|
-
</div>
|
|
35
|
-
</a>
|
|
36
|
-
</li>
|
|
37
|
-
|
|
38
|
-
{{{ if @first }}}
|
|
39
|
-
<li><hr class="dropdown-divider"></li>
|
|
40
|
-
{{{ end }}}
|
|
41
|
-
{{{ end }}}
|
|
42
|
-
</ul>
|
|
43
|
-
</div>
|
|
44
|
-
|
|
45
|
-
<!-- pinned messages -->
|
|
46
|
-
<button component="chat/pinned/messages/btn" class="btn-ghost-sm d-none d-lg-flex flex-nowrap" title="[[modules:chat.pinned-messages]]" data-bs-toggle="tooltip" data-bs-placement="bottom">
|
|
47
|
-
<i class="fa fa-thumb-tack text-muted"></i>
|
|
48
|
-
</button>
|
|
49
|
-
|
|
50
|
-
<!-- manage/options dropdown -->
|
|
51
|
-
<div class="dropdown d-flex" data-manual-tooltip="1" title="[[modules:chat.options]]">
|
|
52
|
-
<button class="btn-ghost-sm" data-bs-toggle="dropdown" component="chat/controlsToggle">
|
|
53
|
-
<i class="fa fa-gear text-muted"></i>
|
|
54
|
-
</button>
|
|
55
|
-
<ul class="dropdown-menu dropdown-menu-end p-1 text-sm" component="chat/controls">
|
|
56
|
-
<li>
|
|
57
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" data-action="manage">
|
|
58
|
-
<i class="fa fa-fw text-muted fa-cog"></i> [[modules:chat.manage-room]]
|
|
59
|
-
</a>
|
|
60
|
-
</li>
|
|
61
|
-
{{{ if isOwner }}}
|
|
62
|
-
<li>
|
|
63
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" data-action="rename">
|
|
64
|
-
<i class="fa fa-fw text-muted fa-edit"></i> [[modules:chat.rename-room]]
|
|
65
|
-
</a>
|
|
66
|
-
</li>
|
|
67
|
-
{{{ end }}}
|
|
68
|
-
<li>
|
|
69
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" data-action="leave">
|
|
70
|
-
<i class="fa fa-fw text-muted fa-sign-out"></i> [[modules:chat.leave-room]]
|
|
71
|
-
</a>
|
|
72
|
-
</li>
|
|
73
|
-
{{{ if (public && isAdmin) }}}
|
|
74
|
-
<li>
|
|
75
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" data-action="delete">
|
|
76
|
-
<i class="fa fa-fw text-danger fa-trash"></i> [[modules:chat.delete-room]]
|
|
77
|
-
</a>
|
|
78
|
-
</li>
|
|
79
|
-
{{{ end }}}
|
|
80
|
-
</ul>
|
|
81
|
-
</div>
|
|
82
|
-
|
|
83
|
-
<!-- users toggle -->
|
|
84
|
-
{{{ if users.length }}}
|
|
85
|
-
<div component="chat/user/list/btn" class="btn-ghost-sm d-none d-lg-flex flex-nowrap gap-3" title="[[modules:chat.view-users-list]]" data-bs-toggle="tooltip" data-bs-placement="bottom">
|
|
86
|
-
<div class="d-flex text-nowrap">
|
|
87
|
-
{{{ if ./users.0 }}}
|
|
88
|
-
<span style="width: 18px; z-index: 3;" class="text-decoration-none" href="{config.relative_path}/user/{./users.0.userslug}">{buildAvatar(./users.0, "24px", true)}</span>
|
|
89
|
-
{{{ end }}}
|
|
90
|
-
{{{ if ./users.1 }}}
|
|
91
|
-
<span style="width: 18px; z-index: 2;" class="text-decoration-none" href="{config.relative_path}/user/{./users.1.userslug}">{buildAvatar(./users.1, "24px", true)}</span>
|
|
92
|
-
{{{ end }}}
|
|
93
|
-
{{{ if ./users.2 }}}
|
|
94
|
-
<span style="width: 18px; z-index: 1;" class="text-decoration-none" href="{config.relative_path}/user/{./users.2.userslug}">{buildAvatar(./users.2, "24px", true)}</span>
|
|
95
|
-
{{{ end }}}
|
|
96
|
-
</div>
|
|
97
|
-
{./userCount}
|
|
98
|
-
</div>
|
|
99
|
-
{{{ end }}}
|
|
100
|
-
</div>
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
<div class="d-flex ms-4 mb-2 align-items-center">
|
|
2
|
-
<div component="chat/message/parent" data-parent-mid="{messages.parent.mid}" data-uid="{messages.parent.fromuid}" class="btn-ghost-sm align-items-start flex-row w-100">
|
|
3
|
-
<div class="d-flex gap-2 text-sm text-nowrap">
|
|
4
|
-
<div><i class="fa fa-sm fa-reply opacity-50"></i></div>
|
|
5
|
-
<div class="d-flex flex-nowrap gap-1 align-items-center">
|
|
6
|
-
<a href="{config.relative_path}/user/{messages.parent.user.userslug}" class="text-decoration-none lh-1">{buildAvatar(messages.parent.user, "14px", true, "not-responsive align-middle")}</a>
|
|
7
|
-
<a class="chat-user fw-semibold" href="{config.relative_path}/user/{messages.parent.user.userslug}">{messages.parent.user.displayname}</a>
|
|
8
|
-
</div>
|
|
9
|
-
<span class="chat-timestamp text-muted timeago text-nowrap hidden" title="{messages.parent.timestampISO}"></span>
|
|
10
|
-
</div>
|
|
11
|
-
<div component="chat/message/parent/content" class="text-muted line-clamp-1 w-100">{messages.parent.content}</div>
|
|
12
|
-
</div>
|
|
13
|
-
</div>
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
{{{ each messages }}}
|
|
2
|
-
<li component="chat/message" class="chat-message mx-2 pe-2 {{{ if messages.deleted }}} deleted{{{ end }}} {{{ if messages.pinned}}} pinned{{{ end }}} border-top pt-3" data-mid="{messages.messageId}" data-uid="{messages.fromuid}" data-self="{messages.self}" data-timestamp="{messages.timestamp}" data-username="{messages.fromUser.username}" data-index="{./index}">
|
|
3
|
-
|
|
4
|
-
{{{ if messages.parent }}}
|
|
5
|
-
<!-- IMPORT partials/chats/parent.tpl -->
|
|
6
|
-
{{{ end }}}
|
|
7
|
-
|
|
8
|
-
<div class="message-header lh-1 d-flex align-items-center gap-2 text-sm pb-2">
|
|
9
|
-
<a href="{config.relative_path}/user/{messages.fromUser.userslug}" class="text-decoration-none">{buildAvatar(messages.fromUser, "18px", true, "not-responsive")}</a>
|
|
10
|
-
<span class="chat-user fw-semibold"><a href="{config.relative_path}/user/{messages.fromUser.userslug}">{messages.fromUser.displayname}</a></span>
|
|
11
|
-
|
|
12
|
-
<span class="chat-timestamp text-muted timeago" title="{messages.timestampISO}"></span>
|
|
13
|
-
<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>
|
|
14
|
-
</div>
|
|
15
|
-
<div class="message-body-wrapper">
|
|
16
|
-
<div component="chat/message/body" class="message-body ps-0 py-0 overflow-auto text-break">
|
|
17
|
-
{messages.content}
|
|
18
|
-
</div>
|
|
19
|
-
<div component="chat/message/controls" class="position-relative">
|
|
20
|
-
<div class="btn-group border shadow-sm controls position-absolute bg-body end-0" style="bottom:1rem;">
|
|
21
|
-
{{{ if (isAdminOrGlobalMod || (!config.disableChatMessageEditing && messages.self)) }}}
|
|
22
|
-
<button class="btn btn-sm btn-link" data-action="edit" title="[[topic:edit]]"><i class="fa fa-pencil"></i></button>
|
|
23
|
-
{{{ end }}}
|
|
24
|
-
{{{ if (isAdminOrGlobalMod || isOwner )}}}
|
|
25
|
-
<button class="btn btn-sm btn-link" data-action="pin" title="[[modules:chat.pin-message]]"><i class="fa fa-thumbtack"></i></button>
|
|
26
|
-
<button class="btn btn-sm btn-link" data-action="unpin" title="[[modules:chat.unpin-message]]"><i class="fa fa-thumbtack fa-rotate-90"></i></button>
|
|
27
|
-
{{{ end }}}
|
|
28
|
-
</div>
|
|
29
|
-
</div>
|
|
30
|
-
</div>
|
|
31
|
-
</li>
|
|
32
|
-
{{{ end }}}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
<div component="chat/messages/pinned/container" class="d-flex flex-column expanded-chat border-start hidden" style="min-width:340px; width: 340px;">
|
|
2
|
-
<h3 class="fs-6 p-1 mb-0 text-center text-secondary">[[modules:chat.pinned-messages]]</h3>
|
|
3
|
-
|
|
4
|
-
<div component="chat/messages/pinned/empty" class="text-center p-4 d-flex flex-column">
|
|
5
|
-
<div class="p-4"><i class="fa-solid fa-wind fs-2 text-muted"></i></div>
|
|
6
|
-
<div class="text-xs fw-semibold text-muted">[[modules:chat.no-pinned-messages]]</div>
|
|
7
|
-
</div>
|
|
8
|
-
|
|
9
|
-
<ul component="chat/messages/pinned" class="chat-content list-unstyled d-flex flex-column gap-1 p-1 overflow-auto">
|
|
10
|
-
|
|
11
|
-
</ul>
|
|
12
|
-
</div>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<!-- This partial intentionally left blank; overwritten by nodebb-plugin-reactions -->
|