nodebb-theme-harmony 2.2.5 → 2.2.7
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-lock.json +2939 -0
- package/package.json +2 -2
- package/templates/notifications.tpl +3 -1
- package/templates/partials/account/sidebar-left.tpl +15 -15
- package/templates/partials/groups/sidebar-left.tpl +5 -5
- package/templates/partials/topic-list-bar.tpl +15 -16
- package/templates/world.tpl +24 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nodebb-theme-harmony",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.7",
|
|
4
4
|
"nbbpm": {
|
|
5
5
|
"compatibility": "^4.0.0"
|
|
6
6
|
},
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"@fontsource/poppins": "5.2.7"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"eslint": "
|
|
48
|
+
"eslint": "10.0.0",
|
|
49
49
|
"eslint-config-nodebb": "^1.1.4"
|
|
50
50
|
}
|
|
51
51
|
}
|
|
@@ -9,9 +9,11 @@
|
|
|
9
9
|
{{{ if ./separator }}}
|
|
10
10
|
<hr/>
|
|
11
11
|
{{{ else }}}
|
|
12
|
-
<a class="btn btn-ghost d-flex gap-2 text-start align-items-
|
|
12
|
+
<a class="btn btn-ghost d-flex gap-2 text-start align-items-baseline text-sm ff-secondary fw-semibold {{{ if ./selected }}}active{{{ end }}}" href="{config.relative_path}/notifications?filter={./filter}">
|
|
13
13
|
<div class="flex-grow-1">{filters.name}</div>
|
|
14
|
+
{{{ if ./filter }}}
|
|
14
15
|
<span class="flex-shrink-0 text-xs" title="{./count}">{humanReadableNumber(./count)}</span>
|
|
16
|
+
{{{ end }}}
|
|
15
17
|
</a>
|
|
16
18
|
{{{ end }}}
|
|
17
19
|
{{{ end }}}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<div class="flex-grow-1">[[global:about]]</div>
|
|
5
5
|
</a>
|
|
6
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-
|
|
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-baseline
|
|
8
8
|
{{{ if template.account/posts }}}active{{{ end }}}
|
|
9
9
|
{{{ if template.account/best }}}active{{{ end }}}
|
|
10
10
|
{{{ if template.account/controversial }}}active{{{ end }}}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
<span class="flex-shrink-0 text-xs" title="{formattedNumber(counts.posts)}">{humanReadableNumber(counts.posts)}</span>
|
|
16
16
|
</a>
|
|
17
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-
|
|
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-baseline
|
|
19
19
|
{{{ if template.account/topics }}}active{{{ end }}}
|
|
20
20
|
{{{ if template.account/watched }}}active{{{ end }}}
|
|
21
21
|
{{{ if template.account/ignored }}}active{{{ end }}}">
|
|
@@ -23,51 +23,51 @@
|
|
|
23
23
|
<span class="flex-shrink-0 text-xs" title="{formattedNumber(counts.topics)}">{humanReadableNumber(counts.topics)}</span>
|
|
24
24
|
</a>
|
|
25
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-
|
|
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-baseline
|
|
27
27
|
{{{ if template.account/shares }}}active{{{ end }}}">
|
|
28
28
|
<div class="flex-grow-1">[[user:shares]]</div>
|
|
29
29
|
<span class="flex-shrink-0 text-xs" title="{formattedNumber(counts.shares)}">{humanReadableNumber(counts.shares)}</span>
|
|
30
30
|
</a>
|
|
31
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-
|
|
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-baseline
|
|
33
33
|
{{{ if template.account/groups }}}active{{{ end }}}">
|
|
34
34
|
<div class="flex-grow-1">[[global:header.groups]]</div>
|
|
35
35
|
<span class="flex-shrink-0 text-xs" title="{formattedNumber(counts.groups)}">{humanReadableNumber(counts.groups)}</span>
|
|
36
36
|
</a>
|
|
37
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-
|
|
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-baseline
|
|
39
39
|
{{{ if template.account/followers }}}active{{{ end }}}">
|
|
40
40
|
<div class="flex-grow-1">[[user:followers]]</div>
|
|
41
41
|
<span class="flex-shrink-0 text-xs" title="{formattedNumber(counts.followers)}">{humanReadableNumber(counts.followers)}</span>
|
|
42
42
|
</a>
|
|
43
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-
|
|
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-baseline
|
|
45
45
|
{{{ if template.account/following }}}active{{{ end }}}">
|
|
46
46
|
<div class="flex-grow-1">[[user:following]]</div>
|
|
47
47
|
<span class="flex-shrink-0 text-xs" title="{formattedNumber(counts.following)}">{humanReadableNumber(counts.following)}</span>
|
|
48
48
|
</a>
|
|
49
49
|
|
|
50
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-
|
|
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-baseline
|
|
52
52
|
{{{ if template.account/categories }}}active{{{ end }}}">
|
|
53
53
|
<div class="flex-grow-1">[[user:watched-categories]]</div>
|
|
54
54
|
<span class="flex-shrink-0 text-xs" title="{formattedNumber(counts.categoriesWatched)}">{humanReadableNumber(counts.categoriesWatched)}</span>
|
|
55
55
|
</a>
|
|
56
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-
|
|
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-baseline
|
|
58
58
|
{{{ if template.account/tags }}}active{{{ end }}}">
|
|
59
59
|
<div class="flex-grow-1">[[user:watched-tags]]</div>
|
|
60
60
|
<span class="flex-shrink-0 text-xs" title="{formattedNumber(counts.tagsWatched)}">{humanReadableNumber(counts.tagsWatched)}</span>
|
|
61
61
|
</a>
|
|
62
62
|
{{{ end }}}
|
|
63
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-
|
|
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-baseline
|
|
65
65
|
{{{ if template.account/blocks }}}active{{{ end }}}">
|
|
66
66
|
<div class="flex-grow-1">[[user:blocked-users]]</div>
|
|
67
67
|
<span class="flex-shrink-0 text-xs" title="{formattedNumber(counts.blocks)}">{humanReadableNumber(counts.blocks)}</span>
|
|
68
68
|
</a>
|
|
69
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-
|
|
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-baseline
|
|
71
71
|
{{{ if template.account/uploads }}}active{{{ end }}}">
|
|
72
72
|
<div class="flex-grow-1">[[global:uploads]]</div>
|
|
73
73
|
<span class="flex-shrink-0 text-xs" title="{formattedNumber(counts.uploaded)}">{humanReadableNumber(counts.uploaded)}</span>
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
{{{ if remoteUrl }}}
|
|
78
78
|
<hr class="w-100 my-2"/>
|
|
79
79
|
|
|
80
|
-
<a href="{remoteUrl}" target="_self" component="account/view-remote" class="btn btn-ghost btn-sm ff-secondary d-flex align-items-
|
|
80
|
+
<a href="{remoteUrl}" target="_self" component="account/view-remote" class="btn btn-ghost btn-sm ff-secondary d-flex align-items-baseline gap-2 text-start">
|
|
81
81
|
<i class="flex-shrink-0 fa-solid fa-globe"></i>
|
|
82
82
|
<div class="flex-grow-1 text-nowrap">[[user:view-remote]]</div>
|
|
83
83
|
</a>
|
|
@@ -87,19 +87,19 @@
|
|
|
87
87
|
{{{ if (loggedIn && (!isSelf && !banned)) }}}
|
|
88
88
|
<hr class="w-100 my-2"/>
|
|
89
89
|
|
|
90
|
-
<a href="#" component="account/flag" class="btn btn-ghost btn-sm ff-secondary d-flex align-items-
|
|
90
|
+
<a href="#" component="account/flag" class="btn btn-ghost btn-sm ff-secondary d-flex align-items-baseline gap-2 text-start {{{if flagId }}}hidden{{{end}}}">
|
|
91
91
|
<i class="flex-shrink-0 fa-solid fa-flag text-danger"></i>
|
|
92
92
|
<div class="flex-grow-1 text-nowrap">[[user:flag-profile]]</div>
|
|
93
93
|
</a>
|
|
94
|
-
<a href="#" component="account/already-flagged" class="btn btn-ghost btn-sm ff-secondary d-flex align-items-
|
|
94
|
+
<a href="#" component="account/already-flagged" class="btn btn-ghost btn-sm ff-secondary d-flex align-items-baseline gap-2 text-start {{{if !flagId }}}hidden{{{end}}}" data-flag-id="{flagId}">
|
|
95
95
|
<i class="flex-shrink-0 fa-solid fa-flag text-danger"></i>
|
|
96
96
|
<div class="flex-grow-1 text-nowrap">[[user:profile-flagged]]</div>
|
|
97
97
|
</a>
|
|
98
|
-
<a href="#" component="account/block" class="btn btn-ghost btn-sm ff-secondary d-flex align-items-
|
|
98
|
+
<a href="#" component="account/block" class="btn btn-ghost btn-sm ff-secondary d-flex align-items-baseline gap-2 text-start {{{ if isBlocked }}}hidden{{{ end }}}">
|
|
99
99
|
<i class="flex-shrink-0 fa-solid fa-ban text-danger"></i>
|
|
100
100
|
<div class="flex-grow-1 text-nowrap">[[user:block-user]]</div>
|
|
101
101
|
</a>
|
|
102
|
-
<a href="#" component="account/unblock" class="btn btn-ghost btn-sm ff-secondary d-flex align-items-
|
|
102
|
+
<a href="#" component="account/unblock" class="btn btn-ghost btn-sm ff-secondary d-flex align-items-baseline gap-2 text-start {{{ if !isBlocked }}}hidden{{{ end }}}">
|
|
103
103
|
<i class="flex-shrink-0 fa-solid fa-ban text-danger"></i>
|
|
104
104
|
<div class="flex-grow-1 text-nowrap">[[user:unblock-user]]</div>
|
|
105
105
|
</a>
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
<div class="flex-shrink-0 pe-2 border-end-md text-sm mb-3 flex-basis-md-200">
|
|
2
2
|
<div class="nav sticky-md-top d-flex flex-row flex-md-column flex-wrap gap-1" style="top: 1rem; z-index: 1;">
|
|
3
|
-
<button data-bs-toggle="tab" data-bs-target="#groups-posts" class="btn btn-ghost btn-sm text-start d-flex align-items-
|
|
3
|
+
<button data-bs-toggle="tab" data-bs-target="#groups-posts" class="btn btn-ghost btn-sm text-start d-flex align-items-baseline ff-secondary fw-semibold {{{ if template.groups/details }}}active{{{ end }}}">
|
|
4
4
|
<div class="flex-grow-1">[[global:posts]]</div>
|
|
5
5
|
</button>
|
|
6
|
-
<button data-bs-toggle="tab" data-bs-target="#groups-members" class="btn btn-ghost btn-sm text-start d-flex align-items-
|
|
6
|
+
<button data-bs-toggle="tab" data-bs-target="#groups-members" class="btn btn-ghost btn-sm text-start d-flex align-items-baseline ff-secondary fw-semibold gap-2">
|
|
7
7
|
<div class="flex-grow-1">[[groups:members]]</div>
|
|
8
8
|
<span component="group/member/count" class="flex-shrink-0 text-xs lh-1" title="{formattedNumber(group.memberCount)}">{humanReadableNumber(group.memberCount)}</span>
|
|
9
9
|
</button>
|
|
10
10
|
|
|
11
11
|
{{{ if group.isOwner }}}
|
|
12
|
-
<button data-bs-toggle="tab" data-bs-target="#groups-pending" class="btn btn-ghost btn-sm text-start d-flex align-items-
|
|
12
|
+
<button data-bs-toggle="tab" data-bs-target="#groups-pending" class="btn btn-ghost btn-sm text-start d-flex align-items-baseline ff-secondary fw-semibold gap-2">
|
|
13
13
|
<div class="flex-grow-1">[[groups:details.pending]]</div>
|
|
14
14
|
<span component="group/pending/count" class="flex-shrink-0 text-xs lh-1" title="{formattedNumber(group.pending.length)}">{humanReadableNumber(group.pending.length)}</span>
|
|
15
15
|
</button>
|
|
16
16
|
|
|
17
|
-
<button data-bs-toggle="tab" data-bs-target="#groups-invited" class="btn btn-ghost btn-sm text-start d-flex align-items-
|
|
17
|
+
<button data-bs-toggle="tab" data-bs-target="#groups-invited" class="btn btn-ghost btn-sm text-start d-flex align-items-baseline ff-secondary fw-semibold gap-2">
|
|
18
18
|
<div class="flex-grow-1">[[groups:details.invited]]</div>
|
|
19
19
|
<span component="group/invited/count" class="flex-shrink-0 text-xs lh-1" title="{formattedNumber(group.invited.length)}">{humanReadableNumber(group.invited.length)}</span>
|
|
20
20
|
</button>
|
|
21
21
|
|
|
22
|
-
<button data-bs-toggle="tab" data-bs-target="#groups-admin" class="btn btn-ghost btn-sm text-start d-flex align-items-
|
|
22
|
+
<button data-bs-toggle="tab" data-bs-target="#groups-admin" class="btn btn-ghost btn-sm text-start d-flex align-items-baseline ff-secondary fw-semibold">
|
|
23
23
|
<div class="flex-grow-1">[[global:header.admin]]</div>
|
|
24
24
|
</button>
|
|
25
25
|
{{{ end }}}
|
|
@@ -26,24 +26,23 @@
|
|
|
26
26
|
{{{ end }}}
|
|
27
27
|
|
|
28
28
|
{{{ if template.world }}}
|
|
29
|
-
<
|
|
30
|
-
<
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
<
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
</ul>
|
|
29
|
+
<div class="btn-group bottom-sheet">
|
|
30
|
+
<button class="btn btn-ghost btn-sm ff-secondary d-flex gap-2 align-items-center dropdown-toggle" data-bs-toggle="dropdown">
|
|
31
|
+
<i class="fa fa-fw fa-arrow-down-wide-short text-primary"></i>
|
|
32
|
+
<span id="sort-label" class="visible-md-inline visible-lg-inline fw-semibold"></span>
|
|
33
|
+
</button>
|
|
34
|
+
<ul class="dropdown-menu" id="sort-options">
|
|
35
|
+
<li><a class="dropdown-item rounded-1" href="{config.relative_path}/world">[[world:latest]]</a></li>
|
|
36
|
+
<li><a class="dropdown-item rounded-1" href="{config.relative_path}/world?sort=popular&term=day">[[world:popular-day]]</a></li>
|
|
37
|
+
<li><a class="dropdown-item rounded-1" href="{config.relative_path}/world?sort=popular&term=week">[[world:popular-week]]</a></li>
|
|
38
|
+
<li><a class="dropdown-item rounded-1" href="{config.relative_path}/world?sort=popular&term=month">[[world:popular-month]]</a></li>
|
|
39
|
+
<li><a class="dropdown-item rounded-1" href="{config.relative_path}/world?sort=popular&term=year">[[world:popular-year]]</a></li>
|
|
40
|
+
<li><a class="dropdown-item rounded-1" href="{config.relative_path}/world?sort=popular&term=alltime">[[world:popular-alltime]]</a></li>
|
|
41
|
+
</ul>
|
|
42
|
+
</div>
|
|
44
43
|
<a class="btn btn-ghost btn-sm ff-secondary d-flex gap-2 align-items-center fw-semibold" href="#" id="world-help">
|
|
45
44
|
<i class="fa fa-question text-primary"></i>
|
|
46
|
-
[[world:help]]
|
|
45
|
+
<span class="visible-md-inline visible-lg-inline">[[world:help]]</span>
|
|
47
46
|
</a>
|
|
48
47
|
{{{ end }}}
|
|
49
48
|
|
package/templates/world.tpl
CHANGED
|
@@ -30,14 +30,36 @@
|
|
|
30
30
|
<div class="col-lg-4 col-sm-12 mt-2 pt-1">
|
|
31
31
|
<form class="mb-3" role="search" method="GET" action="{config.relative_path}/search">
|
|
32
32
|
<input type="hidden" name="in" value="categories" />
|
|
33
|
-
<
|
|
33
|
+
<div class="input-group bottom-sheet">
|
|
34
|
+
<input class="form-control form-control-lg" component="category-search" name="term" type="text" autocomplete="off" placeholder="[[world:category-search]]" />
|
|
35
|
+
<button class="btn btn-outline-secondary dropdown-toggle d-md-none" type="button" data-bs-toggle="dropdown">
|
|
36
|
+
<i class="fa fa-fw fa-list"></i>
|
|
37
|
+
</button>
|
|
38
|
+
<ul class="dropdown-menu">
|
|
39
|
+
{{{ each categories }}}
|
|
40
|
+
<li class="flex-grow-1 align-items-start d-flex gap-2 p-1 mb-2 position-relative">
|
|
41
|
+
<div>
|
|
42
|
+
{buildCategoryIcon(@value, "24px", "rounded-1")}
|
|
43
|
+
</div>
|
|
44
|
+
<div class="d-grid gap-0">
|
|
45
|
+
<div class="title fw-semibold">
|
|
46
|
+
<a class="text-reset stretched-link" href="{{{ if ./link }}}{./link}{{{ else }}}{config.relative_path}/category/{./slug}{{{ end }}}" itemprop="url">{../name}</a>
|
|
47
|
+
</div>
|
|
48
|
+
{{{ if ./descriptionParsed }}}
|
|
49
|
+
<div class="description text-muted text-xs w-100 line-clamp-sm-5">{./descriptionParsed}</div>
|
|
50
|
+
{{{ end }}}
|
|
51
|
+
</div>
|
|
52
|
+
</li>
|
|
53
|
+
{{{ end }}}
|
|
54
|
+
</ul>
|
|
55
|
+
</div>
|
|
34
56
|
</form>
|
|
35
57
|
<div class="quick-search-container dropdown-menu d-block p-2 hidden">
|
|
36
58
|
<div class="text-center loading-indicator"><i class="fa fa-spinner fa-spin"></i></div>
|
|
37
59
|
<div class="quick-search-results-container"></div>
|
|
38
60
|
</div>
|
|
39
61
|
|
|
40
|
-
<ul class="categories-list ps-0 list-unstyled pt-3">
|
|
62
|
+
<ul class="categories-list ps-0 list-unstyled pt-3 d-none d-md-block">
|
|
41
63
|
{{{ each categories }}}
|
|
42
64
|
<!-- IMPORT partials/account/category-item.tpl -->
|
|
43
65
|
{{{ end }}}
|