nodebb-theme-harmony 1.0.0-beta.9 → 1.0.0-beta.91

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 (151) hide show
  1. package/README.md +12 -1
  2. package/languages/en-GB/harmony.json +5 -1
  3. package/library.js +25 -25
  4. package/package.json +1 -1
  5. package/plugin.json +0 -1
  6. package/public/harmony.js +148 -9
  7. package/public/settings.js +1 -0
  8. package/screenshots/categories.png +0 -0
  9. package/screenshots/recent.png +0 -0
  10. package/screenshots/topic.png +0 -0
  11. package/scss/account.scss +1 -1
  12. package/scss/chats.scss +53 -25
  13. package/scss/common.scss +78 -9
  14. package/scss/flags.scss +5 -0
  15. package/scss/groups.scss +2 -2
  16. package/scss/harmony.scss +3 -0
  17. package/scss/mixins.scss +7 -3
  18. package/scss/modals.scss +6 -1
  19. package/scss/modules/bottom-sheet.scss +1 -1
  20. package/scss/modules/composer.scss +0 -4
  21. package/scss/modules/cover.scss +1 -11
  22. package/scss/modules/filters.scss +8 -0
  23. package/scss/modules/paginator.scss +24 -0
  24. package/scss/modules/topic-navigator.scss +16 -42
  25. package/scss/modules/topics-list.scss +172 -16
  26. package/scss/modules/user-menu.scss +6 -0
  27. package/scss/overrides.scss +4 -1
  28. package/scss/sidebar.scss +39 -11
  29. package/scss/topic.scss +30 -13
  30. package/templates/account/blocks.tpl +35 -40
  31. package/templates/account/categories.tpl +47 -29
  32. package/templates/account/consent.tpl +66 -10
  33. package/templates/account/edit/password.tpl +25 -30
  34. package/templates/account/edit/username.tpl +21 -26
  35. package/templates/account/edit.tpl +105 -116
  36. package/templates/account/followers.tpl +12 -19
  37. package/templates/account/following.tpl +12 -18
  38. package/templates/account/groups.tpl +12 -17
  39. package/templates/account/info.tpl +178 -206
  40. package/templates/account/posts.tpl +31 -36
  41. package/templates/account/profile.tpl +66 -73
  42. package/templates/account/sessions.tpl +8 -30
  43. package/templates/account/settings.tpl +222 -203
  44. package/templates/account/theme.tpl +35 -26
  45. package/templates/account/topics.tpl +36 -38
  46. package/templates/account/uploads.tpl +33 -40
  47. package/templates/admin/plugins/harmony.tpl +17 -3
  48. package/templates/categories.tpl +2 -2
  49. package/templates/category.tpl +13 -14
  50. package/templates/chats.tpl +7 -8
  51. package/templates/flags/detail.tpl +160 -193
  52. package/templates/flags/list.tpl +4 -70
  53. package/templates/footer.tpl +2 -2
  54. package/templates/groups/details.tpl +21 -18
  55. package/templates/groups/list.tpl +1 -1
  56. package/templates/groups/members.tpl +0 -2
  57. package/templates/header.tpl +2 -2
  58. package/templates/login.tpl +2 -2
  59. package/templates/notifications.tpl +1 -1
  60. package/templates/partials/account/admin-menu.tpl +9 -9
  61. package/templates/partials/account/category-item.tpl +14 -17
  62. package/templates/partials/account/footer.tpl +3 -0
  63. package/templates/partials/account/header.tpl +78 -81
  64. package/templates/partials/account/session-list.tpl +18 -0
  65. package/templates/partials/account/sidebar-left.tpl +6 -0
  66. package/templates/partials/breadcrumbs.tpl +6 -6
  67. package/templates/partials/buttons/newTopic.tpl +1 -1
  68. package/templates/partials/categories/item.tpl +30 -23
  69. package/templates/partials/categories/lastpost.tpl +2 -2
  70. package/templates/partials/category/filter-dropdown-content.tpl +37 -0
  71. package/templates/partials/{category-selector-content.tpl → category/selector-dropdown-content.tpl} +7 -7
  72. package/templates/partials/category/sort.tpl +7 -7
  73. package/templates/partials/category/subcategory.tpl +1 -1
  74. package/templates/partials/category/tags.tpl +0 -2
  75. package/templates/partials/category/tools.tpl +28 -25
  76. package/templates/partials/category/watch.tpl +30 -6
  77. package/templates/partials/chats/dropdown.tpl +4 -1
  78. package/templates/partials/chats/message-window.tpl +8 -7
  79. package/templates/partials/chats/message.tpl +4 -6
  80. package/templates/partials/chats/options.tpl +14 -6
  81. package/templates/partials/chats/recent_room.tpl +41 -32
  82. package/templates/partials/cookie-consent.tpl +5 -5
  83. package/templates/partials/flags/bulk-actions.tpl +9 -0
  84. package/templates/partials/flags/filters.tpl +163 -78
  85. package/templates/partials/flags/results.tpl +38 -0
  86. package/templates/partials/groups/admin.tpl +4 -4
  87. package/templates/partials/groups/badge.tpl +1 -1
  88. package/templates/partials/groups/memberlist.tpl +1 -1
  89. package/templates/partials/groups/sidebar-left.tpl +1 -1
  90. package/templates/partials/header/brand.tpl +9 -2
  91. package/templates/partials/mobile-footer.tpl +69 -64
  92. package/templates/partials/notifications_list.tpl +11 -8
  93. package/templates/partials/paginator.tpl +11 -9
  94. package/templates/partials/post_bar.tpl +26 -24
  95. package/templates/partials/posts_list_item.tpl +5 -5
  96. package/templates/partials/quick-search-results.tpl +3 -3
  97. package/templates/partials/search-filters.tpl +184 -0
  98. package/templates/partials/search-results.tpl +28 -32
  99. package/templates/partials/sidebar/chats.tpl +22 -33
  100. package/templates/partials/sidebar/drafts.tpl +45 -34
  101. package/templates/partials/sidebar/logged-in-menu.tpl +5 -5
  102. package/templates/partials/sidebar/logged-out-menu.tpl +1 -1
  103. package/templates/partials/sidebar/notifications.tpl +29 -8
  104. package/templates/partials/sidebar/search.tpl +1 -1
  105. package/templates/partials/sidebar/user-menu.tpl +38 -29
  106. package/templates/partials/sidebar-left.tpl +11 -11
  107. package/templates/partials/sidebar-right.tpl +1 -3
  108. package/templates/partials/skin-switcher.tpl +3 -3
  109. package/templates/partials/tags/filter-dropdown-content.tpl +31 -0
  110. package/templates/partials/tags_list.tpl +4 -4
  111. package/templates/partials/topic/browsing-users.tpl +0 -2
  112. package/templates/partials/topic/event.tpl +1 -1
  113. package/templates/partials/topic/navigation-post.tpl +5 -9
  114. package/templates/partials/topic/navigator-mobile.tpl +62 -0
  115. package/templates/partials/topic/navigator.tpl +21 -17
  116. package/templates/partials/topic/post-editor.tpl +0 -2
  117. package/templates/partials/topic/post-menu-list.tpl +60 -62
  118. package/templates/partials/topic/post-menu.tpl +16 -11
  119. package/templates/partials/topic/post.tpl +43 -25
  120. package/templates/partials/topic/quickreply.tpl +5 -5
  121. package/templates/partials/topic/reply-button.tpl +3 -3
  122. package/templates/partials/topic/sort.tpl +17 -5
  123. package/templates/partials/topic/tools.tpl +2 -2
  124. package/templates/partials/topic/topic-menu-list.tpl +22 -24
  125. package/templates/partials/topic/watch.tpl +30 -6
  126. package/templates/partials/topic-filters.tpl +6 -3
  127. package/templates/partials/topic-list-bar.tpl +50 -46
  128. package/templates/partials/topic-terms.tpl +6 -3
  129. package/templates/partials/topics_list.tpl +53 -60
  130. package/templates/partials/userFilter-placeholders.tpl +5 -0
  131. package/templates/partials/users/filter-dropdown-content.tpl +23 -0
  132. package/templates/partials/users/item.tpl +25 -27
  133. package/templates/partials/users_list.tpl +1 -1
  134. package/templates/popular.tpl +3 -1
  135. package/templates/post-queue.tpl +166 -0
  136. package/templates/recent.tpl +3 -2
  137. package/templates/register.tpl +2 -2
  138. package/templates/search.tpl +39 -177
  139. package/templates/tags.tpl +3 -3
  140. package/templates/top.tpl +3 -1
  141. package/templates/topic.tpl +74 -68
  142. package/templates/unread.tpl +3 -1
  143. package/templates/users.tpl +7 -3
  144. package/templates/modules/usercard.tpl +0 -39
  145. package/templates/partials/acceptTos.tpl +0 -11
  146. package/templates/partials/category-filter-content.tpl +0 -30
  147. package/templates/partials/category-filter-right.tpl +0 -5
  148. package/templates/partials/category-filter.tpl +0 -3
  149. package/templates/partials/category-selector-right.tpl +0 -5
  150. package/templates/partials/category-selector.tpl +0 -3
  151. package/templates/partials/slideout-menu.tpl +0 -6
@@ -1,15 +1,16 @@
1
+ {{{ if widgets.header.length }}}
1
2
  <div data-widget-area="header">
2
3
  {{{each widgets.header}}}
3
4
  {{widgets.header.html}}
4
5
  {{{end}}}
5
6
  </div>
6
-
7
+ {{{ end }}}
7
8
  <div class="recent">
8
9
  <!-- IMPORT partials/topic-list-bar.tpl -->
9
10
 
10
11
  <div class="category">
11
12
  {{{ if !topics.length }}}
12
- <div class="alert alert-warning" id="category-no-topics">[[recent:no_recent_topics]]</div>
13
+ <div class="alert alert-info" id="category-no-topics">[[recent:no_recent_topics]]</div>
13
14
  {{{ end }}}
14
15
 
15
16
  <!-- IMPORT partials/topics_list.tpl -->
@@ -8,7 +8,7 @@
8
8
  <h2 class="tracking-tight fw-semibold text-center">[[global:register]]</h2>
9
9
  <div class="row justify-content-center gap-5">
10
10
 
11
- <div class="col-12 col-md-3 px-md-0">
11
+ <div class="col-12 col-md-5 col-lg-3 px-md-0">
12
12
  <div class="register-block">
13
13
  <div class="alert alert-danger{{{ if !error }}} hidden{{{ end }}}" id="register-error-notify" >
14
14
  <strong>[[error:registration-error]]</strong>
@@ -66,7 +66,7 @@
66
66
  </div>
67
67
 
68
68
  {{{ if alternate_logins }}}
69
- <div class="col-12 col-md-3 px-md-0">
69
+ <div class="col-12 col-md-5 col-lg-3 px-md-0">
70
70
  <div class="alt-register-block d-flex flex-column gap-2">
71
71
  <label>[[register:alternative_registration]]</label>
72
72
  <ul class="alt-logins list-unstyled">
@@ -1,183 +1,45 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
1
  <div class="search">
4
- <div class="row">
5
- <div class="{{{ if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
6
- <form id="advanced-search" class="mb-3">
7
- <div class="mb-3">
8
- <div class="row">
9
- <div class="col-md-5">
10
- <label class="form-label">[[global:search]]</label>
11
- <input type="text" class="form-control" id="search-input" placeholder="[[global:search]]">
12
- </div>
13
- <div class="col-md-3">
14
- <label class="form-label">[[search:in]]</label>
15
- <select id="search-in" class="form-select">
16
- <option value="titlesposts">[[search:titles-posts]]</option>
17
- <option value="titles">[[search:titles]]</option>
18
- <option value="posts">[[global:posts]]</option>
19
- <option value="categories">[[global:header.categories]]</option>
20
- {{{if privileges.search:users}}}
21
- <option value="users">[[global:users]]</option>
22
- {{{end}}}
23
- {{{if privileges.search:tags}}}
24
- <option value="tags">[[tags:tags]]</option>
25
- {{{end}}}
26
- </select>
27
- </div>
28
- <div class="col-md-2">
29
- <label class="form-label">[[search:match-words]]</label>
30
- <select id="match-words-filter" class="form-select">
31
- <option value="all">[[search:all]]</option>
32
- <option value="any">[[search:any]]</option>
33
- </select>
34
- </div>
35
- <div class="col-md-2">
36
- <label class="form-label">&nbsp;</label>
37
- <button type="submit" class="btn btn-primary form-control">[[global:search]]</button>
38
- </div>
39
- </div>
40
- </div>
41
-
42
- <div class="card">
43
- <h5 class="card-header pointer" data-bs-toggle="collapse" data-bs-target=".search-options">
44
- <i class="fa fa-sort"></i> [[search:advanced-search]]
45
- </h5>
46
- <div class="collapse search-options {{{ if expandSearch }}}show{{{ end }}}">
47
- <div class="card-body">
48
- <div class="mb-2 post-search-item">
49
- <div class="row">
50
- <div class="col-md-6">
51
- <label class="form-label">[[search:in-categories]]</label>
52
- <select multiple class="form-select" id="posted-in-categories" size="{allCategoriesCount}">
53
- {{{each allCategories}}}
54
- <option value="{allCategories.value}">{allCategories.text}</option>
55
- {{{end}}}
56
- </select>
57
- <div class="form-check">
58
- <input id="search-children" class="form-check-input" type="checkbox"/>
59
- <label class="form-check-label" for="search-children">[[search:search-child-categories]]</label>
60
- </div>
61
- </div>
62
- <div class="col-md-6">
63
- <div class="mb-2 post-search-item">
64
- <div class="row">
65
- <div class="col-md-6">
66
- <label class="form-label">[[search:posted-by]]</label>
67
- <div>
68
- <input type="text" class="form-control" id="posted-by-user">
69
- </div>
70
- </div>
71
- <div class="col-md-6">
72
- <label class="form-label">[[search:has-tags]]</label>
73
- <div>
74
- <input type="text" class="form-control" id="has-tags">
75
- </div>
76
- </div>
77
- </div>
78
- </div>
79
-
80
- <div class="mb-2 post-search-item">
81
- <label class="form-label">[[search:reply-count]]</label>
82
- <div class="row">
83
- <div class="col-md-6">
84
- <select id="reply-count-filter" class="form-select">
85
- <option value="atleast">[[search:at-least]]</option>
86
- <option value="atmost">[[search:at-most]]</option>
87
- </select>
88
- </div>
89
- <div class="col-md-6">
90
- <input type="text" class="form-control" id="reply-count">
91
- </div>
92
- </div>
93
- </div>
94
-
95
- <div class="mb-2 post-search-item">
96
- <label class="form-label">[[search:post-time]]</label>
97
- <div class="row">
98
- <div class="col-md-6">
99
- <select id="post-time-filter" class="form-select">
100
- <option value="newer">[[search:newer-than]]</option>
101
- <option value="older">[[search:older-than]]</option>
102
- </select>
103
- </div>
104
- <div class="col-md-6">
105
- <select id="post-time-range" class="form-select">
106
- <option value="">[[search:any-date]]</option>
107
- <option value="86400">[[search:yesterday]]</option>
108
- <option value="604800">[[search:one-week]]</option>
109
- <option value="1209600">[[search:two-weeks]]</option>
110
- <option value="2592000">[[search:one-month]]</option>
111
- <option value="7776000">[[search:three-months]]</option>
112
- <option value="15552000">[[search:six-months]]</option>
113
- <option value="31104000">[[search:one-year]]</option>
114
- </select>
115
- </div>
116
- </div>
117
- </div>
118
-
119
- <div class="mb-2 post-search-item">
120
- <label class="form-label">[[search:sort-by]]</label>
121
- <div class="row">
122
- <div class="col-md-6">
123
- <select id="post-sort-by" class="form-select">
124
- <option value="relevance">[[search:relevance]]</option>
125
- <option value="timestamp">[[search:post-time]]</option>
126
- <option value="votes">[[search:votes]]</option>
127
- <option value="topic.lastposttime">[[search:last-reply-time]]</option>
128
- <option value="topic.title">[[search:topic-title]]</option>
129
- <option value="topic.postcount">[[search:number-of-replies]]</option>
130
- <option value="topic.viewcount">[[search:number-of-views]]</option>
131
- <option value="topic.votes">[[search:topic-votes]]</option>
132
- <option value="topic.timestamp">[[search:topic-start-date]]</option>
133
- <option value="user.username">[[search:username]]</option>
134
- <option value="category.name">[[search:category]]</option>
135
- </select>
136
- </div>
137
- <div class="col-md-6">
138
- <select id="post-sort-direction" class="form-select">
139
- <option value="desc">[[search:descending]]</option>
140
- <option value="asc">[[search:ascending]]</option>
141
- </select>
142
- </div>
143
- </div>
144
- </div>
145
-
146
- <div class="mb-2 post-search-item">
147
- <label class="form-label">[[search:show-results-as]]</label>
148
- <div class="radio">
149
- <label>
150
- <input type="radio" name="options" id="show-as-posts" checked>
151
- [[global:posts]]
152
- </label>
153
- </div>
154
- <div class="radio">
155
- <label>
156
- <input type="radio" name="options" id="show-as-topics">
157
- [[global:topics]]
158
- </label>
159
- </div>
160
- </div>
161
- </div>
162
- </div>
163
- </div>
164
-
165
- <div class="btn-group">
166
- <button type="submit" class="btn btn-primary">[[global:search]]</button>
167
- <a class="btn btn-outline-secondary" id="save-preferences" href="#">[[search:save-preferences]]</a>
168
- <a class="btn btn-outline-secondary" id="clear-preferences" href="#">[[search:clear-preferences]]</a>
169
- </div>
170
- </div>
171
- </div>
172
- </div>
2
+ <div id="advanced-search" class="d-flex flex-column flex-md-row">
3
+ <!-- sidebar -->
4
+ <div class="flex-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="categories">[[search:in-categories]]</option>
15
+ {{{if privileges.search:users}}}
16
+ <option value="users">[[search:in-users]]</option>
17
+ {{{end}}}
18
+ {{{if privileges.search:tags}}}
19
+ <option value="tags">[[search:in-tags]]</option>
20
+ {{{end}}}
21
+ </select>
22
+
23
+ <select id="match-words-filter" name="matchWords" class="post-search-item form-select text-sm py-2 ps-2 pe-3">
24
+ <option value="all">[[search:match-all-words]]</option>
25
+ <option value="any">[[search:match-any-word]]</option>
26
+ </select>
27
+
28
+ <select id="show-results-as" name="showAs" class="post-search-item form-select text-sm py-2 ps-2 pe-3">
29
+ <option value="posts" selected>[[search:show-results-as-posts]]</option>
30
+ <option value="topics">[[search:show-results-as-topics]]</option>
31
+ </select>
32
+
33
+ <button type="submit" class="btn btn-primary fw-semibold form-control py-2 px-3">[[global:search]]</button>
173
34
  </form>
174
-
175
- <!-- IMPORT partials/search-results.tpl -->
176
35
  </div>
177
- <div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
178
- {{{each widgets.sidebar}}}
179
- {{widgets.sidebar.html}}
180
- {{{end}}}
36
+
37
+ <!-- filters and search results -->
38
+ <div class="flex-1 ps-md-2 ps-lg-5" style="min-width:0;">
39
+ <div class="d-flex flex-column gap-3">
40
+ <!-- IMPORT partials/search-filters.tpl -->
41
+ <!-- IMPORT partials/search-results.tpl -->
42
+ </div>
181
43
  </div>
182
44
  </div>
183
45
  </div>
@@ -4,7 +4,7 @@
4
4
  {{{end}}}
5
5
  </div>
6
6
  <div class="tags">
7
- <h2 class="fw-semibold">[[pages:tags]]</h2>
7
+ <h3 class="fw-semibold">[[pages:tags]]</h3>
8
8
  {{{ if displayTagSearch }}}
9
9
  {{{ if tags.length }}}
10
10
  <div class="row justify-content-end mb-3">
@@ -23,13 +23,13 @@
23
23
  </div>
24
24
  {{{ end }}}
25
25
  {{{ end }}}
26
-
26
+ <hr/>
27
27
  {{{ if !tags.length }}}
28
28
  <div class="alert alert-warning">[[tags:no_tags]]</div>
29
29
  {{{ end }}}
30
30
 
31
31
  <div class="category">
32
- <div class="tag-list row row-cols-2 row-cols-lg-3 row-cols-xl-4 row-cols-xxl-5 gx-3 gy-2" data-nextstart="{nextStart}">
32
+ <div class="tag-list row row-cols-2 row-cols-lg-4 row-cols-xl-5 gx-3 gy-2" data-nextstart="{nextStart}">
33
33
  <!-- IMPORT partials/tags_list.tpl -->
34
34
  </div>
35
35
  </div>
package/templates/top.tpl CHANGED
@@ -1,13 +1,15 @@
1
+ {{{ if widgets.header.length }}}
1
2
  <div data-widget-area="header">
2
3
  {{{each widgets.header}}}
3
4
  {{widgets.header.html}}
4
5
  {{{end}}}
5
6
  </div>
7
+ {{{ end }}}
6
8
  <div class="top">
7
9
  <!-- IMPORT partials/topic-list-bar.tpl -->
8
10
  <div class="category">
9
11
  {{{ if !topics.length }}}
10
- <div class="alert alert-warning" id="category-no-topics">[[top:no_top_topics]]</div>
12
+ <div class="alert alert-info" id="category-no-topics">[[top:no_top_topics]]</div>
11
13
  {{{ end }}}
12
14
 
13
15
  <!-- IMPORT partials/topics_list.tpl -->
@@ -6,86 +6,92 @@
6
6
  </div>
7
7
  {{{ end }}}
8
8
 
9
- <h2 component="post/header" class="fs-2 mb-0 text-break {{{ if config.centerHeaderElements }}}text-center{{{ end }}}" itemprop="name">
10
- <span class="topic-title" component="topic/title">{title}</span>
11
- </h2>
9
+ <div class="d-flex flex-column gap-3" itemid="{url}" itemscope itemtype="https://schema.org/DiscussionForumPosting">
10
+ <h2 component="post/header" class="tracking-tight fw-semibold fs-2 mb-0 text-break {{{ if config.theme.centerHeaderElements }}}text-center{{{ end }}}" itemprop="headline">
11
+ <span class="topic-title" component="topic/title">{title}</span>
12
+ </h2>
12
13
 
13
- <div class="topic-info d-flex gap-2 align-items-center flex-wrap {{{ if config.centerHeaderElements }}}justify-content-center{{{ end }}}">
14
- <span component="topic/labels" class="d-flex gap-2 lh-1">
15
- <span component="topic/scheduled" class="badge badge border border-gray-300 text-primary {{{ if !scheduled }}}hidden{{{ end }}}">
16
- <i class="fa fa-clock-o"></i>
17
- [[topic:scheduled]]
14
+ <div class="topic-info d-flex gap-2 align-items-center flex-wrap {{{ if config.theme.centerHeaderElements }}}justify-content-center{{{ end }}}">
15
+ <span component="topic/labels" class="d-flex gap-2 {{{ if (!scheduled && (!pinned && (!locked && (!oldCid && !icons.length)))) }}}hidden{{{ end }}}">
16
+ <span component="topic/scheduled" class="badge badge border border-gray-300 text-primary {{{ if !scheduled }}}hidden{{{ end }}}">
17
+ <i class="fa fa-clock-o"></i>
18
+ [[topic:scheduled]]
19
+ </span>
20
+ <span component="topic/pinned" class="badge badge border border-gray-300 text-primary {{{ if (scheduled || !pinned) }}}hidden{{{ end }}}">
21
+ <i class="fa fa-thumb-tack"></i>
22
+ {{{ if !pinExpiry }}}[[topic:pinned]]{{{ else }}}[[topic:pinned-with-expiry, {pinExpiryISO}]]{{{ end }}}
23
+ </span>
24
+ <span component="topic/locked" class="badge badge border border-gray-300 text-primary {{{ if !locked }}}hidden{{{ end }}}">
25
+ <i class="fa fa-lock"></i>
26
+ [[topic:locked]]
27
+ </span>
28
+ <span class="badge badge border border-gray-300 text-primary {{{ if !oldCid }}}hidden{{{ end }}}">
29
+ <i class="fa fa-arrow-circle-right"></i>
30
+ {{{ if privileges.isAdminOrMod }}}[[topic:moved-from, {oldCategory.name}]]{{{ else }}}[[topic:moved]]{{{ end }}}
31
+ </span>
32
+ {{{each icons}}}<span class="lh-1">{@value}</span>{{{end}}}
18
33
  </span>
19
- <span component="topic/pinned" class="badge badge border border-gray-300 text-primary {{{ if (scheduled || !pinned) }}}hidden{{{ end }}}">
20
- <i class="fa fa-thumb-tack"></i>
21
- {{{ if !pinExpiry }}}[[topic:pinned]]{{{ else }}}[[topic:pinned-with-expiry, {pinExpiryISO}]]{{{ end }}}
22
- </span>
23
- <span component="topic/locked" class="badge badge border border-gray-300 text-primary {{{ if !locked }}}hidden{{{ end }}}">
24
- <i class="fa fa-lock"></i>
25
- [[topic:locked]]
26
- </span>
27
- <span class="badge badge border border-gray-300 text-primary {{{ if !oldCid }}}hidden{{{ end }}}">
28
- <i class="fa fa-arrow-circle-right"></i>
29
- {{{ if privileges.isAdminOrMod }}}[[topic:moved-from, {oldCategory.name}]]{{{ else }}}[[topic:moved]]{{{ end }}}
30
- </span>
31
- {{{each icons}}}<span>{@value}</span>{{{end}}}
32
- </span>
33
- <a class="lh-1" href="{config.relative_path}/category/{category.slug}">{function.buildCategoryLabel, category, "border"}</a>
34
- <div class="lh-1 tags tag-list d-flex hidden-xs gap-2"><!-- IMPORT partials/topic/tags.tpl --></div>
35
- <div class="d-flex hidden-xs gap-2">
36
- <!-- IMPORT partials/topic/stats.tpl -->
34
+ <a class="lh-1" href="{config.relative_path}/category/{category.slug}">{function.buildCategoryLabel, category, "border"}</a>
35
+ <div class="lh-1 tags tag-list d-flex hidden-xs gap-2"><!-- IMPORT partials/topic/tags.tpl --></div>
36
+ <div class="d-flex hidden-xs gap-2">
37
+ <!-- IMPORT partials/topic/stats.tpl -->
38
+ </div>
37
39
  </div>
38
- </div>
39
40
 
40
- <div class="row">
41
- <div class="topic {{{ if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
42
- <!-- IMPORT partials/post_bar.tpl -->
41
+ <div class="row">
42
+ <div class="topic {{{ if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
43
+ <!-- IMPORT partials/post_bar.tpl -->
43
44
 
44
- {{{ if merger }}}
45
- <!-- IMPORT partials/topic/merged-message.tpl -->
46
- {{{ end }}}
45
+ {{{ if merger }}}
46
+ <!-- IMPORT partials/topic/merged-message.tpl -->
47
+ {{{ end }}}
47
48
 
48
- {{{ if !scheduled }}}
49
- <!-- IMPORT partials/topic/deleted-message.tpl -->
50
- {{{ end }}}
49
+ {{{ if !scheduled }}}
50
+ <!-- IMPORT partials/topic/deleted-message.tpl -->
51
+ {{{ end }}}
51
52
 
52
- <ul component="topic" class="posts timeline mt-sm-4 p-0 py-3" data-tid="{tid}" data-cid="{cid}">
53
- {{{each posts}}}
54
- <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 -->>
55
- <a component="post/anchor" data-index="{posts.index}" id="{posts.index}"></a>
53
+ <div class="d-flex gap-0 gap-lg-5">
54
+ <ul component="topic" class="posts timeline mt-sm-2 p-0 py-3" style="min-width: 0;" data-tid="{tid}" data-cid="{cid}">
55
+ {{{each posts}}}
56
+ <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 -->>
57
+ <a component="post/anchor" data-index="{./index}" id="{increment(./index, "1")}"></a>
56
58
 
57
- <meta itemprop="datePublished" content="{posts.timestampISO}">
58
- <meta itemprop="dateModified" content="{posts.editedISO}">
59
+ <meta itemprop="datePublished" content="{./timestampISO}">
60
+ <meta itemprop="dateModified" content="{./editedISO}">
59
61
 
60
- <!-- IMPORT partials/topic/post.tpl -->
61
- </li>
62
- {{{ if (config.topicPostSort != "most_votes") }}}
63
- {{{ each ./events}}}
64
- <!-- IMPORT partials/topic/event.tpl -->
65
- {{{ end }}}
66
- {{{ end }}}
67
- {{{end}}}
68
- </ul>
62
+ <!-- IMPORT partials/topic/post.tpl -->
63
+ </li>
64
+ {{{ if (config.topicPostSort != "most_votes") }}}
65
+ {{{ each ./events}}}
66
+ <!-- IMPORT partials/topic/event.tpl -->
67
+ {{{ end }}}
68
+ {{{ end }}}
69
+ {{{end}}}
70
+ </ul>
69
71
 
70
- {{{ if browsingUsers }}}
71
- <div class="visible-xs">
72
- <!-- IMPORT partials/topic/browsing-users.tpl -->
73
- <hr/>
74
- </div>
75
- {{{ end }}}
72
+ <!-- IMPORT partials/topic/navigator.tpl -->
73
+ </div>
76
74
 
77
- {{{ if config.enableQuickReply }}}
78
- <!-- IMPORT partials/topic/quickreply.tpl -->
79
- {{{ end }}}
75
+ {{{ if browsingUsers }}}
76
+ <div class="visible-xs">
77
+ <!-- IMPORT partials/topic/browsing-users.tpl -->
78
+ <hr/>
79
+ </div>
80
+ {{{ end }}}
80
81
 
81
- {{{ if config.usePagination }}}
82
- <!-- IMPORT partials/paginator.tpl -->
83
- {{{ end }}}
84
- </div>
85
- <div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
86
- {{{each widgets.sidebar}}}
87
- {{widgets.sidebar.html}}
88
- {{{end}}}
82
+ {{{ if config.theme.enableQuickReply }}}
83
+ <!-- IMPORT partials/topic/quickreply.tpl -->
84
+ {{{ end }}}
85
+
86
+ {{{ if config.usePagination }}}
87
+ <!-- IMPORT partials/paginator.tpl -->
88
+ {{{ end }}}
89
+ </div>
90
+ <div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
91
+ {{{each widgets.sidebar}}}
92
+ {{widgets.sidebar.html}}
93
+ {{{end}}}
94
+ </div>
89
95
  </div>
90
96
  </div>
91
97
 
@@ -1,12 +1,14 @@
1
+ {{{ if widgets.header.length }}}
1
2
  <div data-widget-area="header">
2
3
  {{{each widgets.header}}}
3
4
  {{widgets.header.html}}
4
5
  {{{end}}}
5
6
  </div>
7
+ {{{ end }}}
6
8
  <div class="unread">
7
9
  <!-- IMPORT partials/topic-list-bar.tpl -->
8
10
  <div class="category">
9
- <div id="category-no-topics" class="alert alert-warning {{{ if topics.length }}}hidden{{{ end }}}">[[unread:no_unread_topics]]</div>
11
+ <div id="category-no-topics" class="alert alert-info {{{ if topics.length }}}hidden{{{ end }}}">[[unread:no_unread_topics]]</div>
10
12
 
11
13
  <!-- IMPORT partials/topics_list.tpl -->
12
14
  <button id="load-more-btn" class="btn btn-primary hide">[[unread:load_more]]</button>
@@ -4,7 +4,7 @@
4
4
  {{{end}}}
5
5
  </div>
6
6
  <div class="users">
7
- <h2 class="fw-semibold">[[global:users]]</h2>
7
+ <h3 class="fw-semibold">[[global:users]]</h3>
8
8
  <div class="d-flex flex-wrap justify-content-between">
9
9
  <div class="mb-2 mb-md-0">
10
10
  <!-- IMPORT partials/users_list_menu.tpl -->
@@ -12,7 +12,7 @@
12
12
  <div class="">
13
13
  <div class="d-flex justify-content-end gap-2">
14
14
  {{{ if showInviteButton }}}
15
- <button component="user/invite" class="btn btn-primary btn-sm"><i class="fa fa-user-plus"></i> [[users:invite]]</button>
15
+ <button component="user/invite" class="btn btn-primary btn-sm text-nowrap"><i class="fa fa-user-plus"></i> [[users:invite]]</button>
16
16
  {{{ end }}}
17
17
  {{{ if displayUserSearch }}}
18
18
  <div class="search">
@@ -29,7 +29,11 @@
29
29
  </div>
30
30
  <hr/>
31
31
 
32
- <!-- IMPORT partials/users_list.tpl -->
32
+ <div id="users-container" class="users-container row row-cols-2 row-cols-md-3 row-cols-lg-4 row-cols-xl-5 g-4">
33
+ {{{ each users }}}
34
+ <!-- IMPORT partials/users/item.tpl -->
35
+ {{{ end }}}
36
+ </div>
33
37
 
34
38
  <!-- IMPORT partials/paginator.tpl -->
35
39
  </div>
@@ -1,39 +0,0 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
- <div class="persona-usercard">
4
- <a href="{config.relative_path}/user/{userslug}">
5
- <!-- IF picture -->
6
- <div class="usercard-picture" style="background-image:url({picture})"></div>
7
- <!-- ELSE -->
8
- <div class="usercard-picture" style="background-color: {icon:bgColor};">{icon:text}</div>
9
- <!-- ENDIF picture -->
10
- </a>
11
- <div class="usercard-body">
12
- <a href="{config.relative_path}/user/{userslug}">
13
- <span class="usercard-name"><!-- IF fullname -->{fullname}<!-- ELSE -->{username}<!-- ENDIF fullname --></span><br />
14
- <span class="usercard-username"><!-- IF !banned -->@{username}<!-- ELSE -->[[user:banned]]<!-- ENDIF !banned --></span>
15
- <!-- IF !banned -->
16
- <i component="user/status" class="fa fa-circle status {status}" title="[[global:{status}]]"></i>
17
- <!-- ENDIF !banned -->
18
- </a>
19
-
20
- <div class="row usercard-info">
21
- <div class="col-4">
22
- <small>[[global:posts]]</small>
23
- <span class="human-readable-number">{postcount}</span>
24
- </div>
25
- <div class="col-4">
26
- <small>[[global:reputation]]</small>
27
- <span class="human-readable-number">{reputation}</span>
28
- </div>
29
-
30
- <button class="btn-morph persona-fab <!-- IF banned --> hide<!-- ENDIF banned -->">
31
- <span>
32
- <span class="s1"></span>
33
- <span class="s2"></span>
34
- <span class="s3"></span>
35
- </span>
36
- </button>
37
- </div>
38
- </div>
39
- </div>
@@ -1,11 +0,0 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
- <div class="form-group">
4
- <label for="agree-terms">[[register:terms_of_use]]</label>
5
- <div class="tos">{termsOfUse}</div>
6
- <div class="checkbox">
7
- <label>
8
- <input type="checkbox" name="agree-terms" id="agree-terms"> [[register:agree_to_terms_of_use]]
9
- </label>
10
- </div>
11
- </div>
@@ -1,30 +0,0 @@
1
- <button type="button" class="btn-ghost-sm d-flex gap-2 align-items-baseline dropdown-toggle" data-bs-toggle="dropdown">
2
- {{{ if selectedCategory }}}
3
- <span class="category-item">
4
- {buildCategoryIcon(selectedCategory, "20px", "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 link-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" autocomplete="off">
13
- </div>
14
- <ul component="category/list" class="dropdown-menu category-dropdown-menu" role="menu">
15
- <li role="presentation" class="category" data-all="all">
16
- <a class="dropdown-item" role="menu-item" href="{config.relative_path}/{allCategoriesUrl}"><i component="category/select/icon" class="fa fa-fw fa-check {{{if selectedCategory}}}invisible{{{end}}}"></i> [[unread:all_categories]]</a>
17
- </li>
18
- {{{each categoryItems}}}
19
- <li role="presentation" class="category {{{ if ../disabledClass }}}disabled{{{ end }}}" data-cid="{../cid}" data-parent-cid="{../parentCid}" data-name="{../name}">
20
- <a class="dropdown-item" role="menu-item" href="#">{../level}<i component="category/select/icon" class="fa fa-fw fa-check {{{ if !../selected }}}invisible{{{ end }}}"></i>
21
- <span component="category-markup" style="{{{ if ../match }}}font-weight: bold;{{{end}}}">
22
- <div class="category-item d-inline-block">
23
- {buildCategoryIcon(@value, "24px", "rounded-circle")}
24
- {./name}
25
- </div>
26
- </span>
27
- </a>
28
- </li>
29
- {{{end}}}
30
- </ul>
@@ -1,5 +0,0 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
- <div component="category/dropdown" class="btn-group right category-dropdown-container bottom-sheet">
4
- <!-- IMPORT partials/category-filter-content.tpl -->
5
- </div>
@@ -1,3 +0,0 @@
1
- <div component="category/dropdown" class="btn-group category-dropdown-container bottom-sheet">
2
- <!-- IMPORT partials/category-filter-content.tpl -->
3
- </div>
@@ -1,5 +0,0 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
- <div component="category-selector" class="btn-group right category-dropdown-container bottom-sheet">
4
- <!-- IMPORT partials/category-selector-content.tpl -->
5
- </div>
@@ -1,3 +0,0 @@
1
- <div component="category-selector" class="btn-group bottom-sheet">
2
- <!-- IMPORT partials/category-selector-content.tpl -->
3
- </div>
@@ -1,6 +0,0 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
- <section class="menu-section" data-section="navigation">
4
- <ul class="menu-section-list text-bg-dark"></ul>
5
- </section>
6
-