PageSourceSearch

https://canlitv.com/js/aktif-izleyiciler.js?v=5

js canlitv.com collected 2026-10-02 19:09:30 UTC 2,385 bytes, 64 lines download raw bytes

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.