nodebb-theme-harmony 1.0.0-beta.32 → 1.0.0-beta.34
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 +1 -1
- package/public/harmony.js +8 -3
- package/templates/account/consent.tpl +3 -3
- package/templates/account/edit/password.tpl +1 -1
- package/templates/account/edit.tpl +39 -43
- package/templates/account/info.tpl +44 -49
- package/templates/account/settings.tpl +3 -3
- package/templates/account/uploads.tpl +9 -11
- package/templates/flags/detail.tpl +24 -24
- package/templates/flags/list.tpl +10 -10
- package/templates/partials/breadcrumbs.tpl +5 -5
- package/templates/partials/category/filter-dropdown-content.tpl +2 -2
- package/templates/partials/category/selector-dropdown-content.tpl +2 -2
- package/templates/partials/chats/message-window.tpl +1 -0
- package/templates/partials/chats/message.tpl +4 -6
- package/templates/partials/groups/admin.tpl +3 -3
- package/templates/partials/groups/memberlist.tpl +1 -1
- package/templates/partials/mobile-footer.tpl +9 -9
- package/templates/partials/sidebar-left.tpl +8 -8
- package/templates/partials/topic/post-menu-list.tpl +35 -35
- package/templates/partials/topic/post.tpl +7 -7
- package/templates/partials/topic/quickreply.tpl +3 -3
- package/templates/partials/topic/topic-menu-list.tpl +16 -16
- package/templates/partials/topic-list-bar.tpl +1 -1
- package/templates/partials/topics_list.tpl +1 -1
- package/templates/tags.tpl +1 -1
package/package.json
CHANGED
package/public/harmony.js
CHANGED
|
@@ -64,7 +64,7 @@ $(document).ready(function () {
|
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
function setupDrafts() {
|
|
67
|
-
require(['composer/drafts'], function (drafts) {
|
|
67
|
+
require(['composer/drafts', 'bootbox'], function (drafts, bootbox) {
|
|
68
68
|
const draftsEl = $('[component="sidebar/drafts"]');
|
|
69
69
|
|
|
70
70
|
function updateBadgeCount() {
|
|
@@ -105,8 +105,13 @@ $(document).ready(function () {
|
|
|
105
105
|
});
|
|
106
106
|
|
|
107
107
|
draftsEl.on('click', '[component="drafts/delete"]', function () {
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
const save_id = $(this).attr('data-save-id');
|
|
109
|
+
bootbox.confirm('[[modules:composer.discard-draft-confirm]]', function (ok) {
|
|
110
|
+
if (ok) {
|
|
111
|
+
drafts.removeDraft(save_id);
|
|
112
|
+
renderDraftList();
|
|
113
|
+
}
|
|
114
|
+
});
|
|
110
115
|
return false;
|
|
111
116
|
});
|
|
112
117
|
|
|
@@ -8,12 +8,12 @@
|
|
|
8
8
|
|
|
9
9
|
<div class="row">
|
|
10
10
|
<div class="col-sm-6">
|
|
11
|
-
|
|
11
|
+
{{{ if gdpr_consent }}}
|
|
12
12
|
<div class="alert alert-success">
|
|
13
13
|
<i class="fa fa-check float-end fa-3x"></i>
|
|
14
14
|
[[user:consent.received]]
|
|
15
15
|
</div>
|
|
16
|
-
|
|
16
|
+
{{{ else }}}
|
|
17
17
|
<div class="alert alert-warning">
|
|
18
18
|
[[user:consent.not_received]]
|
|
19
19
|
<br /><br />
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
<button class="btn btn-warning" data-action="consent">[[user:consent.give]]</button>
|
|
22
22
|
</div>
|
|
23
23
|
</div>
|
|
24
|
-
|
|
24
|
+
{{{ end }}}
|
|
25
25
|
<div class="card">
|
|
26
26
|
<div class="card-body">
|
|
27
27
|
<p>[[user:consent.email_intro]]</p>
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
{{{ if isSelf }}}
|
|
9
9
|
<div class="mb-2">
|
|
10
10
|
<label class="form-label fw-semibold text-xm" for="inputCurrentPassword">[[user:current_password]]</label>
|
|
11
|
-
<input autocomplete="off" class="form-control" type="password" id="inputCurrentPassword" placeholder="[[user:current_password]]" value=""
|
|
11
|
+
<input autocomplete="off" class="form-control" type="password" id="inputCurrentPassword" placeholder="[[user:current_password]]" value="" {{{ if !hasPassword }}} disabled{{{ end }}}>
|
|
12
12
|
</div>
|
|
13
13
|
{{{ end }}}
|
|
14
14
|
|
|
@@ -11,12 +11,12 @@
|
|
|
11
11
|
<label class="form-label fw-bold" for="fullname">[[user:fullname]]</label>
|
|
12
12
|
<input class="form-control" type="text" id="fullname" name="fullname" placeholder="[[user:fullname]]" value="{fullname}">
|
|
13
13
|
</div>
|
|
14
|
-
|
|
14
|
+
{{{ if allowWebsite }}}
|
|
15
15
|
<div class="mb-2">
|
|
16
16
|
<label class="form-label fw-bold" for="website">[[user:website]]</label>
|
|
17
17
|
<input class="form-control" type="text" id="website" name="website" placeholder="http://..." value="{website}">
|
|
18
18
|
</div>
|
|
19
|
-
|
|
19
|
+
{{{ end }}}
|
|
20
20
|
|
|
21
21
|
<div class="mb-2">
|
|
22
22
|
<label class="form-label fw-bold" for="location">[[user:location]]</label>
|
|
@@ -31,37 +31,35 @@
|
|
|
31
31
|
<div class="mb-2">
|
|
32
32
|
<label class="form-label fw-bold" for="groupTitle">[[user:grouptitle]]</label>
|
|
33
33
|
|
|
34
|
-
<select class="form-select mb-1" id="groupTitle" name="groupTitle"
|
|
34
|
+
<select class="form-select mb-1" id="groupTitle" name="groupTitle" {{{ if allowMultipleBadges }}} size="{groupSelectSize}" multiple{{{ end }}}>
|
|
35
35
|
<option value="">[[user:no-group-title]]</option>
|
|
36
|
-
{{{each groups}}}
|
|
37
|
-
|
|
38
|
-
<option value="{groups.displayName}"
|
|
39
|
-
|
|
40
|
-
{{{end}}}
|
|
36
|
+
{{{ each groups }}}
|
|
37
|
+
{{{ if ./userTitleEnabled }}}
|
|
38
|
+
<option value="{groups.displayName}" {{{ if ./selected }}}selected{{{ end }}}>{./userTitle}</option>
|
|
39
|
+
{{{ end }}}
|
|
40
|
+
{{{ end }}}
|
|
41
41
|
</select>
|
|
42
|
-
|
|
42
|
+
{{{ if allowMultipleBadges }}}
|
|
43
43
|
<div class="d-none d-md-block">
|
|
44
44
|
<span class="form-text">[[user:group-order-help]]</span>
|
|
45
45
|
<i role="button" component="group/order/up" class="fa fa-chevron-up"></i> <i role="button" component="group/order/down" class="fa fa-chevron-down"></i>
|
|
46
46
|
</div>
|
|
47
|
-
|
|
47
|
+
{{{ end }}}
|
|
48
48
|
</div>
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
{{{ if allowAboutMe }}}
|
|
51
51
|
<div class="mb-2">
|
|
52
52
|
<label class="form-label fw-bold" for="aboutme">[[user:aboutme]]</label> <small><label id="aboutMeCharCountLeft"></label></small>
|
|
53
53
|
<textarea class="form-control" id="aboutme" name="aboutme" rows="5">{aboutme}</textarea>
|
|
54
54
|
</div>
|
|
55
|
-
|
|
55
|
+
{{{ end }}}
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
<!-- IF !disableSignatures -->
|
|
57
|
+
{{{ if (allowSignature && !disableSignatures) }}}
|
|
59
58
|
<div class="mb-2">
|
|
60
59
|
<label class="form-label fw-bold" for="signature">[[user:signature]]</label> <small><label id="signatureCharCountLeft"></label></small>
|
|
61
60
|
<textarea class="form-control" id="signature" name="signature" rows="5">{signature}</textarea>
|
|
62
61
|
</div>
|
|
63
|
-
|
|
64
|
-
<!-- ENDIF allowSignature -->
|
|
62
|
+
{{{ end }}}
|
|
65
63
|
</form>
|
|
66
64
|
<hr class="visible-xs visible-sm"/>
|
|
67
65
|
</div>
|
|
@@ -69,47 +67,45 @@
|
|
|
69
67
|
<div class="col-xl-6 col-12">
|
|
70
68
|
<div class="text-center">
|
|
71
69
|
<ul class="list-group mb-3 text-sm text-nowrap">
|
|
72
|
-
|
|
70
|
+
{{{ if allowProfilePicture }}}
|
|
73
71
|
<a component="profile/change/picture" href="#" class="list-group-item px-1 text-decoration-none">[[user:change_picture]]</a>
|
|
74
|
-
|
|
75
|
-
|
|
72
|
+
{{{ end }}}
|
|
73
|
+
{{{ if !username:disableEdit }}}
|
|
76
74
|
<a href="{config.relative_path}/user/{userslug}/edit/username" class="list-group-item px-1 text-decoration-none">[[user:change_username]]</a>
|
|
77
|
-
|
|
78
|
-
|
|
75
|
+
{{{ end }}}
|
|
76
|
+
{{{ if !email:disableEdit }}}
|
|
79
77
|
<a href="{config.relative_path}/user/{userslug}/edit/email" class="list-group-item px-1 text-decoration-none">[[user:change_email]]</a>
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
{{{ end }}}
|
|
79
|
+
{{{ if canChangePassword }}}
|
|
82
80
|
<a href="{config.relative_path}/user/{userslug}/edit/password" class="list-group-item px-1 text-decoration-none">[[user:change_password]]</a>
|
|
83
|
-
|
|
84
|
-
{{{each editButtons}}}
|
|
85
|
-
<a href="{config.relative_path}{
|
|
86
|
-
{{{end}}}
|
|
81
|
+
{{{ end }}}
|
|
82
|
+
{{{ each editButtons }}}
|
|
83
|
+
<a href="{config.relative_path}{./link}" class="list-group-item px-1 text-decoration-none">{./text}</a>
|
|
84
|
+
{{{ end }}}
|
|
87
85
|
</ul>
|
|
88
86
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
<!-- ENDIF email -->
|
|
95
|
-
<!-- ENDIF config.requireEmailConfirmation -->
|
|
87
|
+
{{{ if config.requireEmailConfirmation }}}
|
|
88
|
+
{{{ if (email && isSelf) }}}
|
|
89
|
+
<a id="confirm-email" href="#" class="btn btn-warning {{{ if email:confirmed }}}hide{{{ end }}}">[[user:confirm_email]]</a><br/><br/>
|
|
90
|
+
{{{ end }}}
|
|
91
|
+
{{{ end }}}
|
|
96
92
|
</div>
|
|
97
93
|
|
|
98
94
|
{{{ if sso.length }}}
|
|
99
95
|
<label class="form-label text-sm fw-semibold">[[user:sso.title]]</label>
|
|
100
96
|
<div class="list-group">
|
|
101
|
-
{{{each sso}}}
|
|
97
|
+
{{{ each sso }}}
|
|
102
98
|
<div class="list-group-item d-flex justify-content-between">
|
|
103
|
-
<a class="text-sm text-reset text-decoration-none" data-component="{
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
{
|
|
99
|
+
<a class="text-sm text-reset text-decoration-none" data-component="{./component}" href="{./url}" target="{{{ if ./associated }}}_blank{{{ else }}}_top{{{ end }}}">
|
|
100
|
+
{{{ if ./icon }}}<i class="fa {./icon}"></i>{{{ end }}}
|
|
101
|
+
{{{ if ./associated }}}[[user:sso.associated]]{{{ else }}}[[user:sso.not-associated]]{{{ end }}}
|
|
102
|
+
{./name}
|
|
107
103
|
</a>
|
|
108
|
-
|
|
109
|
-
<a data-component="{
|
|
110
|
-
|
|
104
|
+
{{{ if ./deauthUrl }}}
|
|
105
|
+
<a data-component="{./component}" class="btn btn-outline-secondary btn-sm" href="{./deauthUrl}">[[user:sso.dissociate]]</a>
|
|
106
|
+
{{{ end }}}
|
|
111
107
|
</div>
|
|
112
|
-
{{{end}}}
|
|
108
|
+
{{{ end }}}
|
|
113
109
|
</div>
|
|
114
110
|
{{{ end }}}
|
|
115
111
|
|
|
@@ -62,24 +62,24 @@
|
|
|
62
62
|
[[user:info.latest-flags]]
|
|
63
63
|
</h5>
|
|
64
64
|
<div class="card-body">
|
|
65
|
-
|
|
65
|
+
{{{ if history.flags.length }}}
|
|
66
66
|
<ul class="recent-flags list-unstyled">
|
|
67
|
-
{{{each history.flags}}}
|
|
67
|
+
{{{ each history.flags }}}
|
|
68
68
|
<li>
|
|
69
69
|
<p>
|
|
70
70
|
{{{ if history.flags.targetPurged }}}
|
|
71
71
|
<div>[[flags:target-purged]]</div>
|
|
72
72
|
{{{ else }}}
|
|
73
|
-
<a class="title" href="{config.relative_path}/post/{
|
|
73
|
+
<a class="title" href="{config.relative_path}/post/{./pid}">{./title}</a><br />
|
|
74
74
|
{{{ end }}}
|
|
75
|
-
<span class="timestamp">[[flags:flagged-timeago-readable, {
|
|
75
|
+
<span class="timestamp">[[flags:flagged-timeago-readable, {./timestampISO}, {./timestampReadable}]]</span>
|
|
76
76
|
</p>
|
|
77
77
|
</li>
|
|
78
|
-
{{{end}}}
|
|
78
|
+
{{{ end }}}
|
|
79
79
|
</ul>
|
|
80
|
-
|
|
80
|
+
{{{ else }}}
|
|
81
81
|
<div class="alert alert-success">[[user:info.no-flags]]</div>
|
|
82
|
-
|
|
82
|
+
{{{ end }}}
|
|
83
83
|
</div>
|
|
84
84
|
</div>
|
|
85
85
|
|
|
@@ -87,40 +87,37 @@
|
|
|
87
87
|
<h5 class="card-header">
|
|
88
88
|
[[user:info.ban-history]]
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
<!-- IF !isSelf -->
|
|
90
|
+
{{{ if (!banned && !isSelf) }}}
|
|
92
91
|
<button class="btn btn-sm float-end btn-danger" component="account/ban">[[user:ban_account]]</button>
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
<!-- IF !isSelf -->
|
|
92
|
+
{{{ end }}}
|
|
93
|
+
{{{ if (banned && !isSelf) }}}
|
|
96
94
|
<button class="btn btn-sm float-end btn-success" component="account/unban">[[user:unban_account]]</button>
|
|
97
|
-
|
|
98
|
-
<!-- ENDIF !banned -->
|
|
95
|
+
{{{ end }}}
|
|
99
96
|
</h5>
|
|
100
97
|
<div class="card-body">
|
|
101
|
-
|
|
98
|
+
{{{ if history.bans.length }}}
|
|
102
99
|
<ul class="ban-history list-unstyled">
|
|
103
100
|
{{{each history.bans}}}
|
|
104
101
|
<li>
|
|
105
102
|
<p>
|
|
106
|
-
<a href="{config.relative_path}/user/{
|
|
103
|
+
<a href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(./user, "24px", true)}</a>
|
|
107
104
|
<strong>
|
|
108
|
-
<a href="
|
|
105
|
+
<a href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}" itemprop="author" data-username="{./user.username}" data-uid="{./user.uid}">{./user.username}</a>
|
|
109
106
|
</strong>
|
|
110
|
-
<span class="timestamp timeago" title="{
|
|
111
|
-
|
|
112
|
-
<span class="expiry">[[user:info.banned-until, {
|
|
113
|
-
|
|
107
|
+
<span class="timestamp timeago" title="{./timestampISO}"></span> — {./timestampReadable}<br />
|
|
108
|
+
{{{ if ./until }}}
|
|
109
|
+
<span class="expiry">[[user:info.banned-until, {./untilReadable}]]</span><br />
|
|
110
|
+
{{{ else }}}
|
|
114
111
|
<span class="expiry">[[user:info.banned-permanently]]</span><br />
|
|
115
|
-
|
|
116
|
-
<span class="reason"><strong>[[user:info.banned-reason-label]]</strong>: {
|
|
112
|
+
{{{ end }}}
|
|
113
|
+
<span class="reason"><strong>[[user:info.banned-reason-label]]</strong>: {./reason}</span>
|
|
117
114
|
</p>
|
|
118
115
|
</li>
|
|
119
116
|
{{{end}}}
|
|
120
117
|
</ul>
|
|
121
|
-
|
|
118
|
+
{{{ else }}}
|
|
122
119
|
<div class="alert alert-success">[[user:info.no-ban-history]]</div>
|
|
123
|
-
|
|
120
|
+
{{{ end }}}
|
|
124
121
|
</div>
|
|
125
122
|
</div>
|
|
126
123
|
|
|
@@ -144,19 +141,19 @@
|
|
|
144
141
|
{{{ each history.mutes }}}
|
|
145
142
|
<li>
|
|
146
143
|
<p>
|
|
147
|
-
<a href="{config.relative_path}/user/{
|
|
144
|
+
<a href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(./user, "24px", true)}</a>
|
|
148
145
|
<strong>
|
|
149
|
-
<a href="
|
|
146
|
+
<a href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}" itemprop="author" data-username="{./user.username}" data-uid="{./user.uid}">{./user.username}</a>
|
|
150
147
|
</strong>
|
|
151
|
-
<span class="timestamp timeago" title="{
|
|
152
|
-
{{{ if
|
|
153
|
-
<span class="expiry">[[user:info.muted-until, {
|
|
148
|
+
<span class="timestamp timeago" title="{./timestampISO}"></span> — {./timestampReadable}<br />
|
|
149
|
+
{{{ if ./until }}}
|
|
150
|
+
<span class="expiry">[[user:info.muted-until, {./untilReadable}]]</span><br />
|
|
154
151
|
{{{ end }}}
|
|
155
152
|
|
|
156
|
-
<span class="reason"><strong>[[user:info.banned-reason-label]]</strong>: {
|
|
153
|
+
<span class="reason"><strong>[[user:info.banned-reason-label]]</strong>: {./reason}</span>
|
|
157
154
|
</p>
|
|
158
155
|
</li>
|
|
159
|
-
{{{end}}}
|
|
156
|
+
{{{ end }}}
|
|
160
157
|
</ul>
|
|
161
158
|
{{{ else }}}
|
|
162
159
|
<div class="alert alert-success">[[user:info.no-mute-history]]</div>
|
|
@@ -164,7 +161,7 @@
|
|
|
164
161
|
</div>
|
|
165
162
|
</div>
|
|
166
163
|
|
|
167
|
-
|
|
164
|
+
{{{ if isAdminOrGlobalModerator }}}
|
|
168
165
|
<div class="card">
|
|
169
166
|
<h5 class="card-header">
|
|
170
167
|
[[user:info.moderation-note]]
|
|
@@ -175,32 +172,30 @@
|
|
|
175
172
|
<button class="btn btn-sm float-end btn-success" component="account/save-moderation-note">[[user:info.moderation-note.add]]</button>
|
|
176
173
|
<br/>
|
|
177
174
|
<div component="account/moderation-note/list">
|
|
178
|
-
{{{each moderationNotes}}}
|
|
175
|
+
{{{ each moderationNotes }}}
|
|
179
176
|
<hr/>
|
|
180
177
|
|
|
181
|
-
<div
|
|
182
|
-
<
|
|
183
|
-
|
|
184
|
-
<
|
|
185
|
-
|
|
186
|
-
</strong>
|
|
178
|
+
<div>
|
|
179
|
+
<a href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}">{buildAvatar(./user, "24px", true)}</a>
|
|
180
|
+
<strong>
|
|
181
|
+
<a href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}" itemprop="author" data-username="{./user.username}" data-uid="{./user.uid}">{./user.username}</a>
|
|
182
|
+
</strong>
|
|
187
183
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
184
|
+
<div class="visible-xs-inline-block visible-sm-inline-block visible-md-inline-block visible-lg-inline-block">
|
|
185
|
+
<span class="timeago" title="{./timestampISO}"></span>
|
|
186
|
+
</div>
|
|
187
|
+
<br />
|
|
192
188
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
</div>
|
|
189
|
+
<div class="content">
|
|
190
|
+
{./note}
|
|
196
191
|
</div>
|
|
197
192
|
</div>
|
|
198
|
-
{{{end}}}
|
|
193
|
+
{{{ end }}}
|
|
199
194
|
</div>
|
|
200
195
|
<!-- IMPORT partials/paginator.tpl -->
|
|
201
196
|
</div>
|
|
202
197
|
</div>
|
|
203
|
-
|
|
198
|
+
{{{ end }}}
|
|
204
199
|
</div>
|
|
205
200
|
</div>
|
|
206
201
|
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
<div class="mb-2">
|
|
25
25
|
<select class="form-select form-select-sm" id="homePageRoute" data-property="homePageRoute">
|
|
26
26
|
<option value="none">None</option>
|
|
27
|
-
{{{each homePageRoutes}}}
|
|
28
|
-
<option value="{
|
|
29
|
-
{{{end}}}
|
|
27
|
+
{{{ each homePageRoutes }}}
|
|
28
|
+
<option value="{./route}" {{{ if ./selected }}}selected="1"{{{ end }}}>{./name}</option>
|
|
29
|
+
{{{ end }}}
|
|
30
30
|
</select>
|
|
31
31
|
<p class="form-text text-xs">[[user:homepage_description]]</p>
|
|
32
32
|
</div>
|
|
@@ -2,15 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
<h3 class="fw-semibold fs-5">{title}</h3>
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
<div class="alert alert-info text-center">[[uploads:public-uploads-info]]</div>
|
|
9
|
-
<!-- ENDIF privateUploads -->
|
|
5
|
+
<div class="alert alert-info text-center">
|
|
6
|
+
{{{ if privateUploads }}}[[uploads:private-uploads-info]]{{{ else }}}[[uploads:public-uploads-info]]{{{ end }}}
|
|
7
|
+
</div>
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
{{{ if !uploads.length }}}
|
|
12
10
|
<div class="alert alert-warning text-center">[[uploads:no-uploads-found]]</div>
|
|
13
|
-
|
|
11
|
+
{{{ end }}}
|
|
14
12
|
|
|
15
13
|
<table class="table table-striped table-responsive">
|
|
16
14
|
<thead>
|
|
@@ -20,10 +18,10 @@
|
|
|
20
18
|
</tr>
|
|
21
19
|
</thead>
|
|
22
20
|
<tbody>
|
|
23
|
-
{{{each uploads}}}
|
|
24
|
-
<tr data-name="{
|
|
21
|
+
{{{ each uploads }}}
|
|
22
|
+
<tr data-name="{./name}">
|
|
25
23
|
<td>
|
|
26
|
-
<a class="text-break" href="{config.relative_path}{
|
|
24
|
+
<a class="text-break" href="{config.relative_path}{./url}">{./url}</a>
|
|
27
25
|
</td>
|
|
28
26
|
<td>
|
|
29
27
|
<div class="btn-group ">
|
|
@@ -31,7 +29,7 @@
|
|
|
31
29
|
</div>
|
|
32
30
|
</td>
|
|
33
31
|
</tr>
|
|
34
|
-
{{{end}}}
|
|
32
|
+
{{{ end }}}
|
|
35
33
|
</tbody>
|
|
36
34
|
</table>
|
|
37
35
|
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
<hr />
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
{{{ if type_bool.post }}}
|
|
15
15
|
<div class="d-flex">
|
|
16
16
|
<div class="flex-shrink-0">
|
|
17
17
|
<a href="{config.relative_path}/user/{target.user.userslug}">{buildAvatar(target.user, "64px", true, "media-object")}</a>
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
{target.content}
|
|
22
22
|
</div>
|
|
23
23
|
</div>
|
|
24
|
-
|
|
24
|
+
{{{ end }}}
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
{{{ if type_bool.user }}}
|
|
27
27
|
<div class="d-flex">
|
|
28
28
|
<div class="flex-shrink-0">
|
|
29
29
|
<a href="{config.relative_path}/user/{target.userslug}">{buildAvatar(target, "64px", true, "media-object")}</a>
|
|
@@ -36,11 +36,11 @@
|
|
|
36
36
|
</p>
|
|
37
37
|
</div>
|
|
38
38
|
</div>
|
|
39
|
-
|
|
39
|
+
{{{ end }}}
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
{{{ if type_bool.empty }}}
|
|
42
42
|
<div class="alert alert-warning" role="alert">[[flags:target-purged]]</div>
|
|
43
|
-
|
|
43
|
+
{{{ end }}}
|
|
44
44
|
|
|
45
45
|
<hr />
|
|
46
46
|
|
|
@@ -95,27 +95,27 @@
|
|
|
95
95
|
</form>
|
|
96
96
|
|
|
97
97
|
<div component="flag/notes">
|
|
98
|
-
|
|
98
|
+
{{{ if !notes.length }}}
|
|
99
99
|
<div class="alert alert-success text-center">[[flags:no-notes]]</div>
|
|
100
|
-
|
|
101
|
-
{{{each notes}}}
|
|
100
|
+
{{{ end }}}
|
|
101
|
+
{{{ each notes }}}
|
|
102
102
|
<div class="d-flex mb-3">
|
|
103
103
|
<div class="flex-shrink-0">
|
|
104
|
-
<a href="{config.relative_path}/user/{
|
|
104
|
+
<a href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(./user, "32px", true, "media-object")}</a>
|
|
105
105
|
</div>
|
|
106
106
|
<div class="flex-grow-1 mx-3">
|
|
107
107
|
<h2 class="h5">
|
|
108
|
-
<a href="{config.relative_path}/user/{
|
|
109
|
-
<small><span class="timeago" title="{
|
|
108
|
+
<a href="{config.relative_path}/user/{./user.userslug}">{./user.username}</a>
|
|
109
|
+
<small><span class="timeago" title="{./datetimeISO}"></span></small>
|
|
110
110
|
</h4>
|
|
111
|
-
{
|
|
111
|
+
{./content}
|
|
112
112
|
</div>
|
|
113
113
|
<div class="flex-shrink-0">
|
|
114
114
|
<a href="#" class="btn btn-sm btn-link" data-action="prepare-edit"><i class="fa fa-pencil"></i></a>
|
|
115
115
|
<a href="#" class="btn btn-sm btn-link" data-action="delete-note"><i class="fa fa-trash text-danger"></i></a>
|
|
116
116
|
</div>
|
|
117
117
|
</div>
|
|
118
|
-
{{{end}}}
|
|
118
|
+
{{{ end }}}
|
|
119
119
|
</div>
|
|
120
120
|
</div>
|
|
121
121
|
<div class="col-sm-6">
|
|
@@ -175,25 +175,25 @@
|
|
|
175
175
|
|
|
176
176
|
<h2 class="h4">[[flags:history]]</h2>
|
|
177
177
|
<div component="flag/history">
|
|
178
|
-
|
|
178
|
+
{{{ if !history.length }}}
|
|
179
179
|
<div class="alert alert-success text-center">[[flags:no-history]]</div>
|
|
180
|
-
|
|
181
|
-
{{{each history}}}
|
|
180
|
+
{{{ end }}}
|
|
181
|
+
{{{ each history }}}
|
|
182
182
|
<div class="d-flex">
|
|
183
183
|
<div class="flex-shrink-0">
|
|
184
|
-
<a href="{config.relative_path}/user/{
|
|
184
|
+
<a href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(./user, "32px", true, "media-object")}</a>
|
|
185
185
|
</div>
|
|
186
186
|
<div class="flex-grow-1 ms-3">
|
|
187
187
|
<h4 class="media-heading">
|
|
188
|
-
<a href="{config.relative_path}/user/{
|
|
189
|
-
<small><span class="timeago" title="{
|
|
188
|
+
<a href="{config.relative_path}/user/{./user.userslug}">{./user.username}</a>
|
|
189
|
+
<small><span class="timeago" title="{./datetimeISO}"></span></small>
|
|
190
190
|
</h4>
|
|
191
191
|
<ul>
|
|
192
|
-
{{{each ./fields}}}
|
|
192
|
+
{{{ each ./fields }}}
|
|
193
193
|
<li>
|
|
194
|
-
<span class="badge bg-primary">[[flags:{@key}]]</span
|
|
194
|
+
<span class="badge bg-primary">[[flags:{@key}]]</span>{{{ if @value }}} → <span class="badge bg-light text-dark">{@value}</span>{{{ end }}}
|
|
195
195
|
</li>
|
|
196
|
-
{{{end}}}
|
|
196
|
+
{{{ end }}}
|
|
197
197
|
{{{ each ./meta }}}
|
|
198
198
|
<li>
|
|
199
199
|
<span class="badge bg-{{./labelClass}}">{{./key}}</span>{{{ if ./value }}} → <span class="badge bg-light text-dark">{{ ./value }}</span>{{{ end }}}
|
|
@@ -202,7 +202,7 @@
|
|
|
202
202
|
</ul>
|
|
203
203
|
</div>
|
|
204
204
|
</div>
|
|
205
|
-
{{{end}}}
|
|
205
|
+
{{{ end }}}
|
|
206
206
|
</div>
|
|
207
207
|
</div>
|
|
208
208
|
</div>
|
package/templates/flags/list.tpl
CHANGED
|
@@ -7,14 +7,14 @@
|
|
|
7
7
|
<!-- IMPORT partials/flags/filters.tpl -->
|
|
8
8
|
</div>
|
|
9
9
|
<div class="col-sm-8 col-md-9">
|
|
10
|
-
|
|
10
|
+
{{{ if hasFilter }}}
|
|
11
11
|
<div class="alert alert-warning">
|
|
12
12
|
<p class="float-end">
|
|
13
13
|
<a href="{config.relative_path}/flags">[[flags:filter-reset]]</a>
|
|
14
14
|
</p>
|
|
15
15
|
[[flags:filter-active]]
|
|
16
16
|
</div>
|
|
17
|
-
|
|
17
|
+
{{{ end }}}
|
|
18
18
|
|
|
19
19
|
<div class="btn-group float-end" component="flags/bulk-actions">
|
|
20
20
|
<button type="button" class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" autocomplete="off" aria-haspopup="true" aria-expanded="false" disabled="disabled">
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
</tr>
|
|
40
40
|
</thead>
|
|
41
41
|
<tbody>
|
|
42
|
-
|
|
42
|
+
{{{ if !flags.length }}}
|
|
43
43
|
<tr>
|
|
44
44
|
<td colspan="5">
|
|
45
45
|
<div class="alert alert-success text-center">
|
|
@@ -47,22 +47,22 @@
|
|
|
47
47
|
</div>
|
|
48
48
|
</td>
|
|
49
49
|
</tr>
|
|
50
|
-
|
|
51
|
-
{{{each flags}}}
|
|
52
|
-
<tr data-flag-id="{
|
|
50
|
+
{{{ end }}}
|
|
51
|
+
{{{ each flags }}}
|
|
52
|
+
<tr data-flag-id="{./flagId}">
|
|
53
53
|
<td>
|
|
54
54
|
<input type="checkbox" autocomplete="off" />
|
|
55
55
|
</td>
|
|
56
56
|
<td>
|
|
57
|
-
<a href="{config.relative_path}/flags/{
|
|
58
|
-
<strong>{
|
|
57
|
+
<a href="{config.relative_path}/flags/{./flagId}">
|
|
58
|
+
<strong>{./target_readable}</strong>
|
|
59
59
|
</a>
|
|
60
60
|
</td>
|
|
61
61
|
<td>
|
|
62
62
|
{./heat}
|
|
63
63
|
</td>
|
|
64
|
-
<td><span class="timeago" title="{
|
|
65
|
-
<td><span class="badge bg-{
|
|
64
|
+
<td><span class="timeago" title="{./datetimeISO}"></span></td>
|
|
65
|
+
<td><span class="badge bg-{./labelClass}">[[flags:state-{./state}]]</span></td>
|
|
66
66
|
</tr>
|
|
67
67
|
{{{end}}}
|
|
68
68
|
</tbody>
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{{{ if breadcrumbs.length }}}
|
|
2
2
|
<ol class="breadcrumb mb-0 {{{ if config.centerHeaderElements }}}justify-content-center{{{ end }}}" itemscope="itemscope" itemprop="breadcrumb" itemtype="http://schema.org/BreadcrumbList">
|
|
3
|
-
{{{each breadcrumbs}}}
|
|
4
|
-
<li
|
|
3
|
+
{{{ each breadcrumbs }}}
|
|
4
|
+
<li{{{ if @last }}} component="breadcrumb/current"{{{ end }}} itemscope="itemscope" itemprop="itemListElement" itemtype="http://schema.org/ListItem" class="breadcrumb-item {{{ if @last }}}active{{{ end }}}">
|
|
5
5
|
<meta itemprop="position" content="{@index}" />
|
|
6
|
-
{{{ if ./url }}}<a href="{
|
|
7
|
-
<span class="fw-semibold" itemprop="name">{
|
|
6
|
+
{{{ if ./url }}}<a href="{./url}" itemprop="item">{{{ end }}}
|
|
7
|
+
<span class="fw-semibold" itemprop="name">{./text}</span>
|
|
8
8
|
{{{ if ./url }}}</a>{{{ end }}}
|
|
9
9
|
</li>
|
|
10
|
-
{{{end}}}
|
|
10
|
+
{{{ end }}}
|
|
11
11
|
</ol>
|
|
12
12
|
{{{ end }}}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<button type="button" class="btn-ghost-sm d-flex gap-2 align-items-baseline dropdown-toggle" data-bs-toggle="dropdown">
|
|
2
2
|
{{{ if selectedCategory }}}
|
|
3
|
-
<span class="category-item">
|
|
3
|
+
<span class="category-item d-inline-flex align-items-center gap-1">
|
|
4
4
|
{buildCategoryIcon(selectedCategory, "18px", "rounded-circle")}
|
|
5
5
|
<span class="visible-md-inline visible-lg-inline fw-semibold">{selectedCategory.name}</span>
|
|
6
6
|
</span>
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
<li role="presentation" class="category {{{ if ../disabledClass }}}disabled{{{ end }}}" data-cid="{../cid}" data-parent-cid="{../parentCid}" data-name="{../name}">
|
|
20
20
|
<a class="dropdown-item" role="menu-item" href="#">{../level}<i component="category/select/icon" class="fa fa-fw fa-check {{{ if !../selected }}}invisible{{{ end }}}"></i>
|
|
21
21
|
<span component="category-markup" style="{{{ if ../match }}}font-weight: bold;{{{end}}}">
|
|
22
|
-
<div class="category-item d-inline-
|
|
22
|
+
<div class="category-item d-inline-flex align-items-center gap-1">
|
|
23
23
|
{{{ if ./icon }}}
|
|
24
24
|
{buildCategoryIcon(@value, "24px", "rounded-circle")}
|
|
25
25
|
{{{ end }}}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<button type="button" class="btn-ghost-sm d-flex gap-2 align-items-baseline dropdown-toggle" data-bs-toggle="dropdown">
|
|
2
2
|
<span component="category-selector-selected">
|
|
3
3
|
{{{ if (selectedCategory && !showCategorySelectLabel) }}}
|
|
4
|
-
<span class="category-item">
|
|
4
|
+
<span class="category-item d-inline-flex align-items-center gap-1">
|
|
5
5
|
{buildCategoryIcon(selectedCategory, "24px", "rounded-circle")}
|
|
6
6
|
<span class="fw-semibold">{selectedCategory.name}</span>
|
|
7
7
|
</span>
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
<li role="presentation" class="category {{{ if ./disabledClass }}}disabled {{{ end }}}" data-cid="{./cid}" data-name="{./name}" data-parent-cid="{./parentCid}">
|
|
23
23
|
<a class="dropdown-item" role="menu-item">{./level}
|
|
24
24
|
<span component="category-markup" style="{{{ if ./match }}}font-weight: bold;{{{end}}}">
|
|
25
|
-
<div class="category-item d-inline-
|
|
25
|
+
<div class="category-item d-inline-flex align-items-center gap-1">
|
|
26
26
|
{{{ if ./icon }}}
|
|
27
27
|
{buildCategoryIcon(@value, "24px", "rounded-circle")}
|
|
28
28
|
{{{ end }}}
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
<textarea component="chat/input" placeholder="[[modules:chat.placeholder]]" class="form-control chat-input mousetrap" rows="2" style="resize:none;"></textarea>
|
|
27
27
|
<span component="chat/message/remaining" class="text-muted position-absolute me-1 mb-1" style="right: 0px; bottom:0px;">{maximumChatMessageLength}</span>
|
|
28
28
|
</div>
|
|
29
|
+
<button component="chat/upload/button" class="btn btn-light" type="button"><i class="fa fa-fw fa-2x fa-upload"></i></button>
|
|
29
30
|
<button class="btn btn-primary" type="button" data-action="send"><i class="fa fa-fw fa-2x fa-paper-plane"></i></button>
|
|
30
31
|
<form component="chat/upload" method="post" enctype="multipart/form-data">
|
|
31
32
|
<input type="file" name="files[]" multiple class="hidden"/>
|
|
@@ -18,19 +18,17 @@
|
|
|
18
18
|
{messages.content}
|
|
19
19
|
</div>
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
<!-- IF messages.self -->
|
|
21
|
+
{{{ if (!config.disableChatMessageEditing && ./self ) }}}
|
|
23
22
|
<div class="position-relative">
|
|
24
23
|
<div class="btn-group border shadow-sm controls position-absolute small hover-d-block" style="bottom:5px; right:30px; display:none;">
|
|
25
24
|
<button class="btn btn-sm btn-link" data-action="edit"><i class="fa fa-pencil"></i></button>
|
|
26
25
|
<button class="btn btn-sm btn-link" data-action="delete"><i class="fa fa-trash"></i></button>
|
|
27
26
|
<button class="btn btn-sm btn-link" data-action="restore"><i class="fa fa-repeat"></i></button>
|
|
28
|
-
|
|
27
|
+
{{{ if isAdminOrGlobalMod }}}
|
|
29
28
|
<button class="btn btn-sm btn-link chat-ip" title="[[modules:chat.show-ip]]"><i class="fa fa-info-circle chat-ip-button"></i></button>
|
|
30
|
-
|
|
29
|
+
{{{ end }}}
|
|
31
30
|
</div>
|
|
32
31
|
</div>
|
|
33
|
-
|
|
34
|
-
<!-- ENDIF !config.disableChatMessageEditing -->
|
|
32
|
+
{{{ end }}}
|
|
35
33
|
</div>
|
|
36
34
|
</li>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<div class="col-12 col-lg-6">
|
|
5
5
|
<div class="mb-3">
|
|
6
6
|
<label class="form-label" for="name">[[groups:details.group_name]]</label>
|
|
7
|
-
<input
|
|
7
|
+
<input {{{ if group.system }}}readonly{{{ end }}} class="form-control" name="name" id="name" type="text" value="{group.displayName}" />
|
|
8
8
|
</div>
|
|
9
9
|
<div class="mb-3">
|
|
10
10
|
<label class="form-label" for="name">[[groups:details.description]]</label>
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
<div class="form-check">
|
|
15
15
|
<label class="form-check-label">[[groups:details.private]]</label>
|
|
16
|
-
<input class="form-check-input" name="private" type="checkbox"
|
|
16
|
+
<input class="form-check-input" name="private" type="checkbox"{{{ if group.private }}} checked{{{ end }}}>
|
|
17
17
|
{{{ if !allowPrivateGroups }}}
|
|
18
18
|
<p class="form-text">
|
|
19
19
|
[[groups:details.private_system_help]]
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
</div>
|
|
26
26
|
<div class="form-check">
|
|
27
27
|
<label class="form-check-label">[[groups:details.hidden]]</label>
|
|
28
|
-
<input class="form-check-input" name="hidden" type="checkbox"
|
|
28
|
+
<input class="form-check-input" name="hidden" type="checkbox"{{{ if group.hidden }}} checked{{{ end }}}>
|
|
29
29
|
<p class="form-text text-xs m-0">
|
|
30
30
|
[[groups:details.hidden_help]]
|
|
31
31
|
</p>
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
<div class="d-flex align-items-center justify-content-between">
|
|
26
26
|
<div class="d-flex align-items-center gap-2">
|
|
27
27
|
<a class="align-text-top" href="{config.relative_path}/user/{group.members.userslug}">{group.members.username}</a>
|
|
28
|
-
<i component="groups/owner/icon" title="[[groups:owner]]" class="user-owner-icon fa fa-star align-text-top text-warning
|
|
28
|
+
<i component="groups/owner/icon" title="[[groups:owner]]" class="user-owner-icon fa fa-star align-text-top text-warning {{{ if !group.members.isOwner }}}invisible{{{ end }}}"></i>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
{{{ if group.isOwner }}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<div class="d-flex flex-column d-md-none fixed-bottom ff-secondary
|
|
1
|
+
<div class="d-flex flex-column d-md-none fixed-bottom ff-secondary gap-1 align-items-center">
|
|
2
2
|
|
|
3
3
|
<!-- IMPORT partials/topic/navigator-mobile.tpl -->
|
|
4
4
|
|
|
@@ -12,32 +12,32 @@
|
|
|
12
12
|
</a>
|
|
13
13
|
<ul class="navigation-dropdown dropdown-menu">
|
|
14
14
|
{{{ each navigation }}}
|
|
15
|
-
|
|
15
|
+
{{{ if displayMenuItem(@root, @index) }}}
|
|
16
16
|
<li class="nav-item {./class}{{{ if ./dropdown }}} dropend{{{ end }}}" title="{./title}">
|
|
17
|
-
<a class="nav-link nav-btn navigation-link px-3 py-2 {{{ if
|
|
17
|
+
<a class="nav-link nav-btn navigation-link px-3 py-2 {{{ if ./dropdown }}}dropdown-toggle{{{ end }}}"
|
|
18
18
|
{{{ if ./dropdown }}} href="#" role="button" data-bs-toggle="collapse" data-bs-target="#collapse-target-{@index}" onclick="event.stopPropagation();" {{{ else }}} href="{./route}"{{{ end }}} {{{ if ./id }}}id="{./id}"{{{ end }}}{{{ if ./targetBlank }}} target="_blank"{{{ end }}}>
|
|
19
19
|
<span class="d-inline-flex justify-content-between align-items-center w-100">
|
|
20
20
|
<span class="text-nowrap truncate-open">
|
|
21
21
|
{{{ if ./iconClass }}}
|
|
22
22
|
<i class="fa fa-fw {./iconClass}" data-content="{./content}"></i>
|
|
23
23
|
{{{ end }}}
|
|
24
|
-
{{{ if
|
|
25
|
-
<span class="nav-text visible-open px-2 fw-semibold">{
|
|
24
|
+
{{{ if ./text }}}
|
|
25
|
+
<span class="nav-text visible-open px-2 fw-semibold">{./text}</span>
|
|
26
26
|
{{{ end }}}
|
|
27
27
|
</span>
|
|
28
28
|
<span component="navigation/count" class="visible-open badge rounded-1 bg-primary {{{ if !./content }}}hidden{{{ end }}}">{./content}</span>
|
|
29
29
|
</span>
|
|
30
30
|
</a>
|
|
31
|
-
{{{ if
|
|
31
|
+
{{{ if ./dropdown }}}
|
|
32
32
|
<div class="ps-3">
|
|
33
33
|
<ul id="collapse-target-{@index}" class="collapse list-unstyled ps-3">
|
|
34
|
-
{
|
|
34
|
+
{./dropdownContent}
|
|
35
35
|
</ul>
|
|
36
36
|
</div>
|
|
37
37
|
{{{ end }}}
|
|
38
38
|
</li>
|
|
39
|
-
|
|
40
|
-
{{{end}}}
|
|
39
|
+
{{{ end }}}
|
|
40
|
+
{{{ end }}}
|
|
41
41
|
</ul>
|
|
42
42
|
</div>
|
|
43
43
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<nav class="{{{ if config.openSidebars}}}open{{{ end }}} text-dark bg-light sidebar sidebar-left start-0 border-end vh-100 d-none d-md-flex flex-column justify-content-between sticky-top ff-secondary">
|
|
2
2
|
<ul id="main-nav" class="list-unstyled d-flex flex-column w-100 gap-2 mt-2">
|
|
3
3
|
{{{ each navigation }}}
|
|
4
|
-
|
|
4
|
+
{{{ if displayMenuItem(@root, @index) }}}
|
|
5
5
|
<li class="nav-item mx-2 {./class}{{{ if ./dropdown }}} dropend{{{ end }}}" title="{./title}">
|
|
6
|
-
<a class="nav-link nav-btn navigation-link d-flex gap-2 justify-content-between align-items-center {{{ if
|
|
6
|
+
<a class="nav-link nav-btn navigation-link d-flex gap-2 justify-content-between align-items-center {{{ if ./dropdown }}}dropdown-toggle{{{ end }}}"
|
|
7
7
|
{{{ if ./dropdown }}} href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" {{{ else }}} href="{./route}"{{{ end }}} {{{ if ./id }}}id="{./id}"{{{ end }}}{{{ if ./targetBlank }}} target="_blank"{{{ end }}}>
|
|
8
8
|
<span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
|
|
9
9
|
<span class="position-relative">
|
|
@@ -12,20 +12,20 @@
|
|
|
12
12
|
<span component="navigation/count" class="visible-closed position-absolute top-0 start-100 translate-middle badge rounded-1 bg-primary {{{ if !./content }}}hidden{{{ end }}}">{./content}</span>
|
|
13
13
|
{{{ end }}}
|
|
14
14
|
</span>
|
|
15
|
-
{{{ if
|
|
16
|
-
<span class="nav-text small visible-open fw-semibold text-truncate">{
|
|
15
|
+
{{{ if ./text }}}
|
|
16
|
+
<span class="nav-text small visible-open fw-semibold text-truncate">{./text}</span>
|
|
17
17
|
{{{ end }}}
|
|
18
18
|
</span>
|
|
19
19
|
<span component="navigation/count" class="visible-open badge rounded-1 bg-primary {{{ if !./content }}}hidden{{{ end }}}">{./content}</span>
|
|
20
20
|
</a>
|
|
21
|
-
{{{ if
|
|
21
|
+
{{{ if ./dropdown }}}
|
|
22
22
|
<ul class="dropdown-menu shadow">
|
|
23
|
-
{
|
|
23
|
+
{./dropdownContent}
|
|
24
24
|
</ul>
|
|
25
25
|
{{{ end }}}
|
|
26
26
|
</li>
|
|
27
|
-
|
|
28
|
-
{{{end}}}
|
|
27
|
+
{{{ end }}}
|
|
28
|
+
{{{ end }}}
|
|
29
29
|
</ul>
|
|
30
30
|
<div class="w-100">
|
|
31
31
|
{{{ if !config.disableCustomUserSkins }}}
|
|
@@ -1,82 +1,82 @@
|
|
|
1
|
-
|
|
1
|
+
{{{ if posts.display_moderator_tools }}}
|
|
2
2
|
<li>
|
|
3
3
|
<a class="dropdown-item" component="post/edit" role="menuitem" tabindex="-1" href="#">
|
|
4
4
|
<span class="menu-icon"><i class="fa fa-fw fa-pencil"></i></span> [[topic:edit]]
|
|
5
5
|
</a>
|
|
6
6
|
</li>
|
|
7
|
-
<li
|
|
8
|
-
<a class="dropdown-item" component="post/delete" role="menuitem" tabindex="-1" href="#" class="
|
|
7
|
+
<li {{{ if posts.deleted }}}hidden{{{ end }}}>
|
|
8
|
+
<a class="dropdown-item" component="post/delete" role="menuitem" tabindex="-1" href="#" class="{{{ if posts.deleted }}}hidden{{{ end }}}">
|
|
9
9
|
<span class="menu-icon"><i class="fa fa-fw fa-trash-o"></i><span> [[topic:delete]]
|
|
10
10
|
</a>
|
|
11
11
|
</li>
|
|
12
|
-
<li
|
|
13
|
-
<a class="dropdown-item" component="post/restore" role="menuitem" tabindex="-1" href="#" class="
|
|
12
|
+
<li {{{ if !posts.deleted }}}hidden{{{ end }}}>
|
|
13
|
+
<a class="dropdown-item" component="post/restore" role="menuitem" tabindex="-1" href="#" class="{{{ if !posts.deleted }}}hidden{{{ end }}}">
|
|
14
14
|
<span class="menu-icon"><i class="fa fa-fw fa-history"></i><span> [[topic:restore]]
|
|
15
15
|
</a>
|
|
16
16
|
</li>
|
|
17
|
-
|
|
18
|
-
<li
|
|
19
|
-
<a class="dropdown-item" component="post/purge" role="menuitem" tabindex="-1" href="#" class="
|
|
17
|
+
{{{ if posts.display_purge_tools }}}
|
|
18
|
+
<li {{{ if !posts.deleted }}}hidden{{{ end }}}>
|
|
19
|
+
<a class="dropdown-item" component="post/purge" role="menuitem" tabindex="-1" href="#" class="{{{ if !posts.deleted }}}hidden{{{ end }}}">
|
|
20
20
|
<span class="menu-icon"><i class="fa fa-fw fa-eraser"></i></span> [[topic:purge]]
|
|
21
21
|
</a>
|
|
22
22
|
</li>
|
|
23
|
-
|
|
23
|
+
{{{ end }}}
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
{{{ if posts.display_move_tools }}}
|
|
26
26
|
<li>
|
|
27
27
|
<a class="dropdown-item" component="post/move" role="menuitem" tabindex="-1" href="#">
|
|
28
28
|
<span class="menu-icon"><i class="fa fa-fw fa-arrows"></i></span> [[topic:move]]
|
|
29
29
|
</a>
|
|
30
30
|
</li>
|
|
31
|
-
|
|
31
|
+
{{{ end }}}
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
{{{ if posts.display_change_owner_tools }}}
|
|
34
34
|
<li>
|
|
35
35
|
<a class="dropdown-item" component="post/change-owner" role="menuitem" tabindex="-1" href="#">
|
|
36
36
|
<span class="menu-icon"><i class="fa fa-fw fa-user"></i></span> [[topic:change-owner]]
|
|
37
37
|
</a>
|
|
38
38
|
</li>
|
|
39
|
-
|
|
39
|
+
{{{ end }}}
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
{{{ if posts.ip }}}
|
|
42
42
|
<li>
|
|
43
43
|
<a class="dropdown-item" component="post/copy-ip" role="menuitem" tabindex="-1" href="#" data-clipboard-text="{posts.ip}">
|
|
44
44
|
<span class="menu-icon" ><i class="fa fa-fw fa-copy"></i></span> [[topic:copy-ip]] {posts.ip}
|
|
45
45
|
</a>
|
|
46
46
|
</li>
|
|
47
|
-
|
|
47
|
+
{{{ if posts.display_ip_ban }}}
|
|
48
48
|
<li>
|
|
49
49
|
<a class="dropdown-item" component="post/ban-ip" role="menuitem" tabindex="-1" href="#" data-ip="{posts.ip}">
|
|
50
50
|
<span class="menu-icon"><i class="fa fa-fw fa-ban"></i></span> [[topic:ban-ip]] {posts.ip}
|
|
51
51
|
</a>
|
|
52
52
|
</li>
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
{{{ end }}}
|
|
54
|
+
{{{ end }}}
|
|
55
|
+
{{{ end }}}
|
|
56
56
|
|
|
57
|
-
{{{each posts.tools}}}
|
|
57
|
+
{{{ each posts.tools }}}
|
|
58
58
|
<li {{{ if ./disabled }}}class="disabled" {{{ end }}}>
|
|
59
59
|
<a class="dropdown-item" {{{ if ./action}}}component="{./action}"{{{ end }}} role="menuitem" tabindex="-1" href="{{{ if ./href }}}{./href}{{{ else }}}#{{{ end }}}">
|
|
60
|
-
<span class="menu-icon"><i class="fa fa-fw {
|
|
60
|
+
<span class="menu-icon"><i class="fa fa-fw {./icon}"></i></span> {{./html}}
|
|
61
61
|
</a>
|
|
62
62
|
</li>
|
|
63
|
-
{{{end}}}
|
|
63
|
+
{{{ end }}}
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
{{{ if !posts.deleted }}}
|
|
66
|
+
{{{ if posts.display_history }}}
|
|
67
67
|
<li>
|
|
68
68
|
<a class="dropdown-item" component="post/view-history" role="menuitem" tabindex="-1" href="#">
|
|
69
69
|
<span class="menu-icon"><i class="fa fa-fw fa-history"></i></span> [[topic:view-history]]
|
|
70
70
|
</a>
|
|
71
71
|
</li>
|
|
72
|
-
|
|
72
|
+
{{{ end }}}
|
|
73
73
|
|
|
74
74
|
{{{ if config.loggedIn }}}
|
|
75
75
|
<li>
|
|
76
76
|
<a class="dropdown-item" component="post/bookmark" role="menuitem" tabindex="-1" href="#" data-bookmarked="{posts.bookmarked}">
|
|
77
77
|
<span class="menu-icon">
|
|
78
|
-
<i component="post/bookmark/on" class="fa fa-fw fa-heart
|
|
79
|
-
<i component="post/bookmark/off" class="fa fa-fw fa-heart-o
|
|
78
|
+
<i component="post/bookmark/on" class="fa fa-fw fa-heart {{{ if !posts.bookmarked }}}hidden{{{ end }}}"></i>
|
|
79
|
+
<i component="post/bookmark/off" class="fa fa-fw fa-heart-o {{{ if posts.bookmarked }}}hidden{{{ end }}}"></i>
|
|
80
80
|
</span>
|
|
81
81
|
<span class="bookmark-text">[[topic:bookmark]]</span>
|
|
82
82
|
<span component="post/bookmark-count" class="bookmarkCount badge" data-bookmarks="{posts.bookmarks}">{posts.bookmarks}</span>
|
|
@@ -90,16 +90,16 @@
|
|
|
90
90
|
</a>
|
|
91
91
|
</li>
|
|
92
92
|
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
{{{ if postSharing.length }}}
|
|
94
|
+
{{{ if config.loggedIn }}}<li class="dropdown-divider"></li>{{{ end }}}
|
|
95
95
|
<li class="dropdown-header">[[topic:share_this_post]]</li>
|
|
96
|
-
|
|
97
|
-
{{{each postSharing}}}
|
|
96
|
+
{{{ end }}}
|
|
97
|
+
{{{ each postSharing }}}
|
|
98
98
|
<li>
|
|
99
|
-
<a class="dropdown-item" role="menuitem" component="share/{
|
|
99
|
+
<a class="dropdown-item" role="menuitem" component="share/{./id}" tabindex="-1" href="#"><span class="menu-icon"><i class="fa fa-fw {./class}"></i></span> {./name}</a>
|
|
100
100
|
</li>
|
|
101
|
-
{{{end}}}
|
|
102
|
-
|
|
101
|
+
{{{ end }}}
|
|
102
|
+
{{{ end }}}
|
|
103
103
|
|
|
104
104
|
{{{ if posts.display_flag_tools }}}
|
|
105
105
|
<li class="dropdown-divider"></li>
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
{{{ end }}}
|
|
119
119
|
{{{ end }}}
|
|
120
120
|
|
|
121
|
-
|
|
121
|
+
{{{ if posts.display_moderator_tools }}}
|
|
122
122
|
{{{ if posts.flags.exists }}}
|
|
123
123
|
<li>
|
|
124
124
|
<a class="dropdown-item" role="menuitem" tabindex="-1" href="{config.relative_path}/flags/{posts.flags.flagId}"><i class="fa fa-fw fa-exclamation-circle"></i> [[topic:view-flag-report]]</a>
|
|
@@ -129,4 +129,4 @@
|
|
|
129
129
|
</li>
|
|
130
130
|
{{{ end }}}
|
|
131
131
|
{{{ end }}}
|
|
132
|
-
|
|
132
|
+
{{{ end }}}
|
|
@@ -33,14 +33,14 @@
|
|
|
33
33
|
{{{ end }}}
|
|
34
34
|
{{{ end }}}
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
{{{ if posts.user.banned }}}
|
|
37
37
|
<span class="badge bg-danger rounded-1">[[user:banned]]</span>
|
|
38
|
-
|
|
38
|
+
{{{ end }}}
|
|
39
39
|
|
|
40
40
|
<div class="d-flex gap-1 hidden-xs align-items-center">
|
|
41
41
|
{{{ if posts.toPid }}}
|
|
42
42
|
<span class="text-muted">replied to</span><!-- FIX THIS, DOES NOT l10n PROPERLY -->
|
|
43
|
-
<a component="post/parent" data-topid="{posts.toPid}" href="{config.relative_path}/post/{posts.toPid}"
|
|
43
|
+
<a component="post/parent" data-topid="{posts.toPid}" href="{config.relative_path}/post/{posts.toPid}">{{{ if posts.parent.username }}}{posts.parent.username}{{{ else }}}[[global:guest]]{{{ end }}}</a>
|
|
44
44
|
{{{ else }}}
|
|
45
45
|
<span class="text-muted">wrote</span><!-- FIX THIS, DOES NOT l10n PROPERLY -->
|
|
46
46
|
{{{ end }}}
|
|
@@ -53,12 +53,12 @@
|
|
|
53
53
|
|
|
54
54
|
<div>
|
|
55
55
|
<span>
|
|
56
|
-
|
|
56
|
+
{{{ if posts.user.custom_profile_info.length }}}
|
|
57
57
|
|
|
|
58
|
-
{{{each posts.user.custom_profile_info}}}
|
|
58
|
+
{{{ each posts.user.custom_profile_info }}}
|
|
59
59
|
{posts.user.custom_profile_info.content}
|
|
60
|
-
{{{end}}}
|
|
61
|
-
|
|
60
|
+
{{{ end }}}
|
|
61
|
+
{{{ end }}}
|
|
62
62
|
</span>
|
|
63
63
|
</div>
|
|
64
64
|
<div class="d-flex align-items-center gap-1 flex-grow-1 justify-content-end">
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
{{{ if privileges.topics:reply }}}
|
|
2
2
|
<div component="topic/quickreply/container" class="quick-reply d-flex gap-3">
|
|
3
3
|
<div class="icon hidden-xs">
|
|
4
|
-
<a class="d-inline-block position-relative" href="
|
|
4
|
+
<a class="d-inline-block position-relative" href="{{{ if loggedInUser.userslug }}}{config.relative_path}/user/{loggedInUser.userslug}{{{ else }}}#{{{ end }}}">
|
|
5
5
|
{buildAvatar(loggedInUser, "48px", true, "", "user/picture")}
|
|
6
6
|
{{{ if loggedInUser.status }}}<span component="user/status" class="position-absolute translate-middle-y badge border border-white border-2 rounded-circle status {loggedInUser.status}"><span class="visually-hidden">[[global:{loggedInUser.status}]]</span></span>{{{ end }}}
|
|
7
7
|
</a>
|
|
@@ -25,4 +25,4 @@
|
|
|
25
25
|
</form>
|
|
26
26
|
|
|
27
27
|
</div>
|
|
28
|
-
|
|
28
|
+
{{{ end }}}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{{{ if privileges.editable }}}
|
|
2
|
-
<li
|
|
3
|
-
<li
|
|
4
|
-
<li
|
|
5
|
-
<li
|
|
2
|
+
<li {{{ if locked }}}hidden{{{ end }}}><a component="topic/lock" href="#" class="dropdown-item {{{ if locked }}}hidden{{{ end }}}"><i class="fa fa-fw fa-lock"></i> [[topic:thread_tools.lock]]</a></li>
|
|
3
|
+
<li {{{ if !locked }}}hidden{{{ end }}}><a component="topic/unlock" href="#" class="dropdown-item {{{ if !locked }}}hidden{{{ end }}}"><i class="fa fa-fw fa-unlock"></i> [[topic:thread_tools.unlock]]</a></li>
|
|
4
|
+
<li {{{ if pinned }}}hidden{{{ end }}}><a component="topic/pin" href="#" class="dropdown-item {{{ if pinned }}}hidden{{{ end }}}"><i class="fa fa-fw fa-thumb-tack"></i> [[topic:thread_tools.pin]]</a></li>
|
|
5
|
+
<li {{{ if !pinned }}}hidden{{{ end }}}><a component="topic/unpin" href="#" class="dropdown-item {{{ if !pinned }}}hidden{{{ end }}}"><i class="fa fa-fw fa-thumb-tack fa-rotate-90"></i> [[topic:thread_tools.unpin]]</a></li>
|
|
6
6
|
|
|
7
7
|
<li><a component="topic/move" class="dropdown-item" href="#"><i class="fa fa-fw fa-arrows"></i> [[topic:thread_tools.move]]</a></li>
|
|
8
8
|
<li><a component="topic/merge" class="dropdown-item" href="#"><i class="fa fa-fw fa-code-fork"></i> [[topic:thread_tools.merge]]</a></li>
|
|
@@ -14,19 +14,19 @@
|
|
|
14
14
|
<li class="dropdown-divider"></li>
|
|
15
15
|
{{{ end }}}
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
<li
|
|
17
|
+
{{{ if privileges.deletable }}}
|
|
18
|
+
<li {{{ if deleted }}}hidden{{{ end }}}><a component="topic/delete" href="#" class="dropdown-item {{{ if deleted }}}hidden{{{ end }}}"><i class="fa fa-fw fa-trash-o"></i> [[topic:thread_tools.delete]]</a></li>
|
|
19
19
|
{{{ if !scheduled }}}
|
|
20
|
-
<li
|
|
20
|
+
<li {{{ if !deleted }}}hidden{{{ end }}}><a component="topic/restore" href="#" class="dropdown-item {{{ if !deleted }}}hidden{{{ end }}}"><i class="fa fa-fw fa-history"></i> [[topic:thread_tools.restore]]</a></li>
|
|
21
21
|
{{{ end }}}
|
|
22
|
-
|
|
23
|
-
<li
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
{{{ if privileges.purge }}]
|
|
23
|
+
<li {{{ if !deleted }}}hidden{{{ end }}}><a component="topic/purge" href="#" class="dropdown-item {{{ if !deleted }}}hidden{{{ end }}}"><i class="fa fa-fw fa-eraser"></i> [[topic:thread_tools.purge]]</a></li>
|
|
24
|
+
{{{ end }}}
|
|
25
|
+
{{{ if privileges.isAdminOrMod }}}
|
|
26
26
|
<li><a component="topic/delete/posts" class="dropdown-item" href="#"><i class="fa fa-fw fa-trash-o"></i> [[topic:thread_tools.delete-posts]]</a></li>
|
|
27
|
-
|
|
27
|
+
{{{ end }}}
|
|
28
28
|
|
|
29
|
-
{{{each thread_tools}}}
|
|
30
|
-
<li><a href="#" class="dropdown-item {
|
|
31
|
-
{{{end}}}
|
|
32
|
-
|
|
29
|
+
{{{ each thread_tools }}}
|
|
30
|
+
<li><a href="#" class="dropdown-item {./class}"><i class="fa fa-fw {./icon}"></i> {./title}</a></li>
|
|
31
|
+
{{{ end }}}
|
|
32
|
+
{{{ end }}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<nav class="topic-list-header {{{ if config.stickyToolbar }}} sticky-tools{{{ end }}} navbar navbar-expand p-0 border-0 rounded">
|
|
1
|
+
<nav class="topic-list-header {{{ if config.stickyToolbar }}} sticky-tools{{{ end }}} navbar navbar-expand p-0 border-0 rounded mb-3">
|
|
2
2
|
<div class="card card-header flex-row p-2 gap-1 border rounded ff-secondary w-100">
|
|
3
3
|
<ul class="navbar-nav me-auto gap-2 align-items-center">
|
|
4
4
|
{{{ if template.category }}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<ul component="category" class="list-unstyled topic-list
|
|
1
|
+
<ul component="category" class="list-unstyled topic-list overflow-auto position-relative" itemscope itemtype="http://www.schema.org/ItemList" data-nextstart="{nextStart}" data-set="{set}">
|
|
2
2
|
|
|
3
3
|
{{{ each topics }}}
|
|
4
4
|
<li component="category/topic" class="category-item position-relative {function.generateTopicClass}" <!-- IMPORT partials/data/category.tpl -->>
|