diff --git a/sidebar.inc.php b/sidebar.inc.php index 726ab44fa..4bcd4bbab 100644 --- a/sidebar.inc.php +++ b/sidebar.inc.php @@ -64,12 +64,29 @@ 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('');} + 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 + try{ + var isOpen = $('#searchadv').parents('form').is(':visible'); + sessionStorage.setItem('adv.active', isOpen ? '1' : '0'); + if(isOpen){ + // 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){} }); $('#customsrch').click(function(){ window.location="custom_search.php"; @@ -147,10 +164,54 @@ 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) +// 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',$('form.advsearch select[name="key"]').val()||''); + // Do not persist the typed value by request + }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, preselect saved key, and if Advanced was active, reopen it and restore the selected filter (only on search.php). +$(function(){ + try{ + 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')||''; + if(savedKey){ + $('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){} +}); + // 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'});