nodebb-theme-harmony 2.0.21 → 2.0.23

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.
package/library.js CHANGED
@@ -16,6 +16,7 @@ const defaults = {
16
16
  mobileTopicTeasers: 'off',
17
17
  stickyToolbar: 'on',
18
18
  topicSidebarTools: 'on',
19
+ topMobilebar: 'off',
19
20
  autohideBottombar: 'on',
20
21
  openSidebars: 'off',
21
22
  chatModals: 'off',
@@ -150,6 +151,7 @@ library.loadThemeConfig = async function (uid) {
150
151
  config.stickyToolbar = config.stickyToolbar === 'on';
151
152
  config.topicSidebarTools = config.topicSidebarTools === 'on';
152
153
  config.autohideBottombar = config.autohideBottombar === 'on';
154
+ config.topMobilebar = config.topMobilebar === 'on';
153
155
  config.openSidebars = config.openSidebars === 'on';
154
156
  config.chatModals = config.chatModals === 'on';
155
157
  return config;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-theme-harmony",
3
- "version": "2.0.21",
3
+ "version": "2.0.23",
4
4
  "nbbpm": {
5
5
  "compatibility": "^4.0.0"
6
6
  },
package/public/harmony.js CHANGED
@@ -63,6 +63,7 @@ $(document).ready(function () {
63
63
  });
64
64
 
65
65
  const bottomBar = $('[component="bottombar"]');
66
+ const location = config.theme.topMobilebar ? 'top' : 'bottom';
66
67
  const $body = $('body');
67
68
  const $window = $(window);
68
69
  $body.on('shown.bs.dropdown hidden.bs.dropdown', '.sticky-tools', function () {
@@ -86,12 +87,18 @@ $(document).ready(function () {
86
87
  const diff = Math.abs(st - lastScrollTop);
87
88
  const scrolledDown = st > lastScrollTop;
88
89
  const scrolledUp = st < lastScrollTop;
90
+ const isHiding = !scrolledUp && scrolledDown;
89
91
  if (diff > 10) {
90
92
  bottomBar.css({
91
- bottom: !scrolledUp && scrolledDown ?
93
+ [location]: isHiding ?
92
94
  -bottomBar.find('.bottombar-nav').outerHeight(true) :
93
95
  0,
94
96
  });
97
+ if (config.theme.topMobilebar && config.theme.autohideBottombar) {
98
+ $('.sticky-tools').css({
99
+ top: isHiding ? 0 : 'var(--panel-offset)',
100
+ });
101
+ }
95
102
  }
96
103
  }
97
104
  lastScrollTop = st;
@@ -116,7 +123,7 @@ $(document).ready(function () {
116
123
  hooks.on('action:ajaxify.end', function () {
117
124
  $window.off('scroll', delayedScroll);
118
125
  if (config.theme.autohideBottombar) {
119
- bottomBar.css({ bottom: 0 });
126
+ bottomBar.css({ [location]: 0 });
120
127
  setTimeout(enableAutohide, 250);
121
128
  }
122
129
  });
package/scss/harmony.scss CHANGED
@@ -7,6 +7,7 @@
7
7
  @import "category";
8
8
  @import "chats";
9
9
  @import "sidebar";
10
+ @import "mobilebar";
10
11
  @import "status";
11
12
  @import "account";
12
13
  @import "groups";
@@ -0,0 +1,63 @@
1
+ .navigator-mobile {
2
+ .pagination-block {
3
+ .scroller-container {
4
+ border-right: 3px solid;
5
+ margin-right: 5.5px;
6
+ .scroller-thumb {
7
+ right: -6px;
8
+ padding-right: 15px;
9
+ margin-right: -15px;
10
+ }
11
+ }
12
+ }
13
+ }
14
+
15
+ .bottombar-nav {
16
+ #user_dropdown .avatar {
17
+ margin: 2px 0; // fixes the avatar so its height is same as the icons on right sidebar
18
+ }
19
+ .nav-text {
20
+ font-size: 1rem;
21
+ color: $body-color;
22
+ }
23
+ .nav-link {
24
+ padding: 8px;
25
+ border-radius: $border-radius-sm;
26
+ }
27
+ .usermenu, .chats, .notifications, .drafts, .search, .logged-out-menu {
28
+ .visible-open { display: none; }
29
+ }
30
+ .badge {
31
+ font-size: 9px;
32
+ line-height: 12px;
33
+ }
34
+
35
+ .dropdown-menu {
36
+ left: 0!important;
37
+ right: 0!important;
38
+ box-shadow: none!important;
39
+ border-left: 0;
40
+ border-right: 0;
41
+ border-radius: 0;
42
+ .list-container {
43
+ max-height: 60vh!important;
44
+ overflow-y: auto!important;
45
+ }
46
+ }
47
+
48
+ .navigation-dropdown, .user-dropdown {
49
+ > li {
50
+ > a, .dropdown-item {
51
+ padding: 10px 20px!important;
52
+ }
53
+ }
54
+
55
+ max-height: 60vh!important;
56
+ overflow: auto!important;
57
+ }
58
+
59
+ .search-dropdown .quick-search-results {
60
+ max-height: 225px!important;
61
+ overflow-y: auto!important;
62
+ }
63
+ }
@@ -6,7 +6,7 @@
6
6
  position: absolute;
7
7
  background-origin: content-box;
8
8
  width: 100%;
9
- top: var(--panel-offset);
9
+ top: var(--panel-offset)!important;
10
10
  left: auto;
11
11
  right: 0px;
12
12
 
package/scss/sidebar.scss CHANGED
@@ -121,68 +121,3 @@
121
121
  }
122
122
  /*rtl:end:ignore*/
123
123
 
124
- .bottombar {
125
- transition: bottom 150ms linear;
126
-
127
- .pagination-block {
128
- .scroller-container {
129
- border-right: 3px solid;
130
- margin-right: 5.5px;
131
- .scroller-thumb {
132
- right: -6px;
133
- padding-right: 15px;
134
- margin-right: -15px;
135
- }
136
- }
137
- }
138
- }
139
-
140
- .bottombar-nav {
141
- #user_dropdown .avatar {
142
- margin: 2px 0; // fixes the avatar so its height is same as the icons on right sidebar
143
- }
144
- .nav-text {
145
- font-size: 1rem;
146
- color: $body-color;
147
- }
148
- .nav-link {
149
- padding: 8px;
150
- border-radius: $border-radius-sm;
151
- }
152
- .usermenu, .chats, .notifications, .drafts, .search, .logged-out-menu {
153
- .visible-open { display: none; }
154
- }
155
- .badge {
156
- font-size: 9px;
157
- line-height: 12px;
158
- }
159
-
160
- .dropdown-menu {
161
- left: 0!important;
162
- right: 0!important;
163
- box-shadow: none!important;
164
- border-left: 0;
165
- border-right: 0;
166
- border-radius: 0;
167
- .list-container {
168
- max-height: 60vh!important;
169
- overflow-y: auto!important;
170
- }
171
- }
172
-
173
- .navigation-dropdown, .user-dropdown {
174
- > li {
175
- > a, .dropdown-item {
176
- padding: 10px 20px!important;
177
- }
178
- }
179
-
180
- max-height: 60vh!important;
181
- overflow: auto!important;
182
- }
183
-
184
- .search-dropdown .quick-search-results {
185
- max-height: 225px!important;
186
- overflow-y: auto!important;
187
- }
188
- }
@@ -58,6 +58,13 @@
58
58
  </label>
59
59
  </div>
60
60
 
61
+ <div class="form-check form-switch mb-3">
62
+ <input class="form-check-input" type="checkbox" role="switch" id="topMobilebar" name="topMobilebar" {{{ if theme.topMobilebar }}}checked{{{ end }}}>
63
+ <label class="form-check-label" for="topMobilebar">
64
+ [[themes/harmony:settings.topMobilebar]]
65
+ </label>
66
+ </div>
67
+
61
68
  <div class="form-check form-switch mb-3">
62
69
  <input class="form-check-input" type="checkbox" role="switch" id="openSidebars" name="openSidebars" {{{ if theme.openSidebars }}}checked{{{ end }}}>
63
70
  <label class="form-check-label" for="openSidebars">[[themes/harmony:settings.openSidebars]]</label>
@@ -48,6 +48,12 @@
48
48
  </p>
49
49
  </div>
50
50
  </div>
51
+ <div class="form-check form-switch">
52
+ <input type="checkbox" class="form-check-input" id="topMobilebar" name="topMobilebar" />
53
+ <div for="topMobilebar" class="form-check-label">
54
+ [[themes/harmony:settings.topMobilebar]]
55
+ </div>
56
+ </div>
51
57
  <div class="form-check form-switch">
52
58
  <input type="checkbox" class="form-check-input" id="openSidebars" name="openSidebars" />
53
59
  <label for="openSidebars" class="form-check-label">[[themes/harmony:settings.openSidebars]]</label>
@@ -3,7 +3,14 @@
3
3
  </main>
4
4
  <!-- IMPORT partials/sidebar-right.tpl -->
5
5
  </div>
6
+ {{{ if !config.theme.topMobilebar }}}
6
7
  <!-- IMPORT partials/mobile-footer.tpl -->
8
+ {{{ else }}}
9
+ <div class="fixed-bottom navigator-mobile">
10
+ <!-- IMPORT partials/topic/navigator-mobile.tpl -->
11
+ </div>
12
+ {{{ end }}}
13
+
7
14
  {{{ if !isSpider }}}
8
15
  <div>
9
16
  <div component="toaster/tray" class="alert-window fixed-bottom mb-5 mb-md-2 me-2 me-md-5 ms-auto" style="width:300px; z-index: 1090;">
@@ -11,8 +11,7 @@
11
11
  var app = {
12
12
  user: JSON.parse('{{userJSON}}')
13
13
  };
14
-
15
- document.documentElement.style.setProperty('--panel-offset', `${localStorage.getItem('panelOffset') || 0}px`);
14
+ document.documentElement.style.setProperty('--panel-offset', `0px`);
16
15
  </script>
17
16
 
18
17
  {{{if useCustomHTML}}}
@@ -25,21 +24,16 @@
25
24
 
26
25
  <body class="{bodyClass} skin-{{{if bootswatchSkin}}}{bootswatchSkin}{{{else}}}noskin{{{end}}}">
27
26
  <a class="visually-hidden-focusable position-absolute top-0 start-0 p-3 m-3 bg-body" style="z-index: 1021;" href="#content">[[global:skip-to-content]]</a>
27
+
28
+ {{{ if config.theme.topMobilebar }}}
29
+ <!-- IMPORT partials/mobile-header.tpl -->
30
+ {{{ end }}}
31
+
28
32
  <div class="layout-container d-flex justify-content-between pb-4 pb-md-0">
29
33
  <!-- IMPORT partials/sidebar-left.tpl -->
30
34
 
31
35
  <main id="panel" class="d-flex flex-column gap-3 flex-grow-1 mt-3" style="min-width: 0;">
32
36
  <!-- IMPORT partials/header/brand.tpl -->
33
- <script>
34
- const headerEl = document.getElementById('header-menu');
35
- if (headerEl) {
36
- const rect = headerEl.getBoundingClientRect();
37
- const offset = Math.max(0, rect.bottom);
38
- document.documentElement.style.setProperty('--panel-offset', offset + `px`);
39
- } else {
40
- document.documentElement.style.setProperty('--panel-offset', `0px`);
41
- }
42
- </script>
43
37
  <div class="container-lg px-md-4 d-flex flex-column gap-3 h-100 mb-5 mb-lg-0" id="content">
44
38
  <!-- IMPORT partials/noscript/warning.tpl -->
45
39
  <!-- IMPORT partials/noscript/message.tpl -->
@@ -14,6 +14,7 @@
14
14
  {./descriptionParsed}
15
15
  </div>
16
16
  {{{ end }}}
17
+ {{{ if !./link }}}
17
18
  <div class="d-flex gap-1 d-block d-lg-none w-100">
18
19
  <span class="badge text-body border stats text-xs text-muted">
19
20
  <i class="fa fa-fw fa-list"></i>
@@ -27,6 +28,7 @@
27
28
  <a href="{config.relative_path}{./teaser.url}" class="border badge bg-transparent text-muted fw-normal timeago {{{ if (!./teaser.timestampISO || config.theme.mobileTopicTeasers) }}}hidden{{{ end }}}" title="{./teaser.timestampISO}"></a>
28
29
  {{{ end }}}
29
30
  </div>
31
+ {{{ end }}}
30
32
  {{{ if !config.hideSubCategories }}}
31
33
  {{{ if ./children.length }}}
32
34
  <ul class="list-unstyled category-children row row-cols-1 row-cols-md-2 g-2 my-1 w-100">
@@ -1,96 +1,4 @@
1
- <div component="bottombar" class="bottombar d-flex flex-column d-lg-none fixed-bottom ff-secondary gap-1 align-items-center" style="bottom: 0px;">
2
-
1
+ <div component="bottombar" class="bottombar d-flex flex-column d-lg-none ff-secondary gap-1 align-items-center fixed-bottom" style="transition: bottom 150ms linear;">
3
2
  <!-- IMPORT partials/topic/navigator-mobile.tpl -->
4
-
5
- <div class="bottombar-nav p-2 text-dark bg-light d-flex justify-content-between align-items-center w-100">
6
- <div class="bottombar-nav-left d-flex gap-3 align-items-center">
7
- <div>
8
- <a href="#" role="button" class="nav-link d-flex justify-content-between align-items-center position-relative" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
9
- <span class="position-relative">
10
- <i class="fa fa-fw fa-lg fa-bars"></i>
11
- <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>
12
- </span>
13
- </a>
14
- <ul class="navigation-dropdown dropdown-menu" role="menu">
15
- {{{ each navigation }}}
16
- {{{ if displayMenuItem(@root, @index) }}}
17
- <li class="nav-item {./class}{{{ if ./dropdown }}} dropend{{{ end }}}" title="{./title}">
18
- <a class="nav-link navigation-link px-3 py-2 {{{ if ./dropdown }}}dropdown-toggle{{{ end }}}" {{{ 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">
21
- {{{ if ./iconClass }}}
22
- <i class="fa fa-fw {./iconClass}" data-content="{./content}"></i>
23
- {{{ end }}}
24
- {{{ if ./text }}}<span class="nav-text px-2 fw-semibold">{./text}</span>{{{ end }}}
25
- </span>
26
- <span component="navigation/count" class="badge rounded-1 bg-primary {{{ if !./content }}}hidden{{{ end }}}">{./content}</span>
27
- </span>
28
- </a>
29
- {{{ if ./dropdown }}}
30
- <div class="ps-3">
31
- <ul id="collapse-target-{@index}" class="collapse list-unstyled ps-3">
32
- {./dropdownContent}
33
- </ul>
34
- </div>
35
- {{{ end }}}
36
- </li>
37
- {{{ end }}}
38
- {{{ end }}}
39
- </ul>
40
- </div>
41
- </div>
42
- <div class="bottombar-nav-right d-flex gap-3 align-items-center">
43
- <div>
44
- {{{ if config.loggedIn }}}
45
- <ul id="logged-in-menu" class="list-unstyled d-flex align-items-center w-100 gap-3 mb-0">
46
- {{{ if config.searchEnabled }}}
47
- <li component="sidebar/search" class="nav-item m-0 search">
48
- <!-- IMPORT partials/sidebar/search-mobile.tpl -->
49
- </li>
50
- {{{ end }}}
51
-
52
- <li component="notifications" class="nav-item m-0 notifications">
53
- <!-- IMPORT partials/sidebar/notifications.tpl -->
54
- </li>
55
-
56
- {{{ if canChat }}}
57
- <li class="nav-item m-0 chats">
58
- <!-- IMPORT partials/sidebar/chats.tpl -->
59
- </li>
60
- {{{ end }}}
61
-
62
- <li component="sidebar/drafts" class="hidden nav-item m-0 drafts">
63
- <!-- IMPORT partials/sidebar/drafts.tpl -->
64
- </li>
65
-
66
- <li id="user_label" class="nav-item m-0 usermenu">
67
- <!-- IMPORT partials/sidebar/user-menu.tpl -->
68
- </li>
69
- </ul>
70
- {{{ else }}}
71
- <ul id="logged-out-menu" class="list-unstyled d-flex w-100 gap-3 mb-0 logged-out-menu">
72
- {{{ if (config.searchEnabled && user.privileges.search:content) }}}
73
- <li component="sidebar/search" class="nav-item mx-2 search">
74
- <!-- IMPORT partials/sidebar/search-mobile.tpl -->
75
- </li>
76
- {{{ end }}}
77
-
78
- {{{ if allowRegistration }}}
79
- <li class="nav-item mx-2" title="[[global:register]]">
80
- <a class="nav-link" href="{relative_path}/register">
81
- <i class="fa fa-fw fa-user-plus"></i>
82
- </a>
83
- </li>
84
- {{{ end }}}
85
-
86
- <li class="nav-item mx-2" title="[[global:login]]">
87
- <a class="nav-link" href="{relative_path}/login">
88
- <i class="fa fa-fw fa-sign-in"></i>
89
- </a>
90
- </li>
91
- </ul>
92
- {{{ end }}}
93
- </div>
94
- </div>
95
- </div>
96
- </div>
3
+ <!-- IMPORT partials/mobile-nav.tpl -->
4
+ </div>
@@ -0,0 +1,14 @@
1
+ <div component="bottombar" class="bottombar d-flex flex-column d-lg-none ff-secondary gap-1 align-items-center sticky-top" style="transition: top 150ms linear;">
2
+ <!-- IMPORT partials/mobile-nav.tpl -->
3
+ </div>
4
+
5
+ <script>
6
+ const headerEl = document.querySelector('[component="bottombar"]');
7
+ if (headerEl && headerEl.classList.contains('sticky-top')) {
8
+ const rect = headerEl.getBoundingClientRect();
9
+ const offset = Math.max(0, rect.bottom);
10
+ document.documentElement.style.setProperty('--panel-offset', offset + `px`);
11
+ } else {
12
+ document.documentElement.style.setProperty('--panel-offset', `0px`);
13
+ }
14
+ </script>
@@ -0,0 +1,91 @@
1
+ <div class="bottombar-nav p-2 text-dark bg-light d-flex justify-content-between align-items-center w-100">
2
+ <div class="bottombar-nav-left d-flex gap-3 align-items-center">
3
+ <div>
4
+ <a href="#" role="button" class="nav-link d-flex justify-content-between align-items-center position-relative" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
5
+ <span class="position-relative">
6
+ <i class="fa fa-fw fa-lg fa-bars"></i>
7
+ <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>
8
+ </span>
9
+ </a>
10
+ <ul class="navigation-dropdown dropdown-menu" role="menu">
11
+ {{{ each navigation }}}
12
+ {{{ if displayMenuItem(@root, @index) }}}
13
+ <li class="nav-item {./class}{{{ if ./dropdown }}} dropend{{{ end }}}" title="{./title}">
14
+ <a class="nav-link navigation-link px-3 py-2 {{{ if ./dropdown }}}dropdown-toggle{{{ end }}}" {{{ 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 }}}>
15
+ <span class="d-inline-flex justify-content-between align-items-center w-100">
16
+ <span class="text-nowrap">
17
+ {{{ if ./iconClass }}}
18
+ <i class="fa fa-fw {./iconClass}" data-content="{./content}"></i>
19
+ {{{ end }}}
20
+ {{{ if ./text }}}<span class="nav-text px-2 fw-semibold">{./text}</span>{{{ end }}}
21
+ </span>
22
+ <span component="navigation/count" class="badge rounded-1 bg-primary {{{ if !./content }}}hidden{{{ end }}}">{./content}</span>
23
+ </span>
24
+ </a>
25
+ {{{ if ./dropdown }}}
26
+ <div class="ps-3">
27
+ <ul id="collapse-target-{@index}" class="collapse list-unstyled ps-3">
28
+ {./dropdownContent}
29
+ </ul>
30
+ </div>
31
+ {{{ end }}}
32
+ </li>
33
+ {{{ end }}}
34
+ {{{ end }}}
35
+ </ul>
36
+ </div>
37
+ </div>
38
+ <div class="bottombar-nav-right d-flex gap-3 align-items-center">
39
+ <div>
40
+ {{{ if config.loggedIn }}}
41
+ <ul id="logged-in-menu" class="list-unstyled d-flex align-items-center w-100 gap-3 mb-0">
42
+ {{{ if config.searchEnabled }}}
43
+ <li component="sidebar/search" class="nav-item m-0 search">
44
+ <!-- IMPORT partials/sidebar/search-mobile.tpl -->
45
+ </li>
46
+ {{{ end }}}
47
+
48
+ <li component="notifications" class="nav-item m-0 notifications">
49
+ <!-- IMPORT partials/sidebar/notifications.tpl -->
50
+ </li>
51
+
52
+ {{{ if canChat }}}
53
+ <li class="nav-item m-0 chats">
54
+ <!-- IMPORT partials/sidebar/chats.tpl -->
55
+ </li>
56
+ {{{ end }}}
57
+
58
+ <li component="sidebar/drafts" class="hidden nav-item m-0 drafts">
59
+ <!-- IMPORT partials/sidebar/drafts.tpl -->
60
+ </li>
61
+
62
+ <li id="user_label" class="nav-item m-0 usermenu">
63
+ <!-- IMPORT partials/sidebar/user-menu.tpl -->
64
+ </li>
65
+ </ul>
66
+ {{{ else }}}
67
+ <ul id="logged-out-menu" class="list-unstyled d-flex w-100 gap-3 mb-0 logged-out-menu">
68
+ {{{ if (config.searchEnabled && user.privileges.search:content) }}}
69
+ <li component="sidebar/search" class="nav-item mx-2 search">
70
+ <!-- IMPORT partials/sidebar/search-mobile.tpl -->
71
+ </li>
72
+ {{{ end }}}
73
+
74
+ {{{ if allowRegistration }}}
75
+ <li class="nav-item mx-2" title="[[global:register]]">
76
+ <a class="nav-link" href="{relative_path}/register">
77
+ <i class="fa fa-fw fa-user-plus"></i>
78
+ </a>
79
+ </li>
80
+ {{{ end }}}
81
+
82
+ <li class="nav-item mx-2" title="[[global:login]]">
83
+ <a class="nav-link" href="{relative_path}/login">
84
+ <i class="fa fa-fw fa-sign-in"></i>
85
+ </a>
86
+ </li>
87
+ </ul>
88
+ {{{ end }}}
89
+ </div>
90
+ </div>
91
+ </div>
@@ -1,4 +1,4 @@
1
- <div class="{{{ if config.theme.stickyToolbar }}}sticky-tools{{{ end }}} {{{ if config.theme.topicSidebarTools }}}d-block d-lg-none{{{ end }}}">
1
+ <div class="{{{ if config.theme.stickyToolbar }}}sticky-tools{{{ end }}} {{{ if config.theme.topicSidebarTools }}}d-block d-lg-none{{{ end }}}" style="top: {{{ if (config.theme.topMobilebar && !config.theme.autohideBottombar) }}}var(--panel-offset){{{ else }}}0{{{ end }}};">
2
2
  <nav class="d-flex flex-nowrap my-2 p-0 border-0 rounded topic-main-buttons">
3
3
  <div class="d-flex flex-row p-2 text-bg-light border rounded w-100 align-items-center">
4
4
  <div class="d-flex me-auto mb-0 gap-2 align-items-center flex-wrap">
@@ -1,9 +1,7 @@
1
- {{{ if multiplePages }}}
1
+ {{{ if (multiplePages && !config.theme.topMobilebar) }}}
2
2
  <div class="show-more-container">
3
3
  <div class="text-center d-block d-md-none">
4
- <a href="{url}" class="btn btn-sm btn-primary">
5
- [[search:see-more-results, {matchCount}]]
6
- </a>
4
+ <a href="{url}" class="btn btn-sm btn-primary">[[search:see-more-results, {matchCount}]]</a>
7
5
  </div>
8
6
  <li role="separator" class="dropdown-divider d-block d-md-none"></li>
9
7
  </div>
@@ -35,9 +33,12 @@
35
33
 
36
34
  {{{ if multiplePages }}}
37
35
  <div class="text-center mt-2 d-none d-md-block">
38
- <a href="{url}" class="btn btn-sm btn-primary">
39
- [[search:see-more-results, {matchCount}]]
40
- </a>
36
+ <a href="{url}" class="btn btn-sm btn-primary">[[search:see-more-results, {matchCount}]]</a>
37
+ </div>
38
+ {{{ end }}}
39
+ {{{ if (multiplePages && config.theme.topMobilebar) }}}
40
+ <div class="text-center mt-2 d-block d-md-none">
41
+ <a href="{url}" class="btn btn-sm btn-primary">[[search:see-more-results, {matchCount}]]</a>
41
42
  </div>
42
43
  {{{ end }}}
43
44
 
@@ -4,7 +4,7 @@
4
4
  </a>
5
5
  <div class="search-dropdown dropdown-menu p-2 shadow" role="menu">
6
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">
7
+ <div component="search/fields" class="d-flex flex-column w-100 {{{ if config.theme.topMobilebar }}}flex-column-reverse gap-2{{{ end }}}" id="search-fields">
8
8
  <div id="quick-search-container" class="quick-search-container d-block hidden">
9
9
  <div class="form-check filter-category mb-2 ms-2">
10
10
  <input class="form-check-input" type="checkbox" checked>
@@ -4,7 +4,7 @@
4
4
  {buildAvatar(post.user, "24px", true)} {post.user.username}
5
5
  </a>
6
6
  </div>
7
- <span class="timeago text-nowrap text-sm" title="{post.timestampISO}"></span>
7
+ <span class="timeago text-nowrap text-sm text-muted" title="{post.timestampISO}"></span>
8
8
  </div>
9
9
 
10
10
  <div>{post.content}</div>
@@ -1,4 +1,4 @@
1
- <div class="{{{ if config.theme.stickyToolbar }}}sticky-tools{{{ end }}} mb-3">
1
+ <div class="{{{ if config.theme.stickyToolbar }}}sticky-tools{{{ end }}} mb-3" style="top: {{{ if (config.theme.topMobilebar && !config.theme.autohideBottombar) }}}var(--panel-offset){{{ else }}}0{{{ end }}};">
2
2
  <nav class="topic-list-header d-flex flex-nowrap my-2 p-0 border-0 rounded">
3
3
  <div class="d-flex flex-row p-2 text-bg-light gap-1 border rounded w-100">
4
4
  <div component="category/controls" class="d-flex me-auto mb-0 gap-2 flex-wrap">