nodebb-theme-harmony 0.0.9 → 0.0.11

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.
Files changed (72) hide show
  1. package/languages/en-GB/harmony.json +5 -1
  2. package/lib/controllers.js +15 -0
  3. package/library.js +63 -6
  4. package/package.json +1 -1
  5. package/plugin.json +5 -1
  6. package/public/settings.js +28 -0
  7. package/scss/account.scss +0 -3
  8. package/scss/common.scss +6 -0
  9. package/scss/modules/bottom-sheet.scss +1 -1
  10. package/scss/modules/topic-navigator.scss +0 -6
  11. package/scss/sidebar.scss +18 -16
  12. package/templates/account/blocks.tpl +2 -2
  13. package/templates/account/categories.tpl +27 -21
  14. package/templates/account/consent.tpl +10 -64
  15. package/templates/account/edit/password.tpl +29 -24
  16. package/templates/account/edit/username.tpl +25 -20
  17. package/templates/account/edit.tpl +110 -115
  18. package/templates/account/followers.tpl +2 -3
  19. package/templates/account/following.tpl +2 -3
  20. package/templates/account/groups.tpl +2 -3
  21. package/templates/account/info.tpl +206 -204
  22. package/templates/account/posts.tpl +4 -4
  23. package/templates/account/profile.tpl +9 -9
  24. package/templates/account/sessions.tpl +3 -6
  25. package/templates/account/settings.tpl +193 -206
  26. package/templates/account/theme.tpl +25 -21
  27. package/templates/account/topics.tpl +17 -16
  28. package/templates/account/uploads.tpl +4 -8
  29. package/templates/admin/plugins/harmony.tpl +4 -0
  30. package/templates/groups/details.tpl +3 -20
  31. package/templates/groups/list.tpl +10 -9
  32. package/templates/header.tpl +3 -21
  33. package/templates/login.tpl +1 -1
  34. package/templates/notifications.tpl +4 -4
  35. package/templates/partials/account/header.tpl +58 -47
  36. package/templates/partials/account/sidebar-left.tpl +19 -12
  37. package/templates/partials/buttons/newTopic.tpl +1 -3
  38. package/templates/partials/categories/item.tpl +1 -8
  39. package/templates/partials/category/sort.tpl +3 -3
  40. package/templates/partials/category/subcategory.tpl +1 -1
  41. package/templates/partials/category/tools.tpl +3 -3
  42. package/templates/partials/category/watch.tpl +7 -7
  43. package/templates/partials/category-filter-content.tpl +4 -4
  44. package/templates/partials/category-selector-content.tpl +10 -9
  45. package/templates/partials/chats/message-window.tpl +9 -7
  46. package/templates/partials/groups/admin.tpl +3 -5
  47. package/templates/partials/groups/sidebar-left.tpl +1 -1
  48. package/templates/partials/header/brand.tpl +19 -0
  49. package/templates/partials/notifications_list.tpl +5 -5
  50. package/templates/partials/post_bar.tpl +5 -5
  51. package/templates/partials/sidebar/logged-in-menu.tpl +23 -0
  52. package/templates/partials/sidebar/user-menu.tpl +1 -1
  53. package/templates/partials/sidebar-left.tpl +1 -1
  54. package/templates/partials/sidebar-right.tpl +1 -23
  55. package/templates/partials/tags_list.tpl +3 -2
  56. package/templates/partials/topic/navigator.tpl +2 -2
  57. package/templates/partials/topic/post-menu.tpl +2 -4
  58. package/templates/partials/topic/post.tpl +13 -13
  59. package/templates/partials/topic/reply-button.tpl +3 -3
  60. package/templates/partials/topic/sort.tpl +3 -3
  61. package/templates/partials/topic/tools.tpl +3 -3
  62. package/templates/partials/topic/watch.tpl +17 -16
  63. package/templates/partials/topic-filters.tpl +3 -3
  64. package/templates/partials/topic-list-bar.tpl +8 -12
  65. package/templates/partials/topic-terms.tpl +3 -3
  66. package/templates/partials/topics_list.tpl +4 -4
  67. package/templates/partials/users/item.tpl +27 -25
  68. package/templates/partials/users_list_menu.tpl +1 -1
  69. package/templates/search.tpl +0 -2
  70. package/templates/tags.tpl +12 -8
  71. package/templates/topic.tpl +1 -3
  72. package/templates/users.tpl +4 -5
@@ -1,228 +1,230 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
1
  <div class="account">
4
2
  <!-- IMPORT partials/account/header.tpl -->
5
3
 
6
- <!-- IF sessions.length -->
7
- <div class="row mb-3">
8
- <div class="col-12 col-md-12">
9
- <h4>[[global:sessions]]</h4>
10
- <ul class="list-group" component="user/sessions">
11
- {{{each sessions}}}
12
- <li class="list-group-item" data-uuid="{../uuid}">
13
- <div class="float-end">
14
- <!-- IF isSelfOrAdminOrGlobalModerator -->
15
- <!-- IF !../current -->
16
- <button class="btn btn-sm btn-outline-secondary" type="button" data-action="revokeSession">Revoke Session</button>
17
- <!-- ENDIF !../current -->
18
- <!-- ENDIF isSelfOrAdminOrGlobalModerator -->
19
- {function.userAgentIcons}
20
- <i class="fa fa-circle text-<!-- IF ../current -->success<!-- ELSE -->muted<!-- ENDIF ../current -->"></i>
21
- </div>
22
- {../browser} {../version} on {../platform}<br />
23
- <small class="timeago text-muted" title="{../datetimeISO}"></small>
24
- <ul>
25
- <li><strong>[[global:ip_address]]</strong>: {../ip}</li>
26
- </ul>
27
- </li>
28
- {{{end}}}
29
- </ul>
30
- </div>
31
- </div>
32
- <!-- ENDIF sessions.length -->
33
-
34
- <div class="row">
35
- <div class="col-sm-6">
36
- <div class="card mb-3">
37
- <h5 class="card-header">
38
- [[global:recentips]]
39
- </h5>
40
- <div class="card-body">
41
- <ul>
42
- {{{each ips}}}
43
- <li>{@value}</li>
44
- {{{end}}}
45
- </ul>
46
- </div>
4
+ <div class="d-flex flex-column flex-md-row">
5
+ <!-- IMPORT partials/account/sidebar-left.tpl -->
6
+ <div class="flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
7
+ {{{ if sessions.length }}}
8
+ <div class="mb-3">
9
+ <h4>[[global:sessions]]</h4>
10
+ <ul class="list-group" component="user/sessions">
11
+ {{{each sessions}}}
12
+ <li class="list-group-item" data-uuid="{../uuid}">
13
+ <div class="float-end">
14
+ <!-- IF isSelfOrAdminOrGlobalModerator -->
15
+ <!-- IF !../current -->
16
+ <button class="btn btn-sm btn-outline-secondary" type="button" data-action="revokeSession">Revoke Session</button>
17
+ <!-- ENDIF !../current -->
18
+ <!-- ENDIF isSelfOrAdminOrGlobalModerator -->
19
+ {function.userAgentIcons}
20
+ <i class="fa fa-circle text-<!-- IF ../current -->success<!-- ELSE -->muted<!-- ENDIF ../current -->"></i>
21
+ </div>
22
+ {../browser} {../version} on {../platform}<br />
23
+ <small class="timeago text-muted" title="{../datetimeISO}"></small>
24
+ <ul>
25
+ <li><strong>[[global:ip_address]]</strong>: {../ip}</li>
26
+ </ul>
27
+ </li>
28
+ {{{end}}}
29
+ </ul>
47
30
  </div>
31
+ {{{ end }}}
48
32
 
49
- <div class="card mb-3">
50
- <h5 class="card-header">
51
- [[user:info.username-history]]
52
- </h5>
53
- <div class="card-body">
54
- <ul class="list-group">
55
- {{{each usernames}}}
56
- <li class="list-group-item">
57
- {../value}
58
- <small class="float-end"><span class="timeago" title="{../timestampISO}"></span></small>
59
- </li>
60
- {{{end}}}
61
- </ul>
62
- </div>
63
- </div>
33
+ <div class="row">
34
+ <div class="col-sm-6 mb-3">
35
+ <div class="card mb-3">
36
+ <h5 class="card-header">
37
+ [[global:recentips]]
38
+ </h5>
39
+ <div class="card-body">
40
+ <ul>
41
+ {{{each ips}}}
42
+ <li>{@value}</li>
43
+ {{{end}}}
44
+ </ul>
45
+ </div>
46
+ </div>
64
47
 
65
- <div class="card">
66
- <h5 class="card-header">
67
- [[user:info.email-history]]
68
- </h5>
69
- <div class="card-body">
70
- <ul class="list-group">
71
- {{{each emails}}}
72
- <li class="list-group-item">
73
- {../value}
74
- <small class="float-end"><span class="timeago" title="{../timestampISO}"></span></small>
75
- </li>
76
- {{{end}}}
77
- </ul>
78
- </div>
79
- </div>
80
- </div>
81
- <div class="col-sm-6">
82
- <div class="card mb-3">
83
- <h5 class="card-header">
84
- [[user:info.latest-flags]]
85
- </h5>
86
- <div class="card-body">
87
- <!-- IF history.flags.length -->
88
- <ul class="recent-flags list-unstyled">
89
- {{{each history.flags}}}
90
- <li>
91
- <p>
92
- {{{ if history.flags.targetPurged }}}
93
- <div>[[flags:target-purged]]</div>
94
- {{{ else }}}
95
- <a class="title" href="{config.relative_path}/post/{../pid}">{../title}</a><br />
96
- {{{ end }}}
97
- <span class="timestamp">[[flags:flagged-timeago-readable, {../timestampISO}, {../timestampReadable}]]</span>
98
- </p>
99
- </li>
100
- {{{end}}}
101
- </ul>
102
- <!-- ELSE -->
103
- <div class="alert alert-success">[[user:info.no-flags]]</div>
104
- <!-- ENDIF history.flags.length -->
48
+ <div class="card mb-3">
49
+ <h5 class="card-header">
50
+ [[user:info.username-history]]
51
+ </h5>
52
+ <div class="card-body">
53
+ <ul class="list-group">
54
+ {{{each usernames}}}
55
+ <li class="list-group-item">
56
+ {../value}
57
+ <small class="float-end"><span class="timeago" title="{../timestampISO}"></span></small>
58
+ </li>
59
+ {{{end}}}
60
+ </ul>
61
+ </div>
62
+ </div>
63
+
64
+ <div class="card">
65
+ <h5 class="card-header">
66
+ [[user:info.email-history]]
67
+ </h5>
68
+ <div class="card-body">
69
+ <ul class="list-group">
70
+ {{{each emails}}}
71
+ <li class="list-group-item">
72
+ {../value}
73
+ <small class="float-end"><span class="timeago" title="{../timestampISO}"></span></small>
74
+ </li>
75
+ {{{end}}}
76
+ </ul>
77
+ </div>
78
+ </div>
105
79
  </div>
106
- </div>
80
+ <div class="col-sm-6 mb-3">
81
+ <div class="card mb-3">
82
+ <h5 class="card-header">
83
+ [[user:info.latest-flags]]
84
+ </h5>
85
+ <div class="card-body">
86
+ <!-- IF history.flags.length -->
87
+ <ul class="recent-flags list-unstyled">
88
+ {{{each history.flags}}}
89
+ <li>
90
+ <p>
91
+ {{{ if history.flags.targetPurged }}}
92
+ <div>[[flags:target-purged]]</div>
93
+ {{{ else }}}
94
+ <a class="title" href="{config.relative_path}/post/{../pid}">{../title}</a><br />
95
+ {{{ end }}}
96
+ <span class="timestamp">[[flags:flagged-timeago-readable, {../timestampISO}, {../timestampReadable}]]</span>
97
+ </p>
98
+ </li>
99
+ {{{end}}}
100
+ </ul>
101
+ <!-- ELSE -->
102
+ <div class="alert alert-success">[[user:info.no-flags]]</div>
103
+ <!-- ENDIF history.flags.length -->
104
+ </div>
105
+ </div>
107
106
 
108
- <div class="card mb-3">
109
- <h5 class="card-header">
110
- [[user:info.ban-history]]
107
+ <div class="card mb-3">
108
+ <h5 class="card-header">
109
+ [[user:info.ban-history]]
111
110
 
112
- <!-- IF !banned -->
113
- <!-- IF !isSelf -->
114
- <button class="btn btn-sm float-end btn-danger" component="account/ban">[[user:ban_account]]</button>
115
- <!-- ENDIF !isSelf -->
116
- <!-- ELSE -->
117
- <!-- IF !isSelf -->
118
- <button class="btn btn-sm float-end btn-success" component="account/unban">[[user:unban_account]]</button>
119
- <!-- ENDIF !isSelf -->
120
- <!-- ENDIF !banned -->
121
- </h5>
122
- <div class="card-body">
123
- <!-- IF history.bans.length -->
124
- <ul class="ban-history list-unstyled">
125
- {{{each history.bans}}}
126
- <li>
127
- <p>
128
- <a href="{config.relative_path}/user/{history.bans.user.userslug}">{buildAvatar(history.bans.user, "24px", true)}</a>
129
- <strong>
130
- <a href="<!-- IF history.bans.user.userslug -->{config.relative_path}/user/{history.bans.user.userslug}<!-- ELSE -->#<!-- ENDIF history.bans.user.userslug -->" itemprop="author" data-username="{history.bans.user.username}" data-uid="{history.bans.user.uid}">{history.bans.user.username}</a>
131
- </strong>
132
- <span class="timestamp timeago" title="{../timestampISO}"></span> &mdash; {../timestampReadable}<br />
133
- <!-- IF ../until -->
134
- <span class="expiry">[[user:info.banned-until, {../untilReadable}]]</span><br />
135
- <!-- ELSE -->
136
- <span class="expiry">[[user:info.banned-permanently]]</span><br />
137
- <!-- ENDIF ../until -->
138
- <span class="reason"><strong>[[user:info.banned-reason-label]]</strong>: {../reason}</span>
139
- </p>
140
- </li>
141
- {{{end}}}
142
- </ul>
143
- <!-- ELSE -->
144
- <div class="alert alert-success">[[user:info.no-ban-history]]</div>
145
- <!-- ENDIF history.bans.length -->
146
- </div>
147
- </div>
111
+ <!-- IF !banned -->
112
+ <!-- IF !isSelf -->
113
+ <button class="btn btn-sm float-end btn-danger" component="account/ban">[[user:ban_account]]</button>
114
+ <!-- ENDIF !isSelf -->
115
+ <!-- ELSE -->
116
+ <!-- IF !isSelf -->
117
+ <button class="btn btn-sm float-end btn-success" component="account/unban">[[user:unban_account]]</button>
118
+ <!-- ENDIF !isSelf -->
119
+ <!-- ENDIF !banned -->
120
+ </h5>
121
+ <div class="card-body">
122
+ <!-- IF history.bans.length -->
123
+ <ul class="ban-history list-unstyled">
124
+ {{{each history.bans}}}
125
+ <li>
126
+ <p>
127
+ <a href="{config.relative_path}/user/{history.bans.user.userslug}">{buildAvatar(history.bans.user, "24px", true)}</a>
128
+ <strong>
129
+ <a href="<!-- IF history.bans.user.userslug -->{config.relative_path}/user/{history.bans.user.userslug}<!-- ELSE -->#<!-- ENDIF history.bans.user.userslug -->" itemprop="author" data-username="{history.bans.user.username}" data-uid="{history.bans.user.uid}">{history.bans.user.username}</a>
130
+ </strong>
131
+ <span class="timestamp timeago" title="{../timestampISO}"></span> &mdash; {../timestampReadable}<br />
132
+ <!-- IF ../until -->
133
+ <span class="expiry">[[user:info.banned-until, {../untilReadable}]]</span><br />
134
+ <!-- ELSE -->
135
+ <span class="expiry">[[user:info.banned-permanently]]</span><br />
136
+ <!-- ENDIF ../until -->
137
+ <span class="reason"><strong>[[user:info.banned-reason-label]]</strong>: {../reason}</span>
138
+ </p>
139
+ </li>
140
+ {{{end}}}
141
+ </ul>
142
+ <!-- ELSE -->
143
+ <div class="alert alert-success">[[user:info.no-ban-history]]</div>
144
+ <!-- ENDIF history.bans.length -->
145
+ </div>
146
+ </div>
148
147
 
149
- <div class="card mb-3">
150
- <h5 class="card-header">
151
- [[user:info.mute-history]]
148
+ <div class="card mb-3">
149
+ <h5 class="card-header">
150
+ [[user:info.mute-history]]
152
151
 
153
- {{{ if !muted }}}
154
- {{{ if !isSelf }}}
155
- <button class="btn btn-sm float-end btn-danger" component="account/mute">[[user:mute_account]]</button>
156
- {{{ end }}}
157
- {{{ else }}}
158
- {{{ if !isSelf }}}
159
- <button class="btn btn-sm float-end btn-success" component="account/unmute">[[user:unmute_account]]</button>
160
- {{{ end }}}
161
- {{{ end }}}
162
- </h5>
163
- <div class="card-body">
164
- {{{ if history.mutes.length }}}
165
- <ul class="ban-history list-unstyled">
166
- {{{ each history.mutes }}}
167
- <li>
168
- <p>
169
- <a href="{config.relative_path}/user/{history.mutes.user.userslug}">{buildAvatar(history.mutes.user, "24px", true)}</a>
170
- <strong>
171
- <a href="<!-- IF history.mutes.user.userslug -->{config.relative_path}/user/{history.mutes.user.userslug}<!-- ELSE -->#<!-- ENDIF history.mutes.user.userslug -->" itemprop="author" data-username="{history.mutes.user.username}" data-uid="{history.mutes.user.uid}">{history.mutes.user.username}</a>
172
- </strong>
173
- <span class="timestamp timeago" title="{../timestampISO}"></span> &mdash; {../timestampReadable}<br />
174
- {{{ if ../until }}}
175
- <span class="expiry">[[user:info.muted-until, {../untilReadable}]]</span><br />
176
- {{{ end }}}
152
+ {{{ if !muted }}}
153
+ {{{ if !isSelf }}}
154
+ <button class="btn btn-sm float-end btn-danger" component="account/mute">[[user:mute_account]]</button>
155
+ {{{ end }}}
156
+ {{{ else }}}
157
+ {{{ if !isSelf }}}
158
+ <button class="btn btn-sm float-end btn-success" component="account/unmute">[[user:unmute_account]]</button>
159
+ {{{ end }}}
160
+ {{{ end }}}
161
+ </h5>
162
+ <div class="card-body">
163
+ {{{ if history.mutes.length }}}
164
+ <ul class="ban-history list-unstyled">
165
+ {{{ each history.mutes }}}
166
+ <li>
167
+ <p>
168
+ <a href="{config.relative_path}/user/{history.mutes.user.userslug}">{buildAvatar(history.mutes.user, "24px", true)}</a>
169
+ <strong>
170
+ <a href="<!-- IF history.mutes.user.userslug -->{config.relative_path}/user/{history.mutes.user.userslug}<!-- ELSE -->#<!-- ENDIF history.mutes.user.userslug -->" itemprop="author" data-username="{history.mutes.user.username}" data-uid="{history.mutes.user.uid}">{history.mutes.user.username}</a>
171
+ </strong>
172
+ <span class="timestamp timeago" title="{../timestampISO}"></span> &mdash; {../timestampReadable}<br />
173
+ {{{ if ../until }}}
174
+ <span class="expiry">[[user:info.muted-until, {../untilReadable}]]</span><br />
175
+ {{{ end }}}
177
176
 
178
- <span class="reason"><strong>[[user:info.banned-reason-label]]</strong>: {../reason}</span>
179
- </p>
180
- </li>
181
- {{{end}}}
182
- </ul>
183
- {{{ else }}}
184
- <div class="alert alert-success">[[user:info.no-mute-history]]</div>
185
- {{{ end }}}
186
- </div>
187
- </div>
177
+ <span class="reason"><strong>[[user:info.banned-reason-label]]</strong>: {../reason}</span>
178
+ </p>
179
+ </li>
180
+ {{{end}}}
181
+ </ul>
182
+ {{{ else }}}
183
+ <div class="alert alert-success">[[user:info.no-mute-history]]</div>
184
+ {{{ end }}}
185
+ </div>
186
+ </div>
188
187
 
189
- <!-- IF isAdminOrGlobalModerator -->
190
- <div class="card">
191
- <h5 class="card-header">
192
- [[user:info.moderation-note]]
193
- </h5>
194
- <div class="card-body">
195
- <textarea component="account/moderation-note" class="form-control"></textarea>
196
- <br/>
197
- <button class="btn btn-sm float-end btn-success" component="account/save-moderation-note">[[user:info.moderation-note.add]]</button>
198
- <br/>
199
- <div component="account/moderation-note/list">
200
- {{{each moderationNotes}}}
201
- <hr/>
188
+ <!-- IF isAdminOrGlobalModerator -->
189
+ <div class="card">
190
+ <h5 class="card-header">
191
+ [[user:info.moderation-note]]
192
+ </h5>
193
+ <div class="card-body">
194
+ <textarea component="account/moderation-note" class="form-control"></textarea>
195
+ <br/>
196
+ <button class="btn btn-sm float-end btn-success" component="account/save-moderation-note">[[user:info.moderation-note.add]]</button>
197
+ <br/>
198
+ <div component="account/moderation-note/list">
199
+ {{{each moderationNotes}}}
200
+ <hr/>
202
201
 
203
- <div class="clearfix">
204
- <div class="float-start">
205
- <a href="<!-- IF moderationNotes.user.userslug -->{config.relative_path}/user/{moderationNotes.user.userslug}<!-- ELSE -->#<!-- ENDIF moderationNotes.user.userslug -->">{buildAvatar(moderationNotes.user, "24px", true)}</a>
206
- <strong>
207
- <a href="<!-- IF moderationNotes.user.userslug -->{config.relative_path}/user/{moderationNotes.user.userslug}<!-- ELSE -->#<!-- ENDIF moderationNotes.user.userslug -->" itemprop="author" data-username="{moderationNotes.user.username}" data-uid="{moderationNotes.user.uid}">{moderationNotes.user.username}</a>
208
- </strong>
202
+ <div class="clearfix">
203
+ <div class="float-start">
204
+ <a href="<!-- IF moderationNotes.user.userslug -->{config.relative_path}/user/{moderationNotes.user.userslug}<!-- ELSE -->#<!-- ENDIF moderationNotes.user.userslug -->">{buildAvatar(moderationNotes.user, "24px", true)}</a>
205
+ <strong>
206
+ <a href="<!-- IF moderationNotes.user.userslug -->{config.relative_path}/user/{moderationNotes.user.userslug}<!-- ELSE -->#<!-- ENDIF moderationNotes.user.userslug -->" itemprop="author" data-username="{moderationNotes.user.username}" data-uid="{moderationNotes.user.uid}">{moderationNotes.user.username}</a>
207
+ </strong>
209
208
 
210
- <div class="visible-xs-inline-block visible-sm-inline-block visible-md-inline-block visible-lg-inline-block">
211
- <span class="timeago" title="{moderationNotes.timestampISO}"></span>
212
- </div>
213
- <br />
209
+ <div class="visible-xs-inline-block visible-sm-inline-block visible-md-inline-block visible-lg-inline-block">
210
+ <span class="timeago" title="{moderationNotes.timestampISO}"></span>
211
+ </div>
212
+ <br />
214
213
 
215
- <div class="content">
216
- {moderationNotes.note}
214
+ <div class="content">
215
+ {moderationNotes.note}
216
+ </div>
217
+ </div>
217
218
  </div>
219
+ {{{end}}}
218
220
  </div>
221
+ <!-- IMPORT partials/paginator.tpl -->
219
222
  </div>
220
- {{{end}}}
221
223
  </div>
222
- <!-- IMPORT partials/paginator.tpl -->
224
+ <!-- ENDIF isAdminOrGlobalModerator -->
223
225
  </div>
224
226
  </div>
225
- <!-- ENDIF isAdminOrGlobalModerator -->
226
227
  </div>
227
228
  </div>
228
- </div>
229
+ </div>
230
+
@@ -1,12 +1,12 @@
1
1
  <div class="account">
2
2
  <!-- IMPORT partials/account/header.tpl -->
3
3
 
4
- <div class="row gx-5">
4
+ <div class="d-flex flex-column flex-md-row">
5
5
  <!-- IMPORT partials/account/sidebar-left.tpl -->
6
- <div class="col-12 col-md-9 col-lg-10 ps-md-5">
7
- <div class="d-flex justify-content-between align-items-center mb-3">
6
+ <div class="flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
7
+ <div class="d-flex flex-wrap justify-content-between align-items-center gap-2 mb-3">
8
8
  <h3 class="fw-semibold fs-5 mb-0">[[global:posts]]</h3>
9
- <div class="d-flex gap-1">
9
+ <div class="d-flex flex-wrap gap-1">
10
10
  <a href="{config.relative_path}/user/{userslug}/posts" class="btn-ghost-sm fw-semibold {{{ if template.account/posts }}}active{{{ end }}}">[[global:header.recent]]</a>
11
11
  {{{ if !reputation:disabled }}}
12
12
  <a href="{config.relative_path}/user/{userslug}/best"class="btn-ghost-sm fw-semibold {{{ if template.account/best }}}active{{{ end }}}">[[global:best]]</a>
@@ -1,10 +1,10 @@
1
1
  <div class="account mx-auto">
2
2
  <!-- IMPORT partials/account/header.tpl -->
3
3
 
4
- <div class="row gx-5">
4
+ <div class="d-flex flex-column flex-md-row">
5
5
  <!-- IMPORT partials/account/sidebar-left.tpl -->
6
6
 
7
- <div class="col-12 col-md-9 col-lg-10 ps-md-5">
7
+ <div class="flex-1 ps-md-2 ps-lg-5">
8
8
  {{{ if aboutme }}}
9
9
  <div component="aboutme" class="text-sm">
10
10
  {aboutmeParsed}
@@ -12,7 +12,7 @@
12
12
  {{{ end }}}
13
13
 
14
14
  <div class="account-stats container">
15
- <div class="row row-cols-2 row-cols-lg-3 row-cols-xl-4 g-2">
15
+ <div class="row row-cols-2 row-cols-xl-3 row-cols-xxl-4 g-2">
16
16
  {{{ if !reputation:disabled }}}
17
17
  <div class="stat">
18
18
  <div class="align-items-center justify-content-center card card-header px-0 py-3 border-0 rounded-1 h-100">
@@ -31,7 +31,7 @@
31
31
 
32
32
  <div class="stat">
33
33
  <div class="align-items-center justify-content-center card card-header px-0 py-3 border-0 rounded-1 h-100 gap-2">
34
- <span class="stat-label text-xs fw-semibold"><i class="text-muted fa-solid fa-cake-candles"></i> <span>[[user:joined]]</span></span>
34
+ <span class="stat-label text-xs fw-semibold"><i class="text-muted fa-solid fa-user-plus"></i> <span>[[user:joined]]</span></span>
35
35
  <span class="timeago fs-6 ff-secondary" title="{joindateISO}"></span>
36
36
  </div>
37
37
  </div>
@@ -39,7 +39,7 @@
39
39
  <div class="stat">
40
40
  <div class="align-items-center justify-content-center card card-header px-0 py-3 border-0 rounded-1 h-100 gap-2">
41
41
  <span class="stat-label text-xs fw-semibold"><i class="text-muted fa-solid fa-clock"></i> <span>[[user:lastonline]]</span></span>
42
- <span class="timeago fs-6 ff-secondary" title="{lastonlineISO}"></span>
42
+ <span class="timeago text-center text-break w-100 px-2 fs-6 ff-secondary" title="{lastonlineISO}"></span>
43
43
  </div>
44
44
  </div>
45
45
 
@@ -47,7 +47,7 @@
47
47
  <div class="stat">
48
48
  <div class="align-items-center justify-content-center card card-header px-0 py-3 border-0 rounded-1 h-100 gap-2">
49
49
  <span class="stat-label text-xs fw-semibold"><i class="text-muted fa-solid fa-envelope"></i> <span>[[user:email]]</span> {{{ if emailHidden}}}<span class="text-lowercase">([[global:hidden]])</span>{{{ end }}}</span>
50
- <span class="text-sm text-break ff-secondary">{email}</span>
50
+ <span class="text-sm text-center text-break w-100 px-2 ff-secondary">{email}</span>
51
51
  </div>
52
52
  </div>
53
53
  {{{ end }}}
@@ -56,7 +56,7 @@
56
56
  <div class="stat">
57
57
  <div class="align-items-center justify-content-center card card-header px-0 py-3 border-0 rounded-1 h-100 gap-2">
58
58
  <span class="stat-label text-xs fw-semibold"><i class="text-muted fa-solid fa-globe"></i> <span>[[user:website]]</span></span>
59
- <a class="text-sm text-break ff-secondary text-underline text-reset" href="{websiteLink}" rel="nofollow noopener noreferrer">{websiteName}</a>
59
+ <a class="text-sm text-center text-break w-100 px-2 ff-secondary text-underline text-reset" href="{websiteLink}" rel="nofollow noopener noreferrer">{websiteName}</a>
60
60
  </div>
61
61
  </div>
62
62
  {{{ end }}}
@@ -65,7 +65,7 @@
65
65
  <div class="stat">
66
66
  <div class="align-items-center justify-content-center card card-header px-0 py-3 border-0 rounded-1 h-100 gap-2">
67
67
  <span class="stat-label text-xs fw-semibold"><i class="text-muted fa-solid fa-map-pin"></i> <span>[[user:location]]</span></span>
68
- <span class="fs-6 ff-secondary">{location}</span>
68
+ <span class="text-center text-break w-100 px-2 fs-6 ff-secondary">{location}</span>
69
69
  </div>
70
70
  </div>
71
71
  {{{ end }}}
@@ -73,7 +73,7 @@
73
73
  {{{ if age }}}
74
74
  <div class="stat">
75
75
  <div class="align-items-center justify-content-center card card-header px-0 py-3 border-0 rounded-1 h-100 gap-2">
76
- <span class="stat-label text-xs fw-semibold"><span>[[user:age]]</span></span>
76
+ <span class="stat-label text-xs fw-semibold"><span><i class="text-muted fa-solid fa-cake-candles"></i> [[user:age]]</span></span>
77
77
  <span class="fs-6 ff-secondary">{age}</span>
78
78
  </div>
79
79
  </div>
@@ -1,11 +1,9 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
1
  <div class="account">
4
2
  <!-- IMPORT partials/account/header.tpl -->
5
3
 
6
- <!-- IF sessions.length -->
7
- <div class="row">
8
- <div class="col-12 col-md-12">
4
+ <div class="d-flex flex-column flex-md-row">
5
+ <!-- IMPORT partials/account/sidebar-left.tpl -->
6
+ <div class="flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
9
7
  <p class="lead">[[user:sessions.description]]</p>
10
8
  <hr />
11
9
  <ul class="list-group" component="user/sessions">
@@ -30,5 +28,4 @@
30
28
  </ul>
31
29
  </div>
32
30
  </div>
33
- <!-- ENDIF sessions.length -->
34
31
  </div>