nodebb-theme-persona 13.3.42 → 13.3.44

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,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-theme-persona",
3
- "version": "13.3.42",
3
+ "version": "13.3.44",
4
4
  "nbbpm": {
5
5
  "compatibility": "^3.7.0"
6
6
  },
package/scss/persona.scss CHANGED
@@ -15,10 +15,7 @@
15
15
  @import "topics_list";
16
16
  @import "footer";
17
17
  @import "posts_list";
18
- @import "flags";
19
-
20
18
  @import "mobile";
21
-
22
19
  @import "helpers";
23
20
  @import "keyframes";
24
21
 
@@ -5,16 +5,16 @@
5
5
  <div class="dropdown">
6
6
  <input class="form-control" type="text" id="user-search" placeholder="[[users:enter-username]]" data-bs-toggle="dropdown" autocomplete="off" aria-haspopup="true" aria-expanded="false"/>
7
7
 
8
- <ul component="blocks/search/list" class="dropdown-menu block-edit list-unstyled" role="menu">
8
+ <ul component="blocks/search/list" class="dropdown-menu p-1 block-edit list-unstyled" role="menu">
9
9
  <li component="blocks/start-typing">
10
- <a href="#" class="dropdown-item" role="menuitem">[[admin/menu:search.start-typing]]</a>
10
+ <a href="#" class="dropdown-item rounded-1" role="menuitem">[[admin/menu:search.start-typing]]</a>
11
11
  </li>
12
12
  <li component="blocks/no-users" class="hidden">
13
- <a href="#" class="dropdown-item role="menuitem">[[users:no-users-found]]</a>
13
+ <a href="#" class="dropdown-item rounded-1" role="menuitem">[[users:no-users-found]]</a>
14
14
  </li>
15
15
  {{{ each edit }}}
16
16
  <li component="blocks/search/match">
17
- <div class="dropdown-item d-flex flex-nowrap gap-2 justify-content-between" role="menuitem">
17
+ <div class="dropdown-item rounded-1 d-flex flex-nowrap gap-2 justify-content-between align-items-center" role="menuitem">
18
18
  <div class="text-truncate">
19
19
  <a href="{config.relative_path}/uid/{../uid}">{buildAvatar(edit, "24px", true)} {../username}</a>
20
20
  </div>
@@ -1,22 +1,24 @@
1
1
  <!-- IMPORT partials/account/header.tpl -->
2
2
 
3
- <div class="row">
4
- <h1 class="fs-2">{title}</h1>
5
- <div class="col-lg-12 mb-2">
6
- <div class="btn-group bottom-sheet" component="category/watch/all">
7
- <button class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" type="button" aria-haspopup="true" aria-expanded="false">
8
- <span>[[user:change-all]]</span>
9
- <span class="caret"></span>
10
- </button>
11
- <ul class="dropdown-menu" role="menu">
12
- <li><a class="dropdown-item" href="#" component="category/watching" data-state="watching" role="menuitem"><i class="fa fa-fw fa-bell-o"></i> [[category:watching]]<p class="help-text"><small>[[category:watching.description]]</small></p></a></li>
13
- <li><a class="dropdown-item" href="#" component="category/tracking" data-state="tracking" role="menuitem"><i class="fa fa-fw fa-inbox"></i> [[category:tracking]]<p class="help-text"><small>[[category:tracking.description]]</small></p></a></li>
14
- <li><a class="dropdown-item" href="#" component="category/notwatching" data-state="notwatching" role="menuitem"><i class="fa fa-fw fa-clock-o"></i> [[category:not-watching]]<p class="help-text"><small>[[category:not-watching.description]]</small></p></a></li>
15
- <li><a class="dropdown-item" href="#" component="category/ignoring" data-state="ignoring" role="menuitem"><i class="fa fa-fw fa-eye-slash"></i> [[category:ignoring]]<p class="help-text"><small>[[category:ignoring.description]]</small></p></a></li>
16
- </ul>
3
+ <div class="">
4
+ <div class="d-flex justify-content-between align-items-center mb-3">
5
+ <h1 class="fs-2">{title}</h1>
6
+ <div class="mb-2">
7
+ <div class="btn-group bottom-sheet" component="category/watch/all">
8
+ <button class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" type="button" aria-haspopup="true" aria-expanded="false">
9
+ <span>[[user:change-all]]</span>
10
+ <span class="caret"></span>
11
+ </button>
12
+ <ul class="dropdown-menu" role="menu">
13
+ <li><a class="dropdown-item" href="#" component="category/watching" data-state="watching" role="menuitem"><i class="fa fa-fw fa-bell-o"></i> [[category:watching]]<p class="help-text"><small>[[category:watching.description]]</small></p></a></li>
14
+ <li><a class="dropdown-item" href="#" component="category/tracking" data-state="tracking" role="menuitem"><i class="fa fa-fw fa-inbox"></i> [[category:tracking]]<p class="help-text"><small>[[category:tracking.description]]</small></p></a></li>
15
+ <li><a class="dropdown-item" href="#" component="category/notwatching" data-state="notwatching" role="menuitem"><i class="fa fa-fw fa-clock-o"></i> [[category:not-watching]]<p class="help-text"><small>[[category:not-watching.description]]</small></p></a></li>
16
+ <li><a class="dropdown-item" href="#" component="category/ignoring" data-state="ignoring" role="menuitem"><i class="fa fa-fw fa-eye-slash"></i> [[category:ignoring]]<p class="help-text"><small>[[category:ignoring.description]]</small></p></a></li>
17
+ </ul>
18
+ </div>
17
19
  </div>
18
20
  </div>
19
- <div class="col-lg-12">
21
+ <div class="">
20
22
  <ul class="categories list-unstyled" itemscope itemtype="http://www.schema.org/ItemList">
21
23
  {{{each categories}}}
22
24
  <!-- IMPORT partials/account/category-item.tpl -->
@@ -2,9 +2,9 @@
2
2
  <div class="notifications">
3
3
 
4
4
  <!-- IMPORT partials/breadcrumbs.tpl -->
5
- <div class="btn-toolbar justify-content-end" role="toolbar">
5
+ <div class="d-flex gap-2 justify-content-end" role="toolbar">
6
6
  <div class="btn-group me-2">
7
- <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
7
+ <button class="btn btn-ghost btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
8
8
  {{{ if selectedFilter }}}{selectedFilter.name}{{{ end}}} <span class="caret"></span>
9
9
  </button>
10
10
  <ul class="dropdown-menu dropdown-menu-end" role="menu">
@@ -20,15 +20,10 @@
20
20
  </ul>
21
21
  </div>
22
22
 
23
- <div class="btn-group">
24
- <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
25
- <i class="fa fa-eye"></i>
26
- <span class="caret"></span>
27
- </button>
28
- <ul class="dropdown-menu dropdown-menu-end" role="menu" aria-labelledby="dropdownMenu1">
29
- <li role="presentation"><a class="dropdown-item" role="menuitem" href="#" component="notifications/mark_all">[[notifications:mark-all-read]]</a></li>
30
- </ul>
31
- </div>
23
+ <button component="notifications/mark_all" class="btn btn-ghost btn-sm" type="button">
24
+ <i class="fa fa-eye"></i>
25
+ [[notifications:mark-all-read]]
26
+ </button>
32
27
  </div>
33
28
 
34
29
  <hr />
@@ -37,10 +32,10 @@
37
32
  [[notifications:no-notifs]]
38
33
  </div>
39
34
 
40
- <ul class="notifications-list list-unstyled" data-nextstart="{nextStart}">
35
+ <ul component="notifications/list" class="notifications-list list-unstyled" data-nextstart="{nextStart}">
41
36
  {{{each notifications}}}
42
- <li data-nid="{notifications.nid}" class="{notifications.readClass} {{{ if !./read}}}text-bg-warning{{{ end }}} d-flex pointer border p-3 mb-2" component="notifications/item">
43
- <div class="me-2">
37
+ <li data-nid="{notifications.nid}" class="{notifications.readClass} {{{ if !./read}}}unread{{{ end }}} d-flex pointer border p-3 mb-2 d-flex gap-2" component="notifications/item">
38
+ <div>
44
39
  {{{ if notifications.from }}}
45
40
  {buildAvatar(notifications.user, "24px", true)}
46
41
  {{{ else }}}
@@ -49,13 +44,17 @@
49
44
  {{{ end }}}
50
45
  {{{ end }}}
51
46
  </div>
47
+ <div class="d-flex flex-column gap-1 flex-grow-1">
48
+ <a class="text-reset" component="notifications/item/link" href="{notifications.path}">{notifications.bodyShort}</a>
49
+ <span class="timeago text-sm text-secondary" title="{notifications.datetimeISO}"></span>
50
+ </div>
52
51
  <div>
53
- <p class="mb-1">
54
- <a class="text-reset" component="notifications/item/link" href="{notifications.path}">{notifications.bodyShort}</a>
55
- </p>
56
- <p class="timestamp">
57
- <span class="timeago small text-reset" title="{notifications.datetimeISO}"></span>
58
- </p>
52
+ {{{ if ./nid }}}
53
+ <button class="mark-read btn btn-ghost btn-sm d-flex align-items-center justify-content-center flex-grow-0 flex-shrink-0 p-1" style="width: 1.5rem; height: 1.5rem;">
54
+ <i class="unread fa fa-2xs fa-circle text-primary {{{ if ./read }}}hidden{{{ end }}}" aria-label="[[unread:mark-as-read]]"></i>
55
+ <i class="read fa fa-2xs fa-circle-o text-secondary {{{ if !./read }}}hidden{{{ end }}}" aria-label="[[unread:mark-as-unread]]"></i>
56
+ </button>
57
+ {{{ end }}}
59
58
  </div>
60
59
  </li>
61
60
  {{{end}}}
@@ -12,7 +12,7 @@
12
12
  {{{end}}}
13
13
  </ul>
14
14
  {{{ if hasMoreSubCategories}}}
15
- <button class="btn btn-outline-secondary mb-2" component="category/load-more-subcategories">[[category:x-more-categories, {subCategoriesLeft}]]</button>
15
+ <button class="btn btn-ghost btn-sm mb-2" component="category/load-more-subcategories">[[category:x-more-categories, {subCategoriesLeft}]]</button>
16
16
  {{{ end }}}
17
17
  </div>
18
18
  {{{ end }}}
@@ -1,11 +1,15 @@
1
1
  <div class="btn-group bottom-sheet {{{ if !terms.length }}}hidden{{{ end }}}">
2
- <button type="button" class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
3
- {selectedTerm.name} <span class="caret"></span>
2
+ <button type="button" class="btn btn-ghost btn-sm ff-secondary d-flex gap-2 align-items-center dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
3
+ <i class="fa fa-fw fa-clock text-primary"></i>
4
+ <span class="visible-md-inline visible-lg-inline fw-semibold">{selectedTerm.name}</span>
4
5
  </button>
5
- <ul class="dropdown-menu dropdown-menu-end" role="menu">
6
+ <ul class="dropdown-menu p-1 text-sm" role="menu">
6
7
  {{{each terms}}}
7
- <li role="presentation" class="category">
8
- <a class="dropdown-item" role="menuitem" href="{config.relative_path}/{terms.url}"><i class="fa fa-fw {{{ if terms.selected }}}fa-check{{{ end }}}"></i>{terms.name}</a>
8
+ <li role="presentation" class="category {{{if terms.selected}}}selected{{{end}}}">
9
+ <a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" href="{config.relative_path}/{terms.url}">
10
+ <div class="flex-grow-1">{terms.name}</div>
11
+ <i class="flex-shrink-0 fa fa-fw {{{ if terms.selected }}}fa-check{{{ end }}}"></i>
12
+ </a>
9
13
  </li>
10
14
  {{{end}}}
11
15
  </ul>
package/scss/flags.scss DELETED
@@ -1,43 +0,0 @@
1
- .page-flags {
2
- [component="flags/list"] {
3
- tr {
4
- @include pointer;
5
- }
6
- }
7
-
8
- #flags-daily-wrapper + .panel-footer {
9
- @include pointer;
10
- }
11
-
12
- [component="flag/reports"] {
13
- blockquote {
14
- margin: 0;
15
- margin-top: 1rem;
16
- overflow-wrap: break-word;
17
- }
18
- }
19
-
20
- [component="flag/notes"] {
21
- .media {
22
- padding: 1rem;
23
- }
24
-
25
- .media-right {
26
- visibility: hidden;
27
-
28
- i {
29
- padding: 1rem;
30
- }
31
- }
32
-
33
- &:hover {
34
- .media-right {
35
- visibility: visible;
36
- }
37
- }
38
-
39
- .editing {
40
- background-color: $info;
41
- }
42
- }
43
- }
@@ -1,208 +0,0 @@
1
- <!-- IMPORT partials/breadcrumbs.tpl -->
2
-
3
- <div class="row">
4
- <div class="col-12">
5
- <h2 class="h4">
6
- {target_readable}
7
- <small><span class="text-muted timeago" title="{datetimeISO}"></span></small>
8
- </h2>
9
-
10
- <hr />
11
-
12
- <!-- IF type_bool.post -->
13
- <div class="d-flex">
14
- <div class="flex-shrink-0">
15
- <a href="{config.relative_path}/user/{target.user.userslug}">{buildAvatar(target.user, "64px", true, "media-object")}</a>
16
- </div>
17
- <div class="flex-grow-1 ms-3">
18
- <h4 class="media-heading"><a href="{config.relative_path}/user/{target.user.userslug}">{target.user.username}</a></h4>
19
- {target.content}
20
- </div>
21
- </div>
22
- <!-- ENDIF type_bool.post -->
23
-
24
- <!-- IF type_bool.user -->
25
- <div class="d-flex">
26
- <div class="flex-shrink-0">
27
- <a href="{config.relative_path}/user/{target.userslug}">{buildAvatar(target, "64px", true, "media-object")}</a>
28
- </div>
29
- <div class="flex-grow-1 ms-3">
30
- <h4 class="media-heading"><a href="{config.relative_path}/user/{target.userslug}">{target.username}</a></h4>
31
- <p class="lead">
32
- <a href="{config.relative_path}/uid/{target.uid}">[[flags:user-view]]</a> |
33
- <a href="{config.relative_path}/uid/{target.uid}/edit">[[flags:user-edit]]</a>
34
- </p>
35
- </div>
36
- </div>
37
- <!-- ENDIF type_bool.user -->
38
-
39
- <!-- IF type_bool.empty -->
40
- <div class="alert alert-warning" role="alert">[[flags:target-purged]]</div>
41
- <!-- ENDIF type_bool.empty -->
42
-
43
- <hr />
44
-
45
- <div class="row">
46
- <div class="col-sm-6">
47
- <form role="form" id="attributes">
48
- <div class="mb-3">
49
- <h2 class="h4">[[flags:reports]]</h2>
50
- <ul class="list-group" component="flag/reports">
51
- {{{ each reports }}}
52
- <li class="list-group-item">
53
- <a href="{config.relative_path}/user/{./reporter.userslug}">{buildAvatar(./reporter, "24px", true)}</a>
54
- &ndash; <span class="timeago" title="{./timestampISO}"></span>
55
- <blockquote><em>{./value}</em></blockquote>
56
- </li>
57
- {{{ end }}}
58
- </ul>
59
- </div>
60
- <div class="mb-3">
61
- <h2 class="h4" for="state">[[flags:state]]</h2>
62
- <select class="form-select" id="state" name="state" disabled>
63
- <option value="open">[[flags:state-open]]</option>
64
- <option value="wip">[[flags:state-wip]]</option>
65
- <option value="resolved">[[flags:state-resolved]]</option>
66
- <option value="rejected">[[flags:state-rejected]]</option>
67
- </select>
68
- </div>
69
- <div class="mb-3">
70
- <h2 class="h4" for="assignee">[[flags:assignee]]</h2>
71
- <select class="form-control" id="assignee" name="assignee" disabled>
72
- <option value="">[[flags:no-assignee]]</option>
73
- {{{each assignees}}}
74
- <option value="{../uid}">{../username}</option>
75
- {{{end}}}
76
- </select>
77
- </div>
78
- <div class="d-grid">
79
- <button type="button" class="btn btn-primary" data-action="update">[[flags:update]]</button>
80
- </div>
81
- </form>
82
-
83
- <hr />
84
-
85
- <form role="form">
86
- <div class="mb-3">
87
- <div class="d-flex align-items-center">
88
- <h2 class="h4 me-auto mb-0" for="note">[[flags:notes]]</h2>
89
- <button type="button" class="btn btn-primary" data-action="addEditNote">[[flags:add-note]]</button>
90
- </div>
91
- </div>
92
- </form>
93
-
94
- <div component="flag/notes">
95
- <!-- IF !notes.length -->
96
- <div class="alert alert-success text-center">[[flags:no-notes]]</div>
97
- <!-- ENDIF !notes.length -->
98
- {{{each notes}}}
99
- <div class="d-flex mb-3" component="flag/note" data-datetime="{./datetime}" data-index="{@index}">
100
- <div class="flex-shrink-0">
101
- <a href="{config.relative_path}/user/{../user.userslug}">{buildAvatar(notes.user, "32px", true, "media-object")}</a>
102
- </div>
103
- <div class="flex-grow-1 mx-3">
104
- <h2 class="h5">
105
- <a href="{config.relative_path}/user/{../user.userslug}">{../user.username}</a>
106
- <small><span class="timeago" title="{../datetimeISO}"></span></small>
107
- </h4>
108
- {../content}
109
- </div>
110
- <div class="flex-shrink-0">
111
- <a href="#" class="btn btn-sm btn-link" data-action="addEditNote"><i class="fa fa-pencil"></i></a>
112
- <a href="#" class="btn btn-sm btn-link" data-action="delete-note"><i class="fa fa-trash text-danger"></i></a>
113
- </div>
114
- </div>
115
- {{{end}}}
116
- </div>
117
- </div>
118
- <div class="col-sm-6">
119
- <h2 class="h4">[[flags:quick-actions]]</h2>
120
-
121
- <div class="d-grid gap-1">
122
- <a class="btn btn-light" href="{config.relative_path}/{type_path}/{targetId}">
123
- <i class="fa fa-external-link"></i>
124
- [[flags:go-to-target]]
125
- </a>
126
-
127
- <a class="btn btn-light" href="#" data-action="assign">
128
- <i class="fa fa-id-card-o"></i>
129
- [[flags:assign-to-me]]
130
- </a>
131
-
132
- {{{ if type_bool.post }}}
133
- {{{ if !target.deleted}}}
134
- <a class="btn btn-outline-danger" href="#" data-action="delete-post"><i class="fa fa-trash"></i> [[flags:delete-post]]</a>
135
- {{{ else }}}
136
- <a class="btn btn-danger" href="#" data-action="purge-post"><i class="fa fa-trash"></i> [[flags:purge-post]]</a>
137
- <a class="btn btn-outline-success" href="#" data-action="restore-post"><i class="fa fa-reply"></i><i class="fa fa-trash"></i> [[flags:restore-post]]</a>
138
- {{{ end }}}
139
- {{{ end }}}
140
-
141
- {{{ if target.uid }}}
142
- <div class="btn-group" data-uid="{target.uid}">
143
- <button type="button" class="btn btn-light dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
144
- <i class="fa fa-street-view"></i>
145
- [[flags:flagged-user]]
146
- <span class="caret"></span>
147
- </button>
148
- <ul class="dropdown-menu" role="menu">
149
- <li><a class="dropdown-item" href="{config.relative_path}/uid/{target.uid}" role="menuitem">[[flags:view-profile]]</a></li>
150
- {{{ if !config.disableChat }}}
151
- <li><a class="dropdown-item" href="#" data-action="chat" role="menuitem">[[flags:start-new-chat]]</a></li>
152
- {{{ end }}}
153
- <li class="dropdown-divider"></li>
154
- {{{ if privileges.ban }}}
155
- <li class="{{{ if target.user.banned }}}hidden{{{ end }}}"><a class="dropdown-item" href="#" data-action="ban" role="menuitem">[[user:ban-account]]</a></li>
156
- <li class="{{{ if !target.user.banned }}}hidden{{{ end }}}"><a class="dropdown-item" href="#" data-action="unban" role="menuitem">[[user:unban-account]]</a></li>
157
- {{{ end }}}
158
- {{{ if privileges.mute}}}
159
- <li class="{{{ if target.user.muted }}}hidden{{{ end }}}"><a class="dropdown-item" href="#" data-action="mute" role="menuitem">[[user:mute-account]]</a></li>
160
- <li class="{{{ if !target.user.muted }}}hidden{{{ end }}}"><a class="dropdown-item" href="#" data-action="unmute" role="menuitem">[[user:unmute-account]]</a></li>
161
- {{{ end }}}
162
- {{{ if privileges.admin:users }}}
163
- <li><a class="dropdown-item" href="#" data-action="delete-account" role="menuitem">[[user:delete-account-as-admin]]</a></li>
164
- <li><a class="dropdown-item" href="#" data-action="delete-content" role="menuitem">[[user:delete-content]]</a></li>
165
- <li><a class="dropdown-item" href="#" data-action="delete-all" role="menuitem">[[user:delete-all]]</a></li>
166
- {{{ end }}}
167
- </ul>
168
- </div>
169
- {{{ end }}}
170
- </div>
171
-
172
- <hr />
173
-
174
- <h2 class="h4">[[flags:history]]</h2>
175
- <div component="flag/history">
176
- <!-- IF !history.length -->
177
- <div class="alert alert-success text-center">[[flags:no-history]]</div>
178
- <!-- ENDIF !history.length -->
179
- {{{each history}}}
180
- <div class="d-flex">
181
- <div class="flex-shrink-0">
182
- <a href="{config.relative_path}/user/{../user.userslug}">{buildAvatar(history.user, "32px", true, "media-object")}</a>
183
- </div>
184
- <div class="flex-grow-1 ms-3">
185
- <h4 class="media-heading">
186
- <a href="{config.relative_path}/user/{../user.userslug}">{../user.username}</a>
187
- <small><span class="timeago" title="{../datetimeISO}"></span></small>
188
- </h4>
189
- <ul>
190
- {{{each ./fields}}}
191
- <li>
192
- <span class="badge bg-primary">[[flags:{@key}]]</span><!-- IF @value --> &rarr; <span class="badge bg-light text-dark">{@value}</span><!-- ENDIF @value -->
193
- </li>
194
- {{{end}}}
195
- {{{ each ./meta }}}
196
- <li>
197
- <span class="badge bg-{{./labelClass}}">{{./key}}</span>{{{ if ./value }}} &rarr; <span class="badge bg-light text-dark">{{ ./value }}</span>{{{ end }}}
198
- </li>
199
- {{{ end }}}
200
- </ul>
201
- </div>
202
- </div>
203
- {{{end}}}
204
- </div>
205
- </div>
206
- </div>
207
- </div>
208
- </div>
@@ -1,71 +0,0 @@
1
- <!-- IMPORT partials/breadcrumbs.tpl -->
2
-
3
- <div class="row">
4
- <div class="col-sm-4 col-md-3">
5
- <!-- IMPORT partials/flags/filters.tpl -->
6
- </div>
7
- <div class="col-sm-8 col-md-9">
8
- <!-- IF hasFilter -->
9
- <div class="alert alert-warning">
10
- <p class="float-end">
11
- <a href="{config.relative_path}/flags">[[flags:filter-reset]]</a>
12
- </p>
13
- [[flags:filter-active]]
14
- </div>
15
- <!-- ENDIF hasFilter -->
16
-
17
- <div class="btn-group float-end" component="flags/bulk-actions">
18
- <button type="button" class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" autocomplete="off" aria-haspopup="true" aria-expanded="false" disabled="disabled">
19
- <i class="fa fa-clone"></i> [[flags:bulk-actions]] <span class="caret"></span>
20
- </button>
21
- <ul class="dropdown-menu" role="menu">
22
- <li><a href="#" class="dropdown-item" data-action="bulk-assign" role="menuitem">[[flags:assign-to-me]]</a></li>
23
- <li><a href="#" class="dropdown-item" data-action="bulk-mark-resolved" role="menuitem">[[flags:bulk-resolve]]</a></li>
24
- </ul>
25
- </div>
26
-
27
- <table class="table table-striped table-hover" component="flags/list">
28
- <thead>
29
- <tr>
30
- <th>
31
- <input type="checkbox" data-action="toggle-all" autocomplete="off" />
32
- </th>
33
- <th></th>
34
- <th><span class="hidden-xs">[[flags:reports]] </span><i class="fa fa-user-plus"></i></th>
35
- <th><span class="hidden-xs">[[flags:first-reported]] </span><i class="fa fa-clock-o"></i></th>
36
- <th>[[flags:state]]</th>
37
- </tr>
38
- </thead>
39
- <tbody>
40
- <!-- IF !flags.length -->
41
- <tr>
42
- <td colspan="5">
43
- <div class="alert alert-success text-center">
44
- [[flags:no-flags]]
45
- </div>
46
- </td>
47
- </tr>
48
- <!-- ENDIF !flags.length -->
49
- {{{each flags}}}
50
- <tr data-flag-id="{../flagId}">
51
- <td>
52
- <input type="checkbox" autocomplete="off" />
53
- </td>
54
- <td>
55
- <a href="{config.relative_path}/flags/{../flagId}">
56
- <strong>{../target_readable}</strong>
57
- </a>
58
- </td>
59
- <td>
60
- {./heat}
61
- </td>
62
- <td><span class="timeago" title="{../datetimeISO}"></span></td>
63
- <td><span class="badge bg-{../labelClass}">[[flags:state-{../state}]]</span></td>
64
- </tr>
65
- {{{end}}}
66
- </tbody>
67
- </table>
68
-
69
- <!-- IMPORT partials/paginator.tpl -->
70
- </div>
71
- </div>
@@ -1,174 +0,0 @@
1
- <div class="text-center">
2
- <div class="card mb-3">
3
- <div class="card-body collapse" id="flags-daily-wrapper" aria-expanded="false">
4
- <div class="position-relative" style="aspect-ratio: 2; max-height: initial;">
5
- <canvas id="flags:daily" style="max-height: initial;"></canvas>
6
- </div>
7
- </div>
8
- <div class="card-footer" data-bs-toggle="collapse" data-bs-target="#flags-daily-wrapper" aria-controls="#flags-daily-wrapper"><small>[[flags:graph-label]]</small>&nbsp;<i class="fa fa-sort"></i></div>
9
- </div>
10
- </div>
11
-
12
- <div class="card mb-3">
13
- <div class="card-header">
14
- [[flags:quick-filters]]
15
- </div>
16
- <div class="card-body">
17
- <ul>
18
- <li><a href="{config.relative_path}/flags?quick=mine">[[flags:filter-quick-mine]]</a></li>
19
- </ul>
20
- </div>
21
- </div>
22
-
23
- <div class="card mb-3">
24
- <div class="card-header">
25
- [[flags:filters]]
26
- </div>
27
- <div class="card-body">
28
- <form role="form" component="flags/filters">
29
- <fieldset>
30
- <div class="mb-3">
31
- <label class="form-label" for="filter-cid">[[flags:filter-cid]]</label>
32
- <div class="input-group">
33
- <!-- IMPORT partials/category/filter-dropdown-left.tpl -->
34
- </div>
35
- </div>
36
- <div class="mb-3">
37
- <label class="form-label" for="sort">[[flags:sort]]</label>
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>
61
-
62
- <div class="mb-3">
63
- <label class="form-label" for="filter-type">[[flags:filter-type]]</label>
64
- <select class="form-control" id="filter-type" name="type">
65
- <option value="">[[flags:filter-type-all]]</option>
66
- <option value="post">[[flags:filter-type-post]]</option>
67
- <option value="user">[[flags:filter-type-user]]</option>
68
- </select>
69
- </div>
70
- </fieldset>
71
-
72
- <fieldset class="collapse{{{ if expanded }}} show{{{ end }}}" id="more-filters" aria-expanded="{expanded}">
73
- <div class="mb-3">
74
- <label class="form-label" for="filter-assignee">[[flags:filter-assignee]]</label>
75
- <div component="flags/filter/assignee" class="dropdown" data-filter-name="assignee">
76
- <a component="user/filter/button" class="filter-btn btn btn-sm border {{{ if filters.assignee }}}btn-primary{{{ else }}}btn-light{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-haspopup="true" aria-expanded="false">
77
- <span class="filter-label">[[flags:filter-assignee]]</span>
78
- <span class="caret"></span>
79
- </a>
80
-
81
- <ul class="dropdown-menu" style="width: 350px;" role="menu">
82
- <li class="px-3 py-1 d-flex flex-column gap-2">
83
- <input type="text" class="form-control" component="user/filter/search" placeholder="[[search:type-a-username]]">
84
- <div component="user/filter/selected" class="d-flex flex-wrap gap-2">
85
- {{{ each selected.assignee }}}
86
- <div class="d-flex px-2 py-1 rounded-1 text-bg-primary gap-2 align-items-center text-sm">
87
- {buildAvatar(@value, "16px", true)} {./username}
88
- <button type="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>
89
- </div>
90
- {{{ end }}}
91
- </div>
92
- <hr/>
93
- <div component="user/filter/results" class="d-flex flex-wrap gap-2">
94
- {{{ each userFilterResults }}}
95
- <button type="button" class="btn btn-light btn-sm border" data-uid="{./uid}" data-username="{./username}">{buildAvatar(@value, "16px", true)} {./username}</button>
96
- {{{ end }}}
97
- </div>
98
- </li>
99
- </ul>
100
- </div>
101
- </div>
102
-
103
- <div class="mb-3">
104
- <label class="form-label" for="filter-targetUid">[[flags:filter-targetUid]]</label>
105
- <div component="flags/filter/targetUid" class="dropdown" data-filter-name="targetUid">
106
- <a component="user/filter/button" class="filter-btn btn btn-sm border {{{ if filters.targetUid }}}btn-primary{{{ else }}}btn-light{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-haspopup="true" aria-expanded="false">
107
- <span class="filter-label">[[flags:filter-targetUid]]</span>
108
- <span class="caret"></span>
109
- </a>
110
-
111
- <ul class="dropdown-menu" style="width: 350px;" role="menu">
112
- <li class="px-3 py-1 d-flex flex-column gap-2">
113
- <input type="text" class="form-control" component="user/filter/search" placeholder="[[search:type-a-username]]">
114
- <div component="user/filter/selected" class="d-flex flex-wrap gap-2">
115
- {{{ each selected.targetUid }}}
116
- <div class="d-flex px-2 py-1 rounded-1 text-bg-primary gap-2 align-items-center text-sm">
117
- {buildAvatar(@value, "16px", true)} {./username}
118
- <button type="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>
119
- </div>
120
- {{{ end }}}
121
- </div>
122
- <hr/>
123
- <div component="user/filter/results" class="d-flex flex-wrap gap-2">
124
- {{{ each userFilterResults }}}
125
- <button type="button" class="btn btn-light btn-sm border" data-uid="{./uid}" data-username="{./username}">{buildAvatar(@value, "16px", true)} {./username}</button>
126
- {{{ end }}}
127
- </div>
128
- </li>
129
- </ul>
130
- </div>
131
- </div>
132
-
133
- <div class="mb-3">
134
- <label class="form-label" for="filter-reporterId">[[flags:filter-reporterId]]</label>
135
- <div component="flags/filter/reporterId" class="dropdown" data-filter-name="reporterId">
136
- <a component="user/filter/button" class="filter-btn btn btn-sm border {{{ if filters.reporterId }}}btn-primary{{{ else }}}btn-light{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-haspopup="true" aria-expanded="false">
137
- <span class="filter-label">[[flags:filter-reporterId]]</span>
138
- <span class="caret"></span>
139
- </a>
140
-
141
- <ul class="dropdown-menu" style="width: 350px;" role="menu">
142
- <li class="px-3 py-1 d-flex flex-column gap-2">
143
- <input type="text" class="form-control" component="user/filter/search" placeholder="[[search:type-a-username]]">
144
- <div component="user/filter/selected" class="d-flex flex-wrap gap-2">
145
- {{{ each selected.reporterId }}}
146
- <div class="d-flex px-2 py-1 rounded-1 text-bg-primary gap-2 align-items-center text-sm">
147
- {buildAvatar(@value, "16px", true)} {./username}
148
- <button type="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>
149
- </div>
150
- {{{ end }}}
151
- </div>
152
- <hr/>
153
- <div component="user/filter/results" class="d-flex flex-wrap gap-2">
154
- {{{ each userFilterResults }}}
155
- <button type="button" class="btn btn-light btn-sm border" data-uid="{./uid}" data-username="{./username}">{buildAvatar(@value, "16px", true)} {./username}</button>
156
- {{{ end }}}
157
- </div>
158
- </li>
159
- </ul>
160
- </div>
161
- </div>
162
- </fieldset>
163
-
164
- <div class="d-grid gap-2">
165
- {{{ if expanded }}}
166
- <button type="button" class="btn btn-link" data-bs-toggle="collapse" data-bs-target="#more-filters" aria-controls="#more-filters" data-text-variant="[[flags:more-filters]] ">[[flags:fewer-filters]]&nbsp;<i class="fa fa-sort"></i></button>
167
- {{{ else }}}
168
- <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]]&nbsp;<i class="fa fa-sort"></i></button>
169
- {{{ end }}}
170
- <button type="button" id="apply-filters" class="btn btn-primary">[[flags:apply-filters]]</button>
171
- </div>
172
- </form>
173
- </div>
174
- </div>