@okjavis/nodebb-theme-javis 2.2.0 → 2.4.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/_composer.scss +716 -0
- package/scss/_feed.scss +278 -22
- package/scss/_sidebar.scss +1 -1
- package/scss/_topic.scss +202 -156
- package/static/lib/theme.js +146 -0
- package/templates/feed.tpl +163 -0
- package/templates/partials/topic/post-parent.tpl +9 -0
- package/theme.scss +1 -0
package/scss/_feed.scss
CHANGED
|
@@ -4,22 +4,193 @@
|
|
|
4
4
|
// ===========================================================
|
|
5
5
|
|
|
6
6
|
// ===========================================================
|
|
7
|
-
// HIDE
|
|
7
|
+
// HIDE CATEGORIES WIDGET ON FEED PAGE
|
|
8
|
+
// The categories list widget is not relevant on the feed page
|
|
8
9
|
// ===========================================================
|
|
9
|
-
|
|
10
|
-
//
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
//
|
|
10
|
+
.feed {
|
|
11
|
+
// Hide categories list directly - simple and reliable
|
|
12
|
+
ul.categories-list {
|
|
13
|
+
display: none !important;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// Also hide any widget title that precedes a categories list
|
|
17
|
+
// This targets the "All Categories" header
|
|
18
|
+
[data-widget-area="left"],
|
|
19
|
+
[data-widget-area="right"] {
|
|
20
|
+
// Hide the entire widget container that has categories
|
|
21
|
+
// Using adjacent sibling and general sibling selectors
|
|
22
|
+
.categories-list,
|
|
23
|
+
[component="categories/category"] {
|
|
24
|
+
display: none !important;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// ===========================================================
|
|
30
|
+
// LINKEDIN-STYLE COMPOSER PROMPT CARD
|
|
31
|
+
// ===========================================================
|
|
32
|
+
.composer-prompt-card {
|
|
33
|
+
background: $jv-surface;
|
|
34
|
+
border: 1px solid $jv-border-subtle;
|
|
35
|
+
border-radius: $jv-radius-lg;
|
|
36
|
+
padding: $jv-space-4;
|
|
37
|
+
margin-bottom: $jv-space-4;
|
|
38
|
+
box-shadow: $jv-shadow-sm;
|
|
39
|
+
transition: box-shadow $jv-transition-fast, border-color $jv-transition-fast;
|
|
40
|
+
|
|
41
|
+
&:hover {
|
|
42
|
+
box-shadow: $jv-shadow-md;
|
|
43
|
+
border-color: $jv-border-strong;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Guest variant
|
|
47
|
+
&.composer-prompt-guest {
|
|
48
|
+
.composer-prompt-input {
|
|
49
|
+
cursor: pointer;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.composer-prompt-inner {
|
|
55
|
+
display: flex;
|
|
56
|
+
align-items: center;
|
|
57
|
+
gap: $jv-space-3;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.composer-prompt-avatar {
|
|
61
|
+
flex-shrink: 0;
|
|
62
|
+
|
|
63
|
+
.avatar {
|
|
64
|
+
width: 48px !important;
|
|
65
|
+
height: 48px !important;
|
|
66
|
+
border-radius: 50% !important;
|
|
67
|
+
object-fit: cover;
|
|
68
|
+
border: 2px solid rgba(0, 0, 0, 0.05);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.avatar-placeholder {
|
|
72
|
+
width: 48px;
|
|
73
|
+
height: 48px;
|
|
74
|
+
border-radius: 50%;
|
|
75
|
+
background: linear-gradient(135deg, $jv-primary-soft 0%, rgba(0, 81, 255, 0.2) 100%);
|
|
76
|
+
display: flex;
|
|
77
|
+
align-items: center;
|
|
78
|
+
justify-content: center;
|
|
79
|
+
color: $jv-primary;
|
|
80
|
+
font-size: 18px;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.composer-prompt-input {
|
|
85
|
+
flex: 1;
|
|
86
|
+
display: flex;
|
|
87
|
+
align-items: center;
|
|
88
|
+
padding: $jv-space-3 $jv-space-4;
|
|
89
|
+
background: $jv-bg;
|
|
90
|
+
border: 1px solid $jv-border-subtle;
|
|
91
|
+
border-radius: $jv-radius-pill;
|
|
92
|
+
cursor: pointer;
|
|
93
|
+
transition: all $jv-transition-fast;
|
|
94
|
+
text-decoration: none;
|
|
95
|
+
min-height: 48px;
|
|
96
|
+
|
|
97
|
+
&:hover {
|
|
98
|
+
background: rgba(0, 0, 0, 0.04);
|
|
99
|
+
border-color: $jv-border-strong;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
&:focus {
|
|
103
|
+
outline: none;
|
|
104
|
+
border-color: $jv-primary;
|
|
105
|
+
box-shadow: $jv-focus-ring;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Reset button styles
|
|
109
|
+
&.composer-prompt-input {
|
|
110
|
+
text-align: left;
|
|
111
|
+
font-family: inherit;
|
|
112
|
+
font-size: inherit;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.composer-prompt-placeholder {
|
|
117
|
+
color: $jv-text-muted;
|
|
118
|
+
font-size: $jv-font-size-base;
|
|
119
|
+
font-weight: 500;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.composer-prompt-actions {
|
|
123
|
+
display: flex;
|
|
124
|
+
gap: $jv-space-1;
|
|
125
|
+
flex-shrink: 0;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.composer-prompt-action {
|
|
129
|
+
display: flex;
|
|
130
|
+
align-items: center;
|
|
131
|
+
justify-content: center;
|
|
132
|
+
width: 40px;
|
|
133
|
+
height: 40px;
|
|
134
|
+
border: none;
|
|
135
|
+
background: transparent;
|
|
136
|
+
border-radius: 50%;
|
|
137
|
+
color: $jv-text-muted;
|
|
138
|
+
cursor: pointer;
|
|
139
|
+
transition: all $jv-transition-fast;
|
|
140
|
+
|
|
141
|
+
&:hover {
|
|
142
|
+
background: $jv-hover-bg;
|
|
143
|
+
color: $jv-primary;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
&:focus {
|
|
147
|
+
outline: none;
|
|
148
|
+
box-shadow: $jv-focus-ring;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
i {
|
|
152
|
+
font-size: 18px;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
16
155
|
|
|
17
|
-
//
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
156
|
+
// Feed options row (settings dropdown only)
|
|
157
|
+
.feed-options-row {
|
|
158
|
+
margin-bottom: $jv-space-2 !important;
|
|
159
|
+
padding: $jv-space-2 0 !important;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// Mobile responsive
|
|
163
|
+
@media (max-width: 576px) {
|
|
164
|
+
.composer-prompt-card {
|
|
165
|
+
padding: $jv-space-3;
|
|
166
|
+
border-radius: $jv-radius-md;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.composer-prompt-avatar {
|
|
170
|
+
.avatar,
|
|
171
|
+
.avatar-placeholder {
|
|
172
|
+
width: 40px !important;
|
|
173
|
+
height: 40px !important;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.avatar-placeholder {
|
|
177
|
+
font-size: 16px;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.composer-prompt-input {
|
|
182
|
+
padding: $jv-space-2 $jv-space-3;
|
|
183
|
+
min-height: 40px;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.composer-prompt-placeholder {
|
|
187
|
+
font-size: $jv-font-size-sm;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.composer-prompt-actions {
|
|
191
|
+
display: none; // Hide action buttons on mobile for cleaner UI
|
|
192
|
+
}
|
|
193
|
+
}
|
|
23
194
|
|
|
24
195
|
// ===========================================================
|
|
25
196
|
// FEED CONTAINER
|
|
@@ -131,22 +302,18 @@
|
|
|
131
302
|
.overflow-hidden {
|
|
132
303
|
border-radius: $jv-radius-md $jv-radius-md 0 0 !important; // Match card radius
|
|
133
304
|
max-height: 280px !important; // Reduced from 350px - more balanced ratio
|
|
305
|
+
background: rgba(0, 0, 0, 0.02); // Subtle background for letterboxing
|
|
134
306
|
|
|
135
307
|
img {
|
|
136
308
|
width: 100%;
|
|
137
309
|
height: 280px; // Fixed height for consistency
|
|
138
|
-
object-fit:
|
|
310
|
+
object-fit: contain; // Prevent stretching, maintain aspect ratio
|
|
139
311
|
}
|
|
140
312
|
}
|
|
141
313
|
|
|
142
|
-
//
|
|
314
|
+
// Hide additional thumbnails - only show main image in feed
|
|
143
315
|
.position-absolute {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
img {
|
|
147
|
-
border: 2px solid $jv-surface;
|
|
148
|
-
box-shadow: $jv-shadow-soft;
|
|
149
|
-
}
|
|
316
|
+
display: none !important;
|
|
150
317
|
}
|
|
151
318
|
}
|
|
152
319
|
}
|
|
@@ -314,6 +481,95 @@
|
|
|
314
481
|
border-color: $jv-primary !important;
|
|
315
482
|
}
|
|
316
483
|
}
|
|
484
|
+
|
|
485
|
+
// ===========================================================
|
|
486
|
+
// FEED IMAGE CAROUSEL (matching topic page design)
|
|
487
|
+
// ===========================================================
|
|
488
|
+
.post-image-carousel {
|
|
489
|
+
border-radius: $jv-radius-md;
|
|
490
|
+
overflow: hidden;
|
|
491
|
+
margin: $jv-space-4 0;
|
|
492
|
+
background: rgba(0, 0, 0, 0.03);
|
|
493
|
+
|
|
494
|
+
.carousel-inner {
|
|
495
|
+
border-radius: $jv-radius-md;
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
.carousel-item {
|
|
499
|
+
// Fixed height container to prevent jumping
|
|
500
|
+
height: 400px;
|
|
501
|
+
|
|
502
|
+
img {
|
|
503
|
+
width: 100%;
|
|
504
|
+
height: 100%;
|
|
505
|
+
object-fit: contain;
|
|
506
|
+
background: rgba(0, 0, 0, 0.02);
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
// Navigation arrows - matching topic page
|
|
511
|
+
.carousel-control-prev,
|
|
512
|
+
.carousel-control-next {
|
|
513
|
+
width: 48px;
|
|
514
|
+
height: 48px;
|
|
515
|
+
top: 50%;
|
|
516
|
+
transform: translateY(-50%);
|
|
517
|
+
background: rgba(0, 0, 0, 0.5);
|
|
518
|
+
border-radius: 50%;
|
|
519
|
+
opacity: 0;
|
|
520
|
+
transition: opacity $jv-transition-fast;
|
|
521
|
+
|
|
522
|
+
&:hover {
|
|
523
|
+
background: rgba(0, 0, 0, 0.7);
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
.carousel-control-prev-icon,
|
|
527
|
+
.carousel-control-next-icon {
|
|
528
|
+
width: 20px;
|
|
529
|
+
height: 20px;
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
.carousel-control-prev {
|
|
534
|
+
left: $jv-space-3;
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
.carousel-control-next {
|
|
538
|
+
right: $jv-space-3;
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
&:hover {
|
|
542
|
+
.carousel-control-prev,
|
|
543
|
+
.carousel-control-next {
|
|
544
|
+
opacity: 1;
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
// Indicator dots - matching topic page
|
|
549
|
+
.carousel-indicators {
|
|
550
|
+
margin-bottom: $jv-space-3;
|
|
551
|
+
gap: $jv-space-2;
|
|
552
|
+
|
|
553
|
+
button {
|
|
554
|
+
width: 8px;
|
|
555
|
+
height: 8px;
|
|
556
|
+
border-radius: 50%;
|
|
557
|
+
background: rgba(255, 255, 255, 0.5);
|
|
558
|
+
border: none;
|
|
559
|
+
opacity: 1;
|
|
560
|
+
transition: background-color $jv-transition-fast, transform $jv-transition-fast;
|
|
561
|
+
|
|
562
|
+
&.active {
|
|
563
|
+
background: #fff;
|
|
564
|
+
transform: scale(1.2);
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
&:hover {
|
|
568
|
+
background: rgba(255, 255, 255, 0.8);
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
}
|
|
317
573
|
}
|
|
318
574
|
|
|
319
575
|
// ===========================================================
|
package/scss/_sidebar.scss
CHANGED
|
@@ -504,7 +504,7 @@ div[data-widget-area="right"],
|
|
|
504
504
|
|
|
505
505
|
// Sticky positioning - stays visible when scrolling
|
|
506
506
|
position: sticky;
|
|
507
|
-
top:
|
|
507
|
+
top: 72px; // Adjust based on your header height
|
|
508
508
|
align-self: flex-start;
|
|
509
509
|
max-height: calc(100vh - 100px); // Account for header + padding
|
|
510
510
|
overflow-y: auto; // Allow scrolling if content is too tall
|