nodebb-theme-harmony 1.0.0 → 1.0.1

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 (155) hide show
  1. package/README.md +12 -1
  2. package/languages/en-GB/harmony.json +6 -1
  3. package/library.js +56 -25
  4. package/package.json +1 -1
  5. package/plugin.json +0 -1
  6. package/public/harmony.js +165 -41
  7. package/public/settings.js +1 -0
  8. package/screenshots/categories.png +0 -0
  9. package/screenshots/recent.png +0 -0
  10. package/screenshots/topic.png +0 -0
  11. package/scss/account.scss +1 -1
  12. package/scss/chats.scss +81 -26
  13. package/scss/common.scss +84 -10
  14. package/scss/flags.scss +5 -0
  15. package/scss/groups.scss +2 -2
  16. package/scss/harmony.scss +3 -0
  17. package/scss/mixins.scss +7 -3
  18. package/scss/modals.scss +5 -3
  19. package/scss/modules/bottom-sheet.scss +1 -1
  20. package/scss/modules/composer.scss +0 -4
  21. package/scss/modules/cover.scss +1 -11
  22. package/scss/modules/filters.scss +8 -0
  23. package/scss/modules/paginator.scss +24 -0
  24. package/scss/modules/tags.scss +2 -2
  25. package/scss/modules/topic-navigator.scss +18 -42
  26. package/scss/modules/topics-list.scss +32 -17
  27. package/scss/modules/user-menu.scss +6 -0
  28. package/scss/overrides.scss +4 -1
  29. package/scss/sidebar.scss +61 -8
  30. package/scss/topic.scss +36 -13
  31. package/templates/account/blocks.tpl +35 -40
  32. package/templates/account/categories.tpl +47 -29
  33. package/templates/account/consent.tpl +66 -10
  34. package/templates/account/edit/password.tpl +25 -30
  35. package/templates/account/edit/username.tpl +21 -26
  36. package/templates/account/edit.tpl +105 -116
  37. package/templates/account/followers.tpl +12 -19
  38. package/templates/account/following.tpl +12 -18
  39. package/templates/account/groups.tpl +12 -17
  40. package/templates/account/info.tpl +178 -206
  41. package/templates/account/posts.tpl +31 -36
  42. package/templates/account/profile.tpl +82 -72
  43. package/templates/account/sessions.tpl +8 -30
  44. package/templates/account/settings.tpl +222 -203
  45. package/templates/account/theme.tpl +39 -25
  46. package/templates/account/topics.tpl +36 -38
  47. package/templates/account/uploads.tpl +33 -40
  48. package/templates/admin/plugins/harmony.tpl +21 -3
  49. package/templates/categories.tpl +3 -6
  50. package/templates/category.tpl +13 -14
  51. package/templates/chats.tpl +9 -10
  52. package/templates/flags/detail.tpl +160 -193
  53. package/templates/flags/list.tpl +3 -70
  54. package/templates/footer.tpl +2 -2
  55. package/templates/groups/details.tpl +22 -19
  56. package/templates/groups/list.tpl +1 -1
  57. package/templates/groups/members.tpl +0 -2
  58. package/templates/header.tpl +2 -2
  59. package/templates/login.tpl +4 -4
  60. package/templates/notifications.tpl +5 -5
  61. package/templates/partials/account/admin-menu.tpl +9 -9
  62. package/templates/partials/account/category-item.tpl +14 -17
  63. package/templates/partials/account/footer.tpl +3 -0
  64. package/templates/partials/account/header.tpl +78 -81
  65. package/templates/partials/account/session-list.tpl +18 -0
  66. package/templates/partials/account/sidebar-left.tpl +31 -25
  67. package/templates/partials/breadcrumbs.tpl +6 -6
  68. package/templates/partials/buttons/newTopic.tpl +1 -1
  69. package/templates/partials/categories/item.tpl +31 -27
  70. package/templates/partials/categories/lastpost.tpl +7 -7
  71. package/templates/partials/category/filter-dropdown-content.tpl +37 -0
  72. package/templates/partials/{category-selector-content.tpl → category/selector-dropdown-content.tpl} +7 -7
  73. package/templates/partials/category/sort.tpl +22 -7
  74. package/templates/partials/category/subcategory.tpl +2 -3
  75. package/templates/partials/category/tags.tpl +0 -2
  76. package/templates/partials/category/tools.tpl +28 -25
  77. package/templates/partials/category/watch.tpl +39 -6
  78. package/templates/partials/chats/dropdown.tpl +4 -1
  79. package/templates/partials/chats/message-window.tpl +12 -8
  80. package/templates/partials/chats/message.tpl +8 -10
  81. package/templates/partials/chats/options.tpl +14 -6
  82. package/templates/partials/chats/recent_room.tpl +41 -32
  83. package/templates/partials/cookie-consent.tpl +5 -5
  84. package/templates/partials/flags/bulk-actions.tpl +9 -0
  85. package/templates/partials/flags/filters.tpl +165 -78
  86. package/templates/partials/flags/results.tpl +38 -0
  87. package/templates/partials/groups/admin.tpl +4 -4
  88. package/templates/partials/groups/badge.tpl +1 -1
  89. package/templates/partials/groups/invited.tpl +1 -1
  90. package/templates/partials/groups/list.tpl +2 -2
  91. package/templates/partials/groups/memberlist.tpl +2 -2
  92. package/templates/partials/groups/sidebar-left.tpl +10 -10
  93. package/templates/partials/header/brand.tpl +9 -2
  94. package/templates/partials/mobile-footer.tpl +69 -61
  95. package/templates/partials/notifications_list.tpl +11 -8
  96. package/templates/partials/paginator.tpl +11 -9
  97. package/templates/partials/post_bar.tpl +26 -24
  98. package/templates/partials/posts_list_item.tpl +5 -5
  99. package/templates/partials/quick-search-results.tpl +3 -3
  100. package/templates/partials/search-filters.tpl +184 -0
  101. package/templates/partials/search-results.tpl +28 -35
  102. package/templates/partials/sidebar/chats.tpl +26 -34
  103. package/templates/partials/sidebar/drafts.tpl +45 -34
  104. package/templates/partials/sidebar/logged-in-menu.tpl +5 -5
  105. package/templates/partials/sidebar/logged-out-menu.tpl +1 -1
  106. package/templates/partials/sidebar/notifications.tpl +30 -9
  107. package/templates/partials/sidebar/search-mobile.tpl +1 -1
  108. package/templates/partials/sidebar/search.tpl +1 -1
  109. package/templates/partials/sidebar/user-menu.tpl +38 -29
  110. package/templates/partials/sidebar-left.tpl +14 -11
  111. package/templates/partials/sidebar-right.tpl +1 -3
  112. package/templates/partials/skin-switcher.tpl +3 -3
  113. package/templates/partials/tags/filter-dropdown-content.tpl +34 -0
  114. package/templates/partials/tags_list.tpl +4 -4
  115. package/templates/partials/topic/browsing-users.tpl +0 -2
  116. package/templates/partials/topic/event.tpl +1 -1
  117. package/templates/partials/topic/navigation-post.tpl +5 -9
  118. package/templates/partials/topic/navigator-mobile.tpl +62 -0
  119. package/templates/partials/topic/navigator.tpl +23 -17
  120. package/templates/partials/topic/post-editor.tpl +0 -2
  121. package/templates/partials/topic/post-menu-list.tpl +60 -62
  122. package/templates/partials/topic/post-menu.tpl +16 -11
  123. package/templates/partials/topic/post.tpl +45 -27
  124. package/templates/partials/topic/quickreply.tpl +8 -8
  125. package/templates/partials/topic/reply-button.tpl +7 -7
  126. package/templates/partials/topic/sort.tpl +17 -5
  127. package/templates/partials/topic/tools.tpl +2 -2
  128. package/templates/partials/topic/topic-menu-list.tpl +22 -24
  129. package/templates/partials/topic/watch.tpl +42 -9
  130. package/templates/partials/topic-filters.tpl +6 -3
  131. package/templates/partials/topic-list-bar.tpl +50 -46
  132. package/templates/partials/topic-terms.tpl +6 -3
  133. package/templates/partials/topics_list.tpl +88 -93
  134. package/templates/partials/userFilter-placeholders.tpl +5 -0
  135. package/templates/partials/users/filter-dropdown-content.tpl +23 -0
  136. package/templates/partials/users/item.tpl +25 -27
  137. package/templates/partials/users_list.tpl +1 -1
  138. package/templates/popular.tpl +3 -1
  139. package/templates/post-queue.tpl +166 -0
  140. package/templates/recent.tpl +3 -2
  141. package/templates/register.tpl +4 -4
  142. package/templates/search.tpl +39 -177
  143. package/templates/tags.tpl +3 -3
  144. package/templates/top.tpl +3 -1
  145. package/templates/topic.tpl +74 -68
  146. package/templates/unread.tpl +3 -1
  147. package/templates/users.tpl +7 -3
  148. package/templates/modules/usercard.tpl +0 -39
  149. package/templates/partials/acceptTos.tpl +0 -11
  150. package/templates/partials/category-filter-content.tpl +0 -30
  151. package/templates/partials/category-filter-right.tpl +0 -5
  152. package/templates/partials/category-filter.tpl +0 -3
  153. package/templates/partials/category-selector-right.tpl +0 -5
  154. package/templates/partials/category-selector.tpl +0 -3
  155. package/templates/partials/slideout-menu.tpl +0 -6
@@ -1,218 +1,237 @@
1
- <div class="account">
2
- <!-- IMPORT partials/account/header.tpl -->
1
+ <!-- IMPORT partials/account/header.tpl -->
3
2
 
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>
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 }}}
3
+ <div class="mb-3 d-flex justify-content-between align-items-center">
4
+ <h3 class="fw-semibold fs-5 mb-0">{{{ if isSelf }}}[[pages:account/settings]]{{{ else }}}[[pages:account/settings-of, {username}]]{{{ end }}}</h3>
5
+ <button id="submitBtn" class="btn btn-primary">[[global:save_changes]]</button>
6
+ </div>
7
+ <div class="row">
8
+ <div class="col-12 col-md-6">
9
+ {{{ if !disableCustomUserSkins }}}
10
+ <h6 class="fw-bold">[[user:select-skin]]</h6>
11
+ <div class="">
12
+ <select class="form-select form-select-sm" id="bootswatchSkin" data-property="bootswatchSkin">
13
+ {{{each bootswatchSkinOptions}}}
14
+ <option value="{bootswatchSkinOptions.value}" {{{ if bootswatchSkinOptions.selected }}}selected{{{ end }}}>{bootswatchSkinOptions.name}</option>
15
+ {{{end}}}
16
+ </select>
17
+ </div>
18
+ <hr/>
19
+ {{{ end }}}
24
20
 
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/>
21
+ {{{ if allowUserHomePage }}}
22
+ <h6 class="fw-bold">[[user:select-homepage]]</h6>
23
+ <div class="">
24
+ <div class="mb-2">
25
+ <select class="form-select form-select-sm" id="homePageRoute" data-property="homePageRoute">
26
+ <option value="none">None</option>
27
+ {{{ each homePageRoutes }}}
28
+ <option value="{./route}" {{{ if ./selected }}}selected="1"{{{ end }}}>{./name}</option>
44
29
  {{{ end }}}
30
+ </select>
31
+ <p class="form-text text-xs">[[user:homepage_description]]</p>
32
+ </div>
33
+ <div id="homePageCustom" class="mb-2" style="display: none;">
34
+ <label class="form-label" for="homePageCustom">[[user:custom_route]]</label>
35
+ <input type="text" class="form-control form-control-sm" data-property="homePageCustom" id="homePageCustom" value="{settings.homePageRoute}"/>
36
+ <p class="form-text text-xs">[[user:custom_route_help]]</p>
37
+ </div>
38
+ </div>
39
+ <hr/>
40
+ {{{ end }}}
45
41
 
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>
110
-
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 }}}
42
+ <h6 class="fw-bold">[[global:privacy]]</h6>
43
+ <div class="">
44
+ {{{ if !hideEmail }}}
45
+ <div class="form-check">
46
+ <input class="form-check-input" type="checkbox" data-property="showemail" {{{ if settings.showemail }}}checked {{{ end }}}/>
47
+ <label class="form-check-label text-sm">[[user:show_email]]</label>
48
+ </div>
49
+ {{{ end }}}
126
50
 
127
- {{{ each customSettings}}}
128
- <hr/>
129
- <h6 class="fw-bold">{./title}</h6>
130
- <div class="">
131
- {./content}
132
- </div>
51
+ {{{ if !hideFullname }}}
52
+ <div class="form-check">
53
+ <input class="form-check-input" type="checkbox" data-property="showfullname" {{{ if settings.showfullname }}}checked{{{ end }}}/>
54
+ <label class="form-check-label text-sm">[[user:show_fullname]]</label>
55
+ </div>
56
+ {{{ end }}}
57
+ {{{ if !config.disableChat }}}
58
+ <div class="form-check">
59
+ <input class="form-check-input" type="checkbox" data-property="restrictChat" {{{ if settings.restrictChat }}}checked{{{ end }}}/>
60
+ <label class="form-check-label text-sm">[[user:restrict_chats]]</label>
61
+ </div>
62
+ {{{ end }}}
63
+ </div>
64
+ <hr/>
133
65
 
66
+ <h6 class="fw-bold">[[user:browsing]]</h6>
67
+ <div class="">
68
+ <div class="form-check">
69
+ <input class="form-check-input" type="checkbox" data-property="openOutgoingLinksInNewTab" {{{ if settings.openOutgoingLinksInNewTab }}}checked{{{ end }}}/>
70
+ <label class="form-check-label">[[user:open_links_in_new_tab]]</label>
71
+ </div>
72
+ {{{ if inTopicSearchAvailable }}}
73
+ <div class="form-check">
74
+ <input class="form-check-input" type="checkbox" data-property="topicSearchEnabled" {{{ if settings.topicSearchEnabled }}}checked{{{ end }}}/>
75
+ <label class="form-check-label">[[user:enable_topic_searching]]</label>
76
+ </div>
77
+ <p class="form-text text-xs">[[user:topic_search_help]]</p>
78
+ {{{ end }}}
79
+
80
+ <div class="form-check">
81
+ <input class="form-check-input" type="checkbox" data-property="updateUrlWithPostIndex" {{{ if settings.updateUrlWithPostIndex }}}checked{{{ end }}}/>
82
+ <label class="form-check-label">[[user:update_url_with_post_index]]</label>
83
+ </div>
84
+ <div class="form-check">
85
+ <input class="form-check-input" type="checkbox" data-property="scrollToMyPost" {{{ if settings.scrollToMyPost }}}checked{{{ end }}}/>
86
+ <label class="form-check-label">[[user:scroll_to_my_post]]</label>
87
+ </div>
88
+ </div>
89
+ <hr/>
90
+
91
+ <h6 class="fw-bold">[[global:pagination]]</h6>
92
+ <div class="">
93
+ <div class="mb-2 form-check">
94
+ <input type="checkbox" class="form-check-input" data-property="usePagination" {{{ if settings.usePagination }}}checked{{{ end }}}>
95
+ <label class="form-check-label">[[user:paginate_description]]</label>
96
+ </div>
97
+ <div class="mb-2">
98
+ <label class="form-label">[[user:topics_per_page]] ([[user:max_items_per_page, {maxTopicsPerPage}]])</label>
99
+ <input type="text" class="form-control form-control-sm" data-property="topicsPerPage" value="{settings.topicsPerPage}">
100
+ </div>
101
+ <div class="">
102
+ <label class="form-label">[[user:posts_per_page]] ([[user:max_items_per_page, {maxPostsPerPage}]])</label>
103
+ <input type="text" class="form-control form-control-sm" data-property="postsPerPage" value="{settings.postsPerPage}">
104
+ </div>
105
+ </div>
106
+
107
+ <hr/>
108
+
109
+ <h6 class="fw-bold">[[global:sort]]</h6>
110
+ <div class="">
111
+ <div class="mb-2">
112
+ <label class="form-label">[[user:category-topic-sort]]</label>
113
+ <select class="form-select form-select-sm" data-property="categoryTopicSort">
114
+ <option value="newest_to_oldest" {{{ if (settings.categoryTopicSort == "newest_to_oldest") }}}selected{{{ end }}}>[[topic:newest_to_oldest]]</option>
115
+ <option value="oldest_to_newest" {{{ if (settings.categoryTopicSort == "oldest_to_newest") }}}selected{{{ end }}}>[[topic:oldest_to_newest]]</option>
116
+ <option value="most_posts" {{{ if (settings.categoryTopicSort == "most_posts") }}}selected{{{ end }}}>[[topic:most_posts]]</option>
117
+ <option value="most_votes" {{{ if (settings.categoryTopicSort == "most_votes") }}}selected{{{ end }}}>[[topic:most_votes]]</option>
118
+ <option value="most_views" {{{ if (settings.categoryTopicSort == "most_views") }}}selected{{{ end }}}>[[topic:most_views]]</option>
119
+ </select>
120
+ </div>
121
+ <div class="">
122
+ <label class="form-label">[[user:topic-post-sort]]</label>
123
+ <select class="form-select form-select-sm" data-property="topicPostSort">
124
+ <option value="oldest_to_newest" {{{ if (settings.topicPostSort == "oldest_to_newest") }}}selected{{{ end }}}>[[topic:oldest_to_newest]]</option>
125
+ <option value="newest_to_oldest" {{{ if (settings.topicPostSort == "newest_to_oldest") }}}selected{{{ end }}}>[[topic:newest_to_oldest]]</option>
126
+ <option value="most_votes" {{{ if (settings.topicPostSort == "most_votes") }}}selected{{{ end }}}>[[topic:most_votes]]</option>
127
+ </select>
128
+ </div>
129
+ </div>
130
+
131
+ {{{ if !disableEmailSubscriptions }}}
132
+ <hr/>
133
+ <h6 class="fw-bold">[[global:email]]</h6>
134
+ <div class="">
135
+ <div class="mb-2">
136
+ <label class="form-label" for="dailyDigestFreq">[[user:digest_label]]</label>
137
+ <select class="form-select form-select-sm" id="dailyDigestFreq" data-property="dailyDigestFreq" autocomplete="off">
138
+ {{{each dailyDigestFreqOptions}}}
139
+ <option value="{./value}" {{{ if ./selected }}}selected="1"{{{ end }}}>{./name}</option>
134
140
  {{{end}}}
135
- <hr class="d-block d-md-none"/>
136
- </div>
141
+ </select>
142
+ <p class="form-text text-xs">[[user:digest_description]]</p>
143
+ </div>
144
+ </div>
145
+ {{{ end }}}
137
146
 
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">
142
- {{{each languages}}}
143
- <option value="{./code}" {{{ if ./selected }}}selected{{{ end }}}>{./name} ({./code})</option>
144
- {{{end}}}
145
- </select>
146
- </div>
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">
152
- {{{each acpLanguages}}}
153
- <option value="{./code}" {{{ if ./selected }}}selected{{{ end }}}>{./name} ({./code})</option>
154
- {{{end}}}
155
- </select>
156
- </div>
157
- <hr/>
158
- {{{ end }}}
147
+ {{{ each customSettings}}}
148
+ <hr/>
149
+ <h6 class="fw-bold">{./title}</h6>
150
+ <div class="">
151
+ {./content}
152
+ </div>
159
153
 
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>
178
- </div>
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}}}
154
+ {{{end}}}
155
+ <hr class="d-block d-md-none"/>
156
+ </div>
157
+
158
+ <div class="col-12 col-md-6">
159
+ <h6 class="fw-bold">[[global:language]]</h6>
160
+ <div class="">
161
+ <select data-property="userLang" class="form-select form-select-sm mb-2">
162
+ {{{each languages}}}
163
+ <option value="{./code}" {{{ if ./selected }}}selected{{{ end }}}>{./name} ({./code})</option>
164
+ {{{end}}}
165
+ </select>
166
+ </div>
167
+ <hr/>
168
+ {{{ if (isAdmin && isSelf) }}}
169
+ <h6 class="fw-bold">[[user:acp_language]]</h6>
170
+ <div class="">
171
+ <select data-property="acpLang" class="form-select form-select-sm">
172
+ {{{each acpLanguages}}}
173
+ <option value="{./code}" {{{ if ./selected }}}selected{{{ end }}}>{./name} ({./code})</option>
174
+ {{{end}}}
175
+ </select>
176
+ </div>
177
+ <hr/>
178
+ {{{ end }}}
198
179
 
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>
213
- </div>
180
+ <h6 class="fw-bold">[[topic:watch]]</h6>
181
+ <div class="">
182
+ <div class="form-check">
183
+ <input class="form-check-input" type="checkbox" data-property="followTopicsOnCreate" {{{ if settings.followTopicsOnCreate }}}checked{{{ end }}}/>
184
+ <label class="form-check-label">[[user:follow_topics_you_create]]</label>
185
+ </div>
186
+ <div class="form-check">
187
+ <input class="form-check-input" type="checkbox" data-property="followTopicsOnReply" {{{ if settings.followTopicsOnReply }}}checked{{{ end }}}/>
188
+ <label class="form-check-label">[[user:follow_topics_you_reply_to]]</label>
189
+ </div>
190
+ <div class="mb-2">
191
+ <label class="form-label">[[user:default-category-watch-state]]</label>
192
+ <select class="form-select form-select-sm" data-property="categoryWatchState">
193
+ <option value="watching" {{{ if categoryWatchState.watching }}}selected{{{ end }}}>[[category:watching]]</option>
194
+ <option value="notwatching" {{{ if categoryWatchState.notwatching }}}selected{{{ end }}}>[[category:not-watching]]</option>
195
+ <option value="ignoring" {{{ if categoryWatchState.ignoring }}}selected{{{ end }}}>[[category:ignoring]]</option>
196
+ </select>
197
+ </div>
198
+ </div>
199
+ <hr/>
200
+
201
+ <h6 class="fw-bold">[[user:notifications]]</h6>
202
+ <div class="">
203
+ {{{each notificationSettings}}}
204
+ <div class="row mb-3">
205
+ <div class="col-7">
206
+ <label class="text-sm">{./label}</label>
207
+ </div>
208
+ <div class="mb-2 col-5">
209
+ <select class="form-select form-select-sm" data-property="{./name}">
210
+ <option value="none" {{{ if ./none }}}selected{{{ end }}}>[[notifications:none]]</option>
211
+ <option value="notification" {{{ if ./notification }}}selected{{{ end }}}>[[notifications:notification_only]]</option>
212
+ <option value="email" {{{ if ./email }}}selected{{{ end }}}>[[notifications:email_only]]</option>
213
+ <option value="notificationemail" {{{ if ./notificationemail }}}selected{{{ end }}}>[[notifications:notification_and_email]]</option>
214
+ </select>
215
+ </div>
216
+ </div>
217
+ {{{end}}}
218
+
219
+ <div class="row">
220
+ <div class="col-7">
221
+ <label class="text-sm" for="upvote-notif-freq">[[user:upvote-notif-freq]]</label>
222
+ </div>
223
+ <div class="mb-2 col-5">
224
+ <select class="form-select form-select-sm" id="upvote-notif-freq" name="upvote-notif-freq" data-property="upvoteNotifFreq">
225
+ {{{ each upvoteNotifFreq }}}
226
+ <option value="{./name}" {{{ if ./selected }}}selected{{{ end }}}>
227
+ [[user:upvote-notif-freq.{./name}]]
228
+ </option>
229
+ {{{end}}}
230
+ </select>
214
231
  </div>
215
232
  </div>
216
233
  </div>
217
234
  </div>
218
235
  </div>
236
+
237
+ <!-- IMPORT partials/account/footer.tpl -->
@@ -1,33 +1,47 @@
1
- <div class="account">
2
- <!-- IMPORT partials/account/header.tpl -->
1
+ <!-- IMPORT partials/account/header.tpl -->
3
2
 
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>
3
+ <div class="mb-3 d-flex justify-content-between">
4
+ <h3 class="fw-semibold fs-5">[[harmony:settings.title]]</h3>
9
5
 
10
- <button id="save" type="button" class="btn btn-primary">[[global:save_changes]]</button>
11
- </div>
6
+ <button id="save" type="button" class="btn btn-primary">[[global:save_changes]]</button>
7
+ </div>
12
8
 
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>
9
+ <form id="theme-settings" role="form">
10
+ <div class="form-check mb-3">
11
+ <input class="form-check-input" type="checkbox" id="enableQuickReply" name="enableQuickReply" {{{ if config.theme.enableQuickReply }}}checked{{{ end }}}>
12
+ <label class="form-check-label" for="enableQuickReply">[[harmony:settings.enableQuickReply]]</label>
13
+ </div>
18
14
 
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>
15
+ <div class="form-check mb-3">
16
+ <input class="form-check-input" type="checkbox" id="centerHeaderElements" name="centerHeaderElements" {{{ if config.theme.centerHeaderElements }}}checked{{{ end }}}>
17
+ <label class="form-check-label" for="centerHeaderElements">[[harmony:settings.centerHeaderElements]]</label>
18
+ </div>
23
19
 
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>
20
+ <div class="form-check mb-3">
21
+ <input class="form-check-input" type="checkbox" id="mobileTopicTeasers" name="mobileTopicTeasers" {{{ if config.theme.mobileTopicTeasers }}}checked{{{ end }}}>
22
+ <label class="form-check-label" for="mobileTopicTeasers">[[harmony:settings.mobileTopicTeasers]]</label>
23
+ </div>
28
24
 
25
+ <div class="form-check mb-3">
26
+ <input class="form-check-input" type="checkbox" id="stickyToolbar" name="stickyToolbar" {{{ if config.theme.stickyToolbar }}}checked{{{ end }}}>
27
+ <label class="form-check-label" for="stickyToolbar">
28
+ [[harmony:settings.stickyToolbar]]
29
+ <p class="form-text mb-0">
30
+ [[harmony:settings.stickyToolbar.help]]
31
+ </p>
32
+ </label>
33
+ </div>
29
34
 
30
- </form>
31
- </div>
35
+ <div class="form-check mb-3">
36
+ <input class="form-check-input" type="checkbox" id="autohideBottombar" name="autohideBottombar" {{{ if config.theme.autohideBottombar }}}checked{{{ end }}}>
37
+ <label class="form-check-label" for="autohideBottombar">
38
+ [[harmony:settings.autohideBottombar]]
39
+ <p class="form-text mb-0">
40
+ [[harmony:settings.autohideBottombar.help]]
41
+ </p>
42
+ </label>
32
43
  </div>
33
- </div>
44
+
45
+ </form>
46
+
47
+ <!-- IMPORT partials/account/footer.tpl -->
@@ -1,44 +1,42 @@
1
- <div class="account">
2
- <!-- IMPORT partials/account/header.tpl -->
1
+ <!-- IMPORT partials/account/header.tpl -->
3
2
 
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="d-flex justify-content-between align-items-center mb-3">
8
- <div class="d-flex gap-1">
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>
3
+ <div class="d-flex justify-content-between align-items-center mb-3">
4
+ <div class="d-flex gap-1">
5
+ <h3 class="fw-semibold fs-5 mb-0">[[global:topics]]</h3>
6
+ {{{ if showSort }}}
7
+ <div class="btn-group bottom-sheet" component="thread/sort">
8
+ <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>
9
+ <ul class="dropdown-menu p-1 text-sm">
10
+ {{{each sortOptions }}}
11
+ <li><a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="{config.relative_path}{./url}">
12
+ <div class="flex-grow-1">{./name}</div>
13
+ <i class="flex-shrink-0 fa fa-fw {{{if ./selected}}}fa-check{{{end}}}"></i>
14
+ </a></li>
15
+ {{{end}}}
16
+ </ul>
17
+ </div>
18
+ {{{ end }}}
19
+ </div>
21
20
 
22
- <div class="d-flex gap-1">
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>
25
- <a href="{config.relative_path}/user/{userslug}/watched"class="btn-ghost-sm fw-semibold {{{ if template.account/watched }}}active{{{ end }}}">[[user:watched]]</a>
26
- <a href="{config.relative_path}/user/{userslug}/ignored" class="btn-ghost-sm fw-semibold {{{ if template.account/ignored }}}active{{{ end }}}">[[user:ignored]]</a>
27
- {{{ end }}}
28
- </div>
29
- </div>
21
+ <div class="d-flex gap-1">
22
+ {{{ if canEdit }}}
23
+ <a href="{config.relative_path}/user/{userslug}/topics" class="btn-ghost-sm fw-semibold {{{ if template.account/topics }}}active{{{ end }}}">[[global:header.recent]]</a>
24
+ <a href="{config.relative_path}/user/{userslug}/watched"class="btn-ghost-sm fw-semibold {{{ if template.account/watched }}}active{{{ end }}}">[[user:watched]]</a>
25
+ <a href="{config.relative_path}/user/{userslug}/ignored" class="btn-ghost-sm fw-semibold {{{ if template.account/ignored }}}active{{{ end }}}">[[user:ignored]]</a>
26
+ {{{ end }}}
27
+ </div>
28
+ </div>
30
29
 
31
30
 
32
- {{{ if !topics.length }}}
33
- <div class="alert alert-warning text-center">{noItemsFoundKey}</div>
34
- {{{ end }}}
31
+ {{{ if !topics.length }}}
32
+ <div class="alert alert-warning text-center">{noItemsFoundKey}</div>
33
+ {{{ end }}}
35
34
 
36
- <div class="category">
37
- <!-- IMPORT partials/topics_list.tpl -->
38
- {{{ if config.usePagination }}}
39
- <!-- IMPORT partials/paginator.tpl -->
40
- {{{ end }}}
41
- </div>
42
- </div>
43
- </div>
35
+ <div class="category">
36
+ <!-- IMPORT partials/topics_list.tpl -->
37
+ {{{ if config.usePagination }}}
38
+ <!-- IMPORT partials/paginator.tpl -->
39
+ {{{ end }}}
44
40
  </div>
41
+
42
+ <!-- IMPORT partials/account/footer.tpl -->