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,35 +1,35 @@
1
- <!-- IMPORT partials/account/header.tpl -->
2
-
3
- <h3 class="fw-semibold fs-5">{{{ if isSelf }}}[[user:change-password]]{{{ else }}}[[pages:{template.name}, {username}]]{{{ end }}}</h3>
4
- <div class="row">
5
- <div class="col-12 col-lg-4">
6
- <form class="edit-form">
7
- <!-- disables autocomplete on FF --><input type="password" style="display:none">
8
-
9
- {{{ if isSelf }}}
10
- <div class="mb-3">
11
- <label class="form-label fw-semibold text-sm" for="inputCurrentPassword">[[user:current-password]]</label>
12
- <input autocomplete="off" class="form-control" type="password" id="inputCurrentPassword" placeholder="[[user:current-password]]" value="" {{{ if !hasPassword }}} disabled{{{ end }}}>
13
- </div>
14
- {{{ end }}}
15
-
16
- <div class="mb-3">
17
- <label class="form-label fw-semibold text-sm" for="inputNewPassword">[[user:new-password]]</label>
18
- <input class="form-control" type="password" id="inputNewPassword" placeholder="[[user:password]]" value="">
19
- <span class="form-text" id="password-notify"></span>
20
- </div>
21
-
22
- <div class="mb-3">
23
- <label class="form-label fw-semibold text-sm" for="inputNewPasswordAgain">[[user:confirm-password]]</label>
24
- <input class="form-control" type="password" id="inputNewPasswordAgain" placeholder="[[user:confirm-password]]" value="">
25
- <span class="form-text" id="password-confirm-notify"></span>
26
- </div>
27
-
28
- <div class="form-actions">
29
- <button id="changePasswordBtn" class="btn btn-primary btn-block"><i class="hide fa fa-spinner fa-spin"></i> [[user:change-password]]</button>
30
- </div>
31
- </form>
32
- </div>
33
- </div>
34
-
1
+ <!-- IMPORT partials/account/header.tpl -->
2
+
3
+ <h3 class="fw-semibold fs-5">{{{ if isSelf }}}[[user:change-password]]{{{ else }}}[[pages:{template.name}, {username}]]{{{ end }}}</h3>
4
+ <div class="row">
5
+ <div class="col-12 col-lg-4">
6
+ <form class="edit-form">
7
+ <!-- disables autocomplete on FF --><input type="password" style="display:none">
8
+
9
+ {{{ if isSelf }}}
10
+ <div class="mb-3">
11
+ <label class="form-label fw-semibold text-sm" for="inputCurrentPassword">[[user:current-password]]</label>
12
+ <input autocomplete="off" class="form-control" type="password" id="inputCurrentPassword" placeholder="[[user:current-password]]" value="" {{{ if !hasPassword }}} disabled{{{ end }}}>
13
+ </div>
14
+ {{{ end }}}
15
+
16
+ <div class="mb-3">
17
+ <label class="form-label fw-semibold text-sm" for="inputNewPassword">[[user:new-password]]</label>
18
+ <input class="form-control" type="password" id="inputNewPassword" placeholder="[[user:password]]" value="">
19
+ <span class="form-text" id="password-notify"></span>
20
+ </div>
21
+
22
+ <div class="mb-3">
23
+ <label class="form-label fw-semibold text-sm" for="inputNewPasswordAgain">[[user:confirm-password]]</label>
24
+ <input class="form-control" type="password" id="inputNewPasswordAgain" placeholder="[[user:confirm-password]]" value="">
25
+ <span class="form-text" id="password-confirm-notify"></span>
26
+ </div>
27
+
28
+ <div class="form-actions">
29
+ <button id="changePasswordBtn" class="btn btn-primary btn-block"><i class="hide fa fa-spinner fa-spin"></i> [[user:change-password]]</button>
30
+ </div>
31
+ </form>
32
+ </div>
33
+ </div>
34
+
35
35
  <!-- IMPORT partials/account/footer.tpl -->
@@ -1,30 +1,30 @@
1
- <!-- IMPORT partials/account/header.tpl -->
2
-
3
- <h3 class="fw-semibold fs-5">{{{ if isSelf }}}[[user:change-username]]{{{ else }}}[[pages:{template.name}, {username}]]{{{ end }}}</h3>
4
- <div class="row">
5
- <div class="col-12 col-lg-4">
6
- <form class="edit-form">
7
- <div class="mb-3">
8
- <label class="form-label fw-semibold text-sm" for="inputNewUsername">[[user:username]]</label>
9
- <input class="form-control" type="text" id="inputNewUsername" placeholder="[[user:username]]" value="{username}">
10
- </div>
11
-
12
- <!-- disables autocomplete on FF --><input type="password" style="display:none">
13
-
14
- {{{ if isSelf }}}
15
- <div class="mb-3">
16
- <label class="form-label fw-semibold text-sm" for="inputCurrentPassword">[[user:current-password]]</label>
17
- <input autocomplete="off" class="form-control" type="password" id="inputCurrentPassword" placeholder="[[user:current-password]]" value=""{{{ if !hasPassword }}} disabled{{{ end }}}>
18
- </div>
19
- {{{ end }}}
20
-
21
- <input type="hidden" name="uid" id="inputUID" value="{uid}" />
22
-
23
- <div class="form-actions">
24
- <button id="submitBtn" class="btn btn-primary btn-block"><i class="hide fa fa-spinner fa-spin"></i> [[user:change-username]]</button>
25
- </div>
26
- </form>
27
- </div>
28
- </div>
29
-
1
+ <!-- IMPORT partials/account/header.tpl -->
2
+
3
+ <h3 class="fw-semibold fs-5">{{{ if isSelf }}}[[user:change-username]]{{{ else }}}[[pages:{template.name}, {username}]]{{{ end }}}</h3>
4
+ <div class="row">
5
+ <div class="col-12 col-lg-4">
6
+ <form class="edit-form">
7
+ <div class="mb-3">
8
+ <label class="form-label fw-semibold text-sm" for="inputNewUsername">[[user:username]]</label>
9
+ <input class="form-control" type="text" id="inputNewUsername" placeholder="[[user:username]]" value="{username}">
10
+ </div>
11
+
12
+ <!-- disables autocomplete on FF --><input type="password" style="display:none">
13
+
14
+ {{{ if isSelf }}}
15
+ <div class="mb-3">
16
+ <label class="form-label fw-semibold text-sm" for="inputCurrentPassword">[[user:current-password]]</label>
17
+ <input autocomplete="off" class="form-control" type="password" id="inputCurrentPassword" placeholder="[[user:current-password]]" value=""{{{ if !hasPassword }}} disabled{{{ end }}}>
18
+ </div>
19
+ {{{ end }}}
20
+
21
+ <input type="hidden" name="uid" id="inputUID" value="{uid}" />
22
+
23
+ <div class="form-actions">
24
+ <button id="submitBtn" class="btn btn-primary btn-block"><i class="hide fa fa-spinner fa-spin"></i> [[user:change-username]]</button>
25
+ </div>
26
+ </form>
27
+ </div>
28
+ </div>
29
+
30
30
  <!-- IMPORT partials/account/footer.tpl -->
@@ -1,138 +1,138 @@
1
- <!-- IMPORT partials/account/header.tpl -->
2
-
3
- <div class="d-flex justify-content-between py-1 mb-3 align-items-center position-sticky top-0 bg-body z-1">
4
- <h3 class="fw-semibold fs-5 mb-0">{{{ if isSelf }}}[[user:edit-profile]]{{{ else }}}[[pages:account/edit, {username}]]{{{ end }}}</h3>
5
- <button id="submitBtn" class="btn btn-sm btn-primary">[[global:save-changes]]</button>
6
- </div>
7
- <div class="row">
8
- <div class="col-xl-6 col-12">
9
- <form role="form" component="profile/edit/form">
10
- <div class="mb-3">
11
- <label class="form-label fw-bold" for="fullname">[[user:fullname]]</label>
12
- <input class="form-control" type="text" id="fullname" name="fullname" placeholder="[[user:fullname]]" value="{fullname}">
13
- </div>
14
-
15
- <div class="mb-3">
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">
18
- </div>
19
-
20
- {{{ each customUserFields }}}
21
- <div class="mb-3">
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
-
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 }}}
42
- </div>
43
- {{{ end }}}
44
-
45
- {{{ if groups.length }}}
46
- <div class="mb-3">
47
- <label class="form-label fw-bold" for="groupTitle">[[user:grouptitle]]</label>
48
-
49
- <div class="d-flex flex-column gap-2" component="group/badge/list">
50
- {{{ each groups }}}
51
- <div component="group/badge/item" class="d-flex gap-2 justify-content-between align-items-center" data-value="{./displayName}" data-selected="{./selected}">
52
- <!-- IMPORT partials/groups/badge.tpl -->
53
- <div class="d-flex gap-1">
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>
56
- {{{ if allowMultipleBadges }}}
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>
59
- {{{ end }}}
60
- </div>
61
- </div>
62
- {{{ end }}}
63
- </div>
64
- </div>
65
- {{{ end }}}
66
-
67
- {{{ if allowAboutMe }}}
68
- <div class="mb-3">
69
- <label class="form-label fw-bold" for="aboutme">[[user:aboutme]]</label> <small><label id="aboutMeCharCountLeft"></label></small>
70
- <textarea class="form-control" id="aboutme" name="aboutme" rows="5">{aboutme}</textarea>
71
- </div>
72
- {{{ end }}}
73
-
74
- {{{ if (allowSignature && !disableSignatures) }}}
75
- <div class="mb-3">
76
- <label class="form-label fw-bold" for="signature">[[user:signature]]</label> <small><label id="signatureCharCountLeft"></label></small>
77
- <textarea class="form-control" id="signature" name="signature" rows="5">{signature}</textarea>
78
- </div>
79
- {{{ end }}}
80
- </form>
81
- <hr class="visible-xs visible-sm"/>
82
- </div>
83
-
84
- <div class="col-xl-6 col-12">
85
- <div class="text-center">
86
- <ul class="list-group mb-3 text-sm text-nowrap">
87
- {{{ if allowProfilePicture }}}
88
- <li class="list-group-item"><a component="profile/change/picture" href="#" class="text-decoration-none text-reset">[[user:change-picture]]</a></li>
89
- {{{ end }}}
90
- {{{ if !username:disableEdit }}}
91
- <li class="list-group-item"><a href="{config.relative_path}/user/{userslug}/edit/username" class="text-decoration-none text-reset">[[user:change-username]]</a></li>
92
- {{{ end }}}
93
- {{{ if !email:disableEdit }}}
94
- <li class="list-group-item"><a href="{config.relative_path}/user/{userslug}/edit/email" class="text-decoration-none text-reset">[[user:change-email]]</a></li>
95
- {{{ end }}}
96
- {{{ if canChangePassword }}}
97
- <li class="list-group-item"><a href="{config.relative_path}/user/{userslug}/edit/password" class="text-decoration-none text-reset">[[user:change-password]]</a></li>
98
- {{{ end }}}
99
- {{{ each editButtons }}}
100
- <li class="list-group-item"><a href="{config.relative_path}{./link}" class="text-decoration-none text-reset">{./text}</a></li>
101
- {{{ end }}}
102
- </ul>
103
-
104
- {{{ if config.requireEmailConfirmation }}}
105
- {{{ if (email && isSelf) }}}
106
- <a id="confirm-email" href="#" class="btn btn-warning {{{ if email:confirmed }}}hide{{{ end }}}">[[user:confirm-email]]</a><br/><br/>
107
- {{{ end }}}
108
- {{{ end }}}
109
- </div>
110
-
111
- {{{ if sso.length }}}
112
- <label class="form-label text-sm fw-semibold">[[user:sso.title]]</label>
113
- <div class="list-group">
114
- {{{ each sso }}}
115
- <div class="list-group-item d-flex align-items-center justify-content-between">
116
- <a class="text-sm text-reset text-decoration-none" data-component="{./component}" href="{{{ if ./url }}}{./url}{{{ else }}}#{{{ end }}}" target="{{{ if ./associated }}}_blank{{{ else }}}_top{{{ end }}}">
117
- {{{ if ./icon }}}<i class="fa {./icon}"></i>{{{ end }}}
118
- {{{ if ./associated }}}[[user:sso.associated]]{{{ else }}}[[user:sso.not-associated]]{{{ end }}}
119
- {./name}
120
- </a>
121
- {{{ if ./deauthUrl }}}
122
- <a data-component="{./component}" class="btn btn-outline-secondary btn-sm" href="{./deauthUrl}">[[user:sso.dissociate]]</a>
123
- {{{ end }}}
124
- </div>
125
- {{{ end }}}
126
- </div>
127
- {{{ end }}}
128
-
129
- <hr/>
130
- {{{ if (allowAccountDelete && isSelf) }}}
131
- <div class="d-flex justify-content-center">
132
- <button id="deleteAccountBtn" class="btn btn-danger">[[user:delete-account]]</button>
133
- </div>
134
- {{{ end }}}
135
- </div>
136
- </div>
137
-
1
+ <!-- IMPORT partials/account/header.tpl -->
2
+
3
+ <div class="d-flex justify-content-between py-1 mb-3 align-items-center position-sticky top-0 bg-body z-1">
4
+ <h3 class="fw-semibold fs-5 mb-0">{{{ if isSelf }}}[[user:edit-profile]]{{{ else }}}[[pages:account/edit, {username}]]{{{ end }}}</h3>
5
+ <button id="submitBtn" class="btn btn-sm btn-primary">[[global:save-changes]]</button>
6
+ </div>
7
+ <div class="row">
8
+ <div class="col-xl-6 col-12">
9
+ <form role="form" component="profile/edit/form">
10
+ <div class="mb-3">
11
+ <label class="form-label fw-bold" for="fullname">[[user:fullname]]</label>
12
+ <input class="form-control" type="text" id="fullname" name="fullname" placeholder="[[user:fullname]]" value="{fullname}">
13
+ </div>
14
+
15
+ <div class="mb-3">
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">
18
+ </div>
19
+
20
+ {{{ each customUserFields }}}
21
+ <div class="mb-3">
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
+
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 }}}
42
+ </div>
43
+ {{{ end }}}
44
+
45
+ {{{ if groups.length }}}
46
+ <div class="mb-3">
47
+ <label class="form-label fw-bold" for="groupTitle">[[user:grouptitle]]</label>
48
+
49
+ <div class="d-flex flex-column gap-2" component="group/badge/list">
50
+ {{{ each groups }}}
51
+ <div component="group/badge/item" class="d-flex gap-2 justify-content-between align-items-center" data-value="{./displayName}" data-selected="{./selected}">
52
+ <!-- IMPORT partials/groups/badge.tpl -->
53
+ <div class="d-flex gap-1">
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>
56
+ {{{ if allowMultipleBadges }}}
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>
59
+ {{{ end }}}
60
+ </div>
61
+ </div>
62
+ {{{ end }}}
63
+ </div>
64
+ </div>
65
+ {{{ end }}}
66
+
67
+ {{{ if allowAboutMe }}}
68
+ <div class="mb-3">
69
+ <label class="form-label fw-bold" for="aboutme">[[user:aboutme]]</label> <small><label id="aboutMeCharCountLeft"></label></small>
70
+ <textarea class="form-control" id="aboutme" name="aboutme" rows="5">{aboutme}</textarea>
71
+ </div>
72
+ {{{ end }}}
73
+
74
+ {{{ if (allowSignature && !disableSignatures) }}}
75
+ <div class="mb-3">
76
+ <label class="form-label fw-bold" for="signature">[[user:signature]]</label> <small><label id="signatureCharCountLeft"></label></small>
77
+ <textarea class="form-control" id="signature" name="signature" rows="5">{signature}</textarea>
78
+ </div>
79
+ {{{ end }}}
80
+ </form>
81
+ <hr class="visible-xs visible-sm"/>
82
+ </div>
83
+
84
+ <div class="col-xl-6 col-12">
85
+ <div class="text-center">
86
+ <ul class="list-group mb-3 text-sm text-nowrap">
87
+ {{{ if allowProfilePicture }}}
88
+ <li class="list-group-item"><a component="profile/change/picture" href="#" class="text-decoration-none text-reset">[[user:change-picture]]</a></li>
89
+ {{{ end }}}
90
+ {{{ if !username:disableEdit }}}
91
+ <li class="list-group-item"><a href="{config.relative_path}/user/{userslug}/edit/username" class="text-decoration-none text-reset">[[user:change-username]]</a></li>
92
+ {{{ end }}}
93
+ {{{ if !email:disableEdit }}}
94
+ <li class="list-group-item"><a href="{config.relative_path}/user/{userslug}/edit/email" class="text-decoration-none text-reset">[[user:change-email]]</a></li>
95
+ {{{ end }}}
96
+ {{{ if canChangePassword }}}
97
+ <li class="list-group-item"><a href="{config.relative_path}/user/{userslug}/edit/password" class="text-decoration-none text-reset">[[user:change-password]]</a></li>
98
+ {{{ end }}}
99
+ {{{ each editButtons }}}
100
+ <li class="list-group-item"><a href="{config.relative_path}{./link}" class="text-decoration-none text-reset">{./text}</a></li>
101
+ {{{ end }}}
102
+ </ul>
103
+
104
+ {{{ if config.requireEmailConfirmation }}}
105
+ {{{ if (email && isSelf) }}}
106
+ <a id="confirm-email" href="#" class="btn btn-warning {{{ if email:confirmed }}}hide{{{ end }}}">[[user:confirm-email]]</a><br/><br/>
107
+ {{{ end }}}
108
+ {{{ end }}}
109
+ </div>
110
+
111
+ {{{ if sso.length }}}
112
+ <label class="form-label text-sm fw-semibold">[[user:sso.title]]</label>
113
+ <div class="list-group">
114
+ {{{ each sso }}}
115
+ <div class="list-group-item d-flex align-items-center justify-content-between">
116
+ <a class="text-sm text-reset text-decoration-none" data-component="{./component}" href="{{{ if ./url }}}{./url}{{{ else }}}#{{{ end }}}" target="{{{ if ./associated }}}_blank{{{ else }}}_top{{{ end }}}">
117
+ {{{ if ./icon }}}<i class="fa {./icon}"></i>{{{ end }}}
118
+ {{{ if ./associated }}}[[user:sso.associated]]{{{ else }}}[[user:sso.not-associated]]{{{ end }}}
119
+ {./name}
120
+ </a>
121
+ {{{ if ./deauthUrl }}}
122
+ <a data-component="{./component}" class="btn btn-outline-secondary btn-sm" href="{./deauthUrl}">[[user:sso.dissociate]]</a>
123
+ {{{ end }}}
124
+ </div>
125
+ {{{ end }}}
126
+ </div>
127
+ {{{ end }}}
128
+
129
+ <hr/>
130
+ {{{ if (allowAccountDelete && isSelf) }}}
131
+ <div class="d-flex justify-content-center">
132
+ <button id="deleteAccountBtn" class="btn btn-danger">[[user:delete-account]]</button>
133
+ </div>
134
+ {{{ end }}}
135
+ </div>
136
+ </div>
137
+
138
138
  <!-- IMPORT partials/account/footer.tpl -->
@@ -1,15 +1,15 @@
1
- <!-- IMPORT partials/account/header.tpl -->
2
- <h3 class="fw-semibold fs-5">[[pages:{template.name}, {username}]]</h3>
3
-
4
- {{{ if !users.length }}}
5
- <div class="alert alert-warning text-center">[[user:has-no-follower]]</div>
6
- {{{ end }}}
7
-
8
- <div class="row row-cols-2 row-cols-lg-3 row-cols-xl-4 g-4">
9
- {{{ each users }}}
10
- <!-- IMPORT partials/users/item.tpl -->
11
- {{{end}}}
12
- </div>
13
-
14
- <!-- IMPORT partials/paginator.tpl -->
1
+ <!-- IMPORT partials/account/header.tpl -->
2
+ <h3 class="fw-semibold fs-5">[[pages:{template.name}, {username}]]</h3>
3
+
4
+ {{{ if !users.length }}}
5
+ <div class="alert alert-warning text-center">[[user:has-no-follower]]</div>
6
+ {{{ end }}}
7
+
8
+ <div class="row row-cols-2 row-cols-lg-3 row-cols-xl-4 g-4">
9
+ {{{ each users }}}
10
+ <!-- IMPORT partials/users/item.tpl -->
11
+ {{{end}}}
12
+ </div>
13
+
14
+ <!-- IMPORT partials/paginator.tpl -->
15
15
  <!-- IMPORT partials/account/footer.tpl -->
@@ -1,16 +1,16 @@
1
- <!-- IMPORT partials/account/header.tpl -->
2
-
3
- <h3 class="fw-semibold fs-5">[[pages:{template.name}, {username}]]</h3>
4
-
5
- {{{ if !users.length }}}
6
- <div class="alert alert-warning text-center">[[user:follows-no-one]]</div>
7
- {{{ end }}}
8
-
9
- <div class="row row-cols-2 row-cols-lg-3 row-cols-xl-4 g-4">
10
- {{{ each users }}}
11
- <!-- IMPORT partials/users/item.tpl -->
12
- {{{end}}}
13
- </div>
14
-
15
- <!-- IMPORT partials/paginator.tpl -->
1
+ <!-- IMPORT partials/account/header.tpl -->
2
+
3
+ <h3 class="fw-semibold fs-5">[[pages:{template.name}, {username}]]</h3>
4
+
5
+ {{{ if !users.length }}}
6
+ <div class="alert alert-warning text-center">[[user:follows-no-one]]</div>
7
+ {{{ end }}}
8
+
9
+ <div class="row row-cols-2 row-cols-lg-3 row-cols-xl-4 g-4">
10
+ {{{ each users }}}
11
+ <!-- IMPORT partials/users/item.tpl -->
12
+ {{{end}}}
13
+ </div>
14
+
15
+ <!-- IMPORT partials/paginator.tpl -->
16
16
  <!-- IMPORT partials/account/footer.tpl -->
@@ -1,15 +1,15 @@
1
- <!-- IMPORT partials/account/header.tpl -->
2
-
3
- <h3 class="fw-semibold fs-5">[[pages:{template.name}, {username}]]</h3>
4
-
5
- <div class="groups">
6
- <div component="groups/container" id="groups-list" class="row">
7
- {{{ if !groups.length }}}
8
- <div class="alert alert-warning text-center">[[groups:no-groups-found]]</div>
9
- {{{ else }}}
10
- <!-- IMPORT partials/groups/list.tpl -->
11
- {{{ end }}}
12
- </div>
13
- </div>
14
-
15
- <!-- IMPORT partials/account/footer.tpl -->
1
+ <!-- IMPORT partials/account/header.tpl -->
2
+
3
+ <h3 class="fw-semibold fs-5">[[pages:{template.name}, {username}]]</h3>
4
+
5
+ <div class="groups">
6
+ <div component="groups/container" id="groups-list" class="row">
7
+ {{{ if !groups.length }}}
8
+ <div class="alert alert-warning text-center">[[groups:no-groups-found]]</div>
9
+ {{{ else }}}
10
+ <!-- IMPORT partials/groups/list.tpl -->
11
+ {{{ end }}}
12
+ </div>
13
+ </div>
14
+
15
+ <!-- IMPORT partials/account/footer.tpl -->