From 25a1f2fabb4d8b93f08c42067581c8f3ea81b077 Mon Sep 17 00:00:00 2001 From: Alexandre <146840804+alex001x@users.noreply.github.com> Date: Fri, 7 Nov 2025 10:15:23 +0100 Subject: [PATCH 1/2] feat(search): persist Advanced Search panel and selections via sessionStorage; restore on page load and keep modal open after reload (advanced-search-modal-persistence) --- sidebar.inc.php | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/sidebar.inc.php b/sidebar.inc.php index 726ab44fa..edc4eb6a6 100644 --- a/sidebar.inc.php +++ b/sidebar.inc.php @@ -64,12 +64,25 @@ function addlookup(inputobj,lookuptype){ }).next().after(arrow); arrow.css({'top': inputpos.top+'px', 'left': inputpos.left+inputobj.width()-(arrow.width()/2)}); } + // Toggle Advanced Search form (slide open/close) $('#advsrch, #searchadv ~ .ui-icon.ui-icon-close').click(function(){ var here=$(this).position(); $('#searchadv, #searchname').val(''); $('#searchadv').parents('form').height(here.top).toggle('slide',200).removeClass('hide'); if($('#searchadv').hasClass('ui-autocomplete-input')){$('#searchadv').autocomplete('destroy');} if($(this).text()==''){$(this).text('');$('#searchadv ~ select[name="key"]').trigger('change');}else{$(this).text('');} + + // Persist the Advanced Search panel visibility using sessionStorage + // English-only comments; UI strings are gettext-ready elsewhere + try{ + var isOpen = $('#searchadv').parents('form').is(':visible'); + sessionStorage.setItem('adv.active', isOpen ? '1' : '0'); + if(isOpen){ + // When opening, also persist the current key so it can be restored + var k=$('#searchadv').siblings('select[name="key"]').val(); + sessionStorage.setItem('adv.key', k||''); + } + }catch(e){} }); $('#customsrch').click(function(){ window.location="custom_search.php"; @@ -151,6 +164,45 @@ function buildmenu($menu){ addlookup($('#searchadv'),$(this).val()) }).outerHeight($('#searchadv').outerHeight()).outerWidth(157); +// Advanced Search persistence (sessionStorage) +// Keys used: +// - adv.active: '1' when Advanced Search is open, '0' otherwise +// - adv.key: the selected filter key (dropdown) +// - adv.value: the typed search value in #searchadv +// On Advanced form submit, save state so that the sidebar restores after page reload. +$('form.advsearch').on('submit', function(){ + try{ + sessionStorage.setItem('adv.active','1'); + sessionStorage.setItem('adv.key',$('#searchadv').siblings('select[name="key"]').val()||''); + sessionStorage.setItem('adv.value',$('#searchadv').val()||''); + }catch(e){} +}); + +// On Basic form submit, mark Advanced as closed so it won't reopen on next load. +$('#searchname').closest('form').on('submit', function(){ + try{ sessionStorage.setItem('adv.active','0'); }catch(e){} +}); + +// On page load, if Advanced was active, reopen it and restore key/value. +$(function(){ + try{ + if(sessionStorage.getItem('adv.active')==='1'){ + if($('#searchadv').parents('form').hasClass('hide') || !$('#searchadv').parents('form').is(':visible')){ + // Trigger the same toggle used by the UI to ensure consistent behavior + $('#advsrch').trigger('click'); + } + var savedKey=sessionStorage.getItem('adv.key')||''; + var savedVal=sessionStorage.getItem('adv.value')||''; + if(savedKey){ + $('#searchadv').siblings('select[name="key"]').val(savedKey).trigger('change'); + } + if(savedVal){ + $('#searchadv').val(savedVal); + } + } + }catch(e){} +}); + // Really long cabinet / zone / dc combinations are making the screen jump around. // If they make this thing so big it's unusable, fuck em. $('#sidebar > hr ~ div').css({'width':$('#sidebar > hr ~ ul').width()+'px','overflow':'hidden'}); From 35429fd82d6097e7731e82c90d00dad432a02955 Mon Sep 17 00:00:00 2001 From: Alexandre <146840804+alex001x@users.noreply.github.com> Date: Fri, 7 Nov 2025 12:02:53 +0100 Subject: [PATCH 2/2] feat(search): reliably restore Advanced Search selected filter; open only on search.php; no value persistence --- sidebar.inc.php | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/sidebar.inc.php b/sidebar.inc.php index edc4eb6a6..4bcd4bbab 100644 --- a/sidebar.inc.php +++ b/sidebar.inc.php @@ -70,7 +70,7 @@ function addlookup(inputobj,lookuptype){ $('#searchadv, #searchname').val(''); $('#searchadv').parents('form').height(here.top).toggle('slide',200).removeClass('hide'); if($('#searchadv').hasClass('ui-autocomplete-input')){$('#searchadv').autocomplete('destroy');} - if($(this).text()==''){$(this).text('');$('#searchadv ~ select[name="key"]').trigger('change');}else{$(this).text('');} + if($(this).text()==''){$(this).text('');}else{$(this).text('');} // Persist the Advanced Search panel visibility using sessionStorage // English-only comments; UI strings are gettext-ready elsewhere @@ -78,9 +78,13 @@ function addlookup(inputobj,lookuptype){ var isOpen = $('#searchadv').parents('form').is(':visible'); sessionStorage.setItem('adv.active', isOpen ? '1' : '0'); if(isOpen){ - // When opening, also persist the current key so it can be restored - var k=$('#searchadv').siblings('select[name="key"]').val(); - sessionStorage.setItem('adv.key', k||''); + // When opening, restore saved key if present then trigger change to bind autocomplete + var savedKey=sessionStorage.getItem('adv.key')||''; + if(savedKey){ $('form.advsearch select[name="key"]').val(savedKey); } + $('form.advsearch select[name="key"]').trigger('change'); + // Also persist current key + var k=$('form.advsearch select[name="key"]').val(); + sessionStorage.setItem('adv.key', k||''); } }catch(e){} }); @@ -160,8 +164,10 @@ function buildmenu($menu){ $('#searchname').width($('#sidebar').innerWidth() - $('#searchname ~ button').outerWidth()); addlookup($('#searchname'),'name'); -$('#searchadv ~ select[name="key"]').change(function(){ - addlookup($('#searchadv'),$(this).val()) +$('form.advsearch select[name="key"]').change(function(){ + addlookup($('#searchadv'),$(this).val()); + // Persist selected filter key so it is restored after reload + try{ sessionStorage.setItem('adv.key', $(this).val()||''); }catch(e){} }).outerHeight($('#searchadv').outerHeight()).outerWidth(157); // Advanced Search persistence (sessionStorage) @@ -173,8 +179,8 @@ function buildmenu($menu){ $('form.advsearch').on('submit', function(){ try{ sessionStorage.setItem('adv.active','1'); - sessionStorage.setItem('adv.key',$('#searchadv').siblings('select[name="key"]').val()||''); - sessionStorage.setItem('adv.value',$('#searchadv').val()||''); + sessionStorage.setItem('adv.key',$('form.advsearch select[name="key"]').val()||''); + // Do not persist the typed value by request }catch(e){} }); @@ -183,22 +189,25 @@ function buildmenu($menu){ try{ sessionStorage.setItem('adv.active','0'); }catch(e){} }); -// On page load, if Advanced was active, reopen it and restore key/value. +// On page load, preselect saved key, and if Advanced was active, reopen it and restore the selected filter (only on search.php). $(function(){ try{ - if(sessionStorage.getItem('adv.active')==='1'){ + var currentScript = ''; + // Preselect saved key so UI reflects it even before opening + var preKey=sessionStorage.getItem('adv.key')||''; + if(preKey){ $('form.advsearch select[name="key"]').val(preKey); } + if(currentScript==='search.php' && sessionStorage.getItem('adv.active')==='1'){ if($('#searchadv').parents('form').hasClass('hide') || !$('#searchadv').parents('form').is(':visible')){ // Trigger the same toggle used by the UI to ensure consistent behavior $('#advsrch').trigger('click'); } var savedKey=sessionStorage.getItem('adv.key')||''; - var savedVal=sessionStorage.getItem('adv.value')||''; if(savedKey){ - $('#searchadv').siblings('select[name="key"]').val(savedKey).trigger('change'); - } - if(savedVal){ - $('#searchadv').val(savedVal); + $('form.advsearch select[name="key"]').val(savedKey).trigger('change'); } + } else if (currentScript!=='search.php') { + // Do not auto-open Advanced on non-search pages + sessionStorage.setItem('adv.active','0'); } }catch(e){} });