Hedef Platform Seçimi
Listeden seçimlerinizi tamamlayın...
Listeden seçimlerinizi tamamlayın...
Lütfen her iki modülden birer platform seçin.
Taktik & Teknik Analiz Raporu
Sistem Veritabanı Yönetimi
| Ülke | Platform Türü | Sınıf / Temsilci Adı | İşlem |
Kayıtlı platform bulunamadı.
${s.name}
${s.shipClass||''} Sınıfı • ${s.nation}
`; } function gl_evaluateCompareBtn() { const btn = document.getElementById('gl_compareBtn'); const txt = document.getElementById('gl_hintTxt'); if(gl_state.s1 && gl_state.s2) { btn.disabled = false; txt.textContent = 'Kapsamlı analiz için hazır. Butona tıklayın.'; } else { btn.disabled = true; txt.textContent = 'Lütfen her iki modülden birer platform seçin.'; } } function gl_renderComparison() { if(!gl_state.s1 || !gl_state.s2) return; const s1 = gl_currentData.find(x => x.id === gl_state.s1); const s2 = gl_currentData.find(x => x.id === gl_state.s2); document.getElementById('gl_hShip1').textContent = s1.name; document.getElementById('gl_hShip2').textContent = s2.name; const tbody = document.getElementById('gl_compBody'); let html = ''; const groups = [ { groupName: "Kimlik ve Operasyonel Rol", fields: [ { label: "Donanma / Ülke", k: "nation" }, { label: "Platform Sınıfı", k: "shipClass" }, { label: "Platform Türü", k: "type" }, { label: "Taktiksel Rol", k: "role" } ] }, { groupName: "Teknik Kapasite ve Boyutlar", fields: [ { label: "Deplasman / Ağırlık", k: "displacement" }, { label: "Uzunluk / Genişlik", k: "dimensions" }, { label: "İtici Güç (Propulsion)", k: "power" }, { label: "Azami Hız", k: "speed" }, { label: "Operasyonel Menzil", k: "range" } ] } ]; const isSub = (s) => s.type && s.type.includes('Denizaltı'); if(isSub(s1) || isSub(s2)) { groups[1].fields.push({ label: "Dalış Derinliği", k: "diveDepth" }); } groups.push({ groupName: "Silah, Sensör ve Personel", fields: [ { label: "Sensör ve Elektronik Harp", k: "sensors" }, { label: "Silah Sistemleri", k: "weapons" }, { label: "Havacılık Kapasitesi", k: "aviation" }, { label: "Mürettebat / Personel", k: "crew" }, { label: "Ek Notlar", k: "notes" } ] }); groups.forEach(g => { html += `
| ${g.groupName} |
`; g.fields.forEach(f => { const v1 = (s1[f.k] && s1[f.k].trim() !== '') ? s1[f.k] : '—'; const v2 = (s2[f.k] && s2[f.k].trim() !== '') ? s2[f.k] : '—'; const c1 = v1 === '—' ? 'empty' : ''; const c2 = v2 === '—' ? 'empty' : ''; html += `
| ${f.label} | ${v1} | ${v2} |
`; }); }); tbody.innerHTML = html; const sec = document.getElementById('gl_comparisonSection'); sec.style.display = 'block'; sec.scrollIntoView({behavior: 'smooth', block: 'start'}); } function gl_resetAll() { [1,2].forEach(b => { document.getElementById('gl_nation'+b).value = ''; const t = document.getElementById('gl_type'+b); t.innerHTML=''; t.disabled=true; const s = document.getElementById('gl_ship'+b); s.innerHTML=''; s.disabled=true; gl_state['s'+b] = null; gl_updatePreview(b, null); }); gl_evaluateCompareBtn(); document.getElementById('gl_comparisonSection').style.display='none'; } // --- ADMIN PANELI --- function gl_toggleAdminGate() { if(gl_state.adminOpen) { gl_adminLock(); return; } document.getElementById('gl_adminGate').classList.toggle('open'); } function gl_checkPass() { if(document.getElementById('gl_adminPass').value === GL_ADMIN_PASS) { document.getElementById('gl_adminGate').classList.remove('open'); document.getElementById('gl_adminContent').classList.add('open'); gl_state.adminOpen = true; gl_showToast('Yetkili girişi başarılı.'); } else { gl_showToast('Hatalı parola.'); document.getElementById('gl_adminPass').value = ''; } } function gl_adminLock() { gl_state.adminOpen = false; document.getElementById('gl_adminContent').classList.remove('open'); document.getElementById('gl_adminGate').classList.remove('open'); document.getElementById('gl_adminPass').value = ''; gl_showToast('Oturum kapatıldı.'); } function gl_renderAdminTable() { const tbody = document.getElementById('gl_adminBody'); const tbl = document.getElementById('gl_adminTable'); const emp = document.getElementById('gl_adminEmpty'); if(!gl_currentData.length) { tbl.style.display='none'; emp.style.display='block'; return; } tbl.style.display=''; emp.style.display='none'; tbody.innerHTML = gl_currentData.map(s => `
| ${s.nation} | ${s.type} | ${s.name} (${s.shipClass||''}) |
|
`).join('');
}
const gl_formKeys = ['nation','type','class','name','role','displacement','dimensions','power','speed','sensors','weapons','aviation','divedepth','crew','range','notes'];
function gl_openAddModal() {
gl_editId = null;
document.getElementById('gl_modalTitle').textContent = 'Yeni Platform Kaydı';
gl_formKeys.forEach(k => { const el=document.getElementById('gl_f_'+k); if(el) el.value=''; });
document.getElementById('gl_shipModal').classList.add('open');
}
function gl_openEditModal(id) {
const s = gl_currentData.find(x => x.id === id); if(!s) return;
gl_editId = id;
document.getElementById('gl_modalTitle').textContent = 'Düzenle: ' + s.name;
document.getElementById('gl_f_nation').value = s.nation || '';
document.getElementById('gl_f_type').value = s.type || '';
document.getElementById('gl_f_class').value = s.shipClass || '';
document.getElementById('gl_f_name').value = s.name || '';
document.getElementById('gl_f_role').value = s.role || '';
document.getElementById('gl_f_displacement').value = s.displacement || '';
document.getElementById('gl_f_dimensions').value = s.dimensions || '';
document.getElementById('gl_f_power').value = s.power || '';
document.getElementById('gl_f_speed').value = s.speed || '';
document.getElementById('gl_f_sensors').value = s.sensors || '';
document.getElementById('gl_f_weapons').value = s.weapons || '';
document.getElementById('gl_f_aviation').value = s.aviation || '';
document.getElementById('gl_f_divedepth').value = s.diveDepth || '';
document.getElementById('gl_f_crew').value = s.crew || '';
document.getElementById('gl_f_range').value = s.range || '';
document.getElementById('gl_f_notes').value = s.notes || '';
document.getElementById('gl_shipModal').classList.add('open');
}
function gl_closeModal() { document.getElementById('gl_shipModal').classList.remove('open'); }
async function gl_saveShip() {
const d = {
nation: document.getElementById('gl_f_nation').value.trim(),
type: document.getElementById('gl_f_type').value,
shipClass: document.getElementById('gl_f_class').value.trim(),
name: document.getElementById('gl_f_name').value.trim(),
role: document.getElementById('gl_f_role').value.trim(),
displacement: document.getElementById('gl_f_displacement').value.trim(),
dimensions: document.getElementById('gl_f_dimensions').value.trim(),
power: document.getElementById('gl_f_power').value.trim(),
speed: document.getElementById('gl_f_speed').value.trim(),
sensors: document.getElementById('gl_f_sensors').value.trim(),
weapons: document.getElementById('gl_f_weapons').value.trim(),
aviation: document.getElementById('gl_f_aviation').value.trim(),
diveDepth: document.getElementById('gl_f_divedepth').value.trim(),
crew: document.getElementById('gl_f_crew').value.trim(),
range: document.getElementById('gl_f_range').value.trim(),
notes: document.getElementById('gl_f_notes').value.trim()
};
if(!d.nation || !d.type || !d.name) { gl_showToast('Ülke, Tür ve Gemi Adı zorunludur!'); return; }
if(gl_editId !== null) {
const i = gl_currentData.findIndex(x => x.id === gl_editId);
if(i !== -1) gl_currentData[i] = { id: gl_editId, ...d };
gl_showToast('Platform güncellendi.');
} else {
const nId = gl_currentData.length ? Math.max(...gl_currentData.map(x=>x.id))+1 : 1;
gl_currentData.push({ id: nId, ...d });
gl_showToast('Yeni platform eklendi.');
}
await gl_updateDB(gl_currentData);
gl_populateDropdown('gl_nation1', 'nation');
gl_populateDropdown('gl_nation2', 'nation');
gl_resetAll();
gl_renderAdminTable();
gl_closeModal();
}
async function gl_deleteShip(id) {
if(!confirm('Bu kaydı tamamen silmek istediğinize emin misiniz?')) return;
gl_currentData = gl_currentData.filter(x => x.id !== id);
await gl_updateDB(gl_currentData);
gl_populateDropdown('gl_nation1', 'nation');
gl_populateDropdown('gl_nation2', 'nation');
gl_resetAll();
gl_renderAdminTable();
gl_showToast('Kayıt silindi.');
}
function gl_exportCSV() {
if(!gl_currentData.length) { gl_showToast('Dışa aktarılacak veri yok.'); return; }
const keys = ['nation','type','shipClass','name','role','displacement','dimensions','power','speed','diveDepth','sensors','weapons','aviation','crew','range','notes'];
let csv = keys.join(',') + '\n';
gl_currentData.forEach(s => { csv += keys.map(k => '"' + (s[k]||'').replace(/"/g,'""') + '"').join(',') + '\n'; });
const a = document.createElement('a');
a.href = URL.createObjectURL(new Blob([csv], {type: 'text/csv'}));
a.download = 'kuresel_donanma_veritabani.csv';
a.click();
}
function gl_showToast(msg) {
const t = document.getElementById('gl_toast');
t.textContent = msg; t.classList.add('show');
setTimeout(() => t.classList.remove('show'), 3000);
}
// Windows dışı modal tıklama kapaması
window.addEventListener('click', function(e) {
const modal = document.getElementById('gl_shipModal');
if(e.target === modal) { gl_closeModal(); }
});