🔍 Context Menu Debug Raporu

Muzibu.com.tr - Sağ Tuş Menüsü Render Sorunu Analizi

📅 5 Aralık 2025 🎯 Tenant: muzibu.com (ID: 1001)

❌ PROBLEM

Context menu (sağ tuş menüsü) çalışmıyor çünkü x-on:contextmenu directive'leri HTML'de render edilmiyor!

  • home.blade.php dosyasında kod VAR (3 adet)
  • Blade compile test'i BAŞARILI (compiled view'da VAR)
  • Canlı sitede HTML içinde YOK (0 adet)
  • Tarayıcıda document.querySelector test'i: false

🧪 TEST SONUÇLARI

✅ Blade Dosyası

$ grep -c "x-on:contextmenu" home.blade.php
3 adet bulundu

Kaynak kodda directive'ler VAR

✅ Blade Compile

$ php artisan tinker
> Compiled blade test
3 adet x-on:contextmenu bulundu

Blade compiler çalışıyor

❌ Canlı HTML (curl)

$ curl https://muzibu.com/ | grep -c "x-on:contextmenu"
0 adet bulundu

HTTP response'da YOK!

❌ Tarayıcı DOM

// Console test
document.querySelector('.spa-content-wrapper')
  .innerHTML.includes('x-on:contextmenu')
  
Result: false

Browser DOM'da YOK!

✅ Statik HTML Test

$ curl https://muzibu.com/test-xon.html | grep -c "x-on:"
2 adet bulundu

Statik HTML çalışıyor, sorun Blade'de!

❌ Tinker Render Test

$ php artisan tinker
> HomeController render test
x-on:contextmenu count: 0

Şifre sayfası render ediliyor!

Cookie auth problemi - şifre sayfası gösteriyor

🔧 DENENENeler

1. addslashes() → json_encode() Değişikliği

Blade rendering'de addslashes() sorun çıkarabileceği için json_encode() ile değiştirdik.

Sonuç: ÇALIŞMADI

2. Multi-line → Single-line Format

Çok satırlı attribute'leri tek satıra çektik (Blade render sorunu olabilir diye).

Sonuç: 2 adet render edildi ama diğerleri hala 0

3. Cache Temizleme (Nuclear)

Tüm cache'ler temizlendi: view, config, route, response, OPcache, compiled views.

Sonuç: ÇALIŞMADI

4. Git Reset + Yeniden Deneme

Dosyayı git'ten reset edip sıfırdan başladık.

Sonuç: ÇALIŞMADI

5. Middleware/Sanitizer Kontrolü

Middleware ve HTML purifier araması yapıldı.

Sonuç: Bulunmadı - sorun middleware'de değil

💡 HİPOTEZLER

❓ Blade Syntax Hatası

Çok satırlı attribute içinde `{{ }}` kullanımı sorun olabilir.

Olasılık: YÜKSEK

❓ Cookie Auth Sorunu

Şifre koruması nedeniyle farklı HTML render ediliyor olabilir.

Olasılık: ORTA

❓ Blade Compiler Bug

Laravel/Livewire Blade compiler'ında `x-on:` directive'leriyle ilgili bug.

Olasılık: DÜŞÜK

❓ Runtime Error (Silent)

Blade rendering sırasında hata oluyor ama log'a düşmüyor.

Olasılık: ORTA

🎯 ÖNERİLEN ADIMLAR

1

ALTERNATİF YOL: Partial Kullan

Context menu'yu ayrı bir partial component'e taşı:

{{-- resources/views/themes/muzibu/partials/playlist-card.blade.php --}}
<div class="..." 
     x-on:contextmenu.prevent.stop="...">
    ...
</div>

{{-- home.blade.php --}}
@include('themes.muzibu.partials.playlist-card', ['playlist' => $playlist])

Avantaj: Blade rendering izole edilir, debug kolay

2

JavaScript İle Event Binding

Alpine yerine native JavaScript ile event ekle:

// DOM ready sonrası
document.querySelectorAll('.playlist-card').forEach(el => {
    el.addEventListener('contextmenu', (e) => {
        e.preventDefault();
        Alpine.store('contextMenu').openContextMenu(e, 'playlist', {
            id: el.dataset.playlistId,
            title: el.dataset.playlistTitle,
            ...
        });
    });
});

Avantaj: Blade'den tamamen bağımsız

3

Livewire Component Kullan

Home page'i Livewire component'e çevir:

// app/Livewire/HomePage.php
class HomePage extends Component {
    public function render() {
        return view('livewire.home-page');
    }
}

// Livewire component'lerde Alpine directive'leri daha stabil

Avantaj: Livewire + Alpine daha uyumlu