From dfa0548b3550144af9904f2ea8cad254200f51ca Mon Sep 17 00:00:00 2001 From: KrivovDE <208969570+kunzite16@users.noreply.github.com> Date: Wed, 9 Sep 2026 17:01:47 +0300 Subject: [PATCH] Show full search filters in tooltips --- assets/css/main.css | 7 +++++++ assets/js/app.js | 44 ++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/assets/css/main.css b/assets/css/main.css index 3432931..c1af3d7 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -3707,6 +3707,13 @@ body.organization-view:not(.expanded) #content>#stability>.bankruptcy-timeline{ outline:1px solid #a9cee9; outline-offset:2px; } +.search-result-filter.is-truncated{ + cursor:help; +} +.search-result-filter.is-truncated:focus-visible{ + outline:1px solid #a9cee9; + outline-offset:2px; +} .search-result-filters-tooltip{ position:fixed; z-index:1000; diff --git a/assets/js/app.js b/assets/js/app.js index ff151b0..ae6c1f0 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -1309,10 +1309,50 @@ const renderSearchResults=()=>{ const parameters=document.createElement('div'); parameters.className='search-result-group-parameters'; const visibleFilters=group.filters.slice(0,5); - visibleFilters.forEach(({parameter,value})=>{ + visibleFilters.forEach(({parameter,value},filterIndex)=>{ const item=document.createElement('span'); item.className='search-result-filter'; - item.textContent=`${parameter} — ${value}`; + const fullText=`${parameter} — ${value}`; + item.textContent=fullText; + const tooltip=document.createElement('span'); + const tooltipId=`search-filter-tooltip-${groupIndex}-${filterIndex}`; + tooltip.id=tooltipId; + tooltip.className='search-result-filters-tooltip search-result-filter-tooltip'; + tooltip.dataset.searchFiltersTooltip=''; + tooltip.setAttribute('role','tooltip'); + const tooltipText=document.createElement('span'); + tooltipText.textContent=fullText; + tooltip.append(tooltipText); + const showTooltip=()=>{ + if(item.scrollWidth<=item.clientWidth)return; + tooltip.classList.add('is-visible'); + const anchorRect=item.getBoundingClientRect(); + const tooltipRect=tooltip.getBoundingClientRect(); + const left=Math.max(.5*16,Math.min(anchorRect.left,innerWidth-tooltipRect.width-.5*16)); + const below=anchorRect.bottom+.5*16; + const top=below+tooltipRect.height<=innerHeight-.5*16 + ? below + : Math.max(.5*16,anchorRect.top-tooltipRect.height-.5*16); + tooltip.style.left=`${left}px`; + tooltip.style.top=`${top}px`; + }; + const hideTooltip=()=>tooltip.classList.remove('is-visible'); + item.addEventListener('mouseenter',showTooltip); + item.addEventListener('mouseleave',hideTooltip); + item.addEventListener('focus',showTooltip); + item.addEventListener('blur',hideTooltip); + document.body.append(tooltip); + requestAnimationFrame(()=>{ + const truncated=item.scrollWidth>item.clientWidth; + item.classList.toggle('is-truncated',truncated); + if(truncated){ + item.tabIndex=0; + item.setAttribute('aria-describedby',tooltipId); + }else{ + item.removeAttribute('tabindex'); + item.removeAttribute('aria-describedby'); + } + }); parameters.append(item); });