@okjavis/nodebb-theme-javis 2.0.0 → 2.1.0
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/_topic.scss +298 -164
- package/templates/partials/topic/sidebar.tpl +48 -0
- package/templates/topic.tpl +133 -0
package/package.json
CHANGED
package/scss/_topic.scss
CHANGED
|
@@ -4,64 +4,59 @@
|
|
|
4
4
|
// ===========================================================
|
|
5
5
|
|
|
6
6
|
// ===========================================================
|
|
7
|
-
//
|
|
7
|
+
// HIDDEN ELEMENTS
|
|
8
8
|
// ===========================================================
|
|
9
9
|
body.template-topic {
|
|
10
|
-
.breadcrumb
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
font-size: $jv-font-size-sm;
|
|
15
|
-
|
|
16
|
-
.breadcrumb-item {
|
|
17
|
-
color: $jv-text-soft;
|
|
18
|
-
|
|
19
|
-
a {
|
|
20
|
-
color: $jv-text-muted;
|
|
21
|
-
text-decoration: none;
|
|
22
|
-
transition: color $jv-transition-fast;
|
|
23
|
-
|
|
24
|
-
&:hover {
|
|
25
|
-
color: $jv-primary;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
10
|
+
.breadcrumb,
|
|
11
|
+
[component="topic/thumb/list"] {
|
|
12
|
+
display: none !important;
|
|
13
|
+
}
|
|
28
14
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
15
|
+
// ===========================================================
|
|
16
|
+
// LAYOUT & CONTAINER
|
|
17
|
+
// ===========================================================
|
|
18
|
+
#content {
|
|
19
|
+
padding-left: 48px !important;
|
|
20
|
+
padding-right: 48px !important;
|
|
21
|
+
}
|
|
35
22
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
color: $jv-text-muted;
|
|
39
|
-
font-weight: 500;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
23
|
+
[itemscope][itemtype="https://schema.org/DiscussionForumPosting"] > .d-flex.flex-column.gap-3 {
|
|
24
|
+
margin-top: 24px !important;
|
|
42
25
|
}
|
|
43
26
|
|
|
44
27
|
// ===========================================================
|
|
45
|
-
// TOPIC HEADER – Title
|
|
28
|
+
// TOPIC HEADER – Title Typography
|
|
46
29
|
// ===========================================================
|
|
47
30
|
.topic-header,
|
|
48
|
-
[component="topic/header"]
|
|
49
|
-
|
|
31
|
+
[component="topic/header"],
|
|
32
|
+
[component="post/header"].fs-3 {
|
|
33
|
+
margin-bottom: 0;
|
|
34
|
+
display: flex;
|
|
35
|
+
align-items: flex-start;
|
|
36
|
+
gap: $jv-space-4;
|
|
50
37
|
|
|
51
|
-
// Topic title
|
|
52
38
|
h1,
|
|
53
|
-
[component="topic/title"]
|
|
54
|
-
|
|
55
|
-
font-
|
|
56
|
-
|
|
57
|
-
|
|
39
|
+
[component="topic/title"],
|
|
40
|
+
.topic-title {
|
|
41
|
+
font-size: 32px;
|
|
42
|
+
font-weight: 800;
|
|
43
|
+
line-height: 1.2;
|
|
44
|
+
letter-spacing: -0.03em;
|
|
58
45
|
color: $jv-text-main;
|
|
59
|
-
margin-bottom:
|
|
46
|
+
margin-bottom: 0;
|
|
47
|
+
flex: 1;
|
|
60
48
|
}
|
|
61
49
|
}
|
|
62
50
|
|
|
51
|
+
h1.fs-3 {
|
|
52
|
+
font-size: 32px !important;
|
|
53
|
+
font-weight: 800 !important;
|
|
54
|
+
line-height: 1.2 !important;
|
|
55
|
+
letter-spacing: -0.03em !important;
|
|
56
|
+
}
|
|
57
|
+
|
|
63
58
|
// ===========================================================
|
|
64
|
-
// META PILLS –
|
|
59
|
+
// META PILLS – Tags & Stats
|
|
65
60
|
// ===========================================================
|
|
66
61
|
.topic-tags,
|
|
67
62
|
[component="topic/tags"] {
|
|
@@ -88,7 +83,6 @@ body.template-topic {
|
|
|
88
83
|
}
|
|
89
84
|
}
|
|
90
85
|
|
|
91
|
-
// Category badge in topic
|
|
92
86
|
.category-badge,
|
|
93
87
|
[component="category/link"] .badge {
|
|
94
88
|
background: rgba(0, 0, 0, 0.06);
|
|
@@ -96,8 +90,20 @@ body.template-topic {
|
|
|
96
90
|
font-weight: 500;
|
|
97
91
|
}
|
|
98
92
|
|
|
93
|
+
.topic-info .stats,
|
|
94
|
+
.badge.stats,
|
|
95
|
+
.topic-stats .badge {
|
|
96
|
+
background: rgba(0, 0, 0, 0.04) !important;
|
|
97
|
+
border: 1px solid $jv-border-subtle !important;
|
|
98
|
+
color: $jv-text-muted !important;
|
|
99
|
+
font-size: $jv-font-size-xs;
|
|
100
|
+
font-weight: 500;
|
|
101
|
+
padding: $jv-space-1 $jv-space-3;
|
|
102
|
+
border-radius: $jv-radius-pill;
|
|
103
|
+
}
|
|
104
|
+
|
|
99
105
|
// ===========================================================
|
|
100
|
-
//
|
|
106
|
+
// POSTS CONTAINER
|
|
101
107
|
// ===========================================================
|
|
102
108
|
.topic {
|
|
103
109
|
.posts-container {
|
|
@@ -105,22 +111,20 @@ body.template-topic {
|
|
|
105
111
|
width: 100%;
|
|
106
112
|
}
|
|
107
113
|
|
|
108
|
-
// Individual post
|
|
109
114
|
[component="post"] {
|
|
110
115
|
background: $jv-surface;
|
|
111
116
|
border-radius: $jv-radius-md;
|
|
112
117
|
margin-bottom: $jv-space-4;
|
|
113
|
-
border:
|
|
114
|
-
box-shadow: none;
|
|
118
|
+
border: 1px solid $jv-border-subtle;
|
|
119
|
+
box-shadow: none;
|
|
115
120
|
|
|
116
|
-
// Post container inner
|
|
117
121
|
.post-container {
|
|
118
122
|
padding: $jv-space-6;
|
|
123
|
+
padding-top: 0 !important;
|
|
119
124
|
border: none;
|
|
120
125
|
background: transparent;
|
|
121
126
|
}
|
|
122
127
|
|
|
123
|
-
// Selected state (when linked directly)
|
|
124
128
|
&.selected .post-container {
|
|
125
129
|
background: $jv-selected-bg;
|
|
126
130
|
border-radius: $jv-radius-md;
|
|
@@ -138,7 +142,6 @@ body.template-topic {
|
|
|
138
142
|
margin-bottom: $jv-space-4;
|
|
139
143
|
font-size: $jv-font-size-sm;
|
|
140
144
|
|
|
141
|
-
// Avatar
|
|
142
145
|
.avatar {
|
|
143
146
|
width: 40px;
|
|
144
147
|
height: 40px;
|
|
@@ -147,14 +150,12 @@ body.template-topic {
|
|
|
147
150
|
flex-shrink: 0;
|
|
148
151
|
}
|
|
149
152
|
|
|
150
|
-
// User info container
|
|
151
153
|
.user-info {
|
|
152
154
|
display: flex;
|
|
153
155
|
flex-direction: column;
|
|
154
156
|
gap: 2px;
|
|
155
157
|
}
|
|
156
158
|
|
|
157
|
-
// Username
|
|
158
159
|
.username,
|
|
159
160
|
[component="post/header/username"] {
|
|
160
161
|
font-weight: 600;
|
|
@@ -166,27 +167,20 @@ body.template-topic {
|
|
|
166
167
|
}
|
|
167
168
|
}
|
|
168
169
|
|
|
169
|
-
// Timestamp
|
|
170
170
|
.timeago,
|
|
171
171
|
[component="post/timestamp"] {
|
|
172
172
|
color: $jv-text-soft;
|
|
173
173
|
font-size: $jv-font-size-xs;
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
-
// Post index/number - Subtle
|
|
177
176
|
.post-index,
|
|
178
177
|
[component="post/header/index"] {
|
|
179
178
|
color: $jv-text-soft;
|
|
180
179
|
font-size: $jv-font-size-xs;
|
|
181
180
|
font-weight: 400;
|
|
182
|
-
opacity: 0.
|
|
183
|
-
|
|
184
|
-
&::before {
|
|
185
|
-
content: "#";
|
|
186
|
-
}
|
|
181
|
+
opacity: 0.5;
|
|
187
182
|
}
|
|
188
183
|
|
|
189
|
-
// Bookmarked indicator
|
|
190
184
|
.bookmarked {
|
|
191
185
|
color: $jv-warning;
|
|
192
186
|
}
|
|
@@ -202,34 +196,26 @@ body.template-topic {
|
|
|
202
196
|
|
|
203
197
|
p {
|
|
204
198
|
margin-bottom: $jv-space-4;
|
|
205
|
-
|
|
206
|
-
&:last-child {
|
|
207
|
-
margin-bottom: 0;
|
|
208
|
-
}
|
|
199
|
+
&:last-child { margin-bottom: 0; }
|
|
209
200
|
}
|
|
210
201
|
|
|
211
|
-
// Code blocks
|
|
212
202
|
pre, code {
|
|
213
203
|
background: rgba(0, 0, 0, 0.04);
|
|
214
204
|
border-radius: $jv-radius-sm;
|
|
215
205
|
font-size: $jv-font-size-sm;
|
|
216
206
|
}
|
|
217
207
|
|
|
218
|
-
code {
|
|
219
|
-
padding: 2px 6px;
|
|
220
|
-
}
|
|
208
|
+
code { padding: 2px 6px; }
|
|
221
209
|
|
|
222
210
|
pre {
|
|
223
211
|
padding: $jv-space-4;
|
|
224
212
|
overflow-x: auto;
|
|
225
|
-
|
|
226
213
|
code {
|
|
227
214
|
padding: 0;
|
|
228
215
|
background: transparent;
|
|
229
216
|
}
|
|
230
217
|
}
|
|
231
218
|
|
|
232
|
-
// Blockquotes
|
|
233
219
|
blockquote {
|
|
234
220
|
border-left: 3px solid $jv-border-strong;
|
|
235
221
|
padding-left: $jv-space-4;
|
|
@@ -238,42 +224,34 @@ body.template-topic {
|
|
|
238
224
|
font-style: italic;
|
|
239
225
|
}
|
|
240
226
|
|
|
241
|
-
// Images
|
|
242
227
|
img {
|
|
243
228
|
max-width: 100%;
|
|
244
229
|
border-radius: $jv-radius-sm;
|
|
245
230
|
}
|
|
246
231
|
|
|
247
|
-
// Links
|
|
248
232
|
a {
|
|
249
233
|
color: $jv-primary;
|
|
250
|
-
|
|
251
|
-
&:hover {
|
|
252
|
-
text-decoration: underline;
|
|
253
|
-
}
|
|
234
|
+
&:hover { text-decoration: underline; }
|
|
254
235
|
}
|
|
255
236
|
}
|
|
256
237
|
|
|
257
238
|
// ===========================================================
|
|
258
|
-
// POST FOOTER
|
|
239
|
+
// POST FOOTER & ACTIONS
|
|
259
240
|
// ===========================================================
|
|
260
241
|
[component="post/footer"],
|
|
261
242
|
.post-footer {
|
|
262
|
-
padding-top:
|
|
243
|
+
padding-top: 0 !important;
|
|
244
|
+
padding-bottom: 0 !important;
|
|
263
245
|
margin-top: $jv-space-4;
|
|
264
246
|
border-top: 1px solid $jv-border-subtle;
|
|
265
247
|
}
|
|
266
248
|
|
|
267
|
-
// ===========================================================
|
|
268
|
-
// ACTION ICONS – Ghost Button Style
|
|
269
|
-
// ===========================================================
|
|
270
249
|
[component="post/actions"] {
|
|
271
250
|
display: flex;
|
|
272
251
|
align-items: center;
|
|
273
252
|
gap: $jv-space-2;
|
|
274
253
|
flex-wrap: wrap;
|
|
275
254
|
|
|
276
|
-
// All action buttons - Ghost style
|
|
277
255
|
.btn,
|
|
278
256
|
[component="post/reply"],
|
|
279
257
|
[component="post/quote"],
|
|
@@ -293,9 +271,7 @@ body.template-topic {
|
|
|
293
271
|
align-items: center;
|
|
294
272
|
gap: $jv-space-2;
|
|
295
273
|
|
|
296
|
-
i {
|
|
297
|
-
font-size: 16px;
|
|
298
|
-
}
|
|
274
|
+
i { font-size: 16px; }
|
|
299
275
|
|
|
300
276
|
&:hover {
|
|
301
277
|
background: $jv-hover-bg !important;
|
|
@@ -307,7 +283,6 @@ body.template-topic {
|
|
|
307
283
|
box-shadow: $jv-focus-ring;
|
|
308
284
|
}
|
|
309
285
|
|
|
310
|
-
// Active states (voted, bookmarked)
|
|
311
286
|
&.active,
|
|
312
287
|
&.upvoted,
|
|
313
288
|
&.downvoted,
|
|
@@ -317,7 +292,6 @@ body.template-topic {
|
|
|
317
292
|
}
|
|
318
293
|
}
|
|
319
294
|
|
|
320
|
-
// Vote counts
|
|
321
295
|
[component="post/vote-count"] {
|
|
322
296
|
font-weight: 600;
|
|
323
297
|
color: $jv-text-muted;
|
|
@@ -326,71 +300,244 @@ body.template-topic {
|
|
|
326
300
|
}
|
|
327
301
|
}
|
|
328
302
|
|
|
303
|
+
// Always visible post actions (override Harmony's hover behavior)
|
|
304
|
+
.topic .posts [component="post"] [component="post/actions"] {
|
|
305
|
+
opacity: 1 !important;
|
|
306
|
+
visibility: visible !important;
|
|
307
|
+
}
|
|
308
|
+
|
|
329
309
|
// ===========================================================
|
|
330
|
-
//
|
|
310
|
+
// GHOST BUTTON – Shared Style
|
|
331
311
|
// ===========================================================
|
|
332
|
-
.
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
312
|
+
.btn-ghost {
|
|
313
|
+
background: transparent !important;
|
|
314
|
+
border: 1px solid transparent !important;
|
|
315
|
+
color: $jv-text-muted;
|
|
316
|
+
padding: $jv-space-2 $jv-space-3;
|
|
317
|
+
border-radius: $jv-radius-sm;
|
|
318
|
+
font-size: $jv-font-size-sm;
|
|
319
|
+
font-weight: 500;
|
|
320
|
+
transition: background-color $jv-transition-fast, color $jv-transition-fast;
|
|
321
|
+
display: inline-flex;
|
|
322
|
+
align-items: center;
|
|
323
|
+
gap: $jv-space-2;
|
|
324
|
+
|
|
325
|
+
i {
|
|
326
|
+
font-size: 16px;
|
|
327
|
+
color: $jv-primary;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
&:hover {
|
|
331
|
+
background: $jv-hover-bg !important;
|
|
332
|
+
color: $jv-text-main;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
&:focus-visible {
|
|
336
|
+
outline: none;
|
|
337
|
+
box-shadow: $jv-focus-ring;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// ===========================================================
|
|
342
|
+
// PRIMARY BUTTON – Reply
|
|
343
|
+
// ===========================================================
|
|
344
|
+
.btn-primary {
|
|
345
|
+
background: $jv-primary !important;
|
|
346
|
+
border-color: $jv-primary !important;
|
|
347
|
+
color: #fff !important;
|
|
348
|
+
|
|
349
|
+
&:hover {
|
|
350
|
+
background: $jv-primary-hover !important;
|
|
351
|
+
border-color: $jv-primary-hover !important;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
// ===========================================================
|
|
356
|
+
// PAGINATION / TIMELINE NAVIGATOR – Shared
|
|
357
|
+
// ===========================================================
|
|
358
|
+
.pagination-block {
|
|
359
|
+
.scroller-content {
|
|
360
|
+
min-width: 180px;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
.scroller-thumb-icon {
|
|
364
|
+
background: $jv-primary !important;
|
|
365
|
+
border-radius: $jv-radius-xs;
|
|
366
|
+
transition: transform $jv-transition-fast;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
.pagetop,
|
|
370
|
+
.pagebottom {
|
|
371
|
+
background: transparent;
|
|
372
|
+
border: none;
|
|
338
373
|
color: $jv-text-muted;
|
|
339
|
-
padding: $jv-space-2 $jv-space-
|
|
374
|
+
padding: $jv-space-2 $jv-space-3;
|
|
340
375
|
border-radius: $jv-radius-sm;
|
|
341
376
|
font-size: $jv-font-size-sm;
|
|
342
|
-
font-weight: 500;
|
|
343
|
-
transition: background-color $jv-transition-fast, color $jv-transition-fast;
|
|
344
|
-
display: inline-flex;
|
|
345
|
-
align-items: center;
|
|
346
|
-
gap: $jv-space-2;
|
|
347
|
-
width: 100%;
|
|
348
|
-
justify-content: flex-start;
|
|
349
|
-
text-align: left;
|
|
350
|
-
|
|
351
|
-
i {
|
|
352
|
-
font-size: 16px;
|
|
353
|
-
width: 20px;
|
|
354
|
-
text-align: center;
|
|
355
|
-
}
|
|
356
377
|
|
|
357
378
|
&:hover {
|
|
358
|
-
background: $jv-hover-bg
|
|
379
|
+
background: $jv-hover-bg;
|
|
359
380
|
color: $jv-text-main;
|
|
360
381
|
}
|
|
361
382
|
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
383
|
+
i { color: $jv-primary; }
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
.thumb-text {
|
|
387
|
+
color: $jv-text-main;
|
|
388
|
+
font-weight: 600;
|
|
389
|
+
font-size: $jv-font-size-sm;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
.thumb-timestamp {
|
|
393
|
+
color: $jv-text-soft;
|
|
394
|
+
font-size: $jv-font-size-xs;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
// ===========================================================
|
|
399
|
+
// TOPIC SIDEBAR – Right Column
|
|
400
|
+
// ===========================================================
|
|
401
|
+
.topic-sidebar-container {
|
|
402
|
+
position: sticky;
|
|
403
|
+
top: 80px;
|
|
404
|
+
height: fit-content;
|
|
405
|
+
align-self: flex-start;
|
|
406
|
+
z-index: 100;
|
|
407
|
+
pointer-events: auto;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
.topic-sidebar {
|
|
411
|
+
background: $jv-surface;
|
|
412
|
+
border: 1px solid $jv-border-subtle;
|
|
413
|
+
border-radius: $jv-radius-md;
|
|
414
|
+
padding: $jv-space-4;
|
|
415
|
+
position: relative;
|
|
416
|
+
pointer-events: auto;
|
|
417
|
+
|
|
418
|
+
button, a, .btn, .dropdown-toggle, [role="button"] {
|
|
419
|
+
pointer-events: auto;
|
|
420
|
+
cursor: pointer;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
.topic-sidebar-actions {
|
|
424
|
+
position: relative;
|
|
425
|
+
z-index: 10;
|
|
426
|
+
|
|
427
|
+
.btn,
|
|
428
|
+
[component="topic/reply/container"],
|
|
429
|
+
.btn-group,
|
|
430
|
+
.thread-tools {
|
|
431
|
+
width: 100%;
|
|
432
|
+
position: relative;
|
|
433
|
+
z-index: 10;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
[component="topic/reply/container"] {
|
|
437
|
+
display: flex;
|
|
438
|
+
flex-direction: column;
|
|
439
|
+
gap: $jv-space-2;
|
|
440
|
+
|
|
441
|
+
.btn-primary {
|
|
442
|
+
flex: 1;
|
|
443
|
+
border-radius: $jv-radius-sm;
|
|
444
|
+
font-weight: 600;
|
|
445
|
+
padding: $jv-space-3 $jv-space-4;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
.dropdown-toggle { display: none; }
|
|
365
449
|
}
|
|
366
450
|
|
|
367
|
-
//
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
451
|
+
// Consistent ghost button styling for all sidebar action buttons
|
|
452
|
+
.btn-ghost,
|
|
453
|
+
.bottom-sheet > .btn,
|
|
454
|
+
.thread-tools > .dropdown-toggle {
|
|
455
|
+
background: transparent !important;
|
|
456
|
+
border: 1px solid transparent !important;
|
|
457
|
+
color: $jv-text-muted;
|
|
458
|
+
padding: $jv-space-2 $jv-space-3;
|
|
459
|
+
border-radius: $jv-radius-sm;
|
|
460
|
+
font-size: $jv-font-size-sm;
|
|
461
|
+
font-weight: 500;
|
|
462
|
+
text-align: left;
|
|
463
|
+
width: 100%;
|
|
464
|
+
justify-content: flex-start;
|
|
465
|
+
transition: background-color $jv-transition-fast, color $jv-transition-fast;
|
|
466
|
+
|
|
467
|
+
i {
|
|
468
|
+
width: 16px;
|
|
469
|
+
color: $jv-primary;
|
|
470
|
+
}
|
|
371
471
|
|
|
372
472
|
&:hover {
|
|
373
|
-
background: $jv-
|
|
374
|
-
color:
|
|
473
|
+
background: $jv-hover-bg !important;
|
|
474
|
+
color: $jv-text-main;
|
|
375
475
|
}
|
|
376
476
|
}
|
|
477
|
+
|
|
478
|
+
.bottom-sheet {
|
|
479
|
+
width: 100%;
|
|
480
|
+
.dropdown-menu { width: 100%; }
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
.thread-tools {
|
|
484
|
+
.dropdown-menu { min-width: 100%; }
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
.pagination-block {
|
|
489
|
+
margin-top: $jv-space-4;
|
|
490
|
+
padding-top: $jv-space-4;
|
|
491
|
+
border-top: 1px solid $jv-border-subtle;
|
|
492
|
+
|
|
493
|
+
.scroller-content { gap: $jv-space-2; }
|
|
494
|
+
|
|
495
|
+
.scroller-container {
|
|
496
|
+
padding: $jv-space-2 $jv-space-3;
|
|
497
|
+
position: relative !important;
|
|
498
|
+
left: auto !important;
|
|
499
|
+
height: auto !important;
|
|
500
|
+
border-left: none !important;
|
|
501
|
+
}
|
|
377
502
|
}
|
|
378
503
|
}
|
|
379
504
|
|
|
380
|
-
//
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
505
|
+
// ===========================================================
|
|
506
|
+
// WIDGET AREA
|
|
507
|
+
// ===========================================================
|
|
508
|
+
[data-widget-area="sidebar"] {
|
|
509
|
+
.btn {
|
|
510
|
+
transition: background-color $jv-transition-fast, color $jv-transition-fast;
|
|
511
|
+
&:focus-visible {
|
|
512
|
+
outline: none;
|
|
513
|
+
box-shadow: $jv-focus-ring;
|
|
514
|
+
}
|
|
515
|
+
}
|
|
386
516
|
|
|
387
|
-
.
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
border-radius: $jv-radius-
|
|
517
|
+
.widget {
|
|
518
|
+
background: $jv-surface;
|
|
519
|
+
border: 1px solid $jv-border-subtle;
|
|
520
|
+
border-radius: $jv-radius-md;
|
|
521
|
+
padding: $jv-space-4;
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
// ===========================================================
|
|
526
|
+
// TOPIC NAVIGATOR (Floating)
|
|
527
|
+
// ===========================================================
|
|
528
|
+
[component="topic/navigator"] {
|
|
529
|
+
background: $jv-surface;
|
|
530
|
+
border-radius: $jv-radius-md;
|
|
531
|
+
box-shadow: $jv-shadow-lg;
|
|
532
|
+
border: 1px solid $jv-border-subtle;
|
|
533
|
+
padding: $jv-space-3;
|
|
534
|
+
|
|
535
|
+
.btn {
|
|
536
|
+
background: transparent;
|
|
537
|
+
border: none;
|
|
391
538
|
color: $jv-text-muted;
|
|
392
|
-
|
|
393
|
-
|
|
539
|
+
padding: $jv-space-2;
|
|
540
|
+
border-radius: $jv-radius-sm;
|
|
394
541
|
|
|
395
542
|
&:hover {
|
|
396
543
|
background: $jv-hover-bg;
|
|
@@ -410,14 +557,12 @@ body.template-topic {
|
|
|
410
557
|
margin-top: $jv-space-6;
|
|
411
558
|
border: 1px solid $jv-border-subtle;
|
|
412
559
|
|
|
413
|
-
// Quick reply header
|
|
414
560
|
.quick-reply-header {
|
|
415
561
|
margin-bottom: $jv-space-4;
|
|
416
562
|
font-weight: 600;
|
|
417
563
|
color: $jv-text-main;
|
|
418
564
|
}
|
|
419
565
|
|
|
420
|
-
// Textarea
|
|
421
566
|
textarea,
|
|
422
567
|
.form-control {
|
|
423
568
|
border: 1px solid $jv-border-subtle;
|
|
@@ -435,12 +580,9 @@ body.template-topic {
|
|
|
435
580
|
box-shadow: $jv-focus-ring;
|
|
436
581
|
}
|
|
437
582
|
|
|
438
|
-
&::placeholder {
|
|
439
|
-
color: $jv-text-soft;
|
|
440
|
-
}
|
|
583
|
+
&::placeholder { color: $jv-text-soft; }
|
|
441
584
|
}
|
|
442
585
|
|
|
443
|
-
// Quick reply footer with buttons
|
|
444
586
|
.quick-reply-footer,
|
|
445
587
|
.composer-actions {
|
|
446
588
|
display: flex;
|
|
@@ -451,7 +593,7 @@ body.template-topic {
|
|
|
451
593
|
}
|
|
452
594
|
|
|
453
595
|
// ===========================================================
|
|
454
|
-
//
|
|
596
|
+
// NESTED REPLIES
|
|
455
597
|
// ===========================================================
|
|
456
598
|
[component="post/replies/container"] {
|
|
457
599
|
margin-top: $jv-space-4;
|
|
@@ -464,33 +606,29 @@ body.template-topic {
|
|
|
464
606
|
background: rgba(0, 0, 0, 0.02);
|
|
465
607
|
border-radius: $jv-radius-sm;
|
|
466
608
|
|
|
467
|
-
.post-container {
|
|
468
|
-
padding: 0;
|
|
469
|
-
}
|
|
609
|
+
.post-container { padding: 0; }
|
|
470
610
|
}
|
|
471
611
|
}
|
|
472
612
|
|
|
473
613
|
// ===========================================================
|
|
474
|
-
//
|
|
614
|
+
// REPLY COUNT ACCORDION
|
|
475
615
|
// ===========================================================
|
|
476
|
-
[component="
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
border:
|
|
481
|
-
|
|
616
|
+
[component="post/reply-count"] {
|
|
617
|
+
color: $jv-text-muted;
|
|
618
|
+
font-size: $jv-font-size-sm;
|
|
619
|
+
padding: $jv-space-2 $jv-space-3;
|
|
620
|
+
border-radius: $jv-radius-sm;
|
|
621
|
+
cursor: pointer;
|
|
622
|
+
transition: background-color $jv-transition-fast, color $jv-transition-fast;
|
|
482
623
|
|
|
483
|
-
|
|
484
|
-
background:
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
padding: $jv-space-2;
|
|
488
|
-
border-radius: $jv-radius-sm;
|
|
624
|
+
&:hover {
|
|
625
|
+
background: $jv-hover-bg;
|
|
626
|
+
color: $jv-text-main;
|
|
627
|
+
}
|
|
489
628
|
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
}
|
|
629
|
+
.replies-count {
|
|
630
|
+
color: $jv-text-main;
|
|
631
|
+
font-weight: 600;
|
|
494
632
|
}
|
|
495
633
|
}
|
|
496
634
|
}
|
|
@@ -518,11 +656,7 @@ body.template-topic {
|
|
|
518
656
|
[component="post/upvote"],
|
|
519
657
|
[component="post/downvote"] {
|
|
520
658
|
padding: $jv-space-2;
|
|
521
|
-
|
|
522
|
-
// Hide text on smaller screens
|
|
523
|
-
span:not(.fa):not(.fas):not(.far):not(.fab) {
|
|
524
|
-
display: none;
|
|
525
|
-
}
|
|
659
|
+
span:not(.fa):not(.fas):not(.far):not(.fab) { display: none; }
|
|
526
660
|
}
|
|
527
661
|
}
|
|
528
662
|
}
|
|
@@ -544,4 +678,4 @@ body.template-topic {
|
|
|
544
678
|
padding-left: $jv-space-4;
|
|
545
679
|
}
|
|
546
680
|
}
|
|
547
|
-
}
|
|
681
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<div id="topic-sidebar" class="topic-sidebar">
|
|
2
|
+
<div class="d-flex flex-column gap-2">
|
|
3
|
+
<div class="topic-sidebar-actions d-flex flex-column gap-2 mb-3">
|
|
4
|
+
<!-- Reply Button -->
|
|
5
|
+
<!-- IMPORT partials/topic/reply-button.tpl -->
|
|
6
|
+
|
|
7
|
+
<!-- Mark Unread Button -->
|
|
8
|
+
{{{ if loggedIn }}}
|
|
9
|
+
<button component="topic/mark-unread" class="btn btn-ghost btn-sm d-flex gap-2 align-items-center w-100 justify-content-start">
|
|
10
|
+
<i class="fa fa-fw fa-inbox"></i>
|
|
11
|
+
<span class="fw-semibold text-nowrap">[[topic:mark-unread]]</span>
|
|
12
|
+
</button>
|
|
13
|
+
{{{ end }}}
|
|
14
|
+
|
|
15
|
+
<!-- Watching/Not Watching -->
|
|
16
|
+
<!-- IMPORT partials/topic/watch.tpl -->
|
|
17
|
+
|
|
18
|
+
<!-- Sort Options -->
|
|
19
|
+
<!-- IMPORT partials/topic/sort.tpl -->
|
|
20
|
+
|
|
21
|
+
<!-- Topic Tools (for mods/admins) -->
|
|
22
|
+
<!-- IMPORT partials/topic/tools.tpl -->
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
<!-- Post Navigator / Timeline -->
|
|
26
|
+
<div class="pagination-block flex-grow-1">
|
|
27
|
+
<div class="scroller-content d-flex gap-2 flex-column align-items-start">
|
|
28
|
+
<button class="btn btn-ghost btn-sm d-flex gap-2 align-items-center pagetop w-100 justify-content-start">
|
|
29
|
+
<i class="fa fa-fw fa-angle-up"></i>
|
|
30
|
+
<span class="timeago text-xs text-muted text-nowrap" title="{./timestampISO}"></span>
|
|
31
|
+
</button>
|
|
32
|
+
<div class="scroller-container position-relative w-100">
|
|
33
|
+
<div class="scroller-thumb d-flex gap-2 text-nowrap position-relative" style="height: 40px;">
|
|
34
|
+
<div class="scroller-thumb-icon rounded d-inline-block" style="width: 4px; height: 40px;"></div>
|
|
35
|
+
<div class="d-flex flex-column">
|
|
36
|
+
<span class="thumb-text small fw-semibold mb-0"></span>
|
|
37
|
+
<span class="thumb-timestamp timeago text-xs text-muted mb-0"></span>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
<button class="btn btn-ghost btn-sm d-flex gap-2 align-items-center pagebottom w-100 justify-content-start">
|
|
42
|
+
<i class="fa fa-fw fa-angle-down"></i>
|
|
43
|
+
<span class="timeago text-xs text-muted text-nowrap" title="{./lastposttimeISO}"></span>
|
|
44
|
+
</button>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
<!-- IMPORT partials/breadcrumbs-json-ld.tpl -->
|
|
2
|
+
{{{ if config.theme.enableBreadcrumbs }}}
|
|
3
|
+
<!-- IMPORT partials/breadcrumbs.tpl -->
|
|
4
|
+
{{{ end }}}
|
|
5
|
+
{{{ if widgets.header.length }}}
|
|
6
|
+
<div data-widget-area="header">
|
|
7
|
+
{{{each widgets.header}}}
|
|
8
|
+
{{widgets.header.html}}
|
|
9
|
+
{{{end}}}
|
|
10
|
+
</div>
|
|
11
|
+
{{{ end }}}
|
|
12
|
+
|
|
13
|
+
<div itemid="{url}" itemscope itemtype="https://schema.org/DiscussionForumPosting">
|
|
14
|
+
<meta itemprop="headline" content="{escape(titleRaw)}">
|
|
15
|
+
<meta itemprop="text" content="{escape(titleRaw)}">
|
|
16
|
+
<meta itemprop="url" content="{url}">
|
|
17
|
+
<meta itemprop="datePublished" content="{timestampISO}">
|
|
18
|
+
<meta itemprop="dateModified" content="{lastposttimeISO}">
|
|
19
|
+
<div itemprop="author" itemscope itemtype="https://schema.org/Person">
|
|
20
|
+
<meta itemprop="name" content="{author.username}">
|
|
21
|
+
{{{ if author.userslug }}}<meta itemprop="url" content="{config.relative_path}/user/{author.userslug}">{{{ end }}}
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<div class="d-flex flex-column gap-3">
|
|
25
|
+
<div class="d-flex flex-wrap">
|
|
26
|
+
<div class="d-flex flex-column gap-3 flex-grow-1">
|
|
27
|
+
<div class="topic-header d-flex align-items-start gap-3">
|
|
28
|
+
<a href="#" onclick="history.back(); return false;" class="topic-back-btn" title="Go back">
|
|
29
|
+
<i class="fa fa-arrow-left"></i>
|
|
30
|
+
</a>
|
|
31
|
+
<h1 component="post/header" class="tracking-tight fw-semibold fs-3 mb-0 text-break {{{ if config.theme.centerHeaderElements }}}text-center{{{ end }}}">
|
|
32
|
+
<span class="topic-title" component="topic/title">{title}</span>
|
|
33
|
+
</h1>
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
<div class="topic-info d-flex gap-2 align-items-center flex-wrap {{{ if config.theme.centerHeaderElements }}}justify-content-center{{{ end }}}">
|
|
37
|
+
<span component="topic/labels" class="d-flex gap-2 {{{ if (!scheduled && (!pinned && (!locked && (!oldCid && !icons.length)))) }}}hidden{{{ end }}}">
|
|
38
|
+
<span component="topic/scheduled" class="badge badge border border-gray-300 text-body {{{ if !scheduled }}}hidden{{{ end }}}">
|
|
39
|
+
<i class="fa fa-clock-o"></i> [[topic:scheduled]]
|
|
40
|
+
</span>
|
|
41
|
+
<span component="topic/pinned" class="badge badge border border-gray-300 text-body {{{ if (scheduled || !pinned) }}}hidden{{{ end }}}">
|
|
42
|
+
<i class="fa fa-thumb-tack"></i> {{{ if !pinExpiry }}}[[topic:pinned]]{{{ else }}}[[topic:pinned-with-expiry, {isoTimeToLocaleString(./pinExpiryISO, config.userLang)}]]{{{ end }}}
|
|
43
|
+
</span>
|
|
44
|
+
<span component="topic/locked" class="badge badge border border-gray-300 text-body {{{ if !locked }}}hidden{{{ end }}}">
|
|
45
|
+
<i class="fa fa-lock"></i> [[topic:locked]]
|
|
46
|
+
</span>
|
|
47
|
+
<a component="topic/moved" href="{config.relative_path}/category/{oldCid}" class="badge badge border border-gray-300 text-body text-decoration-none {{{ if !oldCid }}}hidden{{{ end }}}">
|
|
48
|
+
<i class="fa fa-arrow-circle-right"></i> {{{ if privileges.isAdminOrMod }}}[[topic:moved-from, {oldCategory.name}]]{{{ else }}}[[topic:moved]]{{{ end }}}
|
|
49
|
+
</a>
|
|
50
|
+
{{{each icons}}}<span class="lh-1">{@value}</span>{{{end}}}
|
|
51
|
+
</span>
|
|
52
|
+
{function.buildCategoryLabel, category, "a", "border"}
|
|
53
|
+
<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>
|
|
54
|
+
<div class="d-flex hidden-xs gap-2"><!-- IMPORT partials/topic/stats.tpl --></div>
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
<div class="d-flex gap-2 align-items-center mt-2 hidden-empty" component="topic/thumb/list"><!-- IMPORT partials/topic/thumbs.tpl --></div>
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
<div class="topic-layout d-flex gap-4 mb-4 mb-lg-0">
|
|
61
|
+
<!-- Main Content Area -->
|
|
62
|
+
<div class="topic flex-grow-1" style="min-width: 0;">
|
|
63
|
+
{{{ if merger }}}
|
|
64
|
+
<!-- IMPORT partials/topic/merged-message.tpl -->
|
|
65
|
+
{{{ end }}}
|
|
66
|
+
{{{ if forker }}}
|
|
67
|
+
<!-- IMPORT partials/topic/forked-message.tpl -->
|
|
68
|
+
{{{ end }}}
|
|
69
|
+
{{{ if !scheduled }}}
|
|
70
|
+
<!-- IMPORT partials/topic/deleted-message.tpl -->
|
|
71
|
+
{{{ end }}}
|
|
72
|
+
|
|
73
|
+
<div class="posts-container" style="min-width: 0;">
|
|
74
|
+
<ul component="topic" class="posts timeline list-unstyled mt-sm-2 p-0 py-3" style="min-width: 0;" data-tid="{tid}" data-cid="{cid}">
|
|
75
|
+
{{{ each posts }}}
|
|
76
|
+
<li component="post" class="pt-4 {{{ if posts.deleted }}}deleted{{{ end }}} {{{ if posts.selfPost }}}self-post{{{ end }}} {{{ if posts.topicOwnerPost }}}topic-owner-post{{{ end }}}" <!-- IMPORT partials/data/topic.tpl -->>
|
|
77
|
+
<a component="post/anchor" data-index="{./index}" id="{increment(./index, "1")}"></a>
|
|
78
|
+
<meta itemprop="datePublished" content="{./timestampISO}">
|
|
79
|
+
{{{ if ./editedISO }}}
|
|
80
|
+
<meta itemprop="dateModified" content="{./editedISO}">
|
|
81
|
+
{{{ end }}}
|
|
82
|
+
|
|
83
|
+
<!-- IMPORT partials/topic/post.tpl -->
|
|
84
|
+
</li>
|
|
85
|
+
{{{ if (config.topicPostSort != "most_votes") }}}
|
|
86
|
+
{{{ each ./events}}}<!-- IMPORT partials/topic/event.tpl -->{{{ end }}}
|
|
87
|
+
{{{ end }}}
|
|
88
|
+
{{{ end }}}
|
|
89
|
+
</ul>
|
|
90
|
+
{{{ if browsingUsers }}}
|
|
91
|
+
<div class="visible-xs">
|
|
92
|
+
<!-- IMPORT partials/topic/browsing-users.tpl -->
|
|
93
|
+
<hr/>
|
|
94
|
+
</div>
|
|
95
|
+
{{{ end }}}
|
|
96
|
+
{{{ if config.theme.enableQuickReply }}}
|
|
97
|
+
<!-- IMPORT partials/topic/quickreply.tpl -->
|
|
98
|
+
{{{ end }}}
|
|
99
|
+
</div>
|
|
100
|
+
|
|
101
|
+
{{{ if config.usePagination }}}
|
|
102
|
+
<!-- IMPORT partials/paginator.tpl -->
|
|
103
|
+
{{{ end }}}
|
|
104
|
+
</div>
|
|
105
|
+
|
|
106
|
+
<!-- Right Sidebar with Topic Actions -->
|
|
107
|
+
<div class="topic-sidebar-container d-none d-lg-block" style="width: 200px; flex-shrink: 0;">
|
|
108
|
+
<!-- IMPORT partials/topic/sidebar.tpl -->
|
|
109
|
+
|
|
110
|
+
<!-- Additional Widgets (if any) -->
|
|
111
|
+
{{{ if widgets.sidebar.length }}}
|
|
112
|
+
<div data-widget-area="sidebar" class="mt-4">
|
|
113
|
+
{{{each widgets.sidebar}}}
|
|
114
|
+
{{widgets.sidebar.html}}
|
|
115
|
+
{{{end}}}
|
|
116
|
+
</div>
|
|
117
|
+
{{{ end }}}
|
|
118
|
+
</div>
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
</div>
|
|
122
|
+
|
|
123
|
+
<div data-widget-area="footer">
|
|
124
|
+
{{{each widgets.footer}}}
|
|
125
|
+
{{widgets.footer.html}}
|
|
126
|
+
{{{end}}}
|
|
127
|
+
</div>
|
|
128
|
+
|
|
129
|
+
{{{ if !config.usePagination }}}
|
|
130
|
+
<noscript>
|
|
131
|
+
<!-- IMPORT partials/paginator.tpl -->
|
|
132
|
+
</noscript>
|
|
133
|
+
{{{ end }}}
|