Menüyü değiştir
Toggle preferences menu
Kişisel menüyü aç / kapat
Oturum açık değil
Your IP address will be publicly visible if you make any edits.

MediaWiki:Common.js: Revizyonlar arasındaki fark

MediaWiki arayüz sayfası
Değişiklik özeti yok
Etiket: Geri alındı
Değişiklik özeti yok
Etiket: Elle geri alma
256. satır: 256. satır:
});
});
// ----------------------------------------------------------------------
// ----------------------------------------------------------------------
// KESİN ÇÖZÜM: CSS DOSTU, GİZLENMEYEN & SÜREKLİ GÖRÜNEN TEMİZ TOC
 
// AÇILIR KUTU OLMAYAN - SADECE MADDELERİN PUNTOSU KÜÇÜLTÜLMÜŞ & STICKY KOD
 
// ----------------------------------------------------------------------
// ----------------------------------------------------------------------
mw.hook('wikipage.content').add(function () {
mw.hook('wikipage.content').add(function () {
     var $orijinalToc = $('#mw-panel-toc');  
 
    var $icIcerik = $orijinalToc.find('.citizen-menu__card-content');
     var $orijinalToc = $('#citizen-toc');
 
     var $target = $('#citizen-sidebar-yazarlar').length ? $('#citizen-sidebar-yazarlar') : $('#citizen-sidebar-lastmod');
     var $target = $('#citizen-sidebar-yazarlar').length ? $('#citizen-sidebar-yazarlar') : $('#citizen-sidebar-lastmod');
   
 
     // Eğer iç içerik varsa ve yeni düz menümüz henüz oluşturulmadıysa çalıştır
 
     if ($icIcerik.length && $target.length && !$('#kb-temiz-toc').length) {
 
     // Eğer orijinal TOC varsa ve bizim düz menü henüz eklenmediyse çalıştır
 
     if ($orijinalToc.length && $target.length && !$('#kb-duz-toc-baslik').length) {
 
          
          
        // 1. ADIM: Masaüstü ve Mobil için ekran kurallarını enjekte ediyoruz
        // Bu kurallar sayesinde mobilde asla kaybolmaz ve sayfanın en üstünde sabit kalır
        var cssStilleri = `
            /* MASAÜSTÜ: Sağ taraftaki barda sabit kalır ve sayfayla kayar */
            @media screen and (min-width: 1120px) {
                #kb-temiz-toc {
                    position: sticky !important;
                    top: 5rem !important;
                    z-index: 10 !important;
                    display: block !important;
                    width: 100% !important;
                }
            }
           
            /* MOBİL: Sayfanın en sonuna gitmez, makale başında sürekli görünür */
            @media screen and (max-width: 1119px) {
                #kb-temiz-toc {
                    position: relative !important;
                    top: 0 !important;
                    display: block !important;
                    width: 100% !important;
                    margin: 1.5rem 0 !important;
                    padding: 1rem !important;
                    background: var(--background-color-neutral-subtle, #1a1a1a) !important;
                    border-radius: 8px !important;
                    border: 1px solid var(--border-color-base, #333) !important;
                }
            }
        `;
        $('<style>').text(cssStilleri).appendTo('head');


         // 2. ADIM: Maddelerin puntosunu küçült ve link arka planlarını temizle
         // ORİJİNAL ADIM 1: Orijinal yapıdan sadece saf metin başlığını alıp yeni bir düz div oluşturuyoruz
         $icIcerik.find('.citizen-toc-link').css({
 
             'font-size': '0.8rem',
        var $yeniBaslik = $('<div>', {
 
            'id': 'kb-duz-toc-baslik',
 
            'class': 'citizen-menu__heading',
 
            'text': $orijinalToc.find('.citizen-menu__heading').text().trim()
 
        });
 
 
 
        // ORİJİNAL ADIM 2: Orijinal yapıdan canlı içerik listesini (mavi çizgili alanı) söküp alıyoruz
 
        var $yeniIcerik = $orijinalToc.find('.citizen-toc-contents');
 
 
 
        // ORİJİNAL ADIM 3: Sadece maddelerin (linklerin) puntosunu küçültüyoruz
 
         $yeniIcerik.find('.citizen-toc-link').css({
 
             'font-size': '0.8rem', // Maddelerin puntosunu küçülten ayar
 
             'background': 'transparent',
             'background': 'transparent',
             'background-color': 'transparent',
             'background-color': 'transparent',
             'box-shadow': 'none',
             'box-shadow': 'none',
             'color': 'inherit',
             'color': 'inherit',
             'text-decoration': 'none',
             'text-decoration': 'none',
             'display': 'block'
             'display': 'block'
        });
        // YENİ EKLEME: Parçaların dağılmasını önleyen ve sayfayı takip etmesini sağlayan tekil yapışkan kutu
        var $stickyKapsayici = $('<div>', { 'id': 'kb-sticky-sidebar-toc' }).css({
            'position': 'sticky',
            'top': '5rem', // Sayfa kaydırıldığında üst menünün altında kalacağı boşluk payı
            'z-index': '10'
         });
         });


        // 3. ADIM: Sadece iç içeriği barındıran tamamen yeni ve bağımsız div'i oluşturuyoruz
        var $yeniTemizKutu = $('<div>', { 'id': 'kb-temiz-toc' }).append($icIcerik);


        // 4. ADIM: Yerleşim Ayarı
        // Masaüstü düzeni için sağ taraftaki Yazarlar'ın hemen altına ekliyoruz
        $target.after($yeniTemizKutu);


         // Mobilde de görünmesi için ana gövdenin (makalenin) en üstüne bir kopyasını klonlayıp gizleme/gösterme kontrolü yapıyoruz
         // ORİJİNAL ADIM 4 (GÜNCELLENDİ): Parçaları dağıtmadan, sticky kapsayıcının içine sırayla koyup Yazarlar'ın altına ekliyoruz
         var $mobilKopya = $yeniTemizKutu.clone(true).attr('id', 'kb-temiz-toc-mobil');
 
       
         $stickyKapsayici.append($yeniBaslik).append($yeniIcerik);
        // Mobil kopyanın sadece mobilde görünmesi için ufak bir CSS ekliyoruz
 
         $('<style>').text(`
         $target.after($stickyKapsayici);
            @media screen and (min-width: 1120px) { #kb-temiz-toc-mobil { display: none !important; } }
 
            @media screen and (max-width: 1119px) { #kb-temiz-toc { display: none !important; } }
 
        `).appendTo('head');


         // Mobil kopyayı makale içeriğinin (#bodyContent veya .mw-parser-output) en başına koyuyoruz
         // ORİJİNAL ADIM 5: Temanın o tıklanıp açılan eski belalı kutusunu (`#citizen-toc`) tamamen imha ediyoruz
        var $makaleBaslangici = $('.mw-parser-output').first();
        if ($makaleBaslangici.length) {
            $makaleBaslangici.prepend($mobilKopya);
        }


        // Temanın o sorun çıkaran, mobilde gizlenen eski dış nav kabuğunu tamamen imha et
         $orijinalToc.remove();
         $orijinalToc.remove();
     }
     }
});
});

23.00, 9 Temmuz 2026 tarihindeki hâli

// ==========================================================================
// KIZILBASHICA JAVASCRIPT DOSYASI (ALINTI & OKU DÖNGÜSÜ)
// ==========================================================================

$(document).ready(function() {
    var ns = mw.config.get('wgNamespaceNumber');
    var pageName = mw.config.get('wgTitle');
    var baseUrl = mw.config.get('wgArticlePath') || '/wiki/$1';
    
    var urlParams = new URLSearchParams(window.location.search);
    var isEditing = urlParams.has('action') && (urlParams.get('action') === 'edit' || urlParams.get('action') === 'submit');

    // 1. NORMAL SÖZLÜK MADDELERİNDE (`ns === 0`) YAPILACAK DEĞİŞİKLİKLER
    if (ns === 0) {
        // Eski "Tartışma" butonunu bulup "Alıntı" butonuna dönüştürüyoruz
        var mainTalkLink = $('#ca-talk a, .citizen-section-talk a, a[href*="Tart%C4%B1%C5%9Fma:"], a[href*="Talk:"]');
        if (mainTalkLink.length > 0) {
            var citePageUrl = baseUrl.replace('$1', 'Kaynak:' + encodeURIComponent(pageName));
            
            mainTalkLink.replaceWith(
                '<a href="' + citePageUrl + '" class="citizen-cdx-button--size-large cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet">' +
                '<span class="citizen-ui-icon mw-ui-icon-quotes mw-ui-icon-wikimedia-quotes"></span> ' +
                '<span>Alıntı</span>' +
                '</a>'
            );
        }
    }
    
    // 2. KAYNAK AD ALANINDA (`ns === 3000`) YAPILACAK DEĞİŞİKLİKLER
    if (ns === 3000) {
        // Sağ üstteki butonu ana maddeye dönen göz ikonlu "Oku" butonu yapıyoruz
        var sourceTalkLink = $('#ca-talk a, .citizen-section-talk a, a[href*="Kaynak_tart%C4%B1%C5%9Fma:"]');
        if (sourceTalkLink.length > 0) {
            var mainPageUrl = baseUrl.replace('$1', encodeURIComponent(pageName));
            
            sourceTalkLink.replaceWith(
                '<a href="' + mainPageUrl + '" class="citizen-cdx-button--size-large cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet">' +
                '<span class="citizen-ui-icon mw-ui-icon-eye mw-ui-icon-wikimedia-eye"></span> ' +
                '<span>Oku</span>' +
                '</a>'
            );
        }

        // Sadece okuma modundaysak ve sayfa veritabanında yoksa şablonu render et
        if (!isEditing) {
            if ($('.noarticletext').length > 0 || $('.mw-noarticletext').length > 0 || mw.config.get('wgArticleId') === 0) {
                
                $('.noarticletext, .mw-noarticletext').hide();
                var container = $('#mw-content-text');
                container.html('<div id="loading-cite" style="color: var(--kb-text-sub); font-style: italic; padding: 10px;">Kaynak arayüzü yükleniyor...</div>');
                
                $.ajax({
                    url: mw.util.wikiScript('api'),
                    data: {
                        action: 'parse',
                        text: '{{AlıntıYap|madde=' + pageName + '}}',
                        contentmodel: 'wikitext',
                        format: 'json'
                    },
                    success: function(data) {
                        if (data && data.parse && data.parse.text) {
                            container.html(data.parse.text['*']);
                        }
                    }
                });
            }
        }
    }
});

// 3. DİNAMİK ELEMENT GÖZLEMCİSİ (KOMUT PALETİ TÜRKÇELEŞTİRME & ZAR BUTONU)
const observer = new MutationObserver((mutations) => {
    mutations.forEach((mutation) => {
        const menuHeadings = document.querySelectorAll('.citizen-menu__heading');
        menuHeadings.forEach(heading => {
            if (heading.textContent.trim() === 'Last modified') heading.textContent = 'Son değişiklikler';
        });

        const palette = document.querySelector('.citizen-command-palette');
        if (palette) {
            const inputArea = palette.querySelector('.citizen-command-palette-header__input-area');
            const customBtnCheck = palette.querySelector('#citizen-custom-random-btn');
            
            if (inputArea && !customBtnCheck) {
                const randomBtn = document.createElement('div');
                randomBtn.id = 'citizen-custom-random-btn';
                randomBtn.title = 'Rastgele Sayfa Getir';
                randomBtn.innerHTML = '<span class="citizen-ui-icon mw-ui-icon-wikimedia-die"></span>';
                randomBtn.addEventListener('click', function() {
                    window.location.href = (mw.config.get('wgArticlePath') || '/wiki/$1').replace('$1', 'Özel:Rastgele');
                });
                inputArea.appendChild(randomBtn);
            }

            palette.querySelectorAll('*').forEach(el => {
                if (el.childNodes.length === 1 && el.textContent.trim() === 'Recent') el.textContent = 'Son Aramalar';
            });

            palette.querySelectorAll('[class*="badge"], [class*="item-badge"]').forEach(badge => {
                if (badge.textContent.trim() === 'Page') badge.innerHTML = 'Sayfa';
                else if (badge.textContent.trim() === 'Action') badge.innerHTML = 'Eylem';
            });

            palette.querySelectorAll('[class*="description"]').forEach(desc => {
                if (desc.textContent.trim() === 'Create or edit page') desc.textContent = 'Sayfa oluştur veya düzenle';
            });

            const note = palette.querySelector('[class*="footer-note"]');
            if (note) {
                if (note.innerHTML.includes('all commands')) note.innerHTML = 'Tüm komutlar için <code>/</code> yazın';
                else if (note.innerHTML.includes('namespace')) note.innerHTML = 'Ad alanlarında aramak için <code>:</code> yazın';
                else if (note.innerHTML.includes('for users')) note.innerHTML = 'Kullanıcıları aramak için <code>@</code> yazın';
                else if (note.innerHTML.includes('for templates')) note.innerHTML = 'Şablonları aramak için <code>{{</code> yazın';
            }

            palette.querySelectorAll('[class*="keyboard-hint"]').forEach(hint => {
                const label = hint.querySelector('[class*="label"]');
                if (label) {
                    var txt = label.textContent.trim();
                    if (txt === 'Select') label.textContent = 'Seç';
                    else if (txt === 'Navigate') label.textContent = 'Gezin';
                    else if (txt === 'Actions') label.textContent = 'Eylemler';
                    else if (txt === 'Close') label.textContent = 'Kapat';
                }
            });
        }
    });
});
observer.observe(document.body, { childList: true, subtree: true });
/* Yapışkan başlıktaki (Sticky Header) Tartışma butonunu Alıntı butonuyla değiştirir */
mw.hook('wikipage.content').add(function() {
    var stickyTalkBtn = document.getElementById('ca-talk-sticky-header');
    if (stickyTalkBtn) {
        // Eski speechBubbles ikon sınıflarını silip yerine quotes ikon sınıflarını ekler
        var iconSpan = stickyTalkBtn.querySelector('.citizen-ui-icon');
        if (iconSpan) {
            iconSpan.className = 'citizen-ui-icon mw-ui-icon-quotes mw-ui-icon-wikimedia-quotes';
        }
        
        // "Oku" veya "Tartışma" yazan metni "Alıntı" olarak günceller
        var textSpan = stickyTalkBtn.querySelector('span:not(.citizen-ui-icon)');
        if (textSpan) {
            textSpan.textContent = 'Alıntı';
        }
    }
});
/* Yan menü (Drawer) elemanlarına dinamik ikon ekleme kodu */
mw.hook('wikipage.content').add(function() {
    
    // 1. Dizin İkonu (Liste simgesi ekler)
    var dizinMaddesi = document.getElementById('n-Dizin');
    if (dizinMaddesi && !dizinMaddesi.querySelector('.citizen-ui-icon')) {
        var link = dizinMaddesi.querySelector('a');
        if (link) {
            var icon = document.createElement('span');
            icon.className = 'citizen-ui-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet';
            link.insertBefore(icon, link.firstChild);
        }
    }

    // 2. Kısaltmalar İkonu (Sitede kesin aktif olan Son Değişiklikler/Saat simgesini ekler)
    var kisaltmalar = document.getElementById('n-Kısaltmalar');
    if (kisaltmalar && !kisaltmalar.querySelector('.citizen-ui-icon')) {
        var link = kisaltmalar.querySelector('a');
        if (link) {
            var icon = document.createElement('span');
            // Sitede çalıştığı kesinleşen recentChanges sınıflarını bağladık
            icon.className = 'citizen-ui-icon mw-ui-icon-recentChanges mw-ui-icon-wikimedia-recentChanges';
            link.insertBefore(icon, link.firstChild);
        }
    }

    // 3. Kılavuz İkonu (Madde/Belge simgesi ekler)
    var kilavuz = document.getElementById('n-Kılavuz');
    if (kilavuz && !kilavuz.querySelector('.citizen-ui-icon')) {
        var link = kilavuz.querySelector('a');
        if (link) {
            var icon = document.createElement('span');
            icon.className = 'citizen-ui-icon mw-ui-icon-article mw-ui-icon-wikimedia-article';
            link.insertBefore(icon, link.firstChild);
        }
    }

    // 4. Ansiklopedi Hakkında İkonu (Bilgi/Info simgesi ekler)
    var hakkinda = document.getElementById('n-Ansiklopedi-hakkında');
    if (hakkinda && !hakkinda.querySelector('.citizen-ui-icon')) {
        var link = hakkinda.querySelector('a');
        if (link) {
            var icon = document.createElement('span');
            icon.className = 'citizen-ui-icon mw-ui-icon-infoFilled mw-ui-icon-wikimedia-infoFilled';
            link.insertBefore(icon, link.firstChild);
        }
    }
});
///////////////////////////////////////////////////
// --- Yazarlar Kartı Oluşturma Fonksiyonu ---
mw.hook('wikipage.content').add(function () {
    var $yazarKaynagi = $('#sayfa-yazarlari');
    var $target = $('#citizen-sidebar-lastmod');
    
    // Eğer kaynak element veya hedef kenar çubuğu yoksa ya da kart zaten eklenmişse durdur
    if (!$yazarKaynagi.length || !$target.length || $('#citizen-sidebar-yazarlar').length) {
        return;
    }

    var hamMetin = $yazarKaynagi.html();
    var satirlar = hamMetin.split(/<br\s*\/?>|\n/i);
    var gecerliYazarlar = [];

    satirlar.forEach(function (satir) {
        var duzMetin = satir.replace(/<\/?[^>]+(>|$)/g, "").trim();
        if (duzMetin !== "") {
            gecerliYazarlar.push(satir.trim());
        }
    });

    if (gecerliYazarlar.length > 0) {
        var baslikMetni = gecerliYazarlar.length > 1 ? 'Yazarlar' : 'Yazar';
        
        // Tamamen "Last modified" kartının HTML mimarisiyle birebir aynı yapı
        var $yazarKarti = $('<nav>', { 'id': 'citizen-sidebar-yazarlar', 'class': 'citizen-menu' });
        var $yazarBaslik = $('<div>', { 'class': 'citizen-menu__heading', 'text': baslikMetni });
        var $yazarIcerik = $('<div>', { 'class': 'citizen-menu__content' });
        var $ul = $('<ul>', { 'class': 'citizen-menu__content-list' });

        gecerliYazarlar.forEach(function (yazar) {
            var $li = $('<li>', { 'class': 'mw-list-item' });
            var $tempDiv = $('<div>').html(yazar);
            var $orijinalLink = $tempDiv.find('a').first();
            var $linkElementi;

            if ($orijinalLink.length > 0) {
                // Eğer linkli yazarsa elementini klonla ve içini temizle
                $linkElementi = $orijinalLink.clone();
                var metin = $linkElementi.text();
                $linkElementi.html('')
                    .append($('<span>', { 'class': 'citizen-ui-icon mw-ui-icon-history mw-ui-icon-wikimedia-userAvatar' }))
                    .append($('<span>').text(metin));
            } else {
                // Düz metin ise link gibi davranan ama tıklanmayan temiz yapı
                $linkElementi = $('<a>', { 'href': 'javascript:void(0);', 'style': 'cursor: default; color: inherit;' })
                    .append($('<span>', { 'class': 'citizen-ui-icon mw-ui-icon-history mw-ui-icon-wikimedia-userAvatar' }))
                    .append($('<span>').html(yazar));
            }

            $li.append($linkElementi);
            $ul.append($li);
        });

        $yazarIcerik.append($ul);
        $yazarKarti.append($yazarBaslik).append($yazarIcerik);
        
        // Tam olarak Last modified kutusunun altına bırakıyoruz
        $target.after($yazarKarti);
    }
});
// ----------------------------------------------------------------------

// AÇILIR KUTU OLMAYAN - SADECE MADDELERİN PUNTOSU KÜÇÜLTÜLMÜŞ & STICKY KOD

// ----------------------------------------------------------------------

mw.hook('wikipage.content').add(function () {

    var $orijinalToc = $('#citizen-toc');

    var $target = $('#citizen-sidebar-yazarlar').length ? $('#citizen-sidebar-yazarlar') : $('#citizen-sidebar-lastmod');



    // Eğer orijinal TOC varsa ve bizim düz menü henüz eklenmediyse çalıştır

    if ($orijinalToc.length && $target.length && !$('#kb-duz-toc-baslik').length) {

        

        // ORİJİNAL ADIM 1: Orijinal yapıdan sadece saf metin başlığını alıp yeni bir düz div oluşturuyoruz

        var $yeniBaslik = $('<div>', {

            'id': 'kb-duz-toc-baslik',

            'class': 'citizen-menu__heading',

            'text': $orijinalToc.find('.citizen-menu__heading').text().trim()

        });



        // ORİJİNAL ADIM 2: Orijinal yapıdan canlı içerik listesini (mavi çizgili alanı) söküp alıyoruz

        var $yeniIcerik = $orijinalToc.find('.citizen-toc-contents');



        // ORİJİNAL ADIM 3: Sadece maddelerin (linklerin) puntosunu küçültüyoruz

        $yeniIcerik.find('.citizen-toc-link').css({

            'font-size': '0.8rem', // Maddelerin puntosunu küçülten ayar

            'background': 'transparent',

            'background-color': 'transparent',

            'box-shadow': 'none',

            'color': 'inherit',

            'text-decoration': 'none',

            'display': 'block'

        });



        // YENİ EKLEME: Parçaların dağılmasını önleyen ve sayfayı takip etmesini sağlayan tekil yapışkan kutu

        var $stickyKapsayici = $('<div>', { 'id': 'kb-sticky-sidebar-toc' }).css({

            'position': 'sticky',

            'top': '5rem', // Sayfa kaydırıldığında üst menünün altında kalacağı boşluk payı

            'z-index': '10'

        });



        // ORİJİNAL ADIM 4 (GÜNCELLENDİ): Parçaları dağıtmadan, sticky kapsayıcının içine sırayla koyup Yazarlar'ın altına ekliyoruz

        $stickyKapsayici.append($yeniBaslik).append($yeniIcerik);

        $target.after($stickyKapsayici);



        // ORİJİNAL ADIM 5: Temanın o tıklanıp açılan eski belalı kutusunu (`#citizen-toc`) tamamen imha ediyoruz

        $orijinalToc.remove();

    }

});