1/* Ana sayfa "Aktif İzleyiciler" modülü (2026-10) 2 Her dakika baÅında (sunucu saatine göre) yayındaki programların kalan süresi güncellenir; biri bitince liste 3 sunucudan yeniden alınır (izleyici payları da tazelenir). */ 4(function(){ 5 var kok=document.getElementById('aktif-izleyiciler'); 6 if(!kok)return; 7 var ARALIK=120000; // iki yenileme arasında en az süre (ms) 8 var liste, simdi0=0, t0=0, sonYenileme=Date.now(), yenileZaman=null, dakikaZaman=null; 9 10 // kalan süre metni (PHP ai_liste ile aynı) 11 function kalanMetni(dk){return Math.max(1,Math.ceil(dk))+' dk kaldı';} 12 function simdi(){return simdi0+(Date.now()-t0)/60000;} 13 14 function kur(){ 15 liste=kok.querySelector('.ai-liste'); 16 if(!liste)return; 17 simdi0=+liste.getAttribute('data-simdi'); 18 t0=Date.now(); 19 } 20 21 function canli(){ 22 if(!liste)return; 23 var n=simdi(), bitti=false; 24 [].forEach.call(liste.querySelectorAll('.ai-prog[data-e]'),function(p){ 25 var e=+p.getAttribute('data-e'), em=p.querySelector('em'); 26 if(n>=e)bitti=true; 27 if(em)em.textContent=kalanMetni(e-n); 28 }); 29 // bitiÅi bilinmeyen programlar için de liste ara sıra tazelensin (15 dk) 30 if(bitti || Date.now()-sonYenileme>900000)yenile(); 31 } 32 33 // listeyi sunucudan al; herkes aynı anda istemesin diye rastgele gecikmeli, sekme gizliyken yapılmaz 34 function yenile(){ 35 if(yenileZaman || document.hidden)return; 36 var bekle=Math.max(ARALIK-(Date.now()-sonYenileme),0)+3000+Math.random()*17000; 37 yenileZaman=setTimeout(function(){ 38 yenileZaman=null; 39 if(document.hidden)return; 40 sonYenileme=Date.now(); 41 liste.classList.add('yukleniyor'); 42 fetch('/modul/ajax-aktif-izleyiciler.php',{cache:'no-store'}) 43 .then(function(r){if(!r.ok)throw 0;return r.text();}) 44 .then(function(h){ 45 if(!/ai-liste/.test(h))throw 0; 46 liste.outerHTML=h; 47 kur(); 48 }) 49 .catch(function(){liste.classList.remove('yukleniyor');}); 50 },bekle); 51 } 52 53 // bir sonraki dakika baÅına kur (sunucu saatine göre), sonra her dakika 54 function planla(){ 55 clearTimeout(dakikaZaman); 56 var n=simdi(), ms=Math.max(1000,(Math.floor(n)+1-n)*60000+500); 57 dakikaZaman=setTimeout(function(){canli();planla();},ms); 58 } 59 // arka plandaki sekmede zamanlayıcılar yavaÅlar: sekmeye dönünce hemen güncelle 60 document.addEventListener('visibilitychange',function(){if(!document.hidden){canli();planla();}}); 61 62 kur(); 63 planla(); 64})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.