nodebb-theme-harmony 1.2.63 → 1.2.65
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
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
<div class="form-check form-switch">
|
|
12
12
|
<input type="checkbox" class="form-check-input" id="enableBreadcrumbs" name="enableBreadcrumbs" />
|
|
13
13
|
<label for="enableBreadcrumbs" class="form-check-label">[[themes/harmony:settings.enableBreadcrumbs]]</label>
|
|
14
|
+
<p class="form-text">[[themes/harmony:settings.enableBreadcrumbs.why]]</p>
|
|
14
15
|
</div>
|
|
15
16
|
<div class="form-check form-switch">
|
|
16
17
|
<input type="checkbox" class="form-check-input" id="centerHeaderElements" name="centerHeaderElements" />
|
|
@@ -1,10 +1,4 @@
|
|
|
1
1
|
<div class="account w-100 mx-auto">
|
|
2
|
-
<div data-widget-area="header">
|
|
3
|
-
{{{each widgets.header}}}
|
|
4
|
-
{{widgets.header.html}}
|
|
5
|
-
{{{end}}}
|
|
6
|
-
</div>
|
|
7
|
-
|
|
8
2
|
<div class="cover position-absolute start-0 top-0 w-100" component="account/cover" style="background-image: url({cover:url}); background-position: {cover:position};">
|
|
9
3
|
<div class="container">
|
|
10
4
|
{{{ if allowCoverPicture }}}
|
|
@@ -92,6 +86,12 @@
|
|
|
92
86
|
</div>
|
|
93
87
|
</div>
|
|
94
88
|
|
|
89
|
+
<div data-widget-area="header">
|
|
90
|
+
{{{each widgets.header}}}
|
|
91
|
+
{{widgets.header.html}}
|
|
92
|
+
{{{end}}}
|
|
93
|
+
</div>
|
|
94
|
+
|
|
95
95
|
<div class="d-flex flex-column flex-md-row">
|
|
96
96
|
<!-- IMPORT partials/account/sidebar-left.tpl -->
|
|
97
97
|
<div class="account-content flex-grow-1 ps-md-2 ps-lg-3 ps-xl-4" style="min-width: 0;">
|
package/templates/login.tpl
DELETED
|
@@ -1,101 +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
|
-
|
|
19
|
-
<div class="mb-2 d-flex flex-column gap-2">
|
|
20
|
-
<label for="password">[[user:password]]</label>
|
|
21
|
-
<div>
|
|
22
|
-
<input class="form-control" type="password" placeholder="[[user:password]]" name="password" id="password" autocomplete="current-password" autocapitalize="off" aria-required="true"/>
|
|
23
|
-
<p id="caps-lock-warning" class="text-danger hidden text-sm mb-0 form-text" aria-live="polite" role="alert" aria-atomic="true">
|
|
24
|
-
<i class="fa fa-exclamation-triangle"></i> [[login:caps-lock-enabled]]
|
|
25
|
-
</p>
|
|
26
|
-
</div>
|
|
27
|
-
{{{ if allowPasswordReset }}}
|
|
28
|
-
<div>
|
|
29
|
-
<a id="reset-link" class="text-sm text-reset text-decoration-underline" href="{config.relative_path}/reset">[[login:forgot-password]]</a>
|
|
30
|
-
</div>
|
|
31
|
-
{{{ end }}}
|
|
32
|
-
</div>
|
|
33
|
-
|
|
34
|
-
{{{ each loginFormEntry }}}
|
|
35
|
-
<div class="mb-2 loginFormEntry d-flex flex-column gap-2 {./styleName}">
|
|
36
|
-
<label for="{./inputId}">{./label}</label>
|
|
37
|
-
<div>{{./html}}</div>
|
|
38
|
-
</div>
|
|
39
|
-
{{{ end }}}
|
|
40
|
-
|
|
41
|
-
<input type="hidden" name="_csrf" value="{config.csrf_token}" />
|
|
42
|
-
<input type="hidden" name="noscript" id="noscript" value="true" />
|
|
43
|
-
|
|
44
|
-
<button class="btn btn-primary" id="login" type="submit">[[global:login]]</button>
|
|
45
|
-
|
|
46
|
-
<div class="form-check mb-2">
|
|
47
|
-
<input class="form-check-input" type="checkbox" name="remember" id="remember" checked />
|
|
48
|
-
<label class="form-check-label" for="remember">[[login:remember-me]]</label>
|
|
49
|
-
</div>
|
|
50
|
-
|
|
51
|
-
<div class="alert alert-danger {{{ if !error }}} hidden{{{ end }}}" id="login-error-notify" role="alert" aria-atomic="true">
|
|
52
|
-
<strong>[[login:failed-login-attempt]]</strong>
|
|
53
|
-
<p class="mb-0">{error}</p>
|
|
54
|
-
</div>
|
|
55
|
-
|
|
56
|
-
<hr/>
|
|
57
|
-
|
|
58
|
-
{{{ if allowRegistration }}}
|
|
59
|
-
<span class="text-sm">[[login:dont-have-account]]</span>
|
|
60
|
-
<a class="btn btn-outline-light text-body" href="{config.relative_path}/register">[[register:register]]</a>
|
|
61
|
-
{{{ end }}}
|
|
62
|
-
</form>
|
|
63
|
-
</div>
|
|
64
|
-
</div>
|
|
65
|
-
{{{ end }}}
|
|
66
|
-
|
|
67
|
-
{{{ if alternate_logins }}}
|
|
68
|
-
<div class="col-12 col-md-5 col-lg-3 px-md-0">
|
|
69
|
-
<div class="alt-login-block d-flex flex-column gap-2">
|
|
70
|
-
<label>[[login:alternative-logins]]</label>
|
|
71
|
-
<ul class="alt-logins list-unstyled">
|
|
72
|
-
{{{ each authentication }}}
|
|
73
|
-
<li class="{./name} mb-2">
|
|
74
|
-
<a class="btn btn-outline-light d-flex align-items-center" rel="nofollow noopener noreferrer" target="_top" href="{config.relative_path}{./url}">
|
|
75
|
-
{{{ if ./icons.svg }}}
|
|
76
|
-
{./icons.svg}
|
|
77
|
-
{{{ else }}}
|
|
78
|
-
<i class="flex-shrink-0 {./icons.normal}" style="color:{./color};"></i>
|
|
79
|
-
{{{ end }}}
|
|
80
|
-
{{{ if ./labels.login }}}
|
|
81
|
-
<div class="flex-grow-1 text-body text-sm">{./labels.login}</div>
|
|
82
|
-
{{{ end }}}
|
|
83
|
-
</a></li>
|
|
84
|
-
{{{ end }}}
|
|
85
|
-
</ul>
|
|
86
|
-
</div>
|
|
87
|
-
</div>
|
|
88
|
-
{{{ end }}}
|
|
89
|
-
</div>
|
|
90
|
-
</div>
|
|
91
|
-
<div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
|
|
92
|
-
{{{each widgets.sidebar}}}
|
|
93
|
-
{{widgets.sidebar.html}}
|
|
94
|
-
{{{end}}}
|
|
95
|
-
</div>
|
|
96
|
-
</div>
|
|
97
|
-
<div data-widget-area="footer">
|
|
98
|
-
{{{each widgets.footer}}}
|
|
99
|
-
{{widgets.footer.html}}
|
|
100
|
-
{{{end}}}
|
|
101
|
-
</div>
|
package/templates/register.tpl
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
<div data-widget-area="header">
|
|
2
|
-
{{{each widgets.header}}}
|
|
3
|
-
{{widgets.header.html}}
|
|
4
|
-
{{{end}}}
|
|
5
|
-
</div>
|
|
6
|
-
<div class="row register 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:register]]</h2>
|
|
9
|
-
<div class="row justify-content-center gap-5">
|
|
10
|
-
|
|
11
|
-
<div class="col-12 col-md-5 col-lg-3 px-md-0">
|
|
12
|
-
<div class="register-block">
|
|
13
|
-
<form component="register/local" class="d-flex flex-column gap-3" role="form" action="{config.relative_path}/register" method="post">
|
|
14
|
-
<div class="mb-2 d-flex flex-column gap-2">
|
|
15
|
-
<label for="username">[[register:username]]</label>
|
|
16
|
-
<div class="d-flex flex-column">
|
|
17
|
-
<input class="form-control" type="text" placeholder="[[register:username-placeholder]]" name="username" id="username" autocorrect="off" autocapitalize="off" autocomplete="nickname" aria-required="true" aria-describedby="username-notify"/>
|
|
18
|
-
<span class="register-feedback text-xs text-danger" id="username-notify" aria-live="polite"></span>
|
|
19
|
-
<span class="form-text text-xs">[[register:help.username-restrictions, {minimumUsernameLength}, {maximumUsernameLength}]]</span>
|
|
20
|
-
</div>
|
|
21
|
-
</div>
|
|
22
|
-
|
|
23
|
-
<div class="mb-2 d-flex flex-column gap-2">
|
|
24
|
-
<label for="password">[[register:password]]</label>
|
|
25
|
-
<div class="d-flex flex-column">
|
|
26
|
-
<input class="form-control" type="password" placeholder="[[register:password-placeholder]]" name="password" id="password" autocomplete="new-password" autocapitalize="off" aria-required="true" aria-describedby="password-notify"/>
|
|
27
|
-
<span class="register-feedback text-xs text-danger" id="password-notify" aria-live="polite"></span>
|
|
28
|
-
<span class="form-text text-xs">[[register:help.minimum-password-length, {minimumPasswordLength}]]</span>
|
|
29
|
-
<p id="caps-lock-warning" class="text-danger hidden">
|
|
30
|
-
<i class="fa fa-exclamation-triangle"></i> [[login:caps-lock-enabled]]
|
|
31
|
-
</p>
|
|
32
|
-
</div>
|
|
33
|
-
</div>
|
|
34
|
-
|
|
35
|
-
<div class="mb-2 d-flex flex-column gap-2">
|
|
36
|
-
<label for="password-confirm">[[register:confirm-password]]</label>
|
|
37
|
-
<div>
|
|
38
|
-
<input class="form-control" type="password" placeholder="[[register:confirm-password-placeholder]]" name="password-confirm" id="password-confirm" autocomplete="new-password" autocapitalize="off" aria-required="true" aria-describedby="password-confirm-notify"/>
|
|
39
|
-
<span class="register-feedback text-xs text-danger" id="password-confirm-notify" aria-live="polite"></span>
|
|
40
|
-
</div>
|
|
41
|
-
</div>
|
|
42
|
-
|
|
43
|
-
{{{ each regFormEntry }}}
|
|
44
|
-
<div class="mb-2 regFormEntry d-flex flex-column gap-2 {./styleName}">
|
|
45
|
-
<label for="{./inputId}">{./label}</label>
|
|
46
|
-
<div>{{./html}}</div>
|
|
47
|
-
</div>
|
|
48
|
-
{{{ end }}}
|
|
49
|
-
|
|
50
|
-
<button class="btn btn-primary" id="register" type="submit">[[register:register-now-button]]</button>
|
|
51
|
-
|
|
52
|
-
<div class="alert alert-danger{{{ if !error }}} hidden{{{ end }}}" id="register-error-notify" role="alert" aria-atomic="true">
|
|
53
|
-
<strong>[[error:registration-error]]</strong>
|
|
54
|
-
<p class="mb-0">{error}</p>
|
|
55
|
-
</div>
|
|
56
|
-
|
|
57
|
-
<hr/>
|
|
58
|
-
|
|
59
|
-
<span class="text-sm">[[register:already-have-account]]</span>
|
|
60
|
-
<a class="btn btn-outline-light text-body" href="{config.relative_path}/login">[[global:login]]</a>
|
|
61
|
-
|
|
62
|
-
<input id="token" type="hidden" name="token" value="" />
|
|
63
|
-
<input id="noscript" type="hidden" name="noscript" value="true" />
|
|
64
|
-
<input type="hidden" name="_csrf" value="{config.csrf_token}" />
|
|
65
|
-
</form>
|
|
66
|
-
</div>
|
|
67
|
-
</div>
|
|
68
|
-
|
|
69
|
-
{{{ if alternate_logins }}}
|
|
70
|
-
<div class="col-12 col-md-5 col-lg-3 px-md-0">
|
|
71
|
-
<div class="alt-register-block d-flex flex-column gap-2">
|
|
72
|
-
<label>[[register:alternative-registration]]</label>
|
|
73
|
-
<ul class="alt-logins list-unstyled">
|
|
74
|
-
{{{ each authentication }}}
|
|
75
|
-
<li class="{./name} mb-2">
|
|
76
|
-
<a class="btn btn-outline-light d-flex align-items-center" rel="nofollow noopener noreferrer" target="_top" href="{config.relative_path}{./url}">
|
|
77
|
-
{{{ if ./icons.svg }}}
|
|
78
|
-
{./icons.svg}
|
|
79
|
-
{{{ else }}}
|
|
80
|
-
<i class="flex-shrink-0 {./icons.normal}" style="color:{./color};"></i>
|
|
81
|
-
{{{ end }}}
|
|
82
|
-
{{{ if ./labels.register }}}
|
|
83
|
-
<div class="flex-grow-1 text-body text-sm">{./labels.register}</div>
|
|
84
|
-
{{{ end }}}
|
|
85
|
-
</a>
|
|
86
|
-
</li>
|
|
87
|
-
{{{ end }}}
|
|
88
|
-
</ul>
|
|
89
|
-
</div>
|
|
90
|
-
</div>
|
|
91
|
-
{{{ end }}}
|
|
92
|
-
</div>
|
|
93
|
-
</div>
|
|
94
|
-
<div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
|
|
95
|
-
{{{each widgets.sidebar}}}
|
|
96
|
-
{{widgets.sidebar.html}}
|
|
97
|
-
{{{end}}}
|
|
98
|
-
</div>
|
|
99
|
-
</div>
|
|
100
|
-
<div data-widget-area="footer">
|
|
101
|
-
{{{each widgets.footer}}}
|
|
102
|
-
{{widgets.footer.html}}
|
|
103
|
-
{{{end}}}
|
|
104
|
-
</div>
|