nodebb-theme-harmony 1.0.0-beta.3 → 1.0.0-beta.30

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 (99) hide show
  1. package/languages/en-GB/harmony.json +1 -0
  2. package/library.js +10 -0
  3. package/package.json +1 -1
  4. package/public/harmony.js +50 -23
  5. package/scss/chats.scss +7 -2
  6. package/scss/common.scss +36 -4
  7. package/scss/harmony.scss +2 -0
  8. package/scss/mixins.scss +7 -3
  9. package/scss/modules/composer.scss +0 -4
  10. package/scss/modules/cover.scss +1 -11
  11. package/scss/modules/paginator.scss +24 -0
  12. package/scss/overrides.scss +2 -0
  13. package/scss/search.scss +8 -0
  14. package/scss/sidebar.scss +27 -2
  15. package/scss/topic.scss +22 -12
  16. package/templates/account/blocks.tpl +1 -1
  17. package/templates/account/categories.tpl +1 -2
  18. package/templates/account/consent.tpl +63 -1
  19. package/templates/account/edit/password.tpl +1 -1
  20. package/templates/account/edit/username.tpl +1 -1
  21. package/templates/account/edit.tpl +2 -2
  22. package/templates/account/followers.tpl +1 -1
  23. package/templates/account/following.tpl +1 -1
  24. package/templates/account/groups.tpl +1 -1
  25. package/templates/account/info.tpl +2 -19
  26. package/templates/account/posts.tpl +1 -1
  27. package/templates/account/profile.tpl +2 -2
  28. package/templates/account/sessions.tpl +2 -19
  29. package/templates/account/settings.tpl +1 -1
  30. package/templates/account/theme.tpl +1 -1
  31. package/templates/account/topics.tpl +1 -1
  32. package/templates/account/uploads.tpl +1 -1
  33. package/templates/categories.tpl +1 -1
  34. package/templates/category.tpl +10 -11
  35. package/templates/chats.tpl +1 -1
  36. package/templates/flags/detail.tpl +0 -1
  37. package/templates/flags/list.tpl +1 -1
  38. package/templates/groups/details.tpl +20 -17
  39. package/templates/groups/members.tpl +0 -2
  40. package/templates/partials/account/header.tpl +10 -17
  41. package/templates/partials/account/session-list.tpl +18 -0
  42. package/templates/partials/categories/item.tpl +11 -14
  43. package/templates/partials/categories/lastpost.tpl +2 -2
  44. package/templates/partials/{category-filter-content.tpl → category/filter-dropdown-content.tpl} +6 -4
  45. package/templates/partials/{category-selector-content.tpl → category/selector-dropdown-content.tpl} +1 -1
  46. package/templates/partials/category/subcategory.tpl +1 -1
  47. package/templates/partials/category/tags.tpl +0 -2
  48. package/templates/partials/category/watch.tpl +28 -4
  49. package/templates/partials/chats/message-window.tpl +3 -2
  50. package/templates/partials/chats/message.tpl +1 -1
  51. package/templates/partials/cookie-consent.tpl +5 -5
  52. package/templates/partials/flags/filters.tpl +1 -1
  53. package/templates/partials/groups/admin.tpl +1 -1
  54. package/templates/partials/groups/badge.tpl +1 -1
  55. package/templates/partials/groups/sidebar-left.tpl +1 -1
  56. package/templates/partials/mobile-footer.tpl +70 -62
  57. package/templates/partials/paginator.tpl +9 -9
  58. package/templates/partials/post_bar.tpl +5 -4
  59. package/templates/partials/posts_list_item.tpl +5 -5
  60. package/templates/partials/quick-search-results.tpl +1 -1
  61. package/templates/partials/search-filters.tpl +184 -0
  62. package/templates/partials/search-results.tpl +28 -32
  63. package/templates/partials/sidebar/chats.tpl +6 -3
  64. package/templates/partials/sidebar/drafts.tpl +5 -5
  65. package/templates/partials/sidebar/logged-in-menu.tpl +5 -5
  66. package/templates/partials/sidebar/notifications.tpl +4 -4
  67. package/templates/partials/sidebar/search-mobile.tpl +1 -1
  68. package/templates/partials/sidebar/search.tpl +1 -1
  69. package/templates/partials/sidebar/user-menu.tpl +1 -1
  70. package/templates/partials/sidebar-left.tpl +4 -1
  71. package/templates/partials/skin-switcher.tpl +2 -2
  72. package/templates/partials/tags_list.tpl +6 -4
  73. package/templates/partials/topic/browsing-users.tpl +0 -2
  74. package/templates/partials/topic/event.tpl +1 -1
  75. package/templates/partials/topic/navigation-post.tpl +5 -9
  76. package/templates/partials/topic/navigator-mobile.tpl +43 -0
  77. package/templates/partials/topic/post-editor.tpl +0 -2
  78. package/templates/partials/topic/post-menu-list.tpl +0 -2
  79. package/templates/partials/topic/post.tpl +19 -3
  80. package/templates/partials/topic/quickreply.tpl +3 -3
  81. package/templates/partials/topic/topic-menu-list.tpl +0 -2
  82. package/templates/partials/topic/watch.tpl +28 -4
  83. package/templates/partials/topic-list-bar.tpl +6 -6
  84. package/templates/partials/topics_list.tpl +46 -45
  85. package/templates/partials/users/filter-dropdown-content.tpl +20 -0
  86. package/templates/popular.tpl +1 -1
  87. package/templates/post-queue.tpl +112 -0
  88. package/templates/recent.tpl +1 -1
  89. package/templates/search.tpl +39 -177
  90. package/templates/top.tpl +1 -1
  91. package/templates/topic.tpl +2 -2
  92. package/templates/unread.tpl +1 -1
  93. package/templates/modules/usercard.tpl +0 -39
  94. package/templates/partials/acceptTos.tpl +0 -11
  95. package/templates/partials/category-filter-right.tpl +0 -5
  96. package/templates/partials/category-filter.tpl +0 -3
  97. package/templates/partials/category-selector-right.tpl +0 -5
  98. package/templates/partials/category-selector.tpl +0 -3
  99. package/templates/partials/slideout-menu.tpl +0 -6
@@ -3,7 +3,7 @@
3
3
 
4
4
  <div class="d-flex flex-column flex-md-row">
5
5
  <!-- IMPORT partials/account/sidebar-left.tpl -->
6
- <div class="flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
6
+ <div class="account-content flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
7
7
  <div class="d-flex flex-wrap justify-content-between align-items-center gap-2 mb-3">
8
8
  <h3 class="fw-semibold fs-5 mb-0">[[global:posts]]</h3>
9
9
  <div class="d-flex flex-wrap gap-1">
@@ -4,9 +4,9 @@
4
4
  <div class="d-flex flex-column flex-md-row">
5
5
  <!-- IMPORT partials/account/sidebar-left.tpl -->
6
6
 
7
- <div class="flex-1 ps-md-2 ps-lg-5">
7
+ <div class="account-content flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
8
8
  {{{ if aboutme }}}
9
- <div component="aboutme" class="text-sm">
9
+ <div component="aboutme" class="text-sm text-break">
10
10
  {aboutmeParsed}
11
11
  </div>
12
12
  {{{ end }}}
@@ -3,28 +3,11 @@
3
3
 
4
4
  <div class="d-flex flex-column flex-md-row">
5
5
  <!-- IMPORT partials/account/sidebar-left.tpl -->
6
- <div class="flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
6
+ <div class="account-content flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
7
7
  <p class="lead">[[user:sessions.description]]</p>
8
8
  <hr />
9
9
  <ul class="list-group" component="user/sessions">
10
- {{{each sessions}}}
11
- <li class="list-group-item" data-uuid="{../uuid}">
12
- <div class="float-end">
13
- <!-- IF isSelfOrAdminOrGlobalModerator -->
14
- <!-- IF !../current -->
15
- <button class="btn btn-sm btn-outline-secondary" type="button" data-action="revokeSession">Revoke Session</button>
16
- <!-- ENDIF !../current -->
17
- <!-- ENDIF isSelfOrAdminOrGlobalModerator -->
18
- {function.userAgentIcons}
19
- <i class="fa fa-circle text-<!-- IF ../current -->success<!-- ELSE -->muted<!-- ENDIF ../current -->"></i>
20
- </div>
21
- {../browser} {../version} on {../platform}<br />
22
- <small class="timeago text-muted" title="{../datetimeISO}"></small>
23
- <ul>
24
- <li><strong>[[global:ip_address]]</strong>: {../ip}</li>
25
- </ul>
26
- </li>
27
- {{{end}}}
10
+ <!-- IMPORT partials/account/session-list.tpl -->
28
11
  </ul>
29
12
  </div>
30
13
  </div>
@@ -3,7 +3,7 @@
3
3
 
4
4
  <div class="d-flex flex-column flex-md-row">
5
5
  <!-- IMPORT partials/account/sidebar-left.tpl -->
6
- <div class="flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
6
+ <div class="account-content flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
7
7
  <div class="mb-3 d-flex justify-content-between">
8
8
  <h3 class="fw-semibold fs-5">{{{ if isSelf }}}[[pages:account/settings]]{{{ else }}}[[pages:account/settings-of, {username}]]{{{ end }}}</h3>
9
9
  <button id="submitBtn" class="btn btn-primary">[[global:save_changes]]</button>
@@ -3,7 +3,7 @@
3
3
 
4
4
  <div class="d-flex flex-column flex-md-row">
5
5
  <!-- IMPORT partials/account/sidebar-left.tpl -->
6
- <div class="flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
6
+ <div class="account-content flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
7
7
  <div class="mb-3 d-flex justify-content-between">
8
8
  <h3 class="fw-semibold fs-5">[[harmony:settings.title]]</h3>
9
9
 
@@ -3,7 +3,7 @@
3
3
 
4
4
  <div class="d-flex flex-column flex-md-row">
5
5
  <!-- IMPORT partials/account/sidebar-left.tpl -->
6
- <div class="flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
6
+ <div class="account-content 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
8
  <div class="d-flex gap-1">
9
9
  <h3 class="fw-semibold fs-5 mb-0">[[global:topics]]</h3>
@@ -2,7 +2,7 @@
2
2
  <!-- IMPORT partials/account/header.tpl -->
3
3
  <div class="d-flex flex-column flex-md-row">
4
4
  <!-- IMPORT partials/account/sidebar-left.tpl -->
5
- <div class="flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
5
+ <div class="account-content flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
6
6
  <h3 class="fw-semibold fs-5">{title}</h3>
7
7
 
8
8
  <!-- IF privateUploads -->
@@ -6,7 +6,7 @@
6
6
  <div class="row">
7
7
  <div class="{{{ if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
8
8
  {{{ if pagination.pages.length }}}
9
- <div><!-- IMPORT partials/category-selector.tpl --></div>
9
+ <div><!-- IMPORT partials/category/selector-dropdown-left.tpl --></div>
10
10
  {{{ end }}}
11
11
  <ul class="categories list-unstyled" itemscope itemtype="http://www.schema.org/ItemList">
12
12
  {{{ each categories }}}
@@ -1,13 +1,4 @@
1
1
  <!-- IMPORT partials/breadcrumbs.tpl -->
2
-
3
- {{{ if widgets.header.length }}}
4
- <div data-widget-area="header">
5
- {{{ each widgets.header }}}
6
- {{widgets.header.html}}
7
- {{{ end }}}
8
- </div>
9
- {{{ end }}}
10
-
11
2
  <div class="d-flex flex-column gap-2">
12
3
  <div class="d-flex gap-2 align-items-center mb-1 {{{ if config.centerHeaderElements }}}justify-content-center{{{ end }}}">
13
4
  {buildCategoryIcon(@value, "40px", "rounded-1 flex-shrink-0")}
@@ -25,6 +16,15 @@
25
16
  </div>
26
17
  </div>
27
18
 
19
+ {{{ if widgets.header.length }}}
20
+ <div data-widget-area="header">
21
+ {{{ each widgets.header }}}
22
+ {{widgets.header.html}}
23
+ {{{ end }}}
24
+ </div>
25
+ {{{ end }}}
26
+
27
+
28
28
  <div class="row mt-3">
29
29
  <div class="category d-flex flex-column {{{if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
30
30
  <!-- IMPORT partials/category/subcategory.tpl -->
@@ -33,8 +33,7 @@
33
33
 
34
34
  {{{ if !topics.length }}}
35
35
  {{{ if privileges.topics:create }}}
36
- <hr class="visible-xs" />
37
- <div class="alert alert-warning" id="category-no-topics">
36
+ <div class="alert alert-info mt-3" id="category-no-topics">
38
37
  [[category:no_topics]]
39
38
  </div>
40
39
  {{{ end }}}
@@ -1,5 +1,5 @@
1
1
  <div class="chats-full d-flex gap-1 vh-100 py-3">
2
- <div class="d-flex flex-column h-100" style="width:300px;" component="chat/nav-wrapper" data-loaded="{{{ if roomId }}}1{{{ else }}}0{{{ end }}}">
2
+ <div class="d-flex flex-column h-100" component="chat/nav-wrapper" data-loaded="{{{ if roomId }}}1{{{ else }}}0{{{ end }}}">
3
3
  <div class="chat-search dropdown mb-2">
4
4
  <label class="text-xs text-muted">[[users:search-user-for-chat]]</label>
5
5
 
@@ -146,7 +146,6 @@
146
146
  <button type="button" class="btn btn-light dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
147
147
  <i class="fa fa-street-view"></i>
148
148
  [[flags:flagged-user]]
149
- <span class="caret"></span>
150
149
  </button>
151
150
  <ul class="dropdown-menu">
152
151
  <li><a class="dropdown-item" href="{config.relative_path}/uid/{target.uid}">[[flags:view-profile]]</a></li>
@@ -18,7 +18,7 @@
18
18
 
19
19
  <div class="btn-group float-end" component="flags/bulk-actions">
20
20
  <button type="button" class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" autocomplete="off" aria-haspopup="true" aria-expanded="false" disabled="disabled">
21
- <i class="fa fa-clone"></i> [[flags:bulk-actions]] <span class="caret"></span>
21
+ <i class="fa fa-clone"></i> <span class="fw-semibold">[[flags:bulk-actions]]</span>
22
22
  </button>
23
23
  <ul class="dropdown-menu">
24
24
  <li><a href="#" class="dropdown-item" data-action="bulk-assign">[[flags:assign-to-me]]</a></li>
@@ -2,10 +2,10 @@
2
2
  <div class="cover position-absolute start-0 top-0" component="groups/cover" style="background-image: url({group.cover:url}); background-position: {group.cover:position};">
3
3
  <div class="container">
4
4
  {{{ if group.isOwner }}}
5
- <div class="controls">
6
- <span class="upload"><i class="fa fa-fw fa-2x fa-upload"></i></span>
7
- <span class="resize"><i class="fa fa-fw fa-2x fa-arrows"></i></span>
8
- <span class="remove"><i class="fa fa-fw fa-2x fa-times"></i></span>
5
+ <div class="controls text-center">
6
+ <span class="upload p-2 m-2 rounded-1 text-bg-light opacity-75"><i class="fa fa-fw fa-upload"></i></span>
7
+ <span class="resize p-2 m-2 rounded-1 text-bg-light opacity-75"><i class="fa fa-fw fa-arrows"></i></span>
8
+ <span class="remove p-2 m-2 rounded-1 text-bg-light opacity-75"><i class="fa fa-fw fa-times"></i></span>
9
9
  </div>
10
10
  <div class="save text-bg-primary">[[groups:cover-save]] <i class="fa fa-fw fa-floppy-o"></i></div>
11
11
  <div class="indicator text-bg-primary">[[groups:cover-saving]] <i class="fa fa-fw fa-refresh fa-spin"></i></div>
@@ -13,24 +13,27 @@
13
13
  </div>
14
14
  </div>
15
15
 
16
- <div class="d-flex flex-column pb-4 mb-4 mt-2 border-bottom">
17
- <div class="d-flex justify-content-between mt-1 align-items-center">
16
+ <div class="d-flex flex-column flex-md-row justify-content-md-between pb-4 mb-4 mt-2 border-bottom">
17
+ <div class="d-flex flex-column mt-1">
18
18
  <div class="d-flex align-items-center gap-2">
19
19
  <h2 class="mb-0">{group.displayName}</h2>
20
- {{{ if group.private }}}<span class="badge text-bg-light border border-1">[[groups:details.private]]</span>{{{ end }}}
21
- {{{ if group.hidden }}}<span class="badge text-bg-light border border-1">[[groups:details.hidden]]</span>{{{ end }}}
22
20
  </div>
23
-
24
- <div>
25
- {{{ if loggedIn }}}
26
- {function.membershipBtn, group}
27
- {{{ end }}}
28
- {{{ if isAdmin }}}
29
- <a href="{config.relative_path}/admin/manage/groups/{group.nameEncoded}" target="_blank" class="btn btn-light"><i class="fa fa-gear"></i> [[user:edit]]</a>
30
- {{{ end }}}
21
+ <div class="d-flex gap-2">
22
+ {group.descriptionParsed}
23
+ <div>
24
+ {{{ if group.private }}}<span class="badge text-bg-light border border-1">[[groups:details.private]]</span>{{{ end }}}
25
+ {{{ if group.hidden }}}<span class="badge text-bg-light border border-1">[[groups:details.hidden]]</span>{{{ end }}}
26
+ </div>
31
27
  </div>
32
28
  </div>
33
- {group.descriptionParsed}
29
+ <div>
30
+ {{{ if loggedIn }}}
31
+ {function.membershipBtn, group}
32
+ {{{ end }}}
33
+ {{{ if isAdmin }}}
34
+ <a href="{config.relative_path}/admin/manage/groups/{group.nameEncoded}" target="_blank" class="btn btn-light"><i class="fa fa-gear"></i> [[user:edit]]</a>
35
+ {{{ end }}}
36
+ </div>
34
37
  </div>
35
38
 
36
39
  <div class="d-flex flex-column flex-md-row">
@@ -1,5 +1,3 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
1
  <!-- IMPORT partials/breadcrumbs.tpl -->
4
2
  <div class="users">
5
3
  <!-- IMPORT partials/users_list.tpl -->
@@ -8,10 +8,10 @@
8
8
  <div class="container">
9
9
  {{{ if allowCoverPicture }}}
10
10
  {{{ if canEdit }}}
11
- <div class="controls">
12
- <span class="upload"><i class="fa fa-fw fa-2x fa-upload"></i></span>
13
- <span class="resize"><i class="fa fa-fw fa-2x fa-arrows"></i></span>
14
- <span class="remove"><i class="fa fa-fw fa-2x fa-times"></i></span>
11
+ <div class="controls text-center">
12
+ <span class="upload p-2 m-2 rounded-1 text-bg-light opacity-75"><i class="fa fa-fw fa-upload"></i></span>
13
+ <span class="resize p-2 m-2 rounded-1 text-bg-light opacity-75"><i class="fa fa-fw fa-arrows"></i></span>
14
+ <span class="remove p-2 m-2 rounded-1 text-bg-light opacity-75"><i class="fa fa-fw fa-times"></i></span>
15
15
  </div>
16
16
  <div class="save text-bg-primary">[[groups:cover-save]] <i class="fa fa-fw fa-floppy-o"></i></div>
17
17
  <div class="indicator text-bg-primary">[[groups:cover-saving]] <i class="fa fa-fw fa-refresh fa-spin"></i></div>
@@ -21,19 +21,12 @@
21
21
  </div>
22
22
 
23
23
  <div class="d-flex flex-column flex-md-row gap-2 w-100 pb-4 mb-4 mt-2 border-bottom">
24
- <div class="avatar-wrapper border-4 position-relative align-self-start d-none d-md-block" style="margin-top: -75px;">
25
- {{{ if picture }}}
26
- <img src="{picture}" class="avatar avatar-rounded" style="--avatar-size: 142px;" />
27
- {{{ else }}}
28
- <div class="avatar avatar-rounded" style="background-color: {icon:bgColor}; --avatar-size: 142px;" title="{username}">{icon:text}</div>
29
- {{{ end }}}
30
- </div>
31
-
32
- <div class="avatar-wrapper border-4 position-relative align-self-center d-block d-md-none" style="margin-top: -75px;">
33
- {{{ if picture }}}
34
- <img src="{picture}" class="avatar avatar-rounded" style="--avatar-size: 142px;" />
35
- {{{ else }}}
36
- <div class="avatar avatar-rounded" style="background-color: {icon:bgColor}; --avatar-size: 142px;" title="{username}">{icon:text}</div>
24
+ <div {{{ if (allowProfilePicture && isSelfOrAdminOrGlobalModerator)}}}component="profile/change/picture"{{{ end }}} class="avatar-wrapper border-4 position-relative align-self-center align-self-md-start hover-parent" style="margin-top: -75px;">
25
+ {buildAvatar(@value, "142px", true)}
26
+ {{{ if (allowProfilePicture && isSelfOrAdminOrGlobalModerator)}}}
27
+ <div component="profile/change/picture" class="d-none d-md-block pointer p-2 rounded-1 opacity-75 text-bg-light position-absolute top-50 start-50 translate-middle hover-visible">
28
+ <span class="upload"><i class="fa fa-fw fa-upload"></i></span>
29
+ </div>
37
30
  {{{ end }}}
38
31
  </div>
39
32
 
@@ -0,0 +1,18 @@
1
+ {{{ each sessions }}}
2
+ <li class="list-group-item text-break" data-uuid="{./uuid}">
3
+ <div class="float-end">
4
+ {{{ if isSelfOrAdminOrGlobalModerator }}}
5
+ {{{ if !./current }}}
6
+ <button class="btn btn-sm btn-outline-secondary" type="button" data-action="revokeSession">[[user:revoke-session]]</button>
7
+ {{{ end }}}
8
+ {{{ end }}}
9
+ {function.userAgentIcons}
10
+ <i class="fa fa-circle text-{{{ if ./current }}}success{{{ else }}}muted{{{ end }}}"></i>
11
+ </div>
12
+ [[user:browser-version-on-platform, {./browser}, {./version}, {./platform}]]<br />
13
+ <small class="timeago text-muted" title="{../datetimeISO}"></small>
14
+ <ul>
15
+ <li><strong>[[global:ip_address]]</strong>: {../ip}</li>
16
+ </ul>
17
+ </li>
18
+ {{{ end }}}
@@ -33,27 +33,24 @@
33
33
  {{{ end }}}
34
34
  </div>
35
35
  </div>
36
-
37
- {{{ if !./link }}}
38
- <div class="col-md-2 d-none d-md-flex stats text-muted gap-2 px-0">
39
- <div class="w-50">
40
- <div class="card card-header align-items-center px-0 py-2 border-0 rounded-1">
36
+ <div class="row col-md-5 col-sm-3 d-none d-md-flex align-self-start">
37
+ {{{ if !./link }}}
38
+ <div class="col-md-5 d-none d-lg-flex stats text-muted gap-2 px-0">
39
+ <div class="w-50 card card-header align-items-center px-0 py-2 border-0 rounded-1">
41
40
  <span class="{./unread-class} human-readable-number fs-5 fw-semibold ff-secondary" title="{./totalTopicCount}">{./totalTopicCount}</span>
42
41
  <span class="text-lowercase text-xs">[[global:topics]]</span>
43
42
  </div>
44
- </div>
45
- <div class="w-50">
46
- <div class="card card-header align-items-center px-0 py-2 border-0 rounded-1">
43
+ <div class="w-50 card card-header align-items-center px-0 py-2 border-0 rounded-1">
47
44
  <span class="{./unread-class} human-readable-number fs-5 fw-semibold ff-secondary" title="{./totalPostCount}">{./totalPostCount}</span>
48
45
  <span class="text-lowercase text-xs">[[global:posts]]</span>
49
46
  </div>
50
47
  </div>
51
- </div>
52
48
 
53
- {{{ if !config.hideCategoryLastPost }}}
54
- <div class="col-md-3 col-sm-3 teaser d-none d-sm-block" component="topic/teaser">
55
- <!-- IMPORT partials/categories/lastpost.tpl -->
49
+ {{{ if !config.hideCategoryLastPost }}}
50
+ <div class="col-md-7 col-sm-3 teaser d-none d-sm-block" component="topic/teaser">
51
+ <!-- IMPORT partials/categories/lastpost.tpl -->
52
+ </div>
53
+ {{{ end }}}
54
+ {{{ end }}}
56
55
  </div>
57
- {{{ end }}}
58
- {{{ end }}}
59
56
  </li>
@@ -4,12 +4,12 @@
4
4
  <div component="category/posts" class="ps-3">
5
5
  <a class="background-link" href="{config.relative_path}/topic/{./topic.slug}{{{ if ./index }}}/{./index}{{{ end }}}"></a>
6
6
  <p class="mb-0">
7
- <a class="text-decoration-none" href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(posts.user, "20px", true)}</a>
7
+ <a class="text-decoration-none" href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(posts.user, "20px", true, "avatar-tooltip")}</a>
8
8
  <a class="permalink text-muted" href="{config.relative_path}/topic/{./topic.slug}{{{ if ./index }}}/{./index}{{{ end }}}">
9
9
  <span class="timeago text-xs" title="{../timestampISO}"></span>
10
10
  </a>
11
11
  </p>
12
- <div class="post-content mt-2 overflow-hidden text-xs line-clamp-3">
12
+ <div class="post-content overflow-hidden text-xs line-clamp-2">
13
13
  {./content}
14
14
  </div>
15
15
  </div>
@@ -1,7 +1,7 @@
1
1
  <button type="button" class="btn-ghost-sm d-flex gap-2 align-items-baseline dropdown-toggle" data-bs-toggle="dropdown">
2
2
  {{{ if selectedCategory }}}
3
3
  <span class="category-item">
4
- {buildCategoryIcon(selectedCategory, "20px", "rounded-circle")}
4
+ {buildCategoryIcon(selectedCategory, "18px", "rounded-circle")}
5
5
  <span class="visible-md-inline visible-lg-inline fw-semibold">{selectedCategory.name}</span>
6
6
  </span>
7
7
  {{{ else }}}
@@ -9,18 +9,20 @@
9
9
  <span class="visible-md-inline visible-lg-inline fw-semibold">[[unread:all_categories]]</span>{{{ end }}}
10
10
  </button>
11
11
  <div component="category-selector-search" class="hidden position-absolute">
12
- <input type="text" class="form-control" autocomplete="off">
12
+ <input type="text" class="form-control form-control-sm" autocomplete="off">
13
13
  </div>
14
14
  <ul component="category/list" class="dropdown-menu category-dropdown-menu" role="menu">
15
- <li role="presentation" class="category" data-all="all">
16
- <a class="dropdown-item" role="menu-item" href="{config.relative_path}/{allCategoriesUrl}"><i component="category/select/icon" class="fa fa-fw fa-check {{{if selectedCategory}}}invisible{{{end}}}"></i> [[unread:all_categories]]</a>
15
+ <li role="presentation" class="category" data-cid="all">
16
+ <a class="dropdown-item" role="menu-item" href="{{{ if allCategoriesUrl }}}{config.relative_path}/{allCategoriesUrl}{{{ else }}}#{{{ end }}}"><i component="category/select/icon" class="fa fa-fw fa-check {{{if selectedCategory}}}invisible{{{end}}}"></i> [[unread:all_categories]]</a>
17
17
  </li>
18
18
  {{{each categoryItems}}}
19
19
  <li role="presentation" class="category {{{ if ../disabledClass }}}disabled{{{ end }}}" data-cid="{../cid}" data-parent-cid="{../parentCid}" data-name="{../name}">
20
20
  <a class="dropdown-item" role="menu-item" href="#">{../level}<i component="category/select/icon" class="fa fa-fw fa-check {{{ if !../selected }}}invisible{{{ end }}}"></i>
21
21
  <span component="category-markup" style="{{{ if ../match }}}font-weight: bold;{{{end}}}">
22
22
  <div class="category-item d-inline-block">
23
+ {{{ if ./icon }}}
23
24
  {buildCategoryIcon(@value, "24px", "rounded-circle")}
25
+ {{{ end }}}
24
26
  {./name}
25
27
  </div>
26
28
  </span>
@@ -12,7 +12,7 @@
12
12
  </span>
13
13
  </button>
14
14
  <div component="category-selector-search" class="hidden position-absolute">
15
- <input type="text" class="form-control" autocomplete="off">
15
+ <input type="text" class="form-control form-control-sm" autocomplete="off">
16
16
  </div>
17
17
  <ul component="category/list" class="dropdown-menu category-dropdown-menu" role="menu">
18
18
  <li component="category/no-matches" role="presentation" class="category hidden">
@@ -1,7 +1,7 @@
1
1
  {{{ if children.length }}}
2
2
  <div class="subcategory">
3
3
  {{{ if hasMoreSubCategories }}}
4
- <div class="mb-2"><!-- IMPORT partials/category-selector.tpl --></div>
4
+ <div class="mb-2"><!-- IMPORT partials/category/selector-dropdown-left.tpl --></div>
5
5
  {{{ else }}}
6
6
  <h3 class="fs-6 fw-semibold">[[category:subcategories]]</h3>
7
7
  {{{ end }}}
@@ -1,5 +1,3 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
1
  {{{ each tags }}}
4
2
  <a href="{config.relative_path}/tags/{topics.tags.value}"><span class="tag-item" data-tag="{topics.tags.value}">{topics.tags.value}</span><span class="tag-topic-count human-readable-number" title="{topics.tags.score}">{topics.tags.score}</span></a>
5
3
  {{{ end }}}
@@ -1,5 +1,5 @@
1
1
  {{{ if config.loggedIn }}}
2
- <div class="btn-group topic-watch-dropdown bottom-sheet" component="topic/watch">
2
+ <div class="btn-group bottom-sheet" component="topic/watch">
3
3
  <button class="btn-ghost-sm d-flex gap-2 align-items-baseline dropdown-toggle" data-bs-toggle="dropdown" type="button">
4
4
  <span component="category/watching/menu" {{{ if !./isWatched }}}class="hidden"{{{ end }}}><i class="fa fa-fw fa-inbox text-primary"></i><span class="visible-md-inline visible-lg-inline fw-semibold"> [[category:watching]]</span></span>
5
5
 
@@ -9,11 +9,35 @@
9
9
  </button>
10
10
 
11
11
  <ul class="dropdown-menu">
12
- <li><a class="dropdown-item" href="#" component="category/watching" data-state="watching"><i component="category/watching/check" class="fa fa-fw {{{ if ./isWatched }}}fa-check{{{ end }}}"></i><i class="fa fa-fw fa-inbox"></i> [[category:watching]]<p class="help-text text-muted"><small>[[category:watching.description]]</small></p></a></li>
12
+ <li>
13
+ <a class="dropdown-item d-flex" href="#" component="category/watching" data-state="watching">
14
+ <span><i component="category/watching/check" class="fa fa-fw {{{ if ./isWatched }}}fa-check{{{ end }}}"></i></span>
15
+ <div class="d-flex flex-column">
16
+ <span><i class="fa fa-fw fa-inbox"></i> [[category:watching]]</span>
17
+ <p class="help-text text-muted"><small>[[category:watching.description]]</small></p>
18
+ </div>
19
+ </a>
20
+ </li>
13
21
 
14
- <li><a class="dropdown-item" href="#" component="category/notwatching" data-state="notwatching"><i component="category/notwatching/check" class="fa fa-fw {{{ if ./isNotWatched }}}fa-check{{{ end }}}"></i><i class="fa fa-fw fa-clock-o"></i> [[category:not-watching]]<p class="help-text text-muted"><small>[[category:not-watching.description]]</small></p></a></li>
22
+ <li>
23
+ <a class="dropdown-item d-flex" href="#" component="category/notwatching" data-state="notwatching">
24
+ <span><i component="category/notwatching/check" class="fa fa-fw {{{ if ./isNotWatched }}}fa-check{{{ end }}}"></i></span>
25
+ <div class="d-flex flex-column">
26
+ <span><i class="fa fa-fw fa-clock-o"></i> [[category:not-watching]]</span>
27
+ <p class="help-text text-muted"><small>[[category:not-watching.description]]</small></p>
28
+ </div>
29
+ </a>
30
+ </li>
15
31
 
16
- <li><a class="dropdown-item" href="#" component="category/ignoring" data-state="ignoring"><i component="category/ignoring/check" class="fa fa-fw {{{ if ./isIgnored }}}fa-check{{{ end }}}"></i><i class="fa fa-fw fa-eye-slash"></i> [[category:ignoring]]<p class="help-text text-muted"><small>[[category:ignoring.description]]</small></p></a></li>
32
+ <li>
33
+ <a class="dropdown-item d-flex" href="#" component="category/ignoring" data-state="ignoring">
34
+ <span><i component="category/ignoring/check" class="fa fa-fw {{{ if ./isIgnored }}}fa-check{{{ end }}}"></i></span>
35
+ <div class="d-flex flex-column">
36
+ <span><i class="fa fa-fw fa-eye-slash"></i> [[category:ignoring]]</span>
37
+ <p class="help-text text-muted"><small>[[category:ignoring.description]]</small></p>
38
+ </div>
39
+ </a>
40
+ </li>
17
41
  </ul>
18
42
  </div>
19
43
  {{{ end }}}
@@ -6,8 +6,9 @@
6
6
 
7
7
  {{{ if roomId }}}
8
8
  <div component="chat/messages" class="expanded-chat d-flex flex-column h-100" data-roomid="{roomId}">
9
- <div component="chat/header" class="d-flex align-items-center px-3 gap-1">
10
- <h5 class="members flex-1 fw-semibold tracking-tight">
9
+ <div component="chat/header" class="d-flex align-items-center px-3 gap-2">
10
+ <a href="#" data-action="close" role="button" class="d-flex d-md-none btn btn-outline align-text-top"><i class="fa fa-chevron-left"></i></a>
11
+ <h5 class="members flex-1 fw-semibold tracking-tight mb-0">
11
12
  {./chatWithMessage}
12
13
  </h5>
13
14
 
@@ -14,7 +14,7 @@
14
14
  {{{ end }}}
15
15
  </div>
16
16
  <div class="message-body-wrapper hover-parent">
17
- <div component="chat/message/body" class="message-body ps-0 py-0 overflow-auto">
17
+ <div component="chat/message/body" class="message-body ps-0 py-0 overflow-auto text-break">
18
18
  {messages.content}
19
19
  </div>
20
20
 
@@ -1,6 +1,6 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
- <div class="cookie-consent">
4
- <button class="float-end btn btn-primary">{dismiss}</button>
5
- {message} <a target="_blank" rel="noopener" href="{link_url}">{link}</a>
1
+ <div class="d-flex justify-content-center position-fixed start-0 bottom-0 w-100 mb-5 mb-md-0">
2
+ <div class="cookie-consent text-bg-info w-50 p-3 rounded d-flex gap-2 mb-5 mb-md-3 justify-content-between align-items-center">
3
+ <span>{message} <a class="fw-bold" target="_blank" rel="noopener" href="{link_url}">{link}</a></span>
4
+ <button class="btn btn-primary text-nowrap">{dismiss}</button>
5
+ </div>
6
6
  </div>
@@ -30,7 +30,7 @@
30
30
  <div class="mb-3">
31
31
  <label class="form-label" for="filter-cid">[[flags:filter-cid]]</label>
32
32
  <div class="input-group">
33
- <!-- IMPORT partials/category-filter.tpl -->
33
+ <!-- IMPORT partials/category/filter-dropdown-left.tpl -->
34
34
  </div>
35
35
  </div>
36
36
  <div class="mb-3">
@@ -82,7 +82,7 @@
82
82
  <label class="form-label" for="memberPostCids">[[groups:details.member-post-cids]]</label>
83
83
  <div class="d-flex gap-1">
84
84
  <div class="member-post-cids-selector">
85
- <!-- IMPORT partials/category-selector.tpl -->
85
+ <!-- IMPORT partials/category/selector-dropdown-left.tpl -->
86
86
  </div>
87
87
  <input id="memberPostCids" type="text" class="form-control" value="{group.memberPostCids}">
88
88
  </div>
@@ -1 +1 @@
1
- <a href="{config.relative_path}/groups/{./slug}" class="badge rounded-1 text-uppercase text-truncate text-decoration-none" style="max-width: 150px;color:{./textColor};background-color: {./labelColor};"><i class="fa {{{ if ./icon }}}{./icon}{{{ if ./userTitle}}} me-1{{{ end }}}{{{else}}}hidden{{{ end }}}"></i><span class="badge-text">{{{ if ./userTitle }}}{./userTitle}{{{ end }}}</span></a>
1
+ <a href="{config.relative_path}/groups/{./slug}" class="badge rounded-1 text-uppercase text-truncate text-decoration-none" style="max-width: 150px;color:{./textColor};background-color: {./labelColor};"><i class="fa {{{ if ./icon }}}{./icon}{{{ if ./userTitle}}} me-1{{{ end }}}{{{else}}}hidden{{{ end }}}"></i><span class="badge-text align-text-bottom">{{{ if ./userTitle }}}{./userTitle}{{{ end }}}</span></a>
@@ -1,5 +1,5 @@
1
1
  <div class="flex-0 pe-2 border-end-md text-sm mb-3 flex-basis-md-200">
2
- <div class="nav sticky-top d-flex flex-row flex-md-column flex-wrap gap-1" style="z-index: 1;">
2
+ <div class="nav sticky-md-top d-flex flex-row flex-md-column flex-wrap gap-1" style="top: 1rem; z-index: 1;">
3
3
  <button data-bs-toggle="tab" data-bs-target="#groups-posts" class="btn-ghost fw-semibold {{{ if template.groups/details }}}active{{{ end }}}">
4
4
  <div class="flex-1">[[global:posts]]</div>
5
5
  </button>