10-ajan denetimi: 7 ceviri hatasi + 6 kod/UI bug'i duzeltildi
Ceviri (TOPLANTI JSON + TTS + timeline yeniden kuruldu): - Blok 120, 122: kritik kopma (orijinalin %95'i cevrilmemisti) -> tam cevrildi - Blok 59: "Wala" (yok/hayir) yanlislikla "Evet" cevrilmisti -> duzeltildi - Blok 103, 195, 218, 249: anlam kaymasi/kopya hatalari duzeltildi Kod/UI: - curIndex(): repliklerarasi bosluklarda yanlislikla son index donuyordu (prev tusu kaydin sonuna isinliyordu) -> en yakin onceki index'e duzeltildi - drawTL/seekTL/update: farkli duration fallback (1332 vs 1sn) -> ortak curDur() - Zaman cizelgesine touch/dokunmatik surukleme destegi eklendi - REC isigi/etiketi Kaan'in adindan uzaklastirildi (masa ortasina) - Mobilde (390px) topbar/toggle/bar tasma riski azaltildi, kamera dar ekranda geri cekiliyor (fitCamera) - Baslikta yanlis "09:00-31:13" sure yazisi kaldirildi - Dockerfile/nginx.conf'un web'den servis edilmesi engellendi Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
29f317011f
commit
23f67afe60
@@ -8,3 +8,4 @@ tts/
|
||||
.playwright-mcp/
|
||||
*.md
|
||||
*.log
|
||||
Dockerfile
|
||||
|
||||
+37
-13
@@ -39,15 +39,24 @@
|
||||
font-size:15px;cursor:pointer;display:flex;align-items:center;justify-content:center}
|
||||
.btn:hover{border-color:var(--accent)}
|
||||
.btn.play{width:46px;height:46px;font-size:17px;background:var(--accent);border-color:var(--accent)}
|
||||
#time{font-variant-numeric:tabular-nums;font-size:13px;color:var(--mut);min-width:190px}
|
||||
#time{font-variant-numeric:tabular-nums;font-size:13px;color:var(--mut);min-width:120px}
|
||||
#hint{font-size:11px;color:var(--mut)}
|
||||
@media(max-width:640px){#subtitle{bottom:138px}#legend{display:none}#hint{display:none}}
|
||||
@media(max-width:640px){
|
||||
#subtitle{bottom:138px}
|
||||
#hint{display:none}
|
||||
#bar{flex-wrap:wrap}
|
||||
#topbar h1{font-size:13px}
|
||||
#topbar .sub{display:none}
|
||||
.toggle button{padding:6px 10px;font-size:12px}
|
||||
#legend{max-width:150px;font-size:10px;padding:7px 9px;top:56px}
|
||||
#legend b{font-size:10.5px}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="scene"></div>
|
||||
<div id="topbar">
|
||||
<h1>Toplantı — 3D Oda <span class="sub">· uzlaşma görüşmesi · 09:00–31:13</span></h1>
|
||||
<h1>Toplantı — 3D Oda <span class="sub">· uzlaşma görüşmesi (düzenlenmiş kayıt)</span></h1>
|
||||
<div class="spacer"></div>
|
||||
<div class="toggle" id="langToggle">
|
||||
<button data-m="orig" class="on">🔊 Orijinal</button>
|
||||
@@ -102,7 +111,12 @@ const scene=new THREE.Scene();
|
||||
scene.background=new THREE.Color(0x0d1117);
|
||||
scene.fog=new THREE.Fog(0x0d1117,16,34);
|
||||
const camera=new THREE.PerspectiveCamera(48,innerWidth/innerHeight,0.1,100);
|
||||
camera.position.set(0,6.2,9.6);
|
||||
function fitCamera(){
|
||||
const narrow=innerWidth<700;
|
||||
camera.position.set(0, narrow?8.6:6.2, narrow?14.5:9.6);
|
||||
camera.aspect=innerWidth/innerHeight; camera.updateProjectionMatrix();
|
||||
}
|
||||
fitCamera();
|
||||
const renderer=new THREE.WebGLRenderer({antialias:true});
|
||||
renderer.setSize(innerWidth,innerHeight); renderer.setPixelRatio(Math.min(devicePixelRatio,2));
|
||||
document.getElementById('scene').appendChild(renderer.domElement);
|
||||
@@ -127,8 +141,8 @@ tableTop.position.y=TABLE_H; scene.add(tableTop);
|
||||
leg.position.set(p[0],TABLE_H/2,p[1]); scene.add(leg);
|
||||
});
|
||||
const rec=new THREE.Mesh(new THREE.BoxGeometry(0.5,0.12,0.28),new THREE.MeshStandardMaterial({color:0xd21f1f,emissive:0x330000,roughness:0.4}));
|
||||
rec.position.set(-1.3,TABLE_H+0.14,1.0); scene.add(rec);
|
||||
const recLbl=makeLabel("🔴 KAYIT","#ff6666",0.55); recLbl.position.set(-1.3,TABLE_H+0.55,1.0); scene.add(recLbl);
|
||||
rec.position.set(0,TABLE_H+0.14,0); scene.add(rec);
|
||||
const recLbl=makeLabel("🔴 KAYIT","#ff6666",0.55); recLbl.position.set(0,TABLE_H+0.55,0); scene.add(recLbl);
|
||||
|
||||
const SKIN=0xe8b98c, chars={};
|
||||
function makeChar(role){
|
||||
@@ -189,9 +203,10 @@ Object.keys(POS3D).forEach(function(r){
|
||||
});
|
||||
|
||||
const tl=document.getElementById('tl'), tg=tl.getContext('2d');
|
||||
function curDur(){ const d=A().duration, T=curTL(); return (Number.isFinite(d)&&d>0) ? d : T[T.length-1].e; }
|
||||
function fitTL(){ tl.width=tl.clientWidth*devicePixelRatio; tl.height=34*devicePixelRatio; tg.setTransform(devicePixelRatio,0,0,devicePixelRatio,0,0); drawTL(); }
|
||||
function drawTL(){
|
||||
const T=curTL(), dur=A().duration||T[T.length-1].e, W=tl.clientWidth, H=34;
|
||||
const T=curTL(), dur=curDur(), W=tl.clientWidth, H=34;
|
||||
tg.clearRect(0,0,W,H);
|
||||
tg.fillStyle="#21262d"; roundRect(tg,0,11,W,12,6); tg.fill();
|
||||
tg.globalAlpha=0.85;
|
||||
@@ -199,19 +214,28 @@ function drawTL(){
|
||||
tg.globalAlpha=1;
|
||||
const ph=(A().currentTime/dur)*W; tg.fillStyle="#fff"; tg.fillRect(ph-1,6,2,22); tg.beginPath(); tg.arc(ph,6,4,0,7); tg.fill();
|
||||
}
|
||||
function seekTL(e){ const r=tl.getBoundingClientRect(); const x=(e.clientX-r.left)/r.width; const a=A(); a.currentTime=Math.max(0,Math.min(1,x))*(a.duration||1); update(); }
|
||||
function seekAtClientX(clientX){ const r=tl.getBoundingClientRect(); const x=(clientX-r.left)/r.width; const a=A(); a.currentTime=Math.max(0,Math.min(1,x))*curDur(); update(); }
|
||||
let drag=false;
|
||||
tl.addEventListener('mousedown',function(e){drag=true;seekTL(e);});
|
||||
addEventListener('mousemove',function(e){if(drag)seekTL(e);});
|
||||
tl.addEventListener('mousedown',function(e){drag=true;seekAtClientX(e.clientX);});
|
||||
addEventListener('mousemove',function(e){if(drag)seekAtClientX(e.clientX);});
|
||||
addEventListener('mouseup',function(){drag=false;});
|
||||
tl.addEventListener('touchstart',function(e){drag=true;seekAtClientX(e.touches[0].clientX);e.preventDefault();},{passive:false});
|
||||
addEventListener('touchmove',function(e){if(drag){seekAtClientX(e.touches[0].clientX);e.preventDefault();}},{passive:false});
|
||||
addEventListener('touchend',function(){drag=false;});
|
||||
|
||||
function curIndex(){ const t=A().currentTime, T=curTL(); for(let i=0;i<T.length;i++){ if(t>=T[i].t&&t<T[i].e) return i; } return t<T[0].t?-1:T.length-1; }
|
||||
function curIndex(){
|
||||
const t=A().currentTime, T=curTL();
|
||||
if(t<T[0].t) return -1;
|
||||
let ans=0;
|
||||
for(let i=0;i<T.length;i++){ if(T[i].t<=t) ans=i; else break; }
|
||||
return ans;
|
||||
}
|
||||
let lastRole=null;
|
||||
function highlight(role){ if(role===lastRole)return; lastRole=role; for(const r in chars){ const on=(r===role); chars[r].active=on; chars[r].ring.visible=on; chars[r].bulb.visible=on; chars[r].halo.visible=on; if(!on)chars[r].blight.intensity=0; } }
|
||||
const fmt=function(s){s=Math.max(0,s|0);return String(s/60|0).padStart(2,'0')+':'+String(s%60).padStart(2,'0');};
|
||||
const sub=document.getElementById('subtitle'),sW=document.getElementById('subWho'),sO=document.getElementById('subOrig'),sT=document.getElementById('subTr');
|
||||
function update(){
|
||||
const a=A(), T=curTL(), dur=a.duration||T[T.length-1].e;
|
||||
const a=A(), T=curTL(), dur=curDur();
|
||||
document.getElementById('time').textContent=fmt(a.currentTime)+' / '+fmt(dur);
|
||||
const i=curIndex();
|
||||
if(i>=0){ const b=T[i]; highlight(b.rol);
|
||||
@@ -263,7 +287,7 @@ function loop(){
|
||||
controls.update(); renderer.render(scene,camera);
|
||||
}
|
||||
loop();
|
||||
addEventListener('resize',function(){ camera.aspect=innerWidth/innerHeight; camera.updateProjectionMatrix(); renderer.setSize(innerWidth,innerHeight); fitTL(); });
|
||||
addEventListener('resize',function(){ fitCamera(); renderer.setSize(innerWidth,innerHeight); fitTL(); });
|
||||
fitTL();
|
||||
</script>
|
||||
</body>
|
||||
|
||||
@@ -4,6 +4,12 @@ server {
|
||||
root /usr/share/nginx/html;
|
||||
index index.html;
|
||||
|
||||
# Dagitim yapilandirma dosyalari disariya sizmasin
|
||||
location ~* ^/(Dockerfile|nginx\.conf|\.dockerignore|\.gitignore)$ {
|
||||
deny all;
|
||||
return 404;
|
||||
}
|
||||
|
||||
# Tek sayfa; her yol index.html'e düşsün
|
||||
location / {
|
||||
try_files $uri $uri/ /index.html;
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user