nodebb-theme-harmony 2.0.0-pre.9 → 2.0.0
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/README.md +3 -0
- package/library.js +1 -7
- package/package-lock.json +372 -402
- package/package.json +2 -2
- package/plugin.json +1 -2
- package/public/harmony.js +15 -15
- package/scss/common.scss +2 -8
- package/scss/harmony.scss +0 -1
- package/scss/header.scss +1 -1
- package/scss/mixins.scss +12 -5
- package/scss/modules/cover.scss +2 -4
- package/scss/modules/topics-list.scss +1 -1
- package/scss/overrides.scss +4 -0
- package/scss/sidebar.scss +18 -19
- package/scss/skins.scss +9 -0
- package/scss/topic.scss +4 -12
- 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 +30 -15
- package/templates/account/info.tpl +142 -73
- package/templates/account/posts.tpl +7 -7
- package/templates/account/profile.tpl +19 -22
- package/templates/account/read.tpl +1 -0
- package/templates/account/settings.tpl +5 -5
- package/templates/account/shares.tpl +20 -0
- package/templates/account/topics.tpl +6 -5
- package/templates/admin/plugins/harmony.tpl +1 -0
- package/templates/footer.tpl +1 -1
- package/templates/groups/list.tpl +9 -7
- package/templates/notifications.tpl +1 -1
- package/templates/partials/account/header.tpl +15 -15
- package/templates/partials/account/sidebar-left.tpl +30 -16
- package/templates/partials/breadcrumbs-json-ld.tpl +15 -25
- package/templates/partials/categories/item.tpl +8 -8
- package/templates/partials/categories/lastpost.tpl +1 -1
- package/templates/partials/category/subcategory.tpl +1 -1
- package/templates/partials/groups/list.tpl +1 -1
- package/templates/partials/groups/memberlist.tpl +1 -1
- package/templates/partials/groups/sidebar-left.tpl +8 -8
- package/templates/partials/header/brand.tpl +3 -1
- 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 +5 -5
- package/templates/partials/search-filters.tpl +1 -1
- package/templates/partials/search-results.tpl +1 -1
- package/templates/partials/sidebar/chats.tpl +1 -1
- package/templates/partials/sidebar/notifications.tpl +1 -1
- package/templates/partials/sidebar/search.tpl +2 -2
- package/templates/partials/sidebar-left.tpl +2 -5
- package/templates/partials/tags_list.tpl +6 -4
- package/templates/partials/topic/event.tpl +1 -1
- package/templates/partials/topic/navigator.tpl +2 -2
- package/templates/partials/topic/post-menu-list.tpl +20 -4
- package/templates/partials/topic/post-menu.tpl +3 -29
- package/templates/partials/topic/post.tpl +108 -101
- 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/thumbs.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 +12 -4
- package/templates/partials/users/item.tpl +33 -31
- package/templates/partials/users_list_menu.tpl +5 -5
- package/templates/post-queue.tpl +6 -2
- package/templates/recent.tpl +7 -0
- package/templates/topic.tpl +81 -88
- package/templates/users.tpl +2 -2
- package/templates/world.tpl +32 -1
- package/scss/modules/bottom-sheet.scss +0 -52
- package/templates/flags/detail.tpl +0 -179
- package/templates/flags/list.tpl +0 -6
- package/templates/login.tpl +0 -102
- package/templates/partials/category/filter-dropdown-content.tpl +0 -41
- package/templates/partials/category/selector-dropdown-content.tpl +0 -39
- 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/flags/bulk-actions.tpl +0 -9
- package/templates/partials/flags/filters.tpl +0 -189
- package/templates/partials/flags/results.tpl +0 -38
- package/templates/partials/groups/filter-dropdown-content.tpl +0 -25
- package/templates/partials/tags/filter-dropdown-content.tpl +0 -38
- package/templates/partials/tags/watch.tpl +0 -42
- package/templates/partials/users/filter-dropdown-content.tpl +0 -23
- package/templates/register.tpl +0 -104
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
<!-- IMPORT partials/breadcrumbs.tpl -->
|
|
2
|
-
|
|
3
|
-
<div class="d-flex flex-column flex-md-row">
|
|
4
|
-
<div class="flex-shrink-0 d-flex flex-column gap-3 border-end-md text-sm mb-3 pe-4" style="flex-basis: 240px !important;">
|
|
5
|
-
<div class="d-grid gap-1">
|
|
6
|
-
<a class="btn btn-ghost ff-secondary border btn-sm justify-content-start" href="{config.relative_path}/{type_path}/{targetId}">
|
|
7
|
-
<i class="fa fa-fw fa-external-link text-primary"></i>
|
|
8
|
-
[[flags:go-to-target]]
|
|
9
|
-
</a>
|
|
10
|
-
|
|
11
|
-
{{{ if target.uid }}}
|
|
12
|
-
<div class="btn-group dropend" data-uid="{target.uid}">
|
|
13
|
-
<button type="button" class="btn btn-ghost ff-secondary border btn-sm justify-content-start dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
14
|
-
<i class="fa fa-fw fa-street-view text-primary"></i>
|
|
15
|
-
[[flags:flagged-user]]
|
|
16
|
-
<i class="fa fa-chevron-right ms-auto text-secondary"></i>
|
|
17
|
-
</button>
|
|
18
|
-
<ul class="dropdown-menu p-1 text-sm" role="menu">
|
|
19
|
-
<li><a class="dropdown-item rounded-1" href="{config.relative_path}/uid/{target.uid}" role="menuitem">[[flags:view-profile]]</a></li>
|
|
20
|
-
{{{ if !config.disableChat }}}
|
|
21
|
-
<li><a class="dropdown-item rounded-1" href="#" data-action="chat" role="menuitem">[[flags:start-new-chat]]</a></li>
|
|
22
|
-
{{{ end }}}
|
|
23
|
-
<li class="dropdown-divider"></li>
|
|
24
|
-
{{{ if privileges.ban }}}
|
|
25
|
-
<li class="{{{ if target.user.banned }}}hidden{{{ end }}}"><a class="dropdown-item rounded-1" href="#" data-action="ban" role="menuitem">[[user:ban-account]]</a></li>
|
|
26
|
-
<li class="{{{ if !target.user.banned }}}hidden{{{ end }}}"><a class="dropdown-item rounded-1" href="#" data-action="unban" role="menuitem">[[user:unban-account]]</a></li>
|
|
27
|
-
{{{ end }}}
|
|
28
|
-
{{{ if privileges.mute}}}
|
|
29
|
-
<li class="{{{ if target.user.muted }}}hidden{{{ end }}}"><a class="dropdown-item rounded-1" href="#" data-action="mute" role="menuitem">[[user:mute-account]]</a></li>
|
|
30
|
-
<li class="{{{ if !target.user.muted }}}hidden{{{ end }}}"><a class="dropdown-item rounded-1" href="#" data-action="unmute" role="menuitem">[[user:unmute-account]]</a></li>
|
|
31
|
-
{{{ end }}}
|
|
32
|
-
{{{ if privileges.admin:users }}}
|
|
33
|
-
<li><a class="dropdown-item rounded-1" href="#" data-action="delete-account" role="menuitem">[[user:delete-account-as-admin]]</a></li>
|
|
34
|
-
<li><a class="dropdown-item rounded-1" href="#" data-action="delete-content" role="menuitem">[[user:delete-content]]</a></li>
|
|
35
|
-
<li><a class="dropdown-item rounded-1" href="#" data-action="delete-all" role="menuitem">[[user:delete-all]]</a></li>
|
|
36
|
-
{{{ end }}}
|
|
37
|
-
</ul>
|
|
38
|
-
</div>
|
|
39
|
-
{{{ end }}}
|
|
40
|
-
|
|
41
|
-
<a class="btn btn-ghost ff-secondary border btn-sm justify-content-start" href="#" data-action="assign">
|
|
42
|
-
<i class="fa fa-fw fa-id-card-o text-primary"></i>
|
|
43
|
-
[[flags:assign-to-me]]
|
|
44
|
-
</a>
|
|
45
|
-
|
|
46
|
-
{{{ if type_bool.post }}}
|
|
47
|
-
{{{ if !target.deleted}}}
|
|
48
|
-
<a class="d-flex gap-2 align-items-center btn btn-sm btn-outline-danger border border-secondary-subtle text-start" href="#" data-action="delete-post"><i class="fa fa-fw fa-trash"></i> [[flags:delete-post]]</a>
|
|
49
|
-
{{{ else }}}
|
|
50
|
-
<a class="d-flex gap-2 align-items-center btn btn-sm btn-danger border border-secondary-subtle text-start" href="#" data-action="purge-post"><i class="fa fa-fw fa-trash"></i> [[flags:purge-post]]</a>
|
|
51
|
-
<a class="d-flex gap-2 align-items-center btn btn-sm btn-outline-success border border-secondary-subtle text-start" href="#" data-action="restore-post"><i class="fa fa-fw fa-reply"></i><i class="fa fa-trash"></i> [[flags:restore-post]]</a>
|
|
52
|
-
{{{ end }}}
|
|
53
|
-
{{{ end }}}
|
|
54
|
-
</div>
|
|
55
|
-
|
|
56
|
-
<form class="d-flex flex-column gap-3" id="attributes">
|
|
57
|
-
<div>
|
|
58
|
-
<label class="text-muted fw-semibold" for="state">[[flags:state]]</label>
|
|
59
|
-
<select class="form-select form-select-sm" id="state" name="state" disabled>
|
|
60
|
-
<option value="open">[[flags:state-open]]</option>
|
|
61
|
-
<option value="wip">[[flags:state-wip]]</option>
|
|
62
|
-
<option value="resolved">[[flags:state-resolved]]</option>
|
|
63
|
-
<option value="rejected">[[flags:state-rejected]]</option>
|
|
64
|
-
</select>
|
|
65
|
-
</div>
|
|
66
|
-
<div>
|
|
67
|
-
<label class="text-muted fw-semibold" for="assignee">[[flags:assignee]]</label>
|
|
68
|
-
<select class="form-control form-control-sm" id="assignee" name="assignee" disabled>
|
|
69
|
-
<option value="">[[flags:no-assignee]]</option>
|
|
70
|
-
{{{each assignees}}}
|
|
71
|
-
<option value="{../uid}">{../username}</option>
|
|
72
|
-
{{{end}}}
|
|
73
|
-
</select>
|
|
74
|
-
</div>
|
|
75
|
-
<div class="d-grid">
|
|
76
|
-
<button type="button" class="btn btn-primary" data-action="update">[[flags:update]]</button>
|
|
77
|
-
</div>
|
|
78
|
-
</form>
|
|
79
|
-
|
|
80
|
-
<div class="overflow-auto" component="flag/history" style="max-height: 30rem;">
|
|
81
|
-
<h2 class="h6 fw-bold">[[flags:history]]</h2>
|
|
82
|
-
{{{ if !history.length }}}
|
|
83
|
-
<div class="alert alert-success text-center">[[flags:no-history]]</div>
|
|
84
|
-
{{{ end }}}
|
|
85
|
-
{{{ each history }}}
|
|
86
|
-
<div class="d-flex flex-column gap-1">
|
|
87
|
-
<div class="d-flex gap-2 align-items-center">
|
|
88
|
-
<a class="d-flex text-decoration-none" href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(./user, "16px", true)}</a>
|
|
89
|
-
<a href="{config.relative_path}/user/{./user.userslug}">{./user.username}</a>
|
|
90
|
-
<span class="timeago text-muted" title="{./datetimeISO}"></span>
|
|
91
|
-
</div>
|
|
92
|
-
<div>
|
|
93
|
-
<ul class="list-unstyled">
|
|
94
|
-
{{{ each ./fields }}}
|
|
95
|
-
<li>
|
|
96
|
-
[[flags:{@key}]]{{{ if @value }}} → <span class="fw-semibold">{@value}</span>{{{ end }}}
|
|
97
|
-
</li>
|
|
98
|
-
{{{ end }}}
|
|
99
|
-
{{{ each ./meta }}}
|
|
100
|
-
<li>
|
|
101
|
-
{{./key}}{{{ if ./value }}} → <span class="fw-semibold">{./value}</span>{{{ end }}}
|
|
102
|
-
</li>
|
|
103
|
-
{{{ end }}}
|
|
104
|
-
</ul>
|
|
105
|
-
</div>
|
|
106
|
-
</div>
|
|
107
|
-
{{{ end }}}
|
|
108
|
-
</div>
|
|
109
|
-
</div>
|
|
110
|
-
<div class="flex-grow-1 ps-md-2 ps-lg-5" style="min-width:0;">
|
|
111
|
-
<div class="d-flex flex-column gap-4">
|
|
112
|
-
<h2 class="h6 fw-bold">
|
|
113
|
-
{target_readable}
|
|
114
|
-
</h2>
|
|
115
|
-
<div component="flag/content" class="d-flex flex-column gap-1 pb-3 border-bottom">
|
|
116
|
-
{{{ if type_bool.post }}}
|
|
117
|
-
<div class="d-flex gap-2 align-items-center">
|
|
118
|
-
<a class="d-flex text-decoration-none" href="{config.relative_path}/user/{target.user.userslug}">{buildAvatar(target.user, "16px", true)}</a>
|
|
119
|
-
<a href="{config.relative_path}/user/{target.user.userslug}">{target.user.username}</a>
|
|
120
|
-
<span class="timeago text-muted" title="{target.timestampISO}"></span>
|
|
121
|
-
</div>
|
|
122
|
-
<blockquote>{target.content}</blockquote>
|
|
123
|
-
{{{ end }}}
|
|
124
|
-
|
|
125
|
-
{{{ if type_bool.user }}}
|
|
126
|
-
<div class="d-flex gap-2">
|
|
127
|
-
<a href="{config.relative_path}/user/{./target.userslug}">{buildAvatar(target, "16px", true)}</a>
|
|
128
|
-
<a href="{config.relative_path}/user/{./target.userslug}">{target.username}</a>
|
|
129
|
-
</div>
|
|
130
|
-
<blockquote>{{{ if target.aboutme }}}{target.aboutme}{{{ else }}}<em>[[flags:target-aboutme-empty]]</em>{{{ end }}}</blockquote>
|
|
131
|
-
{{{ end }}}
|
|
132
|
-
|
|
133
|
-
{{{ if type_bool.empty }}}
|
|
134
|
-
<div class="alert alert-warning" role="alert">[[flags:target-purged]]</div>
|
|
135
|
-
{{{ end }}}
|
|
136
|
-
</div>
|
|
137
|
-
<div class="flag/reports" class="pb-4 border-bottom">
|
|
138
|
-
<h2 class="h6 fw-bold">[[flags:reports]]</h2>
|
|
139
|
-
<ul class="list-unstyled mt-4">
|
|
140
|
-
{{{ each reports }}}
|
|
141
|
-
<li class="d-flex flex-column gap-1" component="flag/report" data-timestamp="{./timestamp}">
|
|
142
|
-
<div class="d-flex gap-2 align-items-center">
|
|
143
|
-
<a class="d-flex text-decoration-none" href="{config.relative_path}/user/{./reporter.userslug}">{buildAvatar(./reporter, "16px", true)}</a>
|
|
144
|
-
<a href="{config.relative_path}/user/{./reporter.userslug}">{./reporter.username}</a>
|
|
145
|
-
<span class="timeago text-muted" title="{./timestampISO}"></span>
|
|
146
|
-
</div>
|
|
147
|
-
<p>{./value}</p>
|
|
148
|
-
</li>
|
|
149
|
-
{{{ end }}}
|
|
150
|
-
</ul>
|
|
151
|
-
</div>
|
|
152
|
-
<div class="pb-4 border-bottom">
|
|
153
|
-
<div class="d-flex align-items-center">
|
|
154
|
-
<h2 class="h6 fw-bold me-auto mb-0">[[flags:notes]]</h2>
|
|
155
|
-
<button class="btn btn-ghost ff-secondary border" data-action="addEditNote">[[flags:add-note]]</button>
|
|
156
|
-
</div>
|
|
157
|
-
<ul component="flag/notes" class="list-unstyled mt-4">
|
|
158
|
-
{{{ if !notes.length }}}
|
|
159
|
-
<em>[[flags:no-notes]]</em>
|
|
160
|
-
{{{ end }}}
|
|
161
|
-
{{{ each notes }}}
|
|
162
|
-
<li class="d-flex flex-column gap-1" component="flag/note" data-datetime="{./datetime}" data-index="{@index}">
|
|
163
|
-
<div class="d-flex gap-2 align-items-center">
|
|
164
|
-
<a href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(./user, "16px", true)}</a>
|
|
165
|
-
<a href="{config.relative_path}/user/{./user.userslug}">{./user.username}</a>
|
|
166
|
-
<span class="timeago text-muted" title="{./datetimeISO}"></span>
|
|
167
|
-
<div class=" ms-auto flex-shrink-0">
|
|
168
|
-
<a href="#" class="btn btn-sm btn-link" data-action="addEditNote"><i class="fa fa-pencil"></i></a>
|
|
169
|
-
<a href="#" class="btn btn-sm btn-link" data-action="delete-note"><i class="fa fa-trash text-danger"></i></a>
|
|
170
|
-
</div>
|
|
171
|
-
</div>
|
|
172
|
-
<p>{./content}</p>
|
|
173
|
-
</li>
|
|
174
|
-
{{{ end }}}
|
|
175
|
-
</ul>
|
|
176
|
-
</div>
|
|
177
|
-
</div>
|
|
178
|
-
</div>
|
|
179
|
-
</div>
|
package/templates/flags/list.tpl
DELETED
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,41 +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
|
-
|
|
12
|
-
<div component="category-selector-search" class="hidden position-absolute">
|
|
13
|
-
<input type="text" class="form-control form-control-sm" placeholder="[[search:type-to-search]]" autocomplete="off">
|
|
14
|
-
</div>
|
|
15
|
-
|
|
16
|
-
<div class="dropdown-menu p-1">
|
|
17
|
-
<ul component="category/list" class="list-unstyled mb-0 text-sm category-dropdown-menu ghost-scrollbar" role="menu">
|
|
18
|
-
<li role="presentation" class="category" data-cid="all">
|
|
19
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem" href="{{{ if allCategoriesUrl }}}{config.relative_path}/{allCategoriesUrl}{{{ else }}}#{{{ end }}}">
|
|
20
|
-
<div class="flex-grow-1">[[unread:all-categories]]</div>
|
|
21
|
-
<i component="category/select/icon" class="flex-shrink-0 fa fa-fw fa-check {{{if selectedCategory}}}invisible{{{end}}}"></i>
|
|
22
|
-
</a>
|
|
23
|
-
</li>
|
|
24
|
-
{{{each categoryItems}}}
|
|
25
|
-
<li role="presentation" class="category {{{ if ./disabledClass }}}disabled{{{ end }}}" data-cid="{./cid}" data-parent-cid="{./parentCid}" data-name="{./name}">
|
|
26
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2 {{{ if ./disabledClass }}}disabled{{{ end }}}" role="menuitem" href="#">
|
|
27
|
-
{./level}
|
|
28
|
-
<span component="category-markup" class="flex-grow-1" style="{{{ if ./match }}}font-weight: bold;{{{end}}}">
|
|
29
|
-
<div class="category-item d-inline-flex align-items-center gap-1">
|
|
30
|
-
{{{ if ./icon }}}
|
|
31
|
-
{buildCategoryIcon(@value, "24px", "rounded-circle")}
|
|
32
|
-
{{{ end }}}
|
|
33
|
-
{./name}
|
|
34
|
-
</div>
|
|
35
|
-
</span>
|
|
36
|
-
<i component="category/select/icon" class="flex-shrink-0 fa fa-fw fa-check {{{ if !./selected }}}invisible{{{ end }}}"></i>
|
|
37
|
-
</a>
|
|
38
|
-
</li>
|
|
39
|
-
{{{end}}}
|
|
40
|
-
</ul>
|
|
41
|
-
</div>
|
|
@@ -1,39 +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
|
-
|
|
15
|
-
<div component="category-selector-search" class="hidden position-absolute">
|
|
16
|
-
<input type="text" class="form-control form-control-sm" placeholder="[[search:type-to-search]]" autocomplete="off">
|
|
17
|
-
</div>
|
|
18
|
-
|
|
19
|
-
<div class="dropdown-menu p-1">
|
|
20
|
-
<ul component="category/list" class="list-unstyled mb-0 text-sm category-dropdown-menu ghost-scrollbar" role="menu">
|
|
21
|
-
<li component="category/no-matches" role="presentation" class="category hidden">
|
|
22
|
-
<a class="dropdown-item rounded-1" role="menuitem">[[search:no-matches]]</a>
|
|
23
|
-
</li>
|
|
24
|
-
{{{ each categoryItems }}}
|
|
25
|
-
<li role="presentation" class="category {{{ if ./disabledClass }}}disabled {{{ end }}}" data-cid="{./cid}" data-name="{./name}" data-parent-cid="{./parentCid}">
|
|
26
|
-
<a class="dropdown-item rounded-1 {{{ if ./disabledClass }}}disabled{{{ end }}}" role="menuitem" href="#">{./level}
|
|
27
|
-
<span component="category-markup" style="{{{ if ./match }}}font-weight: bold;{{{end}}}">
|
|
28
|
-
<div class="category-item d-inline-flex align-items-center gap-1">
|
|
29
|
-
{{{ if ./icon }}}
|
|
30
|
-
{buildCategoryIcon(@value, "24px", "rounded-circle")}
|
|
31
|
-
{{{ end }}}
|
|
32
|
-
{./name}
|
|
33
|
-
</div>
|
|
34
|
-
</span>
|
|
35
|
-
</a>
|
|
36
|
-
</li>
|
|
37
|
-
{{{ end }}}
|
|
38
|
-
</ul>
|
|
39
|
-
</div>
|
|
@@ -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 }}}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
{{{ if config.loggedIn }}}
|
|
2
|
-
<div class="btn-group bottom-sheet" component="topic/watch">
|
|
3
|
-
<button class="btn-ghost-sm ff-secondary dropdown-toggle" data-bs-toggle="dropdown" type="button" aria-haspopup="true" aria-expanded="false">
|
|
4
|
-
<span component="category/watching/menu" class="d-flex gap-2 align-items-center {{{ if !./isWatched }}} hidden{{{ end }}}"><i class="fa fa-fw fa-bell-o text-primary"></i><span class="visible-md-inline visible-lg-inline fw-semibold">[[category:watching]]</span></span>
|
|
5
|
-
|
|
6
|
-
<span component="category/tracking/menu" class="d-flex gap-2 align-items-center {{{ if !./isTracked }}} hidden{{{ end }}}"><i class="fa fa-fw fa-inbox text-primary"></i><span class="visible-md-inline visible-lg-inline fw-semibold">[[category:tracking]]</span></span>
|
|
7
|
-
|
|
8
|
-
<span component="category/notwatching/menu" class="d-flex gap-2 align-items-center {{{ if !./isNotWatched }}} hidden{{{ end }}}"><i class="fa fa-fw fa-clock-o text-primary"></i><span class="visible-md-inline visible-lg-inline fw-semibold">[[category:not-watching]]</span></span>
|
|
9
|
-
|
|
10
|
-
<span component="category/ignoring/menu" class="d-flex gap-2 align-items-center {{{ if !./isIgnored }}} hidden{{{ end }}}"><i class="fa fa-fw fa-eye-slash text-primary"></i><span class="visible-md-inline visible-lg-inline fw-semibold">[[category:ignoring]]</span></span>
|
|
11
|
-
</button>
|
|
12
|
-
|
|
13
|
-
<ul class="dropdown-menu p-1 text-sm {{{ if template.account/categories }}}dropdown-menu-end{{{ end }}}" role="menu">
|
|
14
|
-
<li>
|
|
15
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2 p-2" href="#" component="category/watching" data-state="watching" role="menuitem">
|
|
16
|
-
<div class="flex-grow-1 d-flex flex-column">
|
|
17
|
-
<span class="d-flex align-items-center gap-2">
|
|
18
|
-
<i class="flex-shrink-0 fa fa-fw fa-bell-o text-secondary"></i>
|
|
19
|
-
<span class="flex-grow-1 fw-semibold">[[category:watching]]</span>
|
|
20
|
-
</span>
|
|
21
|
-
<div class="help-text text-secondary text-xs">[[category:watching.description]]</div>
|
|
22
|
-
</div>
|
|
23
|
-
<span class="flex-shrink-0"><i component="category/watching/check" class="fa fa-fw {{{ if ./isWatched }}}fa-check{{{ end }}}"></i></span>
|
|
24
|
-
</a>
|
|
25
|
-
</li>
|
|
26
|
-
|
|
27
|
-
<li>
|
|
28
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2 p-2" href="#" component="category/tracking" data-state="tracking" role="menuitem">
|
|
29
|
-
<div class="flex-grow-1 d-flex flex-column">
|
|
30
|
-
<span class="d-flex align-items-center gap-2">
|
|
31
|
-
<i class="flex-shrink-0 fa fa-fw fa-inbox text-secondary"></i>
|
|
32
|
-
<span class="flex-grow-1 fw-semibold">[[category:tracking]]</span>
|
|
33
|
-
</span>
|
|
34
|
-
<div class="help-text text-secondary text-xs">[[category:tracking.description]]</div>
|
|
35
|
-
</div>
|
|
36
|
-
<span class="flex-shrink-0"><i component="category/tracking/check" class="fa fa-fw {{{ if ./isTracked }}}fa-check{{{ end }}}"></i></span>
|
|
37
|
-
</a>
|
|
38
|
-
</li>
|
|
39
|
-
|
|
40
|
-
<li>
|
|
41
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2 p-2" href="#" component="category/notwatching" data-state="notwatching" role="menuitem">
|
|
42
|
-
<div class="flex-grow-1 d-flex flex-column">
|
|
43
|
-
<span class="d-flex align-items-center gap-2">
|
|
44
|
-
<i class="flex-shrink-0 fa fa-fw fa-clock-o text-secondary"></i>
|
|
45
|
-
<span class="flex-grow-1 fw-semibold">[[category:not-watching]]</span>
|
|
46
|
-
</span>
|
|
47
|
-
<div class="help-text text-secondary text-xs">[[category:not-watching.description]]</div>
|
|
48
|
-
</div>
|
|
49
|
-
<span class="flex-shrink-0"><i component="category/notwatching/check" class="fa fa-fw {{{ if ./isNotWatched }}}fa-check{{{ end }}}"></i></span>
|
|
50
|
-
</a>
|
|
51
|
-
</li>
|
|
52
|
-
|
|
53
|
-
<li>
|
|
54
|
-
<a class="dropdown-item rounded-1 d-flex align-items-center gap-2 p-2" href="#" component="category/ignoring" data-state="ignoring" role="menuitem">
|
|
55
|
-
<div class="flex-grow-1 d-flex flex-column">
|
|
56
|
-
<span class="d-flex align-items-center gap-2">
|
|
57
|
-
<i class="flex-shrink-0 fa fa-fw fa-eye-slash text-secondary"></i>
|
|
58
|
-
<span class="flex-grow-1 fw-semibold">[[category:ignoring]]</span>
|
|
59
|
-
</span>
|
|
60
|
-
<div class="help-text text-secondary text-xs">[[category:ignoring.description]]</div>
|
|
61
|
-
</div>
|
|
62
|
-
<span class="flex-shrink-0"><i component="category/ignoring/check" class="fa fa-fw {{{ if ./isIgnored }}}fa-check{{{ end }}}"></i></span>
|
|
63
|
-
</a>
|
|
64
|
-
</li>
|
|
65
|
-
</ul>
|
|
66
|
-
</div>
|
|
67
|
-
{{{ end }}}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
<div class="dropdown" component="flags/bulk-actions">
|
|
2
|
-
<button class="filter-btn btn btn-light btn-sm border" data-bs-toggle="dropdown" autocomplete="off" aria-haspopup="true" aria-expanded="false" disabled="disabled">
|
|
3
|
-
<span class="filter-label">[[flags:bulk-actions]]</span>
|
|
4
|
-
</button>
|
|
5
|
-
<ul class="dropdown-menu dropdown-menu-end p-1 text-sm" role="menu">
|
|
6
|
-
<li><a href="#" class="dropdown-item rounded-1" data-action="bulk-assign" role="menuitem">[[flags:assign-to-me]]</a></li>
|
|
7
|
-
<li><a href="#" class="dropdown-item rounded-1" data-action="bulk-mark-resolved" role="menuitem">[[flags:bulk-resolve]]</a></li>
|
|
8
|
-
</ul>
|
|
9
|
-
</div>
|