nodebb-theme-persona 14.2.42 → 15.0.0-beta.2
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 +2 -2
- package/scss/account.scss +0 -139
- package/scss/persona.scss +0 -1
- package/templates/account/blocks.tpl +1 -1
- package/templates/account/categories.tpl +1 -1
- package/templates/account/consent.tpl +2 -0
- package/templates/account/info.tpl +7 -7
- package/templates/account/profile.tpl +69 -23
- package/templates/account/settings.tpl +6 -6
- package/templates/account/tags.tpl +1 -1
- package/templates/account/uploads.tpl +1 -1
- package/templates/category.tpl +2 -2
- package/templates/header.tpl +2 -2
- package/templates/modules/usercard.tpl +1 -1
- package/templates/notifications.tpl +2 -2
- package/templates/partials/account/category-item.tpl +2 -2
- package/templates/partials/account/header.tpl +11 -11
- package/templates/partials/account/menu.tpl +3 -3
- package/templates/partials/account/session-list.tpl +1 -1
- package/templates/partials/breadcrumbs.tpl +1 -1
- package/templates/partials/buttons/newTopic.tpl +1 -1
- package/templates/partials/categories/item.tpl +3 -3
- package/templates/partials/categories/lastpost.tpl +2 -2
- package/templates/partials/categories/link.tpl +5 -11
- package/templates/partials/chats-menu.tpl +1 -1
- package/templates/partials/cookie-consent.tpl +2 -2
- package/templates/partials/header/user-menu.tpl +1 -1
- package/templates/partials/menu.tpl +6 -6
- package/templates/partials/notifications_list.tpl +3 -3
- package/templates/partials/posts_list_item.tpl +2 -2
- package/templates/partials/quick-category-search-results.tpl +2 -2
- package/templates/partials/quick-search-results.tpl +2 -2
- package/templates/partials/search-filters.tpl +2 -2
- package/templates/partials/search-results.tpl +5 -5
- package/templates/partials/tags_list.tpl +4 -1
- package/templates/partials/topic/event.tpl +1 -1
- package/templates/partials/topic/navigation-post.tpl +2 -2
- package/templates/partials/topic/necro-post.tpl +1 -1
- package/templates/partials/topic/post.tpl +5 -5
- package/templates/partials/topic/quickreply.tpl +1 -1
- package/templates/partials/topics_list.tpl +5 -5
- package/templates/partials/users/item.tpl +1 -1
- package/templates/topic.tpl +2 -10
- package/templates/world.tpl +4 -4
- package/scss/groups.scss +0 -111
- package/templates/groups/details.tpl +0 -114
- package/templates/groups/list.tpl +0 -46
- package/templates/groups/members.tpl +0 -6
- package/templates/partials/groups/admin.tpl +0 -96
- package/templates/partials/groups/badge.tpl +0 -1
- package/templates/partials/groups/invited.tpl +0 -33
- package/templates/partials/groups/list.tpl +0 -21
- package/templates/partials/groups/memberlist.tpl +0 -45
- package/templates/partials/groups/pending.tpl +0 -28
- package/templates/partials/toast.tpl +0 -19
package/package.json
CHANGED
package/scss/account.scss
CHANGED
|
@@ -15,136 +15,6 @@
|
|
|
15
15
|
margin-right: auto;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
.cover {
|
|
19
|
-
background-size: cover;
|
|
20
|
-
background-repeat: no-repeat;
|
|
21
|
-
height: 200px;
|
|
22
|
-
position: relative;
|
|
23
|
-
margin-bottom: 1em;
|
|
24
|
-
background-origin: content-box;
|
|
25
|
-
width: 100%;
|
|
26
|
-
top: var(--panel-offset);
|
|
27
|
-
position: absolute;
|
|
28
|
-
left: auto;
|
|
29
|
-
right: 0px;
|
|
30
|
-
|
|
31
|
-
.avatar-wrapper {
|
|
32
|
-
position: absolute;
|
|
33
|
-
left: 50%;
|
|
34
|
-
margin-left: -64px;
|
|
35
|
-
top: 128px;
|
|
36
|
-
border: 4px solid var(--bs-body-bg);
|
|
37
|
-
background-color: var(--bs-body-bg);
|
|
38
|
-
border-radius: 50%;
|
|
39
|
-
|
|
40
|
-
.persona-fab.btn-morph {
|
|
41
|
-
top: 93px;
|
|
42
|
-
right: 4px;
|
|
43
|
-
position: absolute;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
.status {
|
|
47
|
-
position: absolute;
|
|
48
|
-
font-size: 23px;
|
|
49
|
-
top: 17px;
|
|
50
|
-
right: -3px;
|
|
51
|
-
padding: 10px;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
.chat, .follow {
|
|
55
|
-
position: absolute;
|
|
56
|
-
width: 30px;
|
|
57
|
-
height: 30px;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
.chat {
|
|
61
|
-
left: -1px;
|
|
62
|
-
bottom: 1px;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
.follow {
|
|
66
|
-
right: 1px;
|
|
67
|
-
bottom: 1px;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
&:hover .controls, .controls:focus-within {
|
|
72
|
-
opacity: 0.8;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
.controls {
|
|
76
|
-
text-align: center;
|
|
77
|
-
height: 200px;
|
|
78
|
-
line-height: 200px;
|
|
79
|
-
opacity: 0;
|
|
80
|
-
@include transition(opacity .15s linear);
|
|
81
|
-
cursor: pointer;
|
|
82
|
-
pointer-events: none;
|
|
83
|
-
|
|
84
|
-
> * {
|
|
85
|
-
pointer-events: all;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
.fa {
|
|
89
|
-
color: white;
|
|
90
|
-
background-color: #333;
|
|
91
|
-
opacity: 1;
|
|
92
|
-
margin: 15px;
|
|
93
|
-
padding: 5px;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
&.active {
|
|
98
|
-
&:hover {
|
|
99
|
-
cursor: move;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
.controls {
|
|
103
|
-
> * {
|
|
104
|
-
display: none;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
.save {
|
|
109
|
-
display: inline-block;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
&.saving {
|
|
114
|
-
.save {
|
|
115
|
-
display: none;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
.indicator {
|
|
119
|
-
display: inline-block;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
.save, .indicator {
|
|
124
|
-
display: inline-block;
|
|
125
|
-
position: absolute;
|
|
126
|
-
top: 1em;
|
|
127
|
-
right: 2em;
|
|
128
|
-
opacity: 1;
|
|
129
|
-
background-color: $primary;
|
|
130
|
-
color: $gray-200;
|
|
131
|
-
padding: 0.5em;
|
|
132
|
-
font-weight: bold;
|
|
133
|
-
|
|
134
|
-
&:hover {
|
|
135
|
-
cursor: pointer;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
.save {
|
|
140
|
-
display: none;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
.indicator {
|
|
144
|
-
display: none;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
18
|
margin-top: 200px;
|
|
149
19
|
|
|
150
20
|
.container {
|
|
@@ -272,12 +142,3 @@
|
|
|
272
142
|
}
|
|
273
143
|
}
|
|
274
144
|
|
|
275
|
-
.user-picture-label {
|
|
276
|
-
font-size:20px;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
.account-username{
|
|
281
|
-
font-size:20px;
|
|
282
|
-
font-weight:bold;
|
|
283
|
-
}
|
package/scss/persona.scss
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
<li component="blocks/search/match">
|
|
17
17
|
<div class="dropdown-item rounded-1 d-flex flex-nowrap gap-2 justify-content-between align-items-center" role="menuitem">
|
|
18
18
|
<div class="text-truncate">
|
|
19
|
-
<a href="{config.relative_path}/uid/{../uid}">{buildAvatar(edit, "24px", true)} {../username}</a>
|
|
19
|
+
<a href="{config.relative_path}/uid/{../uid}">{{buildAvatar(edit, "24px", true)}} {../username}</a>
|
|
20
20
|
</div>
|
|
21
21
|
|
|
22
22
|
<button class="btn btn-sm btn-outline-danger text-nowrap {{{ if ./isBlocked }}}hidden{{{ end }}}" data-uid="{./uid}" data-action="block">[[user:block-user]]</button>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
<div>
|
|
4
4
|
<div class="d-flex justify-content-between align-items-center mb-3">
|
|
5
|
-
<h1 class="fs-4">{title}</h1>
|
|
5
|
+
<h1 class="fs-4">{tx(title)}</h1>
|
|
6
6
|
<div class="mb-2">
|
|
7
7
|
<div class="dropdown bottom-sheet" component="category/watch/all">
|
|
8
8
|
<button class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" type="button" aria-haspopup="true" aria-expanded="false">
|
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
<p><strong>[[user:consent.right-to-data-portability]]</strong></p>
|
|
52
52
|
<p>[[user:consent.right-to-data-portability-description]]</p>
|
|
53
53
|
|
|
54
|
+
{{{ if canExport }}}
|
|
54
55
|
<div class="btn-group-vertical d-grid">
|
|
55
56
|
<a data-action="export-profile" class="btn btn-outline-secondary">
|
|
56
57
|
<i class="fa fa-download"></i> [[user:consent.export-profile]]
|
|
@@ -62,6 +63,7 @@
|
|
|
62
63
|
<i class="fa fa-download"></i> [[user:consent.export-uploads]]
|
|
63
64
|
</a>
|
|
64
65
|
</div>
|
|
66
|
+
{{{ end }}}
|
|
65
67
|
</div>
|
|
66
68
|
</div>
|
|
67
69
|
</div>
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
<div class="mb-4 pb-3 border-bottom">
|
|
16
16
|
<h6>[[user:info.invited-by]]</h6>
|
|
17
17
|
<div class="d-flex align-items-center gap-2">
|
|
18
|
-
<a href="">{buildAvatar(invitedBy, "24px", true)}</a>
|
|
18
|
+
<a href="">{{buildAvatar(invitedBy, "24px", true)}}</a>
|
|
19
19
|
<a href="">{invitedBy.username}</a>
|
|
20
20
|
</div>
|
|
21
21
|
</div>
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
<div>
|
|
44
44
|
{{{ if ./byUid }}}
|
|
45
45
|
<a class="lh-1" href="{{{ if ./byUser.userslug }}}{config.relative_path}/user/{./byUser.userslug}{{{ else }}}#{{{ end }}}">
|
|
46
|
-
{buildAvatar(./byUser, "18px", true)}</a>
|
|
46
|
+
{{buildAvatar(./byUser, "18px", true)}}</a>
|
|
47
47
|
{{{ end }}}
|
|
48
48
|
<span class="timeago text-sm text-secondary lh-1 align-middle" title="{./timestampISO}"></span>
|
|
49
49
|
</div>
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
<div>
|
|
64
64
|
{{{ if ./byUid }}}
|
|
65
65
|
<a class="lh-1" href="{{{ if ./byUser.userslug }}}{config.relative_path}/user/{./byUser.userslug}{{{ else }}}#{{{ end }}}">
|
|
66
|
-
{buildAvatar(./byUser, "18px", true)}</a>
|
|
66
|
+
{{buildAvatar(./byUser, "18px", true)}}</a>
|
|
67
67
|
{{{ end }}}
|
|
68
68
|
<span class="timeago text-sm text-secondary lh-1 align-middle" title="{./timestampISO}"></span>
|
|
69
69
|
</div>
|
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
<span class="text-sm">[[user:info.reported-by]]</span>
|
|
108
108
|
<div class="d-flex text-nowrap">
|
|
109
109
|
{{{ each ./reports }}}
|
|
110
|
-
<a style="width: 18px; z-index: 3;" class="text-decoration-none" href="{config.relative_path}/user/{./reporter.userslug}">{buildAvatar(./reporter, "24px", true)}</a>
|
|
110
|
+
<a style="width: 18px; z-index: 3;" class="text-decoration-none" href="{config.relative_path}/user/{./reporter.userslug}">{{buildAvatar(./reporter, "24px", true)}}</a>
|
|
111
111
|
{{{ end }}}
|
|
112
112
|
</div>
|
|
113
113
|
</div>
|
|
@@ -138,7 +138,7 @@
|
|
|
138
138
|
<li class="mb-4 border-bottom">
|
|
139
139
|
<div class="mb-1 d-flex align-items-center justify-content-between">
|
|
140
140
|
<div>
|
|
141
|
-
<a href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(./user, "24px", true)}</a>
|
|
141
|
+
<a href="{config.relative_path}/user/{./user.userslug}">{{buildAvatar(./user, "24px", true)}}</a>
|
|
142
142
|
<strong>
|
|
143
143
|
<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>
|
|
144
144
|
</strong>
|
|
@@ -192,7 +192,7 @@
|
|
|
192
192
|
<li class="mb-4 border-bottom">
|
|
193
193
|
<div class="mb-1 d-flex align-items-center justify-content-between">
|
|
194
194
|
<div>
|
|
195
|
-
<a href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(./user, "24px", true)}</a>
|
|
195
|
+
<a href="{config.relative_path}/user/{./user.userslug}">{{buildAvatar(./user, "24px", true)}}</a>
|
|
196
196
|
<strong>
|
|
197
197
|
<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>
|
|
198
198
|
</strong>
|
|
@@ -240,7 +240,7 @@
|
|
|
240
240
|
|
|
241
241
|
<div data-id="{./id}">
|
|
242
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>
|
|
243
|
+
<a href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}">{{buildAvatar(./user, "24px", true)}}</a>
|
|
244
244
|
|
|
245
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
246
|
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
{{{ end }}}
|
|
37
37
|
|
|
38
38
|
<!-- IF aboutme -->
|
|
39
|
-
<div component="aboutme" class="text-center aboutme text-secondary w-75 mx-auto text-center">{aboutmeParsed}</div>
|
|
39
|
+
<div component="aboutme" class="text-center aboutme text-secondary w-75 mx-auto text-center">{{txEscape(aboutmeParsed)}}</div>
|
|
40
40
|
<!-- ENDIF aboutme -->
|
|
41
41
|
|
|
42
42
|
<div class="account-stats fs-1 text-center mb-3">
|
|
@@ -156,28 +156,74 @@
|
|
|
156
156
|
<!-- ENDIF ips.length -->
|
|
157
157
|
|
|
158
158
|
<div class="row">
|
|
159
|
-
{{{ if bestPosts.length }}}
|
|
160
|
-
<div class="col-
|
|
161
|
-
<
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
{{{
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
159
|
+
{{{ if (bestPosts.length || latestPosts.length) }}}
|
|
160
|
+
<div class="col-12">
|
|
161
|
+
<ul class="nav nav-tabs mb-3" role="tablist">
|
|
162
|
+
{{{ if bestPosts.length }}}
|
|
163
|
+
<li class="nav-item" role="presentation">
|
|
164
|
+
<button
|
|
165
|
+
class="nav-link active"
|
|
166
|
+
id="best-posts-tab"
|
|
167
|
+
data-bs-toggle="tab"
|
|
168
|
+
data-bs-target="#best-posts-pane"
|
|
169
|
+
type="button"
|
|
170
|
+
role="tab"
|
|
171
|
+
aria-controls="best-posts-pane"
|
|
172
|
+
aria-selected="true"
|
|
173
|
+
>
|
|
174
|
+
[[pages:account/best, {username}]]
|
|
175
|
+
</button>
|
|
176
|
+
</li>
|
|
177
|
+
{{{ end }}}
|
|
178
|
+
{{{ if latestPosts.length }}}
|
|
179
|
+
<li class="nav-item" role="presentation">
|
|
180
|
+
<button
|
|
181
|
+
class="nav-link {{{ if !bestPosts.length }}}active{{{ end }}}"
|
|
182
|
+
id="latest-posts-tab"
|
|
183
|
+
data-bs-toggle="tab"
|
|
184
|
+
data-bs-target="#latest-posts-pane"
|
|
185
|
+
type="button"
|
|
186
|
+
role="tab"
|
|
187
|
+
aria-controls="latest-posts-pane"
|
|
188
|
+
aria-selected="{{{ if !bestPosts.length }}}true{{{ else }}}false{{{ end }}}"
|
|
189
|
+
>
|
|
190
|
+
[[pages:account/latest-posts, {username}]]
|
|
191
|
+
</button>
|
|
192
|
+
</li>
|
|
193
|
+
{{{ end }}}
|
|
194
|
+
</ul>
|
|
195
|
+
|
|
196
|
+
<div class="tab-content">
|
|
197
|
+
{{{ if bestPosts.length }}}
|
|
198
|
+
<div
|
|
199
|
+
class="tab-pane fade show active"
|
|
200
|
+
id="best-posts-pane"
|
|
201
|
+
role="tabpanel"
|
|
202
|
+
aria-labelledby="best-posts-tab"
|
|
203
|
+
tabindex="0"
|
|
204
|
+
>
|
|
205
|
+
<ul component="posts" class="posts-list list-unstyled">
|
|
206
|
+
{{{each bestPosts}}}
|
|
207
|
+
<!-- IMPORT partials/posts_list_item.tpl -->
|
|
208
|
+
{{{end}}}
|
|
209
|
+
</ul>
|
|
210
|
+
</div>
|
|
211
|
+
{{{ end }}}
|
|
212
|
+
{{{ if latestPosts.length }}}
|
|
213
|
+
<div
|
|
214
|
+
class="tab-pane fade {{{ if !bestPosts.length }}}show active{{{ end }}}"
|
|
215
|
+
id="latest-posts-pane"
|
|
216
|
+
role="tabpanel"
|
|
217
|
+
aria-labelledby="latest-posts-tab"
|
|
218
|
+
tabindex="0"
|
|
219
|
+
>
|
|
220
|
+
<ul component="posts" class="posts-list list-unstyled">
|
|
221
|
+
{{{each latestPosts}}}
|
|
222
|
+
<!-- IMPORT partials/posts_list_item.tpl -->
|
|
223
|
+
{{{end}}}
|
|
224
|
+
</ul>
|
|
225
|
+
</div>
|
|
226
|
+
{{{ end }}}
|
|
181
227
|
</div>
|
|
182
228
|
</div>
|
|
183
229
|
{{{ end }}}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<div class="card card-body mb-3">
|
|
9
9
|
<select class="form-select" id="bootswatchSkin" data-property="bootswatchSkin">
|
|
10
10
|
{{{each bootswatchSkinOptions}}}
|
|
11
|
-
<option value="{bootswatchSkinOptions.value}"
|
|
11
|
+
<option value="{bootswatchSkinOptions.value}" {{{ if bootswatchSkinOptions.selected }}}selected{{{ end }}}>{tx(bootswatchSkinOptions.name)}</option>
|
|
12
12
|
{{{end}}}
|
|
13
13
|
</select>
|
|
14
14
|
</div>
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
<div component="chat/allow/list" class="d-flex flex-wrap gap-2 mb-2">
|
|
62
62
|
{{{ each settings.chatAllowListUsers }}}
|
|
63
63
|
<div component="chat/allow/list/user" data-uid="{./uid}" class="d-flex px-2 py-1 rounded-1 text-bg-light gap-2 align-items-center text-sm">
|
|
64
|
-
{buildAvatar(@value, "16px", true)} {./username}
|
|
64
|
+
{{buildAvatar(@value, "16px", true)}} {./username}
|
|
65
65
|
<button component="chat/allow/delete" data-uid="{./uid}" class="btn btn-light btn-sm py-0"><i class="fa fa-times fa-xs text-danger"></i></button>
|
|
66
66
|
</div>
|
|
67
67
|
{{{ end }}}
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
<div component="chat/deny/list" class="d-flex flex-wrap gap-2 mb-2">
|
|
77
77
|
{{{ each settings.chatDenyListUsers }}}
|
|
78
78
|
<div component="chat/deny/list/user" data-uid="{./uid}" class="d-flex px-2 py-1 rounded-1 text-bg-light gap-2 align-items-center text-sm">
|
|
79
|
-
{buildAvatar(@value, "16px", true)} {./username}
|
|
79
|
+
{{buildAvatar(@value, "16px", true)}} {./username}
|
|
80
80
|
<button component="chat/deny/delete" data-uid="{./uid}" class="btn btn-light btn-sm py-0"><i class="fa fa-times fa-xs text-danger"></i></button>
|
|
81
81
|
</div>
|
|
82
82
|
{{{ end }}}
|
|
@@ -165,7 +165,7 @@
|
|
|
165
165
|
<label class="form-label" for="dailyDigestFreq">[[user:digest-label]]</label>
|
|
166
166
|
<select class="form-select" id="dailyDigestFreq" data-property="dailyDigestFreq" autocomplete="off">
|
|
167
167
|
{{{each dailyDigestFreqOptions}}}
|
|
168
|
-
<option value="{
|
|
168
|
+
<option value="{./value}" {{{ if ./selected }}}selected="1"{{{ end }}}>{tx(./name)}</option>
|
|
169
169
|
{{{end}}}
|
|
170
170
|
</select>
|
|
171
171
|
<p class="form-text">[[user:digest-description]]</p>
|
|
@@ -176,7 +176,7 @@
|
|
|
176
176
|
{{{each customSettings}}}
|
|
177
177
|
<h4>{customSettings.title}</h4>
|
|
178
178
|
<div class="card card-body mb-3">
|
|
179
|
-
{customSettings.content}
|
|
179
|
+
{{customSettings.content}}
|
|
180
180
|
</div>
|
|
181
181
|
{{{end}}}
|
|
182
182
|
|
|
@@ -255,7 +255,7 @@
|
|
|
255
255
|
<tr component="notification/setting" class="align-middle">
|
|
256
256
|
<td style="width:100%;">
|
|
257
257
|
<div class="align-items-center">
|
|
258
|
-
<label class="text-sm tracking-tight" for="{./name}">{./label}</label>
|
|
258
|
+
<label class="text-sm tracking-tight" for="{./name}">{tx(./label)}</label>
|
|
259
259
|
<input type="hidden" data-property="{./name}" value="{./value}">
|
|
260
260
|
</div>
|
|
261
261
|
</td>
|
package/templates/category.tpl
CHANGED
|
@@ -19,13 +19,13 @@
|
|
|
19
19
|
{{{ end }}}
|
|
20
20
|
{{{ end }}}
|
|
21
21
|
|
|
22
|
-
<a href="{
|
|
22
|
+
<a href="{url}" class="d-inline-block">
|
|
23
23
|
<div class="alert alert-warning h-100 m-0 px-2 py-1 d-flex gap-1 align-items-center hide" id="new-topics-alert"><i class="fa fa-fw fa-rotate-right"></i>[[recent:load-new-posts]]</div>
|
|
24
24
|
</a>
|
|
25
25
|
</div>
|
|
26
26
|
<div component="category/controls" class="d-flex gap-1">
|
|
27
27
|
{{{ if !isNumber(cid) }}}
|
|
28
|
-
<a href="{
|
|
28
|
+
<a href="{./url}" class="btn btn-sm d-flex gap-2 align-items-center" data-ajaxify="false">
|
|
29
29
|
<i class="fa fa-external-link text-primary"></i>
|
|
30
30
|
<span class="fw-semibold">View Original</span>
|
|
31
31
|
</a>
|
package/templates/header.tpl
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
<html lang="{localeToHTML(userLang, defaultLang)}" {{{if languageDirection}}}data-dir="{languageDirection}" style="direction: {languageDirection};"{{{end}}}>
|
|
3
3
|
<head>
|
|
4
4
|
<title>{browserTitle}</title>
|
|
5
|
-
{{{each metaTags}}}{buildMetaTag(@value)}{{{end}}}
|
|
5
|
+
{{{each metaTags}}}{{buildMetaTag(@value)}}{{{end}}}
|
|
6
6
|
<link rel="stylesheet" type="text/css" href="{relative_path}/assets/client{{{if bootswatchSkin}}}-{bootswatchSkin}{{{end}}}{{{ if (languageDirection=="rtl") }}}-rtl{{{ end }}}.css?{config.cache-buster}" />
|
|
7
|
-
{{{each linkTags}}}{buildLinkTag(@value)}{{{end}}}
|
|
7
|
+
{{{each linkTags}}}{{buildLinkTag(@value)}}{{{end}}}
|
|
8
8
|
|
|
9
9
|
<script>
|
|
10
10
|
var config = JSON.parse('{{configJSON}}');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<div class="persona-usercard d-flex text-bg-dark">
|
|
2
2
|
<a href="{config.relative_path}/user/{userslug}">
|
|
3
|
-
{buildAvatar(@value, "150px", false, "shadow-none")}
|
|
3
|
+
{{buildAvatar(@value, "150px", false, "shadow-none")}}
|
|
4
4
|
</a>
|
|
5
5
|
<div class="usercard-body w-100 d-flex flex-column justify-content-between gap-2 py-2 px-3 overflow-hidden position-relative">
|
|
6
6
|
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
{{{ else }}}
|
|
15
15
|
<li role="presentation" class="category">
|
|
16
16
|
<a class="dropdown-item rounded-1 d-flex gap-3 align-items-center justify-content-between" role="menuitem" href="{config.relative_path}/notifications?filter={filters.filter}">
|
|
17
|
-
<span><i class="fa fa-fw {{{ if filters.selected }}}fa-check{{{ end }}}"></i> {filters.name}</span>
|
|
17
|
+
<span><i class="fa fa-fw {{{ if filters.selected }}}fa-check{{{ end }}}"></i> {tx(filters.name)}</span>
|
|
18
18
|
<span class="">{./count}</span>
|
|
19
19
|
</a>
|
|
20
20
|
</li>
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
<li data-nid="{notifications.nid}" class="{notifications.readClass} {{{ if !./read}}}unread{{{ end }}} d-flex pointer border p-3 mb-2 d-flex gap-2" component="notifications/item">
|
|
41
41
|
<div>
|
|
42
42
|
{{{ if notifications.from }}}
|
|
43
|
-
{buildAvatar(notifications.user, "24px", true)}
|
|
43
|
+
{{buildAvatar(notifications.user, "24px", true)}}
|
|
44
44
|
{{{ else }}}
|
|
45
45
|
{{{ if notifications.image }}}
|
|
46
46
|
<img width="24" height="24" src="{notifications.image}" />
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
<div class="content depth-{./depth} d-flex gap-2">
|
|
4
4
|
<div class="flex-grow-1 align-items-start d-flex gap-2">
|
|
5
5
|
<div>
|
|
6
|
-
{buildCategoryIcon(@value, "24px", "rounded-circle")}
|
|
6
|
+
{{buildCategoryIcon(@value, "24px", "rounded-circle")}}
|
|
7
7
|
</div>
|
|
8
8
|
<div class="d-grid gap-0">
|
|
9
9
|
<div class="title fw-semibold">
|
|
10
10
|
<!-- IMPORT partials/categories/link.tpl -->
|
|
11
11
|
</div>
|
|
12
12
|
{{{ if ./descriptionParsed }}}
|
|
13
|
-
<div class="description text-muted text-xs w-100 line-clamp-5">{./descriptionParsed}</div>
|
|
13
|
+
<div class="description text-muted text-xs w-100 line-clamp-5">{{./descriptionParsed}}</div>
|
|
14
14
|
{{{ end }}}
|
|
15
15
|
</div>
|
|
16
16
|
</div>
|
|
@@ -7,13 +7,13 @@
|
|
|
7
7
|
{{{end}}}
|
|
8
8
|
</div>
|
|
9
9
|
|
|
10
|
-
<div class="cover" component="account/cover" style="background-image: url({
|
|
11
|
-
<div class="avatar-wrapper" data-uid="{uid}">
|
|
12
|
-
{buildAvatar(@value, "128px", true)}
|
|
13
|
-
<span component="user/status" class="position-absolute border border-white border-2 rounded-circle status {status}"><span class="visually-hidden">[[global:{status}]]</span></span>
|
|
10
|
+
<div class="cover position-absolute start-0 top-0" component="account/cover" style="background-image: url({cover:url}); background-position: {cover:position};">
|
|
11
|
+
<div class="avatar-wrapper bg-body rounded-circle position-absolute start-50 top-100 translate-middle" data-uid="{uid}" style="padding: 4px;">
|
|
12
|
+
{{buildAvatar(@value, "128px", true)}}
|
|
13
|
+
<span component="user/status" class="fs-3 position-absolute border border-white border-2 rounded-circle status {status}" style="top: 17px; right: 3px; padding: 10px;"><span class="visually-hidden">[[global:{status}]]</span></span>
|
|
14
14
|
|
|
15
15
|
{{{ if !isSelf }}}
|
|
16
|
-
<button class="btn-morph persona-fab {{{ if isFollowing }}}heart{{{ else }}}plus{{{ end }}}" title="{{{ if isFollowing }}}[[global:unfollow]]{{{ else }}}[[global:follow]]{{{ end }}}">
|
|
16
|
+
<button style="top: 93px; right:4px;" class="btn-morph persona-fab position-absolute {{{ if isFollowing }}}heart{{{ else }}}plus{{{ end }}}" title="{{{ if isFollowing }}}[[global:unfollow]]{{{ else }}}[[global:follow]]{{{ end }}}">
|
|
17
17
|
<span>
|
|
18
18
|
<span class="s1"></span>
|
|
19
19
|
<span class="s2"></span>
|
|
@@ -25,13 +25,13 @@
|
|
|
25
25
|
|
|
26
26
|
<div class="container">
|
|
27
27
|
{{{ if (allowCoverPicture && canEdit) }}}
|
|
28
|
-
<div class="controls">
|
|
29
|
-
<
|
|
30
|
-
<
|
|
31
|
-
<
|
|
28
|
+
<div class="controls text-center">
|
|
29
|
+
<span class="upload p-2 m-2 rounded-1 text-bg-light opacity-75"><i class="fa fa-fw fa-upload"></i></span>
|
|
30
|
+
<span class="resize p-2 m-2 rounded-1 text-bg-light opacity-75"><i class="fa fa-fw fa-arrows"></i></span>
|
|
31
|
+
<span class="remove p-2 m-2 rounded-1 text-bg-light opacity-75"><i class="fa fa-fw fa-times"></i></span>
|
|
32
32
|
</div>
|
|
33
|
-
<a href="#" class="save">[[groups:cover-save]] <i class="fa fa-fw fa-floppy-o"></i></a>
|
|
34
|
-
<div class="indicator">[[groups:cover-saving]] <i class="fa fa-fw fa-refresh fa-spin"></i></div>
|
|
33
|
+
<a href="#" class="save btn btn-primary">[[groups:cover-save]] <i class="fa fa-fw fa-floppy-o"></i></a>
|
|
34
|
+
<div class="indicator text-bg-primary">[[groups:cover-saving]] <i class="fa fa-fw fa-refresh fa-spin"></i></div>
|
|
35
35
|
{{{ end }}}
|
|
36
36
|
|
|
37
37
|
<!-- IMPORT partials/account/menu.tpl -->
|
|
@@ -90,11 +90,11 @@
|
|
|
90
90
|
<li><a class="dropdown-item d-flex justify-content-between align-items-center" href="{config.relative_path}/user/{userslug}/uploads" role="menuitem">[[global:uploads]] <span class="badge bg-secondary rounded-pill ms-2" title="{counts.uploaded}">{formattedNumber(counts.uploaded)}</span></a></li>
|
|
91
91
|
<!-- ENDIF canEdit -->
|
|
92
92
|
|
|
93
|
-
{{{each profile_links}}}
|
|
93
|
+
{{{ each profile_links }}}
|
|
94
94
|
<!-- IF @first -->
|
|
95
95
|
<li role="separator" class="dropdown-divider"></li>
|
|
96
96
|
<!-- ENDIF @first -->
|
|
97
|
-
<li id="{
|
|
98
|
-
{{{end}}}
|
|
97
|
+
<li id="{./id}" class="plugin-link {{{ if ./public }}}public{{{ else }}}private{{{ end }}}"><a class="dropdown-item" href="{config.relative_path}/user/{userslug}/{profile_links.route}">{{{ if icon }}}<i class="fa fa-fw {./icon}"></i> {{{ end }}}{tx(./name)}</a></li>
|
|
98
|
+
{{{ end }}}
|
|
99
99
|
</ul>
|
|
100
100
|
</div>
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<button class="btn btn-sm btn-outline-secondary" type="button" data-action="revokeSession">[[user:revoke-session]]</button>
|
|
7
7
|
{{{ end }}}
|
|
8
8
|
{{{ end }}}
|
|
9
|
-
{userAgentIcons(@value)}
|
|
9
|
+
{{userAgentIcons(@value)}}
|
|
10
10
|
<i class="fa fa-circle text-{{{ if ./current }}}success{{{ else }}}muted{{{ end }}}"></i>
|
|
11
11
|
</div>
|
|
12
12
|
[[user:browser-version-on-platform, {./browser}, {./version}, {./platform}]]<br />
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta itemprop="position" content="{@index}" />
|
|
6
6
|
{{{ if ./url }}}<a href="{breadcrumbs.url}" itemprop="item">{{{ end }}}
|
|
7
7
|
<span itemprop="name">
|
|
8
|
-
{
|
|
8
|
+
{tx(./text)}
|
|
9
9
|
<!-- IF @last -->
|
|
10
10
|
<!-- IF !feeds:disableRSS -->
|
|
11
11
|
<!-- IF rssFeedUrl --><a class="ms-2 link-secondary" target="_blank" href="{rssFeedUrl}" itemprop="item"><i class="fa fa-rss-square"></i></a><!-- ENDIF rssFeedUrl --><!-- ENDIF !feeds:disableRSS -->
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<a role="menu-item" href="{config.relative_path}/compose?cid={categories.cid}">{categories.level}
|
|
11
11
|
<span component="category-markup">
|
|
12
12
|
<div class="category-item d-inline-block">
|
|
13
|
-
{buildCategoryIcon(@value, "24px", "rounded-circle")}
|
|
13
|
+
{{buildCategoryIcon(@value, "24px", "rounded-circle")}}
|
|
14
14
|
{categories.name}
|
|
15
15
|
</div>
|
|
16
16
|
</span>
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
<div class="d-flex col-md-7 gap-2 gap-lg-3">
|
|
5
5
|
<div class="flex-shrink-0">
|
|
6
|
-
{buildCategoryIcon(@value, "48px", "rounded-circle")}
|
|
6
|
+
{{buildCategoryIcon(@value, "48px", "rounded-circle")}}
|
|
7
7
|
</div>
|
|
8
8
|
<div class="flex-grow-1 d-flex flex-wrap gap-1">
|
|
9
9
|
<h2 class="title text-break fs-4 fw-semibold m-0 tracking-tight w-100">
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
</h2>
|
|
12
12
|
{{{ if ./descriptionParsed }}}
|
|
13
13
|
<div class="description text-muted text-sm w-100 line-clamp-sm-5">
|
|
14
|
-
{./descriptionParsed}
|
|
14
|
+
{{./descriptionParsed}}
|
|
15
15
|
</div>
|
|
16
16
|
{{{ end }}}
|
|
17
17
|
{{{ if ./teaser.timestampISO }}}
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
{{{ each ./children }}}
|
|
27
27
|
{{{ if !./isSection }}}
|
|
28
28
|
<li class="category-children-item small d-flex gap-1 align-items-center">
|
|
29
|
-
{buildCategoryIcon(@value, "24px", "rounded-circle")}
|
|
29
|
+
{{buildCategoryIcon(@value, "24px", "rounded-circle")}}
|
|
30
30
|
<a href="{{{ if ./link }}}{./link}{{{ else }}}{config.relative_path}/category/{./slug}{{{ end }}}" class="text-reset">{./name}</a>
|
|
31
31
|
</li>
|
|
32
32
|
{{{ end }}}
|