nodebb-theme-harmony 2.2.14 → 2.2.16

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-harmony",
3
- "version": "2.2.14",
3
+ "version": "2.2.16",
4
4
  "nbbpm": {
5
5
  "compatibility": "^4.0.0"
6
6
  },
package/scss/harmony.scss CHANGED
@@ -11,6 +11,7 @@
11
11
  @import "status";
12
12
  @import "account";
13
13
  @import "groups";
14
+ @import "world";
14
15
  @import "modals";
15
16
 
16
17
  @import "modules/breadcrumbs";
@@ -0,0 +1,5 @@
1
+ .page-world {
2
+ .quick-reply {
3
+ @include topic-avatars();
4
+ }
5
+ }
@@ -2,7 +2,7 @@
2
2
 
3
3
  {{{ if sessions.length }}}
4
4
  <div class="mb-3">
5
- <h4>[[global:sessions]]</h4>
5
+ <h5>[[global:sessions]]</h5>
6
6
  <ul class="list-group" component="user/sessions">
7
7
  <!-- IMPORT partials/account/session-list.tpl -->
8
8
  </ul>
@@ -11,12 +11,20 @@
11
11
 
12
12
  <div class="row">
13
13
  <div class="col-sm-6 mb-3">
14
- <div class="card mb-3">
15
- <h5 class="card-header">
16
- [[global:recentips]]
17
- </h5>
18
- <div class="card-body">
19
- <ul>
14
+ {{{ if invitedBy}}}
15
+ <div class="mb-4 pb-3 border-bottom">
16
+ <h6>[[user:info.invited-by]]</h6>
17
+ <div class="d-flex align-items-center gap-2">
18
+ <a href="">{buildAvatar(invitedBy, "24px", true)}</a>
19
+ <a href="">{invitedBy.username}</a>
20
+ </div>
21
+ </div>
22
+ {{{ end }}}
23
+
24
+ <div class="mb-4 border-bottom">
25
+ <h6>[[global:recentips]]</h6>
26
+ <div class="">
27
+ <ul class="text-sm text-secondary">
20
28
  {{{each ips}}}
21
29
  <li>{@value}</li>
22
30
  {{{end}}}
@@ -24,22 +32,20 @@
24
32
  </div>
25
33
  </div>
26
34
 
27
- <div class="card mb-3">
28
- <h5 class="card-header">
29
- [[user:info.username-history]]
30
- </h5>
31
- <div class="card-body">
32
- <ul class="list-unstyled mb-0">
35
+ <div class="mb-4 border-bottom">
36
+ <h6>[[user:info.username-history]]</h6>
37
+ <div class="">
38
+ <ul class="list-unstyled">
33
39
  {{{ each usernames }}}
34
40
  <li class="d-flex justify-content-between mb-1">
35
- <span class="text-sm">{./value}</span>
41
+ <span class="text-sm text-secondary">{./value}</span>
36
42
 
37
43
  <div>
38
44
  {{{ if ./byUid }}}
39
45
  <a class="lh-1" href="{{{ if ./byUser.userslug }}}{config.relative_path}/user/{./byUser.userslug}{{{ else }}}#{{{ end }}}">
40
46
  {buildAvatar(./byUser, "18px", true)}</a>
41
47
  {{{ end }}}
42
- <span class="timeago text-sm lh-1 align-middle" title="{./timestampISO}"></span>
48
+ <span class="timeago text-sm text-secondary lh-1 align-middle" title="{./timestampISO}"></span>
43
49
  </div>
44
50
  </li>
45
51
  {{{ end }}}
@@ -47,21 +53,19 @@
47
53
  </div>
48
54
  </div>
49
55
 
50
- <div class="card mb-3">
51
- <h5 class="card-header">
52
- [[user:info.email-history]]
53
- </h5>
54
- <div class="card-body">
55
- <ul class="list-unstyled mb-0">
56
+ <div class="mb-4 border-bottom">
57
+ <h6>[[user:info.email-history]]</h6>
58
+ <div class="">
59
+ <ul class="list-unstyled">
56
60
  {{{ each emails }}}
57
61
  <li class="d-flex justify-content-between mb-1">
58
- <span class="text-sm">{./value}</span>
62
+ <span class="text-sm text-secondary">{./value}</span>
59
63
  <div>
60
64
  {{{ if ./byUid }}}
61
65
  <a class="lh-1" href="{{{ if ./byUser.userslug }}}{config.relative_path}/user/{./byUser.userslug}{{{ else }}}#{{{ end }}}">
62
66
  {buildAvatar(./byUser, "18px", true)}</a>
63
67
  {{{ end }}}
64
- <span class="timeago text-sm lh-1 align-middle" title="{./timestampISO}"></span>
68
+ <span class="timeago text-sm text-secondary lh-1 align-middle" title="{./timestampISO}"></span>
65
69
  </div>
66
70
  </li>
67
71
  {{{ end }}}
@@ -69,58 +73,9 @@
69
73
  </div>
70
74
  </div>
71
75
 
72
- {{{ if isAdminOrGlobalModerator }}}
73
- <div class="card">
74
- <h5 class="card-header">
75
- [[user:info.moderation-note]]
76
- </h5>
77
- <div class="card-body">
78
- <textarea component="account/moderation-note" class="form-control mb-3" aria-label="[[user:info.moderation-note]]"></textarea>
79
-
80
- <button class="btn btn-sm float-end btn-success" component="account/save-moderation-note">[[user:info.moderation-note.add]]</button>
81
- <br/>
82
- <div component="account/moderation-note/list">
83
- {{{ each moderationNotes }}}
84
- <hr/>
85
-
86
- <div data-id="{./id}">
87
- <div class="mb-1">
88
- <a href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}">{buildAvatar(./user, "24px", true)}</a>
89
-
90
- <a href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}" class="fw-bold" itemprop="author" data-username="{./user.username}" data-uid="{./user.uid}">{./user.username}</a>
91
-
92
- <span class="timeago" title="{./timestampISO}"></span>
93
- </div>
94
-
95
-
96
- <div component="account/moderation-note/content-area" class="d-flex flex-column">
97
- <div class="content">
98
- {./note}
99
- </div>
100
- <button component="account/moderation-note/edit" class="btn btn-sm btn-link align-self-end">[[topic:edit]]</button>
101
- </div>
102
-
103
- <div component="account/moderation-note/edit-area" class="d-flex flex-column gap-2">
104
- <textarea class="form-control w-100 overflow-hidden">{./rawNote}</textarea>
105
- <div class="align-self-end">
106
- <button component="account/moderation-note/cancel-edit" class="btn btn-sm btn-link text-danger align-self-end">[[global:cancel]]</button>
107
- <button component="account/moderation-note/save-edit" class="btn btn-sm btn-primary align-self-end">[[global:save]]</button>
108
- </div>
109
- </div>
110
- </div>
111
- {{{ end }}}
112
- </div>
113
- <!-- IMPORT partials/paginator.tpl -->
114
- </div>
115
- </div>
116
- {{{ end }}}
117
- </div>
118
- <div class="col-sm-6 mb-3">
119
- <div class="card mb-3">
120
- <h5 class="card-header">
121
- [[user:info.latest-flags]]
122
- </h5>
123
- <div class="card-body">
76
+ <div class="mb-3 border-bottom">
77
+ <h6>[[user:info.latest-flags]]</h6>
78
+ <div class="">
124
79
  {{{ if history.flags.length }}}
125
80
  <ul class="recent-flags list-unstyled">
126
81
  {{{ each history.flags }}}
@@ -160,23 +115,23 @@
160
115
  {{{ end }}}
161
116
  </ul>
162
117
  {{{ else }}}
163
- <div class="alert alert-success">[[user:info.no-flags]]</div>
118
+ <div class="alert alert-light">[[user:info.no-flags]]</div>
164
119
  {{{ end }}}
165
120
  </div>
166
121
  </div>
167
122
 
168
- <div class="card mb-3">
169
- <h5 class="card-header">
123
+ <div class="mb-3 border-bottom">
124
+ <h6 class="d-flex align-items-center justify-content-between">
170
125
  [[user:info.ban-history]]
171
126
 
172
127
  {{{ if (!banned && !isSelf) }}}
173
- <button class="btn btn-sm float-end btn-danger" component="account/ban">[[user:ban-account]]</button>
128
+ <button class="btn btn-sm btn-danger" component="account/ban">[[user:ban-account]]</button>
174
129
  {{{ end }}}
175
130
  {{{ if (banned && !isSelf) }}}
176
- <button class="btn btn-sm float-end btn-success" component="account/unban">[[user:unban-account]]</button>
131
+ <button class="btn btn-sm btn-success" component="account/unban">[[user:unban-account]]</button>
177
132
  {{{ end }}}
178
- </h5>
179
- <div class="card-body">
133
+ </h6>
134
+ <div class="">
180
135
  {{{ if history.bans.length }}}
181
136
  <ul class="ban-history list-unstyled">
182
137
  {{{ each history.bans }}}
@@ -211,26 +166,26 @@
211
166
  {{{ end }}}
212
167
  </ul>
213
168
  {{{ else }}}
214
- <div class="alert alert-success">[[user:info.no-ban-history]]</div>
169
+ <div class="alert alert-light">[[user:info.no-ban-history]]</div>
215
170
  {{{ end }}}
216
171
  </div>
217
172
  </div>
218
173
 
219
- <div class="card mb-3">
220
- <h5 class="card-header">
174
+ <div class="mb-3">
175
+ <h6 class="d-flex align-items-center justify-content-between">
221
176
  [[user:info.mute-history]]
222
177
 
223
178
  {{{ if !muted }}}
224
179
  {{{ if !isSelf }}}
225
- <button class="btn btn-sm float-end btn-danger" component="account/mute">[[user:mute-account]]</button>
180
+ <button class="btn btn-sm btn-danger" component="account/mute">[[user:mute-account]]</button>
226
181
  {{{ end }}}
227
182
  {{{ else }}}
228
183
  {{{ if !isSelf }}}
229
- <button class="btn btn-sm float-end btn-success" component="account/unmute">[[user:unmute-account]]</button>
184
+ <button class="btn btn-sm btn-success" component="account/unmute">[[user:unmute-account]]</button>
230
185
  {{{ end }}}
231
186
  {{{ end }}}
232
- </h5>
233
- <div class="card-body">
187
+ </h6>
188
+ <div class="">
234
189
  {{{ if history.mutes.length }}}
235
190
  <ul class="ban-history list-unstyled">
236
191
  {{{ each history.mutes }}}
@@ -261,10 +216,59 @@
261
216
  {{{ end }}}
262
217
  </ul>
263
218
  {{{ else }}}
264
- <div class="alert alert-success">[[user:info.no-mute-history]]</div>
219
+ <div class="alert alert-light">[[user:info.no-mute-history]]</div>
265
220
  {{{ end }}}
266
221
  </div>
267
222
  </div>
223
+
224
+ </div>
225
+
226
+ <div class="col-sm-6 mb-3">
227
+ {{{ if isAdminOrGlobalModerator }}}
228
+ <div class="card">
229
+ <h5 class="card-header">
230
+ [[user:info.moderation-note]]
231
+ </h5>
232
+ <div class="card-body">
233
+ <textarea component="account/moderation-note" class="form-control mb-3" aria-label="[[user:info.moderation-note]]"></textarea>
234
+
235
+ <button class="btn btn-sm float-end btn-success" component="account/save-moderation-note">[[user:info.moderation-note.add]]</button>
236
+ <br/>
237
+ <div component="account/moderation-note/list">
238
+ {{{ each moderationNotes }}}
239
+ <hr/>
240
+
241
+ <div data-id="{./id}">
242
+ <div class="d-flex align-items-baseline gap-1 mb-1">
243
+ <a href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}">{buildAvatar(./user, "24px", true)}</a>
244
+
245
+ <a href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}" class="fw-bold" itemprop="author" data-username="{./user.username}" data-uid="{./user.uid}">{./user.username}</a>
246
+
247
+ <span class="timeago text-sm text-secondary" title="{./timestampISO}"></span>
248
+ </div>
249
+
250
+
251
+ <div component="account/moderation-note/content-area" class="d-flex flex-column">
252
+ <div class="content text-secondary">
253
+ {./note}
254
+ </div>
255
+ <button component="account/moderation-note/edit" class="btn btn-sm btn-link align-self-end">[[topic:edit]]</button>
256
+ </div>
257
+
258
+ <div component="account/moderation-note/edit-area" class="d-flex flex-column gap-2 hidden">
259
+ <textarea class="form-control form-control-sm w-100 overflow-hidden">{./rawNote}</textarea>
260
+ <div class="align-self-end">
261
+ <button component="account/moderation-note/cancel-edit" class="btn btn-sm btn-link text-danger align-self-end">[[global:cancel]]</button>
262
+ <button component="account/moderation-note/save-edit" class="btn btn-sm btn-primary align-self-end">[[global:save]]</button>
263
+ </div>
264
+ </div>
265
+ </div>
266
+ {{{ end }}}
267
+ </div>
268
+ <!-- IMPORT partials/paginator.tpl -->
269
+ </div>
270
+ </div>
271
+ {{{ end }}}
268
272
  </div>
269
273
  </div>
270
274
 
@@ -1,4 +1,4 @@
1
- {{{ if privileges.topics:reply }}}
1
+ {{{ if (privileges.topics:create || privileges.topics:reply) }}}
2
2
  <div component="topic/quickreply/container" class="quick-reply d-flex gap-3 mb-4">
3
3
  <div class="icon hidden-xs">
4
4
  <a class="d-inline-block position-relative" href="{{{ if loggedInUser.userslug }}}{config.relative_path}/user/{loggedInUser.userslug}{{{ else }}}#{{{ end }}}">
@@ -17,13 +17,12 @@
17
17
  <div class="d-flex justify-content-end gap-2">
18
18
  <button type="button" component="topic/quickreply/upload/button" class="btn btn-ghost btn-sm border"><i class="fa fa-upload"></i></button>
19
19
  <button type="button" component="topic/quickreply/expand" class="btn btn-ghost btn-sm border" title="[[topic:open-composer]]"><i class="fa fa-expand"></i></button>
20
- <button type="submit" component="topic/quickreply/button" class="btn btn-sm btn-primary">[[topic:post-quick-reply]]</button>
20
+ <button type="submit" component="topic/quickreply/button" class="btn btn-sm btn-primary">[[topic:post-quick-{{{ if tid }}}reply{{{ else }}}create{{{ end }}}]]</button>
21
21
  </div>
22
22
  </div>
23
23
  </form>
24
24
  <form class="d-none" component="topic/quickreply/upload" method="post" enctype="multipart/form-data">
25
25
  <input type="file" name="files[]" multiple class="hidden"/>
26
26
  </form>
27
-
28
27
  </div>
29
28
  {{{ end }}}
@@ -70,6 +70,7 @@
70
70
  <div class="col-lg-8 col-sm-12">
71
71
  {{{ if posts.length }}}
72
72
  <!-- IMPORT partials/topic-list-bar.tpl -->
73
+ <!-- IMPORT partials/topic/quickreply.tpl -->
73
74
  {{{ end }}}
74
75
  <ul class="list-unstyled" id="world-feed">
75
76
  {{{ each posts }}}