nodebb-theme-persona 13.3.32 → 13.3.33
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/.eslintrc +2 -2
- package/README.md +20 -20
- package/lib/controllers.js +24 -24
- package/library.js +97 -97
- package/package.json +52 -52
- package/plugin.json +20 -20
- package/public/.eslintrc +2 -2
- package/public/admin.js +15 -15
- package/public/modules/autohidingnavbar.js +220 -220
- package/public/modules/mobile-menu.js +190 -190
- package/public/modules/taskbar.js +65 -65
- package/public/persona.js +257 -257
- package/public/settings.js +53 -53
- package/scss/account.scss +336 -336
- package/scss/categories.scss +205 -205
- package/scss/category.scss +161 -161
- package/scss/chats.scss +14 -14
- package/scss/flags.scss +42 -42
- package/scss/footer.scss +16 -16
- package/scss/groups.scss +166 -166
- package/scss/header.scss +229 -361
- package/scss/keyframes.scss +152 -152
- package/scss/mixins.scss +129 -129
- package/scss/mobile.scss +222 -331
- package/scss/modules/composer.scss +20 -20
- package/scss/modules/cookie-consent.scss +12 -12
- package/scss/modules/fab.scss +32 -32
- package/scss/modules/morph.scss +268 -268
- package/scss/modules/necro-post.scss +8 -8
- package/scss/modules/nprogress.scss +80 -80
- package/scss/modules/taskbar.scss +160 -160
- package/scss/modules/user-menu.scss +7 -7
- package/scss/modules/usercard.scss +64 -64
- package/scss/noscript.scss +80 -80
- package/scss/overrides.scss +39 -39
- package/scss/persona.scss +34 -34
- package/scss/posts_list.scss +127 -127
- package/scss/search.scss +48 -48
- package/scss/style.scss +256 -256
- package/scss/tags.scss +10 -10
- package/scss/topic.scss +571 -571
- package/scss/topics_list.scss +16 -16
- package/scss/variables.scss +6 -6
- package/templates/account/blocks.tpl +46 -46
- package/templates/account/categories.tpl +28 -28
- package/templates/account/consent.tpl +68 -68
- package/templates/account/edit/password.tpl +29 -29
- package/templates/account/edit/username.tpl +25 -25
- package/templates/account/edit.tpl +136 -136
- package/templates/account/followers.tpl +17 -17
- package/templates/account/following.tpl +17 -17
- package/templates/account/groups.tpl +16 -16
- package/templates/account/info.tpl +291 -291
- package/templates/account/posts.tpl +18 -18
- package/templates/account/profile.tpl +166 -166
- package/templates/account/sessions.tpl +31 -31
- package/templates/account/settings.tpl +251 -251
- package/templates/account/tags.tpl +9 -9
- package/templates/account/theme.tpl +25 -25
- package/templates/account/topics.tpl +29 -29
- package/templates/account/uploads.tpl +42 -42
- package/templates/admin/plugins/persona.tpl +24 -24
- package/templates/categories.tpl +31 -31
- package/templates/category.tpl +63 -63
- package/templates/flags/detail.tpl +208 -208
- package/templates/flags/list.tpl +71 -71
- package/templates/footer.tpl +11 -11
- package/templates/groups/details.tpl +77 -77
- package/templates/groups/list.tpl +48 -48
- package/templates/groups/members.tpl +5 -5
- package/templates/header.tpl +47 -47
- package/templates/modules/taskbar.tpl +2 -2
- package/templates/modules/usercard.tpl +36 -36
- package/templates/notifications.tpl +66 -66
- package/templates/partials/account/category-item.tpl +23 -23
- package/templates/partials/account/header.tpl +47 -47
- package/templates/partials/account/menu.tpl +108 -108
- package/templates/partials/breadcrumbs.tpl +18 -18
- package/templates/partials/buttons/newTopic.tpl +22 -22
- package/templates/partials/categories/item.tpl +60 -60
- package/templates/partials/categories/lastpost.tpl +26 -26
- package/templates/partials/category/filter-dropdown-content.tpl +31 -31
- package/templates/partials/category/selector-dropdown-content.tpl +32 -32
- package/templates/partials/category/sort.tpl +14 -14
- package/templates/partials/category/subcategory.tpl +17 -17
- package/templates/partials/category/tags.tpl +3 -3
- package/templates/partials/category/tools.tpl +86 -86
- package/templates/partials/category/watch.tpl +55 -55
- package/templates/partials/chats-menu.tpl +41 -40
- package/templates/partials/cookie-consent.tpl +4 -4
- package/templates/partials/flags/filters.tpl +173 -173
- package/templates/partials/groups/admin.tpl +200 -200
- package/templates/partials/groups/filter-dropdown-content.tpl +24 -24
- package/templates/partials/groups/list.tpl +20 -20
- package/templates/partials/groups/memberlist.tpl +42 -42
- package/templates/partials/header/chats.tpl +18 -18
- package/templates/partials/header/notifications.tpl +49 -19
- package/templates/partials/header/search.tpl +24 -24
- package/templates/partials/header/user-menu.tpl +96 -96
- package/templates/partials/menu.tpl +128 -128
- package/templates/partials/notifications_list.tpl +44 -30
- package/templates/partials/paginator.tpl +44 -44
- package/templates/partials/post_bar.tpl +20 -20
- package/templates/partials/posts_list.tpl +7 -7
- package/templates/partials/posts_list_item.tpl +31 -31
- package/templates/partials/quick-search-results.tpl +33 -33
- package/templates/partials/search-filters.tpl +183 -183
- package/templates/partials/search-results.tpl +54 -54
- package/templates/partials/slideout-menu.tpl +4 -4
- package/templates/partials/tags/filter-dropdown-content.tpl +33 -33
- package/templates/partials/tags/watch.tpl +35 -35
- package/templates/partials/tags_list.tpl +4 -4
- package/templates/partials/toast.tpl +19 -19
- package/templates/partials/topic/event.tpl +12 -12
- package/templates/partials/topic/navigation-post.tpl +11 -11
- package/templates/partials/topic/navigator.tpl +39 -39
- package/templates/partials/topic/necro-post.tpl +2 -2
- package/templates/partials/topic/post-menu-list.tpl +132 -132
- package/templates/partials/topic/post-menu.tpl +4 -4
- package/templates/partials/topic/post.tpl +128 -128
- package/templates/partials/topic/quickreply.tpl +28 -28
- package/templates/partials/topic/reply-button.tpl +26 -26
- package/templates/partials/topic/selection-tooltip.tpl +2 -2
- package/templates/partials/topic/sort.tpl +9 -9
- package/templates/partials/topic/stats.tpl +11 -11
- package/templates/partials/topic/tags.tpl +2 -2
- package/templates/partials/topic/tools.tpl +7 -7
- package/templates/partials/topic/topic-menu-list.tpl +74 -74
- package/templates/partials/topic/watch.tpl +47 -47
- package/templates/partials/topic-filters.tpl +11 -11
- package/templates/partials/topic-terms.tpl +11 -11
- package/templates/partials/topics_list.tpl +117 -117
- package/templates/partials/users/filter-dropdown-content.tpl +20 -20
- package/templates/partials/users/item.tpl +43 -43
- package/templates/partials/users_list.tpl +14 -14
- package/templates/partials/users_list_menu.tpl +20 -20
- package/templates/popular.tpl +35 -35
- package/templates/recent.tpl +37 -37
- package/templates/search.tpl +47 -47
- package/templates/tag.tpl +34 -34
- package/templates/tags.tpl +32 -32
- package/templates/top.tpl +35 -35
- package/templates/topic.tpl +129 -129
- package/templates/unread.tpl +37 -37
- package/templates/users.tpl +34 -34
|
@@ -1,201 +1,201 @@
|
|
|
1
|
-
<div class="card mb-3">
|
|
2
|
-
<div class="card-header">
|
|
3
|
-
<div class="fs-5">
|
|
4
|
-
<i class="fa fa-clock-o"></i> [[groups:details.pending]]
|
|
5
|
-
<!-- IF group.pending.length -->
|
|
6
|
-
<div class="btn-group float-end">
|
|
7
|
-
<button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
8
|
-
[[global:more]] <span class="caret"></span>
|
|
9
|
-
</button>
|
|
10
|
-
<ul class="dropdown-menu" role="menu">
|
|
11
|
-
<li><a class="dropdown-item" href="#" data-action="acceptAll" role="menuitem">[[groups:pending.accept-all]]</a></li>
|
|
12
|
-
<li><a class="dropdown-item" href="#" data-action="rejectAll" role="menuitem">[[groups:pending.reject-all]]</a></li>
|
|
13
|
-
</ul>
|
|
14
|
-
</div>
|
|
15
|
-
<!-- ENDIF group.pending.length -->
|
|
16
|
-
</div>
|
|
17
|
-
</div>
|
|
18
|
-
<div class="card-body">
|
|
19
|
-
<div component="groups/pending/alert" class="alert alert-info {{{ if group.pending.length }}}hidden{{{ end }}}">[[groups:pending.none]]</div>
|
|
20
|
-
|
|
21
|
-
<table component="groups/pending" class="table table-striped table-hover">
|
|
22
|
-
<tbody>
|
|
23
|
-
{{{each group.pending}}}
|
|
24
|
-
<tr data-uid="{group.pending.uid}">
|
|
25
|
-
<td class="p-2">
|
|
26
|
-
<a href="{config.relative_path}/user/{group.pending.userslug}">{buildAvatar(group.pending, "24px", true)}</a>
|
|
27
|
-
</td>
|
|
28
|
-
<td class="member-name p-2">
|
|
29
|
-
<a href="{config.relative_path}/user/{group.pending.userslug}">{group.pending.username}</a>
|
|
30
|
-
</td>
|
|
31
|
-
<td class="p-2">
|
|
32
|
-
<div class="btn-group float-end">
|
|
33
|
-
<button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
34
|
-
[[global:more]] <span class="caret"></span>
|
|
35
|
-
</button>
|
|
36
|
-
<ul class="dropdown-menu" role="menu">
|
|
37
|
-
<li><a class="dropdown-item" href="#" data-action="accept" role="menuitem">[[groups:pending.accept]]</a></li>
|
|
38
|
-
<li><a class="dropdown-item" href="#" data-action="reject" role="menuitem">[[groups:pending.reject]]</a></li>
|
|
39
|
-
</ul>
|
|
40
|
-
</div>
|
|
41
|
-
</td>
|
|
42
|
-
</tr>
|
|
43
|
-
{{{end}}}
|
|
44
|
-
</tbody>
|
|
45
|
-
</table>
|
|
46
|
-
</div>
|
|
47
|
-
</div>
|
|
48
|
-
<div class="card mb-3">
|
|
49
|
-
<div class="card-header">
|
|
50
|
-
<span class="fs-5">
|
|
51
|
-
<i class="fa fa-gift"></i> [[groups:details.invited]]
|
|
52
|
-
</span>
|
|
53
|
-
</div>
|
|
54
|
-
<div class="card-body">
|
|
55
|
-
<div class="input-group mb-2">
|
|
56
|
-
<input class="form-control" type="text" component="groups/members/invite" placeholder="[[groups:invited.search]]"/>
|
|
57
|
-
<span class="input-group-text search-button"><i class="fa fa-search"></i></span>
|
|
58
|
-
</div>
|
|
59
|
-
|
|
60
|
-
<div class="mb-2">
|
|
61
|
-
<textarea class="form-control" component="groups/members/bulk-invite" placeholder="[[groups:bulk-invite-instructions]]"></textarea>
|
|
62
|
-
</div>
|
|
63
|
-
|
|
64
|
-
<div class="mb-2 clearfix">
|
|
65
|
-
<button class="btn btn-outline-secondary btn-sm float-end" component="groups/members/bulk-invite-button">[[groups:bulk-invite]]</button>
|
|
66
|
-
</div>
|
|
67
|
-
|
|
68
|
-
<div component="groups/invited/alert" class="alert alert-info {{{ if group.invited.length }}}hidden{{{ end }}}">[[groups:invited.none]]</div>
|
|
69
|
-
|
|
70
|
-
<table component="groups/invited" class="table table-striped table-hover">
|
|
71
|
-
<tbody>
|
|
72
|
-
{{{ each group.invited }}}
|
|
73
|
-
<tr data-uid="{group.invited.uid}">
|
|
74
|
-
<td class="p-2">
|
|
75
|
-
<a href="{config.relative_path}/user/{group.invited.userslug}">{buildAvatar(group.invited, "24px", true)}</a>
|
|
76
|
-
</td>
|
|
77
|
-
<td class="member-name p-2">
|
|
78
|
-
<a href="{config.relative_path}/user/{group.invited.userslug}">{group.invited.username}</a>
|
|
79
|
-
</td>
|
|
80
|
-
<td class="p-2">
|
|
81
|
-
<div class="btn-group float-end">
|
|
82
|
-
<button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
83
|
-
[[global:more]] <span class="caret"></span>
|
|
84
|
-
</button>
|
|
85
|
-
<ul class="dropdown-menu" role="menu">
|
|
86
|
-
<li><a class="dropdown-item" href="#" data-action="rescindInvite" role="menuitem">[[groups:invited.uninvite]]</a></li>
|
|
87
|
-
</ul>
|
|
88
|
-
</div>
|
|
89
|
-
</td>
|
|
90
|
-
</tr>
|
|
91
|
-
{{{end}}}
|
|
92
|
-
</tbody>
|
|
93
|
-
</table>
|
|
94
|
-
</div>
|
|
95
|
-
</div>
|
|
96
|
-
|
|
97
|
-
<div class="card mb-3">
|
|
98
|
-
<div class="card-header pointer" data-bs-toggle="collapse" data-bs-target=".options">
|
|
99
|
-
<span class="fs-5">
|
|
100
|
-
<i class="fa fa-caret-down float-end"></i>
|
|
101
|
-
<i class="fa fa-cogs"></i> [[groups:details.owner-options]]
|
|
102
|
-
</span>
|
|
103
|
-
</div>
|
|
104
|
-
|
|
105
|
-
<div class="card-body options collapse">
|
|
106
|
-
<form component="groups/settings" role="form">
|
|
107
|
-
<div class="mb-3">
|
|
108
|
-
<label class="form-label" for="name">[[groups:details.group-name]]</label>
|
|
109
|
-
<input <!-- IF group.system -->readonly<!-- ENDIF group.system --> class="form-control" name="name" id="name" type="text" value="{group.displayName}" />
|
|
110
|
-
</div>
|
|
111
|
-
<div class="mb-3">
|
|
112
|
-
<label class="form-label" for="description">[[groups:details.description]]</label>
|
|
113
|
-
<textarea class="form-control" name="description" id="description" type="text" maxlength="255">{group.description}</textarea>
|
|
114
|
-
</div>
|
|
115
|
-
|
|
116
|
-
<hr />
|
|
117
|
-
<div class="mb-3">
|
|
118
|
-
<label class="form-label" for="memberPostCids">[[groups:details.member-post-cids]]</label>
|
|
119
|
-
<div class="row">
|
|
120
|
-
<div class="col-md-6">
|
|
121
|
-
<input id="memberPostCids" type="text" class="form-control" value="{group.memberPostCids}">
|
|
122
|
-
</div>
|
|
123
|
-
<div class="col-md-6 member-post-cids-selector">
|
|
124
|
-
<!-- IMPORT partials/category/selector-dropdown-left.tpl -->
|
|
125
|
-
</div>
|
|
126
|
-
</div>
|
|
127
|
-
</div>
|
|
128
|
-
|
|
129
|
-
<hr />
|
|
130
|
-
|
|
131
|
-
<div class="mb-3 user-title-option">
|
|
132
|
-
<label class="form-label" for="userTitle">[[groups:details.badge-text]]</label>
|
|
133
|
-
<div class="d-flex gap-2">
|
|
134
|
-
<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 --> />
|
|
135
|
-
<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>
|
|
136
|
-
</div>
|
|
137
|
-
</div>
|
|
138
|
-
|
|
139
|
-
<div class="mb-3 user-title-option">
|
|
140
|
-
<div class="d-flex align-items-center gap-3">
|
|
141
|
-
<label class="form-label mb-0">[[groups:details.badge-preview]]</label>
|
|
142
|
-
<span class="badge rounded-1 text-uppercase text-truncate rounded-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}{{{ if group.userTitle}}} me-1{{{ end }}}{{{ end }}}"></i><span class="badge-text">{{{ if group.userTitle }}}{group.userTitle}{{{ end }}}</span></span>
|
|
143
|
-
</div>
|
|
144
|
-
<hr/>
|
|
145
|
-
<div class="d-flex flex-column gap-2">
|
|
146
|
-
<div class="d-flex align-items-center gap-2">
|
|
147
|
-
<label class="form-label mb-0" for="labelColor" class="badge-color-label">[[groups:details.change-label-colour]]</label>
|
|
148
|
-
<input component="groups/userTitleOption" type="color" name="labelColor" id="labelColor" value="<!-- IF group.labelColor -->{group.labelColor}<!-- ENDIF group.labelColor -->" />
|
|
149
|
-
</div>
|
|
150
|
-
<div class="d-flex align-items-center gap-2">
|
|
151
|
-
<label class="form-label mb-0" for="textColor" class="badge-color-label">[[groups:details.change-text-colour]]</label>
|
|
152
|
-
<input component="groups/userTitleOption" type="color" name="textColor" id="textColor" value="<!-- IF group.textColor -->{group.textColor}<!-- ENDIF group.textColor -->" />
|
|
153
|
-
</div>
|
|
154
|
-
<input type="hidden" name="icon" value="<!-- IF group.icon -->{group.icon}<!-- ENDIF group.icon -->" />
|
|
155
|
-
</div>
|
|
156
|
-
<div id="icons" class="hidden">
|
|
157
|
-
<div class="icon-container">
|
|
158
|
-
<div class="row nbb-fa-icons">
|
|
159
|
-
<!-- IMPORT partials/fontawesome.tpl -->
|
|
160
|
-
</div>
|
|
161
|
-
</div>
|
|
162
|
-
</div>
|
|
163
|
-
</div>
|
|
164
|
-
<hr />
|
|
165
|
-
<div class="form-check">
|
|
166
|
-
<label class="form-check-label" for="userTitleEnabled">[[groups:details.userTitleEnabled]]</label>
|
|
167
|
-
<input class="form-check-input" name="userTitleEnabled" id="userTitleEnabled" type="checkbox"<!-- IF group.userTitleEnabled --> checked<!-- ENDIF group.userTitleEnabled -->>
|
|
168
|
-
</div>
|
|
169
|
-
<div class="form-check">
|
|
170
|
-
<label class="form-check-label" for="private">[[groups:details.private]]</label>
|
|
171
|
-
<input class="form-check-input" name="private" id="private" type="checkbox"<!-- IF group.private --> checked<!-- ENDIF group.private -->>
|
|
172
|
-
<!-- IF !allowPrivateGroups -->
|
|
173
|
-
<p class="form-text">
|
|
174
|
-
[[groups:details.private-system-help]]
|
|
175
|
-
</p>
|
|
176
|
-
<!-- ENDIF !allowPrivateGroups -->
|
|
177
|
-
<p class="form-text">
|
|
178
|
-
[[groups:details.private-help]]
|
|
179
|
-
</p>
|
|
180
|
-
</div>
|
|
181
|
-
<div class="form-check">
|
|
182
|
-
<label class="form-check-label" for="disableJoinRequests">[[groups:details.disableJoinRequests]]</label>
|
|
183
|
-
<input class="form-check-input" name="disableJoinRequests" id="disableJoinRequests" type="checkbox"<!-- IF group.disableJoinRequests --> checked<!-- ENDIF group.disableJoinRequests -->>
|
|
184
|
-
</div>
|
|
185
|
-
<div class="form-check">
|
|
186
|
-
<label class="form-check-label" for="disableLeave">[[groups:details.disableLeave]]</label>
|
|
187
|
-
<input class="form-check-input" name="disableLeave" id="disableLeave" type="checkbox"{{{if group.disableLeave}}} checked{{{end}}}>
|
|
188
|
-
</div>
|
|
189
|
-
<div class="form-check">
|
|
190
|
-
<label class="form-check-label" for="hidden">[[groups:details.hidden]]</label>
|
|
191
|
-
<input class="form-check-input" name="hidden" id="hidden" type="checkbox"<!-- IF group.hidden --> checked<!-- ENDIF group.hidden -->>
|
|
192
|
-
<p class="form-text">
|
|
193
|
-
[[groups:details.hidden-help]]
|
|
194
|
-
</p>
|
|
195
|
-
</div>
|
|
196
|
-
|
|
197
|
-
<button class="btn btn-link text-danger float-end" type="button" data-action="delete">[[groups:details.delete-group]]</button>
|
|
198
|
-
<button class="btn btn-primary" type="button" data-action="update">[[global:save-changes]]</button>
|
|
199
|
-
</form>
|
|
200
|
-
</div>
|
|
1
|
+
<div class="card mb-3">
|
|
2
|
+
<div class="card-header">
|
|
3
|
+
<div class="fs-5">
|
|
4
|
+
<i class="fa fa-clock-o"></i> [[groups:details.pending]]
|
|
5
|
+
<!-- IF group.pending.length -->
|
|
6
|
+
<div class="btn-group float-end">
|
|
7
|
+
<button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
8
|
+
[[global:more]] <span class="caret"></span>
|
|
9
|
+
</button>
|
|
10
|
+
<ul class="dropdown-menu" role="menu">
|
|
11
|
+
<li><a class="dropdown-item" href="#" data-action="acceptAll" role="menuitem">[[groups:pending.accept-all]]</a></li>
|
|
12
|
+
<li><a class="dropdown-item" href="#" data-action="rejectAll" role="menuitem">[[groups:pending.reject-all]]</a></li>
|
|
13
|
+
</ul>
|
|
14
|
+
</div>
|
|
15
|
+
<!-- ENDIF group.pending.length -->
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
<div class="card-body">
|
|
19
|
+
<div component="groups/pending/alert" class="alert alert-info {{{ if group.pending.length }}}hidden{{{ end }}}">[[groups:pending.none]]</div>
|
|
20
|
+
|
|
21
|
+
<table component="groups/pending" class="table table-striped table-hover">
|
|
22
|
+
<tbody>
|
|
23
|
+
{{{each group.pending}}}
|
|
24
|
+
<tr data-uid="{group.pending.uid}">
|
|
25
|
+
<td class="p-2">
|
|
26
|
+
<a href="{config.relative_path}/user/{group.pending.userslug}">{buildAvatar(group.pending, "24px", true)}</a>
|
|
27
|
+
</td>
|
|
28
|
+
<td class="member-name p-2">
|
|
29
|
+
<a href="{config.relative_path}/user/{group.pending.userslug}">{group.pending.username}</a>
|
|
30
|
+
</td>
|
|
31
|
+
<td class="p-2">
|
|
32
|
+
<div class="btn-group float-end">
|
|
33
|
+
<button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
34
|
+
[[global:more]] <span class="caret"></span>
|
|
35
|
+
</button>
|
|
36
|
+
<ul class="dropdown-menu" role="menu">
|
|
37
|
+
<li><a class="dropdown-item" href="#" data-action="accept" role="menuitem">[[groups:pending.accept]]</a></li>
|
|
38
|
+
<li><a class="dropdown-item" href="#" data-action="reject" role="menuitem">[[groups:pending.reject]]</a></li>
|
|
39
|
+
</ul>
|
|
40
|
+
</div>
|
|
41
|
+
</td>
|
|
42
|
+
</tr>
|
|
43
|
+
{{{end}}}
|
|
44
|
+
</tbody>
|
|
45
|
+
</table>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
<div class="card mb-3">
|
|
49
|
+
<div class="card-header">
|
|
50
|
+
<span class="fs-5">
|
|
51
|
+
<i class="fa fa-gift"></i> [[groups:details.invited]]
|
|
52
|
+
</span>
|
|
53
|
+
</div>
|
|
54
|
+
<div class="card-body">
|
|
55
|
+
<div class="input-group mb-2">
|
|
56
|
+
<input class="form-control" type="text" component="groups/members/invite" placeholder="[[groups:invited.search]]"/>
|
|
57
|
+
<span class="input-group-text search-button"><i class="fa fa-search"></i></span>
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
<div class="mb-2">
|
|
61
|
+
<textarea class="form-control" component="groups/members/bulk-invite" placeholder="[[groups:bulk-invite-instructions]]"></textarea>
|
|
62
|
+
</div>
|
|
63
|
+
|
|
64
|
+
<div class="mb-2 clearfix">
|
|
65
|
+
<button class="btn btn-outline-secondary btn-sm float-end" component="groups/members/bulk-invite-button">[[groups:bulk-invite]]</button>
|
|
66
|
+
</div>
|
|
67
|
+
|
|
68
|
+
<div component="groups/invited/alert" class="alert alert-info {{{ if group.invited.length }}}hidden{{{ end }}}">[[groups:invited.none]]</div>
|
|
69
|
+
|
|
70
|
+
<table component="groups/invited" class="table table-striped table-hover">
|
|
71
|
+
<tbody>
|
|
72
|
+
{{{ each group.invited }}}
|
|
73
|
+
<tr data-uid="{group.invited.uid}">
|
|
74
|
+
<td class="p-2">
|
|
75
|
+
<a href="{config.relative_path}/user/{group.invited.userslug}">{buildAvatar(group.invited, "24px", true)}</a>
|
|
76
|
+
</td>
|
|
77
|
+
<td class="member-name p-2">
|
|
78
|
+
<a href="{config.relative_path}/user/{group.invited.userslug}">{group.invited.username}</a>
|
|
79
|
+
</td>
|
|
80
|
+
<td class="p-2">
|
|
81
|
+
<div class="btn-group float-end">
|
|
82
|
+
<button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
83
|
+
[[global:more]] <span class="caret"></span>
|
|
84
|
+
</button>
|
|
85
|
+
<ul class="dropdown-menu" role="menu">
|
|
86
|
+
<li><a class="dropdown-item" href="#" data-action="rescindInvite" role="menuitem">[[groups:invited.uninvite]]</a></li>
|
|
87
|
+
</ul>
|
|
88
|
+
</div>
|
|
89
|
+
</td>
|
|
90
|
+
</tr>
|
|
91
|
+
{{{end}}}
|
|
92
|
+
</tbody>
|
|
93
|
+
</table>
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
|
|
97
|
+
<div class="card mb-3">
|
|
98
|
+
<div class="card-header pointer" data-bs-toggle="collapse" data-bs-target=".options">
|
|
99
|
+
<span class="fs-5">
|
|
100
|
+
<i class="fa fa-caret-down float-end"></i>
|
|
101
|
+
<i class="fa fa-cogs"></i> [[groups:details.owner-options]]
|
|
102
|
+
</span>
|
|
103
|
+
</div>
|
|
104
|
+
|
|
105
|
+
<div class="card-body options collapse">
|
|
106
|
+
<form component="groups/settings" role="form">
|
|
107
|
+
<div class="mb-3">
|
|
108
|
+
<label class="form-label" for="name">[[groups:details.group-name]]</label>
|
|
109
|
+
<input <!-- IF group.system -->readonly<!-- ENDIF group.system --> class="form-control" name="name" id="name" type="text" value="{group.displayName}" />
|
|
110
|
+
</div>
|
|
111
|
+
<div class="mb-3">
|
|
112
|
+
<label class="form-label" for="description">[[groups:details.description]]</label>
|
|
113
|
+
<textarea class="form-control" name="description" id="description" type="text" maxlength="255">{group.description}</textarea>
|
|
114
|
+
</div>
|
|
115
|
+
|
|
116
|
+
<hr />
|
|
117
|
+
<div class="mb-3">
|
|
118
|
+
<label class="form-label" for="memberPostCids">[[groups:details.member-post-cids]]</label>
|
|
119
|
+
<div class="row">
|
|
120
|
+
<div class="col-md-6">
|
|
121
|
+
<input id="memberPostCids" type="text" class="form-control" value="{group.memberPostCids}">
|
|
122
|
+
</div>
|
|
123
|
+
<div class="col-md-6 member-post-cids-selector">
|
|
124
|
+
<!-- IMPORT partials/category/selector-dropdown-left.tpl -->
|
|
125
|
+
</div>
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
|
+
|
|
129
|
+
<hr />
|
|
130
|
+
|
|
131
|
+
<div class="mb-3 user-title-option">
|
|
132
|
+
<label class="form-label" for="userTitle">[[groups:details.badge-text]]</label>
|
|
133
|
+
<div class="d-flex gap-2">
|
|
134
|
+
<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 --> />
|
|
135
|
+
<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>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
|
|
139
|
+
<div class="mb-3 user-title-option">
|
|
140
|
+
<div class="d-flex align-items-center gap-3">
|
|
141
|
+
<label class="form-label mb-0">[[groups:details.badge-preview]]</label>
|
|
142
|
+
<span class="badge rounded-1 text-uppercase text-truncate rounded-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}{{{ if group.userTitle}}} me-1{{{ end }}}{{{ end }}}"></i><span class="badge-text">{{{ if group.userTitle }}}{group.userTitle}{{{ end }}}</span></span>
|
|
143
|
+
</div>
|
|
144
|
+
<hr/>
|
|
145
|
+
<div class="d-flex flex-column gap-2">
|
|
146
|
+
<div class="d-flex align-items-center gap-2">
|
|
147
|
+
<label class="form-label mb-0" for="labelColor" class="badge-color-label">[[groups:details.change-label-colour]]</label>
|
|
148
|
+
<input component="groups/userTitleOption" type="color" name="labelColor" id="labelColor" value="<!-- IF group.labelColor -->{group.labelColor}<!-- ENDIF group.labelColor -->" />
|
|
149
|
+
</div>
|
|
150
|
+
<div class="d-flex align-items-center gap-2">
|
|
151
|
+
<label class="form-label mb-0" for="textColor" class="badge-color-label">[[groups:details.change-text-colour]]</label>
|
|
152
|
+
<input component="groups/userTitleOption" type="color" name="textColor" id="textColor" value="<!-- IF group.textColor -->{group.textColor}<!-- ENDIF group.textColor -->" />
|
|
153
|
+
</div>
|
|
154
|
+
<input type="hidden" name="icon" value="<!-- IF group.icon -->{group.icon}<!-- ENDIF group.icon -->" />
|
|
155
|
+
</div>
|
|
156
|
+
<div id="icons" class="hidden">
|
|
157
|
+
<div class="icon-container">
|
|
158
|
+
<div class="row nbb-fa-icons">
|
|
159
|
+
<!-- IMPORT partials/fontawesome.tpl -->
|
|
160
|
+
</div>
|
|
161
|
+
</div>
|
|
162
|
+
</div>
|
|
163
|
+
</div>
|
|
164
|
+
<hr />
|
|
165
|
+
<div class="form-check">
|
|
166
|
+
<label class="form-check-label" for="userTitleEnabled">[[groups:details.userTitleEnabled]]</label>
|
|
167
|
+
<input class="form-check-input" name="userTitleEnabled" id="userTitleEnabled" type="checkbox"<!-- IF group.userTitleEnabled --> checked<!-- ENDIF group.userTitleEnabled -->>
|
|
168
|
+
</div>
|
|
169
|
+
<div class="form-check">
|
|
170
|
+
<label class="form-check-label" for="private">[[groups:details.private]]</label>
|
|
171
|
+
<input class="form-check-input" name="private" id="private" type="checkbox"<!-- IF group.private --> checked<!-- ENDIF group.private -->>
|
|
172
|
+
<!-- IF !allowPrivateGroups -->
|
|
173
|
+
<p class="form-text">
|
|
174
|
+
[[groups:details.private-system-help]]
|
|
175
|
+
</p>
|
|
176
|
+
<!-- ENDIF !allowPrivateGroups -->
|
|
177
|
+
<p class="form-text">
|
|
178
|
+
[[groups:details.private-help]]
|
|
179
|
+
</p>
|
|
180
|
+
</div>
|
|
181
|
+
<div class="form-check">
|
|
182
|
+
<label class="form-check-label" for="disableJoinRequests">[[groups:details.disableJoinRequests]]</label>
|
|
183
|
+
<input class="form-check-input" name="disableJoinRequests" id="disableJoinRequests" type="checkbox"<!-- IF group.disableJoinRequests --> checked<!-- ENDIF group.disableJoinRequests -->>
|
|
184
|
+
</div>
|
|
185
|
+
<div class="form-check">
|
|
186
|
+
<label class="form-check-label" for="disableLeave">[[groups:details.disableLeave]]</label>
|
|
187
|
+
<input class="form-check-input" name="disableLeave" id="disableLeave" type="checkbox"{{{if group.disableLeave}}} checked{{{end}}}>
|
|
188
|
+
</div>
|
|
189
|
+
<div class="form-check">
|
|
190
|
+
<label class="form-check-label" for="hidden">[[groups:details.hidden]]</label>
|
|
191
|
+
<input class="form-check-input" name="hidden" id="hidden" type="checkbox"<!-- IF group.hidden --> checked<!-- ENDIF group.hidden -->>
|
|
192
|
+
<p class="form-text">
|
|
193
|
+
[[groups:details.hidden-help]]
|
|
194
|
+
</p>
|
|
195
|
+
</div>
|
|
196
|
+
|
|
197
|
+
<button class="btn btn-link text-danger float-end" type="button" data-action="delete">[[groups:details.delete-group]]</button>
|
|
198
|
+
<button class="btn btn-primary" type="button" data-action="update">[[global:save-changes]]</button>
|
|
199
|
+
</form>
|
|
200
|
+
</div>
|
|
201
201
|
</div>
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
<div class="dropdown bottom-sheet">
|
|
2
|
-
<button type="button" class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
3
|
-
{{{ if selectedGroup }}}
|
|
4
|
-
<span class="fw-semibold">{selectedGroup.displayName}</span>
|
|
5
|
-
{{{ else }}}
|
|
6
|
-
<span class="fw-semibold">[[groups:all-groups]]</span>
|
|
7
|
-
{{{ end }}} <span class="caret"></span>
|
|
8
|
-
</button>
|
|
9
|
-
<ul class="dropdown-menu text-sm" role="menu">
|
|
10
|
-
<li role="presentation" class="user {{{ if !selectedGroup}}}selected{{{end}}}">
|
|
11
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" href="{config.relative_path}/{allGroupsUrl}">
|
|
12
|
-
<div class="flex-grow-1">[[groups:all-groups]]</div>
|
|
13
|
-
<i class="flex-shrink-0 fa fa-fw {{{ if !selectedGroup }}}fa-check{{{ end }}}"></i>
|
|
14
|
-
</a>
|
|
15
|
-
</li>
|
|
16
|
-
{{{ each groups }}}
|
|
17
|
-
<li role="presentation" class="user {{{ if ./selected}}}selected{{{end}}}">
|
|
18
|
-
<a class="dropdown-item d-flex align-items-center gap-2" role="menuitem" href="{config.relative_path}/{./url}">
|
|
19
|
-
<div class="flex-grow-1 d-inline-flex gap-1 align-items-center">{./displayName}</div>
|
|
20
|
-
<i class="flex-shrink-0 fa fa-fw {{{ if ./selected }}}fa-check{{{ end }}}"></i>
|
|
21
|
-
</a>
|
|
22
|
-
</li>
|
|
23
|
-
{{{end}}}
|
|
24
|
-
</ul>
|
|
1
|
+
<div class="dropdown bottom-sheet">
|
|
2
|
+
<button type="button" class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
3
|
+
{{{ if selectedGroup }}}
|
|
4
|
+
<span class="fw-semibold">{selectedGroup.displayName}</span>
|
|
5
|
+
{{{ else }}}
|
|
6
|
+
<span class="fw-semibold">[[groups:all-groups]]</span>
|
|
7
|
+
{{{ end }}} <span class="caret"></span>
|
|
8
|
+
</button>
|
|
9
|
+
<ul class="dropdown-menu text-sm" role="menu">
|
|
10
|
+
<li role="presentation" class="user {{{ if !selectedGroup}}}selected{{{end}}}">
|
|
11
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" href="{config.relative_path}/{allGroupsUrl}">
|
|
12
|
+
<div class="flex-grow-1">[[groups:all-groups]]</div>
|
|
13
|
+
<i class="flex-shrink-0 fa fa-fw {{{ if !selectedGroup }}}fa-check{{{ end }}}"></i>
|
|
14
|
+
</a>
|
|
15
|
+
</li>
|
|
16
|
+
{{{ each groups }}}
|
|
17
|
+
<li role="presentation" class="user {{{ if ./selected}}}selected{{{end}}}">
|
|
18
|
+
<a class="dropdown-item d-flex align-items-center gap-2" role="menuitem" href="{config.relative_path}/{./url}">
|
|
19
|
+
<div class="flex-grow-1 d-inline-flex gap-1 align-items-center">{./displayName}</div>
|
|
20
|
+
<i class="flex-shrink-0 fa fa-fw {{{ if ./selected }}}fa-check{{{ end }}}"></i>
|
|
21
|
+
</a>
|
|
22
|
+
</li>
|
|
23
|
+
{{{end}}}
|
|
24
|
+
</ul>
|
|
25
25
|
</div>
|
|
@@ -1,21 +1,21 @@
|
|
|
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">{groups.displayName} <small>{groups.memberCount}</small></h5>
|
|
6
|
-
</a>
|
|
7
|
-
<div class="card-body">
|
|
8
|
-
<ul class="members">
|
|
9
|
-
{{{each groups.members}}}
|
|
10
|
-
<li>
|
|
11
|
-
<a href="{config.relative_path}/user/{groups.members.userslug}">{buildAvatar(groups.members, "24px", true)}</a>
|
|
12
|
-
</li>
|
|
13
|
-
{{{end}}}
|
|
14
|
-
{{{ if groups.truncated }}}
|
|
15
|
-
<li class="truncated"><i class="fa fa-ellipsis-h"></i></li>
|
|
16
|
-
{{{ end }}}
|
|
17
|
-
</ul>
|
|
18
|
-
</div>
|
|
19
|
-
</div>
|
|
20
|
-
</div>
|
|
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">{groups.displayName} <small>{groups.memberCount}</small></h5>
|
|
6
|
+
</a>
|
|
7
|
+
<div class="card-body">
|
|
8
|
+
<ul class="members">
|
|
9
|
+
{{{each groups.members}}}
|
|
10
|
+
<li>
|
|
11
|
+
<a href="{config.relative_path}/user/{groups.members.userslug}">{buildAvatar(groups.members, "24px", true)}</a>
|
|
12
|
+
</li>
|
|
13
|
+
{{{end}}}
|
|
14
|
+
{{{ if groups.truncated }}}
|
|
15
|
+
<li class="truncated"><i class="fa fa-ellipsis-h"></i></li>
|
|
16
|
+
{{{ end }}}
|
|
17
|
+
</ul>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
21
|
{{{end}}}
|
|
@@ -1,43 +1,43 @@
|
|
|
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-striped table-hover">
|
|
17
|
-
<tbody>
|
|
18
|
-
{{{each group.members}}}
|
|
19
|
-
<tr data-uid="{group.members.uid}" data-isowner="{{{ if group.members.isOwner }}}1{{{ else }}}0{{{ end }}}">
|
|
20
|
-
<td class="p-2">
|
|
21
|
-
<a href="{config.relative_path}/user/{group.members.userslug}">{buildAvatar(group.members, "24px", true)}</a>
|
|
22
|
-
</td>
|
|
23
|
-
<td class="member-name w-100 p-2">
|
|
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<!-- ENDIF !group.members.isOwner -->"></i>
|
|
26
|
-
|
|
27
|
-
<!-- IF group.isOwner -->
|
|
28
|
-
<div class="owner-controls btn-group float-end">
|
|
29
|
-
<a class="btn btn-sm" href="#" data-ajaxify="false" data-action="toggleOwnership" title="[[groups:details.grant]]">
|
|
30
|
-
<i class="fa fa-star"></i>
|
|
31
|
-
</a>
|
|
32
|
-
|
|
33
|
-
<a class="btn btn-sm" href="#" data-ajaxify="false" data-action="kick" title="[[groups:details.kick]]">
|
|
34
|
-
<i class="fa fa-ban"></i>
|
|
35
|
-
</a>
|
|
36
|
-
</div>
|
|
37
|
-
<!-- ENDIF group.isOwner -->
|
|
38
|
-
</td>
|
|
39
|
-
</tr>
|
|
40
|
-
{{{end}}}
|
|
41
|
-
</tbody>
|
|
42
|
-
</table>
|
|
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-striped table-hover">
|
|
17
|
+
<tbody>
|
|
18
|
+
{{{each group.members}}}
|
|
19
|
+
<tr data-uid="{group.members.uid}" data-isowner="{{{ if group.members.isOwner }}}1{{{ else }}}0{{{ end }}}">
|
|
20
|
+
<td class="p-2">
|
|
21
|
+
<a href="{config.relative_path}/user/{group.members.userslug}">{buildAvatar(group.members, "24px", true)}</a>
|
|
22
|
+
</td>
|
|
23
|
+
<td class="member-name w-100 p-2">
|
|
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<!-- ENDIF !group.members.isOwner -->"></i>
|
|
26
|
+
|
|
27
|
+
<!-- IF group.isOwner -->
|
|
28
|
+
<div class="owner-controls btn-group float-end">
|
|
29
|
+
<a class="btn btn-sm" href="#" data-ajaxify="false" data-action="toggleOwnership" title="[[groups:details.grant]]">
|
|
30
|
+
<i class="fa fa-star"></i>
|
|
31
|
+
</a>
|
|
32
|
+
|
|
33
|
+
<a class="btn btn-sm" href="#" data-ajaxify="false" data-action="kick" title="[[groups:details.kick]]">
|
|
34
|
+
<i class="fa fa-ban"></i>
|
|
35
|
+
</a>
|
|
36
|
+
</div>
|
|
37
|
+
<!-- ENDIF group.isOwner -->
|
|
38
|
+
</td>
|
|
39
|
+
</tr>
|
|
40
|
+
{{{end}}}
|
|
41
|
+
</tbody>
|
|
42
|
+
</table>
|
|
43
43
|
</div>
|