nodebb-theme-persona 13.2.50 → 13.3.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-theme-persona",
3
- "version": "13.2.50",
3
+ "version": "13.3.0",
4
4
  "nbbpm": {
5
5
  "compatibility": "^3.5.0"
6
6
  },
package/scss/chats.scss CHANGED
@@ -1,542 +1,14 @@
1
- // Make chats page edge-to-edge
2
- .page-user-chats {
3
- #content.container {
4
- @include make-container();
5
- max-width: unset;
6
- padding: 0;
7
- }
8
-
9
- .navbar {
10
- margin-bottom: 0;
11
- }
12
-
13
- #panel {
14
- padding-bottom: 0px;
15
- }
16
-
17
- [data-widget-area="header"], [data-widget-area="footer"] {
18
- display: none;
19
- }
20
- }
21
-
22
1
  body.page-user-chats {
23
- $calcHeight: calc(100vh - var(--panel-offset) - $spacer);
24
- overflow: hidden;
25
- height: 100%;
26
- [data-widget-area="footer"] {
27
- display: none;
28
- }
2
+ $calcHeight: calc(100vh - var(--panel-offset));
3
+
29
4
  > #panel {
30
5
  height: $calcHeight;
31
6
  > .container {
32
7
  height: 100%;
33
8
  }
34
9
  }
35
- }
36
-
37
- [component="chat/user/list"] [data-uid] {
38
- [component="chat/user/list/username"] {
39
- color: $text-muted;
40
- }
41
- &.online {
42
- [component="chat/user/list/username"] {
43
- color: initial;
44
- font-weight: $font-weight-semibold;
45
- }
46
- }
47
- }
48
-
49
- /* Styles common to both full chat and chat modal */
50
- .chats-full, .chat-modal {
51
- display: flex;
52
- flex-wrap: nowrap;
53
-
54
- [component="chat/nav-wrapper"] {
55
- width: 300px;
56
- [component="chat/public/room"].unread {
57
- font-weight: $font-weight-bold;
58
- }
59
- }
60
-
61
- [component="chat/messages"] {
62
- display: flex;
63
- flex-direction: column;
64
- height: 100%;
65
-
66
- .chat-content {
67
- flex: 1;
68
- }
69
- }
70
-
71
- [component="chat/header"] {
72
- .close {
73
- margin-left: 0.5em;
74
- }
75
- }
76
-
77
- .modal-header .dropdown {
78
- .avatar {
79
- margin-right: 0.5em;
80
- }
81
- }
82
-
83
- [component="chat/composer"] {
84
- display: flex;
85
- position: relative;
86
-
87
- [component="chat/input"] {
88
- flex: 1;
89
- box-shadow: none;
90
- border: 0;
91
- border: 1px solid $gray-200;
92
- border-radius: 0;
93
- }
94
- }
95
- }
96
-
97
- .chats-page {
98
- margin-top: 10px;
99
- }
100
-
101
- .chats-list {
102
- padding: 0;
103
- overflow-x: hidden;
104
- overflow-y: auto;
105
- border-top: 1px solid $gray-200;
106
-
107
- > li.no_active {
108
- height: initial;
109
- padding-bottom: 0.5rem;
110
- text-align: center;
111
- }
112
-
113
- > li {
114
- height: 80px;
115
- display: flex;
116
- position: relative;
117
- clear: both;
118
- @include pointer;
119
-
120
- border-left: 1px solid;
121
- border-right: 1px solid;
122
- border-bottom: 1px solid;
123
- border-color: $gray-200;
124
-
125
- &.typing {
126
- .username:after {
127
- visibility: visible;
128
- }
129
- }
130
-
131
- &.unread {
132
- background: lighten($primary, 35%);
133
- border-bottom: 0;
134
- }
135
- &.active {
136
- background-color: $light;
137
- }
138
-
139
- .teaser-content {
140
- font-size: 13px;
141
- opacity: 0.8;
142
- }
143
-
144
- .notification-chat-content {
145
- .room-name {
146
- white-space: nowrap;
147
- overflow: hidden;
148
- text-overflow: ellipsis;
149
- display: block;
150
- [component="chat/title"] {
151
- overflow: hidden;
152
- white-space: nowrap;
153
- text-overflow: ellipsis;
154
- max-width: 350px;
155
- display: inline-block;
156
- }
157
- }
158
- }
159
-
160
- &.bg-primary {
161
- background: $primary;
162
- border-bottom: 0;
163
- }
164
-
165
- .username {
166
- font-size: 14px;
167
-
168
- &:after {
169
- display: inline-block;
170
- font-family: "FontAwesome";
171
- content: "\f11c";
172
- margin-left: 0.5em;
173
- visibility: hidden;
174
- }
175
- }
176
-
177
- .teaser-timestamp {
178
- font-size: 10px;
179
- margin-top: .5rem;
180
- margin-right: .5rem;
181
- }
182
-
183
- a {
184
- @include text-ellipsis;
185
- }
186
-
187
- p {
188
- margin: 0;
189
- white-space: nowrap;
190
- overflow: hidden;
191
- text-overflow: ellipsis;
192
- height: 20px;
193
- }
194
-
195
- .status {
196
- position: absolute;
197
- left: 50px;
198
- font-size: 20px;
199
- top: 10px;
200
- }
201
-
202
- .leave {
203
- opacity: 0.5;
204
- &:hover {
205
- opacity: 1.0;
206
- }
207
- }
208
-
209
- .members {
210
- padding-left: 1rem;
211
- margin-bottom: 0.5rem;
212
- z-index: 1;
213
- position: absolute;
214
- bottom: 2px;
215
- left: 53px;
216
-
217
- li {
218
- display: inline-block;
219
- width: 16px;
220
- padding: 0;
221
- margin: 0;
222
-
223
- &:first-child {
224
- display: none;
225
- }
226
-
227
- .avatar {
228
- border: 2px solid white;
229
- vertical-align: bottom;
230
- }
231
-
232
- img {
233
- margin-top: -4px;
234
- }
235
- }
236
- }
237
-
238
- .main-avatar {
239
- .avatar {
240
- $size: 80px;
241
- @include user-icon-style($size, calc($size * 0.6), 0);
242
- }
243
- }
244
- }
245
- }
246
-
247
- .chat-modal {
248
- z-index: $zindex-modal;
249
- }
250
-
251
- /* Chat modal specific styles */
252
- .chat-modal {
253
- .modal-header {
254
- padding: 0.25em 1em;
255
-
256
- h4 {
257
- font-size: 1.5rem;
258
- font-weight: bold;
259
- min-height: 20px;
260
-
261
- i {
262
- font-size: 14px;
263
- vertical-align: center;
264
-
265
- &.fa-keyboard-o {
266
- animation: topic-reply-pulse 2s ease-in infinite;
267
- }
268
- }
269
- }
270
-
271
- .close {
272
- padding: 0.5em;
273
- }
274
- }
275
-
276
- .modal-body {
277
- display: flex;
278
- flex-direction: column;
279
- height: 400px;
280
-
281
- .chat-content {
282
- flex: 1;
283
- }
284
- }
285
- [component="chat/user/list/btn"], [component="chat/pinned/messages/btn"] {
286
- display: none!important;
287
- }
288
- }
289
-
290
- .expanded-chat, .chat-modal {
291
- .chat-content {
292
- .message-body {
293
- @include fix-lists;
294
- }
295
- overflow-y: auto;
296
- overflow-x: hidden;
297
- resize: none;
298
- word-wrap: break-word;
299
- margin: 0;
300
- padding: 0;
301
-
302
- li.chat-message {
303
- position: relative;
304
- list-style-type: none;
305
- transition: opacity .5s ease;
306
-
307
- &:first-child {
308
- padding-top: 1.428rem;
309
- }
310
-
311
- &:last-child {
312
- margin-bottom: 1.428rem;
313
- }
314
-
315
- &[data-break="true"] {
316
- padding-top: 1rem;
317
- margin-top: 1rem;
318
- border-top: 1px solid $gray-200;
319
- }
320
-
321
- &[data-break="true"]:first-child {
322
- border-top: 0;
323
- margin-top: -1.5px;
324
- }
325
-
326
- &.deleted {
327
- .message-body-wrapper .controls {
328
- [data-action] {
329
- display: none;
330
- }
331
-
332
- [data-action="restore"] {
333
- display: block;
334
- }
335
- }
336
-
337
- .message-body {
338
- opacity: 0.3;
339
- }
340
- }
341
- &.pinned {
342
- .message-body-wrapper .controls {
343
- [data-action="pin"] {
344
- display: none;
345
- }
346
-
347
- [data-action="unpin"] {
348
- display: block;
349
- }
350
- }
351
- }
352
-
353
- .chat-user-image {
354
- @include user-icon-style(32px, 1.6rem, 50%);
355
- float: left;
356
- }
357
-
358
- .chat-user {
359
- display: inline-block;
360
- margin-left: 13px;
361
-
362
- a {
363
- color: $body-color;
364
- }
365
- }
366
-
367
- .chat-timestamp {
368
- display: inline-block;
369
- user-select: none;
370
- }
371
-
372
- .chat-edited {
373
- margin-left: 5px;
374
- margin-top: 2px;
375
- }
376
-
377
- &[data-self="0"] + [data-self="0"], &[data-self="1"] + [data-self="1"] {
378
- &[data-break="false"] {
379
- .message-header {
380
- display: none;
381
- }
382
- }
383
- }
384
-
385
- .message-body-wrapper {
386
- margin-left: 45px;
387
-
388
- .message-body {
389
- padding: 7px 10px;
390
- overflow-y: hidden;
391
-
392
- p {
393
- margin: 7px 0 0 0;
394
- line-height: 2rem;
395
- }
396
-
397
- p:first-child {
398
- margin: 0;
399
- }
400
- }
401
-
402
- .controls {
403
- display: none;
404
- &:has([aria-expanded="true"]) {
405
- display: flex;
406
- }
407
- position: absolute;
408
- bottom: 7px;
409
- right: 14px;
410
- border: 1px solid $gray-200;
411
- box-shadow: 0 6px 12px rgba(0,0,0,.175);
412
-
413
- [data-action="restore"], [data-action="unpin"] {
414
- display: none;
415
- }
416
- }
417
-
418
- &:hover {
419
- .message-body {
420
- color: $dropdown-link-hover-color;
421
- background: $dropdown-link-hover-bg;
422
- }
423
-
424
- .controls {
425
- display: flex;
426
- }
427
- }
428
- }
429
- }
430
-
431
- li.system-message {
432
- list-style-type: none;
433
- text-align: center;
434
- color: $gray-600;
435
-
436
- &::before, &::after {
437
- display: inline-block;
438
- width: 10%;
439
- content: '';
440
- border-top: 1px solid $gray-200;
441
- position: relative;
442
- top: -0.3rem;
443
- margin: 0 2rem;
444
- }
445
- }
446
- }
447
-
448
- .user-typing {
449
- color: $gray-600;
450
- margin: 1.428rem 0;
451
- }
452
-
453
- .selected[data-since] {
454
- font-weight: bold;
455
- }
456
-
457
- .modal-dialog {
458
- margin: 0 auto;
459
- }
460
-
461
- textarea {
462
- resize: none;
463
- }
464
-
465
- .since-bar {
466
- display: block;
467
- padding: 1rem 0;
468
- text-align: center;
469
- }
470
-
471
- .controlsToggle {
472
- margin-right: 10px;
473
- }
474
- }
475
-
476
- .expanded-chat {
477
- h1 {
478
- margin: 0px;
479
- padding-bottom: 20px;
480
- }
481
-
482
- .chat-content {
483
- padding-top: 10px;
484
- }
485
-
486
- .input-group {
487
- z-index: 1;
488
- }
489
- }
490
-
491
- [component="chat/manage-modal"] {
492
- .list-group-item .avatar {
493
- margin-right: 1em;
494
- }
495
-
496
- div+span {
497
- margin: -4px;
498
- }
499
- }
500
-
501
- /* Mobile handling of chat page */
502
- @include media-breakpoint-down(md) {
503
- .page-user-chats {
504
- padding-bottom: 0!important;
505
- > #panel {
506
- height: 100%!important;
507
- .container {
508
- height: 100%!important;
509
- }
510
- }
511
- [component="chat/nav-wrapper"] {
512
- width: 100%;
513
- }
514
-
515
- &.chat-loaded .navbar {
516
- display: none;
517
- }
518
-
519
- [component="chat/nav-wrapper"][data-loaded="1"] {
520
- display: none!important;
521
- }
522
-
523
- [component="chat/nav-wrapper"][data-loaded="0"] + [component="chat/main-wrapper"] {
524
- display: none!important;
525
- }
526
-
527
- [component="chat/messages"] {
528
- width: calc(100vw);
529
- }
530
- }
531
-
532
- [data-action="pop-out"] {
533
- display: none;
534
- }
535
- }
536
-
537
- /* Mobile handling of chat modal */
538
- @include media-breakpoint-down(sm) {
539
- .chat-modal {
540
- z-index: $zindex-popover + 10;
10
+ #content.container {
11
+ padding-top: 0 !important;
12
+ padding-bottom: 0 !important;
541
13
  }
542
14
  }
package/scss/header.scss CHANGED
@@ -180,15 +180,6 @@
180
180
  color: $primary;
181
181
  }
182
182
  }
183
-
184
- .notif-dropdown-link {
185
- border-top: 1px solid rgba(163, 163, 163, 0.5);
186
- a {
187
- text-align: center;
188
- padding: 0.5em 0.5em;
189
- font-weight: 600;
190
- }
191
- }
192
183
  }
193
184
 
194
185
  .breadcrumb {
@@ -1,9 +1,5 @@
1
1
  // only overrides to bs5 variables here
2
2
 
3
- // TODO: decide if we should readd this, persona modified bootstrap to increase padding
4
- // $input-btn-padding-y: .625rem !default;
5
- // $input-btn-padding-x: 1rem !default;
6
-
7
3
  $navbar-nav-link-padding-x: 0.875rem!default;
8
4
 
9
5
  // persona colors
@@ -1,7 +1,7 @@
1
1
  <a class="nav-link" data-bs-toggle="dropdown" href="{relative_path}/user/{user.userslug}/chats" id="chat_dropdown" component="chat/dropdown" data-ajaxify="false" role="button">
2
2
  <i component="chat/icon" class="fa {{{ if unreadCount.chat}}}fa-comment{{{ else }}}fa-comment-o{{{ end }}} fa-fw unread-count" data-content="{unreadCount.chat}"></i> <span class="d-inline d-sm-none">[[global:header.chats]]</span>
3
3
  </a>
4
- <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="chat_dropdown">
4
+ <ul class="dropdown-menu dropdown-menu-end p-1" aria-labelledby="chat_dropdown" style="min-width: 300px; width: 300px;">
5
5
  <li>
6
6
  <ul component="chat/list" class="chat-list chats-list">
7
7
  <li class="loading-text">
@@ -9,10 +9,11 @@
9
9
  </li>
10
10
  </ul>
11
11
  </li>
12
- <li class="notif-dropdown-link">
13
- <div class="btn-group d-flex justify-content-center">
14
- <a class="btn btn-light mark-all-read" href="#" component="chats/mark-all-read"><i class="fa fa-check-double"></i> [[modules:chat.mark-all-read]]</a>
15
- <a class="btn btn-light" href="{relative_path}/user/{user.userslug}/chats"><i class="fa fa-comments"></i> [[modules:chat.see-all]]</a>
12
+ <li class="dropdown-divider"></li>
13
+ <li>
14
+ <div class="d-flex justify-content-center gap-1 flex-wrap">
15
+ <a class="btn btn-light mark-all-read flex-fill text-nowrap" href="#" component="chats/mark-all-read"><i class="fa fa-check-double"></i> [[modules:chat.mark-all-read]]</a>
16
+ <a class="btn btn-primary flex-fill text-nowrap" href="{relative_path}/user/{user.userslug}/chats"><i class="fa fa-comments"></i> [[modules:chat.see-all]]</a>
16
17
  </div>
17
18
  </li>
18
19
  </ul>
@@ -1,7 +1,7 @@
1
1
  <a href="{relative_path}/notifications" class="nav-link" data-bs-toggle="dropdown" id="notif_dropdown" data-ajaxify="false" role="button">
2
2
  <i component="notifications/icon" class="fa fa-fw {{{ if unreadCount.notification}}}fa-bell{{{ else }}}fa-bell-o{{{ end }}} unread-count" data-content="{unreadCount.notification}"></i>
3
3
  </a>
4
- <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="notif_dropdown">
4
+ <ul class="dropdown-menu dropdown-menu-end p-1" aria-labelledby="notif_dropdown" >
5
5
  <li>
6
6
  <ul component="notifications/list" class="notification-list">
7
7
  <li class="loading-text">
@@ -9,10 +9,11 @@
9
9
  </li>
10
10
  </ul>
11
11
  </li>
12
- <li class="notif-dropdown-link">
13
- <div class="btn-group d-flex justify-content-center">
14
- <a role="button" href="#" class="btn btn-light mark-all-read"><i class="fa fa-check-double"></i> [[notifications:mark-all-read]]</a>
15
- <a class="btn btn-light" href="{relative_path}/notifications"><i class="fa fa-list"></i> [[notifications:see-all]]</a>
12
+ <li class="dropdown-divider"></li>
13
+ <li>
14
+ <div class="d-flex justify-content-center gap-1 flex-wrap">
15
+ <a role="button" href="#" class="btn btn-light mark-all-read flex-fill text-nowrap"><i class="fa fa-check-double"></i> [[notifications:mark-all-read]]</a>
16
+ <a class="btn btn-primary flex-fill text-nowrap" href="{relative_path}/notifications"><i class="fa fa-list"></i> [[notifications:see-all]]</a>
16
17
  </div>
17
18
  </li>
18
19
  </ul>
@@ -176,7 +176,7 @@
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 btn-ghost border">[[search:clear-preferences]]</button>
180
180
  </li>
181
181
  </ul>
182
182
  </div>
@@ -1,38 +0,0 @@
1
- <div id="chat-modal" class="chat-modal modal hide" tabindex="-1" role="dialog" aria-labelledby="Chat" aria-hidden="true" data-backdrop="none">
2
- <div class="modal-dialog">
3
- <div class="modal-content" component="chat/message/window">
4
- <div class="modal-header d-flex">
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
- <button type="button" class="btn btn-link d-none d-md-block p-2 text-muted align-text-top" data-action="maximize" title="[[modules:chat.maximize]]" data-bs-toggle="tooltip" data-bs-placement="bottom">
7
- <span aria-hidden="true"><i class="fa fa-fw fa-expand"></i></span>
8
- <span class="sr-only">[[modules:chat.maximize]]</span>
9
- </button>
10
- <button type="button" class="btn btn-link d-none d-md-block p-2 text-muted align-text-top" data-action="minimize" title="[[modules:chat.minimize]]" data-bs-toggle="tooltip" data-bs-placement="bottom">
11
- <span aria-hidden="true"><i class="fa fa-fw fa-minus"></i></span>
12
- <span class="sr-only">[[modules:chat.minimize]]</span>
13
- </button>
14
- <!-- IMPORT partials/chats/options.tpl -->
15
-
16
- <button id="chat-close-btn" type="button" class="btn-close" aria-label="Close"></button>
17
- </div>
18
- <!-- IMPORT partials/chats/scroll-up-alert.tpl -->
19
- <div class="modal-body d-flex flex-column" style="height: 500px;">
20
- <div class="d-flex flex-grow-1 gap-1 overflow-auto" style="min-width: 0px;">
21
- <div component="chat/messages" class="expanded-chat d-flex flex-column flex-grow-1" data-roomid="{roomId}" style="min-width: 0px;">
22
- <ul component="chat/message/content" class="chat-content p-0 m-0 list-unstyled overflow-auto flex-grow-1">
23
- <!-- IMPORT partials/chats/messages.tpl -->
24
- </ul>
25
- <ul component="chat/message/search/results" class="chat-content p-0 m-0 list-unstyled overflow-auto flex-grow-1 hidden">
26
- <div component="chat/message/search/no-results" class="text-center p-4 d-flex flex-column">
27
- <div class="p-4"><i class="fa-solid fa-wind fs-2 text-muted"></i></div>
28
- <div class="text-xs fw-semibold text-muted">[[search:no-matches]]</div>
29
- </div>
30
- </ul>
31
- <!-- IMPORT partials/chats/composer.tpl -->
32
- </div>
33
- </div>
34
- </div>
35
- <div class="imagedrop"><div>[[topic:composer.drag-and-drop-images]]</div></div>
36
- </div>
37
- </div>
38
- </div>
@@ -1,51 +0,0 @@
1
- <div class="chats-full d-flex gap-1 h-100 px-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
- <div>
4
- <button component="chat/create" class="btn btn-primary btn-sm w-100">[[modules:chat.create-room]]</button>
5
- </div>
6
-
7
- {{{ if publicRooms.length }}}
8
- <hr class="my-1">
9
- <div class="d-flex flex-column gap-1">
10
- <div class="d-flex gap-1 align-items-center">
11
- <button class="btn btn-sm btn-light p-1" data-bs-toggle="collapse" data-bs-target="#public-rooms"
12
- onclick="$(this).find('i').toggleClass('fa-chevron-right').toggleClass('fa-chevron-down');"><i class="fa fa-fw fa-chevron-down"></i></button>
13
- <label class="text-sm text-muted">[[modules:chat.public-rooms, {publicRooms.length}]]</label>
14
- </div>
15
- <div id="public-rooms" component="chat/public" class="collapse show">
16
- <div class="d-flex flex-column gap-1">
17
- {{{ each publicRooms }}}
18
- <div component="chat/public/room" class="btn btn-sm btn-light d-flex justify-content-between hover-parent {{{ if ./unread}}}unread{{{ end }}}" data-roomid="{./roomId}">
19
- <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 text-primary bg-light {{{ if !./unreadCount }}}hidden{{{ end }}}">{./unreadCountText}</div></div>
20
- <div>
21
- <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>
22
- </div>
23
- </div>
24
- {{{ end }}}
25
- </div>
26
- </div>
27
- </div>
28
- {{{ end }}}
29
-
30
- <hr class="my-1">
31
- <div class="d-flex flex-column gap-1 overflow-auto">
32
- {{{ if publicRooms.length }}}
33
- <div class="d-flex gap-1 align-items-center">
34
- <button class="btn btn-sm btn-light p-1" data-bs-toggle="collapse" data-bs-target="#private-rooms"
35
- onclick="$(this).find('i').toggleClass('fa-chevron-right').toggleClass('fa-chevron-down');"><i class="fa fa-fw fa-chevron-down"></i></button>
36
- <label class="text-sm text-muted">[[modules:chat.private-rooms, {privateRoomCount}]]</label>
37
- </div>
38
- {{{ end }}}
39
-
40
- <ul id="private-rooms" component="chat/recent" class="chats-list overflow-auto mb-0 list-unstyled collapse show" data-nextstart="{nextStart}">
41
- {{{each rooms}}}
42
- <!-- IMPORT partials/chats/recent_room.tpl -->
43
- {{{end}}}
44
- </ul>
45
- </div>
46
- </div>
47
- <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}">
48
- <!-- IMPORT partials/chats/message-window.tpl -->
49
- </div>
50
- <div class="imagedrop"><div>[[topic:composer.drag-and-drop-images]]</div></div>
51
- </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 btn-sm btn-light 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 btn-light btn-sm px-2 rounded-1" 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 btn-sm btn-light px-2 {./class} align-items-center" type="button" title="{./title}" data-bs-toggle="tooltip"><i class="fa {./icon}"></i></button>
13
- {{{ end }}}
14
- <button class="btn btn-primary btn-sm px-2 rounded-1" type="button" data-action="send" title="[[modules:chat.send]]" data-bs-toggle="tooltip"><i class="fa fa-fw fa-paper-plane"></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,38 +0,0 @@
1
- <!-- IF rooms.length -->
2
- {{{each rooms}}}
3
- <li class="<!-- IF ../unread -->unread<!-- ENDIF ../unread -->" data-roomid="{rooms.roomId}">
4
- {{{each rooms.users}}}
5
- <!-- IF @first -->
6
- <div class="main-avatar">
7
- <!-- IMPORT partials/chats/user.tpl -->
8
- </div>
9
- <!-- ENDIF @first -->
10
- {{{end}}}
11
-
12
- <ul class="members">
13
- {{{each rooms.users}}}
14
- <li>
15
- <!-- IMPORT partials/chats/user.tpl -->
16
- </li>
17
- {{{end}}}
18
- </ul>
19
-
20
- <div class="notification-chat-content">
21
- <strong class="room-name">
22
- <!-- IF !rooms.lastUser.uid -->
23
- <span>[[modules:chat.no-users-in-room]]</span>
24
- <!-- ELSE -->
25
- <!-- IF rooms.roomName -->{rooms.roomName}<!-- ELSE -->{rooms.usernames}<!-- ENDIF rooms.roomName -->
26
- <!-- ENDIF !rooms.lastUser.uid -->
27
- </strong>
28
- <span class="teaser-content">
29
- <strong class="teaser-username">{rooms.teaser.user.username}:</strong>
30
- {rooms.teaser.content}
31
- </span>
32
- </div>
33
- <div class="teaser-timestamp notification-chat-controls">{rooms.teaser.timeago}</div>
34
- </li>
35
- {{{end}}}
36
- <!-- ELSE -->
37
- <li class="no_active d-flex justify-content-center p-2"><a class="text-reset" href="#">[[modules:chat.no-active]]</a></li>
38
- <!-- ENDIF rooms.length -->
@@ -1,36 +0,0 @@
1
- <div component="chat/message/window" class="d-flex flex-column h-100" >
2
- {{{ if !roomId }}}
3
- <div class="d-flex flex-column align-items-center gap-3 p-5">
4
- <i class="fa-solid fa-wind fs-2 text-muted"></i>
5
- <span class="text-muted text-sm">[[modules:chat.no-active]]</span>
6
- </div>
7
- {{{ else }}}
8
- <div component="chat/header" class="d-flex align-items-center px-md-3 gap-3">
9
- <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>
10
- <h5 component="chat/header/title" class="members flex-grow-1 fw-semibold tracking-tight mb-0 text-truncate text-nowrap">
11
- {{{ if ./roomName }}}<i class="fa {icon} text-muted"></i> {roomName}{{{ else }}}{./chatWithMessage}{{{ end}}}
12
- </h5>
13
-
14
- <!-- IMPORT partials/chats/options.tpl -->
15
- </div>
16
- <!-- IMPORT partials/chats/scroll-up-alert.tpl -->
17
- <hr class="my-1"/>
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
- <ul component="chat/message/content" class="chat-content p-0 m-0 list-unstyled overflow-auto flex-grow-1">
21
- <!-- IMPORT partials/chats/messages.tpl -->
22
- </ul>
23
- <ul component="chat/message/search/results" class="chat-content p-0 m-0 list-unstyled overflow-auto flex-grow-1 hidden">
24
- <div component="chat/message/search/no-results" class="text-center p-4 d-flex flex-column">
25
- <div class="p-4"><i class="fa-solid fa-wind fs-2 text-muted"></i></div>
26
- <div class="text-xs fw-semibold text-muted">[[search:no-matches]]</div>
27
- </div>
28
- </ul>
29
- <!-- IMPORT partials/chats/composer.tpl -->
30
- </div>
31
-
32
- <!-- IMPORT partials/chats/user-list.tpl -->
33
- <!-- IMPORT partials/chats/pinned-messages.tpl -->
34
- </div>
35
- {{{ end }}}
36
- </div>
@@ -1,71 +0,0 @@
1
- <li component="chat/message" class="chat-message mx-2 pe-2 fw-light clear{{{ if messages.deleted }}} deleted{{{ end }}} {{{ if messages.pinned}}} pinned{{{ 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">
8
- <a href="{config.relative_path}/user/{messages.fromUser.userslug}">{buildAvatar(messages.fromUser, "32px", true, "not-responsive")}</a>
9
- <span class="chat-user fw-bold"><a href="{config.relative_path}/user/{messages.fromUser.userslug}">{messages.fromUser.displayname}</a></span>
10
- <!-- IF ../fromUser.banned -->
11
- <span class="badge bg-danger">[[user:banned]]</span>
12
- <!-- END -->
13
- <!-- IF ../fromUser.deleted -->
14
- <span class="badge bg-danger">[[user:deleted]]</span>
15
- <!-- END -->
16
- <small class="chat-timestamp text-muted ms-2 timeago" title="{messages.timestampISO}"></small>
17
-
18
- <div component="chat/message/edited" class="text-muted float-end {{{ 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">
22
- {messages.content}
23
- </div>
24
- <!-- IMPORT partials/chats/reactions.tpl -->
25
- <div component="chat/message/controls" class="btn-group controls">
26
- <!-- IMPORT partials/chats/add-reaction.tpl -->
27
- <button class="btn btn-sm btn-link" data-action="reply" title="[[topic:reply]]"><i class="fa fa-reply"></i></button>
28
-
29
- <div class="btn-group d-inline-block">
30
- <button class="btn btn-sm btn-link dropdown-toggle" data-bs-toggle="dropdown"><i class="fa fa-ellipsis" type="button"></i></button>
31
- <ul class="dropdown-menu dropdown-menu-end p-1 text-sm list-unstyled">
32
- {{{ if (isAdminOrGlobalMod || (!config.disableChatMessageEditing && messages.self)) }}}
33
- <li>
34
- <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>
35
- </li>
36
- <li>
37
- <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>
38
- </li>
39
- <li>
40
- <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>
41
- </li>
42
- {{{ end }}}
43
-
44
- {{{ if (isAdminOrGlobalMod || isOwner )}}}
45
- <li>
46
- <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>
47
- </li>
48
- <li>
49
- <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>
50
- </li>
51
- <li class="dropdown-divider"></li>
52
- {{{ end }}}
53
-
54
- {{{ if isAdminOrGlobalMod }}}
55
- <li>
56
- <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>
57
- </li>
58
- {{{ end }}}
59
-
60
- <li>
61
- <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>
62
- </li>
63
-
64
- <li>
65
- <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>
66
- </li>
67
- </ul>
68
- </div>
69
- </div>
70
- </div>
71
- </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}}}
@@ -1,99 +0,0 @@
1
- <div class="d-flex gap-1 align-items-stretch">
2
- <!-- search -->
3
- <button class="btn btn-sm btn-light" 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
- <!-- notification dropdown -->
14
- <div class="dropdown d-flex" data-manual-tooltip="1" title="[[modules:chat.notification-settings]]" component="chat/notification/setting">
15
- <button class="btn btn-sm btn-light position-relative" data-bs-toggle="dropdown">
16
- <i class="fa fa-bell text-muted"></i>
17
- <span class="position-absolute top-0 end-0 text-xs text-muted opacity-75" style="font-size: 10px!important; padding: 1px; line-height: 10px;">
18
- <i component="chat/notification/setting/icon" class="fa {notificationOptionsIcon}"></i>
19
- </span>
20
- </button>
21
- <ul class="dropdown-menu dropdown-menu-end p-1 text-sm">
22
- {{{ each notificationOptions }}}
23
- <li>
24
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" data-value="{./value}" data-icon="{./icon}">
25
- <div class="d-flex flex-column gap-1">
26
- <div class="d-flex align-items-center gap-2">
27
- <div class="flex-grow-1">{./label}</div>
28
- <i class="flex-shrink-0 fa fa-fw fa-check {{{ if !./selected }}}hidden{{{ end }}}"></i>
29
- </div>
30
- {{{ if @first}}}
31
- <div component="chat/notification/setting/sub-label" class="text-sm text-muted">{./subLabel}</div>
32
- {{{ end }}}
33
- </div>
34
- </a>
35
- </li>
36
-
37
- {{{ if @first }}}
38
- <li><hr class="dropdown-divider"></li>
39
- {{{ end }}}
40
- {{{ end }}}
41
- </ul>
42
- </div>
43
-
44
- <!-- pinned messages -->
45
- <button component="chat/pinned/messages/btn" class="btn btn-sm btn-light" title="[[modules:chat.pinned-messages]]" data-bs-toggle="tooltip" data-bs-placement="bottom">
46
- <i class="fa fa-thumb-tack text-muted"></i>
47
- </button>
48
-
49
- <!-- manage/options dropdown -->
50
- <div class="dropdown d-flex" data-manual-tooltip="1" title="[[modules:chat.options]]">
51
- <button class="btn btn-sm btn-light" data-bs-toggle="dropdown" component="chat/controlsToggle">
52
- <i class="fa fa-gear text-muted"></i>
53
- </button>
54
- <ul class="dropdown-menu dropdown-menu-end p-1 text-sm" component="chat/controls">
55
- <li>
56
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" data-action="manage">
57
- <i class="fa fa-fw text-muted fa-cog"></i> [[modules:chat.manage-room]]
58
- </a>
59
- </li>
60
- {{{ if isOwner }}}
61
- <li>
62
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" data-action="rename">
63
- <i class="fa fa-fw text-muted fa-edit"></i> [[modules:chat.rename-room]]
64
- </a>
65
- </li>
66
- {{{ end }}}
67
- <li>
68
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" data-action="leave">
69
- <i class="fa fa-fw text-muted fa-sign-out"></i> [[modules:chat.leave-room]]
70
- </a>
71
- </li>
72
- {{{ if (public && isAdmin) }}}
73
- <li>
74
- <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" data-action="delete">
75
- <i class="fa fa-fw text-danger fa-trash"></i> [[modules:chat.delete-room]]
76
- </a>
77
- </li>
78
- {{{ end }}}
79
- </ul>
80
- </div>
81
-
82
- <!-- users toggle -->
83
- {{{ if users.length }}}
84
- <div component="chat/user/list/btn" class="btn btn-sm btn-light d-none d-lg-flex flex-nowrap gap-3 align-items-center" title="[[modules:chat.view-users-list]]" data-bs-toggle="tooltip" data-bs-placement="bottom">
85
- <div class="d-flex text-nowrap">
86
- {{{ if ./users.0 }}}
87
- <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>
88
- {{{ end }}}
89
- {{{ if ./users.1 }}}
90
- <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>
91
- {{{ end }}}
92
- {{{ if ./users.2 }}}
93
- <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>
94
- {{{ end }}}
95
- </div>
96
- {./userCount}
97
- </div>
98
- {{{ end }}}
99
- </div>
@@ -1,11 +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 btn-sm btn-light align-items-start d-flex flex-row gap-2 text-start 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
- <a href="{config.relative_path}/user/{messages.parent.user.userslug}" class="text-decoration-none lh-sm">{buildAvatar(messages.parent.user, "14px", true, "not-responsive")}</a>
6
- <a class="chat-user fw-semibold" href="{config.relative_path}/user/{messages.parent.user.userslug}">{messages.parent.user.displayname}</a>
7
- <span class="chat-timestamp text-muted timeago text-nowrap hidden" title="{messages.parent.timestampISO}"></span>
8
- </div>
9
- <div component="chat/message/parent/content" class="text-muted line-clamp-1 text-sm w-100">{messages.parent.content}</div>
10
- </div>
11
- </div>
@@ -1,33 +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
-
14
- <div component="chat/message/edited" class="text-muted float-end {{{ if !messages.edited }}}hidden{{{ end }}}" title="[[global:edited-timestamp, {isoTimeToLocaleString(messages.editedISO, config.userLang)}]]"><i class="fa fa-edit"></i></span></div>
15
- </div>
16
- <div class="message-body-wrapper">
17
- <div component="chat/message/body" class="message-body ps-0 py-0 overflow-auto text-break">
18
- {messages.content}
19
- </div>
20
- <div component="chat/message/controls" class="position-relative">
21
- <div class="btn-group border shadow-sm controls position-absolute bg-body end-0" style="bottom:1rem;">
22
- {{{ if (isAdminOrGlobalMod || (!config.disableChatMessageEditing && messages.self)) }}}
23
- <button class="btn btn-sm btn-link" data-action="edit" title="[[topic:edit]]"><i class="fa fa-pencil"></i></button>
24
- {{{ end }}}
25
- {{{ if (isAdminOrGlobalMod || isOwner )}}}
26
- <button class="btn btn-sm btn-link" data-action="pin" title="[[modules:chat.pin-message]]"><i class="fa fa-thumbtack"></i></button>
27
- <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>
28
- {{{ end }}}
29
- </div>
30
- </div>
31
- </div>
32
- </li>
33
- {{{ end }}}
@@ -1,10 +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"></ul>
10
- </div>
@@ -1 +0,0 @@
1
- <!-- This partial intentionally left blank; overwritten by nodebb-plugin-reactions -->
@@ -1,35 +0,0 @@
1
- <li component="chat/recent/room" data-roomid="{rooms.roomId}" class="<!-- IF rooms.unread -->unread<!-- ENDIF rooms.unread -->">
2
- {{{each rooms.users}}}
3
- <!-- IF @first -->
4
- <div class="main-avatar me-2">
5
- <!-- IMPORT partials/chats/user.tpl -->
6
- </div>
7
- <!-- ENDIF @first -->
8
- {{{end}}}
9
-
10
- {{{ if rooms.users.length }}}
11
- <ul class="members">
12
- {{{each rooms.users}}}
13
- <li>
14
- <!-- IMPORT partials/chats/user.tpl -->
15
- </li>
16
- {{{end}}}
17
- </ul>
18
- {{{ end }}}
19
-
20
- <div class="notification-chat-content flex-grow-1">
21
- <div component="chat/room/title" class="room-name fw-semibold">
22
- {{{ if ./roomName}}}
23
- {./roomName}
24
- {{{ else }}}
25
- {{{ if !./lastUser.uid }}}
26
- <div class="p-3 text-center h-100">
27
- <span>[[modules:chat.no-users-in-room]]</span>
28
- </div>
29
- {{{ else }}}
30
- {./usernames}
31
- {{{ end }}}
32
- {{{ end }}}
33
- </div>
34
- </div>
35
- </li>
@@ -1,3 +0,0 @@
1
- <div class="position-relative">
2
- <div component="chat/messages/scroll-up-alert" class="py-1 mt-1 position-absolute start-50 top-50 translate-middle text-sm scroll-up-alert alert alert-info d-none d-md-block text-nowrap hidden" role="button" style="z-index: 500;"><i class="fa fa-fw fa-arrow-down"></i> [[modules:chat.scroll-up-alert]]</div>
3
- </div>
@@ -1,3 +0,0 @@
1
- <li component="chat/system-message" class="system-message fs-6 py-3 clear" data-index="{messages.index}" data-mid="{messages.messageId}" data-uid="{messages.fromuid}" data-index="{messages.index}" data-self="{messages.self}" data-break="0" data-timestamp="{messages.timestamp}">
2
- [[modules:chat.system.{messages.content}, {messages.fromUser.username}, {messages.timestampISO}]]
3
- </li>
@@ -1,11 +0,0 @@
1
- <div component="chat/user/list" class="border-start hidden d-flex flex-column gap-1 p-1 overflow-auto" style="min-width:240px; width: 240px;">
2
- {{{ each users }}}
3
- <a data-index="{./index}" data-uid="{./uid}" class="btn btn-sm btn-light d-flex justify-content-start align-items-center gap-2" href="{config.relative_path}/uid/{./uid}">
4
- <div>{buildAvatar(users, "24px", true)}</div>
5
- <div class="d-flex gap-1 flex-grow-1 text-nowrap text-truncate">
6
- <span component="chat/user/list/username" class="text-truncate">{./username}</span>
7
- {{{ if ./isOwner }}}<span><i class="fa fa-star text-warning" data-bs-toggle="tooltip" title="[[modules:chat.owner]]"></i></span>{{{ end }}}
8
- </div>
9
- </a>
10
- {{{ end }}}
11
- </div>
@@ -1 +0,0 @@
1
- <a href="{config.relative_path}/user/{rooms.users.userslug}">{buildAvatar(rooms.users, "28px", true)}</a>