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
Değişiklik özeti yok
212. satır: 212. satır:


         if (gecerliYazarlar.length > 0) {
         if (gecerliYazarlar.length > 0) {
             var baslikMetni = gecerliYazarlar.length > 1 ? 'Yazarlar' : 'Yazar';
             var baslikMetni = gecerliYazarlar.length > 1 ? 'YAZARLAR' : 'YAZAR';
              
              
             // Citizen temasının kart yapısını (citizen-menu) birebir taklit ediyoruz
             // 1. Mevcut "Son Değişiklikler" bloğunu hedef alıyoruz
             // Bu sayede sol çizgi hizalamasını otomatik olarak "İçindekiler" ile eşitler.
            var $targetMenu = $('#citizen-sidebar-lastmod');
            var $yazarKarti = $('<div>', {  
             if ($targetMenu.length) {
                'id': 'citizen-sidebar-yazarlar',
               
                'class': 'citizen-menu',
                // Temanın kendi içeriğini barındıran alt div (.citizen-menu__content)
                'style': 'margin-top: 1.5rem; margin-bottom: 1.5rem;'
                var $menuContent = $targetMenu.find('.citizen-menu__content');
            });
               
           
                if ($menuContent.length) {
            // Başlık: Temanın orijinal .citizen-menu__heading sınıfını veriyoruz.
                    // 2. Araya estetik bir mesafe koymak için bir ayırıcı div oluşturuyoruz
            // Böylece yazı tipi, rengi, boyutu ve büyük harf düzeni "Son değişiklikler" ile birebir aynı olur.
                    var $yazarWrapper = $('<div>', {
            var $yazarBaslik = $('<div>', {  
                        'style': 'margin-top: 1.5rem; padding-top: 0px;'
                'class': 'citizen-menu__heading',  
                    });
                'text': baslikMetni
 
            });
                    // 3. Başlık ekliyoruz (Tamamen orijinal temanın yazı tipi, rengi ve boyutuyla)
           
                    var $yazarBaslik = $('<div>', {
            // İçerik Alanı: Temanın kendi alt sınıfını kullanarak içerideki metni sağa/sola taşırırız
                        'text': baslikMetni,
            var $yazarIcerik = $('<div>', {
                        'style': 'font-size: var(--font-size-sm, 0.75em); font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--color-base--subtle, #72777d); margin-bottom: 0.75rem; padding-left: 0.25rem;'
                'class': 'citizen-menu__content',
                    });
                'style': 'padding: 0 !important; margin: 0 !important;'
 
            });
                    // 4. Yazarlar Listesi (Temanın .citizen-menu__content-list sınıfını kullanarak sol hizayı garantiliyoruz)
                    var $ul = $('<ul>', {
                        'class': 'citizen-menu__content-list',
                        'style': 'margin: 0 !important; padding: 0 !important; list-style: none !important;'
                    });
 
                    gecerliYazarlar.forEach(function(yazar) {
                        // Her bir satırı temanın orijinal li yapısına büründürüyoruz
                        var $li = $('<li>', {
                            'class': 'mw-list-item',
                            'style': 'display: flex; align-items: center; gap: 8px; padding: 6px 4px !important; margin: 0 !important; font-size: var(--font-size-md, 0.95em); line-height: 1.3; color: var(--color-base, #e6e6e6);'
                        });
 
                        // Bağımsız ve net SVG İkon
                        var $ikon = $(`
                            <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 20 20" style="flex-shrink: 0; fill: currentColor; color: var(--color-base--subtle, #72777d); opacity: 0.95;">
                                <path d="M10 2a4 4 0 1 0 0 8 4 4 0 0 0 0-8zm-7 14c0-2.76 3.14-5 7-5s7 2.24 7 5v2H3v2z"/>
                            </svg>
                        `);


            // Yazarlar Listesi
                        var $isim = $('<span>', {
            var $ul = $('<ul>', {
                            'style': 'display: inline-block;'
                'style': 'list-style: none !important; padding: 0 !important; margin: 0 !important;'
                        }).html(yazar);
            });


            gecerliYazarlar.forEach(function(yazar) {
                        // Link renk uyumluluğu
                // Her satırın hizasını "12 dakika önce" yazısıyla milimetrik eşitlemek için padding-left ekledik
                         $isim.find('a').css({
                var $yazarSatiri = $('<li>', {
                            'color': 'inherit',
                    'style': 'display: flex; align-items: center; gap: 8px; padding: 6px 0 6px 12px !important; font-size: var(--font-size-md, 0.95em); line-height: 1.2; color: var(--color-base, #e6e6e6);'
                            'text-decoration': 'none'
                });
                        });
               
                // SVG İkon (Rengi yazı rengiyle dinamik eşitlenir)
                var $ikon = $(`
                    <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 20 20" style="flex-shrink: 0; fill: currentColor; opacity: 0.8;">
                         <path d="M10 2a4 4 0 1 0 0 8 4 4 0 0 0 0-8zm-7 14c0-2.76 3.14-5 7-5s7 2.24 7 5v2H3v2z"/>
                    </svg>
                `);
               
                var $isim = $('<span>', {
                    'style': 'display: inline-block;'
                }).html(yazar);
               
                // Eğer isim link içeriyorsa mavi olmasını engelle, temayla bütünleştir
                $isim.find('a').css({
                    'color': 'inherit',
                    'text-decoration': 'none'
                });
               
                $yazarSatiri.append($ikon).append($isim);
                $ul.append($yazarSatiri);
            });


            $yazarIcerik.append($ul);
                        $li.append($ikon).append($isim);
            $yazarKarti.append($yazarBaslik).append($yazarIcerik);
                        $ul.append($li);
                    });


            // "Son değişiklikler" alanının hemen altına yerleştir
                    // Yapıyı birleştirip "Son değişiklikler"in tam içine, mevcut listenin altına gömüyoruz
            if ($('#citizen-sidebar-lastmod').length) {
                    $yazarWrapper.append($yazarBaslik).append($ul);
                $('#citizen-sidebar-lastmod').after($yazarKarti);
                    $menuContent.append($yazarWrapper);
            } else if ($('.citizen-page-sidebar').length) {
                }
                $('.citizen-page-sidebar').prepend($yazarKarti);
             }
             }
         }
         }
     });
     });
});
});

22.06, 8 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);
        }
    }
});
///////////////////////////////////////////////////
///////////////////////////////////////////////////
mw.loader.using(['mediawiki.util']).then(function () {
    $(document).ready(function () {
        var $yazarKaynagi = $('#sayfa-yazarlari');
        if (!$yazarKaynagi.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';
            
            // 1. Mevcut "Son Değişiklikler" bloğunu hedef alıyoruz
            var $targetMenu = $('#citizen-sidebar-lastmod');
            if ($targetMenu.length) {
                
                // Temanın kendi içeriğini barındıran alt div (.citizen-menu__content)
                var $menuContent = $targetMenu.find('.citizen-menu__content');
                
                if ($menuContent.length) {
                    // 2. Araya estetik bir mesafe koymak için bir ayırıcı div oluşturuyoruz
                    var $yazarWrapper = $('<div>', {
                        'style': 'margin-top: 1.5rem; padding-top: 0px;'
                    });

                    // 3. Başlık ekliyoruz (Tamamen orijinal temanın yazı tipi, rengi ve boyutuyla)
                    var $yazarBaslik = $('<div>', {
                        'text': baslikMetni,
                        'style': 'font-size: var(--font-size-sm, 0.75em); font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--color-base--subtle, #72777d); margin-bottom: 0.75rem; padding-left: 0.25rem;'
                    });

                    // 4. Yazarlar Listesi (Temanın .citizen-menu__content-list sınıfını kullanarak sol hizayı garantiliyoruz)
                    var $ul = $('<ul>', {
                        'class': 'citizen-menu__content-list',
                        'style': 'margin: 0 !important; padding: 0 !important; list-style: none !important;'
                    });

                    gecerliYazarlar.forEach(function(yazar) {
                        // Her bir satırı temanın orijinal li yapısına büründürüyoruz
                        var $li = $('<li>', {
                            'class': 'mw-list-item',
                            'style': 'display: flex; align-items: center; gap: 8px; padding: 6px 4px !important; margin: 0 !important; font-size: var(--font-size-md, 0.95em); line-height: 1.3; color: var(--color-base, #e6e6e6);'
                        });

                        // Bağımsız ve net SVG İkon
                        var $ikon = $(`
                            <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 20 20" style="flex-shrink: 0; fill: currentColor; color: var(--color-base--subtle, #72777d); opacity: 0.95;">
                                <path d="M10 2a4 4 0 1 0 0 8 4 4 0 0 0 0-8zm-7 14c0-2.76 3.14-5 7-5s7 2.24 7 5v2H3v2z"/>
                            </svg>
                        `);

                        var $isim = $('<span>', {
                            'style': 'display: inline-block;'
                        }).html(yazar);

                        // Link renk uyumluluğu
                        $isim.find('a').css({
                            'color': 'inherit',
                            'text-decoration': 'none'
                        });

                        $li.append($ikon).append($isim);
                        $ul.append($li);
                    });

                    // Yapıyı birleştirip "Son değişiklikler"in tam içine, mevcut listenin altına gömüyoruz
                    $yazarWrapper.append($yazarBaslik).append($ul);
                    $menuContent.append($yazarWrapper);
                }
            }
        }
    });
});