aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/layout/nav_menu.phtml2
-rw-r--r--p/scripts/main.js25
2 files changed, 22 insertions, 5 deletions
diff --git a/app/layout/nav_menu.phtml b/app/layout/nav_menu.phtml
index cc158a674..04565c9b9 100644
--- a/app/layout/nav_menu.phtml
+++ b/app/layout/nav_menu.phtml
@@ -98,7 +98,7 @@
$url_query['c'] = 'configure';
$url_query['a'] = 'bookmarkQuery';
?>
- <li class="item<?= $classSeparator ?>"><button class="as-link" form="post-csrf" formaction="<?= Minz_Url::display($url_query) ?>"><?= _i('bookmark-add') ?> <?= _t('index.menu.bookmark_query') ?></button></li>
+ <li class="item<?= $classSeparator ?>"><button class="as-link" form="post-csrf" formaction="<?= Minz_Url::display($url_query) ?>" type="submit"><?= _i('bookmark-add') ?> <?= _t('index.menu.bookmark_query') ?></button></li>
</ul>
<a class="dropdown-close" href="#close">❌</a>
</div>
diff --git a/p/scripts/main.js b/p/scripts/main.js
index b8af7e1a5..570785832 100644
--- a/p/scripts/main.js
+++ b/p/scripts/main.js
@@ -1028,17 +1028,18 @@ function init_column_categories() {
const sidebar_scrollTop = sessionStorage.getItem('FreshRSS_sidebar_scrollTop');
if (sidebar_scrollTop) {
- // Restore sidebar scroll position (navigated from sidebar)
+ // Restore sidebar scroll position (navigated from sidebar or nav menu)
document.querySelector('ul#sidebar').scrollTop = +sidebar_scrollTop;
sessionStorage.removeItem('FreshRSS_sidebar_scrollTop');
} else {
- // Scroll into filtered feed/category on sidebar (navigated from anywhere)
+ // Scroll into filtered feed/category/label on sidebar (navigated from anywhere)
const params = new URLSearchParams(location.search);
const get = params.get('get');
- if (params.has('get') && (get.startsWith('f_') || get.startsWith('c_'))) {
+ if (params.has('get') && (get.startsWith('f_') || get.startsWith('c_') || get.startsWith('t_'))) {
const selectedEl = document.getElementById(get);
if (selectedEl) {
- selectedEl.scrollIntoView({ block: get.startsWith('f_') ? 'center' : 'start' });
+ selectedEl.scrollIntoView({ block: !get.startsWith('c_') ? 'center' : 'start' });
+ document.documentElement.scrollTop = 0; // Prevent unwanted scroll of page
}
}
}
@@ -2251,6 +2252,7 @@ function init_normal() {
init_actualize();
faviconNbUnread();
+ // Keep exact sidebar scroll state for specific navigations
const sidebar = document.querySelector('ul#sidebar');
if (sidebar) {
sidebar.addEventListener('click', (e) => {
@@ -2265,6 +2267,21 @@ function init_normal() {
}
});
}
+ const nav_menu = document.querySelector('nav.nav_menu');
+ if (nav_menu) {
+ nav_menu.addEventListener('click', (e) => {
+ const target = e.target.closest('a.btn:not(#actualize):not(.dropdown-toggle), button[type="submit"]');
+ if (target) {
+ sessionStorage.setItem('FreshRSS_sidebar_scrollTop', sidebar.scrollTop);
+ }
+ });
+ }
+ const new_article = document.querySelector('div#new-article');
+ if (new_article) {
+ new_article.addEventListener('click', () => {
+ sessionStorage.setItem('FreshRSS_sidebar_scrollTop', sidebar.scrollTop);
+ });
+ }
document.addEventListener("visibilitychange", () => {
if (document.visibilityState === "hidden") {