Yükleniyor...
Bağlanılıyor...
SON DAKİKA
Haberler yükleniyor...
📢
Google AdSense Reklam Alanı
728 × 90 — Leaderboard
📢
Google AdSense Reklam Alanı
970 × 250 — Billboard
RSS Feed'ler Yükleniyor...
📢
Google AdSense — İçerik Arası Reklam
728 × 90 — Leaderboard
⭐ Premium Üyelik
Tüm haberlere yorum yapın, toplulukla etkileşime geçin
Aylık
₺29/ay
İptal edilebilir
Yıllık
₺199/yıl
%43 tasarruf 🔥
Ödeme iyzico altyapısıyla güvenle işlenir.
İstediğiniz zaman iptal edebilirsiniz.
Kullanım Şartları · Gizlilik Politikası
let supabase = null; function initSupabase() { if (window.supabase && SUPABASE_URL.includes('supabase.co') && !SUPABASE_URL.includes('XXXX')) { supabase = window.supabase.createClient(SUPABASE_URL, SUPABASE_KEY); } } // ---- AUTH STATE ---- let currentUser = null; // Supabase user objesi let currentProfile = null; // profiles tablosundaki kayıt let selectedPlan = 'monthly'; // Demo modu: Supabase bağlı değilse localStorage ile simüle et function isDemoMode() { return !supabase; } function getDemoUser() { const u = localStorage.getItem('ha_demo_user'); return u ? JSON.parse(u) : null; } function setDemoUser(u) { if (u) localStorage.setItem('ha_demo_user', JSON.stringify(u)); else localStorage.removeItem('ha_demo_user'); } function getDemoComments(articleId) { const raw = localStorage.getItem('ha_comments_' + articleId); return raw ? JSON.parse(raw) : []; } function saveDemoComment(articleId, comment) { const list = getDemoComments(articleId); list.unshift(comment); localStorage.setItem('ha_comments_' + articleId, JSON.stringify(list)); } // ---- ARTICLE ID ---- function getArticleId(art) { // URL'den benzersiz ID üret return btoa(art.link).replace(/[^a-z0-9]/gi,'').substring(0,32); } // ---- AUTH AREA RENDER ---- function renderAuthArea() { const el = document.getElementById('comment-auth-area'); if (!el) return; const user = isDemoMode() ? getDemoUser() : currentProfile; if (!user) { // Giriş / Kayıt formu el.innerHTML = `
${loginFormHTML()}
`; } else if (user.plan === 'free') { // Ücretsiz kullanıcı → premium gate el.innerHTML = ` ${userBarHTML(user)}

Yorum Yapmak için Premium Üyelik Gerekli

Haberlere yorum yapın, diğer okuyucularla etkileşime geçin.

₺29/ay
Tüm haberlere sınırsız yorum
Yorumları beğenme
⭐ Premium rozeti
Reklamları azaltılmış deneyim
`; } else { // Premium kullanıcı → yorum formu el.innerHTML = ` ${userBarHTML(user)}
`; } } function loginFormHTML() { return `
`; } function registerFormHTML() { return `
`; } function userBarHTML(user) { const initial = (user.username || user.email || '?')[0].toUpperCase(); const planBadge = user.plan === 'premium' ? `⭐ Premium` : `Ücretsiz`; return `
${initial}
${esc(user.username || user.email)} ${planBadge}
`; } function switchTab(tab) { document.getElementById('tab-login').classList.toggle('active', tab==='login'); document.getElementById('tab-register').classList.toggle('active', tab==='register'); document.getElementById('auth-form-area').innerHTML = tab === 'login' ? loginFormHTML() : registerFormHTML(); } function updateCharCount(el) { const n = el.value.length; const c = document.getElementById('char-count'); if (c) { c.textContent = n + ' / 500'; c.classList.toggle('warn', n > 400); } } // ---- LOGIN ---- async function doLogin() { const email = document.getElementById('auth-email')?.value.trim(); const pass = document.getElementById('auth-pass')?.value; if (!email || !pass) return showAuthMsg('E-posta ve şifre gerekli', 'error'); if (isDemoMode()) { // Demo modu const stored = localStorage.getItem('ha_user_' + email); if (!stored) return showAuthMsg('Kullanıcı bulunamadı', 'error'); const u = JSON.parse(stored); if (u.password !== pass) return showAuthMsg('Şifre yanlış', 'error'); setDemoUser({username: u.username, email, plan: u.plan || 'free'}); renderAuthArea(); loadComments(currentArticle); return; } showAuthMsg('Giriş yapılıyor...', 'info'); const {data, error} = await supabase.auth.signInWithPassword({email, password: pass}); if (error) return showAuthMsg(error.message, 'error'); await loadProfile(data.user); renderAuthArea(); loadComments(currentArticle); } // ---- REGISTER ---- async function doRegister() { const username = document.getElementById('auth-username')?.value.trim(); const email = document.getElementById('auth-email')?.value.trim(); const pass = document.getElementById('auth-pass')?.value; if (!username || !email || !pass) return showAuthMsg('Tüm alanları doldurun', 'error'); if (pass.length < 6) return showAuthMsg('Şifre en az 6 karakter olmalı', 'error'); if (isDemoMode()) { if (localStorage.getItem('ha_user_' + email)) return showAuthMsg('Bu e-posta zaten kayıtlı', 'error'); localStorage.setItem('ha_user_' + email, JSON.stringify({username, password: pass, plan: 'free'})); setDemoUser({username, email, plan: 'free'}); renderAuthArea(); loadComments(currentArticle); return; } showAuthMsg('Kayıt yapılıyor...', 'info'); const {data, error} = await supabase.auth.signUp({email, password: pass, options:{data:{username}}}); if (error) return showAuthMsg(error.message, 'error'); // profil oluştur await supabase.from('profiles').insert({id: data.user.id, username, plan: 'free'}); showAuthMsg('Kayıt başarılı! E-postanızı onaylayın.', 'success'); } async function loadProfile(user) { if (!supabase) return; currentUser = user; const {data} = await supabase.from('profiles').select('*').eq('id', user.id).single(); currentProfile = data; } function doLogout() { if (isDemoMode()) { setDemoUser(null); } else { supabase?.auth.signOut(); currentUser = null; currentProfile = null; } renderAuthArea(); } function showAuthMsg(msg, type) { const el = document.getElementById('auth-msg'); if (el) { el.className = 'auth-msg ' + type; el.textContent = msg; } } // ---- COMMENTS LOAD ---- async function loadComments(art) { if (!art) return; const articleId = getArticleId(art); const listEl = document.getElementById('comments-list'); const countEl = document.getElementById('c-count'); if (!listEl) return; if (isDemoMode()) { const comments = getDemoComments(articleId); if (countEl) countEl.textContent = comments.length; renderComments(comments); return; } const {data} = await supabase.from('comments') .select('*').eq('article_id', articleId) .order('created_at', {ascending: false}); const comments = data || []; if (countEl) countEl.textContent = comments.length; renderComments(comments); } function renderComments(comments) { const el = document.getElementById('comments-list'); if (!el) return; if (!comments.length) { el.innerHTML = '
Henüz yorum yok. İlk yorumu siz yapın! 💬
'; return; } el.innerHTML = comments.map(c => { const initial = (c.username||'?')[0].toUpperCase(); const badge = c.plan === 'premium' ? `⭐ Premium` : `Üye`; return `
${initial}
${esc(c.username)} ${badge} ${fmtD(c.created_at)}
${esc(c.content)}
`; }).join(''); } // ---- SUBMIT COMMENT ---- async function submitComment() { const input = document.getElementById('comment-input'); const content = input?.value.trim(); if (!content) return; const art = currentArticle; if (!art) return; const articleId = getArticleId(art); if (isDemoMode()) { const user = getDemoUser(); if (!user || user.plan !== 'premium') return; const comment = { id: Date.now().toString(), article_id: articleId, username: user.username || user.email, plan: 'premium', content, likes: 0, created_at: new Date().toISOString() }; saveDemoComment(articleId, comment); input.value = ''; updateCharCount(input); loadComments(art); return; } if (!currentUser || !currentProfile) return; const btn = document.querySelector('.submit-comment'); if (btn) btn.disabled = true; await supabase.from('comments').insert({ article_id: articleId, user_id: currentUser.id, username: currentProfile.username, plan: currentProfile.plan, content }); input.value = ''; if (btn) btn.disabled = false; loadComments(art); } async function likeComment(id, btn) { const span = btn.querySelector('span'); const cur = parseInt(span.textContent) || 0; btn.classList.toggle('liked'); span.textContent = btn.classList.contains('liked') ? cur + 1 : cur - 1; if (!isDemoMode() && supabase) { await supabase.from('comments').update({likes: parseInt(span.textContent)}).eq('id', id); } } // ---- PAYMENT ---- function openPayment() { document.getElementById('payment-overlay').classList.add('open'); } function closePayment() { document.getElementById('payment-overlay').classList.remove('open'); } function selectPlan(el) { document.querySelectorAll('.plan-card').forEach(c => c.classList.remove('selected')); el.classList.add('selected'); selectedPlan = el.dataset.plan; } function startPayment() { // iyzico veya başka bir ödeme entegrasyonu buraya gelir // Demo modda direkt premium yap: if (isDemoMode()) { const u = getDemoUser(); if (u) { u.plan = 'premium'; setDemoUser(u); // localStorage'daki kullanıcı kaydını da güncelle const stored = localStorage.getItem('ha_user_' + u.email); if (stored) { const s = JSON.parse(stored); s.plan = 'premium'; localStorage.setItem('ha_user_' + u.email, JSON.stringify(s)); } closePayment(); renderAuthArea(); alert('🎉 Premium üyeliğiniz aktif edildi! Artık yorum yapabilirsiniz.'); } return; } // Gerçek iyzico entegrasyonu: // window.location.href = '/odeme?plan=' + selectedPlan; alert('Ödeme sayfası yakında aktif olacak!\niyzico entegrasyonu için backend gereklidir.'); } // ---- MODAL OVERRIDE: yorum yükle ---- const _origOpenModal = openModal; // openModal zaten tanımlı, override edelim const __openModal = openModal; window.openModal = function(art) { __openModal(art); setTimeout(() => { initSupabase(); renderAuthArea(); loadComments(art); }, 50); }; updDate();setInterval(updDate,30000); loadAll();