nodebb-theme-harmony 0.0.9 → 0.0.10
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/languages/en-GB/harmony.json +5 -1
- package/lib/controllers.js +15 -0
- package/library.js +63 -6
- package/package.json +1 -1
- package/plugin.json +5 -1
- package/public/settings.js +28 -0
- package/templates/account/edit.tpl +121 -116
- package/templates/account/info.tpl +206 -203
- package/templates/account/sessions.tpl +4 -6
- package/templates/account/settings.tpl +212 -208
- package/templates/account/theme.tpl +22 -21
- package/templates/admin/plugins/harmony.tpl +4 -0
- package/templates/partials/account/sidebar-left.tpl +16 -9
- package/templates/partials/chats/message-window.tpl +2 -2
- package/templates/partials/groups/admin.tpl +3 -5
- package/templates/partials/post_bar.tpl +1 -1
- package/templates/partials/topic-list-bar.tpl +1 -1
- package/templates/search.tpl +0 -2
|
@@ -1,228 +1,231 @@
|
|
|
1
|
-
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
|
-
|
|
3
1
|
<div class="account">
|
|
4
2
|
<!-- IMPORT partials/account/header.tpl -->
|
|
5
3
|
|
|
6
|
-
|
|
7
|
-
|
|
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 -->
|
|
4
|
+
<div class="row gx-5">
|
|
5
|
+
<!-- IMPORT partials/account/sidebar-left.tpl -->
|
|
33
6
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
<div class="
|
|
37
|
-
<
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
7
|
+
<div class="col-12 col-md-9 col-lg-10 ps-md-5">
|
|
8
|
+
{{{ if sessions.length }}}
|
|
9
|
+
<div class="mb-3">
|
|
10
|
+
<h4>[[global:sessions]]</h4>
|
|
11
|
+
<ul class="list-group" component="user/sessions">
|
|
12
|
+
{{{each sessions}}}
|
|
13
|
+
<li class="list-group-item" data-uuid="{../uuid}">
|
|
14
|
+
<div class="float-end">
|
|
15
|
+
<!-- IF isSelfOrAdminOrGlobalModerator -->
|
|
16
|
+
<!-- IF !../current -->
|
|
17
|
+
<button class="btn btn-sm btn-outline-secondary" type="button" data-action="revokeSession">Revoke Session</button>
|
|
18
|
+
<!-- ENDIF !../current -->
|
|
19
|
+
<!-- ENDIF isSelfOrAdminOrGlobalModerator -->
|
|
20
|
+
{function.userAgentIcons}
|
|
21
|
+
<i class="fa fa-circle text-<!-- IF ../current -->success<!-- ELSE -->muted<!-- ENDIF ../current -->"></i>
|
|
22
|
+
</div>
|
|
23
|
+
{../browser} {../version} on {../platform}<br />
|
|
24
|
+
<small class="timeago text-muted" title="{../datetimeISO}"></small>
|
|
25
|
+
<ul>
|
|
26
|
+
<li><strong>[[global:ip_address]]</strong>: {../ip}</li>
|
|
27
|
+
</ul>
|
|
28
|
+
</li>
|
|
29
|
+
{{{end}}}
|
|
30
|
+
</ul>
|
|
47
31
|
</div>
|
|
32
|
+
{{{ end }}}
|
|
48
33
|
|
|
49
|
-
<div class="
|
|
50
|
-
<
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
</div>
|
|
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>
|
|
47
|
+
</div>
|
|
64
48
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
{{{
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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 -->
|
|
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>
|
|
64
|
+
|
|
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>
|
|
105
80
|
</div>
|
|
106
|
-
|
|
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 -->
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
107
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
108
|
+
<div class="card mb-3">
|
|
109
|
+
<h5 class="card-header">
|
|
110
|
+
[[user:info.ban-history]]
|
|
111
111
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
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> — {../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>
|
|
148
148
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
149
|
+
<div class="card mb-3">
|
|
150
|
+
<h5 class="card-header">
|
|
151
|
+
[[user:info.mute-history]]
|
|
152
152
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
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> — {../timestampReadable}<br />
|
|
174
|
+
{{{ if ../until }}}
|
|
175
|
+
<span class="expiry">[[user:info.muted-until, {../untilReadable}]]</span><br />
|
|
176
|
+
{{{ end }}}
|
|
177
177
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
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>
|
|
188
188
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
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/>
|
|
202
202
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
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>
|
|
209
209
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
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 />
|
|
214
214
|
|
|
215
|
-
|
|
216
|
-
|
|
215
|
+
<div class="content">
|
|
216
|
+
{moderationNotes.note}
|
|
217
|
+
</div>
|
|
218
|
+
</div>
|
|
217
219
|
</div>
|
|
220
|
+
{{{end}}}
|
|
218
221
|
</div>
|
|
222
|
+
<!-- IMPORT partials/paginator.tpl -->
|
|
219
223
|
</div>
|
|
220
|
-
{{{end}}}
|
|
221
224
|
</div>
|
|
222
|
-
<!--
|
|
225
|
+
<!-- ENDIF isAdminOrGlobalModerator -->
|
|
223
226
|
</div>
|
|
224
227
|
</div>
|
|
225
|
-
<!-- ENDIF isAdminOrGlobalModerator -->
|
|
226
228
|
</div>
|
|
227
229
|
</div>
|
|
228
|
-
</div>
|
|
230
|
+
</div>
|
|
231
|
+
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
|
-
|
|
3
1
|
<div class="account">
|
|
4
2
|
<!-- IMPORT partials/account/header.tpl -->
|
|
5
3
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
<div class="row gx-5">
|
|
5
|
+
<!-- IMPORT partials/account/sidebar-left.tpl -->
|
|
6
|
+
|
|
7
|
+
<div class="col-12 col-md-9 col-lg-10 ps-md-5">
|
|
9
8
|
<p class="lead">[[user:sessions.description]]</p>
|
|
10
9
|
<hr />
|
|
11
10
|
<ul class="list-group" component="user/sessions">
|
|
@@ -30,5 +29,4 @@
|
|
|
30
29
|
</ul>
|
|
31
30
|
</div>
|
|
32
31
|
</div>
|
|
33
|
-
<!-- ENDIF sessions.length -->
|
|
34
32
|
</div>
|