async function loadMentions() { const d=await apiGet('/api/mentions'); if(!d) return; mentionsData = d.mentions||[]; mentionUnread = d.unread||0; renderMentionsBell(); } function renderMentionsBell() { const badge=document.getElementById('notif-badge'); const btn =document.getElementById('notif-btn'); if(!badge||!btn) return; if(mentionUnread>0){badge.textContent=mentionUnread;badge.style.display='block';} else badge.style.display='none'; } function toggleMentionsDropdown() { const dd=document.getElementById('mentions-dropdown'); if(!dd) return; const isOpen=dd.classList.contains('open'); dd.classList.toggle('open',!isOpen); if(!isOpen) renderMentionsList(); } document.addEventListener('click',e=>{ const dd=document.getElementById('mentions-dropdown'); if(dd&&!document.getElementById('notif-btn')?.contains(e.target)&&!dd.contains(e.target)) dd.classList.remove('open'); }); function renderMentionsList() { const el=document.getElementById('mentions-list'); if(!el) return; if(!mentionsData.length){el.innerHTML='
Нет упоминаний
';return;} el.innerHTML=mentionsData.slice(0,10).map(m=>{ const unread=!m.read_at; const task=allData.find(d=>String(d.task.id)===String(m.task_id)); const num=task?(task.task.tasknumber||task.task.id):m.task_id; return`
#${num} ↩ ${esc(m.mentioned_by)} ${timeAgo(new Date(m.created_at))}
`; }).join(''); } async function jumpToMention(taskId) { document.getElementById('mentions-dropdown')?.classList.remove('open'); STATE_CHIP_KEYS.forEach(k=>stateChips[k]=true); ['chip-reply','chip-wait','chip-resolved','chip-hidden','chip-unmarked'].forEach(id=>document.getElementById(id)?.classList.remove('inactive')); document.getElementById('chip-all')?.classList.remove('off'); const idx=allData.findIndex(d=>String(d.task.id)===String(taskId)); if(idx!==-1){ currentPage=1; renderTable(); setTimeout(()=>{ const row=document.querySelector(`tbody tr[data-idx="${idx}"]`); if(row) row.scrollIntoView({behavior:'smooth',block:'center'}); openDetail(idx); },100); } }