From ca2984745006a37f38025b4ef4214900880a5ad9 Mon Sep 17 00:00:00 2001 From: Andreas Gammelgaard Damsbo Date: Wed, 27 Aug 2025 11:11:00 +0200 Subject: [PATCH] fix: fixed submenu fold out --- inst/apps/FreesearchR/www/scripts.js | 54 +++++++++++++++++++++------- inst/assets/js/FreesearchR.js | 54 +++++++++++++++++++++------- 2 files changed, 82 insertions(+), 26 deletions(-) diff --git a/inst/apps/FreesearchR/www/scripts.js b/inst/apps/FreesearchR/www/scripts.js index 3382b4e..f98dffc 100644 --- a/inst/apps/FreesearchR/www/scripts.js +++ b/inst/apps/FreesearchR/www/scripts.js @@ -6,24 +6,52 @@ $(document).on('shown.bs.tab', '#main_panel', function(e) { $('#main_panel .dropdown-toggle').removeClass('show').attr('aria-expanded', 'false'); }); + $(document).on('shiny:sessioninitialized', function() { -// Function to collapse navbar on mobile -function collapseNavbar() { - var navbar = $('.navbar-collapse'); - if (navbar.hasClass('show')) { - navbar.removeClass('show'); - $('.navbar-toggler').addClass('collapsed'); - $('.navbar-toggler').attr('aria-expanded', 'false'); - } + // Function to collapse navbar on mobile + function collapseNavbar() { + var navbar = $('.navbar-collapse'); + if (navbar.hasClass('show')) { + navbar.removeClass('show'); + $('.navbar-toggler').addClass('collapsed'); + $('.navbar-toggler').attr('aria-expanded', 'false'); + } } - // Add click event to navigation tabs - $(document).on('click', '.nav-link[data-bs-toggle=\"tab\"]', function() { + // Main approach: Handle clicks on nav elements + $(document).on('click', '.navbar-nav .nav-link, .dropdown-item', function(event) { + var $target = $(event.currentTarget); + + // Don't collapse if this is a dropdown toggle + if ($target.hasClass('dropdown-toggle')) { + return; + } + + // Don't collapse if this is inside a dropdown and the dropdown should stay open + if ($target.hasClass('nav-link') && $target.closest('.dropdown').length && + !$target.attr('data-bs-toggle')) { + return; + } + + // Collapse the navbar after a short delay setTimeout(collapseNavbar, 10); }); - // Also handle direct clicks on nav items - $(document).on('click', '.navbar-nav .nav-link', function() { - setTimeout(collapseNavbar, 10); + // Handle tab toggles specifically + $(document).on('click', '.nav-link[data-bs-toggle="tab"]', function() { + if (!$(this).hasClass('dropdown-toggle')) { + setTimeout(collapseNavbar, 10); + } + }); + + // Optional: Handle clicks outside the navbar to close it + $(document).on('click', function(event) { + var navbar = $('.navbar-collapse'); + + // Check if click is outside navbar and navbar is open + if (navbar.hasClass('show') && + !$(event.target).closest('.navbar').length) { + collapseNavbar(); + } }); }); diff --git a/inst/assets/js/FreesearchR.js b/inst/assets/js/FreesearchR.js index 3382b4e..f98dffc 100644 --- a/inst/assets/js/FreesearchR.js +++ b/inst/assets/js/FreesearchR.js @@ -6,24 +6,52 @@ $(document).on('shown.bs.tab', '#main_panel', function(e) { $('#main_panel .dropdown-toggle').removeClass('show').attr('aria-expanded', 'false'); }); + $(document).on('shiny:sessioninitialized', function() { -// Function to collapse navbar on mobile -function collapseNavbar() { - var navbar = $('.navbar-collapse'); - if (navbar.hasClass('show')) { - navbar.removeClass('show'); - $('.navbar-toggler').addClass('collapsed'); - $('.navbar-toggler').attr('aria-expanded', 'false'); - } + // Function to collapse navbar on mobile + function collapseNavbar() { + var navbar = $('.navbar-collapse'); + if (navbar.hasClass('show')) { + navbar.removeClass('show'); + $('.navbar-toggler').addClass('collapsed'); + $('.navbar-toggler').attr('aria-expanded', 'false'); + } } - // Add click event to navigation tabs - $(document).on('click', '.nav-link[data-bs-toggle=\"tab\"]', function() { + // Main approach: Handle clicks on nav elements + $(document).on('click', '.navbar-nav .nav-link, .dropdown-item', function(event) { + var $target = $(event.currentTarget); + + // Don't collapse if this is a dropdown toggle + if ($target.hasClass('dropdown-toggle')) { + return; + } + + // Don't collapse if this is inside a dropdown and the dropdown should stay open + if ($target.hasClass('nav-link') && $target.closest('.dropdown').length && + !$target.attr('data-bs-toggle')) { + return; + } + + // Collapse the navbar after a short delay setTimeout(collapseNavbar, 10); }); - // Also handle direct clicks on nav items - $(document).on('click', '.navbar-nav .nav-link', function() { - setTimeout(collapseNavbar, 10); + // Handle tab toggles specifically + $(document).on('click', '.nav-link[data-bs-toggle="tab"]', function() { + if (!$(this).hasClass('dropdown-toggle')) { + setTimeout(collapseNavbar, 10); + } + }); + + // Optional: Handle clicks outside the navbar to close it + $(document).on('click', function(event) { + var navbar = $('.navbar-collapse'); + + // Check if click is outside navbar and navbar is open + if (navbar.hasClass('show') && + !$(event.target).closest('.navbar').length) { + collapseNavbar(); + } }); });