nodebb-theme-harmony 1.0.0-beta.2 → 1.0.0-beta.21

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 (60) hide show
  1. package/package.json +1 -1
  2. package/public/harmony.js +21 -21
  3. package/scss/chats.scss +7 -2
  4. package/scss/common.scss +16 -4
  5. package/scss/modules/composer.scss +0 -4
  6. package/scss/modules/cover.scss +1 -11
  7. package/scss/overrides.scss +2 -0
  8. package/scss/sidebar.scss +27 -2
  9. package/scss/topic.scss +22 -12
  10. package/templates/account/categories.tpl +0 -1
  11. package/templates/account/consent.tpl +62 -0
  12. package/templates/account/edit.tpl +1 -1
  13. package/templates/account/info.tpl +1 -18
  14. package/templates/account/sessions.tpl +1 -18
  15. package/templates/categories.tpl +1 -1
  16. package/templates/category.tpl +1 -2
  17. package/templates/chats.tpl +1 -1
  18. package/templates/flags/detail.tpl +0 -1
  19. package/templates/flags/list.tpl +1 -1
  20. package/templates/groups/details.tpl +20 -17
  21. package/templates/partials/account/header.tpl +10 -17
  22. package/templates/partials/account/session-list.tpl +18 -0
  23. package/templates/partials/categories/lastpost.tpl +1 -1
  24. package/templates/partials/{category-filter-content.tpl → category/filter-dropdown-content.tpl} +2 -2
  25. package/templates/partials/{category-selector-content.tpl → category/selector-dropdown-content.tpl} +1 -1
  26. package/templates/partials/category/subcategory.tpl +1 -1
  27. package/templates/partials/category/watch.tpl +28 -4
  28. package/templates/partials/chats/message-window.tpl +3 -2
  29. package/templates/partials/chats/message.tpl +1 -1
  30. package/templates/partials/flags/filters.tpl +1 -1
  31. package/templates/partials/groups/admin.tpl +1 -1
  32. package/templates/partials/mobile-footer.tpl +70 -62
  33. package/templates/partials/post_bar.tpl +5 -4
  34. package/templates/partials/posts_list_item.tpl +2 -2
  35. package/templates/partials/quick-search-results.tpl +1 -1
  36. package/templates/partials/sidebar/chats.tpl +5 -2
  37. package/templates/partials/sidebar/drafts.tpl +4 -4
  38. package/templates/partials/sidebar/notifications.tpl +3 -3
  39. package/templates/partials/sidebar/search-mobile.tpl +1 -1
  40. package/templates/partials/sidebar/user-menu.tpl +1 -1
  41. package/templates/partials/sidebar-left.tpl +3 -0
  42. package/templates/partials/topic/event.tpl +1 -1
  43. package/templates/partials/topic/navigation-post.tpl +5 -9
  44. package/templates/partials/topic/navigator-mobile.tpl +43 -0
  45. package/templates/partials/topic/post.tpl +2 -2
  46. package/templates/partials/topic/quickreply.tpl +3 -3
  47. package/templates/partials/topic/watch.tpl +28 -4
  48. package/templates/partials/topic-list-bar.tpl +6 -6
  49. package/templates/partials/topics_list.tpl +4 -4
  50. package/templates/partials/users/filter-dropdown-content.tpl +20 -0
  51. package/templates/popular.tpl +1 -1
  52. package/templates/post-queue.tpl +112 -0
  53. package/templates/recent.tpl +1 -1
  54. package/templates/top.tpl +1 -1
  55. package/templates/topic.tpl +2 -2
  56. package/templates/unread.tpl +1 -1
  57. package/templates/partials/category-filter-right.tpl +0 -5
  58. package/templates/partials/category-filter.tpl +0 -3
  59. package/templates/partials/category-selector-right.tpl +0 -5
  60. package/templates/partials/category-selector.tpl +0 -3
@@ -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,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
 
@@ -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,70 +1,78 @@
1
- <div class="text-dark bg-light bottombar p-2 d-flex d-md-none justify-content-between fixed-bottom ff-secondary align-items-center">
2
- <div class="bottom-sheet">
3
- <button class="btn" data-bs-toggle="dropdown">
4
- <i class="fa fa-bars"></i>
5
- </button>
6
- <ul class="dropdown-menu">
7
- {{{ each navigation }}}
8
- <!-- IF function.displayMenuItem, @index -->
9
- <li class="nav-item {./class}{{{ if ./dropdown }}} dropend{{{ end }}}" title="{./title}">
10
- <a class="nav-link nav-btn navigation-link p-3 {{{ if navigation.dropdown }}}dropdown-toggle{{{ end }}}"
11
- {{{ if ./dropdown }}} href="#" role="button" data-bs-toggle="collapse" data-bs-target="#collapse-target-{@index}" onclick="event.stopPropagation();" {{{ else }}} href="{./route}"{{{ end }}} {{{ if ./id }}}id="{./id}"{{{ end }}}{{{ if ./targetBlank }}} target="_blank"{{{ end }}}>
12
- <span class="d-inline-flex justify-content-between align-items-center w-100">
13
- <span class="text-nowrap truncate-open">
14
- {{{ if ./iconClass }}}
15
- <i class="fa fa-fw {./iconClass}" data-content="{./content}"></i>
16
- {{{ end }}}
17
- {{{ if navigation.text }}}
18
- <span class="nav-text visible-open px-2 fw-semibold">{navigation.text}</span>
19
- {{{ end }}}
1
+ <div class="d-flex flex-column d-md-none fixed-bottom ff-secondary gap-1 align-items-center">
2
+
3
+ <!-- IMPORT partials/topic/navigator-mobile.tpl -->
4
+
5
+ <div class="bottombar p-2 text-dark bg-light d-flex justify-content-between align-items-center w-100">
6
+ <div class="">
7
+ <a href="#" role="button" class="nav-link nav-btn d-flex justify-content-between align-items-center position-relative" data-bs-toggle="dropdown">
8
+ <span class="position-relative">
9
+ <i class="fa fa-fw fa-lg fa-bars"></i>
10
+ <span component="unread/count" data-unread-url="{unreadCount.unreadUrl}" class="position-absolute top-0 start-100 translate-middle badge rounded-1 bg-primary {{{ if !unreadCount.mobileUnread }}}hidden{{{ end }}}">{unreadCount.mobileUnread}</span>
11
+ </span>
12
+ </a>
13
+ <ul class="navigation-dropdown dropdown-menu">
14
+ {{{ each navigation }}}
15
+ <!-- IF function.displayMenuItem, @index -->
16
+ <li class="nav-item {./class}{{{ if ./dropdown }}} dropend{{{ end }}}" title="{./title}">
17
+ <a class="nav-link nav-btn navigation-link px-3 py-2 {{{ if navigation.dropdown }}}dropdown-toggle{{{ end }}}"
18
+ {{{ if ./dropdown }}} href="#" role="button" data-bs-toggle="collapse" data-bs-target="#collapse-target-{@index}" onclick="event.stopPropagation();" {{{ else }}} href="{./route}"{{{ end }}} {{{ if ./id }}}id="{./id}"{{{ end }}}{{{ if ./targetBlank }}} target="_blank"{{{ end }}}>
19
+ <span class="d-inline-flex justify-content-between align-items-center w-100">
20
+ <span class="text-nowrap truncate-open">
21
+ {{{ if ./iconClass }}}
22
+ <i class="fa fa-fw {./iconClass}" data-content="{./content}"></i>
23
+ {{{ end }}}
24
+ {{{ if navigation.text }}}
25
+ <span class="nav-text visible-open px-2 fw-semibold">{navigation.text}</span>
26
+ {{{ end }}}
27
+ </span>
28
+ <span component="navigation/count" class="visible-open badge rounded-1 bg-primary {{{ if !./content }}}hidden{{{ end }}}">{./content}</span>
20
29
  </span>
21
- <span component="navigation/count" class="visible-open badge rounded-1 bg-primary {{{ if !./content }}}hidden{{{ end }}}">{./content}</span>
22
- </span>
23
- </a>
24
- {{{ if navigation.dropdown }}}
25
- <div class="ps-3">
26
- <ul id="collapse-target-{@index}" class="collapse list-unstyled ps-3">
27
- {navigation.dropdownContent}
28
- </ul>
29
- </div>
30
- {{{ end }}}
31
- </li>
32
- <!-- ENDIF function.displayMenuItem -->
33
- {{{end}}}
34
- </ul>
35
- </div>
30
+ </a>
31
+ {{{ if navigation.dropdown }}}
32
+ <div class="ps-3">
33
+ <ul id="collapse-target-{@index}" class="collapse list-unstyled ps-3">
34
+ {navigation.dropdownContent}
35
+ </ul>
36
+ </div>
37
+ {{{ end }}}
38
+ </li>
39
+ <!-- ENDIF function.displayMenuItem -->
40
+ {{{end}}}
41
+ </ul>
42
+ </div>
36
43
 
37
- <div class="">
38
- {{{ if config.loggedIn }}}
39
- <ul id="logged-in-menu" class="list-unstyled d-flex align-items-center w-100 gap-3 mb-0">
40
- {{{ if config.searchEnabled }}}
41
- <li component="sidebar/search" class="nav-item m-0 search bottom-sheet position-relative">
42
- <!-- IMPORT partials/sidebar/search-mobile.tpl -->
43
- </li>
44
- {{{ end }}}
44
+ <div class="">
45
+ {{{ if config.loggedIn }}}
46
+ <ul id="logged-in-menu" class="list-unstyled d-flex align-items-center w-100 gap-3 mb-0">
47
+ {{{ if config.searchEnabled }}}
48
+ <li component="sidebar/search" class="nav-item m-0 search">
49
+ <!-- IMPORT partials/sidebar/search-mobile.tpl -->
50
+ </li>
51
+ {{{ end }}}
45
52
 
46
- <li component="notifications" class="nav-item m-0 notifications bottom-sheet">
47
- <!-- IMPORT partials/sidebar/notifications.tpl -->
48
- </li>
53
+ <li component="notifications" class="nav-item m-0 notifications">
54
+ <!-- IMPORT partials/sidebar/notifications.tpl -->
55
+ </li>
49
56
 
50
- {{{ if canChat }}}
51
- <li class="nav-item m-0 chats bottom-sheet">
52
- <!-- IMPORT partials/sidebar/chats.tpl -->
53
- </li>
54
- {{{ end }}}
57
+ {{{ if canChat }}}
58
+ <li class="nav-item m-0 chats">
59
+ <!-- IMPORT partials/sidebar/chats.tpl -->
60
+ </li>
61
+ {{{ end }}}
55
62
 
56
- <li component="sidebar/drafts" class="nav-item m-0 drafts bottom-sheet">
57
- <!-- IMPORT partials/sidebar/drafts.tpl -->
58
- </li>
63
+ <li component="sidebar/drafts" class="hidden nav-item m-0 drafts">
64
+ <!-- IMPORT partials/sidebar/drafts.tpl -->
65
+ </li>
59
66
 
60
- <li id="user_label" class="nav-item m-0 py-2 bottom-sheet usermenu">
61
- <!-- IMPORT partials/sidebar/user-menu.tpl -->
62
- </li>
63
- </ul>
64
- {{{ else }}}
65
- <ul id="logged-out-menu" class="list-unstyled d-flex w-100 gap-3 mb-0 logged-out-menu">
66
- <!-- IMPORT partials/sidebar/logged-out-menu.tpl -->
67
- </ul>
68
- {{{ end }}}
67
+ <li id="user_label" class="nav-item m-0 py-2 usermenu">
68
+ <!-- IMPORT partials/sidebar/user-menu.tpl -->
69
+ </li>
70
+ </ul>
71
+ {{{ else }}}
72
+ <ul id="logged-out-menu" class="list-unstyled d-flex w-100 gap-3 mb-0 logged-out-menu">
73
+ <!-- IMPORT partials/sidebar/logged-out-menu.tpl -->
74
+ </ul>
75
+ {{{ end }}}
76
+ </div>
69
77
  </div>
70
78
  </div>
@@ -16,10 +16,11 @@
16
16
  <a class="btn-ghost-sm d-none d-lg-flex align-self-stretch" target="_blank" href="{rssFeedUrl}" itemprop="item"><i class="fa fa-rss text-primary"></i></a>
17
17
  {{{ end }}}
18
18
 
19
- <span class="loading-indicator btn float-start text-muted navbar-text hidden" done="0">
20
- <i class="fa fa-refresh fa-spin"></i>
21
- <span class="hidden-xs">[[topic:loading_more_posts]]</span>
22
- </span>
19
+ {{{ if browsingUsers }}}
20
+ <div class="hidden-xs">
21
+ <!-- IMPORT partials/topic/browsing-users.tpl -->
22
+ </div>
23
+ {{{ end }}}
23
24
  </ul>
24
25
  <!-- IMPORT partials/topic/reply-button.tpl -->
25
26
  </div>
@@ -1,5 +1,5 @@
1
1
  <hr/>
2
- <a class="topic-title fw-semibold fs-5 text-reset" href="{config.relative_path}/post/{./pid}">
2
+ <a class="topic-title fw-semibold fs-5 text-reset text-break" href="{config.relative_path}/post/{./pid}">
3
3
  {{{ if !./isMainPost }}}RE: {{{ end }}}{./topic.title}
4
4
  </a>
5
5
  <li component="post" class="posts-list-item {{{ if ./deleted }}} deleted{{{ else }}}{{{ if ./topic.deleted }}} deleted{{{ end }}}{{{ end }}}{{{ if ./topic.scheduled }}} scheduled{{{ end }}}" data-pid="{./pid}" data-uid="{./uid}">
@@ -12,7 +12,7 @@
12
12
  <span class="timeago text-sm text-muted" title="{../timestampISO}"></span>
13
13
  </div>
14
14
 
15
- <div component="post/content" class="content text-sm">
15
+ <div component="post/content" class="content text-sm text-break">
16
16
  {../content}
17
17
  </div>
18
18
  </div>
@@ -9,7 +9,7 @@
9
9
  </div>
10
10
  {{{ end }}}
11
11
 
12
- <ul id="quick-search-results" class="quick-search-results list-unstyled mb-0 p-0 overflow-auto" style="max-width:400px; max-height: 500px;">
12
+ <ul id="quick-search-results" class="quick-search-results list-unstyled mb-0 p-0 overflow-auto overscroll-behavior-contain" style="max-width: 400px; max-height: 500px;">
13
13
  <li role="separator" class="dropdown-divider d-none d-md-block"></li>
14
14
  {{{ each posts }}}
15
15
  <li data-tid="{posts.topic.tid}" data-pid="{posts.pid}" class="d-flex flex-column gap-1">
@@ -10,7 +10,7 @@
10
10
  </a>
11
11
  <ul class="chats-dropdown dropdown-menu p-1 shadow">
12
12
  <li>
13
- <ul component="chat/list" class="chat-list chats-list list-unstyled p-0 pe-1">
13
+ <ul component="chat/list" class="chat-list chats-list list-unstyled overscroll-behavior-contain p-0 pe-1">
14
14
  <li class="dropdown-item rounded-1 p-2 d-flex gap-2 placeholder-wave">
15
15
  <div class="main-avatar">
16
16
  <div class="placeholder" style="width: 32px; height: 32px;"></div>
@@ -47,7 +47,10 @@
47
47
  <li class="notif-dropdown-link">
48
48
  <div class="d-flex justify-content-center gap-1 flex-wrap">
49
49
  <a component="chats/mark-all-read" 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> [[modules:chat.mark_all_read]]</a>
50
- <a class="btn btn-sm btn-primary flex-fill text-nowrap text-truncate ff-secondary" href="{relative_path}/user/{user.userslug}/chats"><i class="fa fa-list"></i> [[modules:chat.see_all]]</a>
50
+ <!-- on md and up see all chats button goes to last room -->
51
+ <a class="d-none d-md-inline btn btn-sm btn-primary flex-fill text-nowrap text-truncate ff-secondary" href="{relative_path}/user/{user.userslug}/chats{{{ if user.lastRoomId }}}/{user.lastRoomId}{{{ end }}}"><i class="fa fa-list"></i> [[modules:chat.see_all]]</a>
52
+ <!-- on xs&sm the see all chats button goes to the list of chats -->
53
+ <a class="d-inline d-md-none btn btn-sm btn-primary flex-fill text-nowrap text-truncate ff-secondary" href="{relative_path}/user/{user.userslug}/chats"><i class="fa fa-list"></i> [[modules:chat.see_all]]</a>
51
54
  </div>
52
55
  </li>
53
56
  </ul>
@@ -10,7 +10,7 @@
10
10
  </a>
11
11
  <ul class="drafts-dropdown dropdown-menu p-1 shadow">
12
12
  <li>
13
- <ul component="drafts/list" class="draft-list list-unstyled d-flex flex-column gap-1 pe-1">
13
+ <ul component="drafts/list" class="draft-list list-unstyled d-flex flex-column overscroll-behavior-contain gap-1 pe-1">
14
14
  <li class="no-drafts text-center p-2">[[modules:composer.no-drafts]]</li>
15
15
 
16
16
  {{{ each drafts }}}
@@ -22,12 +22,12 @@
22
22
  <div class="dropdown-item rounded-1 p-2 d-flex flex-column gap-2 pointer" component="drafts/open" data-save-id="{./save_id}">
23
23
  {{{ if (./action == "topics.post") }}}
24
24
  {{{ if ./title}}}
25
- <div class="text text-xs fw-semibold line-clamp-2">{./title}</div>
25
+ <div class="text text-xs fw-semibold line-clamp-2 text-break">{./title}</div>
26
26
  {{{ end }}}
27
27
  {{{ end }}}
28
28
 
29
29
  {{{ if (./action == "posts.reply") }}}
30
- <div class="text text-xs fw-semibold line-clamp-2">[[topic:composer.replying_to, "{./title}"]]</div>
30
+ <div class="text text-xs fw-semibold line-clamp-2 text-break">[[topic:composer.replying_to, "{./title}"]]</div>
31
31
  {{{ end }}}
32
32
 
33
33
  {{{ if (./action == "posts.edit") }}}
@@ -35,7 +35,7 @@
35
35
  {{{ end }}}
36
36
 
37
37
  {{{ if ./text }}}
38
- <div class="text text-sm line-clamp-3">{./text}</div>
38
+ <div class="text text-sm line-clamp-3 text-break">{./text}</div>
39
39
  {{{ end }}}
40
40
  <div class="timeago text-xs text-muted" title="{./timestampISO}"></div>
41
41
  </div>
@@ -4,13 +4,13 @@
4
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
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
6
  </span>
7
- <span class="nav-text small visible-open fw-semibold">[[global:header.notifications]]</span>
7
+ <span class="nav-text small visible-open fw-semibold truncate-text">[[global:header.notifications]]</span>
8
8
  </span>
9
9
  <span component="notifications/count" class="visible-open badge rounded-1 bg-primary {{{ if !unreadCount.notification }}}hidden{{{ end }}}">{unreadCount.notification}</span>
10
10
  </a>
11
- <ul class="notifications-dropdown dropdown-menu p-2 shadow">
11
+ <ul class="notifications-dropdown dropdown-menu p-1 shadow">
12
12
  <li>
13
- <ul component="notifications/list" class="notification-list list-unstyled">
13
+ <ul component="notifications/list" class="notification-list list-unstyled overscroll-behavior-contain">
14
14
  <li class="mb-2 placeholder-wave">
15
15
  <div class="text-sm placeholder col-11">&nbsp;</div>
16
16
  <div class="text-sm placeholder col-5">&nbsp;</div><br />
@@ -15,7 +15,7 @@
15
15
  <div class="quick-search-results-container"></div>
16
16
  </div>
17
17
 
18
- <div class="d-flex gap-1 input-container mt-2">
18
+ <div class="d-flex gap-1 input-container">
19
19
  <input autocomplete="off" type="text" class="form-control" placeholder="[[global:search]]" name="query" value="">
20
20
 
21
21
  <div class="nav-btn d-flex justify-content-center align-items-center advanced-search-link">
@@ -2,7 +2,7 @@
2
2
  {buildAvatar(user, "20px", true)}
3
3
  <span id="user-header-name" class="nav-text small visible-open fw-semibold">{user.username}</span>
4
4
  </label>
5
- <ul id="user-control-list" component="header/usercontrol" class="dropdown-menu shadow p-1 text-sm" aria-labelledby="user_dropdown">
5
+ <ul id="user-control-list" component="header/usercontrol" class="overscroll-behavior-contain user-dropdown dropdown-menu shadow p-1 text-sm" aria-labelledby="user_dropdown">
6
6
  <li>
7
7
  <a class="dropdown-item rounded-1 d-flex align-items-center gap-1" component="header/profilelink" href="{relative_path}/user/{user.userslug}">
8
8
  <div class="text-center"><span component="user/status" class="badge border border-white border-2 rounded-circle status {user.status}"><span class="visually-hidden">[[global:{user.status}]]</span></span></div>
@@ -28,7 +28,10 @@
28
28
  {{{end}}}
29
29
  </ul>
30
30
  <div class="w-100">
31
+ {{{ if !config.disableCustomUserSkins }}}
31
32
  <!-- IMPORT partials/skin-switcher.tpl -->
33
+ {{{ end }}}
34
+
32
35
  <div class="sidebar-toggle m-2 d-none d-lg-block">
33
36
  <a href="#" role="button" component="sidebar/toggle" class="nav-btn d-flex gap-2 align-items-center p-2 pointer nav-link w-100 text-nowrap">
34
37
  <i class="fa fa-fw fa-angles-right"></i>
@@ -2,7 +2,7 @@
2
2
  <div class="timeline-badge">
3
3
  <i class="fa {{{ if ./icon }}}{./icon}{{{ else }}}fa-circle{{{ end }}} small"></i>
4
4
  </div>
5
- <span class="timeline-text small">
5
+ <span class="timeline-text small d-flex align-items-center gap-1">
6
6
  {./text}
7
7
  </span>
8
8
  {{{ if privileges.isAdminOrMod }}}
@@ -1,14 +1,10 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
- <div class="clearfix">
4
- <div class="icon float-start">
5
- <a href="<!-- IF post.user.userslug -->{config.relative_path}/user/{post.user.userslug}<!-- ELSE -->#<!-- ENDIF post.user.userslug -->">
6
- {buildAvatar(post.user, "24px", true, "", "user/picture")} {post.user.username}
1
+ <div class="d-flex gap-2 mb-2 justify-content-between align-items-center flex-nowrap">
2
+ <div class="icon text-truncate">
3
+ <a href="{{{ if post.user.userslug }}}{config.relative_path}/user/{post.user.userslug}{{{else }}}#{{{ end }}}">
4
+ {buildAvatar(post.user, "24px", true)} {post.user.username}
7
5
  </a>
8
6
  </div>
9
- <small class="float-end">
10
- <span class="timeago" title="{post.timestampISO}"></span>
11
- </small>
7
+ <span class="timeago text-nowrap text-sm" title="{post.timestampISO}"></span>
12
8
  </div>
13
9
 
14
10
  <div>{post.content}</div>
@@ -0,0 +1,43 @@
1
+ <div class="d-flex justify-content-end w-100">
2
+ <div class="pagination-block text-bg-light m-2 rounded-1 border border-gray-300" style="height:50px;">
3
+ <div class="position-relative">
4
+ <div class="progress-bar rounded-1 bg-info d-block position-absolute" style="height:50px;"></div>
5
+ </div>
6
+ <div class="wrapper d-flex align-items-center h-100" style="padding: 5px 0px;">
7
+ <i class="fa fa-2x fa-angle-double-up pointer fa-fw pagetop" style="z-index: 1;"></i>
8
+
9
+ <a href="#" class="text-reset dropdown-toggle d-inline-block px-3 text-decoration-none" data-bs-toggle="dropdown">
10
+ <span class="pagination-text position-relative fw-bold"></span>
11
+ </a>
12
+
13
+ <i class="fa fa-2x fa-angle-double-down pointer fa-fw pagebottom" style="z-index: 1;"></i>
14
+ <ul class="dropdown-menu p-0" role="menu" style="width: 100%;">
15
+ <li class="p-3">
16
+ <div class="row">
17
+ <div class="col-8 post-content overflow-hidden mb-3" style="height: 350px;"></div>
18
+ <div class="col-4 text-end">
19
+ <div class="scroller-content">
20
+ <span class="pointer pagetop">[[topic:first-post]] <i class="fa fa-angle-double-up"></i></span>
21
+ <div class="scroller-container border-gray-200" style="height: 300px; border-right: 3px solid; margin-right: 5.5px;">
22
+ <div class="scroller-thumb position-relative" style="height: 40px;right: -6px; padding-right: 15px; margin-right: -15px;">
23
+ <span class="thumb-text fw-bold user-select-none position-relative" style="top: -15px; padding-right: 10px;"></span>
24
+ <div class="rounded-2 scroller-thumb-icon bg-primary d-inline-block position-relative" style="width: 9px; height:40px;"></div>
25
+ </div>
26
+ </div>
27
+ <span class="pointer pagebottom">[[topic:last-post]] <i class="fa fa-angle-double-down"></i></span>
28
+ </div>
29
+ </div>
30
+ </div>
31
+ <div class="row">
32
+ <div class="col-6">
33
+ <button id="myNextPostBtn" class="btn btn-outline-secondary form-control text-truncate" disabled>[[topic:go-to-my-next-post]]</button>
34
+ </div>
35
+ <div class="col-6">
36
+ <input type="number" class="form-control" id="indexInput" placeholder="[[global:pagination.enter_index]]">
37
+ </div>
38
+ </div>
39
+ </li>
40
+ </ul>
41
+ </div>
42
+ </div>
43
+ </div>
@@ -74,7 +74,7 @@
74
74
  <a component="post/reply-count" data-target-component="post/replies/container" href="#" class="d-flex gap-2 align-items-center mt-2 btn-outline border rounded-1 p-1 threaded-replies user-select-none float-start text-muted text-decoration-none {{{ if !posts.replies.count }}}hidden{{{ end }}}">
75
75
  <span component="post/reply-count/avatars" class="avatars d-inline-flex gap-1 align-items-top {{{ if posts.replies.hasMore }}}hasMore{{{ end }}}">
76
76
  {{{each posts.replies.users}}}
77
- <span>{buildAvatar(posts.replies.users, "20px", true, "")}</span>
77
+ <span>{buildAvatar(posts.replies.users, "20px", true, "avatar-tooltip")}</span>
78
78
  {{{end}}}
79
79
  {{{ if posts.replies.hasMore}}}
80
80
  <span><i class="fa fa-ellipsis"></i></span>
@@ -104,7 +104,7 @@
104
104
  <i class="fa fa-chevron-up text-primary"></i>
105
105
  </a>
106
106
 
107
- <div class="d-inline-block px-3 btn-ghost-sm" component="post/vote-count" data-votes="{posts.votes}">{posts.votes}</div>
107
+ <div class="d-inline-block px-2 mx-1 btn-ghost-sm" component="post/vote-count" data-votes="{posts.votes}">{posts.votes}</div>
108
108
 
109
109
  {{{ if !downvote:disabled }}}
110
110
  <a component="post/downvote" href="#" class="btn-ghost-sm {{{ if posts.downvoted }}}downvoted{{{ end }}}">
@@ -9,14 +9,14 @@
9
9
  <form class="flex-grow-1 d-flex flex-column gap-2" method="post" action="{config.relative_path}/compose">
10
10
  <input type="hidden" name="tid" value="{tid}" />
11
11
  <input type="hidden" name="_csrf" value="{config.csrf_token}" />
12
- <div class="quickreply-message">
12
+ <div class="quickreply-message position-relative">
13
13
  <textarea rows="4" name="content" component="topic/quickreply/text" class="form-control mousetrap" placeholder="[[modules:composer.textarea.placeholder]]"></textarea>
14
14
  <div class="imagedrop"><div>[[topic:composer.drag_and_drop_images]]</div></div>
15
15
  </div>
16
16
  <div>
17
- <div class="btn-group">
17
+ <div class="d-flex justify-content-end gap-2">
18
+ <button type="submit" component="topic/quickreply/expand" class="btn btn-sm btn-outline" formmethod="get"><i class="fa fa-expand"></i></button>
18
19
  <button type="submit" component="topic/quickreply/button" class="btn btn-sm btn-primary">[[topic:post-quick-reply]]</button>
19
- <button type="submit" component="topic/quickreply/expand" class="btn btn-sm btn-primary" formmethod="get"><i class="fa fa-expand"></i></button>
20
20
  </div>
21
21
  </div>
22
22
  </form>
@@ -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="topic/following/menu" class="d-flex gap-2 align-items-center{{{ if !isFollowing }}} hidden{{{ end }}}">
5
5
  <i class="fa fa-fw fa-bell-o link-primary"></i>
@@ -17,11 +17,35 @@
17
17
  </span>
18
18
  </button>
19
19
  <ul class="dropdown-menu">
20
- <li><a class="dropdown-item" href="#" component="topic/following"><i component="topic/following/check" class="fa fa-fw {{{ if isFollowing }}}fa-check{{{ end }}}"></i><i class="fa fa-fw fa-bell-o"></i> [[topic:watching]]<p class="help-text text-muted"><small>[[topic:watching.description]]</small></p></a></li>
20
+ <li>
21
+ <a class="dropdown-item d-flex" href="#" component="topic/following">
22
+ <span><i component="topic/following/check" class="fa fa-fw {{{ if isFollowing }}}fa-check{{{ end }}}"></i></span>
23
+ <div class="d-flex flex-column">
24
+ <span><i class="fa fa-fw fa-bell-o"></i> [[topic:watching]]</span>
25
+ <p class="help-text text-muted"><small>[[topic:watching.description]]</small></p>
26
+ </div>
27
+ </a>
28
+ </li>
21
29
 
22
- <li><a class="dropdown-item" href="#" component="topic/not-following"><i component="topic/not-following/check" class="fa fa-fw {{{ if isNotFollowing }}}fa-check{{{ end }}}"></i><i class="fa fa-fw fa-bell-slash-o"></i> [[topic:not-watching]]<p class="help-text text-muted"><small>[[topic:not-watching.description]]</small></p></a></li>
30
+ <li>
31
+ <a class="dropdown-item d-flex" href="#" component="topic/not-following">
32
+ <span><i component="topic/not-following/check" class="fa fa-fw {{{ if isNotFollowing }}}fa-check{{{ end }}}"></i></span>
33
+ <div class="d-flex flex-column">
34
+ <span><i class="fa fa-fw fa-bell-slash-o"></i> [[topic:not-watching]]</span>
35
+ <p class="help-text text-muted"><small>[[topic:not-watching.description]]</small></p>
36
+ </div>
37
+ </a>
38
+ </li>
23
39
 
24
- <li><a class="dropdown-item" href="#" component="topic/ignoring"><i component="topic/ignoring/check" class="fa fa-fw {{{ if isIgnoring }}}fa-check{{{ end }}}"></i><i class="fa fa-fw fa-eye-slash"></i> [[topic:ignoring]]<p class="help-text text-muted"><small>[[topic:ignoring.description]]</small></p></a></li>
40
+ <li>
41
+ <a class="dropdown-item d-flex" href="#" component="topic/ignoring">
42
+ <span><i component="topic/ignoring/check" class="fa fa-fw {{{ if isIgnoring }}}fa-check{{{ end }}}"></i></span>
43
+ <div class="d-flex flex-column">
44
+ <span><i class="fa fa-fw fa-eye-slash"></i> [[topic:ignoring]]</span>
45
+ <p class="help-text text-muted"><small>[[topic:ignoring.description]]</small></p>
46
+ </div>
47
+ </a>
48
+ </li>
25
49
  </ul>
26
50
  </div>
27
51
  {{{ end }}}
@@ -1,5 +1,5 @@
1
1
  <nav class="topic-list-header {{{ if config.stickyToolbar }}} sticky-tools{{{ end }}} navbar navbar-expand p-0 border-0 rounded">
2
- <div class="card card-header flex-row p-2 border rounded ff-secondary w-100">
2
+ <div class="card card-header flex-row p-2 gap-1 border rounded ff-secondary w-100">
3
3
  <ul class="navbar-nav me-auto gap-2 align-items-center">
4
4
  {{{ if template.category }}}
5
5
  <!-- IMPORT partials/category/watch.tpl -->
@@ -10,15 +10,15 @@
10
10
  {{{ end }}}
11
11
  {{{ if (template.unread || (template.recent || (template.popular || template.top))) }}}
12
12
  <!-- IMPORT partials/topic-filters.tpl -->
13
- <!-- IMPORT partials/category-filter.tpl -->
13
+ <!-- IMPORT partials/category/filter-dropdown-left.tpl -->
14
14
  {{{ end }}}
15
15
  {{{ if template.unread }}}
16
16
  <div class="markread btn-group {{{ if !topics.length }}}hidden{{{ end }}}">
17
- <!-- IMPORT partials/category-selector.tpl -->
17
+ <!-- IMPORT partials/category/selector-dropdown-left.tpl -->
18
18
  </div>
19
19
  {{{ end }}}
20
20
  {{{ if template.tag }}}
21
- <!-- IMPORT partials/category-filter.tpl -->
21
+ <!-- IMPORT partials/category/filter-dropdown-left.tpl -->
22
22
  {{{ end }}}
23
23
  <!-- IMPORT partials/category/tools.tpl -->
24
24
 
@@ -27,11 +27,11 @@
27
27
  {{{ end }}}
28
28
 
29
29
  <a href="{config.relative_path}{{{ if template.category }}}{url}{{{ else }}}/{selectedFilter.url}{querystring}{{{ end }}}" class="d-inline-block text-decoration-none">
30
- <div class="alert alert-warning h-100 m-0 px-2 py-1 d-flex align-items-center hide" id="new-topics-alert"></div>
30
+ <div class="d-md-block alert alert-warning h-100 m-0 px-2 py-1 line-clamp-2 text-sm text-break hide" id="new-topics-alert">There is a new post. Click here to reload.</div>
31
31
  </a>
32
32
  </ul>
33
33
 
34
- <div class="d-flex gap-1 align-items-stretch">
34
+ <div class="d-flex gap-1 align-items-center">
35
35
  {{{ if template.category }}}
36
36
  {{{ if privileges.topics:create }}}
37
37
  <a href="{config.relative_path}/compose?cid={cid}" component="category/post" id="new_topic" class="btn btn-primary btn-sm text-nowrap" data-ajaxify="false" role="button">[[category:new_topic_button]]</a>