nodebb-theme-harmony 1.0.0-beta.9 → 1.0.0-beta.91
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 +25 -25
- package/package.json +1 -1
- package/plugin.json +0 -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 +78 -9
- 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 +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 +16 -42
- package/scss/modules/topics-list.scss +172 -16
- package/scss/modules/user-menu.scss +6 -0
- package/scss/overrides.scss +4 -1
- package/scss/sidebar.scss +39 -11
- package/scss/topic.scss +30 -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 +66 -73
- package/templates/account/sessions.tpl +8 -30
- package/templates/account/settings.tpl +222 -203
- package/templates/account/theme.tpl +35 -26
- package/templates/account/topics.tpl +36 -38
- package/templates/account/uploads.tpl +33 -40
- package/templates/admin/plugins/harmony.tpl +17 -3
- package/templates/categories.tpl +2 -2
- package/templates/category.tpl +13 -14
- 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 +2 -2
- package/templates/login.tpl +2 -2
- package/templates/notifications.tpl +1 -1
- 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 +6 -0
- package/templates/partials/breadcrumbs.tpl +6 -6
- package/templates/partials/buttons/newTopic.tpl +1 -1
- package/templates/partials/categories/item.tpl +30 -23
- package/templates/partials/categories/lastpost.tpl +2 -2
- 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 +7 -7
- package/templates/partials/category/subcategory.tpl +1 -1
- package/templates/partials/category/tags.tpl +0 -2
- package/templates/partials/category/tools.tpl +28 -25
- package/templates/partials/category/watch.tpl +30 -6
- package/templates/partials/chats/dropdown.tpl +4 -1
- package/templates/partials/chats/message-window.tpl +8 -7
- package/templates/partials/chats/message.tpl +4 -6
- 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 +163 -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/memberlist.tpl +1 -1
- package/templates/partials/groups/sidebar-left.tpl +1 -1
- package/templates/partials/header/brand.tpl +9 -2
- package/templates/partials/mobile-footer.tpl +69 -64
- 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 -32
- package/templates/partials/sidebar/chats.tpl +22 -33
- 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 +29 -8
- package/templates/partials/sidebar/search.tpl +1 -1
- package/templates/partials/sidebar/user-menu.tpl +38 -29
- package/templates/partials/sidebar-left.tpl +11 -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 +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 +60 -62
- package/templates/partials/topic/post-menu.tpl +16 -11
- package/templates/partials/topic/post.tpl +43 -25
- package/templates/partials/topic/quickreply.tpl +5 -5
- package/templates/partials/topic/reply-button.tpl +3 -3
- 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 +30 -6
- 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 +53 -60
- 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 +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 +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
|
@@ -1,99 +1,184 @@
|
|
|
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-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="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
|
+
<form role="form">
|
|
180
|
+
<input type="hidden" name="sort" value="{./sort}" />
|
|
181
|
+
<input type="hidden" name="state" value="{./filters.state}" />
|
|
182
|
+
<input type="hidden" name="type" value="{./filters.type}" />
|
|
183
|
+
</form>
|
|
99
184
|
</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
|
-
<div class="container brand-container">
|
|
3
|
-
<div class="col-12 d-flex border-bottom pb-3 {{{ if config.centerHeaderElements }}}justify-content-center{{{ end }}}">
|
|
2
|
+
<div class="container px-md-4 brand-container">
|
|
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 }}}">
|
|
@@ -14,6 +14,13 @@
|
|
|
14
14
|
</a>
|
|
15
15
|
{{{ end }}}
|
|
16
16
|
</div>
|
|
17
|
+
{{{ if widgets.brand-header.length }}}
|
|
18
|
+
<div data-widget-area="brand-header" class="ms-auto gap-3 p-2 align-self-center">
|
|
19
|
+
{{{each widgets.brand-header}}}
|
|
20
|
+
{{./html}}
|
|
21
|
+
{{{end}}}
|
|
22
|
+
</div>
|
|
23
|
+
{{{ end }}}
|
|
17
24
|
</div>
|
|
18
25
|
</div>
|
|
19
26
|
{{{ 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>
|
|
@@ -1,28 +1,31 @@
|
|
|
1
1
|
{{{ if !notifications.length }}}
|
|
2
|
-
<li class="no-notifs text-center p-
|
|
2
|
+
<li class="no-notifs text-center p-4 d-flex flex-column">
|
|
3
|
+
<div class="p-4"><i class="fa-solid fa-wind fs-2 text-muted"></i></div>
|
|
4
|
+
<div class="text-xs fw-semibold text-muted">[[notifications:no_notifs]]</div>
|
|
5
|
+
</li>
|
|
3
6
|
{{{ end }}}
|
|
4
7
|
|
|
5
8
|
{{{ each notifications }}}
|
|
6
9
|
<li class="{./readClass} mb-2 p-1" data-nid="{./nid}" data-path="{./path}" {{{ if ./pid }}}data-pid="{./pid}"{{{ end }}}{{{ if ./tid }}}data-tid="{./tid}"{{{ end }}}>
|
|
7
10
|
<div class="d-flex gap-1 justify-content-between">
|
|
8
|
-
<div class="d-flex gap-
|
|
11
|
+
<div class="d-flex gap-0 flex-grow-1 align-items-start">
|
|
9
12
|
{{{ if ./image }}}
|
|
10
13
|
{{{ if ./from }}}
|
|
11
|
-
<a class="
|
|
14
|
+
<a class="btn-ghost-sm p-1 flex-grow-0 flex-shrink-0" href="{config.relative_path}/user/{./user.userslug}"><img class="avatar avatar-rounded" style="--avatar-size: 32px;" src="{./image}" /></a>
|
|
12
15
|
{{{ end }}}
|
|
13
16
|
{{{ else }}}
|
|
14
|
-
<a class="
|
|
17
|
+
<a class="btn-ghost-sm p-1 flex-grow-0 flex-shrink-0" href="{config.relative_path}/user/{./user.userslug}"><div class="avatar avatar-rounded" style="--avatar-size: 32px; background-color: {./user.icon:bgColor};">{./user.icon:text}</div></a>
|
|
15
18
|
{{{ end }}}
|
|
16
|
-
<div class="
|
|
17
|
-
<a href="{./path}" class="
|
|
19
|
+
<div class="d-flex flex-grow-1 flex-column align-items-start position-relative">
|
|
20
|
+
<a href="{./path}" class="btn-ghost-sm d-inline-block text-reset text-break text-sm ff-sans stretched-link">
|
|
18
21
|
{./bodyShort}
|
|
19
22
|
</a>
|
|
20
23
|
<div class="text-xs text-muted">{{{ if ./timeagoLong }}}{./timeagoLong}{{{ else }}}<span class="timeago" title="{./datetimeISO}"></span>{{{ end }}}</div>
|
|
21
24
|
</div>
|
|
22
25
|
</div>
|
|
23
|
-
<div
|
|
26
|
+
<div>
|
|
24
27
|
{{{ if ./nid }}}
|
|
25
|
-
<button class="mark-read btn-ghost-sm" style="width: 1.5rem; height: 1.5rem;">
|
|
28
|
+
<button class="mark-read btn-ghost-sm flex-grow-0 flex-shrink-0 p-1" style="width: 1.5rem; height: 1.5rem;">
|
|
26
29
|
<i class="unread fa fa-2xs fa-circle text-primary {{{ if ./read }}}hidden{{{ end }}}"></i>
|
|
27
30
|
<i class="read fa fa-2xs fa-circle-o text-secondary {{{ if !./read }}}hidden{{{ end }}}"></i>
|
|
28
31
|
</button>
|