Kod temizligi + hata yonetimi: olu OFFSET/2D roles alanlari kaldirildi, script/audio onerror handler'lari eklendi

- index.html: kullanilmayan OFFSET sabiti kaldirildi
- data.js: roles icindeki olu 2D x/y/durum alanlari temizlendi (sadece renk kullaniliyordu)
- three.min.js/OrbitControls.js/data.js icin onerror -> gorunur hata ekrani (loadErr)
- toplanti_orijinal.mp3 icin onerror -> gorunur hata ekrani
- toplanti_turkce.mp3 icin onerror -> sayfa kilitlenmiyor, TR_READY() artik dinamik
  fonksiyon olup TR_AUDIO_FAILED bayragini da kontrol ediyor
- three.min.js/OrbitControls.js icin de cache-busting versiyonu eklendi (tutarlilik)
This commit is contained in:
yilsem
2026-07-04 06:31:15 +03:00
parent 6692c21f10
commit 765d84f00a
2 changed files with 29 additions and 14 deletions
+1 -1
View File
File diff suppressed because one or more lines are too long
+28 -13
View File
@@ -80,14 +80,29 @@
<span id="hint">Zaman çizelgesine tıkla/sürükle · fareyle sahneyi döndür · çift tık kişi→ilk sözü</span>
</div>
</div>
<audio id="ao" src="toplanti_orijinal.mp3?v=20260704d" preload="metadata"></audio>
<audio id="at" preload="metadata"></audio>
<script src="three.min.js"></script>
<script src="OrbitControls.js"></script>
<script src="data.js?v=20260704d"></script>
<div id="loadErr" style="display:none;position:fixed;inset:0;z-index:999;background:#0d1117;color:#e6edf3;
font-family:'Segoe UI',system-ui,sans-serif;align-items:center;justify-content:center;text-align:center;padding:24px">
<div>
<div style="font-size:15px;font-weight:600;margin-bottom:8px">⚠️ Bir dosya yüklenemedi</div>
<div id="loadErrMsg" style="font-size:13px;color:#8b949e"></div>
<div style="font-size:12px;color:#8b949e;margin-top:10px">Sayfayı yeniden yüklemeyi deneyin veya bir yerel sunucu üzerinden açın (file:// kısıtlamaları olabilir).</div>
</div>
</div>
<script>
const ROLES=MEET.roles, TL=MEET.TL, OFFSET=0;
function showLoadErr(msg){
const box=document.getElementById('loadErr'), m=document.getElementById('loadErrMsg');
if(m)m.textContent=msg; if(box){box.style.display='flex';}
}
</script>
<audio id="ao" src="toplanti_orijinal.mp3?v=20260704d" preload="metadata" onerror="showLoadErr('toplanti_orijinal.mp3 yüklenemedi')"></audio>
<audio id="at" preload="metadata" onerror="window.TR_AUDIO_FAILED=true"></audio>
<script src="three.min.js?v=20260704d" onerror="showLoadErr('three.min.js (3D motoru) yüklenemedi')"></script>
<script src="OrbitControls.js?v=20260704d" onerror="showLoadErr('OrbitControls.js (kamera kontrolü) yüklenemedi')"></script>
<script src="data.js?v=20260704d" onerror="showLoadErr('data.js (toplantı verisi) yüklenemedi')"></script>
<script>
if(typeof MEET==='undefined'){ showLoadErr('data.js yüklenemedi veya bozuk (MEET tanımsız)'); throw new Error('MEET tanımsız — data.js yüklenemedi'); }
const ROLES=MEET.roles, TL=MEET.TL;
const POS3D={
"Kaan":{x:-1.6,z:2.3,stand:false}, "Marissa":{x:1.6,z:2.3,stand:false},
"Dolandırıcı (D-)":{x:-1.6,z:-2.3,stand:false}, "Uzlaşmacı (U)":{x:0.4,z:-2.3,stand:false},
@@ -191,9 +206,9 @@ const ao=document.getElementById('ao'), at=document.getElementById('at');
let mode='orig';
const TL_TR=MEET.TL_tr||null;
if(MEET.trAudio){ at.src=MEET.trAudio+'?v=20260704d'; }
const TR_READY=!!MEET.trAudio && !!TL_TR;
function A(){ return (mode==='tr'&&TR_READY)?at:ao; }
function curTL(){ return (mode==='tr'&&TR_READY)?TL_TR:TL; }
function TR_READY(){ return !!MEET.trAudio && !!TL_TR && !window.TR_AUDIO_FAILED; }
function A(){ return (mode==='tr'&&TR_READY())?at:ao; }
function curTL(){ return (mode==='tr'&&TR_READY())?TL_TR:TL; }
const lr=document.getElementById('legendRows');
Object.keys(POS3D).forEach(function(r){
@@ -239,14 +254,14 @@ function update(){
document.getElementById('time').textContent=fmt(a.currentTime)+' / '+fmt(dur);
const i=curIndex();
if(i>=0){ const b=T[i]; highlight(b.rol);
let badge=(mode==='tr'&&!TR_READY)?' <span class="badge">ses hazırlanıyor</span>':'';
let badge=(mode==='tr'&&!TR_READY())?' <span class="badge">ses hazırlanıyor</span>':'';
sW.innerHTML=(SHORT[b.rol]||b.rol)+badge; sW.style.color=(ROLES[b.rol]&&ROLES[b.rol].renk)||'#fff';
sO.textContent=b.orig; sT.textContent=b.tr; sub.style.opacity=1;
} else { highlight(null); sub.style.opacity=.6; }
drawTL();
}
ao.addEventListener('timeupdate',function(){if(mode==='orig'||!TR_READY)update();});
at.addEventListener('timeupdate',function(){if(mode==='tr'&&TR_READY)update();});
ao.addEventListener('timeupdate',function(){if(mode==='orig'||!TR_READY())update();});
at.addEventListener('timeupdate',function(){if(mode==='tr'&&TR_READY())update();});
ao.addEventListener('loadedmetadata',function(){fitTL();update();});
at.addEventListener('loadedmetadata',function(){if(mode==='tr')fitTL();});