nodebb-theme-harmony 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -1
- package/languages/en-GB/harmony.json +6 -1
- package/library.js +56 -25
- package/package.json +1 -1
- package/plugin.json +0 -1
- package/public/harmony.js +165 -41
- package/public/settings.js +1 -0
- package/screenshots/categories.png +0 -0
- package/screenshots/recent.png +0 -0
- package/screenshots/topic.png +0 -0
- package/scss/account.scss +1 -1
- package/scss/chats.scss +81 -26
- package/scss/common.scss +84 -10
- package/scss/flags.scss +5 -0
- package/scss/groups.scss +2 -2
- package/scss/harmony.scss +3 -0
- package/scss/mixins.scss +7 -3
- package/scss/modals.scss +5 -3
- package/scss/modules/bottom-sheet.scss +1 -1
- package/scss/modules/composer.scss +0 -4
- package/scss/modules/cover.scss +1 -11
- package/scss/modules/filters.scss +8 -0
- package/scss/modules/paginator.scss +24 -0
- package/scss/modules/tags.scss +2 -2
- package/scss/modules/topic-navigator.scss +18 -42
- package/scss/modules/topics-list.scss +32 -17
- package/scss/modules/user-menu.scss +6 -0
- package/scss/overrides.scss +4 -1
- package/scss/sidebar.scss +61 -8
- package/scss/topic.scss +36 -13
- package/templates/account/blocks.tpl +35 -40
- package/templates/account/categories.tpl +47 -29
- package/templates/account/consent.tpl +66 -10
- package/templates/account/edit/password.tpl +25 -30
- package/templates/account/edit/username.tpl +21 -26
- package/templates/account/edit.tpl +105 -116
- package/templates/account/followers.tpl +12 -19
- package/templates/account/following.tpl +12 -18
- package/templates/account/groups.tpl +12 -17
- package/templates/account/info.tpl +178 -206
- package/templates/account/posts.tpl +31 -36
- package/templates/account/profile.tpl +82 -72
- package/templates/account/sessions.tpl +8 -30
- package/templates/account/settings.tpl +222 -203
- package/templates/account/theme.tpl +39 -25
- package/templates/account/topics.tpl +36 -38
- package/templates/account/uploads.tpl +33 -40
- package/templates/admin/plugins/harmony.tpl +21 -3
- package/templates/categories.tpl +3 -6
- package/templates/category.tpl +13 -14
- package/templates/chats.tpl +9 -10
- package/templates/flags/detail.tpl +160 -193
- package/templates/flags/list.tpl +3 -70
- package/templates/footer.tpl +2 -2
- package/templates/groups/details.tpl +22 -19
- package/templates/groups/list.tpl +1 -1
- package/templates/groups/members.tpl +0 -2
- package/templates/header.tpl +2 -2
- package/templates/login.tpl +4 -4
- package/templates/notifications.tpl +5 -5
- package/templates/partials/account/admin-menu.tpl +9 -9
- package/templates/partials/account/category-item.tpl +14 -17
- package/templates/partials/account/footer.tpl +3 -0
- package/templates/partials/account/header.tpl +78 -81
- package/templates/partials/account/session-list.tpl +18 -0
- package/templates/partials/account/sidebar-left.tpl +31 -25
- package/templates/partials/breadcrumbs.tpl +6 -6
- package/templates/partials/buttons/newTopic.tpl +1 -1
- package/templates/partials/categories/item.tpl +31 -27
- package/templates/partials/categories/lastpost.tpl +7 -7
- package/templates/partials/category/filter-dropdown-content.tpl +37 -0
- package/templates/partials/{category-selector-content.tpl → category/selector-dropdown-content.tpl} +7 -7
- package/templates/partials/category/sort.tpl +22 -7
- package/templates/partials/category/subcategory.tpl +2 -3
- package/templates/partials/category/tags.tpl +0 -2
- package/templates/partials/category/tools.tpl +28 -25
- package/templates/partials/category/watch.tpl +39 -6
- package/templates/partials/chats/dropdown.tpl +4 -1
- package/templates/partials/chats/message-window.tpl +12 -8
- package/templates/partials/chats/message.tpl +8 -10
- package/templates/partials/chats/options.tpl +14 -6
- package/templates/partials/chats/recent_room.tpl +41 -32
- package/templates/partials/cookie-consent.tpl +5 -5
- package/templates/partials/flags/bulk-actions.tpl +9 -0
- package/templates/partials/flags/filters.tpl +165 -78
- package/templates/partials/flags/results.tpl +38 -0
- package/templates/partials/groups/admin.tpl +4 -4
- package/templates/partials/groups/badge.tpl +1 -1
- package/templates/partials/groups/invited.tpl +1 -1
- package/templates/partials/groups/list.tpl +2 -2
- package/templates/partials/groups/memberlist.tpl +2 -2
- package/templates/partials/groups/sidebar-left.tpl +10 -10
- package/templates/partials/header/brand.tpl +9 -2
- package/templates/partials/mobile-footer.tpl +69 -61
- package/templates/partials/notifications_list.tpl +11 -8
- package/templates/partials/paginator.tpl +11 -9
- package/templates/partials/post_bar.tpl +26 -24
- package/templates/partials/posts_list_item.tpl +5 -5
- package/templates/partials/quick-search-results.tpl +3 -3
- package/templates/partials/search-filters.tpl +184 -0
- package/templates/partials/search-results.tpl +28 -35
- package/templates/partials/sidebar/chats.tpl +26 -34
- package/templates/partials/sidebar/drafts.tpl +45 -34
- package/templates/partials/sidebar/logged-in-menu.tpl +5 -5
- package/templates/partials/sidebar/logged-out-menu.tpl +1 -1
- package/templates/partials/sidebar/notifications.tpl +30 -9
- package/templates/partials/sidebar/search-mobile.tpl +1 -1
- package/templates/partials/sidebar/search.tpl +1 -1
- package/templates/partials/sidebar/user-menu.tpl +38 -29
- package/templates/partials/sidebar-left.tpl +14 -11
- package/templates/partials/sidebar-right.tpl +1 -3
- package/templates/partials/skin-switcher.tpl +3 -3
- package/templates/partials/tags/filter-dropdown-content.tpl +34 -0
- package/templates/partials/tags_list.tpl +4 -4
- package/templates/partials/topic/browsing-users.tpl +0 -2
- package/templates/partials/topic/event.tpl +1 -1
- package/templates/partials/topic/navigation-post.tpl +5 -9
- package/templates/partials/topic/navigator-mobile.tpl +62 -0
- package/templates/partials/topic/navigator.tpl +23 -17
- package/templates/partials/topic/post-editor.tpl +0 -2
- package/templates/partials/topic/post-menu-list.tpl +60 -62
- package/templates/partials/topic/post-menu.tpl +16 -11
- package/templates/partials/topic/post.tpl +45 -27
- package/templates/partials/topic/quickreply.tpl +8 -8
- package/templates/partials/topic/reply-button.tpl +7 -7
- package/templates/partials/topic/sort.tpl +17 -5
- package/templates/partials/topic/tools.tpl +2 -2
- package/templates/partials/topic/topic-menu-list.tpl +22 -24
- package/templates/partials/topic/watch.tpl +42 -9
- package/templates/partials/topic-filters.tpl +6 -3
- package/templates/partials/topic-list-bar.tpl +50 -46
- package/templates/partials/topic-terms.tpl +6 -3
- package/templates/partials/topics_list.tpl +88 -93
- package/templates/partials/userFilter-placeholders.tpl +5 -0
- package/templates/partials/users/filter-dropdown-content.tpl +23 -0
- package/templates/partials/users/item.tpl +25 -27
- package/templates/partials/users_list.tpl +1 -1
- package/templates/popular.tpl +3 -1
- package/templates/post-queue.tpl +166 -0
- package/templates/recent.tpl +3 -2
- package/templates/register.tpl +4 -4
- package/templates/search.tpl +39 -177
- package/templates/tags.tpl +3 -3
- package/templates/top.tpl +3 -1
- package/templates/topic.tpl +74 -68
- package/templates/unread.tpl +3 -1
- package/templates/users.tpl +7 -3
- package/templates/modules/usercard.tpl +0 -39
- package/templates/partials/acceptTos.tpl +0 -11
- package/templates/partials/category-filter-content.tpl +0 -30
- package/templates/partials/category-filter-right.tpl +0 -5
- package/templates/partials/category-filter.tpl +0 -3
- package/templates/partials/category-selector-right.tpl +0 -5
- package/templates/partials/category-selector.tpl +0 -3
- package/templates/partials/slideout-menu.tpl +0 -6
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
|
|
7
7
|
{{{ if roomId }}}
|
|
8
8
|
<div component="chat/messages" class="expanded-chat d-flex flex-column h-100" data-roomid="{roomId}">
|
|
9
|
-
<div component="chat/header" class="d-flex align-items-center px-3 gap-
|
|
10
|
-
<
|
|
9
|
+
<div component="chat/header" class="d-flex align-items-center px-md-3 gap-3">
|
|
10
|
+
<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>
|
|
11
|
+
<h5 class="members flex-grow-1 fw-semibold tracking-tight mb-0">
|
|
11
12
|
{./chatWithMessage}
|
|
12
13
|
</h5>
|
|
13
14
|
|
|
@@ -20,13 +21,16 @@
|
|
|
20
21
|
<ul class="chat-content p-0 m-0 list-unstyled overflow-auto flex-grow-1">
|
|
21
22
|
<!-- IMPORT partials/chats/messages.tpl -->
|
|
22
23
|
</ul>
|
|
23
|
-
<div component="chat/composer" class="d-flex gap-
|
|
24
|
-
<div class="flex-grow-1 position-relative">
|
|
25
|
-
<
|
|
26
|
-
<
|
|
24
|
+
<div component="chat/composer" class="d-flex flex-column flex-md-row gap-2 border-top pt-2 align-items-start align-items-md-end">
|
|
25
|
+
<div class="w-100 flex-grow-1 position-relative input-group">
|
|
26
|
+
<button component="chat/upload/button" class="btn btn-outline-primary btn-sm align-self-stretch px-3 px-md-2" type="button"><i class="fa fa-fw fa-upload"></i></button>
|
|
27
|
+
<div class="flex-grow-1 position-relative">
|
|
28
|
+
<textarea component="chat/input" placeholder="[[modules:chat.placeholder.mobile]]" class="form-control chat-input mousetrap rounded-0" style="height:0;max-height:30vh;resize:none;"></textarea>
|
|
29
|
+
<span component="chat/message/remaining" class="text-xs text-muted position-absolute me-1 mb-1 end-0 bottom-0">{maximumChatMessageLength}</span>
|
|
30
|
+
</div>
|
|
31
|
+
<button class="btn btn-primary btn-sm align-self-stretch px-3 px-md-2" type="button" data-action="send"><i class="fa fa-fw fa-paper-plane"></i></button>
|
|
27
32
|
</div>
|
|
28
|
-
<
|
|
29
|
-
<form component="chat/upload" method="post" enctype="multipart/form-data">
|
|
33
|
+
<form class="hidden" component="chat/upload" method="post" enctype="multipart/form-data">
|
|
30
34
|
<input type="file" name="files[]" multiple class="hidden"/>
|
|
31
35
|
</form>
|
|
32
36
|
</div>
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
<li component="chat/message" class="chat-message mx-2 pe-2 clear{{{ if
|
|
1
|
+
<li component="chat/message" class="chat-message mx-2 pe-2 clear{{{ if messages.deleted }}} deleted{{{ end }}} {{{ if messages.newSet }}}border-top pt-3{{{ end }}}" data-index="{messages.index}" data-mid="{messages.messageId}" data-uid="{messages.fromuid}" data-self="{messages.self}" data-break="{messages.newSet}" data-timestamp="{messages.timestamp}">
|
|
2
2
|
<div class="message-header lh-1 d-flex align-items-center gap-2 text-sm {{{ if !messages.newSet }}}hidden{{{ end }}} pb-2">
|
|
3
3
|
<a href="{config.relative_path}/user/{messages.fromUser.userslug}" class="text-decoration-none">{buildAvatar(messages.fromUser, "18px", true, "not-responsive")}</a>
|
|
4
4
|
<span class="chat-user fw-semibold"><a href="{config.relative_path}/user/{messages.fromUser.userslug}">{messages.fromUser.displayname}</a></span>
|
|
5
|
-
{{{ if
|
|
5
|
+
{{{ if messages.fromUser.banned }}}
|
|
6
6
|
<span class="badge bg-danger">[[user:banned]]</span>
|
|
7
7
|
{{{ end }}}
|
|
8
|
-
{{{ if
|
|
8
|
+
{{{ if messages.fromUser.deleted }}}
|
|
9
9
|
<span class="badge bg-danger">[[user:deleted]]</span>
|
|
10
10
|
{{{ end }}}
|
|
11
11
|
<span class="chat-timestamp text-muted ms-2 timeago" title="{messages.timestampISO}"></span>
|
|
@@ -14,23 +14,21 @@
|
|
|
14
14
|
{{{ end }}}
|
|
15
15
|
</div>
|
|
16
16
|
<div class="message-body-wrapper hover-parent">
|
|
17
|
-
<div component="chat/message/body" class="message-body ps-0 py-0 overflow-auto">
|
|
17
|
+
<div component="chat/message/body" class="message-body ps-0 py-0 overflow-auto text-break">
|
|
18
18
|
{messages.content}
|
|
19
19
|
</div>
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
<!-- IF messages.self -->
|
|
21
|
+
{{{ if (!config.disableChatMessageEditing && messages.self ) }}}
|
|
23
22
|
<div class="position-relative">
|
|
24
23
|
<div class="btn-group border shadow-sm controls position-absolute small hover-d-block" style="bottom:5px; right:30px; display:none;">
|
|
25
24
|
<button class="btn btn-sm btn-link" data-action="edit"><i class="fa fa-pencil"></i></button>
|
|
26
25
|
<button class="btn btn-sm btn-link" data-action="delete"><i class="fa fa-trash"></i></button>
|
|
27
26
|
<button class="btn btn-sm btn-link" data-action="restore"><i class="fa fa-repeat"></i></button>
|
|
28
|
-
|
|
27
|
+
{{{ if isAdminOrGlobalMod }}}
|
|
29
28
|
<button class="btn btn-sm btn-link chat-ip" title="[[modules:chat.show-ip]]"><i class="fa fa-info-circle chat-ip-button"></i></button>
|
|
30
|
-
|
|
29
|
+
{{{ end }}}
|
|
31
30
|
</div>
|
|
32
31
|
</div>
|
|
33
|
-
|
|
34
|
-
<!-- ENDIF !config.disableChatMessageEditing -->
|
|
32
|
+
{{{ end }}}
|
|
35
33
|
</div>
|
|
36
34
|
</li>
|
|
@@ -1,22 +1,30 @@
|
|
|
1
1
|
<div class="dropdown">
|
|
2
|
-
<button class="btn btn-outline align-text-top" data-bs-toggle="dropdown" component="chat/controlsToggle"
|
|
3
|
-
|
|
2
|
+
<button class="btn btn-outline align-text-top" data-bs-toggle="dropdown" component="chat/controlsToggle">
|
|
3
|
+
<i class="fa fa-gear text-muted"></i>
|
|
4
|
+
</button>
|
|
5
|
+
<ul class="dropdown-menu dropdown-menu-end p-1 text-sm" component="chat/controls">
|
|
4
6
|
<li class="dropdown-header">[[modules:chat.options]]</li>
|
|
5
7
|
<li>
|
|
6
|
-
<a class="dropdown-item" href="#" data-action="members"
|
|
8
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" data-action="members">
|
|
9
|
+
<i class="fa fa-fw text-muted fa-cog"></i> [[modules:chat.manage-room]]
|
|
10
|
+
</a>
|
|
7
11
|
</li>
|
|
8
12
|
<li>
|
|
9
|
-
<a class="dropdown-item" href="#" data-action="rename"
|
|
13
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" data-action="rename">
|
|
14
|
+
<i class="fa fa-fw text-muted fa-edit"></i> [[modules:chat.rename-room]]
|
|
15
|
+
</a>
|
|
10
16
|
</li>
|
|
11
17
|
<li>
|
|
12
|
-
<a class="dropdown-item" href="#" data-action="leave"
|
|
18
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" data-action="leave">
|
|
19
|
+
<i class="fa fa-fw text-muted fa-sign-out"></i> [[modules:chat.leave]]
|
|
20
|
+
</a>
|
|
13
21
|
</li>
|
|
14
22
|
{{{ if users.length }}}
|
|
15
23
|
<li role="separator" class="dropdown-divider"></li>
|
|
16
24
|
<li class="dropdown-header">[[modules:chat.in-room]]</li>
|
|
17
25
|
{{{ each users }}}
|
|
18
26
|
<li>
|
|
19
|
-
<a class="dropdown-item" href="{config.relative_path}/uid/{../uid}">{buildAvatar(users, "24px", true)} {../username}</a>
|
|
27
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="{config.relative_path}/uid/{../uid}">{buildAvatar(users, "24px", true)} {../username}</a>
|
|
20
28
|
</li>
|
|
21
29
|
{{{ end }}}
|
|
22
30
|
{{{ end }}}
|
|
@@ -1,37 +1,46 @@
|
|
|
1
|
-
<
|
|
2
|
-
<
|
|
3
|
-
<div class="
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
<
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
{{{ end }}}
|
|
16
|
-
</div>
|
|
17
|
-
|
|
18
|
-
<div class="d-flex flex-grow-1 flex-column w-100">
|
|
19
|
-
<div class="room-name fw-semibold text-xs">
|
|
20
|
-
{{{ if !./lastUser.uid }}}
|
|
21
|
-
<span>[[modules:chat.no-users-in-room]]</span>
|
|
1
|
+
<div component="chat/recent/room" data-roomid="{./roomId}" data-full="1" class="rounded-1 {{{ if ./unread }}}unread{{{ end }}}">
|
|
2
|
+
<div class="d-flex gap-1 justify-content-between p-1">
|
|
3
|
+
<div class="chat-room-btn position-relative d-flex flex-grow-1 gap-2 justify-content-start align-items-start btn-ghost-sm ff-sans">
|
|
4
|
+
<div class="main-avatar">
|
|
5
|
+
<a class="stretched-link" href="{config.relative_path}/me/chats/{./roomId}"></a>
|
|
6
|
+
{{{ if ./users.length }}}
|
|
7
|
+
{{{ if ./groupChat}}}
|
|
8
|
+
<div class="position-relative stacked-avatars">
|
|
9
|
+
<span class="text-decoration-none position-absolute" href="{config.relative_path}/user/{./users.1.userslug}">{buildAvatar(./users.1, "24px", true)}</span>
|
|
10
|
+
<span class="text-decoration-none position-absolute" href="{config.relative_path}/user/{./users.0.userslug}" >{buildAvatar(./users.0, "24px", true)}</span>
|
|
11
|
+
</div>
|
|
12
|
+
{{{ else }}}
|
|
13
|
+
<span href="{config.relative_path}/user/{./users.0.userslug}" class="text-decoration-none">{buildAvatar(./users.0, "32px", true)}</span>
|
|
14
|
+
{{{ end }}}
|
|
22
15
|
{{{ else }}}
|
|
23
|
-
|
|
16
|
+
<span class="avatar avatar-rounded text-bg-warning" component="avatar/icon" style="--avatar-size: 32px;">?</span>
|
|
24
17
|
{{{ end }}}
|
|
25
18
|
</div>
|
|
26
|
-
|
|
27
|
-
<div class="
|
|
28
|
-
<
|
|
29
|
-
|
|
30
|
-
|
|
19
|
+
|
|
20
|
+
<div class="d-flex flex-grow-1 flex-column w-100">
|
|
21
|
+
<div class="room-name fw-semibold text-xs">
|
|
22
|
+
{{{ if !./lastUser.uid }}}
|
|
23
|
+
<span>[[modules:chat.no-users-in-room]]</span>
|
|
24
|
+
{{{ else }}}
|
|
25
|
+
{{{ if ./roomName }}}{./roomName}{{{ else }}}{./usernames}{{{ end }}}
|
|
26
|
+
{{{ end }}}
|
|
27
|
+
</div>
|
|
28
|
+
{{{ if ./teaser }}}
|
|
29
|
+
<div class="teaser-content text-sm line-clamp-3 text-break">
|
|
30
|
+
<span href="#" class="text-decoration-none">{buildAvatar(./teaser.user, "14px", true)}</span>
|
|
31
|
+
<strong class="text-xs fw-semibold teaser-username">{./teaser.user.username}:</strong>
|
|
32
|
+
{./teaser.content}
|
|
33
|
+
</div>
|
|
34
|
+
<div class="teaser-timestamp text-muted text-xs">{./teaser.timeagoLong}</div>
|
|
35
|
+
{{{ end }}}
|
|
31
36
|
</div>
|
|
32
|
-
<div class="teaser-timestamp text-muted text-xs">{./teaser.timeagoLong}</div>
|
|
33
|
-
{{{ end }}}
|
|
34
37
|
</div>
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
<
|
|
38
|
+
<div>
|
|
39
|
+
<button class="mark-read btn-ghost-sm" style="width: 1.5rem; height: 1.5rem;">
|
|
40
|
+
<i class="unread fa fa-2xs fa-circle text-primary {{{ if !./unread }}}hidden{{{ end }}}"></i>
|
|
41
|
+
<i class="read fa fa-2xs fa-circle-o text-secondary {{{ if ./unread }}}hidden{{{ end }}}"></i>
|
|
42
|
+
</button>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
<hr class="my-1" />
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
<div class="row d-flex justify-content-center position-fixed start-0 bottom-0 vw-100 pb-5 mb-5 pb-md-0 mb-md-0" style="z-index: 2;">
|
|
2
|
+
<div class="cookie-consent text-bg-info col-10 col-sm-8 col-lg-6 p-3 rounded d-flex gap-2 mb-5 mb-md-3 justify-content-between align-items-center">
|
|
3
|
+
<span>{message} <a class="fw-bold" target="_blank" rel="noopener" href="{link_url}">{link}</a></span>
|
|
4
|
+
<button class="btn btn-primary text-nowrap">{dismiss}</button>
|
|
5
|
+
</div>
|
|
6
6
|
</div>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<div class="dropdown" component="flags/bulk-actions">
|
|
2
|
+
<button class="filter-btn btn btn-light btn-sm border" data-bs-toggle="dropdown" autocomplete="off" aria-haspopup="true" aria-expanded="false" disabled="disabled">
|
|
3
|
+
<span class="filter-label">[[flags:bulk-actions]]</span>
|
|
4
|
+
</button>
|
|
5
|
+
<ul class="dropdown-menu dropdown-menu-end p-1 text-sm">
|
|
6
|
+
<li><a href="#" class="dropdown-item rounded-1" data-action="bulk-assign">[[flags:assign-to-me]]</a></li>
|
|
7
|
+
<li><a href="#" class="dropdown-item rounded-1" data-action="bulk-mark-resolved">[[flags:bulk-resolve]]</a></li>
|
|
8
|
+
</ul>
|
|
9
|
+
</div>
|
|
@@ -1,99 +1,186 @@
|
|
|
1
|
-
|
|
1
|
+
<div component="flags/filters" class="d-flex flex-wrap gap-2 pb-3 border-bottom">
|
|
2
|
+
<div class="btn-group bottom-sheet">
|
|
3
|
+
<a class="filter-btn btn btn-light btn-sm border {{{ if filters.quick }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
|
|
4
|
+
<span class="filter-label">{{{ if filters.quick }}}[[flags:filter-quick-{./filters.quick}]]{{{ else }}}[[flags:quick-filters]]{{{ end }}}</span>
|
|
5
|
+
<span class="caret"></span>
|
|
6
|
+
</a>
|
|
7
|
+
<ul class="dropdown-menu p-1 text-sm">
|
|
8
|
+
<li>
|
|
9
|
+
<a class="dropdown-item rounded-1" href="{config.relative_path}/flags?quick=mine">[[flags:filter-quick-mine]]</a>
|
|
10
|
+
</li>
|
|
11
|
+
</ul>
|
|
12
|
+
</div>
|
|
13
|
+
|
|
2
14
|
|
|
3
|
-
<div class="
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
<
|
|
15
|
+
<div component="category/dropdown" class="btn-group category-dropdown-container bottom-sheet">
|
|
16
|
+
<button type="button" class="filter-btn btn btn-light btn-sm border d-flex gap-2 dropdown-toggle {{{ if filters.cid }}}active-filter{{{ end }}}" data-bs-toggle="dropdown">
|
|
17
|
+
{{{ if selectedCategory }}}
|
|
18
|
+
<span class="category-item d-inline-flex align-items-center gap-1">
|
|
19
|
+
{buildCategoryIcon(selectedCategory, "18px", "rounded-circle")}
|
|
20
|
+
<span class="visible-md-inline visible-lg-inline">{selectedCategory.name}</span>
|
|
21
|
+
</span>
|
|
22
|
+
{{{ else }}}
|
|
23
|
+
<span class="visible-md-inline visible-lg-inline">[[unread:all_categories]]</span>
|
|
24
|
+
{{{ end }}}
|
|
25
|
+
<span class="caret"></span>
|
|
26
|
+
</button>
|
|
27
|
+
<div component="category-selector-search" class="hidden position-absolute">
|
|
28
|
+
<input type="text" class="form-control form-control-sm" placeholder="[[search:type-to-search]]" autocomplete="off">
|
|
7
29
|
</div>
|
|
8
|
-
<
|
|
30
|
+
<ul component="category/list" class="dropdown-menu p-1 text-sm category-dropdown-menu" role="menu">
|
|
31
|
+
{{{each categoryItems}}}
|
|
32
|
+
<li role="presentation" class="category {{{ if ../disabledClass }}}disabled{{{ end }}}" data-cid="{../cid}" data-parent-cid="{../parentCid}" data-name="{../name}">
|
|
33
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menu-item" href="#">
|
|
34
|
+
{../level}
|
|
35
|
+
<span component="category-markup" class="flex-grow-1" style="{{{ if ../match }}}font-weight: bold;{{{end}}}">
|
|
36
|
+
<div class="category-item d-inline-flex align-items-center gap-1">
|
|
37
|
+
{{{ if ./icon }}}
|
|
38
|
+
{buildCategoryIcon(@value, "24px", "rounded-circle")}
|
|
39
|
+
{{{ end }}}
|
|
40
|
+
{./name}
|
|
41
|
+
</div>
|
|
42
|
+
</span>
|
|
43
|
+
<i component="category/select/icon" class="flex-shrink-0 fa fa-fw fa-check {{{ if !../selected }}}invisible{{{ end }}}"></i>
|
|
44
|
+
</a>
|
|
45
|
+
</li>
|
|
46
|
+
{{{end}}}
|
|
47
|
+
</ul>
|
|
9
48
|
</div>
|
|
10
|
-
</div>
|
|
11
49
|
|
|
12
|
-
<div class="
|
|
13
|
-
|
|
14
|
-
|
|
50
|
+
<div class="btn-group bottom-sheet">
|
|
51
|
+
<a class="filter-btn btn btn-light btn-sm border {{{ if (sort != "newest") }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
|
|
52
|
+
<span class="filter-label">{{{ if (sort != "newest") }}}[[flags:sort-{./sort}]]{{{ else }}}[[flags:sort]]{{{ end }}}</span>
|
|
53
|
+
<span class="caret"></span>
|
|
54
|
+
</a>
|
|
55
|
+
<ul class="dropdown-menu p-1 text-sm">
|
|
56
|
+
<li><h6 class="dropdown-header">[[flags:sort-all]]</h6></li>
|
|
57
|
+
<li class="dropdown-item rounded-1" data-name="sort" data-value="newest">[[flags:sort-newest]]</li>
|
|
58
|
+
<li class="dropdown-item rounded-1" data-name="sort" data-value="oldest">[[flags:sort-oldest]]</li>
|
|
59
|
+
<li class="dropdown-item rounded-1" data-name="sort" data-value="reports">[[flags:sort-reports]]</li>
|
|
60
|
+
<li><h6 class="dropdown-header">[[flags:sort-posts-only]]</h6></li>
|
|
61
|
+
<li class="dropdown-item rounded-1" data-name="sort" data-value="downvotes">[[flags:sort-downvotes]]</li>
|
|
62
|
+
<li class="dropdown-item rounded-1" data-name="sort" data-value="upvotes">[[flags:sort-upvotes]]</li>
|
|
63
|
+
<li class="dropdown-item rounded-1" data-name="sort" data-value="replies">[[flags:sort-replies]]</li>
|
|
64
|
+
</ul>
|
|
15
65
|
</div>
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
66
|
+
|
|
67
|
+
<div class="btn-group bottom-sheet">
|
|
68
|
+
<a class="filter-btn btn btn-light btn-sm border {{{ if filters.state }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
|
|
69
|
+
<span class="filter-label">{{{ if filters.state }}}[[flags:state-{./filters.state}]]{{{ else }}}[[flags:filter-state]]{{{ end }}}</span>
|
|
70
|
+
<span class="caret"></span>
|
|
71
|
+
</a>
|
|
72
|
+
<ul class="dropdown-menu p-1 text-sm">
|
|
73
|
+
<li class="dropdown-item rounded-1" data-name="state" data-value="open">[[flags:state-open]]</li>
|
|
74
|
+
<li class="dropdown-item rounded-1" data-name="state" data-value="wip">[[flags:state-wip]]</li>
|
|
75
|
+
<li class="dropdown-item rounded-1" data-name="state" data-value="resolved">[[flags:state-resolved]]</li>
|
|
76
|
+
<li class="dropdown-item rounded-1" data-name="state" data-value="rejected">[[flags:state-rejected]]</li>
|
|
19
77
|
</ul>
|
|
20
78
|
</div>
|
|
21
|
-
</div>
|
|
22
79
|
|
|
23
|
-
<div class="
|
|
24
|
-
|
|
25
|
-
|
|
80
|
+
<div class="btn-group bottom-sheet">
|
|
81
|
+
<a class="filter-btn btn btn-light btn-sm border {{{ if filters.type }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
|
|
82
|
+
<span class="filter-label">{{{ if filters.type }}}[[flags:filter-type-{./filters.type}]]{{{ else }}}[[flags:filter-type]]{{{ end }}}</span>
|
|
83
|
+
<span class="caret"></span>
|
|
84
|
+
</a>
|
|
85
|
+
<ul class="dropdown-menu p-1 text-sm">
|
|
86
|
+
<li class="dropdown-item rounded-1" data-name="type" data-value="all">[[flags:filter-type-all]]</li>
|
|
87
|
+
<li class="dropdown-item rounded-1" data-name="type" data-value="post">[[flags:filter-type-post]]</li>
|
|
88
|
+
<li class="dropdown-item rounded-1" data-name="type" data-value="user">[[flags:filter-type-user]]</li>
|
|
89
|
+
</ul>
|
|
26
90
|
</div>
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
91
|
+
|
|
92
|
+
<div component="flags/filter/assignee" class="dropdown bottom-sheet" data-filter-name="assignee">
|
|
93
|
+
<a component="user/filter/button" class="filter-btn btn btn-light btn-sm border {{{ if filters.assignee }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
|
|
94
|
+
<span class="filter-label">[[flags:filter-assignee]]</span>
|
|
95
|
+
<span class="caret"></span>
|
|
96
|
+
</a>
|
|
97
|
+
|
|
98
|
+
<ul class="dropdown-menu p-1 text-sm" style="min-width: 350px;">
|
|
99
|
+
<li class="px-3 py-1 d-flex flex-column gap-2">
|
|
100
|
+
<input type="text" class="form-control" component="user/filter/search" placeholder="[[search:type-a-username]]">
|
|
101
|
+
<div component="user/filter/selected" class="d-flex flex-wrap gap-2">
|
|
102
|
+
{{{ each selected.assignee }}}
|
|
103
|
+
<div class="d-flex px-2 py-1 rounded-1 text-bg-primary gap-2 align-items-center text-sm">
|
|
104
|
+
{buildAvatar(@value, "16px", true)} {./username}
|
|
105
|
+
<button component="user/filter/delete" data-uid="{./uid}" class="btn btn-primary btn-sm py-0"><i class="fa fa-times fa-xs"></i></button>
|
|
34
106
|
</div>
|
|
107
|
+
{{{ end }}}
|
|
35
108
|
</div>
|
|
36
|
-
<
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
<option value="oldest">[[flags:sort-oldest]]</option>
|
|
42
|
-
<option value="reports">[[flags:sort-reports]]</option>
|
|
43
|
-
</optgroup>
|
|
44
|
-
<optgroup label="[[flags:sort-posts-only]]">
|
|
45
|
-
<option value="downvotes">[[flags:sort-downvotes]]</option>
|
|
46
|
-
<option value="upvotes">[[flags:sort-upvotes]]</option>
|
|
47
|
-
<option value="replies">[[flags:sort-replies]]</option>
|
|
48
|
-
</optgroup>
|
|
49
|
-
</select>
|
|
50
|
-
</div>
|
|
51
|
-
<div class="mb-3">
|
|
52
|
-
<label class="form-label" for="filter-state">[[flags:filter-state]]</label>
|
|
53
|
-
<select class="form-control" id="filter-state" name="state">
|
|
54
|
-
<option value="">[[flags:state-all]]</option>
|
|
55
|
-
<option value="open">[[flags:state-open]]</option>
|
|
56
|
-
<option value="wip">[[flags:state-wip]]</option>
|
|
57
|
-
<option value="resolved">[[flags:state-resolved]]</option>
|
|
58
|
-
<option value="rejected">[[flags:state-rejected]]</option>
|
|
59
|
-
</select>
|
|
109
|
+
<hr/>
|
|
110
|
+
<div component="user/filter/results" class="d-flex flex-wrap gap-2">
|
|
111
|
+
{{{ each userFilterResults }}}
|
|
112
|
+
<button class="btn btn-light btn-sm border" data-uid="{./uid}" data-username="{./username}">{buildAvatar(@value, "16px", true)} {./username}</button>
|
|
113
|
+
{{{ end }}}
|
|
60
114
|
</div>
|
|
115
|
+
</li>
|
|
116
|
+
</ul>
|
|
117
|
+
</div>
|
|
61
118
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
<option value="user">[[flags:filter-type-user]]</option>
|
|
68
|
-
</select>
|
|
69
|
-
</div>
|
|
70
|
-
</fieldset>
|
|
119
|
+
<div component="flags/filter/reporterId" class="dropdown bottom-sheet" data-filter-name="reporterId">
|
|
120
|
+
<a component="user/filter/button" class="filter-btn btn btn-light btn-sm border {{{ if filters.reporterId }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
|
|
121
|
+
<span class="filter-label">[[flags:filter-reporterId]]</span>
|
|
122
|
+
<span class="caret"></span>
|
|
123
|
+
</a>
|
|
71
124
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
125
|
+
<ul class="dropdown-menu p-1 text-sm" style="min-width: 350px;">
|
|
126
|
+
<li class="px-3 py-1 d-flex flex-column gap-2">
|
|
127
|
+
<input type="text" class="form-control" component="user/filter/search" placeholder="[[search:type-a-username]]">
|
|
128
|
+
<div component="user/filter/selected" class="d-flex flex-wrap gap-2">
|
|
129
|
+
{{{ each selected.reporterId }}}
|
|
130
|
+
<div class="d-flex px-2 py-1 rounded-1 text-bg-primary gap-2 align-items-center text-sm">
|
|
131
|
+
{buildAvatar(@value, "16px", true)} {./username}
|
|
132
|
+
<button component="user/filter/delete" data-uid="{./uid}" class="btn btn-primary btn-sm py-0"><i class="fa fa-times fa-xs"></i></button>
|
|
133
|
+
</div>
|
|
134
|
+
{{{ end }}}
|
|
76
135
|
</div>
|
|
77
|
-
|
|
78
|
-
<div class="
|
|
79
|
-
|
|
80
|
-
<
|
|
136
|
+
<hr/>
|
|
137
|
+
<div component="user/filter/results" class="d-flex flex-wrap gap-2">
|
|
138
|
+
{{{ each userFilterResults }}}
|
|
139
|
+
<button class="btn btn-light btn-sm border" data-uid="{./uid}" data-username="{./username}">{buildAvatar(@value, "16px", true)} {./username}</button>
|
|
140
|
+
{{{ end }}}
|
|
81
141
|
</div>
|
|
142
|
+
</li>
|
|
143
|
+
</ul>
|
|
144
|
+
</div>
|
|
145
|
+
|
|
146
|
+
<div component="flags/filter/targetUid" class="dropdown bottom-sheet" data-filter-name="targetUid">
|
|
147
|
+
<a component="user/filter/button" class="filter-btn btn btn-light btn-sm border {{{ if filters.targetUid }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
|
|
148
|
+
<span class="filter-label">[[flags:filter-targetUid]]</span>
|
|
149
|
+
<span class="caret"></span>
|
|
150
|
+
</a>
|
|
82
151
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
152
|
+
<ul class="dropdown-menu p-1 text-sm" style="min-width: 350px;">
|
|
153
|
+
<li class="px-3 py-1 d-flex flex-column">
|
|
154
|
+
<input type="text" class="form-control" component="user/filter/search" placeholder="[[search:type-a-username]]">
|
|
155
|
+
<div component="user/filter/selected" class="d-flex flex-wrap gap-2">
|
|
156
|
+
{{{ each selected.targetUid }}}
|
|
157
|
+
<div class="d-flex px-2 py-1 rounded-1 text-bg-primary gap-2 align-items-center text-sm">
|
|
158
|
+
{buildAvatar(@value, "16px", true)} {./username}
|
|
159
|
+
<button component="user/filter/delete" data-uid="{./uid}" class="btn btn-primary btn-sm py-0"><i class="fa fa-times fa-xs"></i></button>
|
|
160
|
+
</div>
|
|
161
|
+
{{{ end }}}
|
|
162
|
+
</div>
|
|
163
|
+
<hr/>
|
|
164
|
+
<div component="user/filter/results" class="d-flex flex-wrap gap-2">
|
|
165
|
+
{{{ each userFilterResults }}}
|
|
166
|
+
<button class="btn btn-light btn-sm border" data-uid="{./uid}" data-username="{./username}">{buildAvatar(@value, "16px", true)} {./username}</button>
|
|
167
|
+
{{{ end }}}
|
|
86
168
|
</div>
|
|
87
|
-
</
|
|
169
|
+
</li>
|
|
170
|
+
</ul>
|
|
171
|
+
</div>
|
|
88
172
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
<button type="button" class="btn btn-link" data-bs-toggle="collapse" data-bs-target="#more-filters" aria-controls="#more-filters" data-text-variant="[[flags:fewer-filters]] ">[[flags:more-filters]] <i class="fa fa-sort"></i></button>
|
|
94
|
-
{{{ end }}}
|
|
95
|
-
<button type="button" id="apply-filters" class="btn btn-primary">[[flags:apply-filters]]</button>
|
|
96
|
-
</div>
|
|
97
|
-
</form>
|
|
173
|
+
<div component="flags/filters/reset" class="ms-auto">
|
|
174
|
+
<a class="filter-btn btn btn-warning btn-sm border {{{ if !hasFilter }}}btn-light disabled{{{ end }}}" href="{config.relative_path}/flags" role="button">
|
|
175
|
+
<span class="filter-label">[[flags:filter-reset]]</span>
|
|
176
|
+
</a>
|
|
98
177
|
</div>
|
|
178
|
+
|
|
179
|
+
<!-- IMPORT partials/flags/bulk-actions.tpl -->
|
|
180
|
+
|
|
181
|
+
<form role="form">
|
|
182
|
+
<input type="hidden" name="sort" value="{./sort}" />
|
|
183
|
+
<input type="hidden" name="state" value="{./filters.state}" />
|
|
184
|
+
<input type="hidden" name="type" value="{./filters.type}" />
|
|
185
|
+
</form>
|
|
99
186
|
</div>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<div class="card card-header text-xs px-2 py-1 fw-semibold border-0 align-self-start">
|
|
2
|
+
[[flags:x-flags-found, {count}]]
|
|
3
|
+
</div>
|
|
4
|
+
|
|
5
|
+
<table class="table table-striped table-hover" component="flags/list">
|
|
6
|
+
<thead>
|
|
7
|
+
<tr>
|
|
8
|
+
<th></th>
|
|
9
|
+
<th class="text-xs text-muted">[[flags:reports]]</th>
|
|
10
|
+
<th class="text-xs text-muted">[[flags:first-reported]]</th>
|
|
11
|
+
<th class="text-xs text-muted">[[flags:state]]</th>
|
|
12
|
+
<th>
|
|
13
|
+
<input type="checkbox" data-action="toggle-all" autocomplete="off" />
|
|
14
|
+
</th>
|
|
15
|
+
</tr>
|
|
16
|
+
</thead>
|
|
17
|
+
<tbody>
|
|
18
|
+
{{{ each flags }}}
|
|
19
|
+
<tr data-flag-id="{./flagId}">
|
|
20
|
+
<td>
|
|
21
|
+
<a class="text-reset text-decoration-underline" href="{config.relative_path}/flags/{./flagId}">
|
|
22
|
+
{./target_readable}
|
|
23
|
+
</a>
|
|
24
|
+
</td>
|
|
25
|
+
<td>
|
|
26
|
+
{./heat}
|
|
27
|
+
</td>
|
|
28
|
+
<td><span class="timeago" title="{./datetimeISO}"></span></td>
|
|
29
|
+
<td><span class="badge bg-{./labelClass}">[[flags:state-{./state}]]</span></td>
|
|
30
|
+
<td>
|
|
31
|
+
<input type="checkbox" autocomplete="off" />
|
|
32
|
+
</td>
|
|
33
|
+
</tr>
|
|
34
|
+
{{{end}}}
|
|
35
|
+
</tbody>
|
|
36
|
+
</table>
|
|
37
|
+
|
|
38
|
+
<!-- IMPORT partials/paginator.tpl -->
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<div class="col-12 col-lg-6">
|
|
5
5
|
<div class="mb-3">
|
|
6
6
|
<label class="form-label" for="name">[[groups:details.group_name]]</label>
|
|
7
|
-
<input
|
|
7
|
+
<input {{{ if group.system }}}readonly{{{ end }}} class="form-control" name="name" id="name" type="text" value="{group.displayName}" />
|
|
8
8
|
</div>
|
|
9
9
|
<div class="mb-3">
|
|
10
10
|
<label class="form-label" for="name">[[groups:details.description]]</label>
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
<div class="form-check">
|
|
15
15
|
<label class="form-check-label">[[groups:details.private]]</label>
|
|
16
|
-
<input class="form-check-input" name="private" type="checkbox"
|
|
16
|
+
<input class="form-check-input" name="private" type="checkbox"{{{ if group.private }}} checked{{{ end }}}>
|
|
17
17
|
{{{ if !allowPrivateGroups }}}
|
|
18
18
|
<p class="form-text">
|
|
19
19
|
[[groups:details.private_system_help]]
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
</div>
|
|
26
26
|
<div class="form-check">
|
|
27
27
|
<label class="form-check-label">[[groups:details.hidden]]</label>
|
|
28
|
-
<input class="form-check-input" name="hidden" type="checkbox"
|
|
28
|
+
<input class="form-check-input" name="hidden" type="checkbox"{{{ if group.hidden }}} checked{{{ end }}}>
|
|
29
29
|
<p class="form-text text-xs m-0">
|
|
30
30
|
[[groups:details.hidden_help]]
|
|
31
31
|
</p>
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
<label class="form-label" for="memberPostCids">[[groups:details.member-post-cids]]</label>
|
|
83
83
|
<div class="d-flex gap-1">
|
|
84
84
|
<div class="member-post-cids-selector">
|
|
85
|
-
<!-- IMPORT partials/category-
|
|
85
|
+
<!-- IMPORT partials/category/selector-dropdown-left.tpl -->
|
|
86
86
|
</div>
|
|
87
87
|
<input id="memberPostCids" type="text" class="form-control" value="{group.memberPostCids}">
|
|
88
88
|
</div>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<a href="{config.relative_path}/groups/{./slug}" class="badge rounded-1 text-uppercase text-truncate text-decoration-none" style="max-width: 150px;color:{./textColor};background-color: {./labelColor};"><i class="fa {{{ if ./icon }}}{./icon}{{{ if ./userTitle}}} me-1{{{ end }}}{{{else}}}hidden{{{ end }}}"></i><span class="badge-text">{{{ if ./userTitle }}}{./userTitle}{{{ end }}}</span></a>
|
|
1
|
+
<a href="{config.relative_path}/groups/{./slug}" class="badge rounded-1 text-uppercase text-truncate text-decoration-none" style="max-width: 150px;color:{./textColor};background-color: {./labelColor};"><i class="fa {{{ if ./icon }}}{./icon}{{{ if ./userTitle}}} me-1{{{ end }}}{{{else}}}hidden{{{ end }}}"></i><span class="badge-text align-text-bottom">{{{ if ./userTitle }}}{./userTitle}{{{ end }}}</span></a>
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
</div>
|
|
11
11
|
|
|
12
12
|
<div class="mb-2 clearfix">
|
|
13
|
-
<button class="btn btn-primary btn-sm float-end" component="groups/members/bulk-invite-button">[[groups:bulk-invite]]</button>
|
|
13
|
+
<button type="button" class="btn btn-primary btn-sm float-end" component="groups/members/bulk-invite-button">[[groups:bulk-invite]]</button>
|
|
14
14
|
</div>
|
|
15
15
|
|
|
16
16
|
<table component="groups/invited" class="table table-hover">
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
<a href="{config.relative_path}/groups/{./slug}" class="d-block h-100 text-reset text-decoration-none">
|
|
6
6
|
<div class="card-body d-flex flex-column gap-1 border border-top-0 rounded-bottom h-100">
|
|
7
7
|
<div class="d-flex">
|
|
8
|
-
<div class="flex-1 fs-6 fw-semibold">{./displayName}</div>
|
|
9
|
-
<div class="text-sm"><i class="text-muted fa-solid fa-user"></i> {./memberCount}</div>
|
|
8
|
+
<div class="flex-grow-1 fs-6 fw-semibold">{./displayName}</div>
|
|
9
|
+
<div class="flex-shrink-0 text-sm"><i class="text-muted fa-solid fa-user"></i> {./memberCount}</div>
|
|
10
10
|
</div>
|
|
11
11
|
<div class="text-sm">{./description}</div>
|
|
12
12
|
</div>
|