nodebb-theme-harmony 2.0.0-pre.4 → 2.0.0-pre.40
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/library.js +1 -7
- package/package-lock.json +2325 -0
- package/package.json +2 -2
- package/plugin.json +1 -2
- package/public/harmony.js +8 -9
- package/scss/common.scss +2 -8
- package/scss/header.scss +1 -1
- package/scss/mixins.scss +12 -5
- package/scss/overrides.scss +2 -0
- package/templates/account/blocks.tpl +18 -7
- package/templates/account/categories.tpl +1 -1
- package/templates/account/consent.tpl +2 -2
- package/templates/account/edit/password.tpl +8 -8
- package/templates/account/edit/username.tpl +2 -3
- package/templates/account/edit.tpl +4 -4
- package/templates/account/info.tpl +142 -73
- package/templates/account/posts.tpl +7 -7
- package/templates/account/read.tpl +1 -0
- package/templates/account/settings.tpl +5 -5
- package/templates/account/topics.tpl +6 -5
- package/templates/admin/plugins/harmony.tpl +1 -0
- package/templates/flags/detail.tpl +4 -4
- package/templates/footer.tpl +1 -1
- package/templates/groups/list.tpl +6 -6
- package/templates/notifications.tpl +1 -1
- package/templates/partials/account/header.tpl +6 -6
- package/templates/partials/account/sidebar-left.tpl +21 -16
- package/templates/partials/breadcrumbs-json-ld.tpl +15 -25
- package/templates/partials/buttons/newTopic.tpl +1 -1
- package/templates/partials/categories/item.tpl +2 -2
- package/templates/partials/category/subcategory.tpl +1 -1
- package/templates/partials/flags/bulk-actions.tpl +1 -0
- package/templates/partials/flags/filters.tpl +21 -18
- package/templates/partials/groups/memberlist.tpl +1 -1
- package/templates/partials/groups/sidebar-left.tpl +5 -5
- package/templates/partials/mobile-footer.tpl +3 -6
- package/templates/partials/notifications_list.tpl +2 -2
- package/templates/partials/post_bar.tpl +3 -5
- package/templates/partials/posts_list_item.tpl +1 -1
- package/templates/partials/quick-search-results.tpl +4 -4
- package/templates/partials/search-filters.tpl +2 -2
- package/templates/partials/search-results.tpl +1 -1
- package/templates/partials/sidebar/chats.tpl +2 -2
- package/templates/partials/sidebar/drafts.tpl +1 -1
- package/templates/partials/sidebar/notifications.tpl +2 -2
- package/templates/partials/sidebar/search.tpl +2 -2
- package/templates/partials/sidebar-left.tpl +2 -5
- package/templates/partials/tags_list.tpl +3 -3
- package/templates/partials/topic/event.tpl +1 -1
- package/templates/partials/topic/navigator.tpl +2 -2
- package/templates/partials/topic/post-menu-list.tpl +15 -1
- package/templates/partials/topic/post-menu.tpl +3 -29
- package/templates/partials/topic/post.tpl +37 -32
- package/templates/partials/topic/quickreply.tpl +2 -2
- package/templates/partials/topic/reply-button.tpl +4 -2
- package/templates/partials/topic/sort.tpl +1 -1
- package/templates/partials/topic/tools.tpl +2 -6
- package/templates/partials/topic/watch.tpl +1 -1
- package/templates/partials/topic-filters.tpl +1 -1
- package/templates/partials/topic-list-bar.tpl +6 -6
- package/templates/partials/topic-terms.tpl +1 -1
- package/templates/partials/topics_list.tpl +10 -2
- package/templates/partials/users/item.tpl +2 -2
- package/templates/partials/users_list_menu.tpl +5 -5
- package/templates/post-queue.tpl +6 -2
- package/templates/topic.tpl +81 -88
- package/templates/users.tpl +1 -1
- package/templates/world.tpl +21 -0
- package/templates/login.tpl +0 -102
- package/templates/partials/category/filter-dropdown-content.tpl +0 -37
- package/templates/partials/category/selector-dropdown-content.tpl +0 -35
- package/templates/partials/category/sort.tpl +0 -39
- package/templates/partials/category/tools.tpl +0 -89
- package/templates/partials/category/watch.tpl +0 -67
- package/templates/partials/groups/filter-dropdown-content.tpl +0 -25
- package/templates/partials/tags/filter-dropdown-content.tpl +0 -34
- package/templates/partials/tags/watch.tpl +0 -42
- package/templates/partials/users/filter-dropdown-content.tpl +0 -23
- package/templates/register.tpl +0 -104
package/templates/post-queue.tpl
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
</div>
|
|
21
21
|
|
|
22
22
|
<div class="btn-group bottom-sheet" component="post-queue/bulk-actions">
|
|
23
|
-
<button type="button" class="btn-ghost-sm ff-secondary dropdown-toggle" data-bs-toggle="dropdown" autocomplete="off" aria-haspopup="true" aria-expanded="false">
|
|
23
|
+
<button type="button" class="btn btn-ghost btn-sm ff-secondary dropdown-toggle d-flex align-items-center gap-2" data-bs-toggle="dropdown" autocomplete="off" aria-haspopup="true" aria-expanded="false">
|
|
24
24
|
<i class="fa fa-clone text-primary"></i><span class="fw-semibold"> [[post-queue:bulk-actions]]</span>
|
|
25
25
|
</button>
|
|
26
26
|
<ul class="dropdown-menu p-1 text-sm dropdown-menu-end" role="menu">
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
[[post-queue:user]]
|
|
79
79
|
{{{ if ((privileges.ban || privileges.mute) || privileges.admin:users) }}}
|
|
80
80
|
<div class="ms-auto btn-group bottom-sheet">
|
|
81
|
-
<button href="#" class="btn btn-ghost-sm ff-secondary border text-xs dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">[[global:actions]]</button>
|
|
81
|
+
<button href="#" class="btn btn-ghost btn-sm ff-secondary border text-xs dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">[[global:actions]]</button>
|
|
82
82
|
<ul class="dropdown-menu p-1 text-sm" role="menu">
|
|
83
83
|
{{{ if privileges.view:users:info }}}
|
|
84
84
|
<li><a class="dropdown-item rounded-1" href="{config.relative_path}/user/{./user.userslug}/info" role="menuitem">[[user:account-info]]</a></li>
|
|
@@ -198,6 +198,10 @@
|
|
|
198
198
|
<div class="post-content-editable flex-grow-1 hidden">
|
|
199
199
|
<textarea class="form-control w-100 h-100 p-3">{posts.data.rawContent}</textarea>
|
|
200
200
|
</div>
|
|
201
|
+
<div component="post-queue/link-container" class="hidden border-top mx-3 py-3">
|
|
202
|
+
<label class="text-secondary form-text mb-2">[[post-queue:links-in-this-post]]</label>
|
|
203
|
+
<ul component="post-queue/link-container/list" class="text-sm"></ul>
|
|
204
|
+
</div>
|
|
201
205
|
</div>
|
|
202
206
|
</div>
|
|
203
207
|
</div>
|
package/templates/topic.tpl
CHANGED
|
@@ -4,123 +4,116 @@
|
|
|
4
4
|
{{{ end }}}
|
|
5
5
|
{{{ if widgets.header.length }}}
|
|
6
6
|
<div data-widget-area="header">
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
{{{each widgets.header}}}
|
|
8
|
+
{{widgets.header.html}}
|
|
9
|
+
{{{end}}}
|
|
10
10
|
</div>
|
|
11
11
|
{{{ end }}}
|
|
12
12
|
|
|
13
|
-
<div
|
|
14
|
-
<meta itemprop="headline" content="{
|
|
13
|
+
<div itemid="{url}" itemscope itemtype="https://schema.org/DiscussionForumPosting">
|
|
14
|
+
<meta itemprop="headline" content="{escape(titleRaw)}">
|
|
15
|
+
<meta itemprop="text" content="{escape(titleRaw)}">
|
|
15
16
|
<meta itemprop="url" content="{url}">
|
|
16
17
|
<meta itemprop="datePublished" content="{timestampISO}">
|
|
17
18
|
<meta itemprop="dateModified" content="{lastposttimeISO}">
|
|
18
|
-
<
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
<div class="d-flex flex-column gap-3 flex-grow-1">
|
|
23
|
-
<h1 component="post/header" class="tracking-tight fw-semibold fs-3 mb-0 text-break {{{ if config.theme.centerHeaderElements }}}text-center{{{ end }}}">
|
|
24
|
-
<span class="topic-title" component="topic/title">{title}</span>
|
|
25
|
-
</h1>
|
|
19
|
+
<div itemprop="author" itemscope itemtype="https://schema.org/Person">
|
|
20
|
+
<meta itemprop="name" content="{author.username}">
|
|
21
|
+
{{{ if author.userslug }}}<meta itemprop="url" content="{config.relative_path}/user/{author.userslug}">{{{ end }}}
|
|
22
|
+
</div>
|
|
26
23
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
24
|
+
<div class="d-flex flex-column gap-3">
|
|
25
|
+
<div class="d-flex flex-wrap">
|
|
26
|
+
<div class="d-flex flex-column gap-3 flex-grow-1">
|
|
27
|
+
<h1 component="post/header" class="tracking-tight fw-semibold fs-3 mb-0 text-break {{{ if config.theme.centerHeaderElements }}}text-center{{{ end }}}">
|
|
28
|
+
<span class="topic-title" component="topic/title">{title}</span>
|
|
29
|
+
</h1>
|
|
30
|
+
|
|
31
|
+
<div class="topic-info d-flex gap-2 align-items-center flex-wrap {{{ if config.theme.centerHeaderElements }}}justify-content-center{{{ end }}}">
|
|
32
|
+
<span component="topic/labels" class="d-flex gap-2 {{{ if (!scheduled && (!pinned && (!locked && (!oldCid && !icons.length)))) }}}hidden{{{ end }}}">
|
|
33
|
+
<span component="topic/scheduled" class="badge badge border border-gray-300 text-body {{{ if !scheduled }}}hidden{{{ end }}}">
|
|
34
|
+
<i class="fa fa-clock-o"></i> [[topic:scheduled]]
|
|
35
|
+
</span>
|
|
36
|
+
<span component="topic/pinned" class="badge badge border border-gray-300 text-body {{{ if (scheduled || !pinned) }}}hidden{{{ end }}}">
|
|
37
|
+
<i class="fa fa-thumb-tack"></i> {{{ if !pinExpiry }}}[[topic:pinned]]{{{ else }}}[[topic:pinned-with-expiry, {isoTimeToLocaleString(./pinExpiryISO, config.userLang)}]]{{{ end }}}
|
|
38
|
+
</span>
|
|
39
|
+
<span component="topic/locked" class="badge badge border border-gray-300 text-body {{{ if !locked }}}hidden{{{ end }}}">
|
|
40
|
+
<i class="fa fa-lock"></i> [[topic:locked]]
|
|
41
|
+
</span>
|
|
42
|
+
<a component="topic/moved" href="{config.relative_path}/category/{oldCid}" class="badge badge border border-gray-300 text-body text-decoration-none {{{ if (!oldCid || (oldCid == "-1")) }}}hidden{{{ end }}}">
|
|
43
|
+
<i class="fa fa-arrow-circle-right"></i> {{{ if privileges.isAdminOrMod }}}[[topic:moved-from, {oldCategory.name}]]{{{ else }}}[[topic:moved]]{{{ end }}}
|
|
44
|
+
</a>
|
|
45
|
+
{{{each icons}}}<span class="lh-1">{@value}</span>{{{end}}}
|
|
40
46
|
</span>
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
</a>
|
|
45
|
-
{{{each icons}}}<span class="lh-1">{@value}</span>{{{end}}}
|
|
46
|
-
</span>
|
|
47
|
-
{function.buildCategoryLabel, category, "a", "border"}
|
|
48
|
-
<div data-tid="{./tid}" component="topic/tags" class="lh-1 tags tag-list d-flex flex-wrap hidden-xs hidden-empty gap-2"><!-- IMPORT partials/topic/tags.tpl --></div>
|
|
49
|
-
<div class="d-flex hidden-xs gap-2">
|
|
50
|
-
<!-- IMPORT partials/topic/stats.tpl -->
|
|
47
|
+
{function.buildCategoryLabel, category, "a", "border"}
|
|
48
|
+
<div data-tid="{./tid}" component="topic/tags" class="lh-1 tags tag-list d-flex flex-wrap hidden-xs hidden-empty gap-2"><!-- IMPORT partials/topic/tags.tpl --></div>
|
|
49
|
+
<div class="d-flex hidden-xs gap-2"><!-- IMPORT partials/topic/stats.tpl --></div>
|
|
51
50
|
</div>
|
|
52
51
|
</div>
|
|
52
|
+
<div class="d-flex gap-2 justify-content-end align-items-center mt-2 hidden-empty" component="topic/thumb/list"><!-- IMPORT partials/topic/thumbs.tpl --></div>
|
|
53
53
|
</div>
|
|
54
|
-
<div class="d-flex gap-2 justify-content-end align-items-center mt-2 hidden-empty" component="topic/thumb/list"><!-- IMPORT partials/topic/thumbs.tpl --></div>
|
|
55
|
-
</div>
|
|
56
|
-
|
|
57
|
-
<div class="row mb-4 mb-lg-0">
|
|
58
|
-
<div class="topic {{{ if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
|
|
59
|
-
<!-- IMPORT partials/post_bar.tpl -->
|
|
60
|
-
|
|
61
|
-
{{{ if merger }}}
|
|
62
|
-
<!-- IMPORT partials/topic/merged-message.tpl -->
|
|
63
|
-
{{{ end }}}
|
|
64
54
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
55
|
+
<div class="row mb-4 mb-lg-0">
|
|
56
|
+
<div class="topic {{{ if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
|
|
57
|
+
<!-- IMPORT partials/post_bar.tpl -->
|
|
58
|
+
{{{ if merger }}}
|
|
59
|
+
<!-- IMPORT partials/topic/merged-message.tpl -->
|
|
60
|
+
{{{ end }}}
|
|
61
|
+
{{{ if forker }}}
|
|
62
|
+
<!-- IMPORT partials/topic/forked-message.tpl -->
|
|
63
|
+
{{{ end }}}
|
|
64
|
+
{{{ if !scheduled }}}
|
|
65
|
+
<!-- IMPORT partials/topic/deleted-message.tpl -->
|
|
66
|
+
{{{ end }}}
|
|
68
67
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
<div class="d-flex gap-0 gap-lg-5">
|
|
69
|
+
<div class="posts-container" style="min-width: 0;">
|
|
70
|
+
<ul component="topic" class="posts timeline list-unstyled mt-sm-2 p-0 py-3" style="min-width: 0;" data-tid="{tid}" data-cid="{cid}">
|
|
71
|
+
{{{ each posts }}}
|
|
72
|
+
<li component="post" class="pt-4 {{{ if posts.deleted }}}deleted{{{ end }}} {{{ if posts.selfPost }}}self-post{{{ end }}} {{{ if posts.topicOwnerPost }}}topic-owner-post{{{ end }}}" <!-- IMPORT partials/data/topic.tpl -->>
|
|
73
|
+
<a component="post/anchor" data-index="{./index}" id="{increment(./index, "1")}"></a>
|
|
74
|
+
<meta itemprop="datePublished" content="{./timestampISO}">
|
|
75
|
+
{{{ if ./editedISO }}}
|
|
76
|
+
<meta itemprop="dateModified" content="{./editedISO}">
|
|
77
|
+
{{{ end }}}
|
|
72
78
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
<li component="post" class="pt-4 {{{ if posts.deleted }}}deleted{{{ end }}} {{{ if posts.selfPost }}}self-post{{{ end }}} {{{ if posts.topicOwnerPost }}}topic-owner-post{{{ end }}}" <!-- IMPORT partials/data/topic.tpl -->>
|
|
78
|
-
<a component="post/anchor" data-index="{./index}" id="{increment(./index, "1")}"></a>
|
|
79
|
-
|
|
80
|
-
<meta itemprop="datePublished" content="{./timestampISO}">
|
|
81
|
-
{{{ if ./editedISO }}}
|
|
82
|
-
<meta itemprop="dateModified" content="{./editedISO}">
|
|
79
|
+
<!-- IMPORT partials/topic/post.tpl -->
|
|
80
|
+
</li>
|
|
81
|
+
{{{ if (config.topicPostSort != "most_votes") }}}
|
|
82
|
+
{{{ each ./events}}}<!-- IMPORT partials/topic/event.tpl -->{{{ end }}}
|
|
83
83
|
{{{ end }}}
|
|
84
|
-
|
|
85
|
-
<!-- IMPORT partials/topic/post.tpl -->
|
|
86
|
-
</li>
|
|
87
|
-
{{{ if (config.topicPostSort != "most_votes") }}}
|
|
88
|
-
{{{ each ./events}}}
|
|
89
|
-
<!-- IMPORT partials/topic/event.tpl -->
|
|
90
84
|
{{{ end }}}
|
|
85
|
+
</ul>
|
|
86
|
+
{{{ if browsingUsers }}}
|
|
87
|
+
<div class="visible-xs">
|
|
88
|
+
<!-- IMPORT partials/topic/browsing-users.tpl -->
|
|
89
|
+
<hr/>
|
|
90
|
+
</div>
|
|
91
|
+
{{{ end }}}
|
|
92
|
+
{{{ if config.theme.enableQuickReply }}}
|
|
93
|
+
<!-- IMPORT partials/topic/quickreply.tpl -->
|
|
91
94
|
{{{ end }}}
|
|
92
|
-
{{{ end }}}
|
|
93
|
-
</ul>
|
|
94
|
-
{{{ if browsingUsers }}}
|
|
95
|
-
<div class="visible-xs">
|
|
96
|
-
<!-- IMPORT partials/topic/browsing-users.tpl -->
|
|
97
|
-
<hr/>
|
|
98
95
|
</div>
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
<!-- IMPORT partials/topic/quickreply.tpl -->
|
|
102
|
-
{{{ end }}}
|
|
96
|
+
|
|
97
|
+
<!-- IMPORT partials/topic/navigator.tpl -->
|
|
103
98
|
</div>
|
|
104
99
|
|
|
105
|
-
|
|
100
|
+
{{{ if config.usePagination }}}
|
|
101
|
+
<!-- IMPORT partials/paginator.tpl -->
|
|
102
|
+
{{{ end }}}
|
|
106
103
|
</div>
|
|
107
|
-
|
|
108
|
-
{{{ if config.usePagination }}}
|
|
109
|
-
<!-- IMPORT partials/paginator.tpl -->
|
|
110
|
-
{{{ end }}}
|
|
111
|
-
</div>
|
|
112
|
-
<div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
|
|
104
|
+
<div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
|
|
113
105
|
{{{each widgets.sidebar}}}
|
|
114
106
|
{{widgets.sidebar.html}}
|
|
115
107
|
{{{end}}}
|
|
108
|
+
</div>
|
|
116
109
|
</div>
|
|
117
110
|
</div>
|
|
118
111
|
</div>
|
|
119
112
|
|
|
120
113
|
<div data-widget-area="footer">
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
114
|
+
{{{each widgets.footer}}}
|
|
115
|
+
{{widgets.footer.html}}
|
|
116
|
+
{{{end}}}
|
|
124
117
|
</div>
|
|
125
118
|
|
|
126
119
|
{{{ if !config.usePagination }}}
|
package/templates/users.tpl
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<div class="mb-2 mb-md-0">
|
|
10
10
|
<!-- IMPORT partials/users_list_menu.tpl -->
|
|
11
11
|
</div>
|
|
12
|
-
<div
|
|
12
|
+
<div>
|
|
13
13
|
<div class="d-flex justify-content-end gap-2">
|
|
14
14
|
{{{ if showInviteButton }}}
|
|
15
15
|
<button component="user/invite" class="btn btn-primary btn-sm text-nowrap"><i class="fa fa-user-plus"></i> [[users:invite]]</button>
|
package/templates/world.tpl
CHANGED
|
@@ -6,6 +6,27 @@
|
|
|
6
6
|
</div>
|
|
7
7
|
{{{ end }}}
|
|
8
8
|
|
|
9
|
+
<div class="category-header d-flex flex-column gap-2">
|
|
10
|
+
<div class="d-flex gap-2 align-items-center mb-1 {{{ if config.theme.centerHeaderElements }}}justify-content-center{{{ end }}}">
|
|
11
|
+
{buildCategoryIcon(@value, "40px", "rounded-1 flex-shrink-0")}
|
|
12
|
+
<h1 class="tracking-tight fs-2 fw-semibold mb-0 text-center">{./name}</h1>
|
|
13
|
+
</div>
|
|
14
|
+
{{{ if ./descriptionParsed }}}
|
|
15
|
+
<p class="description text-secondary text-sm w-100 {{{ if config.theme.centerHeaderElements }}}text-center{{{ end }}}">
|
|
16
|
+
{./descriptionParsed}
|
|
17
|
+
</p>
|
|
18
|
+
{{{ end }}}
|
|
19
|
+
|
|
20
|
+
<p class="description text-secondary text-sm w-100 {{{ if config.theme.centerHeaderElements }}}text-center{{{ end }}}">
|
|
21
|
+
<a class="btn btn-sm btn-link" href="{config.relative_path}/popular?term=daily&cid=-1">[[activitypub:world.popular]]</a>
|
|
22
|
+
<a class="btn btn-sm btn-link" href="{config.relative_path}/recent?cid=-1">[[activitypub:world.recent]]</a>
|
|
23
|
+
<button class="btn btn-sm btn-link" id="world-help">
|
|
24
|
+
<i class="fa fa-question"></i>
|
|
25
|
+
[[activitypub:world.help]]
|
|
26
|
+
</button>
|
|
27
|
+
</p>
|
|
28
|
+
</div>
|
|
29
|
+
|
|
9
30
|
<div class="row">
|
|
10
31
|
<div class="world {{{if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
|
|
11
32
|
<!-- IMPORT partials/topic-list-bar.tpl -->
|
package/templates/login.tpl
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
<div data-widget-area="header">
|
|
2
|
-
{{{each widgets.header}}}
|
|
3
|
-
{{widgets.header.html}}
|
|
4
|
-
{{{end}}}
|
|
5
|
-
</div>
|
|
6
|
-
<div class="row login flex-fill">
|
|
7
|
-
<div class="d-flex flex-column gap-2 {{{ if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
|
|
8
|
-
<h2 class="tracking-tight fw-semibold text-center">[[global:login]]</h2>
|
|
9
|
-
<div class="row justify-content-center gap-5">
|
|
10
|
-
{{{ if allowLocalLogin }}}
|
|
11
|
-
<div class="col-12 col-md-5 col-lg-3 px-md-0">
|
|
12
|
-
<div class="login-block">
|
|
13
|
-
<form class="d-flex flex-column gap-3" role="form" method="post" id="login-form">
|
|
14
|
-
<div class="mb-2 d-flex flex-column gap-2">
|
|
15
|
-
<label for="username">{allowLoginWith}</label>
|
|
16
|
-
<input class="form-control" type="text" placeholder="{allowLoginWith}" name="username" id="username" autocorrect="off" autocapitalize="off" autocomplete="nickname" value="{username}" aria-required="true"/>
|
|
17
|
-
</div>
|
|
18
|
-
<div class="mb-2 d-flex flex-column gap-2">
|
|
19
|
-
<div class="d-flex justify-content-between align-items-center">
|
|
20
|
-
<label for="password">[[user:password]]</label>
|
|
21
|
-
{{{ if allowPasswordReset }}}
|
|
22
|
-
<a id="reset-link" class="text-sm text-reset text-decoration-underline" href="{config.relative_path}/reset">[[login:forgot-password]]</a>
|
|
23
|
-
{{{ end }}}
|
|
24
|
-
</div>
|
|
25
|
-
<div>
|
|
26
|
-
<input class="form-control" type="password" placeholder="[[user:password]]" name="password" id="password" autocomplete="current-password" autocapitalize="off" aria-required="true"/>
|
|
27
|
-
<p id="caps-lock-warning" class="text-danger hidden text-sm mb-0 form-text" aria-live="polite" role="alert" aria-atomic="true">
|
|
28
|
-
<i class="fa fa-exclamation-triangle"></i> [[login:caps-lock-enabled]]
|
|
29
|
-
</p>
|
|
30
|
-
</div>
|
|
31
|
-
</div>
|
|
32
|
-
<div class="mb-2">
|
|
33
|
-
<div class="checkbox">
|
|
34
|
-
<label>
|
|
35
|
-
<input type="checkbox" name="remember" id="remember" checked /> [[login:remember-me]]
|
|
36
|
-
</label>
|
|
37
|
-
</div>
|
|
38
|
-
</div>
|
|
39
|
-
|
|
40
|
-
{{{ each loginFormEntry }}}
|
|
41
|
-
<div class="mb-2 loginFormEntry d-flex flex-column gap-2 {./styleName}">
|
|
42
|
-
<label for="{./inputId}">{./label}</label>
|
|
43
|
-
<div>{{./html}}</div>
|
|
44
|
-
</div>
|
|
45
|
-
{{{ end }}}
|
|
46
|
-
|
|
47
|
-
<input type="hidden" name="_csrf" value="{config.csrf_token}" />
|
|
48
|
-
<input type="hidden" name="noscript" id="noscript" value="true" />
|
|
49
|
-
|
|
50
|
-
<button class="btn btn-primary" id="login" type="submit">[[global:login]]</button>
|
|
51
|
-
|
|
52
|
-
<div class="alert alert-danger {{{ if !error }}} hidden{{{ end }}}" id="login-error-notify" role="alert" aria-atomic="true">
|
|
53
|
-
<strong>[[login:failed-login-attempt]]</strong>
|
|
54
|
-
<p class="mb-0">{error}</p>
|
|
55
|
-
</div>
|
|
56
|
-
|
|
57
|
-
<hr/>
|
|
58
|
-
|
|
59
|
-
{{{ if allowRegistration }}}
|
|
60
|
-
<span class="text-sm">[[login:dont-have-account]]</span>
|
|
61
|
-
<a class="btn btn-outline-light text-body" href="{config.relative_path}/register">[[register:register]]</a>
|
|
62
|
-
{{{ end }}}
|
|
63
|
-
</form>
|
|
64
|
-
</div>
|
|
65
|
-
</div>
|
|
66
|
-
{{{ end }}}
|
|
67
|
-
|
|
68
|
-
{{{ if alternate_logins }}}
|
|
69
|
-
<div class="col-12 col-md-5 col-lg-3 px-md-0">
|
|
70
|
-
<div class="alt-login-block d-flex flex-column gap-2">
|
|
71
|
-
<label>[[login:alternative-logins]]</label>
|
|
72
|
-
<ul class="alt-logins list-unstyled">
|
|
73
|
-
{{{ each authentication }}}
|
|
74
|
-
<li class="{./name} mb-2">
|
|
75
|
-
<a class="btn btn-outline-light d-flex align-items-center" rel="nofollow noopener noreferrer" target="_top" href="{config.relative_path}{./url}">
|
|
76
|
-
{{{ if ./icons.svg }}}
|
|
77
|
-
{./icons.svg}
|
|
78
|
-
{{{ else }}}
|
|
79
|
-
<i class="flex-shrink-0 {./icons.normal}" style="color:{./color};"></i>
|
|
80
|
-
{{{ end }}}
|
|
81
|
-
{{{ if ./labels.login }}}
|
|
82
|
-
<div class="flex-grow-1 text-body text-sm">{./labels.login}</div>
|
|
83
|
-
{{{ end }}}
|
|
84
|
-
</a></li>
|
|
85
|
-
{{{ end }}}
|
|
86
|
-
</ul>
|
|
87
|
-
</div>
|
|
88
|
-
</div>
|
|
89
|
-
{{{ end }}}
|
|
90
|
-
</div>
|
|
91
|
-
</div>
|
|
92
|
-
<div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
|
|
93
|
-
{{{each widgets.sidebar}}}
|
|
94
|
-
{{widgets.sidebar.html}}
|
|
95
|
-
{{{end}}}
|
|
96
|
-
</div>
|
|
97
|
-
</div>
|
|
98
|
-
<div data-widget-area="footer">
|
|
99
|
-
{{{each widgets.footer}}}
|
|
100
|
-
{{widgets.footer.html}}
|
|
101
|
-
{{{end}}}
|
|
102
|
-
</div>
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
<button type="button" class="btn-ghost-sm ff-secondary d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
2
|
-
{{{ if selectedCategory }}}
|
|
3
|
-
<span class="category-item d-inline-flex align-items-center gap-1">
|
|
4
|
-
{buildCategoryIcon(selectedCategory, "18px", "rounded-circle")}
|
|
5
|
-
<span class="visible-md-inline visible-lg-inline fw-semibold">{selectedCategory.name}</span>
|
|
6
|
-
</span>
|
|
7
|
-
{{{ else }}}
|
|
8
|
-
<i class="fa fa-fw fa-list text-primary"></i>
|
|
9
|
-
<span class="visible-md-inline visible-lg-inline fw-semibold">[[unread:all-categories]]</span>{{{ end }}}
|
|
10
|
-
</button>
|
|
11
|
-
<div component="category-selector-search" class="hidden position-absolute">
|
|
12
|
-
<input type="text" class="form-control form-control-sm" placeholder="[[search:type-to-search]]" autocomplete="off">
|
|
13
|
-
</div>
|
|
14
|
-
<ul component="category/list" class="dropdown-menu p-1 text-sm category-dropdown-menu" role="menu">
|
|
15
|
-
<li role="presentation" class="category" data-cid="all">
|
|
16
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" href="{{{ if allCategoriesUrl }}}{config.relative_path}/{allCategoriesUrl}{{{ else }}}#{{{ end }}}">
|
|
17
|
-
<div class="flex-grow-1">[[unread:all-categories]]</div>
|
|
18
|
-
<i component="category/select/icon" class="flex-shrink-0 fa fa-fw fa-check {{{if selectedCategory}}}invisible{{{end}}}"></i>
|
|
19
|
-
</a>
|
|
20
|
-
</li>
|
|
21
|
-
{{{each categoryItems}}}
|
|
22
|
-
<li role="presentation" class="category {{{ if ./disabledClass }}}disabled{{{ end }}}" data-cid="{./cid}" data-parent-cid="{./parentCid}" data-name="{./name}">
|
|
23
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2 {{{ if ./disabledClass }}}disabled{{{ end }}}" role="menuitem" href="#">
|
|
24
|
-
{./level}
|
|
25
|
-
<span component="category-markup" class="flex-grow-1" style="{{{ if ./match }}}font-weight: bold;{{{end}}}">
|
|
26
|
-
<div class="category-item d-inline-flex align-items-center gap-1">
|
|
27
|
-
{{{ if ./icon }}}
|
|
28
|
-
{buildCategoryIcon(@value, "24px", "rounded-circle")}
|
|
29
|
-
{{{ end }}}
|
|
30
|
-
{./name}
|
|
31
|
-
</div>
|
|
32
|
-
</span>
|
|
33
|
-
<i component="category/select/icon" class="flex-shrink-0 fa fa-fw fa-check {{{ if !./selected }}}invisible{{{ end }}}"></i>
|
|
34
|
-
</a>
|
|
35
|
-
</li>
|
|
36
|
-
{{{end}}}
|
|
37
|
-
</ul>
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
<button type="button" class="btn-ghost-sm ff-secondary d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
2
|
-
<span component="category-selector-selected">
|
|
3
|
-
{{{ if (selectedCategory && !showCategorySelectLabel) }}}
|
|
4
|
-
<span class="category-item d-inline-flex align-items-center gap-1">
|
|
5
|
-
{buildCategoryIcon(selectedCategory, "24px", "rounded-circle")}
|
|
6
|
-
<span class="fw-semibold">{selectedCategory.name}</span>
|
|
7
|
-
</span>
|
|
8
|
-
{{{ else }}}
|
|
9
|
-
<i class="fa fa-fw {{{ if selectCategoryIcon }}}{selectCategoryIcon}{{{ else }}}fa-list{{{ end }}} text-primary"></i>
|
|
10
|
-
<span class="visible-md-inline visible-lg-inline fw-semibold">{{{ if selectCategoryLabel }}}{selectCategoryLabel}{{{ else }}}[[topic:thread-tools.select-category]]{{{ end }}}</span>
|
|
11
|
-
{{{ end }}}
|
|
12
|
-
</span>
|
|
13
|
-
</button>
|
|
14
|
-
<div component="category-selector-search" class="hidden position-absolute">
|
|
15
|
-
<input type="text" class="form-control form-control-sm" placeholder="[[search:type-to-search]]" autocomplete="off">
|
|
16
|
-
</div>
|
|
17
|
-
<ul component="category/list" class="dropdown-menu p-1 text-sm category-dropdown-menu" role="menu">
|
|
18
|
-
<li component="category/no-matches" role="presentation" class="category hidden">
|
|
19
|
-
<a class="dropdown-item rounded-1" role="menuitem">[[search:no-matches]]</a>
|
|
20
|
-
</li>
|
|
21
|
-
{{{ each categoryItems }}}
|
|
22
|
-
<li role="presentation" class="category {{{ if ./disabledClass }}}disabled {{{ end }}}" data-cid="{./cid}" data-name="{./name}" data-parent-cid="{./parentCid}">
|
|
23
|
-
<a class="dropdown-item rounded-1 {{{ if ./disabledClass }}}disabled{{{ end }}}" role="menuitem" href="#">{./level}
|
|
24
|
-
<span component="category-markup" style="{{{ if ./match }}}font-weight: bold;{{{end}}}">
|
|
25
|
-
<div class="category-item d-inline-flex align-items-center gap-1">
|
|
26
|
-
{{{ if ./icon }}}
|
|
27
|
-
{buildCategoryIcon(@value, "24px", "rounded-circle")}
|
|
28
|
-
{{{ end }}}
|
|
29
|
-
{./name}
|
|
30
|
-
</div>
|
|
31
|
-
</span>
|
|
32
|
-
</a>
|
|
33
|
-
</li>
|
|
34
|
-
{{{ end }}}
|
|
35
|
-
</ul>
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
<div class="btn-group bottom-sheet" component="thread/sort">
|
|
2
|
-
<button class="btn-ghost-sm ff-secondary d-flex gap-2 align-items-center dropdown-toggle" data-bs-toggle="dropdown" type="button" aria-haspopup="true" aria-expanded="false" aria-label="[[aria:topic-sort-option, {sortOptionLabel}]]">
|
|
3
|
-
<i class="fa fa-fw fa-arrow-down-wide-short text-primary"></i>
|
|
4
|
-
<span class="d-none d-md-inline fw-semibold">{sortOptionLabel}</span>
|
|
5
|
-
</button>
|
|
6
|
-
|
|
7
|
-
<ul class="dropdown-menu p-1 text-sm" role="menu">
|
|
8
|
-
<li>
|
|
9
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" data-sort="recently_replied" role="menuitem">
|
|
10
|
-
<span class="flex-grow-1">[[topic:recently-replied]]</span>
|
|
11
|
-
<i class="flex-shrink-0 fa fa-fw text-secondary"></i>
|
|
12
|
-
</a>
|
|
13
|
-
</li>
|
|
14
|
-
<li>
|
|
15
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" data-sort="recently_created" role="menuitem">
|
|
16
|
-
<span class="flex-grow-1">[[topic:recently-created]]</span>
|
|
17
|
-
<i class="flex-shrink-0 fa fa-fw text-secondary"></i>
|
|
18
|
-
</a>
|
|
19
|
-
</li>
|
|
20
|
-
<li>
|
|
21
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" data-sort="most_posts" role="menuitem">
|
|
22
|
-
<span class="flex-grow-1">[[topic:most-posts]]</span>
|
|
23
|
-
<i class="flex-shrink-0 fa fa-fw text-secondary"></i>
|
|
24
|
-
</a>
|
|
25
|
-
</li>
|
|
26
|
-
<li>
|
|
27
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" data-sort="most_votes" role="menuitem">
|
|
28
|
-
<span class="flex-grow-1">[[topic:most-votes]]</span>
|
|
29
|
-
<i class="flex-shrink-0 fa fa-fw text-secondary"></i>
|
|
30
|
-
</a>
|
|
31
|
-
</li>
|
|
32
|
-
<li>
|
|
33
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="#" data-sort="most_views" role="menuitem">
|
|
34
|
-
<span class="flex-grow-1">[[topic:most-views]]</span>
|
|
35
|
-
<i class="flex-shrink-0 fa fa-fw text-secondary"></i>
|
|
36
|
-
</a>
|
|
37
|
-
</li>
|
|
38
|
-
</ul>
|
|
39
|
-
</div>
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
{{{ if showTopicTools }}}
|
|
2
|
-
<div class="btn-group thread-tools bottom-sheet">
|
|
3
|
-
<button class="btn-ghost-sm ff-secondary d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" type="button" aria-haspopup="true" aria-expanded="false">
|
|
4
|
-
<i class="fa fa-fw fa-gear text-primary"></i>
|
|
5
|
-
<span class="visible-md-inline visible-lg-inline fw-semibold">[[topic:thread-tools.title]]</span>
|
|
6
|
-
<span component="topic/selected/badge" class="badge rounded-pill bg-secondary"></span>
|
|
7
|
-
</button>
|
|
8
|
-
<ul class="dropdown-menu p-1 text-sm" role="menu">
|
|
9
|
-
<li>
|
|
10
|
-
<a component="topic/mark-unread-for-all" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem">
|
|
11
|
-
<i class="fa fa-fw fa-inbox text-secondary"></i> [[topic:thread-tools.markAsUnreadForAll]]
|
|
12
|
-
</a>
|
|
13
|
-
</li>
|
|
14
|
-
<li>
|
|
15
|
-
<a component="topic/pin" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem">
|
|
16
|
-
<i class="fa fa-fw fa-thumb-tack text-secondary"></i> [[topic:thread-tools.pin]]
|
|
17
|
-
</a>
|
|
18
|
-
</li>
|
|
19
|
-
<li>
|
|
20
|
-
<a component="topic/unpin" href="#" class="hidden dropdown-item rounded-1" role="menuitem">
|
|
21
|
-
<i class="fa fa-fw fa-thumb-tack fa-rotate-90 text-secondary"></i> [[topic:thread-tools.unpin]]
|
|
22
|
-
</a>
|
|
23
|
-
</li>
|
|
24
|
-
|
|
25
|
-
<li>
|
|
26
|
-
<a component="topic/lock" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem">
|
|
27
|
-
<i class="fa fa-fw fa-lock text-secondary"></i> [[topic:thread-tools.lock]]
|
|
28
|
-
</a>
|
|
29
|
-
</li>
|
|
30
|
-
<li>
|
|
31
|
-
<a component="topic/unlock" href="#" class="hidden dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem">
|
|
32
|
-
<i class="fa fa-fw fa-unlock text-secondary"></i> [[topic:thread-tools.unlock]]
|
|
33
|
-
</a>
|
|
34
|
-
</li>
|
|
35
|
-
|
|
36
|
-
<li class="dropdown-divider"></li>
|
|
37
|
-
|
|
38
|
-
<li>
|
|
39
|
-
<a component="topic/move" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem">
|
|
40
|
-
<i class="fa fa-fw fa-arrows text-secondary"></i> [[topic:thread-tools.move]]
|
|
41
|
-
</a>
|
|
42
|
-
</li>
|
|
43
|
-
{{{if template.category}}}
|
|
44
|
-
<li>
|
|
45
|
-
<a component="topic/move-all" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem">
|
|
46
|
-
<i class="fa fa-fw fa-arrows text-secondary"></i> [[topic:thread-tools.move-all]]
|
|
47
|
-
</a>
|
|
48
|
-
</li>
|
|
49
|
-
{{{end}}}
|
|
50
|
-
<li>
|
|
51
|
-
<a component="topic/merge" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem">
|
|
52
|
-
<i class="fa fa-fw fa-code-fork text-secondary"></i> [[topic:thread-tools.merge]]
|
|
53
|
-
</a>
|
|
54
|
-
</li>
|
|
55
|
-
|
|
56
|
-
<li>
|
|
57
|
-
<a component="topic/tag" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem">
|
|
58
|
-
<i class="fa fa-fw fa-tag text-secondary"></i> [[topic:thread-tools.tag]]
|
|
59
|
-
</a>
|
|
60
|
-
</li>
|
|
61
|
-
|
|
62
|
-
<li class="dropdown-divider"></li>
|
|
63
|
-
|
|
64
|
-
<li>
|
|
65
|
-
<a component="topic/delete" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem">
|
|
66
|
-
<i class="fa fa-fw fa-trash-o text-secondary"></i> [[topic:thread-tools.delete]]
|
|
67
|
-
</a>
|
|
68
|
-
</li>
|
|
69
|
-
<li>
|
|
70
|
-
<a component="topic/restore" href="#" class="hidden dropdown-item rounded-1" role="menuitem">
|
|
71
|
-
<i class="fa fa-fw fa-history text-secondary"></i> [[topic:thread-tools.restore]]
|
|
72
|
-
</a>
|
|
73
|
-
</li>
|
|
74
|
-
<li>
|
|
75
|
-
<a component="topic/purge" href="#" class="hidden dropdown-item rounded-1" role="menuitem">
|
|
76
|
-
<i class="fa fa-fw fa-eraser text-secondary"></i> [[topic:thread-tools.purge]]
|
|
77
|
-
</a>
|
|
78
|
-
</li>
|
|
79
|
-
|
|
80
|
-
{{{each thread_tools}}}
|
|
81
|
-
<li>
|
|
82
|
-
<a href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2 {thread_tools.class}" role="menuitem">
|
|
83
|
-
<i class="fa fa-fw {thread_tools.icon} text-secondary"></i>
|
|
84
|
-
{thread_tools.title}</a>
|
|
85
|
-
</li>
|
|
86
|
-
{{{end}}}
|
|
87
|
-
</ul>
|
|
88
|
-
</div>
|
|
89
|
-
{{{ end }}}
|