nodebb-theme-harmony 1.0.0-beta.7 → 1.0.0-beta.71
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 +5 -1
- package/library.js +21 -7
- package/package.json +1 -1
- package/public/harmony.js +148 -9
- 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 +53 -25
- package/scss/common.scss +60 -8
- package/scss/flags.scss +5 -0
- package/scss/harmony.scss +3 -0
- package/scss/mixins.scss +7 -3
- package/scss/modals.scss +6 -1
- 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/topic-navigator.scss +14 -42
- package/scss/modules/topics-list.scss +6 -0
- package/scss/overrides.scss +4 -1
- package/scss/search.scss +0 -0
- package/scss/sidebar.scss +20 -10
- package/scss/topic.scss +26 -13
- package/templates/account/blocks.tpl +35 -41
- package/templates/account/categories.tpl +26 -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 +66 -73
- package/templates/account/sessions.tpl +8 -30
- package/templates/account/settings.tpl +193 -198
- package/templates/account/theme.tpl +35 -26
- package/templates/account/topics.tpl +33 -38
- package/templates/account/uploads.tpl +33 -40
- package/templates/admin/plugins/harmony.tpl +17 -3
- package/templates/categories.tpl +1 -1
- package/templates/category.tpl +12 -13
- package/templates/chats.tpl +7 -8
- package/templates/flags/detail.tpl +160 -193
- package/templates/flags/list.tpl +4 -70
- package/templates/footer.tpl +2 -2
- package/templates/groups/details.tpl +21 -18
- package/templates/groups/list.tpl +1 -1
- package/templates/groups/members.tpl +0 -2
- package/templates/header.tpl +1 -1
- package/templates/login.tpl +2 -2
- package/templates/notifications.tpl +1 -1
- package/templates/partials/account/category-item.tpl +4 -4
- 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 +6 -0
- package/templates/partials/breadcrumbs.tpl +6 -6
- package/templates/partials/categories/item.tpl +20 -19
- package/templates/partials/categories/lastpost.tpl +2 -2
- package/templates/partials/{category-filter-content.tpl → category/filter-dropdown-content.tpl} +8 -6
- package/templates/partials/{category-selector-content.tpl → category/selector-dropdown-content.tpl} +3 -3
- package/templates/partials/category/subcategory.tpl +1 -1
- package/templates/partials/category/tags.tpl +0 -2
- package/templates/partials/category/watch.tpl +28 -4
- package/templates/partials/chats/message-window.tpl +10 -7
- package/templates/partials/chats/message.tpl +4 -6
- package/templates/partials/chats/recent_room.tpl +41 -32
- package/templates/partials/cookie-consent.tpl +5 -5
- package/templates/partials/flags/filters.tpl +142 -85
- 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/memberlist.tpl +1 -1
- package/templates/partials/groups/sidebar-left.tpl +1 -1
- package/templates/partials/header/brand.tpl +1 -1
- package/templates/partials/mobile-footer.tpl +69 -64
- package/templates/partials/notifications_list.tpl +1 -1
- 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 -32
- package/templates/partials/sidebar/chats.tpl +22 -33
- package/templates/partials/sidebar/drafts.tpl +42 -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 +29 -8
- package/templates/partials/sidebar/search.tpl +1 -1
- package/templates/partials/sidebar/user-menu.tpl +6 -6
- package/templates/partials/sidebar-left.tpl +13 -10
- package/templates/partials/sidebar-right.tpl +1 -3
- package/templates/partials/skin-switcher.tpl +2 -2
- package/templates/partials/tags/filter-dropdown-content.tpl +31 -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 +21 -17
- package/templates/partials/topic/post-editor.tpl +0 -2
- package/templates/partials/topic/post-menu-list.tpl +36 -38
- package/templates/partials/topic/post-menu.tpl +15 -10
- package/templates/partials/topic/post.tpl +35 -17
- package/templates/partials/topic/quickreply.tpl +6 -6
- package/templates/partials/topic/reply-button.tpl +1 -1
- package/templates/partials/topic/topic-menu-list.tpl +16 -18
- package/templates/partials/topic/watch.tpl +28 -4
- package/templates/partials/topic-list-bar.tpl +50 -46
- package/templates/partials/topics_list.tpl +40 -38
- package/templates/partials/userFilter-placeholders.tpl +5 -0
- package/templates/partials/users/filter-dropdown-content.tpl +20 -0
- package/templates/partials/users/item.tpl +24 -26
- package/templates/partials/users_list.tpl +1 -1
- package/templates/popular.tpl +3 -1
- package/templates/post-queue.tpl +120 -0
- package/templates/recent.tpl +3 -2
- package/templates/register.tpl +2 -2
- 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 +2 -2
- package/templates/modules/usercard.tpl +0 -39
- package/templates/partials/acceptTos.tpl +0 -11
- 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
|
@@ -1,99 +1,156 @@
|
|
|
1
1
|
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
2
|
|
|
3
|
-
<div class="
|
|
4
|
-
<
|
|
5
|
-
<
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
</
|
|
3
|
+
<div class="d-flex align-items-start gap-2 pb-3 border-bottom">
|
|
4
|
+
<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">
|
|
5
|
+
<span class="filter-label">{{{ if filters.quick }}}[[flags:filter-quick-{./filters.quick}]]{{{ else }}}[[flags:quick-filters]]{{{ end }}}</span>
|
|
6
|
+
<span class="caret"></span>
|
|
7
|
+
</a>
|
|
8
|
+
<ul class="dropdown-menu">
|
|
9
|
+
<li>
|
|
10
|
+
<a class="dropdown-item" href="{config.relative_path}/flags?quick=mine">[[flags:filter-quick-mine]]</a>
|
|
11
|
+
</li>
|
|
12
|
+
</ul>
|
|
11
13
|
|
|
12
|
-
<div class="
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
<div component="flags/filters" class="ps-2 ms-2 border-start d-flex gap-2 me-auto">
|
|
15
|
+
<!-- IMPORT partials/category/filter-dropdown-left.tpl -->
|
|
16
|
+
|
|
17
|
+
<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">
|
|
18
|
+
<span class="filter-label">{{{ if (sort != "newest") }}}[[flags:sort-{./sort}]]{{{ else }}}[[flags:sort]]{{{ end }}}</span>
|
|
19
|
+
<span class="caret"></span>
|
|
20
|
+
</a>
|
|
21
|
+
<ul class="dropdown-menu">
|
|
22
|
+
<li><h6 class="dropdown-header">[[flags:sort-all]]</h6></li>
|
|
23
|
+
<li class="dropdown-item" data-name="sort" data-value="newest">[[flags:sort-newest]]</li>
|
|
24
|
+
<li class="dropdown-item" data-name="sort" data-value="oldest">[[flags:sort-oldest]]</li>
|
|
25
|
+
<li class="dropdown-item" data-name="sort" data-value="reports">[[flags:sort-reports]]</li>
|
|
26
|
+
<li><h6 class="dropdown-header">[[flags:sort-posts-only]]</h6></li>
|
|
27
|
+
<li class="dropdown-item" data-name="sort" data-value="downvotes">[[flags:sort-downvotes]]</li>
|
|
28
|
+
<li class="dropdown-item" data-name="sort" data-value="upvotes">[[flags:sort-upvotes]]</li>
|
|
29
|
+
<li class="dropdown-item" data-name="sort" data-value="replies">[[flags:sort-replies]]</li>
|
|
19
30
|
</ul>
|
|
20
|
-
</div>
|
|
21
|
-
</div>
|
|
22
31
|
|
|
23
|
-
<
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
<
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
<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">
|
|
33
|
+
<span class="filter-label">{{{ if filters.state }}}[[flags:state-{./filters.state}]]{{{ else }}}[[flags:filter-state]]{{{ end }}}</span>
|
|
34
|
+
<span class="caret"></span>
|
|
35
|
+
</a>
|
|
36
|
+
<ul class="dropdown-menu">
|
|
37
|
+
<li class="dropdown-item" data-name="state" data-value="open">[[flags:state-open]]</li>
|
|
38
|
+
<li class="dropdown-item" data-name="state" data-value="wip">[[flags:state-wip]]</li>
|
|
39
|
+
<li class="dropdown-item" data-name="state" data-value="resolved">[[flags:state-resolved]]</li>
|
|
40
|
+
<li class="dropdown-item" data-name="state" data-value="rejected">[[flags:state-rejected]]</li>
|
|
41
|
+
</ul>
|
|
42
|
+
|
|
43
|
+
<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">
|
|
44
|
+
<span class="filter-label">{{{ if filters.type }}}[[flags:filter-type-{./filters.type}]]{{{ else }}}[[flags:filter-type]]{{{ end }}}</span>
|
|
45
|
+
<span class="caret"></span>
|
|
46
|
+
</a>
|
|
47
|
+
<ul class="dropdown-menu">
|
|
48
|
+
<li class="dropdown-item" data-name="type" data-value="all">[[flags:filter-type-all]]</li>
|
|
49
|
+
<li class="dropdown-item" data-name="type" data-value="post">[[flags:filter-type-post]]</li>
|
|
50
|
+
<li class="dropdown-item" data-name="type" data-value="user">[[flags:filter-type-user]]</li>
|
|
51
|
+
</ul>
|
|
52
|
+
|
|
53
|
+
<div component="flags/filter/assignee" class="dropdown" data-filter-name="assignee">
|
|
54
|
+
<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">
|
|
55
|
+
<span class="filter-label">[[flags:filter-assignee]]</span>
|
|
56
|
+
<span class="caret"></span>
|
|
57
|
+
</a>
|
|
58
|
+
|
|
59
|
+
<ul class="dropdown-menu" style="width: 350px;">
|
|
60
|
+
<li class="px-3 py-1 d-flex flex-column gap-2">
|
|
61
|
+
<input type="text" class="form-control" component="user/filter/search" placeholder="[[search:type-a-username]]">
|
|
62
|
+
<div component="user/filter/selected" class="d-flex flex-wrap gap-2">
|
|
63
|
+
{{{ each selected.assignee }}}
|
|
64
|
+
<div class="d-flex px-2 py-1 rounded-1 text-bg-primary gap-2 align-items-center text-sm">
|
|
65
|
+
{buildAvatar(@value, "16px", true)} {./username}
|
|
66
|
+
<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>
|
|
67
|
+
</div>
|
|
68
|
+
{{{ end }}}
|
|
69
|
+
</div>
|
|
70
|
+
<hr/>
|
|
71
|
+
<div component="user/filter/results" class="d-flex flex-wrap gap-2">
|
|
72
|
+
{{{ each userFilterResults }}}
|
|
73
|
+
<button class="btn btn-light btn-sm border" data-uid="{./uid}" data-username="{./username}">{buildAvatar(@value, "16px", true)} {./username}</button>
|
|
74
|
+
{{{ end }}}
|
|
34
75
|
</div>
|
|
35
|
-
</
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
<select class="form-control" id="sort" name="sort">
|
|
39
|
-
<optgroup label="[[flags:sort-all]]">
|
|
40
|
-
<option value="newest">[[flags:sort-newest]]</option>
|
|
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>
|
|
60
|
-
</div>
|
|
76
|
+
</li>
|
|
77
|
+
</ul>
|
|
78
|
+
</div>
|
|
61
79
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
<option value="user">[[flags:filter-type-user]]</option>
|
|
68
|
-
</select>
|
|
69
|
-
</div>
|
|
70
|
-
</fieldset>
|
|
80
|
+
<div component="flags/filter/reporterId" class="dropdown" data-filter-name="reporterId">
|
|
81
|
+
<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">
|
|
82
|
+
<span class="filter-label">[[flags:filter-reporterId]]</span>
|
|
83
|
+
<span class="caret"></span>
|
|
84
|
+
</a>
|
|
71
85
|
|
|
72
|
-
<
|
|
73
|
-
<
|
|
74
|
-
<
|
|
75
|
-
<
|
|
76
|
-
|
|
86
|
+
<ul class="dropdown-menu" style="width: 350px;">
|
|
87
|
+
<li class="px-3 py-1 d-flex flex-column gap-2">
|
|
88
|
+
<input type="text" class="form-control" component="user/filter/search" placeholder="[[search:type-a-username]]">
|
|
89
|
+
<div component="user/filter/selected" class="d-flex flex-wrap gap-2">
|
|
90
|
+
{{{ each selected.reporterId }}}
|
|
91
|
+
<div class="d-flex px-2 py-1 rounded-1 text-bg-primary gap-2 align-items-center text-sm">
|
|
92
|
+
{buildAvatar(@value, "16px", true)} {./username}
|
|
93
|
+
<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>
|
|
94
|
+
</div>
|
|
95
|
+
{{{ end }}}
|
|
96
|
+
</div>
|
|
97
|
+
<hr/>
|
|
98
|
+
<div component="user/filter/results" class="d-flex flex-wrap gap-2">
|
|
99
|
+
{{{ each userFilterResults }}}
|
|
100
|
+
<button class="btn btn-light btn-sm border" data-uid="{./uid}" data-username="{./username}">{buildAvatar(@value, "16px", true)} {./username}</button>
|
|
101
|
+
{{{ end }}}
|
|
102
|
+
</div>
|
|
103
|
+
</li>
|
|
104
|
+
</ul>
|
|
105
|
+
</div>
|
|
77
106
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
107
|
+
<div component="flags/filter/targetUid" class="dropdown" data-filter-name="targetUid">
|
|
108
|
+
<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">
|
|
109
|
+
<span class="filter-label">[[flags:filter-targetUid]]</span>
|
|
110
|
+
<span class="caret"></span>
|
|
111
|
+
</a>
|
|
82
112
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
<input type="text" class="form-control"
|
|
86
|
-
|
|
87
|
-
|
|
113
|
+
<ul class="dropdown-menu" style="width: 350px;">
|
|
114
|
+
<li class="px-3 py-1 d-flex flex-column gap-2">
|
|
115
|
+
<input type="text" class="form-control" component="user/filter/search" placeholder="[[search:type-a-username]]">
|
|
116
|
+
<div component="user/filter/selected" class="d-flex flex-wrap gap-2">
|
|
117
|
+
{{{ each selected.targetUid }}}
|
|
118
|
+
<div class="d-flex px-2 py-1 rounded-1 text-bg-primary gap-2 align-items-center text-sm">
|
|
119
|
+
{buildAvatar(@value, "16px", true)} {./username}
|
|
120
|
+
<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>
|
|
121
|
+
</div>
|
|
122
|
+
{{{ end }}}
|
|
123
|
+
</div>
|
|
124
|
+
<hr/>
|
|
125
|
+
<div component="user/filter/results" class="d-flex flex-wrap gap-2">
|
|
126
|
+
{{{ each userFilterResults }}}
|
|
127
|
+
<button class="btn btn-light btn-sm border" data-uid="{./uid}" data-username="{./username}">{buildAvatar(@value, "16px", true)} {./username}</button>
|
|
128
|
+
{{{ end }}}
|
|
129
|
+
</div>
|
|
130
|
+
</li>
|
|
131
|
+
</ul>
|
|
132
|
+
</div>
|
|
88
133
|
|
|
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>
|
|
134
|
+
<form role="form">
|
|
135
|
+
<input type="hidden" name="sort" value="{./sort}" />
|
|
136
|
+
<input type="hidden" name="state" value="{./filters.state}" />
|
|
137
|
+
<input type="hidden" name="type" value="{./filters.type}" />
|
|
97
138
|
</form>
|
|
98
139
|
</div>
|
|
140
|
+
|
|
141
|
+
<div component="flags/filters/reset">
|
|
142
|
+
<a class="filter-btn btn btn-warning btn-sm border {{{ if !hasFilter }}}btn-light disabled{{{ end }}}" href="{config.relative_path}/flags" role="button">
|
|
143
|
+
<span class="filter-label">[[flags:filter-reset]]</span>
|
|
144
|
+
</a>
|
|
145
|
+
</div>
|
|
146
|
+
|
|
147
|
+
<div class="btn-group float-end" component="flags/bulk-actions">
|
|
148
|
+
<button class="filter-btn btn btn-light btn-sm border" data-bs-toggle="dropdown" autocomplete="off" aria-haspopup="true" aria-expanded="false" disabled="disabled">
|
|
149
|
+
<span class="filter-label">[[flags:bulk-actions]]</span>
|
|
150
|
+
</button>
|
|
151
|
+
<ul class="dropdown-menu">
|
|
152
|
+
<li><a href="#" class="dropdown-item" data-action="bulk-assign">[[flags:assign-to-me]]</a></li>
|
|
153
|
+
<li><a href="#" class="dropdown-item" data-action="bulk-mark-resolved">[[flags:bulk-resolve]]</a></li>
|
|
154
|
+
</ul>
|
|
155
|
+
</div>
|
|
99
156
|
</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>
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
<div class="d-flex align-items-center justify-content-between">
|
|
26
26
|
<div class="d-flex align-items-center gap-2">
|
|
27
27
|
<a class="align-text-top" href="{config.relative_path}/user/{group.members.userslug}">{group.members.username}</a>
|
|
28
|
-
<i component="groups/owner/icon" title="[[groups:owner]]" class="user-owner-icon fa fa-star align-text-top text-warning
|
|
28
|
+
<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>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
{{{ if group.isOwner }}}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<div class="flex-0 pe-2 border-end-md text-sm mb-3 flex-basis-md-200">
|
|
2
|
-
<div class="nav sticky-top d-flex flex-row flex-md-column flex-wrap gap-1" style="z-index: 1;">
|
|
2
|
+
<div class="nav sticky-md-top d-flex flex-row flex-md-column flex-wrap gap-1" style="top: 1rem; z-index: 1;">
|
|
3
3
|
<button data-bs-toggle="tab" data-bs-target="#groups-posts" class="btn-ghost fw-semibold {{{ if template.groups/details }}}active{{{ end }}}">
|
|
4
4
|
<div class="flex-1">[[global:posts]]</div>
|
|
5
5
|
</button>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{{{ if (brand:logo || config.showSiteTitle)}}}
|
|
2
2
|
<div class="container brand-container">
|
|
3
|
-
<div class="col-12 d-flex border-bottom pb-3 {{{ if config.centerHeaderElements }}}justify-content-center{{{ end }}}">
|
|
3
|
+
<div class="col-12 d-flex border-bottom pb-3 {{{ if config.theme.centerHeaderElements }}}justify-content-center{{{ end }}}">
|
|
4
4
|
<div component="brand/wrapper" class="d-flex align-items-center gap-3 p-2 rounded-1 align-content-stretch ">
|
|
5
5
|
{{{ if brand:logo }}}
|
|
6
6
|
<a component="brand/anchor" href="{{{ if brand:logo:url }}}{brand:logo:url}{{{ else }}}{relative_path}/{{{ end }}}">
|
|
@@ -1,73 +1,78 @@
|
|
|
1
|
-
<div class="
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
{{{
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
1
|
+
<div component="bottombar" class="bottombar d-flex flex-column d-lg-none fixed-bottom ff-secondary gap-1 align-items-center">
|
|
2
|
+
|
|
3
|
+
<!-- IMPORT partials/topic/navigator-mobile.tpl -->
|
|
4
|
+
|
|
5
|
+
<div class="bottombar-nav p-2 text-dark bg-light d-flex justify-content-between align-items-center w-100">
|
|
6
|
+
<div class="">
|
|
7
|
+
<a href="#" role="button" class="nav-link nav-btn d-flex justify-content-between align-items-center position-relative" data-bs-toggle="dropdown">
|
|
8
|
+
<span class="position-relative">
|
|
9
|
+
<i class="fa fa-fw fa-lg fa-bars"></i>
|
|
10
|
+
<span component="unread/count" data-unread-url="{unreadCount.unreadUrl}" class="position-absolute top-0 start-100 translate-middle badge rounded-1 bg-primary {{{ if !unreadCount.mobileUnread }}}hidden{{{ end }}}">{unreadCount.mobileUnread}</span>
|
|
11
|
+
</span>
|
|
12
|
+
</a>
|
|
13
|
+
<ul class="navigation-dropdown dropdown-menu">
|
|
14
|
+
{{{ each navigation }}}
|
|
15
|
+
{{{ if displayMenuItem(@root, @index) }}}
|
|
16
|
+
<li class="nav-item {./class}{{{ if ./dropdown }}} dropend{{{ end }}}" title="{./title}">
|
|
17
|
+
<a class="nav-link nav-btn navigation-link px-3 py-2 {{{ if ./dropdown }}}dropdown-toggle{{{ end }}}"
|
|
18
|
+
{{{ if ./dropdown }}} href="#" role="button" data-bs-toggle="collapse" data-bs-target="#collapse-target-{@index}" onclick="event.stopPropagation();" {{{ else }}} href="{./route}"{{{ end }}} {{{ if ./id }}}id="{./id}"{{{ end }}}{{{ if ./targetBlank }}} target="_blank"{{{ end }}}>
|
|
19
|
+
<span class="d-inline-flex justify-content-between align-items-center w-100">
|
|
20
|
+
<span class="text-nowrap">
|
|
21
|
+
{{{ if ./iconClass }}}
|
|
22
|
+
<i class="fa fa-fw {./iconClass}" data-content="{./content}"></i>
|
|
23
|
+
{{{ end }}}
|
|
24
|
+
{{{ if ./text }}}
|
|
25
|
+
<span class="nav-text px-2 fw-semibold">{./text}</span>
|
|
26
|
+
{{{ end }}}
|
|
27
|
+
</span>
|
|
28
|
+
<span component="navigation/count" class="badge rounded-1 bg-primary {{{ if !./content }}}hidden{{{ end }}}">{./content}</span>
|
|
23
29
|
</span>
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
</
|
|
30
|
+
</a>
|
|
31
|
+
{{{ if ./dropdown }}}
|
|
32
|
+
<div class="ps-3">
|
|
33
|
+
<ul id="collapse-target-{@index}" class="collapse list-unstyled ps-3">
|
|
34
|
+
{./dropdownContent}
|
|
35
|
+
</ul>
|
|
36
|
+
</div>
|
|
37
|
+
{{{ end }}}
|
|
38
|
+
</li>
|
|
33
39
|
{{{ end }}}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
</ul>
|
|
38
|
-
</div>
|
|
40
|
+
{{{ end }}}
|
|
41
|
+
</ul>
|
|
42
|
+
</div>
|
|
39
43
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
<div class="">
|
|
45
|
+
{{{ if config.loggedIn }}}
|
|
46
|
+
<ul id="logged-in-menu" class="list-unstyled d-flex align-items-center w-100 gap-3 mb-0">
|
|
47
|
+
{{{ if config.searchEnabled }}}
|
|
48
|
+
<li component="sidebar/search" class="nav-item m-0 search">
|
|
49
|
+
<!-- IMPORT partials/sidebar/search-mobile.tpl -->
|
|
50
|
+
</li>
|
|
51
|
+
{{{ end }}}
|
|
48
52
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
53
|
+
<li component="notifications" class="nav-item m-0 notifications">
|
|
54
|
+
<!-- IMPORT partials/sidebar/notifications.tpl -->
|
|
55
|
+
</li>
|
|
52
56
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
57
|
+
{{{ if canChat }}}
|
|
58
|
+
<li class="nav-item m-0 chats">
|
|
59
|
+
<!-- IMPORT partials/sidebar/chats.tpl -->
|
|
60
|
+
</li>
|
|
61
|
+
{{{ end }}}
|
|
58
62
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
63
|
+
<li component="sidebar/drafts" class="hidden nav-item m-0 drafts">
|
|
64
|
+
<!-- IMPORT partials/sidebar/drafts.tpl -->
|
|
65
|
+
</li>
|
|
62
66
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
67
|
+
<li id="user_label" class="nav-item m-0 py-2 usermenu">
|
|
68
|
+
<!-- IMPORT partials/sidebar/user-menu.tpl -->
|
|
69
|
+
</li>
|
|
70
|
+
</ul>
|
|
71
|
+
{{{ else }}}
|
|
72
|
+
<ul id="logged-out-menu" class="list-unstyled d-flex w-100 gap-3 mb-0 logged-out-menu">
|
|
73
|
+
<!-- IMPORT partials/sidebar/logged-out-menu.tpl -->
|
|
74
|
+
</ul>
|
|
75
|
+
{{{ end }}}
|
|
76
|
+
</div>
|
|
72
77
|
</div>
|
|
73
78
|
</div>
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
<div class="text-xs text-muted">{{{ if ./timeagoLong }}}{./timeagoLong}{{{ else }}}<span class="timeago" title="{./datetimeISO}"></span>{{{ end }}}</div>
|
|
21
21
|
</div>
|
|
22
22
|
</div>
|
|
23
|
-
<div
|
|
23
|
+
<div>
|
|
24
24
|
{{{ if ./nid }}}
|
|
25
25
|
<button class="mark-read btn-ghost-sm" style="width: 1.5rem; height: 1.5rem;">
|
|
26
26
|
<i class="unread fa fa-2xs fa-circle text-primary {{{ if ./read }}}hidden{{{ end }}}"></i>
|
|
@@ -1,45 +1,47 @@
|
|
|
1
1
|
<div component="pagination" class="pagination-container mt-3{{{ if !pagination.pages.length }}} hidden{{{ end }}}">
|
|
2
2
|
<ul class="pagination pagination-sm gap-1 hidden-xs hidden-sm justify-content-center">
|
|
3
3
|
<li class="page-item previous float-start{{{ if !pagination.prev.active }}} disabled{{{ end }}}">
|
|
4
|
-
<a class="page-link rounded fw-secondary
|
|
4
|
+
<a class="page-link rounded fw-secondary px-3" href="?{pagination.prev.qs}" data-page="{pagination.prev.page}"><i class="fa fa-chevron-left"></i> </a>
|
|
5
5
|
</li>
|
|
6
6
|
|
|
7
7
|
{{{each pagination.pages}}}
|
|
8
8
|
{{{ if pagination.pages.separator }}}
|
|
9
9
|
<li component="pagination/select-page" class="page-item page select-page">
|
|
10
|
-
<a class="page-link rounded fw-secondary
|
|
10
|
+
<a class="page-link rounded fw-secondary px-3" href="#"><i class="fa fa-ellipsis-h"></i></a>
|
|
11
11
|
</li>
|
|
12
12
|
{{{ else }}}
|
|
13
13
|
<li class="page-item page{{{ if pagination.pages.active }}} active{{{ end }}}" >
|
|
14
|
-
<a class="page-link rounded fw-secondary
|
|
14
|
+
<a class="page-link rounded fw-secondary px-3" href="?{pagination.pages.qs}" data-page="{pagination.pages.page}">{pagination.pages.page}</a>
|
|
15
15
|
</li>
|
|
16
16
|
{{{ end }}}
|
|
17
17
|
{{{end}}}
|
|
18
18
|
|
|
19
19
|
<li class="page-item next float-end {{{ if !pagination.next.active }}} disabled{{{ end }}}">
|
|
20
|
-
<a class="page-link rounded fw-secondary
|
|
20
|
+
<a class="page-link rounded fw-secondary px-3" href="?{pagination.next.qs}" data-page="{pagination.next.page}"> <i class="fa fa-chevron-right"></i></a>
|
|
21
21
|
</li>
|
|
22
22
|
</ul>
|
|
23
23
|
|
|
24
|
+
{{{ if !template.topic }}}
|
|
24
25
|
<ul class="pagination pagination-sm hidden-md hidden-lg justify-content-center">
|
|
25
26
|
<li class="page-item first{{{ if !pagination.prev.active }}} disabled{{{ end }}}">
|
|
26
|
-
<a class="page-link fw-secondary
|
|
27
|
+
<a class="page-link fw-secondary" href="?{pagination.first.qs}" data-page="1"><i class="fa fa-fast-backward"></i> </a>
|
|
27
28
|
</li>
|
|
28
29
|
|
|
29
30
|
<li class="page-item previous{{{ if !pagination.prev.active }}} disabled{{{ end }}}">
|
|
30
|
-
<a class="page-link fw-secondary
|
|
31
|
+
<a class="page-link fw-secondary" href="?{pagination.prev.qs}" data-page="{pagination.prev.page}"><i class="fa fa-chevron-left"></i> </a>
|
|
31
32
|
</li>
|
|
32
33
|
|
|
33
34
|
<li component="pagination/select-page" class="page-item page select-page">
|
|
34
|
-
<a class="page-link fw-secondary
|
|
35
|
+
<a class="page-link fw-secondary" href="#">{pagination.currentPage} / {pagination.pageCount}</a>
|
|
35
36
|
</li>
|
|
36
37
|
|
|
37
38
|
<li class="page-item next{{{ if !pagination.next.active }}} disabled{{{ end }}}">
|
|
38
|
-
<a class="page-link fw-secondary
|
|
39
|
+
<a class="page-link fw-secondary" href="?{pagination.next.qs}" data-page="{pagination.next.page}"> <i class="fa fa-chevron-right"></i></a>
|
|
39
40
|
</li>
|
|
40
41
|
|
|
41
42
|
<li class="page-item last{{{ if !pagination.next.active }}} disabled{{{ end }}}">
|
|
42
|
-
<a class="page-link fw-secondary
|
|
43
|
+
<a class="page-link fw-secondary" href="?{pagination.last.qs}" data-page="{pagination.pageCount}"><i class="fa fa-fast-forward"></i> </a>
|
|
43
44
|
</li>
|
|
44
45
|
</ul>
|
|
46
|
+
{{{ end }}}
|
|
45
47
|
</div>
|