nodebb-theme-harmony 0.0.9 → 0.0.11

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 (72) hide show
  1. package/languages/en-GB/harmony.json +5 -1
  2. package/lib/controllers.js +15 -0
  3. package/library.js +63 -6
  4. package/package.json +1 -1
  5. package/plugin.json +5 -1
  6. package/public/settings.js +28 -0
  7. package/scss/account.scss +0 -3
  8. package/scss/common.scss +6 -0
  9. package/scss/modules/bottom-sheet.scss +1 -1
  10. package/scss/modules/topic-navigator.scss +0 -6
  11. package/scss/sidebar.scss +18 -16
  12. package/templates/account/blocks.tpl +2 -2
  13. package/templates/account/categories.tpl +27 -21
  14. package/templates/account/consent.tpl +10 -64
  15. package/templates/account/edit/password.tpl +29 -24
  16. package/templates/account/edit/username.tpl +25 -20
  17. package/templates/account/edit.tpl +110 -115
  18. package/templates/account/followers.tpl +2 -3
  19. package/templates/account/following.tpl +2 -3
  20. package/templates/account/groups.tpl +2 -3
  21. package/templates/account/info.tpl +206 -204
  22. package/templates/account/posts.tpl +4 -4
  23. package/templates/account/profile.tpl +9 -9
  24. package/templates/account/sessions.tpl +3 -6
  25. package/templates/account/settings.tpl +193 -206
  26. package/templates/account/theme.tpl +25 -21
  27. package/templates/account/topics.tpl +17 -16
  28. package/templates/account/uploads.tpl +4 -8
  29. package/templates/admin/plugins/harmony.tpl +4 -0
  30. package/templates/groups/details.tpl +3 -20
  31. package/templates/groups/list.tpl +10 -9
  32. package/templates/header.tpl +3 -21
  33. package/templates/login.tpl +1 -1
  34. package/templates/notifications.tpl +4 -4
  35. package/templates/partials/account/header.tpl +58 -47
  36. package/templates/partials/account/sidebar-left.tpl +19 -12
  37. package/templates/partials/buttons/newTopic.tpl +1 -3
  38. package/templates/partials/categories/item.tpl +1 -8
  39. package/templates/partials/category/sort.tpl +3 -3
  40. package/templates/partials/category/subcategory.tpl +1 -1
  41. package/templates/partials/category/tools.tpl +3 -3
  42. package/templates/partials/category/watch.tpl +7 -7
  43. package/templates/partials/category-filter-content.tpl +4 -4
  44. package/templates/partials/category-selector-content.tpl +10 -9
  45. package/templates/partials/chats/message-window.tpl +9 -7
  46. package/templates/partials/groups/admin.tpl +3 -5
  47. package/templates/partials/groups/sidebar-left.tpl +1 -1
  48. package/templates/partials/header/brand.tpl +19 -0
  49. package/templates/partials/notifications_list.tpl +5 -5
  50. package/templates/partials/post_bar.tpl +5 -5
  51. package/templates/partials/sidebar/logged-in-menu.tpl +23 -0
  52. package/templates/partials/sidebar/user-menu.tpl +1 -1
  53. package/templates/partials/sidebar-left.tpl +1 -1
  54. package/templates/partials/sidebar-right.tpl +1 -23
  55. package/templates/partials/tags_list.tpl +3 -2
  56. package/templates/partials/topic/navigator.tpl +2 -2
  57. package/templates/partials/topic/post-menu.tpl +2 -4
  58. package/templates/partials/topic/post.tpl +13 -13
  59. package/templates/partials/topic/reply-button.tpl +3 -3
  60. package/templates/partials/topic/sort.tpl +3 -3
  61. package/templates/partials/topic/tools.tpl +3 -3
  62. package/templates/partials/topic/watch.tpl +17 -16
  63. package/templates/partials/topic-filters.tpl +3 -3
  64. package/templates/partials/topic-list-bar.tpl +8 -12
  65. package/templates/partials/topic-terms.tpl +3 -3
  66. package/templates/partials/topics_list.tpl +4 -4
  67. package/templates/partials/users/item.tpl +27 -25
  68. package/templates/partials/users_list_menu.tpl +1 -1
  69. package/templates/search.tpl +0 -2
  70. package/templates/tags.tpl +12 -8
  71. package/templates/topic.tpl +1 -3
  72. package/templates/users.tpl +4 -5
@@ -1,231 +1,218 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
1
  <div class="account">
4
2
  <!-- IMPORT partials/account/header.tpl -->
5
3
 
6
- <div class="row">
7
- <div class="col-12 col-md-6">
8
- <!-- IF !disableCustomUserSkins -->
9
- <h4>[[user:select-skin]]</h4>
10
- <div class="card card-body mb-3">
11
- <select class="form-select" id="bootswatchSkin" data-property="bootswatchSkin">
12
- {{{each bootswatchSkinOptions}}}
13
- <option value="{bootswatchSkinOptions.value}" <!-- IF bootswatchSkinOptions.selected -->selected<!-- ENDIF bootswatchSkinOptions.selected -->>{bootswatchSkinOptions.name}</option>
14
- {{{end}}}
15
- </select>
16
- </div>
17
- <!-- ENDIF !disableCustomUserSkins -->
18
-
19
- <!-- IF allowUserHomePage -->
20
- <h4>[[user:select-homepage]]</h4>
21
- <div class="card card-body mb-3">
22
- <div class="mb-2">
23
- <label for="homePageRoute">[[user:homepage]]</label>
24
- <select class="form-select" id="homePageRoute" data-property="homePageRoute">
25
- <option value="none">None</option>
26
- {{{each homePageRoutes}}}
27
- <option value="{homePageRoutes.route}" <!-- IF homePageRoutes.selected -->selected="1"<!-- ENDIF homePageRoutes.selected -->>{homePageRoutes.name}</option>
28
- {{{end}}}
29
- </select>
30
- <p class="form-text">[[user:homepage_description]]</p>
31
- </div>
32
- <div id="homePageCustom" class="mb-2" style="display: none;">
33
- <label for="homePageCustom">[[user:custom_route]]</label>
34
- <input type="text" class="form-control" data-property="homePageCustom" id="homePageCustom" value="{settings.homePageRoute}"/>
35
- <p class="form-text">[[user:custom_route_help]]</p>
36
- </div>
37
- </div>
38
- <!-- ENDIF allowUserHomePage -->
39
-
40
- <h4>[[global:privacy]]</h4>
41
- <div class="card card-body mb-3">
42
- <!-- IF !hideEmail -->
43
- <div class="form-check">
44
- <input class="form-check-input" type="checkbox" data-property="showemail" <!-- IF settings.showemail -->checked <!-- ENDIF settings.showemail -->/>
45
- <strong>
46
- <label class="form-check-label">[[user:show_email]]</label>
47
- </strong>
48
- </div>
49
- <!-- ENDIF !hideEmail -->
50
-
51
- <!-- IF !hideFullname -->
52
- <div class="form-check">
53
- <input class="form-check-input" type="checkbox" data-property="showfullname" <!-- IF settings.showfullname -->checked<!-- ENDIF settings.showfullname -->/>
54
- <strong>
55
- <label class="form-check-label">[[user:show_fullname]]</label>
56
- </strong>
57
- </div>
58
- <!-- ENDIF !hideFullname -->
59
- <!-- IF !config.disableChat -->
60
- <div class="form-check">
61
- <input class="form-check-input" type="checkbox" data-property="restrictChat" <!-- IF settings.restrictChat -->checked<!-- ENDIF settings.restrictChat -->/>
62
- <strong>
63
- <label class="form-check-label">[[user:restrict_chats]]</label>
64
- </strong>
65
- </div>
66
- <!-- ENDIF !config.disableChat -->
4
+ <div class="d-flex flex-column flex-md-row">
5
+ <!-- IMPORT partials/account/sidebar-left.tpl -->
6
+ <div class="flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
7
+ <div class="mb-3 d-flex justify-content-between">
8
+ <h3 class="fw-semibold fs-5">{{{ if isSelf }}}[[pages:account/settings]]{{{ else }}}[[pages:account/settings-of, {username}]]{{{ end }}}</h3>
9
+ <button id="submitBtn" class="btn btn-primary">[[global:save_changes]]</button>
67
10
  </div>
11
+ <div class="row">
12
+ <div class="col-12 col-md-6">
13
+ {{{ if !disableCustomUserSkins }}}
14
+ <h6 class="fw-bold">[[user:select-skin]]</h6>
15
+ <div class="">
16
+ <select class="form-select form-select-sm" id="bootswatchSkin" data-property="bootswatchSkin">
17
+ {{{each bootswatchSkinOptions}}}
18
+ <option value="{bootswatchSkinOptions.value}" {{{ if bootswatchSkinOptions.selected }}}selected{{{ end }}}>{bootswatchSkinOptions.name}</option>
19
+ {{{end}}}
20
+ </select>
21
+ </div>
22
+ <hr/>
23
+ {{{ end }}}
24
+
25
+ {{{ if allowUserHomePage }}}
26
+ <h6 class="fw-bold">[[user:select-homepage]]</h6>
27
+ <div class="">
28
+ <div class="mb-2">
29
+ <select class="form-select form-select-sm" id="homePageRoute" data-property="homePageRoute">
30
+ <option value="none">None</option>
31
+ {{{each homePageRoutes}}}
32
+ <option value="{homePageRoutes.route}" <!-- IF homePageRoutes.selected -->selected="1"<!-- ENDIF homePageRoutes.selected -->>{homePageRoutes.name}</option>
33
+ {{{end}}}
34
+ </select>
35
+ <p class="form-text text-xs">[[user:homepage_description]]</p>
36
+ </div>
37
+ <div id="homePageCustom" class="mb-2" style="display: none;">
38
+ <label class="form-label" for="homePageCustom">[[user:custom_route]]</label>
39
+ <input type="text" class="form-control form-control-sm" data-property="homePageCustom" id="homePageCustom" value="{settings.homePageRoute}"/>
40
+ <p class="form-text text-xs">[[user:custom_route_help]]</p>
41
+ </div>
42
+ </div>
43
+ <hr/>
44
+ {{{ end }}}
45
+
46
+ <h6 class="fw-bold">[[global:privacy]]</h6>
47
+ <div class="">
48
+ {{{ if !hideEmail }}}
49
+ <div class="form-check">
50
+ <input class="form-check-input" type="checkbox" data-property="showemail" {{{ if settings.showemail }}}checked {{{ end }}}/>
51
+ <label class="form-check-label text-sm">[[user:show_email]]</label>
52
+ </div>
53
+ {{{ end }}}
54
+
55
+ {{{ if !hideFullname }}}
56
+ <div class="form-check">
57
+ <input class="form-check-input" type="checkbox" data-property="showfullname" {{{ if settings.showfullname }}}checked{{{ end }}}/>
58
+ <label class="form-check-label text-sm">[[user:show_fullname]]</label>
59
+ </div>
60
+ {{{ end }}}
61
+ {{{ if !config.disableChat }}}
62
+ <div class="form-check">
63
+ <input class="form-check-input" type="checkbox" data-property="restrictChat" {{{ if settings.restrictChat }}}checked{{{ end }}}/>
64
+ <label class="form-check-label text-sm">[[user:restrict_chats]]</label>
65
+ </div>
66
+ {{{ end }}}
67
+ </div>
68
+ <hr/>
69
+
70
+ <h6 class="fw-bold">[[user:browsing]]</h6>
71
+ <div class="">
72
+ <div class="form-check">
73
+ <input class="form-check-input" type="checkbox" data-property="openOutgoingLinksInNewTab" {{{ if settings.openOutgoingLinksInNewTab }}}checked{{{ end }}}/>
74
+ <label class="form-check-label">[[user:open_links_in_new_tab]]</label>
75
+ </div>
76
+ {{{ if inTopicSearchAvailable }}}
77
+ <div class="form-check">
78
+ <input class="form-check-input" type="checkbox" data-property="topicSearchEnabled" {{{ if settings.topicSearchEnabled }}}checked{{{ end }}}/>
79
+ <label class="form-check-label">[[user:enable_topic_searching]]</label>
80
+ </div>
81
+ <p class="form-text text-xs">[[user:topic_search_help]]</p>
82
+ {{{ end }}}
83
+
84
+ <div class="form-check">
85
+ <input class="form-check-input" type="checkbox" data-property="updateUrlWithPostIndex" {{{ if settings.updateUrlWithPostIndex }}}checked{{{ end }}}/>
86
+ <label class="form-check-label">[[user:update_url_with_post_index]]</label>
87
+ </div>
88
+ <div class="form-check">
89
+ <input class="form-check-input" type="checkbox" data-property="scrollToMyPost" {{{ if settings.scrollToMyPost }}}checked{{{ end }}}/>
90
+ <label class="form-check-label">[[user:scroll_to_my_post]]</label>
91
+ </div>
92
+ </div>
93
+ <hr/>
94
+
95
+ <h6 class="fw-bold">[[global:pagination]]</h6>
96
+ <div class="">
97
+ <div class="mb-2 form-check">
98
+ <input type="checkbox" class="form-check-input" data-property="usePagination" {{{ if settings.usePagination }}}checked{{{ end }}}>
99
+ <label class="form-check-label">[[user:paginate_description]]</label>
100
+ </div>
101
+ <div class="mb-2">
102
+ <label class="form-label">[[user:topics_per_page]] ([[user:max_items_per_page, {maxTopicsPerPage}]])</label>
103
+ <input type="text" class="form-control form-control-sm" data-property="topicsPerPage" value="{settings.topicsPerPage}">
104
+ </div>
105
+ <div class="">
106
+ <label class="form-label">[[user:posts_per_page]] ([[user:max_items_per_page, {maxPostsPerPage}]])</label>
107
+ <input type="text" class="form-control form-control-sm" data-property="postsPerPage" value="{settings.postsPerPage}">
108
+ </div>
109
+ </div>
68
110
 
69
- <h4>[[user:browsing]]</h4>
70
- <div class="card card-body mb-3">
71
- <div class="form-check">
72
- <input class="form-check-input" type="checkbox" data-property="openOutgoingLinksInNewTab" <!-- IF settings.openOutgoingLinksInNewTab -->checked<!-- ENDIF settings.openOutgoingLinksInNewTab -->/>
73
- <strong>
74
- <label class="form-check-label">[[user:open_links_in_new_tab]]</label>
75
- </strong>
76
- </div>
77
- <!-- IF inTopicSearchAvailable -->
78
- <div class="form-check">
79
- <input class="form-check-input" type="checkbox" data-property="topicSearchEnabled" <!-- IF settings.topicSearchEnabled -->checked<!-- ENDIF settings.topicSearchEnabled -->/>
80
- <strong>
81
- <label class="form-check-label">[[user:enable_topic_searching]]</label>
82
- </strong>
83
- </div>
84
- <p class="form-text">[[user:topic_search_help]]</p>
85
- <!-- ENDIF inTopicSearchAvailable -->
86
- <div class="form-check">
87
- <input class="form-check-input" type="checkbox" data-property="updateUrlWithPostIndex" {{{ if settings.updateUrlWithPostIndex }}}checked{{{ end }}}/>
88
- <strong>
89
- <label class="form-check-label">[[user:update_url_with_post_index]]</label>
90
- </strong>
91
- </div>
92
- <div class="form-check">
93
- <input class="form-check-input" type="checkbox" data-property="scrollToMyPost" <!-- IF settings.scrollToMyPost -->checked<!-- ENDIF settings.scrollToMyPost -->/>
94
- <strong>
95
- <label class="form-check-label">[[user:scroll_to_my_post]]</label>
96
- </strong>
97
- </div>
98
- </div>
111
+ {{{ if !disableEmailSubscriptions }}}
112
+ <hr/>
113
+ <h6 class="fw-bold">[[global:email]]</h6>
114
+ <div class="">
115
+ <div class="mb-2">
116
+ <label class="form-label" for="dailyDigestFreq">[[user:digest_label]]</label>
117
+ <select class="form-select form-select-sm" id="dailyDigestFreq" data-property="dailyDigestFreq" autocomplete="off">
118
+ {{{each dailyDigestFreqOptions}}}
119
+ <option value="{./value}" {{{ if ./selected }}}selected="1"{{{ end }}}>{./name}</option>
120
+ {{{end}}}
121
+ </select>
122
+ <p class="form-text text-xs">[[user:digest_description]]</p>
123
+ </div>
124
+ </div>
125
+ {{{ end }}}
99
126
 
100
- <h4>[[global:pagination]]</h4>
101
- <div class="card card-body mb-3">
102
- <div class="mb-2 form-check">
103
- <input type="checkbox" class="form-check-input" data-property="usePagination" <!-- IF settings.usePagination -->checked<!-- ENDIF settings.usePagination -->> <strong><label class="form-check-label">[[user:paginate_description]]</label></strong>
104
- </div>
105
- <div class="mb-3">
106
- <strong><label class="form-label">[[user:topics_per_page]] ([[user:max_items_per_page, {maxTopicsPerPage}]])</label></strong>
107
- <input type="text" class="form-control" data-property="topicsPerPage" value="{settings.topicsPerPage}">
108
- </div>
109
- <div class="">
110
- <strong><label class="form-label">[[user:posts_per_page]] ([[user:max_items_per_page, {maxPostsPerPage}]])</label></strong>
111
- <input type="text" class="form-control" data-property="postsPerPage" value="{settings.postsPerPage}">
112
- </div>
113
- </div>
127
+ {{{ each customSettings}}}
128
+ <hr/>
129
+ <h6 class="fw-bold">{./title}</h6>
130
+ <div class="">
131
+ {./content}
132
+ </div>
114
133
 
115
- <!-- IF !disableEmailSubscriptions -->
116
- <h4>[[global:email]]</h4>
117
- <div class="card card-body mb-3">
118
- <div class="mb-2">
119
- <label for="dailyDigestFreq">[[user:digest_label]]</label>
120
- <select class="form-select" id="dailyDigestFreq" data-property="dailyDigestFreq" autocomplete="off">
121
- {{{each dailyDigestFreqOptions}}}
122
- <option value="{dailyDigestFreqOptions.value}" <!-- IF dailyDigestFreqOptions.selected -->selected="1"<!-- ENDIF dailyDigestFreqOptions.selected -->>{dailyDigestFreqOptions.name}</option>
123
- {{{end}}}
124
- </select>
125
- <p class="form-text">[[user:digest_description]]</p>
134
+ {{{end}}}
135
+ <hr class="d-block d-md-none"/>
126
136
  </div>
127
- </div>
128
- <!-- ENDIF !disableEmailSubscriptions -->
129
-
130
- {{{each customSettings}}}
131
- <h4>{customSettings.title}</h4>
132
- <div class="card card-body mb-3">
133
- {customSettings.content}
134
- </div>
135
- {{{end}}}
136
137
 
137
- </div>
138
-
139
- <div class="col-12 col-md-6">
140
- <h4>[[global:language]]</h4>
141
- <div class="card card-body mb-3">
142
- <div class="row">
143
- <div class="mb-2 col-lg-12">
144
- <select data-property="userLang" class="form-select">
138
+ <div class="col-12 col-md-6">
139
+ <h6 class="fw-bold">[[global:language]]</h6>
140
+ <div class="">
141
+ <select data-property="userLang" class="form-select form-select-sm mb-2">
145
142
  {{{each languages}}}
146
- <option value="{languages.code}" <!-- IF languages.selected -->selected<!-- ENDIF languages.selected -->>{languages.name} ({languages.code})</option>
143
+ <option value="{./code}" {{{ if ./selected }}}selected{{{ end }}}>{./name} ({./code})</option>
147
144
  {{{end}}}
148
145
  </select>
149
146
  </div>
150
- </div>
151
- <!-- IF isAdmin -->
152
- <!-- IF isSelf -->
153
- <label>[[user:acp_language]]</label>
154
- <div class="row">
155
- <div class="mb-2 col-lg-12">
156
- <select data-property="acpLang" class="form-select">
147
+ <hr/>
148
+ {{{ if (isAdmin && isSelf) }}}
149
+ <h6 class="fw-bold">[[user:acp_language]]</h6>
150
+ <div class="">
151
+ <select data-property="acpLang" class="form-select form-select-sm">
157
152
  {{{each acpLanguages}}}
158
- <option value="{acpLanguages.code}" <!-- IF acpLanguages.selected -->selected<!-- ENDIF acpLanguages.selected -->>{acpLanguages.name} ({acpLanguages.code})</option>
153
+ <option value="{./code}" {{{ if ./selected }}}selected{{{ end }}}>{./name} ({./code})</option>
159
154
  {{{end}}}
160
155
  </select>
161
156
  </div>
162
- </div>
163
- <!-- ENDIF isSelf -->
164
- <!-- ENDIF isAdmin -->
165
- </div>
166
-
167
- <h4>[[topic:watch]]</h4>
168
- <div class="card card-body mb-3">
169
- <div class="form-check">
170
- <input class="form-check-input" type="checkbox" data-property="followTopicsOnCreate" <!-- IF settings.followTopicsOnCreate -->checked <!-- ENDIF settings.followTopicsOnCreate -->/>
171
- <strong>
172
- <label class="form-check-label">[[user:follow_topics_you_create]]</label>
173
- </strong>
174
- </div>
175
- <div class="form-check">
176
- <input class="form-check-input" type="checkbox" data-property="followTopicsOnReply" <!-- IF settings.followTopicsOnReply -->checked<!-- ENDIF settings.followTopicsOnReply -->/>
177
- <strong>
178
- <label class="form-check-label">[[user:follow_topics_you_reply_to]]</label>
179
- </strong>
180
- </div>
181
- <div class="mb-2">
182
- <label>[[user:default-category-watch-state]]</label>
183
- <select class="form-select" data-property="categoryWatchState">
184
- <option value="watching" <!-- IF categoryWatchState.watching -->selected<!-- ENDIF categoryWatchState.watching -->>[[category:watching]]</option>
185
- <option value="notwatching" <!-- IF categoryWatchState.notwatching -->selected<!-- ENDIF categoryWatchState.notwatching -->>[[category:not-watching]]</option>
186
- <option value="ignoring" <!-- IF categoryWatchState.ignoring -->selected<!-- ENDIF categoryWatchState.ignoring -->>[[category:ignoring]]</option>
187
- </select>
188
- </div>
189
- </div>
190
-
191
-
192
- <h4>[[user:notifications]]</h4>
193
- <div class="card card-body mb-3">
194
- {{{each notificationSettings}}}
195
- <div class="row mb-3">
196
- <div class="col-7">
197
- <label>{notificationSettings.label}</label>
198
- </div>
199
- <div class="mb-2 col-5">
200
- <select class="form-select" data-property="{notificationSettings.name}">
201
- <option value="none" <!-- IF notificationSettings.none -->selected<!-- ENDIF notificationSettings.none -->>[[notifications:none]]</option>
202
- <option value="notification" <!-- IF notificationSettings.notification -->selected<!-- ENDIF notificationSettings.notification -->>[[notifications:notification_only]]</option>
203
- <option value="email" <!-- IF notificationSettings.email -->selected<!-- ENDIF notificationSettings.email -->>[[notifications:email_only]]</option>
204
- <option value="notificationemail" <!-- IF notificationSettings.notificationemail -->selected<!-- ENDIF notificationSettings.notificationemail -->>[[notifications:notification_and_email]]</option>
205
- </select>
157
+ <hr/>
158
+ {{{ end }}}
159
+
160
+ <h6 class="fw-bold">[[topic:watch]]</h6>
161
+ <div class="">
162
+ <div class="form-check">
163
+ <input class="form-check-input" type="checkbox" data-property="followTopicsOnCreate" {{{ if settings.followTopicsOnCreate }}}checked{{{ end }}}/>
164
+ <label class="form-check-label">[[user:follow_topics_you_create]]</label>
165
+ </div>
166
+ <div class="form-check">
167
+ <input class="form-check-input" type="checkbox" data-property="followTopicsOnReply" {{{ if settings.followTopicsOnReply }}}checked{{{ end }}}/>
168
+ <label class="form-check-label">[[user:follow_topics_you_reply_to]]</label>
169
+ </div>
170
+ <div class="mb-2">
171
+ <label class="form-label">[[user:default-category-watch-state]]</label>
172
+ <select class="form-select form-select-sm" data-property="categoryWatchState">
173
+ <option value="watching" {{{ if categoryWatchState.watching }}}selected{{{ end }}}>[[category:watching]]</option>
174
+ <option value="notwatching" {{{ if categoryWatchState.notwatching }}}selected{{{ end }}}>[[category:not-watching]]</option>
175
+ <option value="ignoring" {{{ if categoryWatchState.ignoring }}}selected{{{ end }}}>[[category:ignoring]]</option>
176
+ </select>
177
+ </div>
206
178
  </div>
207
- </div>
208
- {{{end}}}
179
+ <hr/>
180
+
181
+ <h6 class="fw-bold">[[user:notifications]]</h6>
182
+ <div class="">
183
+ {{{each notificationSettings}}}
184
+ <div class="row mb-3">
185
+ <div class="col-7">
186
+ <label class="text-sm">{./label}</label>
187
+ </div>
188
+ <div class="mb-2 col-5">
189
+ <select class="form-select form-select-sm" data-property="{./name}">
190
+ <option value="none" {{{ if ./none }}}selected{{{ end }}}>[[notifications:none]]</option>
191
+ <option value="notification" {{{ if ./notification }}}selected{{{ end }}}>[[notifications:notification_only]]</option>
192
+ <option value="email" {{{ if ./email }}}selected{{{ end }}}>[[notifications:email_only]]</option>
193
+ <option value="notificationemail" {{{ if ./notificationemail }}}selected{{{ end }}}>[[notifications:notification_and_email]]</option>
194
+ </select>
195
+ </div>
196
+ </div>
197
+ {{{end}}}
209
198
 
210
- <div class="row">
211
- <div class="col-7">
212
- <label for="upvote-notif-freq">[[user:upvote-notif-freq]]</label>
213
- </div>
214
- <div class="mb-2 col-5">
215
- <select class="form-select" id="upvote-notif-freq" name="upvote-notif-freq" data-property="upvoteNotifFreq">
216
- {{{each upvoteNotifFreq}}}
217
- <option value="{upvoteNotifFreq.name}" <!-- IF upvoteNotifFreq.selected -->selected<!-- ENDIF upvoteNotifFreq.selected -->>
218
- [[user:upvote-notif-freq.{upvoteNotifFreq.name}]]
219
- </option>
220
- {{{end}}}
221
- </select>
199
+ <div class="row">
200
+ <div class="col-7">
201
+ <label class="text-sm" for="upvote-notif-freq">[[user:upvote-notif-freq]]</label>
202
+ </div>
203
+ <div class="mb-2 col-5">
204
+ <select class="form-select form-select-sm" id="upvote-notif-freq" name="upvote-notif-freq" data-property="upvoteNotifFreq">
205
+ {{{ each upvoteNotifFreq }}}
206
+ <option value="{./name}" {{{ if ./selected }}}selected{{{ end }}}>
207
+ [[user:upvote-notif-freq.{./name}]]
208
+ </option>
209
+ {{{end}}}
210
+ </select>
211
+ </div>
212
+ </div>
222
213
  </div>
223
214
  </div>
224
215
  </div>
225
216
  </div>
226
217
  </div>
227
- <div class="form-actions">
228
- <a id="submitBtn" href="#" class="btn btn-primary">[[global:save_changes]]</a>
229
- </div>
230
218
  </div>
231
-
@@ -1,29 +1,33 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
1
  <div class="account">
4
2
  <!-- IMPORT partials/account/header.tpl -->
5
3
 
6
- <p>[[persona:settings.intro]]</p>
4
+ <div class="d-flex flex-column flex-md-row">
5
+ <!-- IMPORT partials/account/sidebar-left.tpl -->
6
+ <div class="flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
7
+ <div class="mb-3 d-flex justify-content-between">
8
+ <h3 class="fw-semibold fs-5">[[harmony:settings.title]]</h3>
7
9
 
8
- <hr />
10
+ <button id="save" type="button" class="btn btn-primary">[[global:save_changes]]</button>
11
+ </div>
9
12
 
10
- <form id="theme-settings" role="form">
11
- <div class="checkbox">
12
- <label>
13
- <input type="checkbox" id="persona:menus:legacy-layout" name="persona:menus:legacy-layout"> <strong>[[persona:settings.mobile-menu-side]]</strong>
14
- </label>
15
- </div><br />
13
+ <form id="theme-settings" role="form">
14
+ <div class="form-check mb-2">
15
+ <input class="form-check-input" type="checkbox" id="enableQuickReply" name="enableQuickReply" {{{ if config.enableQuickReply }}}checked{{{ end }}}>
16
+ <label class="form-check-label">[[harmony:settings.enableQuickReply]]</label>
17
+ </div>
16
18
 
17
- <div class="form-group">
18
- <label for="persona:navbar:autohide">[[persona:settings.autoHidingNavbar]]</label>
19
- <select multiple class="form-control" name="persona:navbar:autohide" id="persona:navbar:autohide">
20
- <option value="xs">[[persona:settings.autoHidingNavbar-xs]]</option>
21
- <option value="sm">[[persona:settings.autoHidingNavbar-sm]]</option>
22
- <option value="md">[[persona:settings.autoHidingNavbar-md]]</option>
23
- <option value="lg">[[persona:settings.autoHidingNavbar-lg]]</option>
24
- </select>
25
- </div>
19
+ <div class="form-check mb-2">
20
+ <input class="form-check-input" type="checkbox" id="centerHeaderElements" name="centerHeaderElements" {{{ if config.centerHeaderElements }}}checked{{{ end }}}>
21
+ <label class="form-check-label">[[harmony:settings.centerHeaderElements]]</label>
22
+ </div>
23
+
24
+ <div class="form-check mb-2">
25
+ <input class="form-check-input" type="checkbox" id="stickyToolbar" name="stickyToolbar" {{{ if config.stickyToolbar }}}checked{{{ end }}}>
26
+ <label class="form-check-label">[[harmony:settings.stickyToolbar]]</label>
27
+ </div>
26
28
 
27
- <button id="save" type="button" class="btn btn-primary">[[global:save_changes]]</button>
28
- </form>
29
+
30
+ </form>
31
+ </div>
32
+ </div>
29
33
  </div>
@@ -1,32 +1,33 @@
1
1
  <div class="account">
2
2
  <!-- IMPORT partials/account/header.tpl -->
3
3
 
4
- <div class="row gx-5">
4
+ <div class="d-flex flex-column flex-md-row">
5
5
  <!-- IMPORT partials/account/sidebar-left.tpl -->
6
- <div class="col-12 col-md-9 col-lg-10 ps-md-5">
6
+ <div class="flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
7
7
  <div class="d-flex justify-content-between align-items-center mb-3">
8
- <h3 class="fw-semibold fs-5 mb-0">[[global:topics]]</h3>
9
8
  <div class="d-flex gap-1">
10
- <a href="{config.relative_path}/user/{userslug}/topics" class="btn-ghost-sm fw-semibold {{{ if template.account/topics }}}active{{{ end }}}">[[global:header.recent]]</a>
9
+ <h3 class="fw-semibold fs-5 mb-0">[[global:topics]]</h3>
10
+ {{{ if showSort }}}
11
+ <div class="btn-group bottom-sheet" component="thread/sort">
12
+ <button title="[[global:sort]]" class="btn-ghost-sm dropdown-toggle" data-bs-toggle="dropdown" type="button"><i class="fa-solid fa-arrow-up-wide-short"></i></button>
13
+ <ul class="dropdown-menu">
14
+ {{{each sortOptions }}}
15
+ <li><a class="dropdown-item" href="{config.relative_path}{./url}"><i class="fa fa-fw {{{if ./selected}}}fa-check{{{end}}}"></i>{./name}</a></li>
16
+ {{{end}}}
17
+ </ul>
18
+ </div>
19
+ {{{ end }}}
20
+ </div>
21
+
22
+ <div class="d-flex gap-1">
11
23
  {{{ if canEdit }}}
24
+ <a href="{config.relative_path}/user/{userslug}/topics" class="btn-ghost-sm fw-semibold {{{ if template.account/topics }}}active{{{ end }}}">[[global:header.recent]]</a>
12
25
  <a href="{config.relative_path}/user/{userslug}/watched"class="btn-ghost-sm fw-semibold {{{ if template.account/watched }}}active{{{ end }}}">[[user:watched]]</a>
13
26
  <a href="{config.relative_path}/user/{userslug}/ignored" class="btn-ghost-sm fw-semibold {{{ if template.account/ignored }}}active{{{ end }}}">[[user:ignored]]</a>
14
27
  {{{ end }}}
15
28
  </div>
16
29
  </div>
17
30
 
18
- {{{ if showSort }}}
19
- <div class="btn-toolbar justify-content-end mb-2">
20
- <div class="btn-group bottom-sheet" component="thread/sort">
21
- <button class="btn-ghost-sm dropdown-toggle" data-bs-toggle="dropdown" type="button"><span>[[topic:sort_by]]</span></button>
22
- <ul class="dropdown-menu dropdown-menu-end">
23
- {{{each sortOptions }}}
24
- <li><a class="dropdown-item" href="{config.relative_path}{sortOptions.url}"><i class="fa fa-fw {{{if sortOptions.selected}}}fa-check{{{end}}}"></i>{sortOptions.name}</a></li>
25
- {{{end}}}
26
- </ul>
27
- </div>
28
- </div>
29
- {{{ end }}}
30
31
 
31
32
  {{{ if !topics.length }}}
32
33
  <div class="alert alert-warning text-center">{noItemsFoundKey}</div>
@@ -1,12 +1,8 @@
1
1
  <div class="account">
2
2
  <!-- IMPORT partials/account/header.tpl -->
3
- <div class="row gx-5">
3
+ <div class="d-flex flex-column flex-md-row">
4
4
  <!-- IMPORT partials/account/sidebar-left.tpl -->
5
-
6
-
7
-
8
- <div class="col-12 col-md-9 col-lg-10 ps-md-5">
9
-
5
+ <div class="flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
10
6
  <h3 class="fw-semibold fs-5">{title}</h3>
11
7
 
12
8
  <!-- IF privateUploads -->
@@ -19,7 +15,7 @@
19
15
  <div class="alert alert-warning text-center">[[uploads:no-uploads-found]]</div>
20
16
  <!-- ENDIF !uploads.length -->
21
17
 
22
- <table class="table table-striped">
18
+ <table class="table table-striped table-responsive">
23
19
  <thead>
24
20
  <tr>
25
21
  <th></th>
@@ -30,7 +26,7 @@
30
26
  {{{each uploads}}}
31
27
  <tr data-name="{uploads.name}">
32
28
  <td>
33
- <a href="{config.relative_path}{uploads.url}">{uploads.url}</a>
29
+ <a class="text-break" href="{config.relative_path}{uploads.url}">{uploads.url}</a>
34
30
  </td>
35
31
  <td>
36
32
  <div class="btn-group ">
@@ -10,6 +10,10 @@
10
10
  <input type="checkbox" class="form-check-input" id="centerHeaderElements" name="centerHeaderElements" />
11
11
  <label for="centerHeaderElements" class="form-check-label">Center header elements</label>
12
12
  </div>
13
+ <div class="form-check form-switch">
14
+ <input type="checkbox" class="form-check-input" id="stickyToolbar" name="stickyToolbar" />
15
+ <label for="stickyToolbar" class="form-check-label">Sticky toolbar on topic and category pages</label>
16
+ </div>
13
17
  </form>
14
18
  </div>
15
19
  </div>
@@ -14,7 +14,7 @@
14
14
  </div>
15
15
 
16
16
  <div class="d-flex flex-column pb-4 mb-4 mt-2 border-bottom">
17
- <div class="d-flex justify-content-between align-items-center">
17
+ <div class="d-flex justify-content-between mt-1 align-items-center">
18
18
  <div class="d-flex align-items-center gap-2">
19
19
  <h2 class="mb-0">{group.displayName}</h2>
20
20
  {{{ if group.private }}}<span class="badge text-bg-light border border-1">[[groups:details.private]]</span>{{{ end }}}
@@ -33,11 +33,10 @@
33
33
  {group.descriptionParsed}
34
34
  </div>
35
35
 
36
- <div class="row">
36
+ <div class="d-flex flex-column flex-md-row">
37
37
  <!-- IMPORT partials/groups/sidebar-left.tpl -->
38
38
 
39
- <div class="col-12 col-md-9 col-lg-10 ps-md-5">
40
-
39
+ <div class="flex-1 ps-md-2 ps-lg-5" style="min-width:0;">
41
40
  <div class="tab-content">
42
41
  <div class="tab-pane fade show active" id="groups-posts" role="tabpanel">
43
42
  <h3 class="fw-semibold fs-5 mb-0">[[global:posts]]</h3>
@@ -68,22 +67,6 @@
68
67
  </div>
69
68
  {{{ end }}}
70
69
  </div>
71
-
72
- <div data-widget-area="left">
73
- {{{each widgets.left}}}
74
- {{widgets.left.html}}
75
- {{{end}}}
76
- </div>
77
- </div>
78
- <div class="col-lg-8 col-12">
79
- <div class="col-lg-11">
80
-
81
- </div>
82
- <div data-widget-area="right">
83
- {{{each widgets.right}}}
84
- {{widgets.right.html}}
85
- {{{end}}}
86
- </div>
87
70
  </div>
88
71
  </div>
89
72
  </div>