nodebb-theme-persona 14.2.42 → 15.0.0-beta.2

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 (55) hide show
  1. package/package.json +2 -2
  2. package/scss/account.scss +0 -139
  3. package/scss/persona.scss +0 -1
  4. package/templates/account/blocks.tpl +1 -1
  5. package/templates/account/categories.tpl +1 -1
  6. package/templates/account/consent.tpl +2 -0
  7. package/templates/account/info.tpl +7 -7
  8. package/templates/account/profile.tpl +69 -23
  9. package/templates/account/settings.tpl +6 -6
  10. package/templates/account/tags.tpl +1 -1
  11. package/templates/account/uploads.tpl +1 -1
  12. package/templates/category.tpl +2 -2
  13. package/templates/header.tpl +2 -2
  14. package/templates/modules/usercard.tpl +1 -1
  15. package/templates/notifications.tpl +2 -2
  16. package/templates/partials/account/category-item.tpl +2 -2
  17. package/templates/partials/account/header.tpl +11 -11
  18. package/templates/partials/account/menu.tpl +3 -3
  19. package/templates/partials/account/session-list.tpl +1 -1
  20. package/templates/partials/breadcrumbs.tpl +1 -1
  21. package/templates/partials/buttons/newTopic.tpl +1 -1
  22. package/templates/partials/categories/item.tpl +3 -3
  23. package/templates/partials/categories/lastpost.tpl +2 -2
  24. package/templates/partials/categories/link.tpl +5 -11
  25. package/templates/partials/chats-menu.tpl +1 -1
  26. package/templates/partials/cookie-consent.tpl +2 -2
  27. package/templates/partials/header/user-menu.tpl +1 -1
  28. package/templates/partials/menu.tpl +6 -6
  29. package/templates/partials/notifications_list.tpl +3 -3
  30. package/templates/partials/posts_list_item.tpl +2 -2
  31. package/templates/partials/quick-category-search-results.tpl +2 -2
  32. package/templates/partials/quick-search-results.tpl +2 -2
  33. package/templates/partials/search-filters.tpl +2 -2
  34. package/templates/partials/search-results.tpl +5 -5
  35. package/templates/partials/tags_list.tpl +4 -1
  36. package/templates/partials/topic/event.tpl +1 -1
  37. package/templates/partials/topic/navigation-post.tpl +2 -2
  38. package/templates/partials/topic/necro-post.tpl +1 -1
  39. package/templates/partials/topic/post.tpl +5 -5
  40. package/templates/partials/topic/quickreply.tpl +1 -1
  41. package/templates/partials/topics_list.tpl +5 -5
  42. package/templates/partials/users/item.tpl +1 -1
  43. package/templates/topic.tpl +2 -10
  44. package/templates/world.tpl +4 -4
  45. package/scss/groups.scss +0 -111
  46. package/templates/groups/details.tpl +0 -114
  47. package/templates/groups/list.tpl +0 -46
  48. package/templates/groups/members.tpl +0 -6
  49. package/templates/partials/groups/admin.tpl +0 -96
  50. package/templates/partials/groups/badge.tpl +0 -1
  51. package/templates/partials/groups/invited.tpl +0 -33
  52. package/templates/partials/groups/list.tpl +0 -21
  53. package/templates/partials/groups/memberlist.tpl +0 -45
  54. package/templates/partials/groups/pending.tpl +0 -28
  55. package/templates/partials/toast.tpl +0 -19
@@ -1,114 +0,0 @@
1
- <div component="groups/container" class="groups details">
2
-
3
- <div component="groups/cover" style="background-image: url({escape(group.cover:url)}?{config.cache-buster}); background-position: {group.cover:position};">
4
- {{{ if group.isOwner }}}
5
- <div class="controls">
6
- <span class="upload"><i class="fa fa-fw fa-4x fa-upload"></i></span>
7
- <span class="resize"><i class="fa fa-fw fa-4x fa-arrows"></i></span>
8
- <span class="remove"><i class="fa fa-fw fa-4x fa-times"></i></span>
9
- </div>
10
- <div class="save">[[groups:cover-save]] <i class="fa fa-fw fa-floppy-o"></i></div>
11
- <div class="indicator">[[groups:cover-saving]] <i class="fa fa-fw fa-refresh fa-spin"></i></div>
12
- {{{ end }}}
13
- </div>
14
-
15
- <div>
16
- <!-- IMPORT partials/breadcrumbs.tpl -->
17
- </div>
18
-
19
- <div class="d-flex flex-column flex-md-row justify-content-md-between pb-2 mb-4 mt-2 border-bottom gap-3">
20
- <div class="d-flex flex-column gap-2">
21
- <div class="d-flex flex-column flex-md-row align-items-md-center gap-2">
22
- <h3 class="mb-0 text-capitalize">{generateGroupDisplayName(group)}</h3>
23
- <div>
24
- {{{ if group.private }}}<span class="badge text-bg-light border border-1">[[groups:details.private]]</span>{{{ end }}}
25
- {{{ if group.hidden }}}<span class="badge text-bg-light border border-1">[[groups:details.hidden]]</span>{{{ end }}}
26
- </div>
27
- </div>
28
- <div>
29
- {group.descriptionParsed}
30
- </div>
31
- </div>
32
- <div class="d-flex gap-2 align-items-start">
33
- {{{ if loggedIn }}}
34
- {membershipBtn(group)}
35
- {{{ end }}}
36
- {{{ if isAdmin }}}
37
- <a href="{config.relative_path}/admin/manage/groups/{group.slug}" target="_blank" class="btn btn-light text-nowrap"><i class="fa fa-gear"></i> [[user:edit]]</a>
38
- {{{ end }}}
39
- </div>
40
- </div>
41
-
42
- <div class="text-sm mb-3 nav d-flex flex-row flex-wrap gap-1 justify-content-end">
43
- <button data-bs-toggle="tab" data-bs-target="#groups-posts" class="btn btn-ghost btn-sm text-start d-flex align-items-center ff-secondary fw-semibold {{{ if template.groups/details }}}active{{{ end }}}">
44
- <div class="flex-grow-1">[[global:posts]]</div>
45
- </button>
46
- <button data-bs-toggle="tab" data-bs-target="#groups-members" class="btn btn-ghost btn-sm text-start d-flex align-items-center ff-secondary fw-semibold gap-2">
47
- <div class="flex-grow-1">[[groups:members]]</div>
48
- <span component="group/member/count" class="flex-shrink-0 text-xs" title="{group.memberCount}">{humanReadableNumber(group.memberCount)}</span>
49
- </button>
50
-
51
- {{{ if group.isOwner }}}
52
- <button data-bs-toggle="tab" data-bs-target="#groups-pending" class="btn btn-ghost btn-sm text-start d-flex align-items-center ff-secondary fw-semibold gap-2">
53
- <div class="flex-grow-1">[[groups:details.pending]]</div>
54
- <span component="group/pending/count" class="flex-shrink-0 text-xs" title="{group.pending.length}">{humanReadableNumber(group.pending.length)}</span>
55
- </button>
56
-
57
- <button data-bs-toggle="tab" data-bs-target="#groups-invited" class="btn btn-ghost btn-sm text-start d-flex align-items-center ff-secondary fw-semibold gap-2">
58
- <div class="flex-grow-1">[[groups:details.invited]]</div>
59
- <span component="group/invited/count" class="flex-shrink-0 text-xs" title="{group.invited.length}">{humanReadableNumber(group.invited.length)}</span>
60
- </button>
61
-
62
- <button data-bs-toggle="tab" data-bs-target="#groups-admin" class="btn btn-ghost btn-sm text-start d-flex align-items-center ff-secondary fw-semibold">
63
- <div class="flex-grow-1">[[global:header.admin]]</div>
64
- </button>
65
- {{{ end }}}
66
- </div>
67
-
68
- <div class="d-flex flex-column flex-md-row">
69
- <div data-widget-area="left">
70
- {{{each widgets.left}}}
71
- {{widgets.left.html}}
72
- {{{end}}}
73
- </div>
74
-
75
- <div class="flex-grow-1" style="min-width:0;">
76
- <div class="tab-content">
77
- <div class="tab-pane fade show active" id="groups-posts" role="tabpanel">
78
- <h3 class="fw-semibold fs-5">[[global:posts]]</h3>
79
- {{{ if !posts.length }}}
80
- <div class="alert alert-info my-2">[[groups:details.has-no-posts]]</div>
81
- {{{ end }}}
82
- <!-- IMPORT partials/posts_list.tpl -->
83
- </div>
84
- <div class="tab-pane fade" id="groups-members" role="tabpanel">
85
- <h3 class="fw-semibold fs-5 mb-3">[[groups:details.members]]</h3>
86
-
87
- <!-- IMPORT partials/groups/memberlist.tpl -->
88
- </div>
89
- {{{ if group.isOwner }}}
90
- <div class="tab-pane fade" id="groups-pending" role="tabpanel">
91
- <h3 class="fw-semibold fs-5 mb-3">[[groups:details.pending]]</h3>
92
- <!-- IMPORT partials/groups/pending.tpl -->
93
- </div>
94
-
95
- <div class="tab-pane fade" id="groups-invited" role="tabpanel">
96
- <h3 class="fw-semibold fs-5 mb-3">[[groups:details.invited]]</h3>
97
- <!-- IMPORT partials/groups/invited.tpl -->
98
- </div>
99
-
100
- <div class="tab-pane fade" id="groups-admin" role="tabpanel">
101
- <h3 class="fw-semibold fs-5 mb-3">[[groups:details.owner-options]]</h3>
102
- <!-- IMPORT partials/groups/admin.tpl -->
103
- </div>
104
- {{{ end }}}
105
- </div>
106
- </div>
107
-
108
- <div data-widget-area="right">
109
- {{{each widgets.right}}}
110
- {{widgets.right.html}}
111
- {{{end}}}
112
- </div>
113
- </div>
114
- </div>
@@ -1,46 +0,0 @@
1
- <!-- IMPORT partials/breadcrumbs.tpl -->
2
- <div data-widget-area="header">
3
- {{{each widgets.header}}}
4
- {{widgets.header.html}}
5
- {{{end}}}
6
- </div>
7
- <div class="groups list">
8
- <div class="d-flex justify-content-between align-items-center gap-3 flex-wrap">
9
- <div>
10
- {{{ if allowGroupCreation }}}
11
- <button class="btn btn-sm btn-primary" data-action="new"><i class="fa fa-plus"></i> [[groups:new-group]]</button>
12
- {{{ end }}}
13
- </div>
14
-
15
- <div class="d-flex gap-3 align-items-center">
16
- <select class="form-select form-select-sm" id="search-sort">
17
- <option value="alpha">[[groups:details.group-name]]</option>
18
- <option value="count">[[groups:details.member-count]]</option>
19
- <option value="date">[[groups:details.creation-date]]</option>
20
- </select>
21
-
22
- <div class="input-group">
23
- <input type="text" class="form-control form-control-sm" placeholder="[[global:search]]" name="query" value="" id="search-text">
24
- <button id="search-button" class="btn btn-sm btn-primary">
25
- <i class="fa fa-search"></i>
26
- </button>
27
- </div>
28
- </div>
29
- </div>
30
-
31
- <hr />
32
-
33
- <div component="groups/container" class="row" id="groups-list">
34
- {{{ if groups.length }}}
35
- <!-- IMPORT partials/groups/list.tpl -->
36
- {{{ else }}}
37
- <div class="col-12">
38
- <div class="alert alert-warning">
39
- [[groups:no-groups-found]]
40
- </div>
41
- </div>
42
- {{{ end }}}
43
- </div>
44
-
45
- <!-- IMPORT partials/paginator.tpl -->
46
- </div>
@@ -1,6 +0,0 @@
1
- <!-- IMPORT partials/breadcrumbs.tpl -->
2
- <div class="users">
3
- <!-- IMPORT partials/users_list.tpl -->
4
-
5
- <!-- IMPORT partials/paginator.tpl -->
6
- </div>
@@ -1,96 +0,0 @@
1
- <form component="groups/settings" role="form">
2
- <div class="mb-3">
3
- <label class="form-label" for="name">[[groups:details.group-name]]</label>
4
- <input <!-- IF group.system -->readonly<!-- ENDIF group.system --> class="form-control" name="name" id="name" type="text" value="{group.displayName}" />
5
- </div>
6
- <div class="mb-3">
7
- <label class="form-label" for="description">[[groups:details.description]]</label>
8
- <textarea class="form-control" name="description" id="description" type="text" maxlength="255">{group.description}</textarea>
9
- </div>
10
-
11
- <hr />
12
- <div class="mb-3">
13
- <label class="form-label" for="memberPostCids">[[groups:details.member-post-cids]]</label>
14
- <div class="row">
15
- <div class="col-md-6">
16
- <input id="memberPostCids" type="text" class="form-control" value="{group.memberPostCids}">
17
- </div>
18
- <div class="col-md-6 member-post-cids-selector">
19
- <!-- IMPORT partials/category/selector-dropdown-left.tpl -->
20
- </div>
21
- </div>
22
- </div>
23
-
24
- <hr />
25
-
26
- <div class="mb-3 user-title-option">
27
- <label class="form-label" for="userTitle">[[groups:details.badge-text]]</label>
28
- <div class="d-flex gap-2">
29
- <input component="groups/userTitleOption" class="form-control" name="userTitle" id="userTitle" type="text" maxlength="40" value="{group.userTitleEscaped}"<!-- IF !group.userTitleEnabled --> disabled<!-- ENDIF !group.userTitleEnabled --> />
30
- <button component="groups/userTitleOption" type="button" class="btn btn-outline-secondary btn-sm text-nowrap" data-action="icon-select"<!-- IF !group.userTitleEnabled --> disabled<!-- ENDIF !group.userTitleEnabled -->>[[groups:details.change-icon]]</button>
31
- </div>
32
- </div>
33
-
34
- <div class="mb-3 user-title-option">
35
- <div class="d-flex align-items-center gap-3">
36
- <label class="form-label mb-0">[[groups:details.badge-preview]]</label>
37
- <span class="badge rounded-1 text-uppercase text-truncate rounded-1 d-flex align-items-center gap-1 {{{ if !group.userTitleEnabled }}} hide{{{ end }}}" style="max-width:150px; color: {group.textColor}; background-color: {group.labelColor}"><i class="fa {{{ if (group.icon && (group.icon != "fa-nbb-none")) }}}{group.icon}{{{ else }}}hidden{{{ end }}}"></i><span class="badge-text">{{{ if group.userTitle }}}{group.userTitle}{{{ end }}}</span></span>
38
- </div>
39
- <hr/>
40
- <div class="d-flex flex-column gap-2">
41
- <div class="d-flex align-items-center gap-2">
42
- <label class="form-label mb-0" for="labelColor" class="badge-color-label">[[groups:details.change-label-colour]]</label>
43
- <input component="groups/userTitleOption" type="color" name="labelColor" id="labelColor" value="<!-- IF group.labelColor -->{group.labelColor}<!-- ENDIF group.labelColor -->" />
44
- </div>
45
- <div class="d-flex align-items-center gap-2">
46
- <label class="form-label mb-0" for="textColor" class="badge-color-label">[[groups:details.change-text-colour]]</label>
47
- <input component="groups/userTitleOption" type="color" name="textColor" id="textColor" value="<!-- IF group.textColor -->{group.textColor}<!-- ENDIF group.textColor -->" />
48
- </div>
49
- <input type="hidden" name="icon" value="<!-- IF group.icon -->{group.icon}<!-- ENDIF group.icon -->" />
50
- </div>
51
- <div id="icons" class="hidden">
52
- <div class="icon-container">
53
- <div class="row nbb-fa-icons">
54
- <!-- IMPORT partials/fontawesome.tpl -->
55
- </div>
56
- </div>
57
- </div>
58
- </div>
59
- <hr />
60
- <div class="form-check">
61
- <label class="form-check-label" for="userTitleEnabled">[[groups:details.userTitleEnabled]]</label>
62
- <input class="form-check-input" name="userTitleEnabled" id="userTitleEnabled" type="checkbox"<!-- IF group.userTitleEnabled --> checked<!-- ENDIF group.userTitleEnabled -->>
63
- </div>
64
- <div class="form-check">
65
- <label class="form-check-label" for="private">[[groups:details.private]]</label>
66
- <input class="form-check-input" name="private" id="private" type="checkbox"<!-- IF group.private --> checked<!-- ENDIF group.private -->>
67
- <!-- IF !allowPrivateGroups -->
68
- <p class="form-text">
69
- [[groups:details.private-system-help]]
70
- </p>
71
- <!-- ENDIF !allowPrivateGroups -->
72
- <p class="form-text">
73
- [[groups:details.private-help]]
74
- </p>
75
- </div>
76
- <div class="form-check">
77
- <label class="form-check-label" for="disableJoinRequests">[[groups:details.disableJoinRequests]]</label>
78
- <input class="form-check-input" name="disableJoinRequests" id="disableJoinRequests" type="checkbox"<!-- IF group.disableJoinRequests --> checked<!-- ENDIF group.disableJoinRequests -->>
79
- </div>
80
- <div class="form-check">
81
- <label class="form-check-label" for="disableLeave">[[groups:details.disableLeave]]</label>
82
- <input class="form-check-input" name="disableLeave" id="disableLeave" type="checkbox"{{{if group.disableLeave}}} checked{{{end}}}>
83
- </div>
84
- <div class="form-check">
85
- <label class="form-check-label" for="hidden">[[groups:details.hidden]]</label>
86
- <input class="form-check-input" name="hidden" id="hidden" type="checkbox"<!-- IF group.hidden --> checked<!-- ENDIF group.hidden -->>
87
- <p class="form-text">
88
- [[groups:details.hidden-help]]
89
- </p>
90
- </div>
91
-
92
- <div class="d-flex justify-content-end gap-2">
93
- <button class="btn btn-link text-danger" type="button" data-action="delete">[[groups:details.delete-group]]</button>
94
- <button class="btn btn-primary" type="button" data-action="update">[[global:save-changes]]</button>
95
- </div>
96
- </form>
@@ -1 +0,0 @@
1
- <a href="{config.relative_path}/groups/{./slug}" class="badge rounded-1 text-uppercase text-truncate text-decoration-none d-flex align-items-center gap-1" style="line-height: normal; 150px;color:{./textColor};background-color: {./labelColor};"><i class="fa {{{ if (./icon && (./icon != "fa-nbb-none")) }}}{./icon}{{{else}}}hidden{{{ end }}}"></i><span class="badge-text">{{{ if ./userTitle }}}{./userTitle}{{{ end }}}</span></a>
@@ -1,33 +0,0 @@
1
- <label class="text-xs text-muted">[[groups:invited.search]]</label>
2
- <div class="input-group mb-2">
3
- <input class="form-control" type="text" component="groups/members/invite"/>
4
- <span class="input-group-text search-button"><i class="fa fa-search"></i></span>
5
- </div>
6
-
7
- <div class="mb-2">
8
- <label class="text-xs text-muted">[[groups:bulk-invite-instructions]]</label>
9
- <textarea class="form-control" component="groups/members/bulk-invite"></textarea>
10
- </div>
11
-
12
- <div class="mb-2 clearfix">
13
- <button type="button" class="btn btn-primary btn-sm float-end" component="groups/members/bulk-invite-button">[[groups:bulk-invite]]</button>
14
- </div>
15
-
16
- <div style="max-height: 500px; overflow: auto;">
17
- <div component="groups/invited/alert" class="alert alert-info {{{ if group.invited.length }}}hidden{{{ end }}}">[[groups:invited.none]]</div>
18
- <table component="groups/invited" class="table table-hover">
19
- <tbody>
20
- {{{ each group.invited }}}
21
- <tr data-uid="{group.invited.uid}" class="align-middle">
22
- <td class="member-name p-2 d-flex align-items-center justify-content-between">
23
- <div class="d-flex align-items-center gap-2">
24
- <a class="text-decoration-none" href="{config.relative_path}/user/{group.invited.userslug}">{buildAvatar(group.invited, "24px", true)}</a>
25
- <a href="{config.relative_path}/user/{group.invited.userslug}">{group.invited.username}</a>
26
- </div>
27
- <button class="btn btn-outline-secondary btn-sm text-nowrap" data-action="rescindInvite">[[groups:invited.uninvite]]</button>
28
- </td>
29
- </tr>
30
- {{{ end }}}
31
- </tbody>
32
- </table>
33
- </div>
@@ -1,21 +0,0 @@
1
- {{{each groups}}}
2
- <div class="col-lg-4 col-md-6 col-sm-12 mb-3" component="groups/summary" data-slug="{groups.slug}">
3
- <div class="card h-100">
4
- <a href="{config.relative_path}/groups/{groups.slug}" class="card-header list-cover" style="{{{ if groups.cover:thumb:url }}}background-image: url({./cover:thumb:url});background-size: cover; min-height: 125px; background-position: {./cover:position}{{{ end }}}">
5
- <h5 class="card-title d-inline-block mw-100 px-2 py-1 text-truncate text-capitalize fw-bold rounded-1" style="color: white;background-color: rgba(0,0,0,0.5);">{generateGroupDisplayName(@value)} <small>{formattedNumber(groups.memberCount)}</small></h5>
6
- </a>
7
- <div class="card-body">
8
- <p class="text-muted">
9
- {./description}
10
- </p>
11
- <ul class="members list-unstyled d-flex align-items-center gap-2 flex-wrap">
12
- {{{each groups.members}}}
13
- <li>
14
- <a href="{config.relative_path}/user/{groups.members.userslug}">{buildAvatar(groups.members, "24px", true)}</a>
15
- </li>
16
- {{{end}}}
17
- </ul>
18
- </div>
19
- </div>
20
- </div>
21
- {{{end}}}
@@ -1,45 +0,0 @@
1
- <div class="d-flex mb-3">
2
- <!-- IF group.isOwner -->
3
- <div class="flex-shrink-0">
4
- <button component="groups/members/add" type="button" class="btn btn-primary me-3" title="[[groups:details.add-member]]"><i class="fa fa-user-plus"></i></button>
5
- </div>
6
- <!-- ENDIF group.isOwner -->
7
- <div class="flex-grow-1">
8
- <div class="input-group">
9
- <input class="form-control" type="text" component="groups/members/search" placeholder="[[global:search]]"/>
10
- <span class="input-group-text search-button"><i class="fa fa-search"></i></span>
11
- </div>
12
- </div>
13
- </div>
14
-
15
- <div component="groups/members" data-nextstart="{group.membersNextStart}" style="max-height: 500px; overflow: auto;">
16
- <table class="table table-hover">
17
- <tbody>
18
- {{{each group.members}}}
19
- <tr class="w-100" data-uid="{group.members.uid}" data-isowner="{{{ if group.members.isOwner }}}1{{{ else }}}0{{{ end }}}">
20
- <td class="member-name p-2 w-100 ">
21
- <div class="d-flex align-items-center justify-content-between">
22
- <div class="d-flex align-items-center gap-2">
23
- <a class="text-decoration-none" href="{config.relative_path}/user/{group.members.userslug}">{buildAvatar(group.members, "24px", true)}</a>
24
- <a class="align-text-top" href="{config.relative_path}/user/{group.members.userslug}">{group.members.username}</a>
25
- <i component="groups/owner/icon" title="[[groups:owner]]" class="user-owner-icon fa fa-star align-text-top text-warning {{{ if !group.members.isOwner }}}invisible{{{ end }}}"></i>
26
- </div>
27
-
28
- {{{ if group.isOwner }}}
29
- <div class="owner-controls d-flex gap-1">
30
- <a class="btn btn-light btn-sm" href="#" data-action="toggleOwnership" title="[[groups:details.grant]]">
31
- <i class="fa fa-star text-warning"></i>
32
- </a>
33
-
34
- <a class="btn btn-light btn-sm" href="#" data-action="kick" title="[[groups:details.kick]]">
35
- <i class="fa fa-ban text-danger"></i>
36
- </a>
37
- </div>
38
- {{{ end }}}
39
- </div>
40
- </td>
41
- </tr>
42
- {{{end}}}
43
- </tbody>
44
- </table>
45
- </div>
@@ -1,28 +0,0 @@
1
- {{{ if group.pending.length }}}
2
- <div class="d-flex justify-content-end gap-2 mb-3">
3
- <button class="btn btn-danger btn-sm" data-action="rejectAll">[[groups:pending.reject-all]]</button>
4
- <button class="btn btn-success btn-sm" data-action="acceptAll">[[groups:pending.accept-all]]</button>
5
- </div>
6
- {{{ end }}}
7
-
8
- <div style="max-height: 500px;overflow: auto;">
9
- <div component="groups/pending/alert" class="alert alert-info {{{ if group.pending.length }}}hidden{{{ end }}}">[[groups:pending.none]]</div>
10
- <table component="groups/pending" class="table table-hover">
11
- <tbody>
12
- {{{ each group.pending }}}
13
- <tr data-uid="{group.pending.uid}" class="align-middle">
14
- <td class="member-name p-2 d-flex align-items-center justify-content-between">
15
- <div class="d-flex gap-2">
16
- <a class="text-decoration-none" href="{config.relative_path}/user/{group.pending.userslug}">{buildAvatar(group.pending, "24px", true)}</a>
17
- <a href="{config.relative_path}/user/{group.pending.userslug}">{group.pending.username}</a>
18
- </div>
19
- <div class="d-flex gap-2">
20
- <button class="btn btn-danger btn-sm" data-action="reject">[[groups:pending.reject]]</a></li>
21
- <button class="btn btn-success btn-sm" data-action="accept">[[groups:pending.accept]]</a></li>
22
- </div>
23
- </td>
24
- </tr>
25
- {{{ end }}}
26
- </tbody>
27
- </table>
28
- </div>
@@ -1,19 +0,0 @@
1
- <div id="{alert_id}" role="alert" class="alert alert-dismissible alert-{type} fade show" component="toaster/toast">
2
- <div class="alert-progress position-absolute top-0 start-0 bottom-0 h-100 z-0" style=" opacity:0.1;"></div>
3
- <div class="d-flex flex-wrap gap-2 position-relative">
4
- {{{ if image }}}
5
- <img src="{image}" height="80" style="width: auto;" />
6
- {{{ end }}}
7
- <div class="d-flex flex-column gap-2">
8
- {{{ if title }}}
9
- <strong>{title}</strong>
10
- {{{ end }}}
11
-
12
- {{{ if message }}}
13
- <p class="m-0">{message}</p>
14
- {{{ end }}}
15
- </div>
16
- </div>
17
-
18
- <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="close"></button>
19
- </div>