nodebb-theme-harmony 2.0.0 → 2.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 (145) 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
  145. package/package-lock.json +0 -2338
@@ -1,63 +1,63 @@
1
- <a data-bs-toggle="dropdown" href="#" role="button" class="nav-link d-flex gap-2 justify-content-between align-items-center position-relative" aria-haspopup="true" aria-expanded="false" aria-label="[[global:header.drafts]]">
2
- <span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
3
- <span class="position-relative">
4
- <i component="drafts/icon" class="fa fa-fw fa-pen-to-square unread-count"></i>
5
- <span component="drafts/count" class="visible-closed position-absolute top-0 start-100 translate-middle badge rounded-1 bg-primary hidden">0</span>
6
- </span>
7
- <span class="nav-text small visible-open fw-semibold">[[global:header.drafts]]</span>
8
- </span>
9
- <span component="drafts/count" class="visible-open badge rounded-1 bg-primary hidden">0</span>
10
- </a>
11
- <ul class="drafts-dropdown dropdown-menu p-1 shadow" role="menu">
12
- <li>
13
- <div component="drafts/list" class="list-container draft-list list-unstyled d-flex flex-column overscroll-behavior-contain gap-1 pe-1 ghost-scrollbar">
14
- <div class="dropdown-item rounded-1 p-2 d-flex gap-2 placeholder-wave">
15
- <div class="d-flex flex-grow-1 flex-column w-100">
16
- <div class="text-xs placeholder col-3">&nbsp;</div>
17
- <div class="text-sm placeholder col-11">&nbsp;</div>
18
- <div class="text-xs placeholder col-4">&nbsp;</div>
19
- </div>
20
- </div>
21
- <div class="hidden no-drafts text-center p-4 d-flex flex-column">
22
- <div class="p-4"><i class="fa-solid fa-wind fs-2 text-muted"></i></div>
23
- <div class="text-xs fw-semibold text-muted">[[modules:composer.no-drafts]]</div>
24
- </div>
25
- <div class="draft-item-container">
26
- {{{ each drafts }}}
27
- {{{ if !@first}}}
28
- <hr class="my-1"/>
29
- {{{ end }}}
30
- <div data-save-id="{./save_id}">
31
- <div class="d-flex gap-1 justify-content-between ff-base">
32
- <div class="dropdown-item rounded-1 p-2 d-flex flex-column gap-2 pointer" component="drafts/open" data-save-id="{./save_id}" role="menuitem">
33
- {{{ if (./action == "topics.post") }}}
34
- {{{ if ./title}}}
35
- <div class="text text-xs fw-semibold line-clamp-2 text-break">{./title}</div>
36
- {{{ end }}}
37
- {{{ end }}}
38
-
39
- {{{ if (./action == "posts.reply") }}}
40
- <div class="text text-xs fw-semibold line-clamp-2 text-break">[[topic:composer.replying-to, "{./title}"]]</div>
41
- {{{ end }}}
42
-
43
- {{{ if (./action == "posts.edit") }}}
44
- <div class="text text-xs fw-semibold line-clamp-2">[[topic:composer.editing-in, "{./title}"]]</div>
45
- {{{ end }}}
46
-
47
- {{{ if ./text }}}
48
- <div class="text text-sm line-clamp-3 text-break">{./text}</div>
49
- {{{ end }}}
50
- <div class="timeago text-xs text-muted" title="{./timestampISO}"></div>
51
- </div>
52
- <div>
53
- <button component="drafts/delete" data-save-id="{./save_id}" class="btn btn-light btn-sm">
54
- <i class="unread fa fa-xs fa-trash text-secondary"></i>
55
- </button>
56
- </div>
57
- </div>
58
- </div>
59
- {{{ end }}}
60
- </div>
61
- </div>
62
- </li>
63
- </ul>
1
+ <a data-bs-toggle="dropdown" href="#" role="button" class="nav-link d-flex gap-2 justify-content-between align-items-center position-relative" aria-haspopup="true" aria-expanded="false" aria-label="[[global:header.drafts]]">
2
+ <span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
3
+ <span class="position-relative">
4
+ <i component="drafts/icon" class="fa fa-fw fa-pen-to-square unread-count"></i>
5
+ <span component="drafts/count" class="visible-closed position-absolute top-0 start-100 translate-middle badge rounded-1 bg-primary hidden">0</span>
6
+ </span>
7
+ <span class="nav-text small visible-open fw-semibold">[[global:header.drafts]]</span>
8
+ </span>
9
+ <span component="drafts/count" class="visible-open badge rounded-1 bg-primary hidden">0</span>
10
+ </a>
11
+ <ul class="drafts-dropdown dropdown-menu p-1 shadow" role="menu">
12
+ <li>
13
+ <div component="drafts/list" class="list-container draft-list list-unstyled d-flex flex-column overscroll-behavior-contain gap-1 pe-1 ghost-scrollbar">
14
+ <div class="dropdown-item rounded-1 p-2 d-flex gap-2 placeholder-wave">
15
+ <div class="d-flex flex-grow-1 flex-column w-100">
16
+ <div class="text-xs placeholder col-3">&nbsp;</div>
17
+ <div class="text-sm placeholder col-11">&nbsp;</div>
18
+ <div class="text-xs placeholder col-4">&nbsp;</div>
19
+ </div>
20
+ </div>
21
+ <div class="hidden no-drafts text-center p-4 d-flex flex-column">
22
+ <div class="p-4"><i class="fa-solid fa-wind fs-2 text-muted"></i></div>
23
+ <div class="text-xs fw-semibold text-muted">[[modules:composer.no-drafts]]</div>
24
+ </div>
25
+ <div class="draft-item-container">
26
+ {{{ each drafts }}}
27
+ {{{ if !@first}}}
28
+ <hr class="my-1"/>
29
+ {{{ end }}}
30
+ <div data-save-id="{./save_id}">
31
+ <div class="d-flex gap-1 justify-content-between ff-base">
32
+ <div class="dropdown-item rounded-1 p-2 d-flex flex-column gap-2 pointer" component="drafts/open" data-save-id="{./save_id}" role="menuitem">
33
+ {{{ if (./action == "topics.post") }}}
34
+ {{{ if ./title}}}
35
+ <div class="text text-xs fw-semibold line-clamp-2 text-break">{./title}</div>
36
+ {{{ end }}}
37
+ {{{ end }}}
38
+
39
+ {{{ if (./action == "posts.reply") }}}
40
+ <div class="text text-xs fw-semibold line-clamp-2 text-break">[[topic:composer.replying-to, "{./title}"]]</div>
41
+ {{{ end }}}
42
+
43
+ {{{ if (./action == "posts.edit") }}}
44
+ <div class="text text-xs fw-semibold line-clamp-2">[[topic:composer.editing-in, "{./title}"]]</div>
45
+ {{{ end }}}
46
+
47
+ {{{ if ./text }}}
48
+ <div class="text text-sm line-clamp-3 text-break">{./text}</div>
49
+ {{{ end }}}
50
+ <div class="timeago text-xs text-muted" title="{./timestampISO}"></div>
51
+ </div>
52
+ <div>
53
+ <button component="drafts/delete" data-save-id="{./save_id}" class="btn btn-light btn-sm">
54
+ <i class="unread fa fa-xs fa-trash text-secondary"></i>
55
+ </button>
56
+ </div>
57
+ </div>
58
+ </div>
59
+ {{{ end }}}
60
+ </div>
61
+ </div>
62
+ </li>
63
+ </ul>
@@ -1,23 +1,23 @@
1
- <li id="user_label" class="nav-item mx-2 dropstart usermenu" title="{user.username}" role="menuitem">
2
- <!-- IMPORT partials/sidebar/user-menu.tpl -->
3
- </li>
4
-
5
- {{{ if (config.searchEnabled && user.privileges.search:content) }}}
6
- <li component="sidebar/search" class="nav-item mx-2 search dropstart position-relative" title="[[global:header.search]]" role="menuitem">
7
- <!-- IMPORT partials/sidebar/search.tpl -->
8
- </li>
9
- {{{ end }}}
10
-
11
- <li component="notifications" class="nav-item mx-2 notifications dropstart" title="[[global:header.notifications]]" role="menuitem">
12
- <!-- IMPORT partials/sidebar/notifications.tpl -->
13
- </li>
14
-
15
- {{{ if canChat }}}
16
- <li class="nav-item mx-2 chats dropstart" title="[[global:header.chats]]" role="menuitem">
17
- <!-- IMPORT partials/sidebar/chats.tpl -->
18
- </li>
19
- {{{ end }}}
20
-
21
- <li component="sidebar/drafts" class="nav-item mx-2 drafts dropstart" title="[[global:header.drafts]]" role="menuitem">
22
- <!-- IMPORT partials/sidebar/drafts.tpl -->
1
+ <li id="user_label" class="nav-item mx-2 dropstart usermenu" title="{user.username}" role="menuitem">
2
+ <!-- IMPORT partials/sidebar/user-menu.tpl -->
3
+ </li>
4
+
5
+ {{{ if (config.searchEnabled && user.privileges.search:content) }}}
6
+ <li component="sidebar/search" class="nav-item mx-2 search dropstart position-relative" title="[[global:header.search]]" role="menuitem">
7
+ <!-- IMPORT partials/sidebar/search.tpl -->
8
+ </li>
9
+ {{{ end }}}
10
+
11
+ <li component="notifications" class="nav-item mx-2 notifications dropstart" title="[[global:header.notifications]]" role="menuitem">
12
+ <!-- IMPORT partials/sidebar/notifications.tpl -->
13
+ </li>
14
+
15
+ {{{ if canChat }}}
16
+ <li class="nav-item mx-2 chats dropstart" title="[[global:header.chats]]" role="menuitem">
17
+ <!-- IMPORT partials/sidebar/chats.tpl -->
18
+ </li>
19
+ {{{ end }}}
20
+
21
+ <li component="sidebar/drafts" class="nav-item mx-2 drafts dropstart" title="[[global:header.drafts]]" role="menuitem">
22
+ <!-- IMPORT partials/sidebar/drafts.tpl -->
23
23
  </li>
@@ -1,44 +1,44 @@
1
-
2
- <li class="nav-item mx-2 order-last order-md-first" title="[[global:login]]" role="menuitem">
3
- <a class="nav-link" href="{relative_path}/login" aria-label="[[global:login]]">
4
- <span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
5
- <span class="position-relative">
6
- <i class="fa fa-fw fa-sign-in"></i>
7
- </span>
8
- <span class="nav-text small visible-open fw-semibold">[[global:login]]</span>
9
- </span>
10
- </a>
11
- </li>
12
- <hr class="my-2 mx-2 visible-open">
13
- {{{ if allowRegistration }}}
14
- <li class="nav-item mx-2" title="[[global:register]]" role="menuitem">
15
- <span class="text-xs visible-open">[[login:dont-have-account]]</span>
16
- <a class="nav-link" href="{relative_path}/register" aria-label="[[global:register]]">
17
- <span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
18
- <span class="position-relative">
19
- <i class="fa fa-fw fa-user-plus"></i>
20
- </span>
21
- <span class="nav-text small visible-open fw-semibold">[[global:register]]</span>
22
- </span>
23
- </a>
24
- </li>
25
- <hr class="my-2 mx-2 visible-open">
26
- {{{ end }}}
27
-
28
- {{{ if config.searchEnabled }}}
29
- {{{ if user.privileges.search:content }}}
30
- <li component="sidebar/search" class="nav-item mx-2 search dropstart position-relative" title="[[global:header.search]]" role="menuitem">
31
- <!-- IMPORT partials/sidebar/search.tpl -->
32
- </li>
33
- {{{ else }}}
34
- <li component="sidebar/search" class="visible-open nav-item mx-2 search">
35
- <div class="d-flex gap-2 py-1 px-2 align-items-center" title="[[themes/harmony:login-register-to-search]]">
36
- <i class="fa fa-fw fa-search"></i>
37
- <span class="nav-text visible-open text-xs">[[themes/harmony:login-register-to-search]]</span>
38
- </div>
39
- </li>
40
- {{{ end }}}
41
- {{{ end }}}
42
-
43
-
44
-
1
+
2
+ <li class="nav-item mx-2 order-last order-md-first" title="[[global:login]]" role="menuitem">
3
+ <a class="nav-link" href="{relative_path}/login" aria-label="[[global:login]]">
4
+ <span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
5
+ <span class="position-relative">
6
+ <i class="fa fa-fw fa-sign-in"></i>
7
+ </span>
8
+ <span class="nav-text small visible-open fw-semibold">[[global:login]]</span>
9
+ </span>
10
+ </a>
11
+ </li>
12
+ <hr class="my-2 mx-2 visible-open">
13
+ {{{ if allowRegistration }}}
14
+ <li class="nav-item mx-2" title="[[global:register]]" role="menuitem">
15
+ <span class="text-xs visible-open">[[login:dont-have-account]]</span>
16
+ <a class="nav-link" href="{relative_path}/register" aria-label="[[global:register]]">
17
+ <span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
18
+ <span class="position-relative">
19
+ <i class="fa fa-fw fa-user-plus"></i>
20
+ </span>
21
+ <span class="nav-text small visible-open fw-semibold">[[global:register]]</span>
22
+ </span>
23
+ </a>
24
+ </li>
25
+ <hr class="my-2 mx-2 visible-open">
26
+ {{{ end }}}
27
+
28
+ {{{ if config.searchEnabled }}}
29
+ {{{ if user.privileges.search:content }}}
30
+ <li component="sidebar/search" class="nav-item mx-2 search dropstart position-relative" title="[[global:header.search]]" role="menuitem">
31
+ <!-- IMPORT partials/sidebar/search.tpl -->
32
+ </li>
33
+ {{{ else }}}
34
+ <li component="sidebar/search" class="visible-open nav-item mx-2 search">
35
+ <div class="d-flex gap-2 py-1 px-2 align-items-center" title="[[themes/harmony:login-register-to-search]]">
36
+ <i class="fa fa-fw fa-search"></i>
37
+ <span class="nav-text visible-open text-xs">[[themes/harmony:login-register-to-search]]</span>
38
+ </div>
39
+ </li>
40
+ {{{ end }}}
41
+ {{{ end }}}
42
+
43
+
44
+
@@ -1,49 +1,49 @@
1
- <a data-bs-toggle="dropdown" href="#" role="button" class="nav-link d-flex gap-2 justify-content-between align-items-center position-relative" aria-haspopup="true" aria-expanded="false" aria-label="[[global:header.notifications]]">
2
- <span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
3
- <span class="position-relative">
4
- <i component="notifications/icon" class="fa fa-fw {{{ if unreadCount.notification}}}fa-bell{{{ else }}}fa-bell-o{{{ end }}} unread-count" data-content="{unreadCount.notification}"></i>
5
- <span component="notifications/count" class="visible-closed position-absolute top-0 start-100 translate-middle badge rounded-1 bg-primary {{{ if !unreadCount.notification }}}hidden{{{ end }}}">{unreadCount.notification}</span>
6
- </span>
7
- <span class="nav-text small visible-open fw-semibold truncate-text">[[global:header.notifications]]</span>
8
- </span>
9
- <span component="notifications/count" class="visible-open badge rounded-1 bg-primary {{{ if !unreadCount.notification }}}hidden{{{ end }}}">{unreadCount.notification}</span>
10
- </a>
11
- <ul class="notifications-dropdown dropdown-menu p-1 shadow" role="menu">
12
- <li>
13
- <div component="notifications/list" class="list-container notification-list overscroll-behavior-contain pe-1 ff-base ghost-scrollbar">
14
- <div class="mb-2 p-1">
15
- <div class="d-flex gap-1 justify-content-between">
16
- <div class="d-flex gap-2 flex-grow-1 placeholder-wave">
17
- <div class="placeholder" style="width: 32px; height: 32px;"></div>
18
- <div class="flex-grow-1">
19
- <div class="d-flex flex-column">
20
- <div class="text-sm">
21
- <span class="placeholder placeholder-sm col-4"></span>
22
- <span class="placeholder placeholder-sm col-6"></span>
23
- <span class="placeholder placeholder-sm col-7"></span>
24
- <span class="placeholder placeholder-sm col-2"></span>
25
- <span class="placeholder placeholder-sm col-5"></span>
26
- </div>
27
- <div class="text-xs">
28
- <div class="placeholder placeholder-xs col-6"></div>
29
- </div>
30
- </div>
31
- </div>
32
- </div>
33
- <div>
34
- <button class="mark-read btn btn-ghost btn-sm d-flex align-items-center justify-content-center flex-grow-0 flex-shrink-0 p-1" style="width: 1.5rem; height: 1.5rem;">
35
- <i class="unread fa fa-2xs fa-circle text-primary"></i>
36
- </button>
37
- </div>
38
- </div>
39
- </div>
40
- </div>
41
- </li>
42
- <li class="dropdown-divider"></li>
43
- <li>
44
- <div class="d-flex justify-content-center gap-1 flex-wrap">
45
- <a role="button" href="#" class="btn btn-sm btn-light mark-all-read flex-fill text-nowrap text-truncate ff-secondary"><i class="fa fa-check-double"></i> [[notifications:mark-all-read]]</a>
46
- <a class="btn btn-sm btn-primary flex-fill text-nowrap text-truncate ff-secondary" href="{relative_path}/notifications"><i class="fa fa-list"></i> [[notifications:see-all]]</a>
47
- </div>
48
- </li>
49
- </ul>
1
+ <a data-bs-toggle="dropdown" href="#" role="button" class="nav-link d-flex gap-2 justify-content-between align-items-center position-relative" aria-haspopup="true" aria-expanded="false" aria-label="[[global:header.notifications]]">
2
+ <span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
3
+ <span class="position-relative">
4
+ <i component="notifications/icon" class="fa fa-fw {{{ if unreadCount.notification}}}fa-bell{{{ else }}}fa-bell-o{{{ end }}} unread-count" data-content="{unreadCount.notification}"></i>
5
+ <span component="notifications/count" class="visible-closed position-absolute top-0 start-100 translate-middle badge rounded-1 bg-primary {{{ if !unreadCount.notification }}}hidden{{{ end }}}">{unreadCount.notification}</span>
6
+ </span>
7
+ <span class="nav-text small visible-open fw-semibold truncate-text">[[global:header.notifications]]</span>
8
+ </span>
9
+ <span component="notifications/count" class="visible-open badge rounded-1 bg-primary {{{ if !unreadCount.notification }}}hidden{{{ end }}}">{unreadCount.notification}</span>
10
+ </a>
11
+ <ul class="notifications-dropdown dropdown-menu p-1 shadow" role="menu">
12
+ <li>
13
+ <div component="notifications/list" class="list-container notification-list overscroll-behavior-contain pe-1 ff-base ghost-scrollbar">
14
+ <div class="mb-2 p-1">
15
+ <div class="d-flex gap-1 justify-content-between">
16
+ <div class="d-flex gap-2 flex-grow-1 placeholder-wave">
17
+ <div class="placeholder" style="width: 32px; height: 32px;"></div>
18
+ <div class="flex-grow-1">
19
+ <div class="d-flex flex-column">
20
+ <div class="text-sm">
21
+ <span class="placeholder placeholder-sm col-4"></span>
22
+ <span class="placeholder placeholder-sm col-6"></span>
23
+ <span class="placeholder placeholder-sm col-7"></span>
24
+ <span class="placeholder placeholder-sm col-2"></span>
25
+ <span class="placeholder placeholder-sm col-5"></span>
26
+ </div>
27
+ <div class="text-xs">
28
+ <div class="placeholder placeholder-xs col-6"></div>
29
+ </div>
30
+ </div>
31
+ </div>
32
+ </div>
33
+ <div>
34
+ <button class="mark-read btn btn-ghost btn-sm d-flex align-items-center justify-content-center flex-grow-0 flex-shrink-0 p-1" style="width: 1.5rem; height: 1.5rem;">
35
+ <i class="unread fa fa-2xs fa-circle text-primary"></i>
36
+ </button>
37
+ </div>
38
+ </div>
39
+ </div>
40
+ </div>
41
+ </li>
42
+ <li class="dropdown-divider"></li>
43
+ <li>
44
+ <div class="d-flex justify-content-center gap-1 flex-wrap">
45
+ <a role="button" href="#" class="btn btn-sm btn-light mark-all-read flex-fill text-nowrap text-truncate ff-secondary"><i class="fa fa-check-double"></i> [[notifications:mark-all-read]]</a>
46
+ <a class="btn btn-sm btn-primary flex-fill text-nowrap text-truncate ff-secondary" href="{relative_path}/notifications"><i class="fa fa-list"></i> [[notifications:see-all]]</a>
47
+ </div>
48
+ </li>
49
+ </ul>
@@ -1,29 +1,29 @@
1
- <a component="search/button" id="search-button" href="#" role="button" class="nav-link text-truncate" data-bs-toggle="dropdown" title="[[global:header.search]]" aria-haspopup="true" aria-expanded="false">
2
- <i class="fa fa-search fa-fw"></i>
3
- <span class="nav-text visible-open px-2 fw-semibold">[[global:search]]</span>
4
- </a>
5
- <div class="search-dropdown dropdown-menu p-2 shadow" role="menu">
6
- <form component="search/form" id="search-form" class="d-flex justify-content-end align-items-center" role="search" method="GET">
7
- <div component="search/fields" class="w-100" id="search-fields">
8
- <div id="quick-search-container" class="quick-search-container d-block hidden">
9
- <div class="form-check filter-category mb-2 ms-2">
10
- <input class="form-check-input" type="checkbox" checked>
11
- <label class="form-check-label name"></label>
12
- </div>
13
-
14
- <div class="text-center loading-indicator"><i class="fa fa-spinner fa-spin"></i></div>
15
- <div class="quick-search-results-container"></div>
16
- </div>
17
-
18
- <div class="d-flex gap-1 input-container">
19
- <input autocomplete="off" type="text" class="form-control" placeholder="[[global:search]]" name="query" value="" aria-label="[[search:type-to-search]]">
20
-
21
- <a class="nav-link d-flex justify-content-center align-items-center advanced-search-link" href="{config.relative_path}/search" title="[[search:advanced-search]]">
22
- <i class="fa fa-gears fa-fw text-muted"></i>
23
- </a>
24
- </div>
25
-
26
- <button type="submit" class="btn btn-outline-secondary hide">[[global:search]]</button>
27
- </div>
28
- </form>
1
+ <a component="search/button" id="search-button" href="#" role="button" class="nav-link text-truncate" data-bs-toggle="dropdown" title="[[global:header.search]]" aria-haspopup="true" aria-expanded="false">
2
+ <i class="fa fa-search fa-fw"></i>
3
+ <span class="nav-text visible-open px-2 fw-semibold">[[global:search]]</span>
4
+ </a>
5
+ <div class="search-dropdown dropdown-menu p-2 shadow" role="menu">
6
+ <form component="search/form" id="search-form" class="d-flex justify-content-end align-items-center" role="search" method="GET">
7
+ <div component="search/fields" class="w-100" id="search-fields">
8
+ <div id="quick-search-container" class="quick-search-container d-block hidden">
9
+ <div class="form-check filter-category mb-2 ms-2">
10
+ <input class="form-check-input" type="checkbox" checked>
11
+ <label class="form-check-label name"></label>
12
+ </div>
13
+
14
+ <div class="text-center loading-indicator"><i class="fa fa-spinner fa-spin"></i></div>
15
+ <div class="quick-search-results-container"></div>
16
+ </div>
17
+
18
+ <div class="d-flex gap-1 input-container">
19
+ <input autocomplete="off" type="text" class="form-control" placeholder="[[global:search]]" name="query" value="" aria-label="[[search:type-to-search]]">
20
+
21
+ <a class="nav-link d-flex justify-content-center align-items-center advanced-search-link" href="{config.relative_path}/search" title="[[search:advanced-search]]">
22
+ <i class="fa fa-gears fa-fw text-muted"></i>
23
+ </a>
24
+ </div>
25
+
26
+ <button type="submit" class="btn btn-outline-secondary hide">[[global:search]]</button>
27
+ </div>
28
+ </form>
29
29
  </div>
@@ -1,30 +1,30 @@
1
- <a component="search/button" id="search-button" href="#" role="button" class="nav-link d-flex gap-2 align-items-center text-truncate" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-label="[[global:search]]">
2
- <span>
3
- <i class="fa fa-search fa-fw"></i>
4
- </span>
5
- <span class="nav-text small visible-open fw-semibold">[[global:search]]</span>
6
- </a>
7
- <div class="search-dropdown dropdown-menu p-2 shadow" role="menu">
8
- <form component="search/form" id="search-form" class="d-flex justify-content-end align-items-center" role="search" method="GET">
9
- <div component="search/fields" class="w-100" id="search-fields">
10
- <div class="d-flex gap-1">
11
- <input autocomplete="off" type="text" class="form-control" placeholder="[[global:search]]" name="query" value="" aria-label="[[search:type-to-search]]">
12
-
13
- <a class="btn btn-ghost advanced-search-link p-2" href="{config.relative_path}/search" title="[[search:advanced-search]]">
14
- <i class="fa fa-gears text-muted"></i>
15
- </a>
16
- </div>
17
-
18
- <div id="quick-search-container" class="quick-search-container d-block mt-2 hidden">
19
- <div class="form-check filter-category mb-2 ms-2">
20
- <input class="form-check-input" type="checkbox" checked>
21
- <label class="form-check-label name text-sm"></label>
22
- </div>
23
-
24
- <div class="text-center loading-indicator"><i class="fa fa-spinner fa-spin"></i></div>
25
- <div class="quick-search-results-container"></div>
26
- </div>
27
- <button type="submit" class="btn btn-outline-secondary hide">[[global:search]]</button>
28
- </div>
29
- </form>
30
- </div>
1
+ <a component="search/button" id="search-button" href="#" role="button" class="nav-link d-flex gap-2 align-items-center text-truncate" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-label="[[global:search]]">
2
+ <span>
3
+ <i class="fa fa-search fa-fw"></i>
4
+ </span>
5
+ <span class="nav-text small visible-open fw-semibold">[[global:search]]</span>
6
+ </a>
7
+ <div class="search-dropdown dropdown-menu p-2 shadow" role="menu">
8
+ <form component="search/form" id="search-form" class="d-flex justify-content-end align-items-center" role="search" method="GET">
9
+ <div component="search/fields" class="w-100" id="search-fields">
10
+ <div class="d-flex gap-1">
11
+ <input autocomplete="off" type="text" class="form-control" placeholder="[[global:search]]" name="query" value="" aria-label="[[search:type-to-search]]">
12
+
13
+ <a class="btn btn-ghost advanced-search-link p-2" href="{config.relative_path}/search" title="[[search:advanced-search]]">
14
+ <i class="fa fa-gears text-muted"></i>
15
+ </a>
16
+ </div>
17
+
18
+ <div id="quick-search-container" class="quick-search-container d-block mt-2 hidden">
19
+ <div class="form-check filter-category mb-2 ms-2">
20
+ <input class="form-check-input" type="checkbox" checked>
21
+ <label class="form-check-label name text-sm"></label>
22
+ </div>
23
+
24
+ <div class="text-center loading-indicator"><i class="fa fa-spinner fa-spin"></i></div>
25
+ <div class="quick-search-results-container"></div>
26
+ </div>
27
+ <button type="submit" class="btn btn-outline-secondary hide">[[global:search]]</button>
28
+ </div>
29
+ </form>
30
+ </div>