nodebb-theme-persona 13.3.44 → 13.3.46
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/scss/category.scss +2 -158
- package/scss/chats.scss +1 -1
- package/scss/modules/topics-list.scss +41 -0
- package/scss/persona.scss +1 -2
- package/scss/topic.scss +1 -89
- package/templates/categories.tpl +2 -2
- package/templates/header.tpl +2 -2
- package/templates/partials/categories/item.tpl +44 -46
- package/templates/partials/categories/lastpost.tpl +17 -19
- package/templates/partials/topic/post-menu-list.tpl +19 -19
- package/templates/partials/topic/post-menu.tpl +1 -1
- package/templates/partials/topic/quickreply.tpl +14 -16
- package/templates/partials/topic/stats.tpl +15 -12
- package/templates/partials/topic/tag.tpl +1 -1
- package/templates/partials/topic/tags.tpl +1 -3
- package/templates/partials/topics_list.tpl +111 -97
- package/templates/topic.tpl +5 -12
- package/scss/categories.scss +0 -205
package/package.json
CHANGED
package/scss/category.scss
CHANGED
|
@@ -1,161 +1,5 @@
|
|
|
1
|
-
.category {
|
|
2
|
-
|
|
3
|
-
.topic-list {
|
|
4
|
-
overflow: visible;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
> ul {
|
|
8
|
-
> li {
|
|
9
|
-
list-style: none;
|
|
10
|
-
|
|
11
|
-
&:not(.unread) {
|
|
12
|
-
.lastpost {
|
|
13
|
-
border-color: lighten($gray-600, 20%) !important;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
h2 a {
|
|
17
|
-
color: $text-muted;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
.info {
|
|
21
|
-
margin-left: 62px;
|
|
22
|
-
font-size: 0.75rem;
|
|
23
|
-
}
|
|
24
|
-
&.deleted {
|
|
25
|
-
-moz-opacity: 0.30;
|
|
26
|
-
opacity: 0.30;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
&.scheduled {
|
|
30
|
-
opacity: 0.7;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
.select {
|
|
34
|
-
position: relative;
|
|
35
|
-
@include pointer;
|
|
36
|
-
|
|
37
|
-
&:before {
|
|
38
|
-
content: "";
|
|
39
|
-
display: none;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
.fa-check {
|
|
43
|
-
padding: 14.5px; /* 14.5*2 + 15 + 2px border = 46px */
|
|
44
|
-
border-radius: 50%;
|
|
45
|
-
position: absolute;
|
|
46
|
-
font-size: 15px;
|
|
47
|
-
opacity: 0;
|
|
48
|
-
top: 0px;
|
|
49
|
-
left: 0px;
|
|
50
|
-
border: 1px solid transparent;
|
|
51
|
-
background: $white;
|
|
52
|
-
width: 100%;
|
|
53
|
-
height: 100%;
|
|
54
|
-
padding: 14px;
|
|
55
|
-
|
|
56
|
-
&:before {
|
|
57
|
-
@include pointer;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
.avatar {
|
|
62
|
-
opacity: 1;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
.fa-check, .avatar {
|
|
66
|
-
@include transition(.2s ease-in-out all);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
float: left;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
.avatar .select {
|
|
73
|
-
.fa-check {
|
|
74
|
-
border: 1px solid $success;
|
|
75
|
-
color: $success;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.avatar .select:hover {
|
|
80
|
-
.avatar {
|
|
81
|
-
opacity: 0;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
.fa-check {
|
|
85
|
-
border: 1px solid $success;
|
|
86
|
-
color: $success;
|
|
87
|
-
opacity: 1;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
&.selected {
|
|
92
|
-
.select .avatar {
|
|
93
|
-
opacity: 0;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
.avatar .select {
|
|
97
|
-
.fa-check {
|
|
98
|
-
opacity: 1;
|
|
99
|
-
background-color: $success;
|
|
100
|
-
border: 1px solid $success;
|
|
101
|
-
color: $white;
|
|
102
|
-
@include transition(all .15s ease-in-out);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
&:hover .fa-check {
|
|
106
|
-
background-color: $success;
|
|
107
|
-
border: 1px solid $success;
|
|
108
|
-
color: $white;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
.lastpost .user-icon {
|
|
114
|
-
display: inline-block;
|
|
115
|
-
@include user-icon-style(24px, 1.5rem, 50%);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
&:last-child li {
|
|
120
|
-
border-bottom: 0;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
.unread {
|
|
125
|
-
.title {
|
|
126
|
-
font-weight: bold;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
.subcategory {
|
|
131
|
-
margin-bottom: 10px;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
1
|
.category, .categories, .subcategory {
|
|
136
|
-
> p {
|
|
137
|
-
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
.description {
|
|
141
|
-
font-weight: normal;
|
|
142
|
-
line-height: 1.2;
|
|
143
|
-
margin-top: 5px;
|
|
144
|
-
min-height: 25px
|
|
2
|
+
.description > p {
|
|
3
|
+
margin-bottom: 0;
|
|
145
4
|
}
|
|
146
|
-
|
|
147
|
-
.title, .description, .category-children {
|
|
148
|
-
margin-left: 62px;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
.categories-title {
|
|
153
|
-
text-transform: uppercase;
|
|
154
|
-
margin: 0 0 10px;
|
|
155
|
-
font-size: 14px;
|
|
156
|
-
font-weight: normal;
|
|
157
|
-
line-height: 1.42857143;
|
|
158
5
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
package/scss/chats.scss
CHANGED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
ul.topics-list, ul.categories-list {
|
|
2
|
+
li {
|
|
3
|
+
&.deleted {
|
|
4
|
+
.meta, .topic-thumbs { display: none!important; }
|
|
5
|
+
opacity: 0.65;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
&.selected {
|
|
9
|
+
background-color: mix($body-bg, $body-color, 90%);
|
|
10
|
+
[component="topic/select"] {
|
|
11
|
+
color: $success!important;
|
|
12
|
+
visibility: visible;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
p {
|
|
16
|
+
margin: 0 !important;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// all other skins use link-color for unread titles
|
|
20
|
+
&.unread .title a {
|
|
21
|
+
color: $link-color;
|
|
22
|
+
font-weight: bold;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.ui-sortable-handle {
|
|
26
|
+
cursor: move;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// if only one thumb don't display
|
|
30
|
+
[data-numthumbs="1"] { display: none; }
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// on default skin use primary color for unread titles
|
|
35
|
+
.skin-noskin {
|
|
36
|
+
ul.topics-list, ul.categories-list {
|
|
37
|
+
li.unread .title {
|
|
38
|
+
color: $primary;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
package/scss/persona.scss
CHANGED
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
@import "category";
|
|
7
7
|
@import "tags";
|
|
8
8
|
@import "noscript";
|
|
9
|
-
@import "categories";
|
|
10
9
|
@import "header";
|
|
11
10
|
@import "account";
|
|
12
11
|
@import "groups";
|
|
@@ -28,4 +27,4 @@
|
|
|
28
27
|
@import "modules/necro-post";
|
|
29
28
|
@import "modules/composer";
|
|
30
29
|
@import "modules/user-menu";
|
|
31
|
-
|
|
30
|
+
@import "modules/topics-list";
|
package/scss/topic.scss
CHANGED
|
@@ -20,14 +20,10 @@
|
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
[component="topic/labels"] {
|
|
24
|
-
font-size: 20px;
|
|
25
|
-
color: $text-muted;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
23
|
[component="topic/browsing-users"] {
|
|
29
24
|
margin-bottom: -5px;
|
|
30
25
|
}
|
|
26
|
+
|
|
31
27
|
.topic-header {
|
|
32
28
|
top: var(--panel-offset);
|
|
33
29
|
background-color: $body-bg;
|
|
@@ -240,50 +236,8 @@
|
|
|
240
236
|
margin-left: 1px;
|
|
241
237
|
}
|
|
242
238
|
}
|
|
243
|
-
|
|
244
|
-
.quick-reply {
|
|
245
|
-
position: relative;
|
|
246
|
-
.icon {
|
|
247
|
-
position: relative;
|
|
248
|
-
border-radius: 50%;
|
|
249
|
-
min-width: 46px;
|
|
250
|
-
min-height: 46px;
|
|
251
|
-
margin-top: 2px;
|
|
252
|
-
|
|
253
|
-
> a > .status {
|
|
254
|
-
position: absolute;
|
|
255
|
-
right: 12px;
|
|
256
|
-
font-size: 12px;
|
|
257
|
-
top: 0px;
|
|
258
|
-
|
|
259
|
-
@include media-breakpoint-up(md) {
|
|
260
|
-
top: 2px;
|
|
261
|
-
font-size: 16px;
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
.avatar {
|
|
266
|
-
margin-right: 15px;
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
.quickreply-message {
|
|
271
|
-
margin-left: 63px;
|
|
272
|
-
margin-bottom: 5px;
|
|
273
|
-
|
|
274
|
-
@include media-breakpoint-down(sm) {
|
|
275
|
-
margin-left: 0;
|
|
276
|
-
|
|
277
|
-
[component="topic/quickreply/text"] {
|
|
278
|
-
font-size: 16px;
|
|
279
|
-
padding: 10px;
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
239
|
}
|
|
285
240
|
|
|
286
|
-
|
|
287
241
|
.topic {
|
|
288
242
|
&.deleted {
|
|
289
243
|
opacity: 0.3;
|
|
@@ -456,48 +410,6 @@
|
|
|
456
410
|
}
|
|
457
411
|
}
|
|
458
412
|
|
|
459
|
-
.thread_active_users {
|
|
460
|
-
text-transform: initial;
|
|
461
|
-
|
|
462
|
-
a[data-uid] {
|
|
463
|
-
position: relative;
|
|
464
|
-
|
|
465
|
-
img, .user-icon {
|
|
466
|
-
@include user-icon-style(20px, 1rem, 50%);
|
|
467
|
-
vertical-align: middle;
|
|
468
|
-
margin: 0 7px;
|
|
469
|
-
}
|
|
470
|
-
|
|
471
|
-
&::after {
|
|
472
|
-
position: absolute;
|
|
473
|
-
z-index: 0;
|
|
474
|
-
opacity: 0;
|
|
475
|
-
|
|
476
|
-
font-family: "FontAwesome";
|
|
477
|
-
content: "\f11c";
|
|
478
|
-
padding: 4px 0.25em;
|
|
479
|
-
top: -36px;
|
|
480
|
-
left: 7px;
|
|
481
|
-
|
|
482
|
-
@include transition("opacity ease 250ms, top ease 250ms")
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
&.replying::after {
|
|
486
|
-
opacity: 1;
|
|
487
|
-
top: -50px;
|
|
488
|
-
animation: topic-reply-pulse 2s ease-in infinite;
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
.anonymous-box {
|
|
493
|
-
border: 1px solid #ddd;
|
|
494
|
-
width: 24px;
|
|
495
|
-
height: 24px;
|
|
496
|
-
position: relative;
|
|
497
|
-
text-align: center;
|
|
498
|
-
}
|
|
499
|
-
}
|
|
500
|
-
|
|
501
413
|
[component="post"] {
|
|
502
414
|
>.post-header [component="user/picture"], >.post-header [component="user/status"] {
|
|
503
415
|
opacity: 1;
|
package/templates/categories.tpl
CHANGED
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
{{{ if pagination.pages.length }}}
|
|
10
10
|
<div><!-- IMPORT partials/category/selector-dropdown-left.tpl --></div>
|
|
11
11
|
{{{ else }}}
|
|
12
|
-
<h1 class="categories-title">[[pages:categories]]</h1>
|
|
12
|
+
<h1 class="categories-title text-uppercase text-sm mb-2 fw-normal">[[pages:categories]]</h1>
|
|
13
13
|
{{{ end }}}
|
|
14
|
-
<ul class="categories" itemscope itemtype="http://www.schema.org/ItemList">
|
|
14
|
+
<ul class="categories list-unstyled" itemscope itemtype="http://www.schema.org/ItemList">
|
|
15
15
|
{{{ each categories }}}
|
|
16
16
|
<!-- IMPORT partials/categories/item.tpl -->
|
|
17
17
|
{{{ end }}}
|
package/templates/header.tpl
CHANGED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
|
|
34
34
|
<main id="panel" class="slideout-panel">
|
|
35
35
|
<nav class="navbar sticky-top navbar-expand-lg bg-light header border-bottom py-0" id="header-menu" component="navbar">
|
|
36
|
-
<div class="container justify-content-start flex-nowrap">
|
|
36
|
+
<div class="container-lg justify-content-start flex-nowrap">
|
|
37
37
|
<!-- IMPORT partials/menu.tpl -->
|
|
38
38
|
</div>
|
|
39
39
|
</nav>
|
|
@@ -42,6 +42,6 @@
|
|
|
42
42
|
const offset = Math.max(0, rect.bottom);
|
|
43
43
|
document.documentElement.style.setProperty('--panel-offset', offset + `px`);
|
|
44
44
|
</script>
|
|
45
|
-
<div class="container pt-3" id="content">
|
|
45
|
+
<div class="container-lg pt-3" id="content">
|
|
46
46
|
<!-- IMPORT partials/noscript/warning.tpl -->
|
|
47
47
|
<!-- IMPORT partials/noscript/message.tpl -->
|
|
@@ -1,60 +1,58 @@
|
|
|
1
|
-
<li component="categories/category" data-cid="{./cid}"
|
|
2
|
-
<meta itemprop="name" content="{
|
|
1
|
+
<li component="categories/category" data-cid="{./cid}" class="w-100 py-2 mb-2 gap-lg-0 gap-2 d-flex flex-column flex-md-row align-items-start {{{ if !@last }}}border-bottom{{{ end }}} border-bottom-lg-0 category-{./cid} {./unread-class}">
|
|
2
|
+
<meta itemprop="name" content="{./name}">
|
|
3
3
|
|
|
4
|
-
<div class="
|
|
5
|
-
<div class="
|
|
4
|
+
<div class="d-flex col-md-7 gap-2 gap-lg-3">
|
|
5
|
+
<div class="flex-shrink-0">
|
|
6
6
|
{buildCategoryIcon(@value, "48px", "rounded-circle")}
|
|
7
7
|
</div>
|
|
8
|
-
<
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
<div class="description text-muted">
|
|
14
|
-
{
|
|
8
|
+
<div class="flex-grow-1 d-flex flex-wrap gap-1">
|
|
9
|
+
<h2 class="title text-break fs-4 fw-semibold m-0 tracking-tight w-100">
|
|
10
|
+
<!-- IMPORT partials/categories/link.tpl -->
|
|
11
|
+
</h2>
|
|
12
|
+
{{{ if ./descriptionParsed }}}
|
|
13
|
+
<div class="description text-muted text-sm w-100">
|
|
14
|
+
{./descriptionParsed}
|
|
15
15
|
</div>
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
{{{ end }}}
|
|
17
|
+
{{{ if ./teaser.timestampISO }}}
|
|
18
|
+
<div class="d-block d-md-none">
|
|
19
|
+
<a class="permalink timeago text-muted" title="{../teaser.timestampISO}" href="{../teaser.url}">
|
|
20
|
+
</a>
|
|
21
|
+
</div>
|
|
22
|
+
{{{ end }}}
|
|
23
|
+
{{{ if !config.hideSubCategories }}}
|
|
24
|
+
{{{ if ./children.length }}}
|
|
25
|
+
<div class="category-children row row-cols-1 row-cols-md-2 g-2 my-1 w-100">
|
|
26
|
+
{{{ each ./children }}}
|
|
27
|
+
{{{ if !./isSection }}}
|
|
28
|
+
<span class="category-children-item small d-flex gap-1 align-items-center">
|
|
23
29
|
{buildCategoryIcon(@value, "24px", "rounded-circle")}
|
|
24
|
-
{{{ if
|
|
25
|
-
<a href="{../link}">{../name}</a>
|
|
26
|
-
{{{ else }}}
|
|
27
|
-
<a href="{config.relative_path}/category/{../slug}">{../name}</a>
|
|
28
|
-
{{{ end }}}
|
|
30
|
+
<a href="{{{ if ./link }}}{./link}{{{ else }}}{config.relative_path}/category/{./slug}{{{ end }}}" class="text-reset">{./name}</a>
|
|
29
31
|
</span>
|
|
30
32
|
{{{ end }}}
|
|
31
33
|
{{{ end }}}
|
|
32
34
|
</div>
|
|
33
35
|
{{{ end }}}
|
|
34
|
-
|
|
36
|
+
{{{ end }}}
|
|
35
37
|
</div>
|
|
36
|
-
<span class="d-block d-sm-none float-end">
|
|
37
|
-
<!-- IF ../teaser.timestampISO -->
|
|
38
|
-
<a class="permalink" href="{../teaser.url}">
|
|
39
|
-
<small class="timeago" title="{../teaser.timestampISO}"></small>
|
|
40
|
-
</a>
|
|
41
|
-
<!-- ENDIF ../teaser.timestampISO -->
|
|
42
|
-
</span>
|
|
43
|
-
</div>
|
|
44
|
-
|
|
45
|
-
<!-- IF !./link -->
|
|
46
|
-
<div class="col-md-1 d-none d-md-block stats text-muted">
|
|
47
|
-
<span title="{./totalTopicCount}">{humanReadableNumber(./totalTopicCount)}</span><br />
|
|
48
|
-
<small>[[global:topics]]</small>
|
|
49
38
|
</div>
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
<
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
39
|
+
{{{ if (!./link && !./isSection) }}}
|
|
40
|
+
<div class="d-flex col-md-5 col-12 align-content-stretch">
|
|
41
|
+
<div class="meta stats d-none d-lg-grid col-6 gap-1 pe-2 text-muted" style="grid-template-columns: 1fr 1fr;">
|
|
42
|
+
<div class="p-1 overflow-hidden rounded-1 d-flex flex-column align-items-center">
|
|
43
|
+
<span class="fs-4" title="{./totalTopicCount}">{humanReadableNumber(./totalTopicCount, 0)}</span>
|
|
44
|
+
<span class="text-uppercase text-xs">[[global:topics]]</span>
|
|
45
|
+
</div>
|
|
46
|
+
<div class="p-1 overflow-hidden rounded-1 d-flex flex-column align-items-center">
|
|
47
|
+
<span class="fs-4" title="{./totalPostCount}">{humanReadableNumber(./totalPostCount, 0)}</span>
|
|
48
|
+
<span class="text-uppercase text-xs">[[global:posts]]</span>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
{{{ if !config.hideCategoryLastPost }}}
|
|
52
|
+
<div component="topic/teaser" class="teaser col-md-6 col-12 d-none d-md-block">
|
|
53
|
+
<!-- IMPORT partials/categories/lastpost.tpl -->
|
|
54
|
+
</div>
|
|
55
|
+
{{{ end }}}
|
|
57
56
|
</div>
|
|
58
|
-
|
|
59
|
-
<!-- ENDIF !./link -->
|
|
57
|
+
{{{ end }}}
|
|
60
58
|
</li>
|
|
@@ -1,26 +1,24 @@
|
|
|
1
|
-
<div class="lastpost
|
|
2
|
-
{{{each ./posts}}}
|
|
3
|
-
|
|
4
|
-
<div component="category/posts">
|
|
5
|
-
<
|
|
6
|
-
|
|
7
|
-
<a href="{config.relative_path}/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
<div class="post-content">
|
|
13
|
-
{../content}
|
|
1
|
+
<div class="lastpost border-start border-4 lh-sm h-100" style="border-color: {./bgColor}!important;">
|
|
2
|
+
{{{ each ./posts }}}
|
|
3
|
+
{{{ if @first }}}
|
|
4
|
+
<div component="category/posts" class="ps-2 text-xs d-flex flex-column h-100 gap-1">
|
|
5
|
+
<div class="text-nowrap text-truncate">
|
|
6
|
+
<a class="text-decoration-none" href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(posts.user, "18px", true, "avatar-tooltip")}</a>
|
|
7
|
+
<a class="permalink text-muted timeago text-xs" href="{config.relative_path}/topic/{./topic.slug}{{{ if ./index }}}/{./index}{{{ end }}}" title="{./timestampISO}" aria-label="[[global:lastpost]]"></a>
|
|
8
|
+
</div>
|
|
9
|
+
<div class="post-content text-xs text-break line-clamp-sm-2 lh-sm position-relative flex-fill">
|
|
10
|
+
<a class="stretched-link" tabindex="-1" href="{config.relative_path}/topic/{./topic.slug}{{{ if ./index }}}/{./index}{{{ end }}}" aria-label="[[global:lastpost]]"></a>
|
|
11
|
+
{./content}
|
|
14
12
|
</div>
|
|
15
13
|
</div>
|
|
16
|
-
|
|
17
|
-
{{{end}}}
|
|
14
|
+
{{{ end }}}
|
|
15
|
+
{{{ end }}}
|
|
18
16
|
|
|
19
|
-
|
|
20
|
-
<div component="category/posts">
|
|
21
|
-
<div class="post-content">
|
|
17
|
+
{{{ if !./posts.length }}}
|
|
18
|
+
<div component="category/posts" class="ps-2">
|
|
19
|
+
<div class="post-content overflow-hidden text-xs">
|
|
22
20
|
[[category:no-new-posts]]
|
|
23
21
|
</div>
|
|
24
22
|
</div>
|
|
25
|
-
|
|
23
|
+
{{{ end }}}
|
|
26
24
|
</div>
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
<!-- IF posts.display_moderator_tools -->
|
|
2
2
|
<li>
|
|
3
|
-
<a class="dropdown-item d-flex align-items-center gap-2" component="post/edit" role="menuitem" href="#">
|
|
3
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/edit" role="menuitem" 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
7
|
{{{ if posts.display_delete_tools }}}
|
|
8
8
|
<li <!-- IF posts.deleted -->hidden<!-- ENDIF posts.deleted -->>
|
|
9
|
-
<a class="dropdown-item d-flex align-items-center gap-2" component="post/delete" role="menuitem" href="#" class="<!-- IF posts.deleted -->hidden<!-- ENDIF posts.deleted -->">
|
|
9
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/delete" role="menuitem" href="#" class="<!-- IF posts.deleted -->hidden<!-- ENDIF posts.deleted -->">
|
|
10
10
|
<span class="menu-icon"><i class="fa fa-fw fa-trash-o"></i></span> [[topic:delete]]
|
|
11
11
|
</a>
|
|
12
12
|
</li>
|
|
13
13
|
<li <!-- IF !posts.deleted -->hidden<!-- ENDIF !posts.deleted -->>
|
|
14
|
-
<a class="dropdown-item d-flex align-items-center gap-2" component="post/restore" role="menuitem" href="#" class="<!-- IF !posts.deleted -->hidden<!-- ENDIF !posts.deleted -->">
|
|
14
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/restore" role="menuitem" href="#" class="<!-- IF !posts.deleted -->hidden<!-- ENDIF !posts.deleted -->">
|
|
15
15
|
<span class="menu-icon"><i class="fa fa-fw fa-history"></i><span> [[topic:restore]]
|
|
16
16
|
</a>
|
|
17
17
|
</li>
|
|
18
18
|
{{{ end }}}
|
|
19
19
|
<!-- IF posts.display_purge_tools -->
|
|
20
20
|
<li <!-- IF !posts.deleted -->hidden<!-- ENDIF !posts.deleted -->>
|
|
21
|
-
<a class="dropdown-item d-flex align-items-center gap-2" component="post/purge" role="menuitem" href="#" class="<!-- IF !posts.deleted -->hidden<!-- ENDIF !posts.deleted -->">
|
|
21
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/purge" role="menuitem" href="#" class="<!-- IF !posts.deleted -->hidden<!-- ENDIF !posts.deleted -->">
|
|
22
22
|
<span class="menu-icon"><i class="fa fa-fw fa-eraser"></i></span> [[topic:purge]]
|
|
23
23
|
</a>
|
|
24
24
|
</li>
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
|
|
27
27
|
<!-- IF posts.display_move_tools -->
|
|
28
28
|
<li>
|
|
29
|
-
<a class="dropdown-item d-flex align-items-center gap-2" component="post/move" role="menuitem" href="#">
|
|
29
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/move" role="menuitem" href="#">
|
|
30
30
|
<span class="menu-icon"><i class="fa fa-fw fa-arrows"></i></span> [[topic:move]]
|
|
31
31
|
</a>
|
|
32
32
|
</li>
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
|
|
35
35
|
<!-- IF posts.display_change_owner_tools -->
|
|
36
36
|
<li>
|
|
37
|
-
<a class="dropdown-item d-flex align-items-center gap-2" component="post/change-owner" role="menuitem" href="#">
|
|
37
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/change-owner" role="menuitem" href="#">
|
|
38
38
|
<span class="menu-icon"><i class="fa fa-fw fa-user"></i></span> [[topic:change-owner]]
|
|
39
39
|
</a>
|
|
40
40
|
</li>
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
|
|
43
43
|
{{{ if posts.display_manage_editors_tools }}}
|
|
44
44
|
<li>
|
|
45
|
-
<a class="dropdown-item d-flex align-items-center gap-2" component="post/manage-editors" role="menuitem" href="#">
|
|
45
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/manage-editors" role="menuitem" href="#">
|
|
46
46
|
<span class="menu-icon"><i class="fa fa-fw fa-user-pen"></i></span> [[topic:manage-editors]]
|
|
47
47
|
</a>
|
|
48
48
|
</li>
|
|
@@ -50,13 +50,13 @@
|
|
|
50
50
|
|
|
51
51
|
<!-- IF posts.ip -->
|
|
52
52
|
<li>
|
|
53
|
-
<a class="dropdown-item d-flex align-items-center gap-2" component="post/copy-ip" role="menuitem" href="#" data-clipboard-text="{posts.ip}">
|
|
53
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/copy-ip" role="menuitem" href="#" data-clipboard-text="{posts.ip}">
|
|
54
54
|
<span class="menu-icon" ><i class="fa fa-fw fa-copy"></i></span> [[topic:copy-ip]] {posts.ip}
|
|
55
55
|
</a>
|
|
56
56
|
</li>
|
|
57
57
|
<!-- IF posts.display_ip_ban -->
|
|
58
58
|
<li>
|
|
59
|
-
<a class="dropdown-item d-flex align-items-center gap-2" component="post/ban-ip" role="menuitem" href="#" data-ip="{posts.ip}">
|
|
59
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/ban-ip" role="menuitem" href="#" data-ip="{posts.ip}">
|
|
60
60
|
<span class="menu-icon"><i class="fa fa-fw fa-ban"></i></span> [[topic:ban-ip]] {posts.ip}
|
|
61
61
|
</a>
|
|
62
62
|
</li>
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
|
|
67
67
|
{{{each posts.tools}}}
|
|
68
68
|
<li {{{ if ./disabled }}}class="disabled" {{{ end }}}>
|
|
69
|
-
<a class="dropdown-item d-flex align-items-center gap-2" {{{ if ./action}}}component="{./action}"{{{ end }}} role="menuitem" href="{{{ if ./href }}}{./href}{{{ else }}}#{{{ end }}}">
|
|
69
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" {{{ if ./action}}}component="{./action}"{{{ end }}} role="menuitem" href="{{{ if ./href }}}{./href}{{{ else }}}#{{{ end }}}">
|
|
70
70
|
<span class="menu-icon"><i class="fa fa-fw {posts.tools.icon}"></i></span> {{posts.tools.html}}
|
|
71
71
|
</a>
|
|
72
72
|
</li>
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
<!-- IF !posts.deleted -->
|
|
76
76
|
<!-- IF posts.display_history -->
|
|
77
77
|
<li>
|
|
78
|
-
<a class="dropdown-item d-flex align-items-center gap-2" component="post/view-history" role="menuitem" href="#">
|
|
78
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/view-history" role="menuitem" href="#">
|
|
79
79
|
<span class="menu-icon"><i class="fa fa-fw fa-history"></i></span> [[topic:view-history]]
|
|
80
80
|
</a>
|
|
81
81
|
</li>
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
|
|
84
84
|
{{{ if config.loggedIn }}}
|
|
85
85
|
<li>
|
|
86
|
-
<a class="dropdown-item d-flex align-items-center gap-2" component="post/bookmark" role="menuitem" href="#" data-bookmarked="{posts.bookmarked}">
|
|
86
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/bookmark" role="menuitem" href="#" data-bookmarked="{posts.bookmarked}">
|
|
87
87
|
<span class="menu-icon">
|
|
88
88
|
<i component="post/bookmark/on" class="fa fa-fw fa-heart <!-- IF !posts.bookmarked -->hidden<!-- ENDIF !posts.bookmarked -->"></i>
|
|
89
89
|
<i component="post/bookmark/off" class="fa fa-fw fa-heart-o <!-- IF posts.bookmarked -->hidden<!-- ENDIF posts.bookmarked -->"></i>
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
{{{ end }}}
|
|
96
96
|
|
|
97
97
|
<li>
|
|
98
|
-
<a class="dropdown-item d-flex align-items-center gap-2" role="menuitem" href="#" data-clipboard-text="{posts.absolute_url}">
|
|
98
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" href="#" data-clipboard-text="{posts.absolute_url}">
|
|
99
99
|
<i class="fa fa-fw fa-link"></i> [[topic:copy-permalink]]
|
|
100
100
|
</a>
|
|
101
101
|
</li>
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
<!-- ENDIF postSharing.length -->
|
|
107
107
|
<li class="d-flex gap-2 px-3">
|
|
108
108
|
{{{ each postSharing }}}
|
|
109
|
-
<a class="dropdown-item d-flex align-items-center px-1 py-2 w-auto" role="menuitem" component="share/{./id}" href="#" title="{./name}"><i class="fa-fw text-muted {./class}"></i></a>
|
|
109
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center px-1 py-2 w-auto" role="menuitem" component="share/{./id}" href="#" title="{./name}"><i class="fa-fw text-muted {./class}"></i></a>
|
|
110
110
|
{{{ end }}}
|
|
111
111
|
</li>
|
|
112
112
|
<!-- ENDIF !posts.deleted -->
|
|
@@ -115,15 +115,15 @@
|
|
|
115
115
|
<li class="dropdown-divider"></li>
|
|
116
116
|
|
|
117
117
|
<li {{{ if posts.flags.flagged }}}hidden{{{ end }}}>
|
|
118
|
-
<a class="dropdown-item d-flex align-items-center gap-2" component="post/flag" role="menuitem" href="#"><i class="fa fa-fw fa-flag"></i> [[topic:flag-post]]</a>
|
|
118
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/flag" role="menuitem" href="#"><i class="fa fa-fw fa-flag"></i> [[topic:flag-post]]</a>
|
|
119
119
|
</li>
|
|
120
120
|
<li {{{ if !posts.flags.flagged }}}hidden{{{ end }}} class="disabled text-muted">
|
|
121
|
-
<a class="dropdown-item d-flex align-items-center gap-2" component="post/already-flagged" role="menuitem" href="#"><i class="fa fa-fw fa-flag"></i> [[topic:already-flagged]]</a>
|
|
121
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/already-flagged" role="menuitem" href="#"><i class="fa fa-fw fa-flag"></i> [[topic:already-flagged]]</a>
|
|
122
122
|
</li>
|
|
123
123
|
|
|
124
124
|
{{{ if (!posts.selfPost && posts.uid) }}}
|
|
125
125
|
<li>
|
|
126
|
-
<a class="dropdown-item d-flex align-items-center gap-2" component="post/flagUser" role="menuitem" href="#"><i class="fa fa-fw fa-flag"></i> [[topic:flag-user]]</a>
|
|
126
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/flagUser" role="menuitem" href="#"><i class="fa fa-fw fa-flag"></i> [[topic:flag-user]]</a>
|
|
127
127
|
</li>
|
|
128
128
|
{{{ end }}}
|
|
129
129
|
{{{ end }}}
|
|
@@ -131,11 +131,11 @@
|
|
|
131
131
|
<!-- IF posts.display_moderator_tools -->
|
|
132
132
|
{{{ if posts.flags.exists }}}
|
|
133
133
|
<li>
|
|
134
|
-
<a class="dropdown-item d-flex align-items-center gap-2" role="menuitem" href="{config.relative_path}/flags/{posts.flags.flagId}"><i class="fa fa-fw fa-exclamation-circle"></i> [[topic:view-flag-report]]</a>
|
|
134
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" href="{config.relative_path}/flags/{posts.flags.flagId}"><i class="fa fa-fw fa-exclamation-circle"></i> [[topic:view-flag-report]]</a>
|
|
135
135
|
</li>
|
|
136
136
|
{{{ if (posts.flags.state == "open") }}}
|
|
137
137
|
<li>
|
|
138
|
-
<a class="dropdown-item d-flex align-items-center gap-2" component="post/flagResolve" data-flagId="{posts.flags.flagId}" role="menuitem" href="#"><i class="fa fa-fw fa-check"></i> [[topic:resolve-flag]]</a>
|
|
138
|
+
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" component="post/flagResolve" data-flagId="{posts.flags.flagId}" role="menuitem" href="#"><i class="fa fa-fw fa-check"></i> [[topic:resolve-flag]]</a>
|
|
139
139
|
</li>
|
|
140
140
|
{{{ end }}}
|
|
141
141
|
{{{ end }}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
<span component="post/tools" class="dropdown bottom-sheet d-inline-block {{{ if !posts.display_post_menu }}}hidden{{{ end }}}">
|
|
2
2
|
<a class="btn btn-link btn-sm dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-fw fa-ellipsis-v"></i></a>
|
|
3
|
-
<ul class="dropdown-menu dropdown-menu-end p-1" role="menu"></ul>
|
|
3
|
+
<ul class="dropdown-menu dropdown-menu-end p-1 text-sm" role="menu"></ul>
|
|
4
4
|
</span>
|
|
@@ -1,28 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
<div component="topic/quickreply/container" class="
|
|
3
|
-
<div class="icon
|
|
4
|
-
<a
|
|
1
|
+
{{{ if privileges.topics:reply }}}
|
|
2
|
+
<div component="topic/quickreply/container" class="quick-reply d-flex gap-3 mb-4">
|
|
3
|
+
<div class="icon hidden-xs">
|
|
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
|
-
{{{ if loggedInUser.status }}}
|
|
7
|
-
<i component="user/status" class="fa fa-circle status {loggedInUser.status}" title="[[global:{loggedInUser.status}]]"></i>
|
|
8
|
-
{{{ end }}}
|
|
9
6
|
</a>
|
|
10
7
|
</div>
|
|
11
|
-
<form method="post" action="{config.relative_path}/compose">
|
|
8
|
+
<form class="flex-grow-1 d-flex flex-column gap-2" method="post" action="{config.relative_path}/compose">
|
|
12
9
|
<input type="hidden" name="tid" value="{tid}" />
|
|
13
10
|
<input type="hidden" name="_csrf" value="{config.csrf_token}" />
|
|
14
|
-
<div class="quickreply-message">
|
|
15
|
-
<textarea name="content" component="topic/quickreply/text" class="form-control mousetrap"
|
|
11
|
+
<div class="quickreply-message position-relative">
|
|
12
|
+
<textarea rows="4" name="content" component="topic/quickreply/text" class="form-control mousetrap" placeholder="[[modules:composer.textarea.placeholder]]"></textarea>
|
|
16
13
|
<div class="imagedrop"><div>[[topic:composer.drag-and-drop-images]]</div></div>
|
|
17
14
|
</div>
|
|
18
|
-
<div
|
|
19
|
-
<
|
|
20
|
-
|
|
15
|
+
<div>
|
|
16
|
+
<div class="d-flex justify-content-end gap-2">
|
|
17
|
+
<button type="submit" component="topic/quickreply/expand" class="btn btn-ghost btn-sm border" title="[[topic:open-composer]]"><i class="fa fa-expand"></i></button>
|
|
18
|
+
<button type="submit" component="topic/quickreply/button" class="btn btn-sm btn-primary">[[topic:post-quick-reply]]</button>
|
|
19
|
+
</div>
|
|
21
20
|
</div>
|
|
22
21
|
</form>
|
|
23
|
-
<form component="topic/quickreply/upload" method="post" enctype="multipart/form-data">
|
|
22
|
+
<form class="d-none" component="topic/quickreply/upload" method="post" enctype="multipart/form-data">
|
|
24
23
|
<input type="file" name="files[]" multiple class="hidden"/>
|
|
25
24
|
</form>
|
|
26
|
-
|
|
27
25
|
</div>
|
|
28
|
-
|
|
26
|
+
{{{ end }}}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
<
|
|
2
|
-
<i class="fa fa-fw fa-
|
|
3
|
-
<span title="{
|
|
4
|
-
</
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
<
|
|
8
|
-
</
|
|
9
|
-
<
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
<span class="badge text-body border border-gray-300 stats text-xs">
|
|
2
|
+
<i class="fa-regular fa-fw fa-message visible-xs-inline" title="[[global:posts]]"></i>
|
|
3
|
+
<span component="topic/post-count" title="{postcount}" class="fw-bold">{humanReadableNumber(postcount)}</span>
|
|
4
|
+
<span class="hidden-xs text-lowercase fw-normal">[[global:posts]]</span>
|
|
5
|
+
</span>
|
|
6
|
+
<span class="badge text-body border border-gray-300 stats text-xs">
|
|
7
|
+
<i class="fa fa-fw fa-user visible-xs-inline" title="[[global:posters]]"></i>
|
|
8
|
+
<span title="{postercount}" class="fw-bold">{humanReadableNumber(postercount)}</span>
|
|
9
|
+
<span class="hidden-xs text-lowercase fw-normal">[[global:posters]]</span>
|
|
10
|
+
</span>
|
|
11
|
+
<span class="badge text-body border border-gray-300 stats text-xs">
|
|
12
|
+
<i class="fa fa-fw fa-eye visible-xs-inline" title="[[global:views]]"></i>
|
|
13
|
+
<span class="fw-bold" title="{viewcount}">{humanReadableNumber(viewcount)}</span>
|
|
14
|
+
<span class="hidden-xs text-lowercase fw-normal">[[global:views]]</span>
|
|
15
|
+
</span>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<a href="{config.relative_path}/tags/{./valueEncoded}"><span class="
|
|
1
|
+
<a href="{config.relative_path}/tags/{./valueEncoded}"><span class="badge border border-gray-300 fw-normal tag tag-class-{./class}" data-tag="{./value}">{./valueEscaped}</span></a>
|
|
@@ -1,115 +1,129 @@
|
|
|
1
|
-
<ul component="category" class="
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
<
|
|
1
|
+
<ul component="category" class="topics-list list-unstyled" itemscope itemtype="http://www.schema.org/ItemList" data-nextstart="{nextStart}" data-set="{set}">
|
|
2
|
+
|
|
3
|
+
{{{ each topics }}}
|
|
4
|
+
<li component="category/topic" class="category-item hover-parent border-bottom py-3 py-lg-4 d-flex flex-column flex-lg-row align-items-start {function.generateTopicClass}" <!-- IMPORT partials/data/category.tpl -->>
|
|
5
|
+
<link itemprop="url" content="{config.relative_path}/topic/{./slug}" />
|
|
6
|
+
<meta itemprop="name" content="{function.stripTags, ./title}" />
|
|
6
7
|
<meta itemprop="itemListOrder" content="descending" />
|
|
7
8
|
<meta itemprop="position" content="{increment(./index, "1")}" />
|
|
8
|
-
<a id="{
|
|
9
|
+
<a id="{./index}" data-index="{./index}" component="topic/anchor"></a>
|
|
9
10
|
|
|
10
|
-
<div class="
|
|
11
|
-
<div class="
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
{{{ end }}}
|
|
19
|
-
<i class="fa fa-check"></i>
|
|
11
|
+
<div class="d-flex p-0 col-12 col-lg-7 gap-2 gap-lg-3 pe-1 align-items-start {{{ if config.theme.mobileTopicTeasers }}}mb-2 mb-lg-0{{{ end }}}">
|
|
12
|
+
<div class="flex-shrink-0 position-relative">
|
|
13
|
+
<a class="text-decoration-none" href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}">
|
|
14
|
+
{buildAvatar(./user, "40px", true, "avatar avatar-tooltip")}
|
|
15
|
+
</a>
|
|
16
|
+
{{{ if showSelect }}}
|
|
17
|
+
<div class="checkbox position-absolute top-100 start-50 translate-middle-x pt-2 m-0 d-none d-lg-flex" style="max-width:max-content">
|
|
18
|
+
<i component="topic/select" class="fa text-muted pointer fa-square-o p-1 hover-visible"></i>
|
|
20
19
|
</div>
|
|
21
|
-
|
|
20
|
+
{{{ end }}}
|
|
21
|
+
</div>
|
|
22
|
+
<div class="flex-grow-1 d-flex flex-wrap gap-1 position-relative">
|
|
23
|
+
<h3 component="topic/header" class="title text-break fs-5 fw-semibold m-0 tracking-tight w-100 {{{ if showSelect }}}me-4 me-lg-0{{{ end }}}">
|
|
24
|
+
<a class="text-reset" href="{{{ if topics.noAnchor }}}#{{{ else }}}{config.relative_path}/topic/{./slug}{{{ if ./bookmark }}}/{./bookmark}{{{ end }}}{{{ end }}}">{./title}</a>
|
|
25
|
+
</h3>
|
|
26
|
+
<span component="topic/labels" class="d-flex flex-wrap gap-1 w-100 align-items-center">
|
|
27
|
+
<span component="topic/watched" class="badge border border-gray-300 text-body {{{ if !./followed }}}hidden{{{ end }}}">
|
|
28
|
+
<i class="fa fa-bell-o"></i>
|
|
29
|
+
<span>[[topic:watching]]</span>
|
|
30
|
+
</span>
|
|
31
|
+
<span component="topic/ignored" class="badge border border-gray-300 text-body {{{ if !./ignored }}}hidden{{{ end }}}">
|
|
32
|
+
<i class="fa fa-eye-slash"></i>
|
|
33
|
+
<span>[[topic:ignoring]]</span>
|
|
34
|
+
</span>
|
|
35
|
+
<span component="topic/scheduled" class="badge border border-gray-300 text-body {{{ if !./scheduled }}}hidden{{{ end }}}">
|
|
36
|
+
<i class="fa fa-clock-o"></i>
|
|
37
|
+
<span>[[topic:scheduled]]</span>
|
|
38
|
+
</span>
|
|
39
|
+
<span component="topic/pinned" class="badge border border-gray-300 text-body {{{ if (./scheduled || !./pinned) }}}hidden{{{ end }}}">
|
|
40
|
+
<i class="fa fa-thumb-tack"></i>
|
|
41
|
+
<span>{{{ if !./pinExpiry }}}[[topic:pinned]]{{{ else }}}[[topic:pinned-with-expiry, {isoTimeToLocaleString(./pinExpiryISO, config.userLang)}]]{{{ end }}}</span>
|
|
42
|
+
</span>
|
|
43
|
+
<span component="topic/locked" class="badge border border-gray-300 text-body {{{ if !./locked }}}hidden{{{ end }}}">
|
|
44
|
+
<i class="fa fa-lock"></i>
|
|
45
|
+
<span>[[topic:locked]]</span>
|
|
46
|
+
</span>
|
|
47
|
+
<span component="topic/moved" class="badge border border-gray-300 text-body {{{ if !./oldCid }}}hidden{{{ end }}}">
|
|
48
|
+
<i class="fa fa-arrow-circle-right"></i>
|
|
49
|
+
<span>[[topic:moved]]</span>
|
|
50
|
+
</span>
|
|
51
|
+
{{{each ./icons}}}<span class="lh-1">{@value}</span>{{{end}}}
|
|
22
52
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
{{{ if ./thumbs.length }}}
|
|
26
|
-
<img src="{./thumbs.0.url}" class="user-img not-responsive" />
|
|
27
|
-
{{{ else }}}
|
|
28
|
-
{buildAvatar(../user, "48px", true, "not-responsive")}
|
|
53
|
+
{{{ if !template.category }}}
|
|
54
|
+
{function.buildCategoryLabel, ./category, "a", "border"}
|
|
29
55
|
{{{ end }}}
|
|
30
|
-
</a>
|
|
31
|
-
<!-- ENDIF !showSelect -->
|
|
32
|
-
</div>
|
|
33
56
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
<i component="topic/locked" class="fa fa-lock {{{ if !topics.locked }}}hidden{{{ end }}}" title="[[topic:locked]]"></i>
|
|
40
|
-
<i component="topic/moved" class="fa fa-arrow-circle-right {{{ if !topics.oldCid }}}hidden{{{ end }}}" title="[[topic:moved]]"></i>
|
|
41
|
-
{{{each topics.icons}}}{@value}{{{end}}}
|
|
57
|
+
<span data-tid="{./tid}" component="topic/tags" class="lh-1 tag-list hidden-xs d-flex flex-wrap gap-1 {{{ if !./tags.length }}}hidden{{{ end }}}">
|
|
58
|
+
{{{ each ./tags }}}
|
|
59
|
+
<a href="{config.relative_path}/tags/{./valueEncoded}"><span class="badge border border-gray-300 fw-normal tag tag-class-{./class}" data-tag="{./value}">{./valueEscaped}</span></a>
|
|
60
|
+
{{{ end }}}
|
|
61
|
+
</span>
|
|
42
62
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
</h2>
|
|
49
|
-
<div class="info">
|
|
50
|
-
<!-- IF !template.category -->
|
|
51
|
-
<div class="category-item d-inline-block">
|
|
52
|
-
{buildCategoryIcon(./category, "24px", "rounded-circle")}
|
|
53
|
-
<a class="text-muted" href="{config.relative_path}/category/{topics.category.slug}">{topics.category.name}</a>
|
|
54
|
-
</div>
|
|
55
|
-
•
|
|
56
|
-
<!-- ENDIF !template.category -->
|
|
63
|
+
<div class="d-flex gap-1 d-block d-lg-none w-100">
|
|
64
|
+
<span class="badge text-body border stats text-xs text-muted">
|
|
65
|
+
<i class="fa-regular fa-fw fa-message"></i>
|
|
66
|
+
<span component="topic/post-count" class="fw-normal">{humanReadableNumber(./postcount, 0)}</span>
|
|
67
|
+
</span>
|
|
57
68
|
|
|
69
|
+
<a href="{config.relative_path}/topic/{./slug}{{{ if (./teaser.timestampISO && !config.theme.mobileTopicTeasers) }}}/{./teaser.index}{{{ end }}}" class="border badge bg-transparent text-muted fw-normal timeago" title="{{{ if (./teaser.timestampISO && !config.theme.mobileTopicTeasers) }}}{./teaser.timestampISO}{{{ else }}}{./timestampISO}{{{ end }}}"></a>
|
|
70
|
+
</div>
|
|
58
71
|
|
|
59
|
-
|
|
60
|
-
{{{ each ./tags }}}
|
|
61
|
-
<!-- IMPORT partials/topic/tag.tpl -->
|
|
62
|
-
{{{ end }}}
|
|
63
|
-
•
|
|
72
|
+
<a href="{config.relative_path}/topic/{./slug}" class="d-none d-lg-block badge bg-transparent text-muted fw-normal timeago" title="{./timestampISO}"></a>
|
|
64
73
|
</span>
|
|
65
|
-
|
|
66
|
-
<
|
|
67
|
-
|
|
68
|
-
|
|
74
|
+
{{{ if showSelect }}}
|
|
75
|
+
<div class="checkbox position-absolute top-0 end-0 m-0 d-flex d-lg-none" style="max-width:max-content">
|
|
76
|
+
<i component="topic/select" class="fa fa-square-o text-muted pointer p-1"></i>
|
|
77
|
+
</div>
|
|
78
|
+
{{{ end }}}
|
|
69
79
|
</div>
|
|
80
|
+
{{{ if ./thumbs.length }}}
|
|
81
|
+
<a class="topic-thumbs position-relative text-decoration-none flex-shrink-0 d-none d-xl-block" href="{config.relative_path}/topic/{./slug}{{{ if ./bookmark }}}/{./bookmark}{{{ end }}}" aria-label="[[topic:thumb-image]]">
|
|
82
|
+
<img class="topic-thumb rounded-1 bg-light" style="width:auto;max-width: 5.33rem;height: 3.33rem;object-fit: contain;" src="{./thumbs.0.url}" alt=""/>
|
|
83
|
+
<span data-numthumbs="{./thumbs.length}" class="px-1 position-absolute top-0 start-100 translate-middle badge rounded text-bg-info" style="z-index: 1;">+{increment(./thumbs.length, "-1")}</span>
|
|
84
|
+
</a>
|
|
85
|
+
{{{ end }}}
|
|
70
86
|
</div>
|
|
71
87
|
|
|
72
|
-
<div class="
|
|
73
|
-
<
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
<
|
|
105
|
-
<
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
{
|
|
88
|
+
<div class="d-flex p-0 col-lg-5 col-12 align-content-stretch">
|
|
89
|
+
<div class="meta stats d-none d-lg-grid col-6 gap-1 pe-2 text-muted" style="grid-template-columns: 1fr 1fr 1fr;">
|
|
90
|
+
{{{ if !reputation:disabled }}}
|
|
91
|
+
<div class="stats-votes border-0 p-2 overflow-hidden rounded-1 d-flex flex-column align-items-center">
|
|
92
|
+
<span class="fs-5 ff-secondary lh-1" title="{./votes}">{humanReadableNumber(./votes, 0)}</span>
|
|
93
|
+
<span class="d-none d-xl-flex text-lowercase text-xs">[[global:votes]]</span>
|
|
94
|
+
<i class="d-xl-none fa fa-fw text-xs text-muted opacity-75 fa-chevron-up"></i>
|
|
95
|
+
</div>
|
|
96
|
+
{{{ end }}}
|
|
97
|
+
<div class="stats-postcount border-0 p-2 overflow-hidden rounded-1 d-flex flex-column align-items-center">
|
|
98
|
+
<span class="fs-5 ff-secondary lh-1" title="{./postcount}">{humanReadableNumber(./postcount, 0)}</span>
|
|
99
|
+
<span class="d-none d-xl-flex text-lowercase text-xs">[[global:posts]]</span>
|
|
100
|
+
<i class="d-xl-none fa-regular fa-fw text-xs text-muted opacity-75 fa-message"></i>
|
|
101
|
+
</div>
|
|
102
|
+
<div class="stats-viewcount border-0 p-2 overflow-hidden rounded-1 d-flex flex-column align-items-center">
|
|
103
|
+
<span class="fs-5 ff-secondary lh-1" title="{./viewcount}">{humanReadableNumber(./viewcount, 0)}</span>
|
|
104
|
+
<span class="d-none d-xl-flex text-lowercase text-xs">[[global:views]]</span>
|
|
105
|
+
<i class="d-xl-none fa fa-fw text-xs text-muted opacity-75 fa-eye"></i>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
<div component="topic/teaser" class="meta teaser col-lg-6 col-12 {{{ if !config.theme.mobileTopicTeasers }}}d-none d-lg-block{{{ end }}}">
|
|
109
|
+
<div class="lastpost border-start border-4 lh-sm h-100 d-flex flex-column gap-1" style="border-color: {./category.bgColor}!important;">
|
|
110
|
+
{{{ if ./unreplied }}}
|
|
111
|
+
<div class="ps-2 text-xs">
|
|
112
|
+
[[category:no-replies]]
|
|
113
|
+
</div>
|
|
114
|
+
{{{ else }}}
|
|
115
|
+
{{{ if ./teaser.pid }}}
|
|
116
|
+
<div class="ps-2">
|
|
117
|
+
<a href="{{{ if ./teaser.user.userslug }}}{config.relative_path}/user/{./teaser.user.userslug}{{{ else }}}#{{{ end }}}" class="text-decoration-none">{buildAvatar(./teaser.user, "18px", true, "avatar-tooltip not-responsive")}</a>
|
|
118
|
+
<a class="permalink text-muted timeago text-xs" href="{config.relative_path}/topic/{./slug}/{./teaser.index}" title="{./teaser.timestampISO}" aria-label="[[global:lastpost]]"></a>
|
|
119
|
+
</div>
|
|
120
|
+
<div class="post-content text-xs ps-2 line-clamp-sm-2 lh-sm text-break position-relative flex-fill">
|
|
121
|
+
<a class="stretched-link" tabindex="-1" href="{config.relative_path}/topic/{./slug}/{./teaser.index}" aria-label="[[global:lastpost]]"></a>
|
|
122
|
+
{./teaser.content}
|
|
123
|
+
</div>
|
|
124
|
+
{{{ end }}}
|
|
125
|
+
{{{ end }}}
|
|
110
126
|
</div>
|
|
111
|
-
<!-- ENDIF topics.teaser.pid -->
|
|
112
|
-
<!-- ENDIF topics.unreplied -->
|
|
113
127
|
</div>
|
|
114
128
|
</div>
|
|
115
129
|
</li>
|
package/templates/topic.tpl
CHANGED
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
</div>
|
|
23
23
|
</h1>
|
|
24
24
|
|
|
25
|
-
<div class="topic-info pb-2 d-flex gap-
|
|
26
|
-
<span component="topic/labels" class="d-flex
|
|
25
|
+
<div class="topic-info pb-2 d-flex gap-2 align-items-center flex-wrap">
|
|
26
|
+
<span component="topic/labels" class="d-flex gap-2 {{{ if (!scheduled && (!pinned && (!locked && (!oldCid && !icons.length)))) }}}hidden{{{ end }}}">
|
|
27
27
|
<span component="topic/scheduled" class="badge badge border border-gray-300 text-body {{{ if !scheduled }}}hidden{{{ end }}}">
|
|
28
28
|
<i class="fa fa-clock-o"></i> [[topic:scheduled]]
|
|
29
29
|
</span>
|
|
@@ -38,16 +38,9 @@
|
|
|
38
38
|
</a>
|
|
39
39
|
{{{each icons}}}<span class="lh-1">{@value}</span>{{{end}}}
|
|
40
40
|
</span>
|
|
41
|
-
|
|
42
|
-
<div class="
|
|
43
|
-
|
|
44
|
-
<a href="{config.relative_path}/category/{category.slug}">{category.name}</a>
|
|
45
|
-
</div>
|
|
46
|
-
|
|
47
|
-
<div data-tid="{./tid}" component="topic/tags" class="tags tag-list d-inline-block hidden-xs hidden-empty"><!-- IMPORT partials/topic/tags.tpl --></div>
|
|
48
|
-
<div class="d-inline-block hidden-xs">
|
|
49
|
-
<!-- IMPORT partials/topic/stats.tpl -->
|
|
50
|
-
</div>
|
|
41
|
+
{function.buildCategoryLabel, category, "a", "border"}
|
|
42
|
+
<div data-tid="{./tid}" component="topic/tags" class="lh-1 tags tag-list d-flex flex-wrap hidden-xs hidden-empty gap-2"><!-- IMPORT partials/topic/tags.tpl --></div>
|
|
43
|
+
<div class="d-flex hidden-xs gap-2"><!-- IMPORT partials/topic/stats.tpl --></div>
|
|
51
44
|
{{{ if !feeds:disableRSS }}}
|
|
52
45
|
{{{ if rssFeedUrl }}}<a class="hidden-xs" target="_blank" href="{rssFeedUrl}"><i class="fa fa-rss-square"></i></a>{{{ end }}}
|
|
53
46
|
{{{ end }}}
|
package/scss/categories.scss
DELETED
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
.categories, .category > ul {
|
|
2
|
-
list-style-type: none;
|
|
3
|
-
padding: 0;
|
|
4
|
-
|
|
5
|
-
> li {
|
|
6
|
-
|
|
7
|
-
padding-bottom: 10px;
|
|
8
|
-
|
|
9
|
-
@include media-breakpoint-down(sm) {
|
|
10
|
-
border-top: 1px solid $gray-200;
|
|
11
|
-
&:last-child {
|
|
12
|
-
border-bottom: 1px solid $gray-200;
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
min-height: 53px;
|
|
17
|
-
|
|
18
|
-
.content {
|
|
19
|
-
padding: 10px 15px;
|
|
20
|
-
|
|
21
|
-
img, .user-icon {
|
|
22
|
-
@include user-icon-style(46px, 2.4rem, 50%);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
h2 {
|
|
26
|
-
display: block;
|
|
27
|
-
word-wrap: break-word;
|
|
28
|
-
overflow: hidden;
|
|
29
|
-
font-size: 18px;
|
|
30
|
-
line-height: 22px;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
@media (max-width: 500px) {
|
|
35
|
-
.teaser {
|
|
36
|
-
position: absolute;
|
|
37
|
-
right: 4px;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
.mobile-stat {
|
|
42
|
-
padding-left: 0px;
|
|
43
|
-
padding-top: 10px;
|
|
44
|
-
font-size: 16px;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
.lastpost {
|
|
48
|
-
border-left: 4px solid #ccc;
|
|
49
|
-
text-align: left;
|
|
50
|
-
margin-top: 10px;
|
|
51
|
-
overflow: hidden;
|
|
52
|
-
height: 53px;
|
|
53
|
-
font-size: 12px;
|
|
54
|
-
line-height: 14px;
|
|
55
|
-
|
|
56
|
-
> * {
|
|
57
|
-
padding-left: 20px;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
p {
|
|
61
|
-
margin: 0;
|
|
62
|
-
.emoji {
|
|
63
|
-
max-width: 12px;
|
|
64
|
-
max-height: 12px;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
.post-content {
|
|
69
|
-
overflow: hidden;
|
|
70
|
-
blockquote {
|
|
71
|
-
display: none;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
.user-icon {
|
|
76
|
-
display: inline-block;
|
|
77
|
-
@include user-icon-style(24px, 1.5rem, 50%);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
.category-children {
|
|
82
|
-
.category-children-item {
|
|
83
|
-
min-width: 180px;
|
|
84
|
-
margin-right: 10px;
|
|
85
|
-
margin-bottom: 1px;
|
|
86
|
-
display: inline-block;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
[component="topic/header"] > i[component="topic/pinned"] {
|
|
91
|
-
color: $danger;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
&.ui-sortable > li .content h2 {
|
|
96
|
-
> [component="topic/pinned"] {
|
|
97
|
-
&:after {
|
|
98
|
-
position: absolute;
|
|
99
|
-
top: 0.5rem;
|
|
100
|
-
left: calc(62px + 2rem);
|
|
101
|
-
width: 4rem;
|
|
102
|
-
height: 3rem;
|
|
103
|
-
background: rgba(0, 0, 0, 0.5);
|
|
104
|
-
color: rgba(255, 255, 255, 0.9);
|
|
105
|
-
font-family: "FontAwesome";
|
|
106
|
-
content: "\f07d \f255";
|
|
107
|
-
text-align: center;
|
|
108
|
-
font-size: 1.5rem;
|
|
109
|
-
padding-top: 0.66rem;
|
|
110
|
-
cursor: move;
|
|
111
|
-
opacity: 0;
|
|
112
|
-
|
|
113
|
-
-webkit-transition: opacity 100ms linear;
|
|
114
|
-
-moz-transition: opacity 100ms linear;
|
|
115
|
-
-ms-transition: opacity 100ms linear;
|
|
116
|
-
-o-transition: opacity 100ms linear;
|
|
117
|
-
transition: opacity 100ms linear;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
&:hover {
|
|
122
|
-
> [component="topic/pinned"] {
|
|
123
|
-
&:after {
|
|
124
|
-
opacity: 1;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
.category-header {
|
|
133
|
-
width: 100%;
|
|
134
|
-
height: 110px;
|
|
135
|
-
text-align: center;
|
|
136
|
-
margin: 0;
|
|
137
|
-
padding-top:25px;
|
|
138
|
-
@include pointer;
|
|
139
|
-
margin-bottom: 10px;
|
|
140
|
-
overflow:hidden;
|
|
141
|
-
|
|
142
|
-
&:hover {
|
|
143
|
-
filter: brightness(115%);
|
|
144
|
-
-webkit-filter: brightness(115%);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
.category-box {
|
|
148
|
-
height:90px;
|
|
149
|
-
|
|
150
|
-
.post-preview {
|
|
151
|
-
padding-left:10px;
|
|
152
|
-
padding-right:10px;
|
|
153
|
-
text-align:left;
|
|
154
|
-
img {
|
|
155
|
-
width:60px;
|
|
156
|
-
height:60px;
|
|
157
|
-
padding-right:5px;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
p {
|
|
161
|
-
overflow: hidden;
|
|
162
|
-
text-overflow:ellipsis;
|
|
163
|
-
height:60px;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
.category-header-image-auto {
|
|
170
|
-
-webkit-background-size: auto!important;
|
|
171
|
-
-moz-background-size: auto!important;
|
|
172
|
-
-o-background-size: auto!important;
|
|
173
|
-
background-size: auto!important;
|
|
174
|
-
background-position: 0% 0% !important;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
.category-header-image-cover {
|
|
178
|
-
-webkit-background-size: cover!important;
|
|
179
|
-
-moz-background-size: cover!important;
|
|
180
|
-
-o-background-size: cover!important;
|
|
181
|
-
background-size: cover!important;
|
|
182
|
-
background-position: center!important;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
.category-header-image-contain {
|
|
186
|
-
-webkit-background-size: contain!important;
|
|
187
|
-
-moz-background-size: contain!important;
|
|
188
|
-
-o-background-size: contain!important;
|
|
189
|
-
background-size: contain!important;
|
|
190
|
-
background-position: center!important;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
.stats {
|
|
195
|
-
font-size: 20px;
|
|
196
|
-
text-align: center;
|
|
197
|
-
margin-top: 10px;
|
|
198
|
-
line-height: 22px;
|
|
199
|
-
|
|
200
|
-
small {
|
|
201
|
-
text-transform: uppercase;
|
|
202
|
-
font-weight: 300;
|
|
203
|
-
font-size: 12px;
|
|
204
|
-
}
|
|
205
|
-
}
|