@okjavis/nodebb-theme-javis 3.0.9 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/scss/_composer.scss +18 -2
- package/scss/_feed.scss +2 -2
- package/scss/_forms.scss +6 -0
- package/templates/feed.tpl +12 -5
- package/templates/partials/account/sidebar-left.tpl +122 -0
package/package.json
CHANGED
package/scss/_composer.scss
CHANGED
|
@@ -406,6 +406,7 @@ html.composing .composer .formatting-bar {
|
|
|
406
406
|
margin: 0 !important;
|
|
407
407
|
flex-shrink: 0 !important;
|
|
408
408
|
gap: $jv-space-3 !important;
|
|
409
|
+
overflow: visible !important; // Allow dropdowns to show
|
|
409
410
|
}
|
|
410
411
|
|
|
411
412
|
html.composing .composer .formatting-group {
|
|
@@ -413,8 +414,7 @@ html.composing .composer .formatting-group {
|
|
|
413
414
|
align-items: center !important;
|
|
414
415
|
gap: 2px !important;
|
|
415
416
|
flex-wrap: nowrap !important;
|
|
416
|
-
overflow
|
|
417
|
-
overflow-y: visible !important; // Allow badges to overflow vertically
|
|
417
|
+
overflow: visible !important; // Allow dropdowns to show
|
|
418
418
|
padding-top: 8px !important; // Space for badges that overflow upward
|
|
419
419
|
|
|
420
420
|
li {
|
|
@@ -456,6 +456,22 @@ html.composing .composer .formatting-group {
|
|
|
456
456
|
line-height: 16px !important;
|
|
457
457
|
}
|
|
458
458
|
}
|
|
459
|
+
|
|
460
|
+
// Dropdown containers (like Heading dropdown)
|
|
461
|
+
&.dropdown,
|
|
462
|
+
&.bottom-sheet {
|
|
463
|
+
overflow: visible !important;
|
|
464
|
+
position: relative !important;
|
|
465
|
+
|
|
466
|
+
.dropdown-menu {
|
|
467
|
+
position: absolute !important;
|
|
468
|
+
top: 100% !important;
|
|
469
|
+
left: 0 !important;
|
|
470
|
+
min-width: 150px !important;
|
|
471
|
+
z-index: 9999 !important;
|
|
472
|
+
margin-top: 2px !important;
|
|
473
|
+
}
|
|
474
|
+
}
|
|
459
475
|
}
|
|
460
476
|
|
|
461
477
|
.spacer {
|
package/scss/_feed.scss
CHANGED
|
@@ -315,7 +315,7 @@
|
|
|
315
315
|
.feed li[component="post"].posts-list-item {
|
|
316
316
|
background: $jv-surface !important;
|
|
317
317
|
border: 1px solid $jv-border-subtle !important;
|
|
318
|
-
border-radius: $jv-radius-
|
|
318
|
+
border-radius: $jv-radius-lg !important; // Match composer and widgets (16px)
|
|
319
319
|
margin-bottom: $jv-space-2 !important;
|
|
320
320
|
box-shadow: $jv-shadow-sm !important;
|
|
321
321
|
overflow: hidden !important;
|
|
@@ -657,7 +657,7 @@
|
|
|
657
657
|
// Action bar - now a direct child of the post card
|
|
658
658
|
.feed-action-bar {
|
|
659
659
|
background: $jv-surface !important;
|
|
660
|
-
border-radius: 0 0 $jv-radius-
|
|
660
|
+
border-radius: 0 0 $jv-radius-lg $jv-radius-lg; // Match card's bottom corners (16px)
|
|
661
661
|
|
|
662
662
|
.btn-link {
|
|
663
663
|
display: inline-flex;
|
package/scss/_forms.scss
CHANGED
|
@@ -116,9 +116,15 @@ textarea {
|
|
|
116
116
|
|
|
117
117
|
i {
|
|
118
118
|
width: 16px;
|
|
119
|
+
flex-shrink: 0;
|
|
119
120
|
color: $jv-text-muted;
|
|
120
121
|
}
|
|
121
122
|
|
|
123
|
+
// Hide bookmark option from dropdown menu
|
|
124
|
+
&[component="post/bookmark"] {
|
|
125
|
+
display: none !important;
|
|
126
|
+
}
|
|
127
|
+
|
|
122
128
|
&:hover {
|
|
123
129
|
background: rgba(0, 81, 255, 0.06);
|
|
124
130
|
color: $jv-primary;
|
package/templates/feed.tpl
CHANGED
|
@@ -94,14 +94,13 @@
|
|
|
94
94
|
{{{ end }}}
|
|
95
95
|
|
|
96
96
|
<!-- 3. ACTION BAR (third - separated from content) -->
|
|
97
|
+
<!-- Order: Likes, Comments, Share -->
|
|
97
98
|
<div class="feed-action-bar d-flex justify-content-between px-3 py-2 border-top">
|
|
98
|
-
<a href="{config.relative_path}/post/{{{ if ./topic.teaserPid }}}{./topic.teaserPid}{{{ else }}}{./pid}{{{ end }}}" class="btn btn-link btn-sm text-body {{{ if !./isMainPost }}}invisible{{{ end }}}"><i class="fa-fw fa-regular fa-message text-muted"></i> {humanReadableNumber(./topic.postcount)}</a>
|
|
99
|
-
|
|
100
|
-
<a href="#" data-pid="{./pid}" data-action="bookmark" data-bookmarked="{./bookmarked}" data-bookmarks="{./bookmarks}" class="btn btn-link btn-sm text-body"><i class="fa-fw fa-bookmark {{{ if ./bookmarked }}}fa text-primary{{{ else }}}fa-regular text-muted{{{ end }}}"></i> <span component="bookmark-count">{humanReadableNumber(./bookmarks)}</span></a>
|
|
101
|
-
|
|
102
99
|
<a href="#" data-pid="{./pid}" data-action="upvote" data-upvoted="{./upvoted}" data-upvotes="{./upvotes}" class="btn btn-link btn-sm text-body"><i class="fa-fw fa-heart {{{ if ./upvoted }}}fa text-danger{{{ else }}}fa-regular text-muted{{{ end }}}"></i> <span component="upvote-count">{humanReadableNumber(./upvotes)}</span></a>
|
|
103
100
|
|
|
104
|
-
<a href="
|
|
101
|
+
<a href="{config.relative_path}/post/{{{ if ./topic.teaserPid }}}{./topic.teaserPid}{{{ else }}}{./pid}{{{ end }}}" class="btn btn-link btn-sm text-body {{{ if !./isMainPost }}}invisible{{{ end }}}"><i class="fa-fw fa-regular fa-message text-muted"></i> {humanReadableNumber(./topic.postcount)}</a>
|
|
102
|
+
|
|
103
|
+
<a href="#" data-pid="{./pid}" component="share/linkedin" class="btn btn-link btn-sm text-body"><i class="fa-fw fa-brands fa-linkedin text-muted"></i> [[topic:share]]</a>
|
|
105
104
|
</div>
|
|
106
105
|
</li>
|
|
107
106
|
{{{ end }}}
|
|
@@ -121,3 +120,11 @@
|
|
|
121
120
|
{{widgets.footer.html}}
|
|
122
121
|
{{{end}}}
|
|
123
122
|
</div>
|
|
123
|
+
|
|
124
|
+
<script>
|
|
125
|
+
$(document).ready(function() {
|
|
126
|
+
require(['share'], function(share) {
|
|
127
|
+
share.addShareHandlers('{title}');
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
</script>
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
<div class="flex-shrink-0 pe-2 border-end-md text-sm mb-3 flex-basis-md-200">
|
|
2
|
+
<div class="sticky-md-top d-flex flex-row flex-md-column flex-wrap gap-1" style="top: 1rem;z-index: 1;">
|
|
3
|
+
<a href="{config.relative_path}/user/{userslug}" class="btn btn-ghost btn-sm text-start ff-secondary fw-semibold {{{ if template.account/profile }}}active{{{ end }}}">
|
|
4
|
+
<div class="flex-grow-1">[[global:about]]</div>
|
|
5
|
+
</a>
|
|
6
|
+
|
|
7
|
+
<a href="{config.relative_path}/user/{userslug}/posts"class="btn btn-ghost btn-sm text-start ff-secondary fw-semibold d-flex gap-2 align-items-center
|
|
8
|
+
{{{ if template.account/posts }}}active{{{ end }}}
|
|
9
|
+
{{{ if template.account/best }}}active{{{ end }}}
|
|
10
|
+
{{{ if template.account/controversial }}}active{{{ end }}}
|
|
11
|
+
{{{ if template.account/upvoted }}}active{{{ end }}}
|
|
12
|
+
{{{ if template.account/downvoted }}}active{{{ end }}}
|
|
13
|
+
{{{ if template.account/bookmarks }}}active{{{ end }}}">
|
|
14
|
+
<div class="flex-grow-1">[[global:posts]]</div>
|
|
15
|
+
<span class="flex-shrink-0 text-xs" title="{counts.posts}">{humanReadableNumber(counts.posts)}</span>
|
|
16
|
+
</a>
|
|
17
|
+
|
|
18
|
+
<a href="{config.relative_path}/user/{userslug}/topics" class="btn btn-ghost btn-sm text-start ff-secondary fw-semibold d-flex gap-2 align-items-center
|
|
19
|
+
{{{ if template.account/topics }}}active{{{ end }}}
|
|
20
|
+
{{{ if template.account/watched }}}active{{{ end }}}
|
|
21
|
+
{{{ if template.account/ignored }}}active{{{ end }}}">
|
|
22
|
+
<div class="flex-grow-1">[[global:topics]]</div>
|
|
23
|
+
<span class="flex-shrink-0 text-xs" title="{counts.topics}">{humanReadableNumber(counts.topics)}</span>
|
|
24
|
+
</a>
|
|
25
|
+
|
|
26
|
+
<a href="{config.relative_path}/user/{userslug}/shares" class="btn btn-ghost btn-sm text-start ff-secondary fw-semibold d-flex gap-2 align-items-center
|
|
27
|
+
{{{ if template.account/shares }}}active{{{ end }}}">
|
|
28
|
+
<div class="flex-grow-1">[[user:shares]]</div>
|
|
29
|
+
<span class="flex-shrink-0 text-xs" title="{counts.shares}">{humanReadableNumber(counts.shares)}</span>
|
|
30
|
+
</a>
|
|
31
|
+
|
|
32
|
+
<a href="{config.relative_path}/user/{userslug}/groups" class="btn btn-ghost btn-sm text-start ff-secondary fw-semibold d-flex gap-2 align-items-center
|
|
33
|
+
{{{ if template.account/groups }}}active{{{ end }}}">
|
|
34
|
+
<div class="flex-grow-1">[[global:header.groups]]</div>
|
|
35
|
+
<span class="flex-shrink-0 text-xs" title="{counts.groups}">{humanReadableNumber(counts.groups)}</span>
|
|
36
|
+
</a>
|
|
37
|
+
|
|
38
|
+
<a href="{config.relative_path}/user/{userslug}/followers" class="btn btn-ghost btn-sm text-start ff-secondary fw-semibold d-flex gap-2 align-items-center
|
|
39
|
+
{{{ if template.account/followers }}}active{{{ end }}}">
|
|
40
|
+
<div class="flex-grow-1">[[user:followers]]</div>
|
|
41
|
+
<span class="flex-shrink-0 text-xs" title="{counts.followers}">{humanReadableNumber(counts.followers)}</span>
|
|
42
|
+
</a>
|
|
43
|
+
|
|
44
|
+
<a href="{config.relative_path}/user/{userslug}/following" class="btn btn-ghost btn-sm text-start ff-secondary fw-semibold d-flex gap-2 align-items-center
|
|
45
|
+
{{{ if template.account/following }}}active{{{ end }}}">
|
|
46
|
+
<div class="flex-grow-1">[[user:following]]</div>
|
|
47
|
+
<span class="flex-shrink-0 text-xs" title="{counts.following}">{humanReadableNumber(counts.following)}</span>
|
|
48
|
+
</a>
|
|
49
|
+
|
|
50
|
+
{{{ if canEdit }}}
|
|
51
|
+
<a href="{config.relative_path}/user/{userslug}/categories" class="btn btn-ghost btn-sm text-start ff-secondary fw-semibold d-flex gap-2 align-items-center
|
|
52
|
+
{{{ if template.account/categories }}}active{{{ end }}}">
|
|
53
|
+
<div class="flex-grow-1">[[user:watched-categories]]</div>
|
|
54
|
+
<span class="flex-shrink-0 text-xs" title="{counts.categoriesWatched}">{counts.categoriesWatched}</span>
|
|
55
|
+
</a>
|
|
56
|
+
{{{ if isSelf }}}
|
|
57
|
+
<a href="{config.relative_path}/user/{userslug}/tags" class="btn btn-ghost btn-sm text-start ff-secondary fw-semibold d-flex gap-2 align-items-center
|
|
58
|
+
{{{ if template.account/tags }}}active{{{ end }}}">
|
|
59
|
+
<div class="flex-grow-1">[[user:watched-tags]]</div>
|
|
60
|
+
<span class="flex-shrink-0 text-xs" title="{counts.tagsWatched}">{counts.tagsWatched}</span>
|
|
61
|
+
</a>
|
|
62
|
+
{{{ end }}}
|
|
63
|
+
|
|
64
|
+
<a href="{config.relative_path}/user/{userslug}/blocks" class="btn btn-ghost btn-sm text-start ff-secondary fw-semibold d-flex gap-2 align-items-center
|
|
65
|
+
{{{ if template.account/blocks }}}active{{{ end }}}">
|
|
66
|
+
<div class="flex-grow-1">[[user:blocked-users]]</div>
|
|
67
|
+
<span class="flex-shrink-0 text-xs" title="{counts.blocks}">{humanReadableNumber(counts.blocks)}</span>
|
|
68
|
+
</a>
|
|
69
|
+
|
|
70
|
+
<a href="{config.relative_path}/user/{userslug}/uploads" class="btn btn-ghost btn-sm text-start ff-secondary fw-semibold d-flex gap-2 align-items-center
|
|
71
|
+
{{{ if template.account/uploads }}}active{{{ end }}}">
|
|
72
|
+
<div class="flex-grow-1">[[global:uploads]]</div>
|
|
73
|
+
<span class="flex-shrink-0 text-xs" title="{counts.uploaded}">{humanReadableNumber(counts.uploaded)}</span>
|
|
74
|
+
</a>
|
|
75
|
+
{{{ end }}}
|
|
76
|
+
|
|
77
|
+
{{{ if remoteUrl }}}
|
|
78
|
+
<hr class="w-100 my-2"/>
|
|
79
|
+
|
|
80
|
+
<a href="{remoteUrl}" target="_self" component="account/view-remote" class="btn btn-ghost btn-sm ff-secondary d-flex align-items-center gap-2 text-start">
|
|
81
|
+
<i class="flex-shrink-0 fa-solid fa-globe"></i>
|
|
82
|
+
<div class="flex-grow-1 text-nowrap">[[user:view-remote]]</div>
|
|
83
|
+
</a>
|
|
84
|
+
{{{ end }}}
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
{{{ if (loggedIn && (!isSelf && !banned)) }}}
|
|
88
|
+
<hr class="w-100 my-2"/>
|
|
89
|
+
|
|
90
|
+
<a href="#" component="account/flag" class="btn btn-ghost btn-sm ff-secondary d-flex align-items-center gap-2 text-start {{{if flagId }}}hidden{{{end}}}">
|
|
91
|
+
<i class="flex-shrink-0 fa-solid fa-flag text-danger"></i>
|
|
92
|
+
<div class="flex-grow-1 text-nowrap">[[user:flag-profile]]</div>
|
|
93
|
+
</a>
|
|
94
|
+
<a href="#" component="account/already-flagged" class="btn btn-ghost btn-sm ff-secondary d-flex align-items-center gap-2 text-start {{{if !flagId }}}hidden{{{end}}}" data-flag-id="{flagId}">
|
|
95
|
+
<i class="flex-shrink-0 fa-solid fa-flag text-danger"></i>
|
|
96
|
+
<div class="flex-grow-1 text-nowrap">[[user:profile-flagged]]</div>
|
|
97
|
+
</a>
|
|
98
|
+
<a href="#" component="account/block" class="btn btn-ghost btn-sm ff-secondary d-flex align-items-center gap-2 text-start {{{ if isBlocked }}}hidden{{{ end }}}">
|
|
99
|
+
<i class="flex-shrink-0 fa-solid fa-ban text-danger"></i>
|
|
100
|
+
<div class="flex-grow-1 text-nowrap">[[user:block-user]]</div>
|
|
101
|
+
</a>
|
|
102
|
+
<a href="#" component="account/unblock" class="btn btn-ghost btn-sm ff-secondary d-flex align-items-center gap-2 text-start {{{ if !isBlocked }}}hidden{{{ end }}}">
|
|
103
|
+
<i class="flex-shrink-0 fa-solid fa-ban text-danger"></i>
|
|
104
|
+
<div class="flex-grow-1 text-nowrap">[[user:unblock-user]]</div>
|
|
105
|
+
</a>
|
|
106
|
+
{{{ end }}}
|
|
107
|
+
|
|
108
|
+
{{{ if canEdit }}}
|
|
109
|
+
<hr class="w-100 my-2"/>
|
|
110
|
+
<a href="{config.relative_path}/user/{userslug}/edit" class="btn btn-ghost btn-sm ff-secondary text-xs text-start
|
|
111
|
+
{{{ if template.account/edit }}}active{{{ end }}}">
|
|
112
|
+
<div class="flex-grow-1">[[user:edit-profile]]</div>
|
|
113
|
+
</a>
|
|
114
|
+
{{{ end }}}
|
|
115
|
+
|
|
116
|
+
{{{ each profile_links }}}
|
|
117
|
+
<a href="{config.relative_path}/user/{userslug}/{./route}" class="btn btn-ghost btn-sm ff-secondary text-xs text-start plugin-link {{{ if ./public }}}public{{{ else }}}private{{{ end }}} {{{ if (url == ./url) }}}active{{{ end }}}" id="{./id}">
|
|
118
|
+
<div class="flex-grow-1">{./name}</div>
|
|
119
|
+
</a>
|
|
120
|
+
{{{end}}}
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|