@okjavis/nodebb-theme-javis 3.0.0 → 3.0.1
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/_base.scss +114 -0
- package/scss/_cards.scss +22 -69
- package/scss/_composer.scss +140 -41
- package/scss/_feed.scss +121 -64
- package/scss/_header.scss +12 -9
- package/scss/_sidebar-user.scss +25 -5
- package/scss/_sidebar.scss +128 -74
- package/static/lib/theme.js +29 -32
- package/templates/partials/header/brand.tpl +53 -0
- package/templates/partials/topics_list.tpl +11 -20
- package/templates/category.tpl +0 -95
package/package.json
CHANGED
package/scss/_base.scss
CHANGED
|
@@ -138,3 +138,117 @@ a {
|
|
|
138
138
|
text-underline-offset: 2px;
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
|
+
|
|
142
|
+
// ===========================================================
|
|
143
|
+
// LOGIN PAGE ONLY - Hide search bar
|
|
144
|
+
// ===========================================================
|
|
145
|
+
.template-login {
|
|
146
|
+
.brand-container {
|
|
147
|
+
display: none !important;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// ===========================================================
|
|
152
|
+
// LOGIN & REGISTER PAGES - Center aligned forms
|
|
153
|
+
// ===========================================================
|
|
154
|
+
.login,
|
|
155
|
+
.register {
|
|
156
|
+
// Center the main content area
|
|
157
|
+
#content {
|
|
158
|
+
display: flex;
|
|
159
|
+
justify-content: center;
|
|
160
|
+
align-items: flex-start;
|
|
161
|
+
padding-top: $jv-space-12;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// The form container
|
|
165
|
+
.row {
|
|
166
|
+
justify-content: center !important;
|
|
167
|
+
width: 100%;
|
|
168
|
+
max-width: 480px;
|
|
169
|
+
margin: 0 auto !important;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Make sure columns don't offset
|
|
173
|
+
.col-12,
|
|
174
|
+
.col-md-6,
|
|
175
|
+
.col-lg-4,
|
|
176
|
+
[class*="col-"] {
|
|
177
|
+
margin-left: 0 !important;
|
|
178
|
+
margin-right: 0 !important;
|
|
179
|
+
flex: 0 0 100% !important;
|
|
180
|
+
max-width: 100% !important;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Card styling for the form
|
|
184
|
+
.card,
|
|
185
|
+
.login-card,
|
|
186
|
+
.register-card {
|
|
187
|
+
background: $jv-surface;
|
|
188
|
+
border: 1px solid $jv-border-subtle;
|
|
189
|
+
border-radius: $jv-radius-lg;
|
|
190
|
+
box-shadow: $jv-shadow-md;
|
|
191
|
+
padding: $jv-space-8;
|
|
192
|
+
width: 100%;
|
|
193
|
+
max-width: 420px;
|
|
194
|
+
margin: 0 auto;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Page title
|
|
198
|
+
h1,
|
|
199
|
+
.page-title {
|
|
200
|
+
text-align: center;
|
|
201
|
+
margin-bottom: $jv-space-8;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Form labels
|
|
205
|
+
label {
|
|
206
|
+
font-weight: 500;
|
|
207
|
+
color: $jv-text-main;
|
|
208
|
+
margin-bottom: $jv-space-2;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Form inputs
|
|
212
|
+
.form-control {
|
|
213
|
+
border-radius: $jv-radius-sm;
|
|
214
|
+
border: 1px solid $jv-border-subtle;
|
|
215
|
+
padding: $jv-space-3 $jv-space-4;
|
|
216
|
+
font-size: $jv-font-size-base;
|
|
217
|
+
transition: border-color $jv-transition-fast, box-shadow $jv-transition-fast;
|
|
218
|
+
|
|
219
|
+
&:focus {
|
|
220
|
+
border-color: $jv-primary;
|
|
221
|
+
box-shadow: $jv-focus-ring;
|
|
222
|
+
outline: none;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// Login/Register button
|
|
227
|
+
.btn-primary {
|
|
228
|
+
width: 100%;
|
|
229
|
+
padding: $jv-space-3 $jv-space-6;
|
|
230
|
+
font-weight: 600;
|
|
231
|
+
border-radius: $jv-radius-sm;
|
|
232
|
+
margin-top: $jv-space-4;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// Forgot password and other links
|
|
236
|
+
.forgot-password,
|
|
237
|
+
a.text-muted {
|
|
238
|
+
font-size: $jv-font-size-sm;
|
|
239
|
+
color: $jv-text-muted;
|
|
240
|
+
|
|
241
|
+
&:hover {
|
|
242
|
+
color: $jv-primary;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Register link section
|
|
247
|
+
.register-link,
|
|
248
|
+
.login-link {
|
|
249
|
+
text-align: center;
|
|
250
|
+
margin-top: $jv-space-6;
|
|
251
|
+
padding-top: $jv-space-6;
|
|
252
|
+
border-top: 1px solid $jv-border-subtle;
|
|
253
|
+
}
|
|
254
|
+
}
|
package/scss/_cards.scss
CHANGED
|
@@ -43,10 +43,10 @@
|
|
|
43
43
|
flex-direction: column;
|
|
44
44
|
align-items: center;
|
|
45
45
|
justify-content: flex-start;
|
|
46
|
-
padding: $jv-space-
|
|
46
|
+
padding: $jv-space-6 $jv-space-4; // 24dp vertical, 16dp horizontal - Material grid
|
|
47
47
|
background: rgba(0, 0, 0, 0.02);
|
|
48
|
-
min-width:
|
|
49
|
-
gap:
|
|
48
|
+
min-width: 44px;
|
|
49
|
+
gap: $jv-space-1; // 4dp - Material grid
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
.vote-btn {
|
|
@@ -100,10 +100,10 @@
|
|
|
100
100
|
// ===========================================================
|
|
101
101
|
.topic-content {
|
|
102
102
|
flex: 1;
|
|
103
|
-
padding: $jv-space-3;
|
|
103
|
+
padding: $jv-space-3; // 12dp - Material grid
|
|
104
104
|
display: flex;
|
|
105
105
|
flex-direction: column;
|
|
106
|
-
gap: $jv-space-
|
|
106
|
+
gap: $jv-space-3; // 12dp - Material grid
|
|
107
107
|
min-width: 0; // Allow text truncation
|
|
108
108
|
}
|
|
109
109
|
|
|
@@ -147,10 +147,10 @@
|
|
|
147
147
|
// Topic Title
|
|
148
148
|
.topic-card .topic-title {
|
|
149
149
|
margin: 0;
|
|
150
|
-
font-size:
|
|
151
|
-
font-weight:
|
|
152
|
-
line-height:
|
|
153
|
-
letter-spacing: -0.02em;
|
|
150
|
+
font-size: 20px; // Larger for prominence - consistent with feed
|
|
151
|
+
font-weight: 700; // Bolder for better hierarchy
|
|
152
|
+
line-height: 1.4; // Better readability
|
|
153
|
+
letter-spacing: -0.02em; // Tighter for modern feel
|
|
154
154
|
|
|
155
155
|
a {
|
|
156
156
|
color: $jv-text-main;
|
|
@@ -260,7 +260,7 @@
|
|
|
260
260
|
color: $jv-text-muted;
|
|
261
261
|
line-height: $jv-line-height-base;
|
|
262
262
|
display: -webkit-box;
|
|
263
|
-
-webkit-line-clamp:
|
|
263
|
+
-webkit-line-clamp: 3;
|
|
264
264
|
-webkit-box-orient: vertical;
|
|
265
265
|
overflow: hidden;
|
|
266
266
|
|
|
@@ -270,54 +270,6 @@
|
|
|
270
270
|
}
|
|
271
271
|
}
|
|
272
272
|
|
|
273
|
-
// ===========================================================
|
|
274
|
-
// MEDIA ROW (Image + Text side by side)
|
|
275
|
-
// ===========================================================
|
|
276
|
-
.topic-media-row {
|
|
277
|
-
display: flex;
|
|
278
|
-
gap: $jv-space-4;
|
|
279
|
-
align-items: flex-start;
|
|
280
|
-
|
|
281
|
-
.topic-media-text {
|
|
282
|
-
flex: 1;
|
|
283
|
-
min-width: 0; // Allow text truncation
|
|
284
|
-
|
|
285
|
-
.topic-teaser {
|
|
286
|
-
-webkit-line-clamp: 3; // Allow more lines when beside image
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
.topic-thumbnail {
|
|
291
|
-
flex-shrink: 0;
|
|
292
|
-
width: 140px;
|
|
293
|
-
height: 100px;
|
|
294
|
-
|
|
295
|
-
img {
|
|
296
|
-
width: 100%;
|
|
297
|
-
height: 100%;
|
|
298
|
-
object-fit: cover;
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
@media (max-width: 576px) {
|
|
304
|
-
.topic-media-row {
|
|
305
|
-
flex-direction: column-reverse;
|
|
306
|
-
gap: $jv-space-3;
|
|
307
|
-
|
|
308
|
-
.topic-thumbnail {
|
|
309
|
-
width: 100%;
|
|
310
|
-
height: auto;
|
|
311
|
-
max-height: 180px;
|
|
312
|
-
|
|
313
|
-
img {
|
|
314
|
-
max-height: 180px;
|
|
315
|
-
width: 100%;
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
|
|
321
273
|
// ===========================================================
|
|
322
274
|
// ACTION BAR (Bottom - Reddit style)
|
|
323
275
|
// ===========================================================
|
|
@@ -346,21 +298,21 @@ li[component="post"] hr,
|
|
|
346
298
|
.action-btn {
|
|
347
299
|
display: inline-flex;
|
|
348
300
|
align-items: center;
|
|
349
|
-
gap: $jv-space-
|
|
350
|
-
padding: $jv-space-
|
|
351
|
-
font-size:
|
|
352
|
-
font-weight:
|
|
353
|
-
color: $jv-text-
|
|
301
|
+
gap: $jv-space-2; // 8dp grid
|
|
302
|
+
padding: $jv-space-2 $jv-space-3; // 8dp vertical, 12dp horizontal
|
|
303
|
+
font-size: 14px;
|
|
304
|
+
font-weight: 600;
|
|
305
|
+
color: $jv-text-muted;
|
|
354
306
|
background: transparent;
|
|
355
307
|
border: none;
|
|
356
|
-
border-radius: $jv-radius-
|
|
308
|
+
border-radius: $jv-radius-sm; // 8px shadcn standard
|
|
357
309
|
cursor: pointer;
|
|
358
310
|
text-decoration: none;
|
|
359
|
-
transition: background-color $jv-transition-fast, color $jv-transition-fast;
|
|
311
|
+
transition: background-color $jv-transition-fast, color $jv-transition-fast; // Modern transitions
|
|
360
312
|
|
|
361
313
|
&:hover {
|
|
362
|
-
background: $jv-hover-bg;
|
|
363
|
-
color: $jv-text-
|
|
314
|
+
background: $jv-hover-bg; // Consistent hover state
|
|
315
|
+
color: $jv-text-main;
|
|
364
316
|
}
|
|
365
317
|
|
|
366
318
|
// Focus state for accessibility
|
|
@@ -370,11 +322,12 @@ li[component="post"] hr,
|
|
|
370
322
|
}
|
|
371
323
|
|
|
372
324
|
i {
|
|
373
|
-
font-size:
|
|
325
|
+
font-size: 18px; // Larger icons
|
|
374
326
|
}
|
|
375
327
|
|
|
328
|
+
// Make numbers bold
|
|
376
329
|
span {
|
|
377
|
-
font-weight:
|
|
330
|
+
font-weight: 700;
|
|
378
331
|
}
|
|
379
332
|
}
|
|
380
333
|
|
package/scss/_composer.scss
CHANGED
|
@@ -97,7 +97,7 @@ html.composing .composer .title-container {
|
|
|
97
97
|
border-radius: $jv-radius-lg $jv-radius-lg 0 0 !important;
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
// Category selector
|
|
100
|
+
// Category selector button
|
|
101
101
|
html.composing .composer .category-list-container {
|
|
102
102
|
flex-shrink: 0 !important;
|
|
103
103
|
display: block !important;
|
|
@@ -116,53 +116,152 @@ html.composing .composer .category-list-container {
|
|
|
116
116
|
background: $jv-hover-bg !important;
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
119
121
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
padding: $jv-space-2 !important;
|
|
122
|
+
// ===========================================================
|
|
123
|
+
// CATEGORY DROPDOWN - Clean flat list (like reference image)
|
|
124
|
+
// Targeting exact DOM structure from DevTools
|
|
125
|
+
// ===========================================================
|
|
125
126
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
127
|
+
// The dropdown container
|
|
128
|
+
div.dropdown-menu.p-1.show {
|
|
129
|
+
min-width: 280px !important;
|
|
130
|
+
max-width: 320px !important;
|
|
131
|
+
padding: $jv-space-2 0 !important;
|
|
132
|
+
border: 1px solid $jv-border-subtle !important;
|
|
133
|
+
border-radius: $jv-radius-sm !important;
|
|
134
|
+
box-shadow: $jv-shadow-lg !important;
|
|
135
|
+
background: $jv-surface !important;
|
|
136
|
+
}
|
|
131
137
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
// Category icon
|
|
155
|
-
.category-item {
|
|
156
|
-
display: inline-flex !important;
|
|
157
|
-
align-items: center !important;
|
|
158
|
-
gap: $jv-space-2 !important;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
138
|
+
// Search input section
|
|
139
|
+
div[component="category-selector-search"] {
|
|
140
|
+
padding: $jv-space-2 $jv-space-3 $jv-space-3 $jv-space-3 !important;
|
|
141
|
+
margin: 0 !important;
|
|
142
|
+
border-bottom: none !important;
|
|
143
|
+
|
|
144
|
+
.form-control {
|
|
145
|
+
width: 100% !important;
|
|
146
|
+
height: 36px !important;
|
|
147
|
+
padding: 0 $jv-space-3 !important;
|
|
148
|
+
font-size: $jv-font-size-sm !important;
|
|
149
|
+
font-weight: 400 !important;
|
|
150
|
+
color: $jv-text-main !important;
|
|
151
|
+
border: 1px solid $jv-border-subtle !important;
|
|
152
|
+
border-radius: $jv-radius-xs !important;
|
|
153
|
+
background: $jv-surface !important;
|
|
154
|
+
|
|
155
|
+
&:focus {
|
|
156
|
+
border-color: $jv-primary !important;
|
|
157
|
+
box-shadow: $jv-focus-ring !important;
|
|
158
|
+
outline: none !important;
|
|
162
159
|
}
|
|
160
|
+
|
|
161
|
+
&::placeholder {
|
|
162
|
+
color: $jv-text-soft !important;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
hr {
|
|
167
|
+
display: none !important;
|
|
163
168
|
}
|
|
164
169
|
}
|
|
165
170
|
|
|
171
|
+
// The category list UL - exact class from DOM
|
|
172
|
+
ul.category-dropdown-menu.ghost-scrollbar {
|
|
173
|
+
margin: 0 !important;
|
|
174
|
+
padding: 0 !important;
|
|
175
|
+
max-height: 320px !important;
|
|
176
|
+
overflow-y: auto !important;
|
|
177
|
+
overflow-x: hidden !important;
|
|
178
|
+
list-style: none !important;
|
|
179
|
+
|
|
180
|
+
// Scrollbar
|
|
181
|
+
&::-webkit-scrollbar {
|
|
182
|
+
width: 6px;
|
|
183
|
+
}
|
|
184
|
+
&::-webkit-scrollbar-track {
|
|
185
|
+
background: transparent;
|
|
186
|
+
}
|
|
187
|
+
&::-webkit-scrollbar-thumb {
|
|
188
|
+
background: rgba(0, 0, 0, 0.15);
|
|
189
|
+
border-radius: 3px;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Each category LI - exact structure: li.category with role="presentation"
|
|
194
|
+
li[role="presentation"].category {
|
|
195
|
+
margin: 0 !important;
|
|
196
|
+
padding: 0 !important;
|
|
197
|
+
list-style: none !important;
|
|
198
|
+
border: none !important;
|
|
199
|
+
background: none !important;
|
|
200
|
+
background-color: transparent !important;
|
|
201
|
+
box-shadow: none !important;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// The anchor - reduce spacing and remove border/card styling
|
|
205
|
+
li.category > a.dropdown-item,
|
|
206
|
+
li.category > a.dropdown-item.rounded-1 {
|
|
207
|
+
padding: $jv-space-1 $jv-space-3 !important;
|
|
208
|
+
margin: 2px $jv-space-2 !important;
|
|
209
|
+
border: none !important;
|
|
210
|
+
border-radius: $jv-radius-xs !important;
|
|
211
|
+
background: transparent !important;
|
|
212
|
+
box-shadow: none !important;
|
|
213
|
+
|
|
214
|
+
&:hover {
|
|
215
|
+
background: $jv-hover-bg !important;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// Sub-categories indentation
|
|
220
|
+
li.category[data-parent-cid]:not([data-parent-cid="0"]) > a.dropdown-item {
|
|
221
|
+
padding-left: 36px !important;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// Category icon
|
|
225
|
+
li.category a.dropdown-item [component="category/icon"] {
|
|
226
|
+
width: 24px !important;
|
|
227
|
+
height: 24px !important;
|
|
228
|
+
min-width: 24px !important;
|
|
229
|
+
border-radius: 50% !important;
|
|
230
|
+
display: flex !important;
|
|
231
|
+
align-items: center !important;
|
|
232
|
+
justify-content: center !important;
|
|
233
|
+
font-size: $jv-font-size-xs !important;
|
|
234
|
+
flex-shrink: 0 !important;
|
|
235
|
+
box-shadow: none !important;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Category name text
|
|
239
|
+
li.category a.dropdown-item > span:last-child {
|
|
240
|
+
font-size: $jv-font-size-sm !important;
|
|
241
|
+
font-weight: 400 !important;
|
|
242
|
+
color: $jv-text-main !important;
|
|
243
|
+
white-space: nowrap !important;
|
|
244
|
+
overflow: hidden !important;
|
|
245
|
+
text-overflow: ellipsis !important;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Disabled categories
|
|
249
|
+
li.category.disabled > a.dropdown-item > span:last-child {
|
|
250
|
+
color: $jv-text-soft !important;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// No matches message
|
|
254
|
+
li[component="category/no-matches"].hidden {
|
|
255
|
+
display: none !important;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
li[component="category/no-matches"]:not(.hidden) {
|
|
259
|
+
padding: $jv-space-4 !important;
|
|
260
|
+
text-align: center !important;
|
|
261
|
+
color: $jv-text-soft !important;
|
|
262
|
+
font-size: $jv-font-size-sm !important;
|
|
263
|
+
}
|
|
264
|
+
|
|
166
265
|
// Title input
|
|
167
266
|
html.composing .composer [data-component="composer/title"] {
|
|
168
267
|
flex: 1 !important;
|