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.
Files changed (94) hide show
  1. package/README.md +3 -0
  2. package/library.js +1 -7
  3. package/package-lock.json +372 -402
  4. package/package.json +2 -2
  5. package/plugin.json +1 -2
  6. package/public/harmony.js +15 -15
  7. package/scss/common.scss +2 -8
  8. package/scss/harmony.scss +0 -1
  9. package/scss/header.scss +1 -1
  10. package/scss/mixins.scss +12 -5
  11. package/scss/modules/cover.scss +2 -4
  12. package/scss/modules/topics-list.scss +1 -1
  13. package/scss/overrides.scss +4 -0
  14. package/scss/sidebar.scss +18 -19
  15. package/scss/skins.scss +9 -0
  16. package/scss/topic.scss +4 -12
  17. package/templates/account/blocks.tpl +18 -7
  18. package/templates/account/categories.tpl +1 -1
  19. package/templates/account/consent.tpl +2 -2
  20. package/templates/account/edit/password.tpl +8 -8
  21. package/templates/account/edit/username.tpl +2 -3
  22. package/templates/account/edit.tpl +30 -15
  23. package/templates/account/info.tpl +142 -73
  24. package/templates/account/posts.tpl +7 -7
  25. package/templates/account/profile.tpl +19 -22
  26. package/templates/account/read.tpl +1 -0
  27. package/templates/account/settings.tpl +5 -5
  28. package/templates/account/shares.tpl +20 -0
  29. package/templates/account/topics.tpl +6 -5
  30. package/templates/admin/plugins/harmony.tpl +1 -0
  31. package/templates/footer.tpl +1 -1
  32. package/templates/groups/list.tpl +9 -7
  33. package/templates/notifications.tpl +1 -1
  34. package/templates/partials/account/header.tpl +15 -15
  35. package/templates/partials/account/sidebar-left.tpl +30 -16
  36. package/templates/partials/breadcrumbs-json-ld.tpl +15 -25
  37. package/templates/partials/categories/item.tpl +8 -8
  38. package/templates/partials/categories/lastpost.tpl +1 -1
  39. package/templates/partials/category/subcategory.tpl +1 -1
  40. package/templates/partials/groups/list.tpl +1 -1
  41. package/templates/partials/groups/memberlist.tpl +1 -1
  42. package/templates/partials/groups/sidebar-left.tpl +8 -8
  43. package/templates/partials/header/brand.tpl +3 -1
  44. package/templates/partials/mobile-footer.tpl +3 -6
  45. package/templates/partials/notifications_list.tpl +2 -2
  46. package/templates/partials/post_bar.tpl +3 -5
  47. package/templates/partials/posts_list_item.tpl +1 -1
  48. package/templates/partials/quick-search-results.tpl +5 -5
  49. package/templates/partials/search-filters.tpl +1 -1
  50. package/templates/partials/search-results.tpl +1 -1
  51. package/templates/partials/sidebar/chats.tpl +1 -1
  52. package/templates/partials/sidebar/notifications.tpl +1 -1
  53. package/templates/partials/sidebar/search.tpl +2 -2
  54. package/templates/partials/sidebar-left.tpl +2 -5
  55. package/templates/partials/tags_list.tpl +6 -4
  56. package/templates/partials/topic/event.tpl +1 -1
  57. package/templates/partials/topic/navigator.tpl +2 -2
  58. package/templates/partials/topic/post-menu-list.tpl +20 -4
  59. package/templates/partials/topic/post-menu.tpl +3 -29
  60. package/templates/partials/topic/post.tpl +108 -101
  61. package/templates/partials/topic/quickreply.tpl +2 -2
  62. package/templates/partials/topic/reply-button.tpl +4 -2
  63. package/templates/partials/topic/sort.tpl +1 -1
  64. package/templates/partials/topic/thumbs.tpl +1 -1
  65. package/templates/partials/topic/tools.tpl +2 -6
  66. package/templates/partials/topic/watch.tpl +1 -1
  67. package/templates/partials/topic-filters.tpl +1 -1
  68. package/templates/partials/topic-list-bar.tpl +6 -6
  69. package/templates/partials/topic-terms.tpl +1 -1
  70. package/templates/partials/topics_list.tpl +12 -4
  71. package/templates/partials/users/item.tpl +33 -31
  72. package/templates/partials/users_list_menu.tpl +5 -5
  73. package/templates/post-queue.tpl +6 -2
  74. package/templates/recent.tpl +7 -0
  75. package/templates/topic.tpl +81 -88
  76. package/templates/users.tpl +2 -2
  77. package/templates/world.tpl +32 -1
  78. package/scss/modules/bottom-sheet.scss +0 -52
  79. package/templates/flags/detail.tpl +0 -179
  80. package/templates/flags/list.tpl +0 -6
  81. package/templates/login.tpl +0 -102
  82. package/templates/partials/category/filter-dropdown-content.tpl +0 -41
  83. package/templates/partials/category/selector-dropdown-content.tpl +0 -39
  84. package/templates/partials/category/sort.tpl +0 -39
  85. package/templates/partials/category/tools.tpl +0 -89
  86. package/templates/partials/category/watch.tpl +0 -67
  87. package/templates/partials/flags/bulk-actions.tpl +0 -9
  88. package/templates/partials/flags/filters.tpl +0 -189
  89. package/templates/partials/flags/results.tpl +0 -38
  90. package/templates/partials/groups/filter-dropdown-content.tpl +0 -25
  91. package/templates/partials/tags/filter-dropdown-content.tpl +0 -38
  92. package/templates/partials/tags/watch.tpl +0 -42
  93. package/templates/partials/users/filter-dropdown-content.tpl +0 -23
  94. package/templates/register.tpl +0 -104
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-theme-harmony",
3
- "version": "2.0.0-pre.9",
3
+ "version": "2.0.0",
4
4
  "nbbpm": {
5
5
  "compatibility": "^3.7.0"
6
6
  },
@@ -41,7 +41,7 @@
41
41
  "@fontsource/poppins": "5.0.8"
42
42
  },
43
43
  "devDependencies": {
44
- "eslint": "^8.0.0",
44
+ "eslint": "^9.0.0",
45
45
  "eslint-config-nodebb": "^0.2.0",
46
46
  "eslint-plugin-import": "^2.24.2"
47
47
  }
package/plugin.json CHANGED
@@ -8,8 +8,7 @@
8
8
  { "hook": "filter:settings.get", "method": "getAdminSettings"},
9
9
  { "hook": "filter:user.saveSettings", "method": "saveUserSettings" },
10
10
  { "hook": "filter:user.profileMenu", "method": "addProfileItem" },
11
- { "hook": "filter:middleware.renderHeader", "method": "filterMiddlewareRenderHeader" },
12
- { "hook": "filter:teasers.configureStripTags", "method": "filterTeasersConfigureStripTags"}
11
+ { "hook": "filter:middleware.renderHeader", "method": "filterMiddlewareRenderHeader" }
13
12
  ],
14
13
  "scripts": [
15
14
  "public/harmony.js"
package/public/harmony.js CHANGED
@@ -72,7 +72,7 @@ $(document).ready(function () {
72
72
  return !!$('[component="bottombar"] [component="sidebar/search"] .search-dropdown.show').length;
73
73
  }
74
74
 
75
- let lastScrollTop = 0;
75
+ let lastScrollTop = $window.scrollTop();
76
76
  let newPostsLoaded = false;
77
77
 
78
78
  function onWindowScroll() {
@@ -86,7 +86,7 @@ $(document).ready(function () {
86
86
  const diff = Math.abs(st - lastScrollTop);
87
87
  const scrolledDown = st > lastScrollTop;
88
88
  const scrolledUp = st < lastScrollTop;
89
- if (diff > 5) {
89
+ if (diff > 10) {
90
90
  bottomBar.css({
91
91
  bottom: !scrolledUp && scrolledDown ?
92
92
  -bottomBar.find('.bottombar-nav').outerHeight(true) :
@@ -115,8 +115,10 @@ $(document).ready(function () {
115
115
  });
116
116
  hooks.on('action:ajaxify.end', function () {
117
117
  $window.off('scroll', delayedScroll);
118
- bottomBar.css({ bottom: 0 });
119
- setTimeout(enableAutohide, 250);
118
+ if (config.theme.autohideBottombar) {
119
+ bottomBar.css({ bottom: 0 });
120
+ setTimeout(enableAutohide, 250);
121
+ }
120
122
  });
121
123
  });
122
124
  }
@@ -252,20 +254,18 @@ $(document).ready(function () {
252
254
  return;
253
255
  }
254
256
  ['notifications', 'chat'].forEach((type) => {
255
- const countEl = document.querySelector(`[component="${type}/count"]`);
256
- if (!countEl) {
257
+ const countEl = $(`nav.sidebar [component="${type}/count"]`).first();
258
+ if (!countEl.length) {
257
259
  return;
258
260
  }
259
- const count = parseInt(countEl.innerText, 10);
261
+ const count = parseInt(countEl.text(), 10);
260
262
  if (count > 1) {
261
- const listEls = document.querySelectorAll(`[component="${type}/list"]`);
262
- listEls.forEach((listEl) => {
263
- const placeholder = listEl.querySelector('*');
264
- if (placeholder) {
265
- for (let x = 0; x < count - 1; x++) {
266
- const cloneEl = placeholder.cloneNode(true);
267
- listEl.insertBefore(cloneEl, placeholder);
268
- }
263
+ const listEls = $(`.dropdown-menu [component="${type}/list"]`);
264
+ listEls.each((index, el) => {
265
+ const placeholder = $(el).children().first();
266
+ for (let x = 0; x < count - 1; x++) {
267
+ const cloneEl = placeholder.clone(true);
268
+ cloneEl.insertAfter(placeholder);
269
269
  }
270
270
  });
271
271
  }
package/scss/common.scss CHANGED
@@ -90,13 +90,6 @@ body:not(.page-user) {
90
90
  background-color: initial;
91
91
  }
92
92
 
93
- .btn-link {
94
- &:hover, &.active {
95
- background-color: var(--btn-ghost-hover-color);
96
- text-decoration: none;
97
- }
98
- }
99
-
100
93
  .flex-basis-md-200 {
101
94
  @include media-breakpoint-up(md) {
102
95
  flex-basis: 200px!important;
@@ -124,6 +117,7 @@ body:not(.page-user) {
124
117
  [component="chat/message/body"],
125
118
  [component="post/content"],
126
119
  [component="topic/teaser"] .post-content,
127
- [component="category/posts"] .post-content {
120
+ [component="category/posts"] .post-content,
121
+ .post-queue.posts-list .post-content {
128
122
  a { text-decoration: underline;}
129
123
  }
package/scss/harmony.scss CHANGED
@@ -15,7 +15,6 @@
15
15
  @import "modules/breadcrumbs";
16
16
  @import "modules/tags";
17
17
  @import "modules/user-menu";
18
- @import "modules/bottom-sheet";
19
18
  @import "modules/topic-navigator";
20
19
  @import "modules/topics-list";
21
20
  @import "modules/cover";
package/scss/header.scss CHANGED
@@ -1,5 +1,5 @@
1
1
  // hide brand/title on user and group details pages so it doesnt break covers
2
- .page-user, .template-groups-details {
2
+ body[class*="template-account-"], .template-chats, .template-groups-details {
3
3
  .brand-container {
4
4
  display: none;
5
5
  }
package/scss/mixins.scss CHANGED
@@ -5,18 +5,25 @@
5
5
  line-height: calc(var(--avatar-size) - 4px);
6
6
  }
7
7
 
8
- [component="user/status"] {
9
- top: 20px;
10
- left: 12px;
8
+ [component="user/locality"] {
9
+ transform: translate(-75%, -100%);
10
+ z-index: 2;
11
+ background-color: $body-bg;
12
+ font-size: .5rem;
13
+ }
11
14
 
15
+ [component="user/status"] {
16
+ transform: translate(-80%, -100%);
12
17
  z-index: 2;
13
18
  }
14
19
 
15
20
  @include media-breakpoint-up(sm) {
16
21
  [component="user/status"] {
17
22
  padding: 5px;
18
- top: 36px;
19
- left: 36px;
23
+ }
24
+
25
+ [component="user/locality"] {
26
+ font-size: .75rem;
20
27
  }
21
28
  }
22
29
  }
@@ -10,10 +10,8 @@
10
10
  left: auto;
11
11
  right: 0px;
12
12
 
13
- &:hover {
14
- .controls {
15
- opacity: 1;
16
- }
13
+ &:hover .controls, .controls:focus-within {
14
+ opacity: 1;
17
15
  }
18
16
 
19
17
  .controls {
@@ -1,7 +1,7 @@
1
1
  ul.topics-list, ul.categories-list {
2
2
  li {
3
3
  &.deleted {
4
- .meta, .topic-thumbs { display: none!important; }
4
+ .meta, .topic-thumbs { visibility: hidden!important; }
5
5
  opacity: 0.65;
6
6
  }
7
7
 
@@ -35,6 +35,10 @@ $text-muted: $gray-600 !default;
35
35
  $border-color: $gray-200 !default;
36
36
  $link-color: #0951be !default;
37
37
 
38
+ $form-check-input-border: var(--bs-border-width) solid $gray-500 !default;
39
+
40
+ $input-placeholder-color: $gray-600!important;
41
+
38
42
  // no caret on dropdown-toggle
39
43
  $enable-caret: false;
40
44
 
package/scss/sidebar.scss CHANGED
@@ -138,6 +138,9 @@
138
138
  }
139
139
 
140
140
  .bottombar-nav {
141
+ #user_dropdown .avatar {
142
+ margin: 2px 0; // fixes the avatar so its height is same as the icons on right sidebar
143
+ }
141
144
  .nav-text {
142
145
  font-size: 1rem;
143
146
  color: $body-color;
@@ -154,36 +157,32 @@
154
157
  line-height: 12px;
155
158
  }
156
159
 
160
+ .dropdown-menu {
161
+ left: 0!important;
162
+ right: 0!important;
163
+ box-shadow: none!important;
164
+ border-left: 0;
165
+ border-right: 0;
166
+ border-radius: 0;
167
+ .list-container {
168
+ max-height: 60vh!important;
169
+ overflow-y: auto!important;
170
+ }
171
+ }
172
+
157
173
  .navigation-dropdown, .user-dropdown {
158
174
  > li {
159
175
  > a, .dropdown-item {
160
176
  padding: 10px 20px!important;
161
177
  }
162
178
  }
163
- left: 0!important;
164
- right: 0!important;
165
- bottom: $spacer*0.5!important;
166
- box-shadow: none!important;
179
+
167
180
  max-height: 60vh!important;
168
181
  overflow: auto!important;
169
182
  }
183
+
170
184
  .search-dropdown .quick-search-results {
171
185
  max-height: 225px!important;
172
186
  overflow-y: auto!important;
173
187
  }
174
- .search-dropdown, .chats-dropdown, .notifications-dropdown, .drafts-dropdown {
175
- left: 0 !important;
176
- right: 0 !important;
177
- box-shadow: none!important;
178
-
179
- border-left: 0;
180
- border-right: 0;
181
- border-bottom: 0;
182
- border-radius: 0;
183
-
184
- .list-container {
185
- max-height: 60vh!important;
186
- overflow-y: auto!important;
187
- }
188
- }
189
188
  }
package/scss/skins.scss CHANGED
@@ -3,6 +3,15 @@
3
3
  [component="post"] .icon {
4
4
  background-color: transparent !important;
5
5
  }
6
+ .form-control::placeholder {
7
+ color:$gray-100!important;
8
+ }
9
+ }
10
+
11
+ .skin-solar {
12
+ .form-control::placeholder {
13
+ color:$gray-100!important;
14
+ }
6
15
  }
7
16
 
8
17
  .skin-quartz, .skin-lux, .skin-morph {
package/scss/topic.scss CHANGED
@@ -9,11 +9,6 @@ body.template-topic {
9
9
  }
10
10
 
11
11
  .posts {
12
- // fixes code blocks pushing content out on mobile
13
- @include media-breakpoint-down(md) {
14
- max-width: calc(100vw - $grid-gutter-width);
15
- }
16
-
17
12
  &.timeline {
18
13
  @include timeline-style;
19
14
  }
@@ -27,10 +22,6 @@ body.template-topic {
27
22
  }
28
23
  }
29
24
 
30
- > [component="post"] > [component="post/footer"] {
31
- margin-left: calc($spacer * 2.5);
32
- }
33
-
34
25
  [component="post"] {
35
26
  &.selected .post-container {
36
27
  background-color: mix($body-bg, $body-color, 90%);
@@ -101,6 +92,7 @@ body.template-topic {
101
92
  &:last-of-type {
102
93
  padding-bottom: 0;
103
94
  .post-footer {
95
+ padding-bottom: 0!important;
104
96
  border-bottom: none !important;
105
97
  }
106
98
  }
@@ -108,12 +100,12 @@ body.template-topic {
108
100
  }
109
101
 
110
102
 
111
- [component="topic/thumb/list"] {
103
+ [component="topic/thumb/list"] > a{
112
104
  height: calc($font-size-base * 4);
113
105
  }
114
106
  }
115
107
 
116
- @include media-breakpoint-up(sm) {
108
+ @include media-breakpoint-up(lg) {
117
109
  body.template-topic {
118
110
  .topic .posts {
119
111
  [component="post"] {
@@ -129,7 +121,7 @@ body.template-topic {
129
121
  opacity: 1;
130
122
  }
131
123
  &:hover {
132
- > .post-footer > [component="post/actions"] {
124
+ > div > .post-container > [component="post/footer"] > div > [component="post/actions"] {
133
125
  opacity: 1;
134
126
  }
135
127
  }
@@ -7,14 +7,21 @@
7
7
  <input class="form-control form-control-sm" type="text" id="user-search" placeholder="[[users:enter-username]]" data-bs-toggle="dropdown" autocomplete="off" aria-haspopup="true" aria-expanded="false"/>
8
8
 
9
9
  <ul component="blocks/search/list" class="dropdown-menu dropdown-menu-end p-1 text-sm block-edit overflow-auto" style="max-height:300px;" role="menu">
10
- <li><a href="#" class="dropdown-item" role="menuitem">[[admin/menu:search.start-typing]]</a></li>
10
+ <li component="blocks/start-typing">
11
+ <a href="#" class="dropdown-item rounded-1" role="menuitem">[[admin/menu:search.start-typing]]</a>
12
+ </li>
13
+ <li component="blocks/no-users" class="hidden">
14
+ <a href="#" class="dropdown-item rounded-1" role="menuitem">[[users:no-users-found]]</a>
15
+ </li>
11
16
  {{{ each edit }}}
12
- <li>
13
- <div class="dropdown-item d-flex flex-nowrap gap-2 justify-content-between" role="menuitem">
17
+ <li component="blocks/search/match">
18
+ <div class="dropdown-item rounded-1 d-flex flex-nowrap gap-4 justify-content-between align-items-center" role="menuitem">
14
19
  <div class="text-truncate">
15
20
  <a href="{config.relative_path}/uid/{./uid}" class="text-decoration-none">{buildAvatar(edit, "24px", true)} {./username}</a>
16
21
  </div>
17
- <button class="btn btn-sm btn-primary text-nowrap" data-uid="{./uid}" data-action="toggle">[[user:block-toggle]]</button>
22
+
23
+ <button class="btn btn-sm btn-outline-danger text-nowrap {{{ if ./isBlocked }}}hidden{{{ end }}}" data-uid="{./uid}" data-action="block">[[user:block-user]]</button>
24
+ <button class="btn btn-sm btn-outline-primary text-nowrap {{{ if !./isBlocked }}}hidden{{{ end }}}" data-uid="{./uid}" data-action="unblock">[[user:unblock-user]]</button>
18
25
  </div>
19
26
  </li>
20
27
  {{{ end }}}
@@ -28,12 +35,16 @@
28
35
  </div>
29
36
  </div>
30
37
  <div class="users">
31
- <div id="users-container" class="row row-cols-2 row-cols-lg-3 row-cols-xl-4 g-2">
38
+ <div class="alert alert-warning text-center m-0"{{{ if users.length }}} style="display: none;"{{{ end }}}>[[user:has-no-blocks]]</div>
39
+
40
+ <div id="users-container" class="row row-cols-2 row-cols-lg-3 row-cols-xl-4 g-3">
32
41
  {{{ each users }}}
33
- <!-- IMPORT partials/users/item.tpl -->
42
+ <div class="d-flex flex-column gap-1">
43
+ <!-- IMPORT partials/users/item.tpl -->
44
+ <button class="btn btn-sm btn-outline-primary text-nowrap mx-auto" data-uid="{./uid}" data-action="unblock">[[user:unblock-user]]</button>
45
+ </div>
34
46
  {{{ end }}}
35
47
  </div>
36
- <div class="alert alert-warning text-center"{{{ if users.length }}} style="display: none;"{{{ end }}}>[[user:has-no-blocks]]</div>
37
48
  <!-- IMPORT partials/paginator.tpl -->
38
49
  </div>
39
50
 
@@ -7,7 +7,7 @@
7
7
 
8
8
  <div class="d-flex gap-1">
9
9
  <div class="btn-group bottom-sheet" component="category/watch/all">
10
- <button class="btn-ghost-sm ff-secondary fw-semibold dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" type="button">
10
+ <button class="btn btn-ghost btn-sm ff-secondary fw-semibold dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" type="button">
11
11
  <span>[[user:change-all]]</span>
12
12
  </button>
13
13
  <ul class="dropdown-menu p-1 text-sm dropdown-menu-end" role="menu">
@@ -9,9 +9,9 @@
9
9
  <div class="row">
10
10
  <div class="col-sm-6">
11
11
  {{{ if gdpr_consent }}}
12
- <div class="alert alert-success">
13
- <i class="fa fa-check float-end fa-3x"></i>
12
+ <div class="alert alert-success d-flex gap-3">
14
13
  [[user:consent.received]]
14
+ <i class="fa fa-check fa-3x"></i>
15
15
  </div>
16
16
  {{{ else }}}
17
17
  <div class="alert alert-warning">
@@ -7,22 +7,22 @@
7
7
  <!-- disables autocomplete on FF --><input type="password" style="display:none">
8
8
 
9
9
  {{{ if isSelf }}}
10
- <div class="mb-2">
11
- <label class="form-label fw-semibold text-xm" for="inputCurrentPassword">[[user:current-password]]</label>
10
+ <div class="mb-3">
11
+ <label class="form-label fw-semibold text-sm" for="inputCurrentPassword">[[user:current-password]]</label>
12
12
  <input autocomplete="off" class="form-control" type="password" id="inputCurrentPassword" placeholder="[[user:current-password]]" value="" {{{ if !hasPassword }}} disabled{{{ end }}}>
13
13
  </div>
14
14
  {{{ end }}}
15
15
 
16
- <div class="mb-2">
17
- <label class="form-label fw-semibold text-xm" for="inputNewPassword">[[user:new-password]]</label>
16
+ <div class="mb-3">
17
+ <label class="form-label fw-semibold text-sm" for="inputNewPassword">[[user:new-password]]</label>
18
18
  <input class="form-control" type="password" id="inputNewPassword" placeholder="[[user:password]]" value="">
19
- <span class="form-feedback" id="password-notify"></span>
19
+ <span class="form-text" id="password-notify"></span>
20
20
  </div>
21
21
 
22
- <div class="mb-2">
23
- <label class="form-label fw-semibold text-xm" for="inputNewPasswordAgain">[[user:confirm-password]]</label>
22
+ <div class="mb-3">
23
+ <label class="form-label fw-semibold text-sm" for="inputNewPasswordAgain">[[user:confirm-password]]</label>
24
24
  <input class="form-control" type="password" id="inputNewPasswordAgain" placeholder="[[user:confirm-password]]" value="">
25
- <span class="form-feedback" id="password-confirm-notify"></span>
25
+ <span class="form-text" id="password-confirm-notify"></span>
26
26
  </div>
27
27
 
28
28
  <div class="form-actions">
@@ -4,7 +4,7 @@
4
4
  <div class="row">
5
5
  <div class="col-12 col-lg-4">
6
6
  <form class="edit-form">
7
- <div class="mb-2">
7
+ <div class="mb-3">
8
8
  <label class="form-label fw-semibold text-sm" for="inputNewUsername">[[user:username]]</label>
9
9
  <input class="form-control" type="text" id="inputNewUsername" placeholder="[[user:username]]" value="{username}">
10
10
  </div>
@@ -12,7 +12,7 @@
12
12
  <!-- disables autocomplete on FF --><input type="password" style="display:none">
13
13
 
14
14
  {{{ if isSelf }}}
15
- <div class="mb-2">
15
+ <div class="mb-3">
16
16
  <label class="form-label fw-semibold text-sm" for="inputCurrentPassword">[[user:current-password]]</label>
17
17
  <input autocomplete="off" class="form-control" type="password" id="inputCurrentPassword" placeholder="[[user:current-password]]" value=""{{{ if !hasPassword }}} disabled{{{ end }}}>
18
18
  </div>
@@ -20,7 +20,6 @@
20
20
 
21
21
  <input type="hidden" name="uid" id="inputUID" value="{uid}" />
22
22
 
23
- <br/>
24
23
  <div class="form-actions">
25
24
  <button id="submitBtn" class="btn btn-primary btn-block"><i class="hide fa fa-spinner fa-spin"></i> [[user:change-username]]</button>
26
25
  </div>
@@ -1,6 +1,6 @@
1
1
  <!-- IMPORT partials/account/header.tpl -->
2
2
 
3
- <div class="d-flex justify-content-between py-1 mb-3 align-items-center position-sticky top-0 bg-body">
3
+ <div class="d-flex justify-content-between py-1 mb-3 align-items-center position-sticky top-0 bg-body z-1">
4
4
  <h3 class="fw-semibold fs-5 mb-0">{{{ if isSelf }}}[[user:edit-profile]]{{{ else }}}[[pages:account/edit, {username}]]{{{ end }}}</h3>
5
5
  <button id="submitBtn" class="btn btn-sm btn-primary">[[global:save-changes]]</button>
6
6
  </div>
@@ -12,23 +12,37 @@
12
12
  <input class="form-control" type="text" id="fullname" name="fullname" placeholder="[[user:fullname]]" value="{fullname}">
13
13
  </div>
14
14
 
15
- {{{ if allowWebsite }}}
16
15
  <div class="mb-3">
17
- <label class="form-label fw-bold" for="website">[[user:website]]</label>
18
- <input class="form-control" type="text" id="website" name="website" placeholder="http://..." value="{website}">
16
+ <label class="form-label fw-bold" for="birthday">[[user:birthday]]</label>
17
+ <input class="form-control" type="date" id="birthday" name="birthday" value="{birthday}" placeholder="mm/dd/yyyy">
19
18
  </div>
20
- {{{ end }}}
21
19
 
20
+ {{{ each customUserFields }}}
22
21
  <div class="mb-3">
23
- <label class="form-label fw-bold" for="location">[[user:location]]</label>
24
- <input class="form-control" type="text" id="location" name="location" placeholder="[[user:location]]" value="{location}">
25
- </div>
22
+ <label class="form-label fw-bold" for="{./key}">{./name}</label>
23
+ {{{ if ((./type == "input-text") || (./type == "input-link")) }}}
24
+ <input class="form-control" type="text" id="{./key}" name="{./key}" value="{./value}">
25
+ {{{ end }}}
26
26
 
27
- <div class="mb-3">
28
- <label class="form-label fw-bold" for="birthday">[[user:birthday]]</label>
29
- <input class="form-control" type="date" id="birthday" name="birthday" value="{birthday}" placeholder="mm/dd/yyyy">
27
+ {{{ if (./type == "input-number") }}}
28
+ <input class="form-control" type="number" id="{./key}" name="{./key}" value="{./value}">
29
+ {{{ end }}}
30
+
31
+ {{{ if (./type == "input-date") }}}
32
+ <input class="form-control" type="date" id="{./key}" name="{./key}" value="{./value}">
33
+ {{{ end }}}
34
+
35
+ {{{ if ((./type == "select") || (./type == "select-multi")) }}}
36
+ <select class="form-select" id="{./key}" name="{./key}" {{{ if (./type == "select-multi") }}} multiple{{{ end }}}>
37
+ {{{ each ./select-options}}}
38
+ <option value="{./value}" {{{ if ./selected }}}selected{{{ end }}}>{./value}</option>
39
+ {{{ end }}}
40
+ </select>
41
+ {{{ end }}}
30
42
  </div>
43
+ {{{ end }}}
31
44
 
45
+ {{{ if groups.length }}}
32
46
  <div class="mb-3">
33
47
  <label class="form-label fw-bold" for="groupTitle">[[user:grouptitle]]</label>
34
48
 
@@ -37,17 +51,18 @@
37
51
  <div component="group/badge/item" class="d-flex gap-2 justify-content-between align-items-center" data-value="{./displayName}" data-selected="{./selected}">
38
52
  <!-- IMPORT partials/groups/badge.tpl -->
39
53
  <div class="d-flex gap-1">
40
- <button component="group/toggle/hide" type="button" class="btn-ghost-sm {{{ if !./selected }}}hidden{{{ end }}}" title="[[user:hide-group-title]]"><i class="fa fa-fw fa-eye"></i></button>
41
- <button component="group/toggle/show" type="button" class="btn-ghost-sm {{{ if ./selected }}}hidden{{{ end }}}" title="[[user:show-group-title]]"><i class="fa fa-fw fa-eye-slash"></i></button>
54
+ <button component="group/toggle/hide" type="button" class="btn btn-ghost btn-sm {{{ if !./selected }}}hidden{{{ end }}}" title="[[user:hide-group-title]]"><i class="fa fa-fw fa-eye"></i></button>
55
+ <button component="group/toggle/show" type="button" class="btn btn-ghost btn-sm {{{ if ./selected }}}hidden{{{ end }}}" title="[[user:show-group-title]]"><i class="fa fa-fw fa-eye-slash"></i></button>
42
56
  {{{ if allowMultipleBadges }}}
43
- <button component="group/order/up" type="button" class="btn-ghost-sm" title="[[user:order-group-up]]"><i class="fa fa-fw fa-chevron-up"></i></button>
44
- <button component="group/order/down" type="button" class="btn-ghost-sm" title="[[user:order-group-down]]"><i class="fa fa-fw fa-chevron-down"></i></button>
57
+ <button component="group/order/up" type="button" class="btn btn-ghost btn-sm" title="[[user:order-group-up]]"><i class="fa fa-fw fa-chevron-up"></i></button>
58
+ <button component="group/order/down" type="button" class="btn btn-ghost btn-sm" title="[[user:order-group-down]]"><i class="fa fa-fw fa-chevron-down"></i></button>
45
59
  {{{ end }}}
46
60
  </div>
47
61
  </div>
48
62
  {{{ end }}}
49
63
  </div>
50
64
  </div>
65
+ {{{ end }}}
51
66
 
52
67
  {{{ if allowAboutMe }}}
53
68
  <div class="mb-3">