(function($){ 'use strict'; if(window.fiLiveResultsBound)return;window.fiLiveResultsBound=true; var pending=new WeakMap(); function anchor(root){ var nodes=root.querySelectorAll('[data-live-result-row],.resultCard[data-read-comp]'); for(var i=0;i0 && r.top1)window.scrollBy(0,delta);return;}} } function mergeCards(root,incoming){ var list=root.querySelector('.resultsList'),fresh=incoming.querySelector('.resultsList');if(!list||!fresh)return; var old={};list.querySelectorAll('.resultCard[data-read-comp]').forEach(function(card){old[card.dataset.readComp]=card;}); var cursor=list.firstElementChild,seen={}; fresh.querySelectorAll('.resultCard[data-read-comp]').forEach(function(card){ var id=card.dataset.readComp,current=old[id];seen[id]=true; if(!current){current=document.importNode(card,true);list.insertBefore(current,cursor);} else { var head=current.querySelector('.resultCard__head'),newHead=card.querySelector('.resultCard__head'); if(head&&newHead&&head.innerHTML!==newHead.innerHTML)head.innerHTML=newHead.innerHTML; if(current!==cursor)list.insertBefore(current,cursor); } cursor=current.nextElementSibling; }); Object.keys(old).forEach(function(id){if(!seen[id])old[id].remove();}); if(window.fiInitResultReads)window.fiInitResultReads(list); var empty=root.querySelector('[data-live-empty]');if(empty && list.children.length)empty.remove(); } function refresh(root,manual){ if(pending.has(root)||root.contains(document.activeElement)&&document.activeElement.matches('input,select,textarea'))return; var url=root.dataset.liveUrl; if(['/teacher/feis_results.php','/organizer/TAB_feis_onfly.php'].indexOf(url)===-1)return; var button=root.querySelector('[data-live-refresh]'),status=root.querySelector('[data-live-refresh-status]'),ok=false; if(button)button.disabled=true; if(manual&&status)status.textContent=button.dataset.pending; var request=$.ajax({url:url,type:'GET',dataType:'html',cache:false,timeout:25000});pending.set(root,request); request.done(function(html){ if(!root.isConnected)return; var doc=new DOMParser().parseFromString(html,'text/html'),incoming=doc.querySelector('[data-fi-live-results]'); if(!incoming||incoming.dataset.liveEvent!==root.dataset.liveEvent||incoming.dataset.fiLiveResults!==root.dataset.fiLiveResults)return; ok=true; if(incoming.dataset.liveRevision===root.dataset.liveRevision)return; var a=anchor(root); if(root.dataset.fiLiveResults==='public')mergeCards(root,incoming); else root.replaceChildren.apply(root,Array.from(incoming.childNodes).map(function(n){return document.importNode(n,true);})); root.dataset.liveRevision=incoming.dataset.liveRevision; restore(root,a); }).always(function(){pending.delete(root);var currentButton=root.querySelector('[data-live-refresh]'),currentStatus=root.querySelector('[data-live-refresh-status]');if(currentButton)currentButton.disabled=false;if(manual&¤tStatus)currentStatus.textContent=ok?'':button.dataset.error;}); } function tick(){if(document.hidden)return;document.querySelectorAll('[data-fi-live-results]').forEach(function(root){refresh(root,false);});} document.addEventListener('click',function(e){var button=e.target.closest('[data-live-refresh]');if(!button)return;e.preventDefault();refresh(button.closest('[data-fi-live-results]'),true);}); window.setInterval(tick,30000); })(jQuery);