nodebb-theme-harmony 2.0.1 → 2.0.2

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.
Files changed (144) hide show
  1. package/.eslintrc +3 -3
  2. package/README.md +22 -22
  3. package/lib/controllers.js +29 -29
  4. package/library.js +183 -183
  5. package/package.json +48 -48
  6. package/plugin.json +24 -24
  7. package/public/.eslintrc +3 -3
  8. package/public/admin.js +15 -15
  9. package/public/harmony.js +287 -287
  10. package/public/settings.js +31 -31
  11. package/renovate.json +6 -6
  12. package/scss/account.scss +27 -27
  13. package/scss/category.scss +3 -3
  14. package/scss/chats.scss +11 -11
  15. package/scss/common.scss +122 -122
  16. package/scss/fonts.scss +19 -19
  17. package/scss/groups.scss +22 -22
  18. package/scss/harmony.scss +24 -24
  19. package/scss/header.scss +15 -15
  20. package/scss/mixins.scss +183 -183
  21. package/scss/modals.scss +6 -6
  22. package/scss/modules/breadcrumbs.scss +15 -15
  23. package/scss/modules/cover.scss +102 -102
  24. package/scss/modules/filters.scss +7 -7
  25. package/scss/modules/nprogress.scss +80 -80
  26. package/scss/modules/paginator.scss +23 -23
  27. package/scss/modules/tags.scss +5 -5
  28. package/scss/modules/topic-navigator.scss +52 -52
  29. package/scss/modules/topics-list.scss +40 -40
  30. package/scss/modules/user-menu.scss +10 -10
  31. package/scss/overrides.scss +65 -65
  32. package/scss/sidebar.scss +188 -188
  33. package/scss/skins.scss +58 -58
  34. package/scss/status.scss +24 -24
  35. package/scss/topic.scss +130 -130
  36. package/templates/account/blocks.tpl +51 -51
  37. package/templates/account/categories.tpl +63 -63
  38. package/templates/account/consent.tpl +73 -73
  39. package/templates/account/edit/password.tpl +34 -34
  40. package/templates/account/edit/username.tpl +29 -29
  41. package/templates/account/edit.tpl +137 -137
  42. package/templates/account/followers.tpl +14 -14
  43. package/templates/account/following.tpl +15 -15
  44. package/templates/account/groups.tpl +15 -15
  45. package/templates/account/info.tpl +270 -270
  46. package/templates/account/posts.tpl +35 -35
  47. package/templates/account/profile.tpl +92 -92
  48. package/templates/account/sessions.tpl +8 -8
  49. package/templates/account/settings.tpl +236 -236
  50. package/templates/account/shares.tpl +19 -19
  51. package/templates/account/tags.tpl +12 -12
  52. package/templates/account/theme.tpl +63 -63
  53. package/templates/account/topics.tpl +44 -44
  54. package/templates/account/uploads.tpl +37 -37
  55. package/templates/admin/plugins/harmony.tpl +57 -57
  56. package/templates/categories.tpl +29 -29
  57. package/templates/category.tpl +72 -72
  58. package/templates/footer.tpl +17 -17
  59. package/templates/groups/details.tpl +86 -86
  60. package/templates/groups/list.tpl +58 -58
  61. package/templates/groups/members.tpl +9 -9
  62. package/templates/header.tpl +45 -45
  63. package/templates/notifications.tpl +32 -32
  64. package/templates/partials/account/admin-menu.tpl +36 -36
  65. package/templates/partials/account/category-item.tpl +22 -22
  66. package/templates/partials/account/footer.tpl +2 -2
  67. package/templates/partials/account/header.tpl +98 -98
  68. package/templates/partials/account/session-list.tpl +18 -18
  69. package/templates/partials/account/sidebar-left.tpl +116 -116
  70. package/templates/partials/breadcrumbs-json-ld.tpl +15 -15
  71. package/templates/partials/breadcrumbs.tpl +12 -12
  72. package/templates/partials/buttons/newTopic.tpl +22 -22
  73. package/templates/partials/categories/item.tpl +56 -56
  74. package/templates/partials/categories/lastpost.tpl +24 -24
  75. package/templates/partials/categories/link.tpl +4 -4
  76. package/templates/partials/category/subcategory.tpl +18 -18
  77. package/templates/partials/category/tags.tpl +3 -3
  78. package/templates/partials/cookie-consent.tpl +6 -6
  79. package/templates/partials/groups/admin.tpl +95 -95
  80. package/templates/partials/groups/invited.tpl +32 -32
  81. package/templates/partials/groups/list.tpl +15 -15
  82. package/templates/partials/groups/memberlist.tpl +46 -46
  83. package/templates/partials/groups/pending.tpl +29 -29
  84. package/templates/partials/groups/sidebar-left.tpl +27 -27
  85. package/templates/partials/header/brand.tpl +27 -27
  86. package/templates/partials/mobile-footer.tpl +95 -95
  87. package/templates/partials/notifications_list.tpl +44 -44
  88. package/templates/partials/paginator.tpl +46 -46
  89. package/templates/partials/post_bar.tpl +27 -27
  90. package/templates/partials/posts_list.tpl +7 -7
  91. package/templates/partials/posts_list_item.tpl +19 -19
  92. package/templates/partials/quick-search-results.tpl +46 -46
  93. package/templates/partials/search-filters.tpl +183 -183
  94. package/templates/partials/search-results.tpl +54 -54
  95. package/templates/partials/sidebar/chats.tpl +45 -45
  96. package/templates/partials/sidebar/drafts.tpl +63 -63
  97. package/templates/partials/sidebar/logged-in-menu.tpl +22 -22
  98. package/templates/partials/sidebar/logged-out-menu.tpl +44 -44
  99. package/templates/partials/sidebar/notifications.tpl +49 -49
  100. package/templates/partials/sidebar/search-mobile.tpl +28 -28
  101. package/templates/partials/sidebar/search.tpl +30 -30
  102. package/templates/partials/sidebar/user-menu.tpl +103 -103
  103. package/templates/partials/sidebar-left.tpl +39 -39
  104. package/templates/partials/sidebar-right.tpl +16 -16
  105. package/templates/partials/skin-switcher.tpl +50 -50
  106. package/templates/partials/tags_list.tpl +7 -7
  107. package/templates/partials/toast.tpl +19 -19
  108. package/templates/partials/topic/event.tpl +12 -12
  109. package/templates/partials/topic/navigation-post.tpl +9 -9
  110. package/templates/partials/topic/navigator-mobile.tpl +61 -61
  111. package/templates/partials/topic/navigator.tpl +26 -26
  112. package/templates/partials/topic/necro-post.tpl +5 -5
  113. package/templates/partials/topic/post-menu-list.tpl +156 -156
  114. package/templates/partials/topic/post-menu.tpl +4 -4
  115. package/templates/partials/topic/post-placeholder.tpl +14 -14
  116. package/templates/partials/topic/post.tpl +146 -146
  117. package/templates/partials/topic/quickreply.tpl +28 -28
  118. package/templates/partials/topic/reply-button.tpl +26 -26
  119. package/templates/partials/topic/selection-tooltip.tpl +2 -2
  120. package/templates/partials/topic/sort.tpl +27 -27
  121. package/templates/partials/topic/stats.tpl +14 -14
  122. package/templates/partials/topic/thumbs.tpl +4 -4
  123. package/templates/partials/topic/tools.tpl +8 -8
  124. package/templates/partials/topic/topic-menu-list.tpl +73 -73
  125. package/templates/partials/topic/watch.tpl +59 -59
  126. package/templates/partials/topic-filters.tpl +15 -15
  127. package/templates/partials/topic-list-bar.tpl +54 -54
  128. package/templates/partials/topic-terms.tpl +15 -15
  129. package/templates/partials/topics_list.tpl +131 -131
  130. package/templates/partials/users/item.tpl +39 -39
  131. package/templates/partials/users_list.tpl +4 -4
  132. package/templates/partials/users_list_menu.tpl +14 -14
  133. package/templates/popular.tpl +34 -34
  134. package/templates/post-queue.tpl +211 -211
  135. package/templates/recent.tpl +42 -42
  136. package/templates/search.tpl +46 -46
  137. package/templates/tag.tpl +34 -34
  138. package/templates/tags.tpl +49 -49
  139. package/templates/top.tpl +34 -34
  140. package/templates/topic.tpl +123 -123
  141. package/templates/unread.tpl +31 -31
  142. package/templates/users.tpl +39 -39
  143. package/templates/world.tpl +66 -66
  144. package/theme.json +6 -6
@@ -1,212 +1,212 @@
1
- <div class="flex-fill">
2
- {{{ if isAdmin }}}
3
- {{{ if !enabled }}}
4
- <div class="alert alert-info">
5
- [[post-queue:enabling-help, {config.relative_path}/admin/settings/post#post-queue]]
6
- </div>
7
- {{{ end }}}
8
- {{{ else }}}
9
- <div>
10
- <p class="lead">[[post-queue:public-intro]]</p>
11
- <p>[[post-queue:public-description]]</p>
12
- <hr />
13
- </div>
14
- {{{ end }}}
15
-
16
- {{{ if (!singlePost && posts.length) }}}
17
- <div class="btn-toolbar justify-content-end mb-3">
18
- <div class="me-2">
19
- <!-- IMPORT partials/category/filter-dropdown-right.tpl -->
20
- </div>
21
-
22
- <div class="btn-group bottom-sheet" component="post-queue/bulk-actions">
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
- <i class="fa fa-clone text-primary"></i><span class="fw-semibold"> [[post-queue:bulk-actions]]</span>
25
- </button>
26
- <ul class="dropdown-menu p-1 text-sm dropdown-menu-end" role="menu">
27
- {{{ if canAccept }}}
28
- <li><a class="dropdown-item rounded-1" href="#" data-action="accept-all" role="menuitem">[[post-queue:accept-all]]</a></li>
29
- <li><a class="dropdown-item rounded-1" href="#" data-action="accept-selected" role="menuitem">[[post-queue:accept-selected]]</a></li>
30
- <li class="dropdown-divider"></li>
31
- <li><a class="dropdown-item rounded-1" href="#" data-action="reject-all" role="menuitem">[[post-queue:reject-all]]</a></li>
32
- <li><a class="dropdown-item rounded-1" href="#" data-action="reject-selected" role="menuitem">[[post-queue:reject-selected]]</a></li>
33
- {{{ else }}}
34
- <li><a class="dropdown-item rounded-1" href="#" data-action="reject-all" role="menuitem">[[post-queue:remove-all]]</a></li>
35
- <li><a class="dropdown-item rounded-1" href="#" data-action="reject-selected" role="menuitem">[[post-queue:remove-selected]]</a></li>
36
- {{{ end }}}
37
- </ul>
38
- </div>
39
- </div>
40
- {{{ end }}}
41
-
42
- <div class="post-queue posts-list">
43
- {{{ if !posts.length }}}
44
- {{{ if !singlePost }}}
45
- <div class="mx-auto">
46
- <div class="d-flex flex-column gap-3 justify-content-center text-center">
47
- <div class="mx-auto p-4 bg-light border rounded">
48
- <i class="text-secondary fa fa-fw fa-4x fa-seedling"></i>
49
- </div>
50
- [[post-queue:no-queued-posts]]
51
- </div>
52
- </div>
53
- {{{ else }}}
54
- <div class="alert alert-info d-flex align-items-md-center d-flex flex-column flex-md-row">
55
- <p class="mb-md-0">[[post-queue:no-single-post]]</p>
56
- <div class="d-grid ms-md-auto">
57
- <a class="btn btn-sm btn-primary flex-shrink text-nowrap" href=".">[[post-queue:back-to-list]]</a>
58
- </div>
59
- </div>
60
- {{{ end }}}
61
- {{{ end }}}
62
-
63
- {{{ each posts }}}
64
- <div class="card mb-4" data-id="{./id}" data-uid="{./user.uid}">
65
- <div class="row g-0">
66
- <div class="col-lg-3 bg-card-cap rounded-start">
67
- <ul class="list-unstyled ps-0 mb-0 border-end h-100">
68
- <li class="card-body border-bottom position-relative">
69
- {{{ if !singlePost }}}
70
- <input id="{./id}" type="checkbox" class="form-check-input" autocomplete="off" />
71
- {{{ end }}}
72
- <label for="{./id}" class="small stretched-link">
73
- {{{ if posts.data.tid }}}[[post-queue:reply]]{{{ else }}}[[post-queue:topic]]{{{ end }}}
74
- </label>
75
- </li>
76
- <li class="card-body d-flex flex-column gap-1 border-bottom">
77
- <div class="d-flex text-xs fw-semibold align-items-center">
78
- [[post-queue:user]]
79
- {{{ if ((privileges.ban || privileges.mute) || privileges.admin:users) }}}
80
- <div class="ms-auto btn-group bottom-sheet">
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
- <ul class="dropdown-menu p-1 text-sm" role="menu">
83
- {{{ if privileges.view:users:info }}}
84
- <li><a class="dropdown-item rounded-1" href="{config.relative_path}/user/{./user.userslug}/info" role="menuitem">[[user:account-info]]</a></li>
85
- {{{ end }}}
86
- {{{ if privileges.ban }}}
87
- <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>
88
- <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>
89
- {{{ end }}}
90
- {{{ if privileges.mute}}}
91
- <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>
92
- <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>
93
- {{{ end }}}
94
- {{{ if privileges.admin:users }}}
95
- <li><a class="dropdown-item rounded-1" href="#" data-action="delete-account" role="menuitem">[[user:delete-account-as-admin]]</a></li>
96
- <li><a class="dropdown-item rounded-1" href="#" data-action="delete-content" role="menuitem">[[user:delete-content]]</a></li>
97
- <li><a class="dropdown-item rounded-1" href="#" data-action="delete-all" role="menuitem">[[user:delete-all]]</a></li>
98
- {{{ end }}}
99
- </ul>
100
- </div>
101
- {{{ end }}}
102
- </div>
103
- <div class="small">
104
- {{{ if posts.user.userslug}}}
105
- <a class="text-decoration-none" href="{config.relative_path}/uid/{posts.user.uid}">{buildAvatar(posts.user, "24px", true, "not-responsive")} {posts.user.username}</a>
106
- {{{ else }}}
107
- {posts.user.username}
108
- {{{ end }}}
109
- </div>
110
- <div>
111
- <span class="badge text-body border border-gray-300 stats text-xs">
112
- <span title="{posts.user.postcount}" class="fw-bold">{humanReadableNumber(posts.user.postcount)}</span>
113
- <span class="text-lowercase fw-normal">[[global:posts]]</span>
114
- </span>
115
- <span class="badge text-body border border-gray-300 stats text-xs">
116
- <span title="{posts.user.reputation}" class="fw-bold">{humanReadableNumber(posts.user.reputation)}</span>
117
- <span class="text-lowercase fw-normal">[[global:reputation]]</span>
118
- </span>
119
- <span class="badge text-body border border-gray-300 stats text-xs">
120
- <span class="text-lowercase fw-normal">[[user:joined]]</span>
121
- <span title="{posts.user.joindateISO}" class="timeago fw-bold"></span>
122
- </span>
123
- </div>
124
- </li>
125
- <li class="card-body border-bottom">
126
- <div class="text-xs fw-semibold mb-1">[[post-queue:when]]</div>
127
- <span class="small timeago" title={posts.data.timestampISO}></span>
128
- </li>
129
- <li class="card-body border-bottom">
130
- <div class="text-xs fw-semibold mb-1">
131
- {{{ if posts.data.tid }}}[[post-queue:topic]]{{{ else }}}[[post-queue:title]]{{{ end }}}
132
- </div>
133
- <span class="small topic-title text-break">
134
- {{{ if posts.data.tid }}}
135
- <div class="d-flex flex-column align-items-start gap-1">
136
- <a href="{config.relative_path}/topic/{posts.data.tid}">{posts.topic.title}</a>
137
- <span class="badge text-body border border-gray-300 stats text-xs">
138
- <span class="text-lowercase fw-normal">[[global:lastpost]]</span>
139
- <span title="{posts.topic.lastposttimeISO}" class="timeago fw-bold"></span>
140
- </span>
141
- </div>
142
- {{{ end }}}
143
- <span class="title-text">{posts.data.title}</span>
144
- </span>
145
- {{{if !posts.data.tid}}}
146
- <div class="topic-title-editable hidden">
147
- <input class="form-control" type="text" value="{posts.data.title}"/>
148
- </div>
149
- {{{end}}}
150
- </li>
151
- <li class="card-body border-bottom">
152
- <div class="text-xs fw-semibold mb-1">
153
- [[post-queue:category]]
154
- </div>
155
- <div class="topic-category small">
156
- <a href="{config.relative_path}/category/{posts.category.slug}">
157
- <div class="category-item d-inline-block">
158
- {buildCategoryIcon(./category, "24px", "rounded-circle")}
159
- {posts.category.name}
160
- </div>
161
- </a>
162
- </div>
163
- </li>
164
- <li class="card-body">
165
- {{{ if canAccept }}}
166
- <div class="row row-cols-2 g-1">
167
- <div class="col d-grid">
168
- <button class="btn btn-success btn-sm" data-action="accept"><i class="fa fa-fw fa-check"></i> [[post-queue:accept]] </button>
169
- </div>
170
- <div class="col d-grid">
171
- <button class="btn btn-danger btn-sm" data-action="reject"><i class="fa fa-fw fa-times"></i> [[post-queue:reject]]</button>
172
- </div>
173
- {{{ if !posts.data.tid }}}
174
- <div class="col d-grid">
175
- <button class="btn btn-light btn-sm" data-action="editTitle"><i class="fa fa-fw fa-edit"></i> [[post-queue:title]]</button>
176
- </div>
177
- {{{ end }}}
178
- <div class="col d-grid">
179
- <button class="btn btn-light btn-sm" data-action="editContent"><i class="fa fa-fw fa-edit"></i> [[post-queue:content]]</button>
180
- </div>
181
- {{{if posts.data.cid}}}
182
- <div class="col d-grid">
183
- <button class="btn btn-light btn-sm" data-action="editCategory"><i class="fa fa-fw fa-edit"></i> [[post-queue:category]]</button>
184
- </div>
185
- {{{ end }}}
186
- <div class="col d-grid">
187
- <button class="btn btn-light btn-sm" data-action="notify"><i class="fa fa-fw fa-bell-o"></i> [[post-queue:notify]]</button>
188
- </div>
189
- </div>
190
- {{{ else }}}
191
- <button class="btn btn-danger btn-sm" data-action="reject"><i class="fa fa-fw fa-times"></i> [[post-queue:remove]]</button>
192
- {{{ end }}}
193
- </li>
194
- </ul>
195
- </div>
196
- <div class="col-lg-9 d-flex flex-column">
197
- <div class="post-content mb-auto text-break p-3 pb-0 h-100">{posts.data.content}</div>
198
- <div class="post-content-editable flex-grow-1 hidden">
199
- <textarea class="form-control w-100 h-100 p-3">{posts.data.rawContent}</textarea>
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>
205
- </div>
206
- </div>
207
- </div>
208
- {{{ end }}}
209
- </div>
210
-
211
- <!-- IMPORT partials/paginator.tpl -->
1
+ <div class="flex-fill">
2
+ {{{ if isAdmin }}}
3
+ {{{ if !enabled }}}
4
+ <div class="alert alert-info">
5
+ [[post-queue:enabling-help, {config.relative_path}/admin/settings/post#post-queue]]
6
+ </div>
7
+ {{{ end }}}
8
+ {{{ else }}}
9
+ <div>
10
+ <p class="lead">[[post-queue:public-intro]]</p>
11
+ <p>[[post-queue:public-description]]</p>
12
+ <hr />
13
+ </div>
14
+ {{{ end }}}
15
+
16
+ {{{ if (!singlePost && posts.length) }}}
17
+ <div class="btn-toolbar justify-content-end mb-3">
18
+ <div class="me-2">
19
+ <!-- IMPORT partials/category/filter-dropdown-right.tpl -->
20
+ </div>
21
+
22
+ <div class="btn-group bottom-sheet" component="post-queue/bulk-actions">
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
+ <i class="fa fa-clone text-primary"></i><span class="fw-semibold"> [[post-queue:bulk-actions]]</span>
25
+ </button>
26
+ <ul class="dropdown-menu p-1 text-sm dropdown-menu-end" role="menu">
27
+ {{{ if canAccept }}}
28
+ <li><a class="dropdown-item rounded-1" href="#" data-action="accept-all" role="menuitem">[[post-queue:accept-all]]</a></li>
29
+ <li><a class="dropdown-item rounded-1" href="#" data-action="accept-selected" role="menuitem">[[post-queue:accept-selected]]</a></li>
30
+ <li class="dropdown-divider"></li>
31
+ <li><a class="dropdown-item rounded-1" href="#" data-action="reject-all" role="menuitem">[[post-queue:reject-all]]</a></li>
32
+ <li><a class="dropdown-item rounded-1" href="#" data-action="reject-selected" role="menuitem">[[post-queue:reject-selected]]</a></li>
33
+ {{{ else }}}
34
+ <li><a class="dropdown-item rounded-1" href="#" data-action="reject-all" role="menuitem">[[post-queue:remove-all]]</a></li>
35
+ <li><a class="dropdown-item rounded-1" href="#" data-action="reject-selected" role="menuitem">[[post-queue:remove-selected]]</a></li>
36
+ {{{ end }}}
37
+ </ul>
38
+ </div>
39
+ </div>
40
+ {{{ end }}}
41
+
42
+ <div class="post-queue posts-list">
43
+ {{{ if !posts.length }}}
44
+ {{{ if !singlePost }}}
45
+ <div class="mx-auto">
46
+ <div class="d-flex flex-column gap-3 justify-content-center text-center">
47
+ <div class="mx-auto p-4 bg-light border rounded">
48
+ <i class="text-secondary fa fa-fw fa-4x fa-seedling"></i>
49
+ </div>
50
+ [[post-queue:no-queued-posts]]
51
+ </div>
52
+ </div>
53
+ {{{ else }}}
54
+ <div class="alert alert-info d-flex align-items-md-center d-flex flex-column flex-md-row">
55
+ <p class="mb-md-0">[[post-queue:no-single-post]]</p>
56
+ <div class="d-grid ms-md-auto">
57
+ <a class="btn btn-sm btn-primary flex-shrink text-nowrap" href=".">[[post-queue:back-to-list]]</a>
58
+ </div>
59
+ </div>
60
+ {{{ end }}}
61
+ {{{ end }}}
62
+
63
+ {{{ each posts }}}
64
+ <div class="card mb-4" data-id="{./id}" data-uid="{./user.uid}">
65
+ <div class="row g-0">
66
+ <div class="col-lg-3 bg-card-cap rounded-start">
67
+ <ul class="list-unstyled ps-0 mb-0 border-end h-100">
68
+ <li class="card-body border-bottom position-relative">
69
+ {{{ if !singlePost }}}
70
+ <input id="{./id}" type="checkbox" class="form-check-input" autocomplete="off" />
71
+ {{{ end }}}
72
+ <label for="{./id}" class="small stretched-link">
73
+ {{{ if posts.data.tid }}}[[post-queue:reply]]{{{ else }}}[[post-queue:topic]]{{{ end }}}
74
+ </label>
75
+ </li>
76
+ <li class="card-body d-flex flex-column gap-1 border-bottom">
77
+ <div class="d-flex text-xs fw-semibold align-items-center">
78
+ [[post-queue:user]]
79
+ {{{ if ((privileges.ban || privileges.mute) || privileges.admin:users) }}}
80
+ <div class="ms-auto btn-group bottom-sheet">
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
+ <ul class="dropdown-menu p-1 text-sm" role="menu">
83
+ {{{ if privileges.view:users:info }}}
84
+ <li><a class="dropdown-item rounded-1" href="{config.relative_path}/user/{./user.userslug}/info" role="menuitem">[[user:account-info]]</a></li>
85
+ {{{ end }}}
86
+ {{{ if privileges.ban }}}
87
+ <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>
88
+ <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>
89
+ {{{ end }}}
90
+ {{{ if privileges.mute}}}
91
+ <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>
92
+ <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>
93
+ {{{ end }}}
94
+ {{{ if privileges.admin:users }}}
95
+ <li><a class="dropdown-item rounded-1" href="#" data-action="delete-account" role="menuitem">[[user:delete-account-as-admin]]</a></li>
96
+ <li><a class="dropdown-item rounded-1" href="#" data-action="delete-content" role="menuitem">[[user:delete-content]]</a></li>
97
+ <li><a class="dropdown-item rounded-1" href="#" data-action="delete-all" role="menuitem">[[user:delete-all]]</a></li>
98
+ {{{ end }}}
99
+ </ul>
100
+ </div>
101
+ {{{ end }}}
102
+ </div>
103
+ <div class="small">
104
+ {{{ if posts.user.userslug}}}
105
+ <a class="text-decoration-none" href="{config.relative_path}/uid/{posts.user.uid}">{buildAvatar(posts.user, "24px", true, "not-responsive")} {posts.user.username}</a>
106
+ {{{ else }}}
107
+ {posts.user.username}
108
+ {{{ end }}}
109
+ </div>
110
+ <div>
111
+ <span class="badge text-body border border-gray-300 stats text-xs">
112
+ <span title="{posts.user.postcount}" class="fw-bold">{humanReadableNumber(posts.user.postcount)}</span>
113
+ <span class="text-lowercase fw-normal">[[global:posts]]</span>
114
+ </span>
115
+ <span class="badge text-body border border-gray-300 stats text-xs">
116
+ <span title="{posts.user.reputation}" class="fw-bold">{humanReadableNumber(posts.user.reputation)}</span>
117
+ <span class="text-lowercase fw-normal">[[global:reputation]]</span>
118
+ </span>
119
+ <span class="badge text-body border border-gray-300 stats text-xs">
120
+ <span class="text-lowercase fw-normal">[[user:joined]]</span>
121
+ <span title="{posts.user.joindateISO}" class="timeago fw-bold"></span>
122
+ </span>
123
+ </div>
124
+ </li>
125
+ <li class="card-body border-bottom">
126
+ <div class="text-xs fw-semibold mb-1">[[post-queue:when]]</div>
127
+ <span class="small timeago" title={posts.data.timestampISO}></span>
128
+ </li>
129
+ <li class="card-body border-bottom">
130
+ <div class="text-xs fw-semibold mb-1">
131
+ {{{ if posts.data.tid }}}[[post-queue:topic]]{{{ else }}}[[post-queue:title]]{{{ end }}}
132
+ </div>
133
+ <span class="small topic-title text-break">
134
+ {{{ if posts.data.tid }}}
135
+ <div class="d-flex flex-column align-items-start gap-1">
136
+ <a href="{config.relative_path}/topic/{posts.data.tid}">{posts.topic.title}</a>
137
+ <span class="badge text-body border border-gray-300 stats text-xs">
138
+ <span class="text-lowercase fw-normal">[[global:lastpost]]</span>
139
+ <span title="{posts.topic.lastposttimeISO}" class="timeago fw-bold"></span>
140
+ </span>
141
+ </div>
142
+ {{{ end }}}
143
+ <span class="title-text">{posts.data.title}</span>
144
+ </span>
145
+ {{{if !posts.data.tid}}}
146
+ <div class="topic-title-editable hidden">
147
+ <input class="form-control" type="text" value="{posts.data.title}"/>
148
+ </div>
149
+ {{{end}}}
150
+ </li>
151
+ <li class="card-body border-bottom">
152
+ <div class="text-xs fw-semibold mb-1">
153
+ [[post-queue:category]]
154
+ </div>
155
+ <div class="topic-category small">
156
+ <a href="{config.relative_path}/category/{posts.category.slug}">
157
+ <div class="category-item d-inline-block">
158
+ {buildCategoryIcon(./category, "24px", "rounded-circle")}
159
+ {posts.category.name}
160
+ </div>
161
+ </a>
162
+ </div>
163
+ </li>
164
+ <li class="card-body">
165
+ {{{ if canAccept }}}
166
+ <div class="row row-cols-2 g-1">
167
+ <div class="col d-grid">
168
+ <button class="btn btn-success btn-sm" data-action="accept"><i class="fa fa-fw fa-check"></i> [[post-queue:accept]] </button>
169
+ </div>
170
+ <div class="col d-grid">
171
+ <button class="btn btn-danger btn-sm" data-action="reject"><i class="fa fa-fw fa-times"></i> [[post-queue:reject]]</button>
172
+ </div>
173
+ {{{ if !posts.data.tid }}}
174
+ <div class="col d-grid">
175
+ <button class="btn btn-light btn-sm" data-action="editTitle"><i class="fa fa-fw fa-edit"></i> [[post-queue:title]]</button>
176
+ </div>
177
+ {{{ end }}}
178
+ <div class="col d-grid">
179
+ <button class="btn btn-light btn-sm" data-action="editContent"><i class="fa fa-fw fa-edit"></i> [[post-queue:content]]</button>
180
+ </div>
181
+ {{{if posts.data.cid}}}
182
+ <div class="col d-grid">
183
+ <button class="btn btn-light btn-sm" data-action="editCategory"><i class="fa fa-fw fa-edit"></i> [[post-queue:category]]</button>
184
+ </div>
185
+ {{{ end }}}
186
+ <div class="col d-grid">
187
+ <button class="btn btn-light btn-sm" data-action="notify"><i class="fa fa-fw fa-bell-o"></i> [[post-queue:notify]]</button>
188
+ </div>
189
+ </div>
190
+ {{{ else }}}
191
+ <button class="btn btn-danger btn-sm" data-action="reject"><i class="fa fa-fw fa-times"></i> [[post-queue:remove]]</button>
192
+ {{{ end }}}
193
+ </li>
194
+ </ul>
195
+ </div>
196
+ <div class="col-lg-9 d-flex flex-column">
197
+ <div class="post-content mb-auto text-break p-3 pb-0 h-100">{posts.data.content}</div>
198
+ <div class="post-content-editable flex-grow-1 hidden">
199
+ <textarea class="form-control w-100 h-100 p-3">{posts.data.rawContent}</textarea>
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>
205
+ </div>
206
+ </div>
207
+ </div>
208
+ {{{ end }}}
209
+ </div>
210
+
211
+ <!-- IMPORT partials/paginator.tpl -->
212
212
  </div>
@@ -1,43 +1,43 @@
1
- {{{ if widgets.header.length }}}
2
- <div data-widget-area="header">
3
- {{{each widgets.header}}}
4
- {{widgets.header.html}}
5
- {{{end}}}
6
- </div>
7
- {{{ end }}}
8
-
9
- <div class="row">
10
- <div class="recent {{{if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
11
- <!-- IMPORT partials/topic-list-bar.tpl -->
12
-
13
- <div class="category">
14
- {{{ if !topics.length }}}
15
- <div class="alert alert-info" id="category-no-topics">[[recent:no-recent-topics]]</div>
16
- {{{ end }}}
17
-
18
- {{{ if (selectedCategory.cid == "-1") }}}
19
- <div class="py-3">
20
- <h4>[[recent:uncategorized.title]]</h4>
21
- <p>[[recent:uncategorized.intro]]</p>
22
- </div>
23
- {{{ end }}}
24
-
25
- <!-- IMPORT partials/topics_list.tpl -->
26
-
27
- {{{ if config.usePagination }}}
28
- <!-- IMPORT partials/paginator.tpl -->
29
- {{{ end }}}
30
- </div>
31
- </div>
32
- <div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
33
- {{{ each widgets.sidebar }}}
34
- {{widgets.sidebar.html}}
35
- {{{ end }}}
36
- </div>
37
- </div>
38
-
39
- <div data-widget-area="footer">
40
- {{{each widgets.footer}}}
41
- {{widgets.footer.html}}
42
- {{{end}}}
1
+ {{{ if widgets.header.length }}}
2
+ <div data-widget-area="header">
3
+ {{{each widgets.header}}}
4
+ {{widgets.header.html}}
5
+ {{{end}}}
6
+ </div>
7
+ {{{ end }}}
8
+
9
+ <div class="row">
10
+ <div class="recent {{{if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
11
+ <!-- IMPORT partials/topic-list-bar.tpl -->
12
+
13
+ <div class="category">
14
+ {{{ if !topics.length }}}
15
+ <div class="alert alert-info" id="category-no-topics">[[recent:no-recent-topics]]</div>
16
+ {{{ end }}}
17
+
18
+ {{{ if (selectedCategory.cid == "-1") }}}
19
+ <div class="py-3">
20
+ <h4>[[recent:uncategorized.title]]</h4>
21
+ <p>[[recent:uncategorized.intro]]</p>
22
+ </div>
23
+ {{{ end }}}
24
+
25
+ <!-- IMPORT partials/topics_list.tpl -->
26
+
27
+ {{{ if config.usePagination }}}
28
+ <!-- IMPORT partials/paginator.tpl -->
29
+ {{{ end }}}
30
+ </div>
31
+ </div>
32
+ <div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
33
+ {{{ each widgets.sidebar }}}
34
+ {{widgets.sidebar.html}}
35
+ {{{ end }}}
36
+ </div>
37
+ </div>
38
+
39
+ <div data-widget-area="footer">
40
+ {{{each widgets.footer}}}
41
+ {{widgets.footer.html}}
42
+ {{{end}}}
43
43
  </div>
@@ -1,46 +1,46 @@
1
- <div class="search">
2
- <div id="advanced-search" class="d-flex flex-column flex-md-row">
3
- <!-- sidebar -->
4
- <div class="flex-shrink-0 pe-2 border-end-md text-sm mb-3" style="flex-basis: 240px!important;">
5
- <form action="{config.relative_path}/search" method="get" class="nav sticky-md-top d-flex flex-row flex-md-column flex-wrap gap-3 pe-md-3" style="top: 1rem; z-index: 1;">
6
- <h2 class="fw-semibold tracking-tight mb-0">[[global:search]]</h2>
7
-
8
- <input id="search-input" name="term" type="text" class="form-control fw-semibold py-2 ps-2 pe-3" id="search-input" placeholder="[[search:type-to-search]]">
9
-
10
- <select id="search-in" name="in" class="form-select text-sm py-2 ps-2 pe-3">
11
- <option value="titlesposts">[[search:in-titles-posts]]</option>
12
- <option value="titles">[[search:in-titles]]</option>
13
- <option value="posts">[[search:in-posts]]</option>
14
- <option value="bookmarks">[[search:in-bookmarks]]</option>
15
- <option value="categories">[[search:in-categories]]</option>
16
- {{{if privileges.search:users}}}
17
- <option value="users">[[search:in-users]]</option>
18
- {{{end}}}
19
- {{{if privileges.search:tags}}}
20
- <option value="tags">[[search:in-tags]]</option>
21
- {{{end}}}
22
- </select>
23
-
24
- <select id="match-words-filter" name="matchWords" class="post-search-item form-select text-sm py-2 ps-2 pe-3">
25
- <option value="all">[[search:match-all-words]]</option>
26
- <option value="any">[[search:match-any-word]]</option>
27
- </select>
28
-
29
- <select id="show-results-as" name="showAs" class="post-search-item form-select text-sm py-2 ps-2 pe-3">
30
- <option value="posts" selected>[[search:show-results-as-posts]]</option>
31
- <option value="topics">[[search:show-results-as-topics]]</option>
32
- </select>
33
-
34
- <button type="submit" class="btn btn-primary fw-semibold form-control py-2 px-3">[[global:search]]</button>
35
- </form>
36
- </div>
37
-
38
- <!-- filters and search results -->
39
- <div class="flex-grow-1 ps-md-2 ps-lg-5" style="min-width:0;">
40
- <div class="d-flex flex-column gap-3">
41
- <!-- IMPORT partials/search-filters.tpl -->
42
- <!-- IMPORT partials/search-results.tpl -->
43
- </div>
44
- </div>
45
- </div>
46
- </div>
1
+ <div class="search">
2
+ <div id="advanced-search" class="d-flex flex-column flex-md-row">
3
+ <!-- sidebar -->
4
+ <div class="flex-shrink-0 pe-2 border-end-md text-sm mb-3" style="flex-basis: 240px!important;">
5
+ <form action="{config.relative_path}/search" method="get" class="nav sticky-md-top d-flex flex-row flex-md-column flex-wrap gap-3 pe-md-3" style="top: 1rem; z-index: 1;">
6
+ <h2 class="fw-semibold tracking-tight mb-0">[[global:search]]</h2>
7
+
8
+ <input id="search-input" name="term" type="text" class="form-control fw-semibold py-2 ps-2 pe-3" id="search-input" placeholder="[[search:type-to-search]]">
9
+
10
+ <select id="search-in" name="in" class="form-select text-sm py-2 ps-2 pe-3">
11
+ <option value="titlesposts">[[search:in-titles-posts]]</option>
12
+ <option value="titles">[[search:in-titles]]</option>
13
+ <option value="posts">[[search:in-posts]]</option>
14
+ <option value="bookmarks">[[search:in-bookmarks]]</option>
15
+ <option value="categories">[[search:in-categories]]</option>
16
+ {{{if privileges.search:users}}}
17
+ <option value="users">[[search:in-users]]</option>
18
+ {{{end}}}
19
+ {{{if privileges.search:tags}}}
20
+ <option value="tags">[[search:in-tags]]</option>
21
+ {{{end}}}
22
+ </select>
23
+
24
+ <select id="match-words-filter" name="matchWords" class="post-search-item form-select text-sm py-2 ps-2 pe-3">
25
+ <option value="all">[[search:match-all-words]]</option>
26
+ <option value="any">[[search:match-any-word]]</option>
27
+ </select>
28
+
29
+ <select id="show-results-as" name="showAs" class="post-search-item form-select text-sm py-2 ps-2 pe-3">
30
+ <option value="posts" selected>[[search:show-results-as-posts]]</option>
31
+ <option value="topics">[[search:show-results-as-topics]]</option>
32
+ </select>
33
+
34
+ <button type="submit" class="btn btn-primary fw-semibold form-control py-2 px-3">[[global:search]]</button>
35
+ </form>
36
+ </div>
37
+
38
+ <!-- filters and search results -->
39
+ <div class="flex-grow-1 ps-md-2 ps-lg-5" style="min-width:0;">
40
+ <div class="d-flex flex-column gap-3">
41
+ <!-- IMPORT partials/search-filters.tpl -->
42
+ <!-- IMPORT partials/search-results.tpl -->
43
+ </div>
44
+ </div>
45
+ </div>
46
+ </div>