nodebb-theme-harmony 2.0.0-pre.4 → 2.0.0-pre.41

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 (87) hide show
  1. package/README.md +3 -0
  2. package/library.js +1 -7
  3. package/package.json +2 -2
  4. package/plugin.json +1 -2
  5. package/public/harmony.js +17 -20
  6. package/scss/common.scss +2 -8
  7. package/scss/harmony.scss +0 -1
  8. package/scss/header.scss +1 -1
  9. package/scss/mixins.scss +12 -5
  10. package/scss/modules/topics-list.scss +1 -1
  11. package/scss/overrides.scss +2 -0
  12. package/scss/topic.scss +3 -11
  13. package/templates/account/blocks.tpl +18 -7
  14. package/templates/account/categories.tpl +1 -1
  15. package/templates/account/consent.tpl +2 -2
  16. package/templates/account/edit/password.tpl +8 -8
  17. package/templates/account/edit/username.tpl +2 -3
  18. package/templates/account/edit.tpl +24 -4
  19. package/templates/account/info.tpl +142 -73
  20. package/templates/account/posts.tpl +7 -7
  21. package/templates/account/profile.tpl +16 -1
  22. package/templates/account/read.tpl +1 -0
  23. package/templates/account/settings.tpl +5 -5
  24. package/templates/account/topics.tpl +6 -5
  25. package/templates/admin/plugins/harmony.tpl +1 -0
  26. package/templates/footer.tpl +1 -1
  27. package/templates/groups/list.tpl +6 -6
  28. package/templates/notifications.tpl +1 -1
  29. package/templates/partials/account/header.tpl +6 -6
  30. package/templates/partials/account/sidebar-left.tpl +21 -16
  31. package/templates/partials/breadcrumbs-json-ld.tpl +15 -25
  32. package/templates/partials/buttons/newTopic.tpl +1 -1
  33. package/templates/partials/categories/item.tpl +3 -3
  34. package/templates/partials/category/subcategory.tpl +1 -1
  35. package/templates/partials/groups/memberlist.tpl +1 -1
  36. package/templates/partials/groups/sidebar-left.tpl +5 -5
  37. package/templates/partials/header/brand.tpl +3 -1
  38. package/templates/partials/mobile-footer.tpl +3 -6
  39. package/templates/partials/notifications_list.tpl +2 -2
  40. package/templates/partials/post_bar.tpl +3 -5
  41. package/templates/partials/posts_list_item.tpl +1 -1
  42. package/templates/partials/quick-search-results.tpl +4 -4
  43. package/templates/partials/search-filters.tpl +2 -2
  44. package/templates/partials/search-results.tpl +1 -1
  45. package/templates/partials/sidebar/chats.tpl +2 -2
  46. package/templates/partials/sidebar/drafts.tpl +1 -1
  47. package/templates/partials/sidebar/notifications.tpl +2 -2
  48. package/templates/partials/sidebar/search.tpl +2 -2
  49. package/templates/partials/sidebar-left.tpl +2 -5
  50. package/templates/partials/tags_list.tpl +3 -3
  51. package/templates/partials/topic/event.tpl +1 -1
  52. package/templates/partials/topic/navigator.tpl +2 -2
  53. package/templates/partials/topic/post-menu-list.tpl +25 -1
  54. package/templates/partials/topic/post-menu.tpl +3 -29
  55. package/templates/partials/topic/post.tpl +109 -102
  56. package/templates/partials/topic/quickreply.tpl +2 -2
  57. package/templates/partials/topic/reply-button.tpl +4 -2
  58. package/templates/partials/topic/sort.tpl +1 -1
  59. package/templates/partials/topic/tools.tpl +2 -6
  60. package/templates/partials/topic/watch.tpl +1 -1
  61. package/templates/partials/topic-filters.tpl +1 -1
  62. package/templates/partials/topic-list-bar.tpl +7 -7
  63. package/templates/partials/topic-terms.tpl +1 -1
  64. package/templates/partials/topics_list.tpl +10 -2
  65. package/templates/partials/users/item.tpl +2 -2
  66. package/templates/partials/users_list_menu.tpl +5 -5
  67. package/templates/post-queue.tpl +6 -2
  68. package/templates/topic.tpl +81 -88
  69. package/templates/users.tpl +1 -1
  70. package/templates/world.tpl +21 -0
  71. package/scss/modules/bottom-sheet.scss +0 -52
  72. package/templates/flags/detail.tpl +0 -179
  73. package/templates/flags/list.tpl +0 -6
  74. package/templates/login.tpl +0 -102
  75. package/templates/partials/category/filter-dropdown-content.tpl +0 -37
  76. package/templates/partials/category/selector-dropdown-content.tpl +0 -35
  77. package/templates/partials/category/sort.tpl +0 -39
  78. package/templates/partials/category/tools.tpl +0 -89
  79. package/templates/partials/category/watch.tpl +0 -67
  80. package/templates/partials/flags/bulk-actions.tpl +0 -9
  81. package/templates/partials/flags/filters.tpl +0 -186
  82. package/templates/partials/flags/results.tpl +0 -38
  83. package/templates/partials/groups/filter-dropdown-content.tpl +0 -25
  84. package/templates/partials/tags/filter-dropdown-content.tpl +0 -34
  85. package/templates/partials/tags/watch.tpl +0 -42
  86. package/templates/partials/users/filter-dropdown-content.tpl +0 -23
  87. package/templates/register.tpl +0 -104
package/README.md CHANGED
@@ -10,6 +10,9 @@ Issues are tracked in [the main project issue tracker](https://github.com/NodeBB
10
10
  ## Screenshots
11
11
 
12
12
  ### Categories
13
+
14
+ _The cards in the header are added by the recent cards plugin. https://github.com/NodeBB-Community/nodebb-plugin-recent-cards_
15
+
13
16
  <img height="450" src="screenshots/categories.png">
14
17
 
15
18
  ### Recent
package/library.js CHANGED
@@ -181,10 +181,4 @@ library.saveUserSettings = async function (hookData) {
181
181
  library.filterMiddlewareRenderHeader = async function (hookData) {
182
182
  hookData.templateData.bootswatchSkinOptions = await meta.css.getSkinSwitcherOptions(hookData.req.uid);
183
183
  return hookData;
184
- };
185
-
186
- library.filterTeasersConfigureStripTags = function (hookData) {
187
- // teasers have a stretched-link to go to last post, the anchors in them are not clickable
188
- hookData.tags.push('a');
189
- return hookData;
190
- };
184
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-theme-harmony",
3
- "version": "2.0.0-pre.4",
3
+ "version": "2.0.0-pre.41",
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
@@ -65,17 +65,14 @@ $(document).ready(function () {
65
65
  const bottomBar = $('[component="bottombar"]');
66
66
  const $body = $('body');
67
67
  const $window = $(window);
68
- $body.on('shown.bs.dropdown', '.sticky-tools', function () {
69
- bottomBar.addClass('hidden');
70
- });
71
- $body.on('hidden.bs.dropdown', '.sticky-tools', function () {
72
- bottomBar.removeClass('hidden');
68
+ $body.on('shown.bs.dropdown hidden.bs.dropdown', '.sticky-tools', function () {
69
+ bottomBar.toggleClass('hidden', $(this).find('.dropdown-menu.show').length);
73
70
  });
74
71
  function isSearchVisible() {
75
72
  return !!$('[component="bottombar"] [component="sidebar/search"] .search-dropdown.show').length;
76
73
  }
77
74
 
78
- let lastScrollTop = 0;
75
+ let lastScrollTop = $window.scrollTop();
79
76
  let newPostsLoaded = false;
80
77
 
81
78
  function onWindowScroll() {
@@ -89,7 +86,7 @@ $(document).ready(function () {
89
86
  const diff = Math.abs(st - lastScrollTop);
90
87
  const scrolledDown = st > lastScrollTop;
91
88
  const scrolledUp = st < lastScrollTop;
92
- if (diff > 5) {
89
+ if (diff > 10) {
93
90
  bottomBar.css({
94
91
  bottom: !scrolledUp && scrolledDown ?
95
92
  -bottomBar.find('.bottombar-nav').outerHeight(true) :
@@ -118,8 +115,10 @@ $(document).ready(function () {
118
115
  });
119
116
  hooks.on('action:ajaxify.end', function () {
120
117
  $window.off('scroll', delayedScroll);
121
- bottomBar.css({ bottom: 0 });
122
- setTimeout(enableAutohide, 250);
118
+ if (config.theme.autohideBottombar) {
119
+ bottomBar.css({ bottom: 0 });
120
+ setTimeout(enableAutohide, 250);
121
+ }
123
122
  });
124
123
  });
125
124
  }
@@ -255,20 +254,18 @@ $(document).ready(function () {
255
254
  return;
256
255
  }
257
256
  ['notifications', 'chat'].forEach((type) => {
258
- const countEl = document.querySelector(`[component="${type}/count"]`);
259
- if (!countEl) {
257
+ const countEl = $(`nav.sidebar [component="${type}/count"]`).first();
258
+ if (!countEl.length) {
260
259
  return;
261
260
  }
262
- const count = parseInt(countEl.innerText, 10);
261
+ const count = parseInt(countEl.text(), 10);
263
262
  if (count > 1) {
264
- const listEls = document.querySelectorAll(`[component="${type}/list"]`);
265
- listEls.forEach((listEl) => {
266
- const placeholder = listEl.querySelector('*');
267
- if (placeholder) {
268
- for (let x = 0; x < count - 1; x++) {
269
- const cloneEl = placeholder.cloneNode(true);
270
- listEl.insertBefore(cloneEl, placeholder);
271
- }
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);
272
269
  }
273
270
  });
274
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
  }
@@ -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,8 @@ $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
+
38
40
  // no caret on dropdown-toggle
39
41
  $enable-caret: false;
40
42
 
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
  }
@@ -113,7 +105,7 @@ body.template-topic {
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>
@@ -29,6 +29,26 @@
29
29
  <input class="form-control" type="date" id="birthday" name="birthday" value="{birthday}" placeholder="mm/dd/yyyy">
30
30
  </div>
31
31
 
32
+ {{{ each customUserFields }}}
33
+ <div class="mb-3">
34
+ <label class="form-label fw-bold" for="{./key}">{./name}</label>
35
+ {{{ if ((./type == "input-text") || (./type == "input-link")) }}}
36
+ <input class="form-control" type="text" id="{./key}" name="{./key}" value="{./value}">
37
+ {{{ end }}}
38
+
39
+ {{{ if (./type == "input-number") }}}
40
+ <input class="form-control" type="number" id="{./key}" name="{./key}" value="{./value}">
41
+ {{{ end }}}
42
+ {{{ if (./type == "select") }}}
43
+ <select class="form-select" id="{./key}" name="{./key}">
44
+ {{{ each ./select-options}}}
45
+ <option value="{./value}" {{{ if ./selected }}}selected{{{ end }}}>{./value}</option>
46
+ {{{ end }}}
47
+ </select>
48
+ {{{ end }}}
49
+ </div>
50
+ {{{ end }}}
51
+
32
52
  <div class="mb-3">
33
53
  <label class="form-label fw-bold" for="groupTitle">[[user:grouptitle]]</label>
34
54
 
@@ -37,11 +57,11 @@
37
57
  <div component="group/badge/item" class="d-flex gap-2 justify-content-between align-items-center" data-value="{./displayName}" data-selected="{./selected}">
38
58
  <!-- IMPORT partials/groups/badge.tpl -->
39
59
  <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>
60
+ <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>
61
+ <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
62
  {{{ 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>
63
+ <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>
64
+ <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
65
  {{{ end }}}
46
66
  </div>
47
67
  </div>