nodebb-theme-harmony 1.0.0-beta.10 → 1.0.0-beta.12
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/public/harmony.js +15 -0
- package/scss/common.scss +16 -4
- package/scss/overrides.scss +2 -0
- package/scss/topic.scss +22 -12
- package/templates/account/categories.tpl +0 -1
- package/templates/category.tpl +1 -2
- package/templates/flags/detail.tpl +0 -1
- package/templates/flags/list.tpl +1 -1
- package/templates/partials/category-filter-content.tpl +1 -1
- package/templates/partials/category-selector-content.tpl +1 -1
- package/templates/partials/mobile-footer.tpl +70 -65
- package/templates/partials/sidebar/notifications.tpl +1 -1
- package/templates/partials/topic/navigation-post.tpl +5 -9
- package/templates/partials/topic/navigator-mobile.tpl +43 -0
- package/templates/partials/topic/post.tpl +1 -1
- package/templates/partials/topic/quickreply.tpl +1 -1
- package/templates/partials/topic-list-bar.tpl +3 -3
- package/templates/popular.tpl +1 -1
- package/templates/post-queue.tpl +113 -0
- package/templates/recent.tpl +1 -1
- package/templates/top.tpl +1 -1
- package/templates/topic.tpl +1 -1
- package/templates/unread.tpl +1 -1
package/package.json
CHANGED
package/public/harmony.js
CHANGED
|
@@ -5,6 +5,7 @@ $(document).ready(function () {
|
|
|
5
5
|
setupMobileMenu();
|
|
6
6
|
setupSearch();
|
|
7
7
|
setupDrafts();
|
|
8
|
+
handleMobileNavigator();
|
|
8
9
|
|
|
9
10
|
$('[component="skinSwitcher"]').on('click', '.dropdown-item', function () {
|
|
10
11
|
const skin = $(this).attr('data-value');
|
|
@@ -103,6 +104,7 @@ $(document).ready(function () {
|
|
|
103
104
|
updateBadgeCount();
|
|
104
105
|
});
|
|
105
106
|
}
|
|
107
|
+
|
|
106
108
|
function setupNProgress() {
|
|
107
109
|
require(['nprogress'], function (NProgress) {
|
|
108
110
|
window.nprogress = NProgress;
|
|
@@ -117,4 +119,17 @@ $(document).ready(function () {
|
|
|
117
119
|
}
|
|
118
120
|
});
|
|
119
121
|
}
|
|
122
|
+
|
|
123
|
+
function handleMobileNavigator() {
|
|
124
|
+
const paginationBlockEl = $('.pagination-block');
|
|
125
|
+
require(['hooks'], function (hooks) {
|
|
126
|
+
hooks.on('action:ajaxify.end', function () {
|
|
127
|
+
paginationBlockEl.find('.dropdown-menu.show').removeClass('show');
|
|
128
|
+
});
|
|
129
|
+
hooks.on('filter:navigator.scroll', function (hookData) {
|
|
130
|
+
paginationBlockEl.find('.dropdown-menu.show').removeClass('show');
|
|
131
|
+
return hookData;
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
}
|
|
120
135
|
});
|
package/scss/common.scss
CHANGED
|
@@ -14,8 +14,13 @@ body {
|
|
|
14
14
|
.text-sm { font-size: 0.875rem!important; } // 14px
|
|
15
15
|
.text-xs { font-size: 0.75rem!important; } // 12px
|
|
16
16
|
|
|
17
|
-
.
|
|
18
|
-
|
|
17
|
+
.caret {
|
|
18
|
+
&::after {
|
|
19
|
+
border: none;
|
|
20
|
+
font-family: "FontAwesome";
|
|
21
|
+
content: "\f078";
|
|
22
|
+
color: tint-color($primary, 40%);
|
|
23
|
+
}
|
|
19
24
|
}
|
|
20
25
|
|
|
21
26
|
.sticky-tools {
|
|
@@ -35,6 +40,13 @@ body {
|
|
|
35
40
|
}
|
|
36
41
|
}
|
|
37
42
|
|
|
43
|
+
.btn-link {
|
|
44
|
+
&:hover, &.active {
|
|
45
|
+
background-color: $btn-ghost-hover-color;
|
|
46
|
+
text-decoration: none;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
38
50
|
@mixin btn-ghost-base {
|
|
39
51
|
display: flex;
|
|
40
52
|
align-items: center;
|
|
@@ -48,10 +60,10 @@ body {
|
|
|
48
60
|
text-align: left;
|
|
49
61
|
--bs-text-opacity: 1;
|
|
50
62
|
color: inherit !important;
|
|
51
|
-
|
|
63
|
+
|
|
52
64
|
cursor: pointer;
|
|
53
65
|
&:hover, &.active {
|
|
54
|
-
background-color: $hover-color;
|
|
66
|
+
background-color: $btn-ghost-hover-color;
|
|
55
67
|
text-decoration: none;
|
|
56
68
|
}
|
|
57
69
|
}
|
package/scss/overrides.scss
CHANGED
package/scss/topic.scss
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
.pagination-block { display: none; }
|
|
2
|
+
|
|
1
3
|
.page-topic {
|
|
2
4
|
[component="topic/title"] {
|
|
3
5
|
font-size: 28px;
|
|
@@ -14,18 +16,6 @@
|
|
|
14
16
|
line-height: 20px;
|
|
15
17
|
}
|
|
16
18
|
|
|
17
|
-
.action-bar {
|
|
18
|
-
.dropdown-toggle::after {
|
|
19
|
-
border: none;
|
|
20
|
-
font-family: "FontAwesome";
|
|
21
|
-
content: "\f078";
|
|
22
|
-
color: tint-color($primary, 40%);
|
|
23
|
-
|
|
24
|
-
position: relative;
|
|
25
|
-
top: 2px;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
19
|
.topic {
|
|
30
20
|
.posts {
|
|
31
21
|
max-width: 960px;
|
|
@@ -67,6 +57,17 @@
|
|
|
67
57
|
[component="post/reply-count"] {
|
|
68
58
|
font-size: $font-size-base * .75;
|
|
69
59
|
}
|
|
60
|
+
|
|
61
|
+
[component="post/upvote"], [component="post/downvote"] {
|
|
62
|
+
&.upvoted, &.downvoted {
|
|
63
|
+
background-color: lighten($btn-ghost-hover-color, 5%);
|
|
64
|
+
|
|
65
|
+
&:hover {
|
|
66
|
+
background-color: $btn-ghost-hover-color;
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
70
71
|
}
|
|
71
72
|
}
|
|
72
73
|
|
|
@@ -106,6 +107,15 @@
|
|
|
106
107
|
}
|
|
107
108
|
}
|
|
108
109
|
}
|
|
110
|
+
|
|
111
|
+
.pagination-block {
|
|
112
|
+
display: block;
|
|
113
|
+
transition: opacity 250ms ease-in;
|
|
114
|
+
opacity: 0;
|
|
115
|
+
&.ready {
|
|
116
|
+
opacity: 1;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
109
119
|
}
|
|
110
120
|
|
|
111
121
|
@include media-breakpoint-up(sm) {
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
<div class="btn-group bottom-sheet" component="category/watch/all">
|
|
12
12
|
<button class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" type="button">
|
|
13
13
|
<span>[[user:change_all]]</span>
|
|
14
|
-
<span class="caret"></span>
|
|
15
14
|
</button>
|
|
16
15
|
<ul class="dropdown-menu">
|
|
17
16
|
<li><a class="dropdown-item" href="#" component="category/watching" data-state="watching"><i class="fa fa-fw fa-inbox"></i> [[category:watching]]<p class="help-text"><small>[[category:watching.description]]</small></p></a></li>
|
package/templates/category.tpl
CHANGED
|
@@ -33,8 +33,7 @@
|
|
|
33
33
|
|
|
34
34
|
{{{ if !topics.length }}}
|
|
35
35
|
{{{ if privileges.topics:create }}}
|
|
36
|
-
<
|
|
37
|
-
<div class="alert alert-warning" id="category-no-topics">
|
|
36
|
+
<div class="alert alert-info mt-3" id="category-no-topics">
|
|
38
37
|
[[category:no_topics]]
|
|
39
38
|
</div>
|
|
40
39
|
{{{ end }}}
|
|
@@ -146,7 +146,6 @@
|
|
|
146
146
|
<button type="button" class="btn btn-light dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
147
147
|
<i class="fa fa-street-view"></i>
|
|
148
148
|
[[flags:flagged-user]]
|
|
149
|
-
<span class="caret"></span>
|
|
150
149
|
</button>
|
|
151
150
|
<ul class="dropdown-menu">
|
|
152
151
|
<li><a class="dropdown-item" href="{config.relative_path}/uid/{target.uid}">[[flags:view-profile]]</a></li>
|
package/templates/flags/list.tpl
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
<div class="btn-group float-end" component="flags/bulk-actions">
|
|
20
20
|
<button type="button" class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" autocomplete="off" aria-haspopup="true" aria-expanded="false" disabled="disabled">
|
|
21
|
-
<i class="fa fa-clone"></i> [[flags:bulk-actions]]
|
|
21
|
+
<i class="fa fa-clone"></i> <span class="fw-semibold">[[flags:bulk-actions]]</span>
|
|
22
22
|
</button>
|
|
23
23
|
<ul class="dropdown-menu">
|
|
24
24
|
<li><a href="#" class="dropdown-item" data-action="bulk-assign">[[flags:assign-to-me]]</a></li>
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<span class="visible-md-inline visible-lg-inline fw-semibold">[[unread:all_categories]]</span>{{{ end }}}
|
|
10
10
|
</button>
|
|
11
11
|
<div component="category-selector-search" class="hidden position-absolute">
|
|
12
|
-
<input type="text" class="form-control" autocomplete="off">
|
|
12
|
+
<input type="text" class="form-control form-control-sm" autocomplete="off">
|
|
13
13
|
</div>
|
|
14
14
|
<ul component="category/list" class="dropdown-menu category-dropdown-menu" role="menu">
|
|
15
15
|
<li role="presentation" class="category" data-all="all">
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
</span>
|
|
13
13
|
</button>
|
|
14
14
|
<div component="category-selector-search" class="hidden position-absolute">
|
|
15
|
-
<input type="text" class="form-control" autocomplete="off">
|
|
15
|
+
<input type="text" class="form-control form-control-sm" autocomplete="off">
|
|
16
16
|
</div>
|
|
17
17
|
<ul component="category/list" class="dropdown-menu category-dropdown-menu" role="menu">
|
|
18
18
|
<li component="category/no-matches" role="presentation" class="category hidden">
|
|
@@ -1,73 +1,78 @@
|
|
|
1
|
-
<div class="
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
{{{
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
1
|
+
<div class="d-flex flex-column d-md-none fixed-bottom ff-secondary gap-1 align-items-center">
|
|
2
|
+
|
|
3
|
+
<!-- IMPORT partials/topic/navigator-mobile.tpl -->
|
|
4
|
+
|
|
5
|
+
<div class="bottombar p-2 text-dark bg-light d-flex justify-content-between align-items-center w-100">
|
|
6
|
+
<div class="">
|
|
7
|
+
<a href="#" role="button" class="nav-link nav-btn d-flex justify-content-between align-items-center position-relative" data-bs-toggle="dropdown">
|
|
8
|
+
<span class="position-relative">
|
|
9
|
+
<i class="fa fa-fw fa-lg fa-bars"></i>
|
|
10
|
+
<span component="unread/count" data-unread-url="{unreadCount.unreadUrl}" class="position-absolute top-0 start-100 translate-middle badge rounded-1 bg-primary {{{ if !unreadCount.mobileUnread }}}hidden{{{ end }}}">{unreadCount.mobileUnread}</span>
|
|
11
|
+
</span>
|
|
12
|
+
</a>
|
|
13
|
+
<ul class="navigation-dropdown dropdown-menu">
|
|
14
|
+
{{{ each navigation }}}
|
|
15
|
+
<!-- IF function.displayMenuItem, @index -->
|
|
16
|
+
<li class="nav-item {./class}{{{ if ./dropdown }}} dropend{{{ end }}}" title="{./title}">
|
|
17
|
+
<a class="nav-link nav-btn navigation-link px-3 py-2 {{{ if navigation.dropdown }}}dropdown-toggle{{{ end }}}"
|
|
18
|
+
{{{ if ./dropdown }}} href="#" role="button" data-bs-toggle="collapse" data-bs-target="#collapse-target-{@index}" onclick="event.stopPropagation();" {{{ else }}} href="{./route}"{{{ end }}} {{{ if ./id }}}id="{./id}"{{{ end }}}{{{ if ./targetBlank }}} target="_blank"{{{ end }}}>
|
|
19
|
+
<span class="d-inline-flex justify-content-between align-items-center w-100">
|
|
20
|
+
<span class="text-nowrap truncate-open">
|
|
21
|
+
{{{ if ./iconClass }}}
|
|
22
|
+
<i class="fa fa-fw {./iconClass}" data-content="{./content}"></i>
|
|
23
|
+
{{{ end }}}
|
|
24
|
+
{{{ if navigation.text }}}
|
|
25
|
+
<span class="nav-text visible-open px-2 fw-semibold">{navigation.text}</span>
|
|
26
|
+
{{{ end }}}
|
|
27
|
+
</span>
|
|
28
|
+
<span component="navigation/count" class="visible-open badge rounded-1 bg-primary {{{ if !./content }}}hidden{{{ end }}}">{./content}</span>
|
|
23
29
|
</span>
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
</
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
</ul>
|
|
38
|
-
</div>
|
|
30
|
+
</a>
|
|
31
|
+
{{{ if navigation.dropdown }}}
|
|
32
|
+
<div class="ps-3">
|
|
33
|
+
<ul id="collapse-target-{@index}" class="collapse list-unstyled ps-3">
|
|
34
|
+
{navigation.dropdownContent}
|
|
35
|
+
</ul>
|
|
36
|
+
</div>
|
|
37
|
+
{{{ end }}}
|
|
38
|
+
</li>
|
|
39
|
+
<!-- ENDIF function.displayMenuItem -->
|
|
40
|
+
{{{end}}}
|
|
41
|
+
</ul>
|
|
42
|
+
</div>
|
|
39
43
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
<div class="">
|
|
45
|
+
{{{ if config.loggedIn }}}
|
|
46
|
+
<ul id="logged-in-menu" class="list-unstyled d-flex align-items-center w-100 gap-3 mb-0">
|
|
47
|
+
{{{ if config.searchEnabled }}}
|
|
48
|
+
<li component="sidebar/search" class="nav-item m-0 search">
|
|
49
|
+
<!-- IMPORT partials/sidebar/search-mobile.tpl -->
|
|
50
|
+
</li>
|
|
51
|
+
{{{ end }}}
|
|
48
52
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
53
|
+
<li component="notifications" class="nav-item m-0 notifications">
|
|
54
|
+
<!-- IMPORT partials/sidebar/notifications.tpl -->
|
|
55
|
+
</li>
|
|
52
56
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
57
|
+
{{{ if canChat }}}
|
|
58
|
+
<li class="nav-item m-0 chats">
|
|
59
|
+
<!-- IMPORT partials/sidebar/chats.tpl -->
|
|
60
|
+
</li>
|
|
61
|
+
{{{ end }}}
|
|
58
62
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
63
|
+
<li component="sidebar/drafts" class="nav-item m-0 drafts">
|
|
64
|
+
<!-- IMPORT partials/sidebar/drafts.tpl -->
|
|
65
|
+
</li>
|
|
62
66
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
67
|
+
<li id="user_label" class="nav-item m-0 py-2 usermenu">
|
|
68
|
+
<!-- IMPORT partials/sidebar/user-menu.tpl -->
|
|
69
|
+
</li>
|
|
70
|
+
</ul>
|
|
71
|
+
{{{ else }}}
|
|
72
|
+
<ul id="logged-out-menu" class="list-unstyled d-flex w-100 gap-3 mb-0 logged-out-menu">
|
|
73
|
+
<!-- IMPORT partials/sidebar/logged-out-menu.tpl -->
|
|
74
|
+
</ul>
|
|
75
|
+
{{{ end }}}
|
|
76
|
+
</div>
|
|
72
77
|
</div>
|
|
73
78
|
</div>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<i component="notifications/icon" class="fa fa-fw {{{ if unreadCount.notification}}}fa-bell{{{ else }}}fa-bell-o{{{ end }}} unread-count" data-content="{unreadCount.notification}"></i>
|
|
5
5
|
<span component="notifications/count" class="visible-closed position-absolute top-0 start-100 translate-middle badge rounded-1 bg-primary {{{ if !unreadCount.notification }}}hidden{{{ end }}}">{unreadCount.notification}</span>
|
|
6
6
|
</span>
|
|
7
|
-
<span class="nav-text small visible-open fw-semibold">[[global:header.notifications]]</span>
|
|
7
|
+
<span class="nav-text small visible-open fw-semibold truncate-text">[[global:header.notifications]]</span>
|
|
8
8
|
</span>
|
|
9
9
|
<span component="notifications/count" class="visible-open badge rounded-1 bg-primary {{{ if !unreadCount.notification }}}hidden{{{ end }}}">{unreadCount.notification}</span>
|
|
10
10
|
</a>
|
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
<a href="<!-- IF post.user.userslug -->{config.relative_path}/user/{post.user.userslug}<!-- ELSE -->#<!-- ENDIF post.user.userslug -->">
|
|
6
|
-
{buildAvatar(post.user, "24px", true, "", "user/picture")} {post.user.username}
|
|
1
|
+
<div class="d-flex gap-2 mb-2 justify-content-between align-items-center flex-nowrap">
|
|
2
|
+
<div class="icon text-truncate">
|
|
3
|
+
<a href="{{{ if post.user.userslug }}}{config.relative_path}/user/{post.user.userslug}{{{else }}}#{{{ end }}}">
|
|
4
|
+
{buildAvatar(post.user, "24px", true)} {post.user.username}
|
|
7
5
|
</a>
|
|
8
6
|
</div>
|
|
9
|
-
<
|
|
10
|
-
<span class="timeago" title="{post.timestampISO}"></span>
|
|
11
|
-
</small>
|
|
7
|
+
<span class="timeago text-nowrap text-sm" title="{post.timestampISO}"></span>
|
|
12
8
|
</div>
|
|
13
9
|
|
|
14
10
|
<div>{post.content}</div>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<div class="d-flex justify-content-end w-100">
|
|
2
|
+
<div class="pagination-block text-bg-light m-2 rounded-1 border border-gray-300" style="height:50px;">
|
|
3
|
+
<div class="position-relative">
|
|
4
|
+
<div class="progress-bar rounded-1 bg-info d-block position-absolute" style="height:50px;"></div>
|
|
5
|
+
</div>
|
|
6
|
+
<div class="wrapper d-flex align-items-center h-100" style="padding: 5px 0px;">
|
|
7
|
+
<i class="fa fa-2x fa-angle-double-up pointer fa-fw pagetop" style="z-index: 1;"></i>
|
|
8
|
+
|
|
9
|
+
<a href="#" class="text-reset dropdown-toggle d-inline-block px-3 text-decoration-none" data-bs-toggle="dropdown">
|
|
10
|
+
<span class="pagination-text position-relative fw-bold"></span>
|
|
11
|
+
</a>
|
|
12
|
+
|
|
13
|
+
<i class="fa fa-2x fa-angle-double-down pointer fa-fw pagebottom" style="z-index: 1;"></i>
|
|
14
|
+
<ul class="dropdown-menu p-0" role="menu" style="width: 100%;">
|
|
15
|
+
<li class="p-3">
|
|
16
|
+
<div class="row">
|
|
17
|
+
<div class="col-8 post-content overflow-hidden mb-3" style="height: 350px;"></div>
|
|
18
|
+
<div class="col-4 text-end">
|
|
19
|
+
<div class="scroller-content">
|
|
20
|
+
<span class="pointer pagetop">[[topic:first-post]] <i class="fa fa-angle-double-up"></i></span>
|
|
21
|
+
<div class="scroller-container border-gray-200" style="height: 300px; border-right: 3px solid; margin-right: 5.5px;">
|
|
22
|
+
<div class="scroller-thumb position-relative" style="height: 40px;right: -6px; padding-right: 15px; margin-right: -15px;">
|
|
23
|
+
<span class="thumb-text fw-bold user-select-none position-relative" style="top: -15px; padding-right: 10px;"></span>
|
|
24
|
+
<div class="rounded-2 scroller-thumb-icon bg-primary d-inline-block position-relative" style="width: 9px; height:40px;"></div>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
<span class="pointer pagebottom">[[topic:last-post]] <i class="fa fa-angle-double-down"></i></span>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
<div class="row">
|
|
32
|
+
<div class="col-6">
|
|
33
|
+
<button id="myNextPostBtn" class="btn btn-outline-secondary form-control text-truncate" disabled>[[topic:go-to-my-next-post]]</button>
|
|
34
|
+
</div>
|
|
35
|
+
<div class="col-6">
|
|
36
|
+
<input type="number" class="form-control" id="indexInput" placeholder="[[global:pagination.enter_index]]">
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
39
|
+
</li>
|
|
40
|
+
</ul>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
<i class="fa fa-chevron-up text-primary"></i>
|
|
105
105
|
</a>
|
|
106
106
|
|
|
107
|
-
<div class="d-inline-block px-
|
|
107
|
+
<div class="d-inline-block px-2 mx-1 btn-ghost-sm" component="post/vote-count" data-votes="{posts.votes}">{posts.votes}</div>
|
|
108
108
|
|
|
109
109
|
{{{ if !downvote:disabled }}}
|
|
110
110
|
<a component="post/downvote" href="#" class="btn-ghost-sm {{{ if posts.downvoted }}}downvoted{{{ end }}}">
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
</div>
|
|
16
16
|
<div>
|
|
17
17
|
<div class="d-flex justify-content-end gap-2">
|
|
18
|
+
<button type="submit" component="topic/quickreply/expand" class="btn btn-sm btn-outline" formmethod="get"><i class="fa fa-expand"></i></button>
|
|
18
19
|
<button type="submit" component="topic/quickreply/button" class="btn btn-sm btn-primary">[[topic:post-quick-reply]]</button>
|
|
19
|
-
<button type="submit" component="topic/quickreply/expand" class="btn btn-sm btn-primary" formmethod="get"><i class="fa fa-expand"></i></button>
|
|
20
20
|
</div>
|
|
21
21
|
</div>
|
|
22
22
|
</form>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<nav class="topic-list-header {{{ if config.stickyToolbar }}} sticky-tools{{{ end }}} navbar navbar-expand p-0 border-0 rounded">
|
|
2
|
-
<div class="card card-header flex-row p-2 border rounded ff-secondary w-100">
|
|
2
|
+
<div class="card card-header flex-row p-2 gap-1 border rounded ff-secondary w-100">
|
|
3
3
|
<ul class="navbar-nav me-auto gap-2 align-items-center">
|
|
4
4
|
{{{ if template.category }}}
|
|
5
5
|
<!-- IMPORT partials/category/watch.tpl -->
|
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
{{{ end }}}
|
|
28
28
|
|
|
29
29
|
<a href="{config.relative_path}{{{ if template.category }}}{url}{{{ else }}}/{selectedFilter.url}{querystring}{{{ end }}}" class="d-inline-block text-decoration-none">
|
|
30
|
-
<div class="alert alert-warning h-100 m-0 px-2 py-1
|
|
30
|
+
<div class="d-md-block alert alert-warning h-100 m-0 px-2 py-1 line-clamp-2 text-sm text-break hide" id="new-topics-alert">There is a new post. Click here to reload.</div>
|
|
31
31
|
</a>
|
|
32
32
|
</ul>
|
|
33
33
|
|
|
34
|
-
<div class="d-flex gap-1 align-items-
|
|
34
|
+
<div class="d-flex gap-1 align-items-center">
|
|
35
35
|
{{{ if template.category }}}
|
|
36
36
|
{{{ if privileges.topics:create }}}
|
|
37
37
|
<a href="{config.relative_path}/compose?cid={cid}" component="category/post" id="new_topic" class="btn btn-primary btn-sm text-nowrap" data-ajaxify="false" role="button">[[category:new_topic_button]]</a>
|
package/templates/popular.tpl
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<!-- IMPORT partials/topic-list-bar.tpl -->
|
|
8
8
|
<div class="category">
|
|
9
9
|
{{{ if !topics.length }}}
|
|
10
|
-
<div class="alert alert-
|
|
10
|
+
<div class="alert alert-info mt-3" id="category-no-topics">[[recent:no_popular_topics]]</div>
|
|
11
11
|
{{{ end }}}
|
|
12
12
|
|
|
13
13
|
<!-- IMPORT partials/topics_list.tpl -->
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
<!-- IMPORT partials/breadcrumbs.tpl -->
|
|
2
|
+
<div class="btn-toolbar justify-content-end">
|
|
3
|
+
{{{ if (!singlePost && posts.length) }}}
|
|
4
|
+
<div class="me-2">
|
|
5
|
+
<!-- IMPORT partials/category-filter-right.tpl -->
|
|
6
|
+
</div>
|
|
7
|
+
<div class="btn-group bottom-sheet" component="post-queue/bulk-actions">
|
|
8
|
+
<button type="button" class="btn-ghost-sm dropdown-toggle" data-bs-toggle="dropdown" autocomplete="off" aria-haspopup="true" aria-expanded="false">
|
|
9
|
+
<i class="fa fa-clone"></i><span class="fw-semibold"> [[post-queue:bulk-actions]]</span>
|
|
10
|
+
</button>
|
|
11
|
+
<ul class="dropdown-menu dropdown-menu-end">
|
|
12
|
+
{{{ if canAccept }}}
|
|
13
|
+
<li><a class="dropdown-item" href="#" data-action="accept-all">[[post-queue:accept-all]]</a></li>
|
|
14
|
+
<li><a class="dropdown-item" href="#" data-action="accept-selected">[[post-queue:accept-selected]]</a></li>
|
|
15
|
+
<li class="dropdown-divider"></li>
|
|
16
|
+
<li><a class="dropdown-item" href="#" data-action="reject-all">[[post-queue:reject-all]]</a></li>
|
|
17
|
+
<li><a class="dropdown-item" href="#" data-action="reject-selected">[[post-queue:reject-selected]]</a></li>
|
|
18
|
+
{{{ else }}}
|
|
19
|
+
<li><a class="dropdown-item" href="#" data-action="reject-all">[[post-queue:remove-all]]</a></li>
|
|
20
|
+
<li><a class="dropdown-item" href="#" data-action="reject-selected">[[post-queue:remove-selected]]</a></li>
|
|
21
|
+
{{{ end }}}
|
|
22
|
+
</ul>
|
|
23
|
+
</div>
|
|
24
|
+
{{{ end }}}
|
|
25
|
+
</div>
|
|
26
|
+
<hr/>
|
|
27
|
+
<div class="row">
|
|
28
|
+
<div class="col-12">
|
|
29
|
+
<div class="post-queue preventSlideout posts-list">
|
|
30
|
+
{{{ if !posts.length }}}
|
|
31
|
+
{{{ if isAdmin }}}
|
|
32
|
+
<div class="card card-body">
|
|
33
|
+
<p>
|
|
34
|
+
[[post-queue:description, {config.relative_path}/admin/settings/post#post-queue]]
|
|
35
|
+
</p>
|
|
36
|
+
</div>
|
|
37
|
+
{{{ end }}}
|
|
38
|
+
{{{ end }}}
|
|
39
|
+
|
|
40
|
+
{{{ each posts }}}
|
|
41
|
+
<div class="card mb-3" data-id="{posts.id}">
|
|
42
|
+
<div class="card-header">
|
|
43
|
+
{{{ if !singlePost }}}
|
|
44
|
+
<input type="checkbox" class="form-check-input" autocomplete="off" />
|
|
45
|
+
{{{ end }}}
|
|
46
|
+
<strong>{{{ if posts.data.tid }}}[[post-queue:reply]]{{{ else }}}[[post-queue:topic]]{{{ end }}}</strong>
|
|
47
|
+
<span class="timeago float-end" title={posts.data.timestampISO}></span>
|
|
48
|
+
</div>
|
|
49
|
+
<div class="card-body">
|
|
50
|
+
<div class="row">
|
|
51
|
+
<div class="col-lg-2 col-12">
|
|
52
|
+
<strong>[[post-queue:user]]</strong>
|
|
53
|
+
<div>
|
|
54
|
+
{{{ if posts.user.userslug}}}
|
|
55
|
+
<a href="{config.relative_path}/uid/{posts.user.uid}">{buildAvatar(posts.user, "24px", true, "not-responsive")} {posts.user.username}</a>
|
|
56
|
+
{{{ else }}}
|
|
57
|
+
{posts.user.username}
|
|
58
|
+
{{{ end }}}
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
<div class="col-lg-3 col-12">
|
|
62
|
+
<strong>[[post-queue:category]]{{{ if posts.data.cid}}} <i class="fa fa-fw fa-edit" data-bs-toggle="tooltip" title="[[post-queue:category-editable]]"></i>{{{ end }}}</strong>
|
|
63
|
+
<div class="topic-category" {{{if posts.data.cid}}}data-editable="editable"{{{end}}}">
|
|
64
|
+
<a href="{config.relative_path}/category/{posts.category.slug}">
|
|
65
|
+
<div class="category-item d-inline-block">
|
|
66
|
+
{buildCategoryIcon(./category, "24px", "rounded-circle")}
|
|
67
|
+
{posts.category.name}
|
|
68
|
+
</div>
|
|
69
|
+
</a>
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
<div class="col-lg-7 col-12">
|
|
73
|
+
<strong>{{{ if posts.data.tid }}}[[post-queue:topic]]{{{ else }}}[[post-queue:title]] <i class="fa fa-fw fa-edit" data-bs-toggle="tooltip" title="[[post-queue:title-editable]]"></i>{{{ end }}}</strong>
|
|
74
|
+
<div class="topic-title text-break">
|
|
75
|
+
{{{ if posts.data.tid }}}
|
|
76
|
+
<a href="{config.relative_path}/topic/{posts.data.tid}">{posts.topic.title}</a>
|
|
77
|
+
{{{ end }}}
|
|
78
|
+
<span class="title-text">{posts.data.title}</span>
|
|
79
|
+
</div>
|
|
80
|
+
{{{if !posts.data.tid}}}
|
|
81
|
+
<div class="topic-title-editable hidden">
|
|
82
|
+
<input class="form-control" type="text" value="{posts.data.title}"/>
|
|
83
|
+
</div>
|
|
84
|
+
{{{end}}}
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
<hr/>
|
|
88
|
+
<div>
|
|
89
|
+
<strong>[[post-queue:content]] <i class="fa fa-fw fa-edit" data-bs-toggle="tooltip" title="[[post-queue:content-editable]]"></i></strong>
|
|
90
|
+
<div class="post-content text-break">{posts.data.content}</div>
|
|
91
|
+
<div class="post-content-editable hidden">
|
|
92
|
+
<textarea class="form-control w-100" style="height:300px;">{posts.data.rawContent}</textarea>
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
<div class="card-footer text-end">
|
|
97
|
+
<div>
|
|
98
|
+
{{{ if canAccept }}}
|
|
99
|
+
<button class="btn btn-danger btn-sm" data-action="reject"><i class="fa fa-fw fa-times"></i> [[post-queue:reject]]</button>
|
|
100
|
+
<button class="btn btn-info btn-sm" data-action="notify"><i class="fa fa-fw fa-bell-o"></i> [[post-queue:notify]]</button>
|
|
101
|
+
<button class="btn btn-success btn-sm" data-action="accept"><i class="fa fa-fw fa-check"></i> [[post-queue:accept]] </button>
|
|
102
|
+
{{{ else }}}
|
|
103
|
+
<button class="btn btn-danger btn-sm" data-action="reject"><i class="fa fa-fw fa-times"></i> [[post-queue:remove]]</button>
|
|
104
|
+
{{{ end }}}
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
{{{ end }}}
|
|
109
|
+
</div>
|
|
110
|
+
|
|
111
|
+
<!-- IMPORT partials/paginator.tpl -->
|
|
112
|
+
</div>
|
|
113
|
+
</div>
|
package/templates/recent.tpl
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
<div class="category">
|
|
11
11
|
{{{ if !topics.length }}}
|
|
12
|
-
<div class="alert alert-
|
|
12
|
+
<div class="alert alert-info mt-3" id="category-no-topics">[[recent:no_recent_topics]]</div>
|
|
13
13
|
{{{ end }}}
|
|
14
14
|
|
|
15
15
|
<!-- IMPORT partials/topics_list.tpl -->
|
package/templates/top.tpl
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<!-- IMPORT partials/topic-list-bar.tpl -->
|
|
8
8
|
<div class="category">
|
|
9
9
|
{{{ if !topics.length }}}
|
|
10
|
-
<div class="alert alert-
|
|
10
|
+
<div class="alert alert-info mt-3" id="category-no-topics">[[top:no_top_topics]]</div>
|
|
11
11
|
{{{ end }}}
|
|
12
12
|
|
|
13
13
|
<!-- IMPORT partials/topics_list.tpl -->
|
package/templates/topic.tpl
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
</h2>
|
|
12
12
|
|
|
13
13
|
<div class="topic-info d-flex gap-2 align-items-center flex-wrap {{{ if config.centerHeaderElements }}}justify-content-center{{{ end }}}">
|
|
14
|
-
<span component="topic/labels" class="d-flex gap-2
|
|
14
|
+
<span component="topic/labels" class="d-flex gap-2">
|
|
15
15
|
<span component="topic/scheduled" class="badge badge border border-gray-300 text-primary {{{ if !scheduled }}}hidden{{{ end }}}">
|
|
16
16
|
<i class="fa fa-clock-o"></i>
|
|
17
17
|
[[topic:scheduled]]
|
package/templates/unread.tpl
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<div class="unread">
|
|
7
7
|
<!-- IMPORT partials/topic-list-bar.tpl -->
|
|
8
8
|
<div class="category">
|
|
9
|
-
<div id="category-no-topics" class="alert alert-
|
|
9
|
+
<div id="category-no-topics" class="alert alert-info mt-3 {{{ if topics.length }}}hidden{{{ end }}}">[[unread:no_unread_topics]]</div>
|
|
10
10
|
|
|
11
11
|
<!-- IMPORT partials/topics_list.tpl -->
|
|
12
12
|
<button id="load-more-btn" class="btn btn-primary hide">[[unread:load_more]]</button>
|