Show full search filters in tooltips

This commit is contained in:
KrivovDE
2026-09-09 17:01:47 +03:00
parent 3abf54cfc7
commit dfa0548b35
2 changed files with 49 additions and 2 deletions

View File

@@ -3707,6 +3707,13 @@ body.organization-view:not(.expanded) #content>#stability>.bankruptcy-timeline{
outline:1px solid #a9cee9; outline:1px solid #a9cee9;
outline-offset:2px; 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{ .search-result-filters-tooltip{
position:fixed; position:fixed;
z-index:1000; z-index:1000;

View File

@@ -1309,10 +1309,50 @@ const renderSearchResults=()=>{
const parameters=document.createElement('div'); const parameters=document.createElement('div');
parameters.className='search-result-group-parameters'; parameters.className='search-result-group-parameters';
const visibleFilters=group.filters.slice(0,5); const visibleFilters=group.filters.slice(0,5);
visibleFilters.forEach(({parameter,value})=>{ visibleFilters.forEach(({parameter,value},filterIndex)=>{
const item=document.createElement('span'); const item=document.createElement('span');
item.className='search-result-filter'; 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); parameters.append(item);
}); });