nodebb-theme-harmony 1.2.79 → 1.2.80
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/package.json
CHANGED
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
<!-- IMPORT partials/breadcrumbs.tpl -->
|
|
2
|
-
|
|
3
|
-
<div class="d-flex flex-column flex-md-row">
|
|
4
|
-
<div class="flex-shrink-0 d-flex flex-column gap-3 border-end-md text-sm mb-3 pe-4" style="flex-basis: 240px !important;">
|
|
5
|
-
<div class="d-grid gap-1">
|
|
6
|
-
<a class="btn btn-ghost btn-sm ff-secondary border d-flex gap-2 align-items-center" href="{config.relative_path}/{type_path}/{targetId}">
|
|
7
|
-
<i class="fa fa-fw fa-external-link text-primary"></i>
|
|
8
|
-
[[flags:go-to-target]]
|
|
9
|
-
</a>
|
|
10
|
-
|
|
11
|
-
{{{ if target.uid }}}
|
|
12
|
-
<div class="btn-group dropend" data-uid="{target.uid}">
|
|
13
|
-
<button type="button" class="btn btn-ghost btn-sm ff-secondary border d-flex gap-2 align-items-center dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
14
|
-
<i class="fa fa-fw fa-street-view text-primary"></i>
|
|
15
|
-
[[flags:flagged-user]]
|
|
16
|
-
<i class="fa fa-chevron-right ms-auto text-secondary"></i>
|
|
17
|
-
</button>
|
|
18
|
-
<ul class="dropdown-menu p-1 text-sm" role="menu">
|
|
19
|
-
<li><a class="dropdown-item rounded-1" href="{config.relative_path}/uid/{target.uid}" role="menuitem">[[flags:view-profile]]</a></li>
|
|
20
|
-
{{{ if !config.disableChat }}}
|
|
21
|
-
<li><a class="dropdown-item rounded-1" href="#" data-action="chat" role="menuitem">[[flags:start-new-chat]]</a></li>
|
|
22
|
-
{{{ end }}}
|
|
23
|
-
<li class="dropdown-divider"></li>
|
|
24
|
-
{{{ if privileges.ban }}}
|
|
25
|
-
<li class="{{{ if target.user.banned }}}hidden{{{ end }}}"><a class="dropdown-item rounded-1" href="#" data-action="ban" role="menuitem">[[user:ban-account]]</a></li>
|
|
26
|
-
<li class="{{{ if !target.user.banned }}}hidden{{{ end }}}"><a class="dropdown-item rounded-1" href="#" data-action="unban" role="menuitem">[[user:unban-account]]</a></li>
|
|
27
|
-
{{{ end }}}
|
|
28
|
-
{{{ if privileges.mute}}}
|
|
29
|
-
<li class="{{{ if target.user.muted }}}hidden{{{ end }}}"><a class="dropdown-item rounded-1" href="#" data-action="mute" role="menuitem">[[user:mute-account]]</a></li>
|
|
30
|
-
<li class="{{{ if !target.user.muted }}}hidden{{{ end }}}"><a class="dropdown-item rounded-1" href="#" data-action="unmute" role="menuitem">[[user:unmute-account]]</a></li>
|
|
31
|
-
{{{ end }}}
|
|
32
|
-
{{{ if privileges.admin:users }}}
|
|
33
|
-
<li><a class="dropdown-item rounded-1" href="#" data-action="delete-account" role="menuitem">[[user:delete-account-as-admin]]</a></li>
|
|
34
|
-
<li><a class="dropdown-item rounded-1" href="#" data-action="delete-content" role="menuitem">[[user:delete-content]]</a></li>
|
|
35
|
-
<li><a class="dropdown-item rounded-1" href="#" data-action="delete-all" role="menuitem">[[user:delete-all]]</a></li>
|
|
36
|
-
{{{ end }}}
|
|
37
|
-
</ul>
|
|
38
|
-
</div>
|
|
39
|
-
{{{ end }}}
|
|
40
|
-
|
|
41
|
-
<a class="btn btn-ghost btn-sm ff-secondary border d-flex gap-2 align-items-center" href="#" data-action="assign">
|
|
42
|
-
<i class="fa fa-fw fa-id-card-o text-primary"></i>
|
|
43
|
-
[[flags:assign-to-me]]
|
|
44
|
-
</a>
|
|
45
|
-
|
|
46
|
-
{{{ if type_bool.post }}}
|
|
47
|
-
{{{ if !target.deleted}}}
|
|
48
|
-
<a class="d-flex gap-2 align-items-center btn btn-sm btn-outline-danger border border-secondary-subtle text-start" href="#" data-action="delete-post"><i class="fa fa-fw fa-trash"></i> [[flags:delete-post]]</a>
|
|
49
|
-
{{{ else }}}
|
|
50
|
-
<a class="d-flex gap-2 align-items-center btn btn-sm btn-danger border border-secondary-subtle text-start" href="#" data-action="purge-post"><i class="fa fa-fw fa-trash"></i> [[flags:purge-post]]</a>
|
|
51
|
-
<a class="d-flex gap-2 align-items-center btn btn-sm btn-outline-success border border-secondary-subtle text-start" href="#" data-action="restore-post"><i class="fa fa-fw fa-reply"></i><i class="fa fa-trash"></i> [[flags:restore-post]]</a>
|
|
52
|
-
{{{ end }}}
|
|
53
|
-
{{{ end }}}
|
|
54
|
-
</div>
|
|
55
|
-
|
|
56
|
-
<form class="d-flex flex-column gap-3" id="attributes">
|
|
57
|
-
<div>
|
|
58
|
-
<label class="text-muted fw-semibold" for="state">[[flags:state]]</label>
|
|
59
|
-
<select class="form-select form-select-sm" id="state" name="state" disabled>
|
|
60
|
-
<option value="open">[[flags:state-open]]</option>
|
|
61
|
-
<option value="wip">[[flags:state-wip]]</option>
|
|
62
|
-
<option value="resolved">[[flags:state-resolved]]</option>
|
|
63
|
-
<option value="rejected">[[flags:state-rejected]]</option>
|
|
64
|
-
</select>
|
|
65
|
-
</div>
|
|
66
|
-
<div>
|
|
67
|
-
<label class="text-muted fw-semibold" for="assignee">[[flags:assignee]]</label>
|
|
68
|
-
<select class="form-control form-control-sm" id="assignee" name="assignee" disabled>
|
|
69
|
-
<option value="">[[flags:no-assignee]]</option>
|
|
70
|
-
{{{each assignees}}}
|
|
71
|
-
<option value="{../uid}">{../username}</option>
|
|
72
|
-
{{{end}}}
|
|
73
|
-
</select>
|
|
74
|
-
</div>
|
|
75
|
-
<div class="d-grid">
|
|
76
|
-
<button type="button" class="btn btn-primary" data-action="update">[[flags:update]]</button>
|
|
77
|
-
</div>
|
|
78
|
-
</form>
|
|
79
|
-
|
|
80
|
-
<div class="overflow-auto" component="flag/history" style="max-height: 30rem;">
|
|
81
|
-
<h2 class="h6 fw-bold">[[flags:history]]</h2>
|
|
82
|
-
{{{ if !history.length }}}
|
|
83
|
-
<div class="alert alert-success text-center">[[flags:no-history]]</div>
|
|
84
|
-
{{{ end }}}
|
|
85
|
-
{{{ each history }}}
|
|
86
|
-
<div class="d-flex flex-column gap-1">
|
|
87
|
-
<div class="d-flex gap-2 align-items-center">
|
|
88
|
-
<a class="d-flex text-decoration-none" href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(./user, "16px", true)}</a>
|
|
89
|
-
<a href="{config.relative_path}/user/{./user.userslug}">{./user.username}</a>
|
|
90
|
-
<span class="timeago text-muted text-nowrap" title="{./datetimeISO}"></span>
|
|
91
|
-
</div>
|
|
92
|
-
<div>
|
|
93
|
-
<ul class="list-unstyled">
|
|
94
|
-
{{{ each ./fields }}}
|
|
95
|
-
<li>
|
|
96
|
-
[[flags:{@key}]]{{{ if @value }}} → <span class="fw-semibold">{@value}</span>{{{ end }}}
|
|
97
|
-
</li>
|
|
98
|
-
{{{ end }}}
|
|
99
|
-
{{{ each ./meta }}}
|
|
100
|
-
<li>
|
|
101
|
-
{{./key}}{{{ if ./value }}} → <span class="fw-semibold">{./value}</span>{{{ end }}}
|
|
102
|
-
</li>
|
|
103
|
-
{{{ end }}}
|
|
104
|
-
</ul>
|
|
105
|
-
</div>
|
|
106
|
-
</div>
|
|
107
|
-
{{{ end }}}
|
|
108
|
-
</div>
|
|
109
|
-
</div>
|
|
110
|
-
<div class="flex-grow-1 ps-md-2 ps-lg-5" style="min-width:0;">
|
|
111
|
-
<div class="d-flex flex-column gap-4">
|
|
112
|
-
<h2 class="h6 fw-bold">
|
|
113
|
-
{target_readable}
|
|
114
|
-
</h2>
|
|
115
|
-
<div component="flag/content" class="d-flex flex-column gap-1 pb-3 border-bottom">
|
|
116
|
-
{{{ if type_bool.post }}}
|
|
117
|
-
<div class="d-flex gap-2 align-items-center">
|
|
118
|
-
<a class="d-flex text-decoration-none" href="{config.relative_path}/user/{target.user.userslug}">{buildAvatar(target.user, "16px", true)}</a>
|
|
119
|
-
<a href="{config.relative_path}/user/{target.user.userslug}">{target.user.username}</a>
|
|
120
|
-
<span class="timeago text-muted" title="{target.timestampISO}"></span>
|
|
121
|
-
</div>
|
|
122
|
-
<blockquote>{target.content}</blockquote>
|
|
123
|
-
{{{ end }}}
|
|
124
|
-
|
|
125
|
-
{{{ if type_bool.user }}}
|
|
126
|
-
<div class="d-flex gap-2">
|
|
127
|
-
<a href="{config.relative_path}/user/{./target.userslug}">{buildAvatar(target, "16px", true)}</a>
|
|
128
|
-
<a href="{config.relative_path}/user/{./target.userslug}">{target.username}</a>
|
|
129
|
-
</div>
|
|
130
|
-
<blockquote>{{{ if target.aboutme }}}{target.aboutme}{{{ else }}}<em>[[flags:target-aboutme-empty]]</em>{{{ end }}}</blockquote>
|
|
131
|
-
{{{ end }}}
|
|
132
|
-
|
|
133
|
-
{{{ if type_bool.empty }}}
|
|
134
|
-
<div class="alert alert-warning" role="alert">[[flags:target-purged]]</div>
|
|
135
|
-
{{{ end }}}
|
|
136
|
-
</div>
|
|
137
|
-
<div class="flag/reports" class="pb-4 border-bottom">
|
|
138
|
-
<h2 class="h6 fw-bold">[[flags:reports]]</h2>
|
|
139
|
-
<ul class="list-unstyled mt-4">
|
|
140
|
-
{{{ each reports }}}
|
|
141
|
-
<li class="d-flex flex-column gap-1" component="flag/report" data-timestamp="{./timestamp}">
|
|
142
|
-
<div class="d-flex gap-2 align-items-center">
|
|
143
|
-
<a class="d-flex text-decoration-none" href="{config.relative_path}/user/{./reporter.userslug}">{buildAvatar(./reporter, "16px", true)}</a>
|
|
144
|
-
<a href="{config.relative_path}/user/{./reporter.userslug}">{./reporter.username}</a>
|
|
145
|
-
<span class="timeago text-muted" title="{./timestampISO}"></span>
|
|
146
|
-
</div>
|
|
147
|
-
<p>{./value}</p>
|
|
148
|
-
</li>
|
|
149
|
-
{{{ end }}}
|
|
150
|
-
</ul>
|
|
151
|
-
</div>
|
|
152
|
-
<div class="pb-4 border-bottom">
|
|
153
|
-
<div class="d-flex align-items-center">
|
|
154
|
-
<h2 class="h6 fw-bold me-auto mb-0">[[flags:notes]]</h2>
|
|
155
|
-
<button class="btn btn-ghost ff-secondary border" data-action="addEditNote">[[flags:add-note]]</button>
|
|
156
|
-
</div>
|
|
157
|
-
<ul component="flag/notes" class="list-unstyled mt-4">
|
|
158
|
-
{{{ if !notes.length }}}
|
|
159
|
-
<em>[[flags:no-notes]]</em>
|
|
160
|
-
{{{ end }}}
|
|
161
|
-
{{{ each notes }}}
|
|
162
|
-
<li class="d-flex flex-column gap-1" component="flag/note" data-datetime="{./datetime}" data-index="{@index}">
|
|
163
|
-
<div class="d-flex gap-2 align-items-center">
|
|
164
|
-
<a href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(./user, "16px", true)}</a>
|
|
165
|
-
<a href="{config.relative_path}/user/{./user.userslug}">{./user.username}</a>
|
|
166
|
-
<span class="timeago text-muted" title="{./datetimeISO}"></span>
|
|
167
|
-
<div class=" ms-auto flex-shrink-0">
|
|
168
|
-
<a href="#" class="btn btn-sm btn-link" data-action="addEditNote"><i class="fa fa-pencil"></i></a>
|
|
169
|
-
<a href="#" class="btn btn-sm btn-link" data-action="delete-note"><i class="fa fa-trash text-danger"></i></a>
|
|
170
|
-
</div>
|
|
171
|
-
</div>
|
|
172
|
-
<p>{./content}</p>
|
|
173
|
-
</li>
|
|
174
|
-
{{{ end }}}
|
|
175
|
-
</ul>
|
|
176
|
-
</div>
|
|
177
|
-
</div>
|
|
178
|
-
</div>
|
|
179
|
-
</div>
|
package/templates/flags/list.tpl
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
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" role="menu">
|
|
6
|
-
<li><a href="#" class="dropdown-item rounded-1" data-action="bulk-assign" role="menuitem">[[flags:assign-to-me]]</a></li>
|
|
7
|
-
<li><a href="#" class="dropdown-item rounded-1" data-action="bulk-mark-resolved" role="menuitem">[[flags:bulk-resolve]]</a></li>
|
|
8
|
-
</ul>
|
|
9
|
-
</div>
|
|
@@ -1,189 +0,0 @@
|
|
|
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-haspopup="true" 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 text-primary opacity-75"></span>
|
|
6
|
-
</a>
|
|
7
|
-
<ul class="dropdown-menu p-1 text-sm" role="menu">
|
|
8
|
-
<li>
|
|
9
|
-
<a class="dropdown-item rounded-1" href="{config.relative_path}/flags?quick=mine" role="menuitem">[[flags:filter-quick-mine]]</a>
|
|
10
|
-
</li>
|
|
11
|
-
</ul>
|
|
12
|
-
</div>
|
|
13
|
-
|
|
14
|
-
|
|
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 text-primary opacity-75"></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">
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
<div class="dropdown-menu p-1">
|
|
32
|
-
<ul component="category/list" class="list-unstyled mb-0 text-sm category-dropdown-menu ghost-scrollbar" role="menu">
|
|
33
|
-
{{{each categoryItems}}}
|
|
34
|
-
<li role="presentation" class="category {{{ if ../disabledClass }}}disabled{{{ end }}}" data-cid="{../cid}" data-parent-cid="{../parentCid}" data-name="{../name}">
|
|
35
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" href="#">
|
|
36
|
-
{../level}
|
|
37
|
-
<span component="category-markup" class="flex-grow-1" style="{{{ if ../match }}}font-weight: bold;{{{end}}}">
|
|
38
|
-
<div class="category-item d-inline-flex align-items-center gap-1">
|
|
39
|
-
{{{ if ./icon }}}
|
|
40
|
-
{buildCategoryIcon(@value, "24px", "rounded-circle")}
|
|
41
|
-
{{{ end }}}
|
|
42
|
-
{./name}
|
|
43
|
-
</div>
|
|
44
|
-
</span>
|
|
45
|
-
<i component="category/select/icon" class="flex-shrink-0 fa fa-fw fa-check {{{ if !../selected }}}invisible{{{ end }}}"></i>
|
|
46
|
-
</a>
|
|
47
|
-
</li>
|
|
48
|
-
{{{end}}}
|
|
49
|
-
</ul>
|
|
50
|
-
</div>
|
|
51
|
-
</div>
|
|
52
|
-
|
|
53
|
-
<div class="btn-group bottom-sheet">
|
|
54
|
-
<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-haspopup="true" aria-expanded="false">
|
|
55
|
-
<span class="filter-label">{{{ if (sort != "newest") }}}[[flags:sort-{./sort}]]{{{ else }}}[[flags:sort]]{{{ end }}}</span>
|
|
56
|
-
<span class="caret text-primary opacity-75"></span>
|
|
57
|
-
</a>
|
|
58
|
-
<ul class="dropdown-menu p-1 text-sm" role="menu">
|
|
59
|
-
<li><h6 class="dropdown-header">[[flags:sort-all]]</h6></li>
|
|
60
|
-
<li class="dropdown-item rounded-1" data-name="sort" data-value="newest" role="menuitem">[[flags:sort-newest]]</li>
|
|
61
|
-
<li class="dropdown-item rounded-1" data-name="sort" data-value="oldest" role="menuitem">[[flags:sort-oldest]]</li>
|
|
62
|
-
<li class="dropdown-item rounded-1" data-name="sort" data-value="reports" role="menuitem">[[flags:sort-reports]]</li>
|
|
63
|
-
<li><h6 class="dropdown-header">[[flags:sort-posts-only]]</h6></li>
|
|
64
|
-
<li class="dropdown-item rounded-1" data-name="sort" data-value="downvotes" role="menuitem">[[flags:sort-downvotes]]</li>
|
|
65
|
-
<li class="dropdown-item rounded-1" data-name="sort" data-value="upvotes" role="menuitem">[[flags:sort-upvotes]]</li>
|
|
66
|
-
<li class="dropdown-item rounded-1" data-name="sort" data-value="replies" role="menuitem">[[flags:sort-replies]]</li>
|
|
67
|
-
</ul>
|
|
68
|
-
</div>
|
|
69
|
-
|
|
70
|
-
<div class="btn-group bottom-sheet">
|
|
71
|
-
<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-haspopup="true" aria-expanded="false">
|
|
72
|
-
<span class="filter-label">{{{ if filters.state }}}[[flags:state-{./filters.state}]]{{{ else }}}[[flags:filter-state]]{{{ end }}}</span>
|
|
73
|
-
<span class="caret text-primary opacity-75"></span>
|
|
74
|
-
</a>
|
|
75
|
-
<ul class="dropdown-menu p-1 text-sm" role="menu">
|
|
76
|
-
<li class="dropdown-item rounded-1" data-name="state" data-value="open" role="menuitem">[[flags:state-open]]</li>
|
|
77
|
-
<li class="dropdown-item rounded-1" data-name="state" data-value="wip" role="menuitem">[[flags:state-wip]]</li>
|
|
78
|
-
<li class="dropdown-item rounded-1" data-name="state" data-value="resolved" role="menuitem">[[flags:state-resolved]]</li>
|
|
79
|
-
<li class="dropdown-item rounded-1" data-name="state" data-value="rejected" role="menuitem">[[flags:state-rejected]]</li>
|
|
80
|
-
</ul>
|
|
81
|
-
</div>
|
|
82
|
-
|
|
83
|
-
<div class="btn-group bottom-sheet">
|
|
84
|
-
<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-haspopup="true" aria-expanded="false">
|
|
85
|
-
<span class="filter-label">{{{ if filters.type }}}[[flags:filter-type-{./filters.type}]]{{{ else }}}[[flags:filter-type]]{{{ end }}}</span>
|
|
86
|
-
<span class="caret text-primary opacity-75"></span>
|
|
87
|
-
</a>
|
|
88
|
-
<ul class="dropdown-menu p-1 text-sm" role="menu">
|
|
89
|
-
<li class="dropdown-item rounded-1" data-name="type" data-value="all" role="menuitem">[[flags:filter-type-all]]</li>
|
|
90
|
-
<li class="dropdown-item rounded-1" data-name="type" data-value="post" role="menuitem">[[flags:filter-type-post]]</li>
|
|
91
|
-
<li class="dropdown-item rounded-1" data-name="type" data-value="user" role="menuitem">[[flags:filter-type-user]]</li>
|
|
92
|
-
</ul>
|
|
93
|
-
</div>
|
|
94
|
-
|
|
95
|
-
<div component="flags/filter/assignee" class="dropdown bottom-sheet" data-filter-name="assignee">
|
|
96
|
-
<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-haspopup="true" aria-expanded="false">
|
|
97
|
-
<span class="filter-label">[[flags:filter-assignee]]</span>
|
|
98
|
-
<span class="caret text-primary opacity-75"></span>
|
|
99
|
-
</a>
|
|
100
|
-
|
|
101
|
-
<ul class="dropdown-menu p-1 text-sm" style="min-width: 350px;" role="menu">
|
|
102
|
-
<li class="px-3 py-1 d-flex flex-column gap-2">
|
|
103
|
-
<input type="text" class="form-control" component="user/filter/search" placeholder="[[search:type-a-username]]">
|
|
104
|
-
<div component="user/filter/selected" class="d-flex flex-wrap gap-2">
|
|
105
|
-
{{{ each selected.assignee }}}
|
|
106
|
-
<div class="d-flex px-2 py-1 rounded-1 text-bg-primary gap-2 align-items-center text-sm">
|
|
107
|
-
{buildAvatar(@value, "16px", true)} {./username}
|
|
108
|
-
<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>
|
|
109
|
-
</div>
|
|
110
|
-
{{{ end }}}
|
|
111
|
-
</div>
|
|
112
|
-
<hr/>
|
|
113
|
-
<div component="user/filter/results" class="d-flex flex-wrap gap-2">
|
|
114
|
-
{{{ each userFilterResults }}}
|
|
115
|
-
<button class="btn btn-light btn-sm border" data-uid="{./uid}" data-username="{./username}">{buildAvatar(@value, "16px", true)} {./username}</button>
|
|
116
|
-
{{{ end }}}
|
|
117
|
-
</div>
|
|
118
|
-
</li>
|
|
119
|
-
</ul>
|
|
120
|
-
</div>
|
|
121
|
-
|
|
122
|
-
<div component="flags/filter/reporterId" class="dropdown bottom-sheet" data-filter-name="reporterId">
|
|
123
|
-
<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-haspopup="true" aria-expanded="false">
|
|
124
|
-
<span class="filter-label">[[flags:filter-reporterId]]</span>
|
|
125
|
-
<span class="caret text-primary opacity-75"></span>
|
|
126
|
-
</a>
|
|
127
|
-
|
|
128
|
-
<ul class="dropdown-menu p-1 text-sm" style="min-width: 350px;" role="menu">
|
|
129
|
-
<li class="px-3 py-1 d-flex flex-column gap-2">
|
|
130
|
-
<input type="text" class="form-control" component="user/filter/search" placeholder="[[search:type-a-username]]">
|
|
131
|
-
<div component="user/filter/selected" class="d-flex flex-wrap gap-2">
|
|
132
|
-
{{{ each selected.reporterId }}}
|
|
133
|
-
<div class="d-flex px-2 py-1 rounded-1 text-bg-primary gap-2 align-items-center text-sm">
|
|
134
|
-
{buildAvatar(@value, "16px", true)} {./username}
|
|
135
|
-
<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>
|
|
136
|
-
</div>
|
|
137
|
-
{{{ end }}}
|
|
138
|
-
</div>
|
|
139
|
-
<hr/>
|
|
140
|
-
<div component="user/filter/results" class="d-flex flex-wrap gap-2">
|
|
141
|
-
{{{ each userFilterResults }}}
|
|
142
|
-
<button class="btn btn-light btn-sm border" data-uid="{./uid}" data-username="{./username}">{buildAvatar(@value, "16px", true)} {./username}</button>
|
|
143
|
-
{{{ end }}}
|
|
144
|
-
</div>
|
|
145
|
-
</li>
|
|
146
|
-
</ul>
|
|
147
|
-
</div>
|
|
148
|
-
|
|
149
|
-
<div component="flags/filter/targetUid" class="dropdown bottom-sheet" data-filter-name="targetUid">
|
|
150
|
-
<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-haspopup="true" aria-expanded="false">
|
|
151
|
-
<span class="filter-label">[[flags:filter-targetUid]]</span>
|
|
152
|
-
<span class="caret text-primary opacity-75"></span>
|
|
153
|
-
</a>
|
|
154
|
-
|
|
155
|
-
<ul class="dropdown-menu p-1 text-sm" style="min-width: 350px;" role="menu">
|
|
156
|
-
<li class="px-3 py-1 d-flex flex-column">
|
|
157
|
-
<input type="text" class="form-control" component="user/filter/search" placeholder="[[search:type-a-username]]">
|
|
158
|
-
<div component="user/filter/selected" class="d-flex flex-wrap gap-2">
|
|
159
|
-
{{{ each selected.targetUid }}}
|
|
160
|
-
<div class="d-flex px-2 py-1 rounded-1 text-bg-primary gap-2 align-items-center text-sm">
|
|
161
|
-
{buildAvatar(@value, "16px", true)} {./username}
|
|
162
|
-
<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>
|
|
163
|
-
</div>
|
|
164
|
-
{{{ end }}}
|
|
165
|
-
</div>
|
|
166
|
-
<hr/>
|
|
167
|
-
<div component="user/filter/results" class="d-flex flex-wrap gap-2">
|
|
168
|
-
{{{ each userFilterResults }}}
|
|
169
|
-
<button class="btn btn-light btn-sm border" data-uid="{./uid}" data-username="{./username}">{buildAvatar(@value, "16px", true)} {./username}</button>
|
|
170
|
-
{{{ end }}}
|
|
171
|
-
</div>
|
|
172
|
-
</li>
|
|
173
|
-
</ul>
|
|
174
|
-
</div>
|
|
175
|
-
|
|
176
|
-
<div component="flags/filters/reset" class="ms-auto">
|
|
177
|
-
<a class="filter-btn btn btn-warning btn-sm border {{{ if !hasFilter }}}btn-light disabled{{{ end }}}" href="{config.relative_path}/flags" role="button">
|
|
178
|
-
<span class="filter-label">[[flags:filter-reset]]</span>
|
|
179
|
-
</a>
|
|
180
|
-
</div>
|
|
181
|
-
|
|
182
|
-
<!-- IMPORT partials/flags/bulk-actions.tpl -->
|
|
183
|
-
|
|
184
|
-
<form role="form">
|
|
185
|
-
<input type="hidden" name="sort" value="{./sort}" />
|
|
186
|
-
<input type="hidden" name="state" value="{./filters.state}" />
|
|
187
|
-
<input type="hidden" name="type" value="{./filters.type}" />
|
|
188
|
-
</form>
|
|
189
|
-
</div>
|
|
@@ -1,38 +0,0 @@
|
|
|
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 -->
|