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
1. satır: 1. satır:
// ==========================================================================
// ==========================================================================
// KIZILBASHICA JAVASCRIPT DOSYASI (ALINTI & OKU DÖNGÜSÜ)
// KIZILBASHICA JAVASCRIPT DOSYASI (ALINTI, YAZARLAR & ULTRA OPTİMİZE SÜRÜM)
// ==========================================================================
// ==========================================================================


$(document).ready(function() {
(function ($, mw) {
    'use strict';
 
    // Ortak ayarlar
     var ns = mw.config.get('wgNamespaceNumber');
     var ns = mw.config.get('wgNamespaceNumber');
     var pageName = mw.config.get('wgTitle');
     var pageName = mw.config.get('wgTitle');
     var baseUrl = mw.config.get('wgArticlePath') || '/wiki/$1';
     var baseUrl = mw.config.get('wgArticlePath') || '/wiki/$1';
   
     var urlParams = new URLSearchParams(window.location.search);
     var urlParams = new URLSearchParams(window.location.search);
     var isEditing = urlParams.has('action') && (urlParams.get('action') === 'edit' || urlParams.get('action') === 'submit');
     var isEditing = urlParams.has('action') && (urlParams.get('action') === 'edit' || urlParams.get('action') === 'submit');
    var cdxClasses = 'citizen-cdx-button--size-large cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet';


     // 1. NORMAL SÖZLÜK MADDELERİNDE (`ns === 0`) YAPILACAK DEĞİŞİKLİKLER
    // ----------------------------------------------------------------------
    if (ns === 0) {
     // 1. ALINTI / OKU BUTON DÖNÜŞTÜRMELERİ VE DİNAMİK İKONLAR
        // 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:"]');
    mw.hook('wikipage.content').add(function () {
        if (mainTalkLink.length > 0) {
       
            var citePageUrl = baseUrl.replace('$1', 'Kaynak:' + encodeURIComponent(pageName));
        // --- Normal Maddeler (ns: 0) ---
           
        if (ns === 0) {
            mainTalkLink.replaceWith(
            var mainTalkLink = $('#ca-talk a, .citizen-section-talk a, a[href*="Tart%C4%B1%C5%9Fma:"], a[href*="Talk:"]');
                '<a href="' + citePageUrl + '" class="citizen-cdx-button--size-large cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet">' +
            if (mainTalkLink.length > 0 && !mainTalkLink.hasClass('kb-processed')) {
                '<span class="citizen-ui-icon mw-ui-icon-quotes mw-ui-icon-wikimedia-quotes"></span> ' +
                var citePageUrl = baseUrl.replace('$1', 'Kaynak:' + encodeURIComponent(pageName));
                '<span>Alıntı</span>' +
                mainTalkLink.addClass('kb-processed').replaceWith(
                '</a>'
                    '<a href="' + citePageUrl + '" class="' + cdxClasses + '">' +
            );
                    '<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
            // Yapışkan Başlık (Sticky Header) için Alıntı Dönüşümü
        var sourceTalkLink = $('#ca-talk a, .citizen-section-talk a, a[href*="Kaynak_tart%C4%B1%C5%9Fma:"]');
            var stickyTalkBtn = document.getElementById('ca-talk-sticky-header');
        if (sourceTalkLink.length > 0) {
            if (stickyTalkBtn && !stickyTalkBtn.classList.contains('kb-processed')) {
            var mainPageUrl = baseUrl.replace('$1', encodeURIComponent(pageName));
                stickyTalkBtn.classList.add('kb-processed');
           
                var iconSpan = stickyTalkBtn.querySelector('.citizen-ui-icon');
            sourceTalkLink.replaceWith(
                 if (iconSpan) iconSpan.className = 'citizen-ui-icon mw-ui-icon-quotes mw-ui-icon-wikimedia-quotes';
                '<a href="' + mainPageUrl + '" class="citizen-cdx-button--size-large cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet">' +
                 var textSpan = stickyTalkBtn.querySelector('span:not(.citizen-ui-icon)');
                 '<span class="citizen-ui-icon mw-ui-icon-eye mw-ui-icon-wikimedia-eye"></span> ' +
                 if (textSpan) textSpan.textContent = 'Alıntı';
                 '<span>Oku</span>' +
             }
                 '</a>'
             );
         }
         }


         // Sadece okuma modundaysak ve sayfa veritabanında yoksa şablonu render et
         // --- Kaynak Ad Alanı (ns: 3000) ---
         if (!isEditing) {
         if (ns === 3000) {
             if ($('.noarticletext').length > 0 || $('.mw-noarticletext').length > 0 || mw.config.get('wgArticleId') === 0) {
             var sourceTalkLink = $('#ca-talk a, .citizen-section-talk a, a[href*="Kaynak_tart%C4%B1%C5%9Fma:"]');
               
            if (sourceTalkLink.length > 0 && !sourceTalkLink.hasClass('kb-processed')) {
                $('.noarticletext, .mw-noarticletext').hide();
                var mainPageUrl = baseUrl.replace('$1', encodeURIComponent(pageName));
                sourceTalkLink.addClass('kb-processed').replaceWith(
                    '<a href="' + mainPageUrl + '" class="' + cdxClasses + '">' +
                    '<span class="citizen-ui-icon mw-ui-icon-eye mw-ui-icon-wikimedia-eye"></span> ' +
                    '<span>Oku</span>' +
                    '</a>'
                );
            }
 
            // Kaynak Arayüzü Şablonu Render Etme (Boş Sayfalarda)
            if (!isEditing && (mw.config.get('wgArticleId') === 0 || $('.noarticletext, .mw-noarticletext').length > 0)) {
                 var container = $('#mw-content-text');
                 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>');
                 if (container.length && !container.hasClass('kb-loaded')) {
               
                    container.addClass('kb-loaded');
                $.ajax({
                    $('.noarticletext, .mw-noarticletext').hide();
                    url: mw.util.wikiScript('api'),
                    container.html('<div id="loading-cite" style="color: var(--kb-text-sub); font-style: italic; padding: 10px;">Kaynak arayüzü yükleniyor...</div>');
                    data: {
 
                        action: 'parse',
                    $.ajax({
                        text: '{{AlıntıYap|madde=' + pageName + '}}',
                        url: mw.util.wikiScript('api'),
                        contentmodel: 'wikitext',
                        data: { action: 'parse', text: '{{AlıntıYap|madde=' + pageName + '}}', contentmodel: 'wikitext', format: 'json' },
                        format: 'json'
                        success: function (data) {
                    },
                            if (data && data.parse && data.parse.text) {
                    success: function(data) {
                                container.html(data.parse.text['*']);
                        if (data && data.parse && data.parse.text) {
                            }
                            container.html(data.parse.text['*']);
                         }
                         }
                    });
                }
            }
        }
        // --- Yan Menü (Drawer) İkonları ---
        var drawerIcons = {
            'n-Dizin': 'mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet',
            'n-Kısaltmalar': 'mw-ui-icon-recentChanges mw-ui-icon-wikimedia-recentChanges',
            'n-Kılavuz': 'mw-ui-icon-article mw-ui-icon-wikimedia-article',
            'n-Ansiklopedi-hakkında': 'mw-ui-icon-infoFilled mw-ui-icon-wikimedia-infoFilled'
        };
        Object.keys(drawerIcons).forEach(function (id) {
            var item = document.getElementById(id);
            if (item && !item.querySelector('.citizen-ui-icon')) {
                var link = item.querySelector('a');
                if (link) {
                    var icon = document.createElement('span');
                    icon.className = 'citizen-ui-icon ' + drawerIcons[id];
                    link.insertBefore(icon, link.firstChild);
                }
            }
        });
        // --- Yazarlar Kartı Oluşturma ---
        var $yazarKaynagi = $('#sayfa-yazarlari');
        var $target = $('#citizen-sidebar-lastmod');
        if ($yazarKaynagi.length && $target.length && !$('#citizen-sidebar-yazarlar').length) {
            var satirlar = $yazarKaynagi.html().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';
                var $yazarKarti = $('<nav>', { 'id': 'citizen-sidebar-yazarlar', 'class': 'citizen-menu mw-portlet' });
                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 $yazarElementi;
                    if ($orijinalLink.length > 0) {
                        $yazarElementi = $orijinalLink.clone().addClass(cdxClasses);
                        var metin = $yazarElementi.text();
                        $yazarElementi.html('')
                            .append($('<span>', { 'class': 'citizen-ui-icon mw-ui-icon-userAvatar mw-ui-icon-wikimedia-userAvatar' }))
                            .append($('<span>').text(metin));
                    } else {
                        $yazarElementi = $('<a>', {
                            'class': cdxClasses,
                            'style': 'cursor: default; pointer-events: none; color: inherit;'
                        })
                        .append($('<span>', { 'class': 'citizen-ui-icon mw-ui-icon-userAvatar mw-ui-icon-wikimedia-userAvatar' }))
                        .append($('<span>').html(yazar));
                     }
                     }
                    $li.append($yazarElementi);
                    $ul.append($li);
                 });
                 });
                $yazarIcerik.append($ul);
                $yazarKarti.append($yazarBaslik).append($yazarIcerik);
                $target.after($yazarKarti);
             }
             }
         }
         }
     }
     });
});
 
    // ----------------------------------------------------------------------
    // 2. DİNAMİK GÖZLEMCİ (KOMUT PALETİ TÜRKÇELEŞTİRME & ZAR BUTONU)
    // ----------------------------------------------------------------------
    var observer = new MutationObserver(function (mutations) {
        // Sonsuz döngüyü engellemek için gözlemciyi geçici olarak durduruyoruz
        observer.disconnect();


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


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


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


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


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


             const note = palette.querySelector('[class*="footer-note"]');
             var note = palette.querySelector('[class*="footer-note"]');
             if (note) {
             if (note) {
                 if (note.innerHTML.includes('all commands')) note.innerHTML = 'Tüm komutlar için <code>/</code> yazın';
                 if (note.innerHTML.includes('all commands')) note.innerHTML = 'Tüm komutlar için <code>/</code> yazın';
114. satır: 201. satır:
             }
             }


             palette.querySelectorAll('[class*="keyboard-hint"]').forEach(hint => {
             palette.querySelectorAll('[class*="keyboard-hint"]').forEach(function (hint) {
                 const label = hint.querySelector('[class*="label"]');
                 var label = hint.querySelector('[class*="label"]');
                 if (label) {
                 if (label) {
                     var txt = label.textContent.trim();
                     var txt = label.textContent.trim();
125. satır: 212. satır:
             });
             });
         }
         }
        // Değişiklikler bittikten sonra gözlemciyi yeniden başlatıyoruz
        observeContext();
     });
     });
});
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)
     function observeContext() {
    var kilavuz = document.getElementById('n-Kılavuz');
         observer.observe(document.body, { childList: true, subtree: true });
    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 () {
     $(document).ready(function () {
         var $yazarKaynagi = $('#sayfa-yazarlari');
         observeContext();
        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';
           
            var $yazarKarti = $('<nav>', { 'id': 'citizen-sidebar-yazarlar', 'class': 'citizen-menu mw-portlet' });
            var $yazarBaslik = $('<div>', { 'class': 'citizen-menu__heading', 'text': baslikMetni });
            var $yazarIcerik = $('<div>', { 'class': 'citizen-menu__content' });
            var $ul = $('<ul>', { 'class': 'citizen-menu__content-list' });
 
            var cdxClasses = 'citizen-cdx-button--size-large cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet';
 
            gecerliYazarlar.forEach(function(yazar) {
                var $li = $('<li>', { 'class': 'mw-list-item' });
                var $tempDiv = $('<div>').html(yazar);
                var $orijinalLink = $tempDiv.find('a').first();
                var $yazarElementi;
 
                if ($orijinalLink.length > 0) {
                    $yazarElementi = $orijinalLink.clone().addClass(cdxClasses);
                    var metin = $yazarElementi.text();
                    $yazarElementi.html('')
                        .append($('<span>', { 'class': 'citizen-ui-icon mw-ui-icon-userAvatar mw-ui-icon-wikimedia-userAvatar' }))
                        .append($('<span>').text(metin));
                } else {
                    $yazarElementi = $('<a>', {
                        'class': cdxClasses,
                        'style': 'cursor: default; pointer-events: none; color: inherit;'
                    })
                    .append($('<span>', { 'class': 'citizen-ui-icon mw-ui-icon-userAvatar mw-ui-icon-wikimedia-userAvatar' }))
                    .append($('<span>').html(yazar));
                }
               
                $li.append($yazarElementi);
                $ul.append($li);
            });
 
            $yazarIcerik.append($ul);
            $yazarKarti.append($yazarBaslik).append($yazarIcerik);


            // Sadece son değişiklikler alanının altına ekleme yapar, yoksa hiçbir şey yapmaz
})(jQuery, mediaWiki);
            var $target = $('#citizen-sidebar-lastmod');
            if ($target.length) {
                $target.after($yazarKarti);
            }
        }
    });
});
///YUKARISINI DEĞİŞTİR/////////////////////////////////
//
///////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////

12.32, 9 Temmuz 2026 tarihindeki hâli

// ==========================================================================
// KIZILBASHICA JAVASCRIPT DOSYASI (ALINTI, YAZARLAR & ULTRA OPTİMİZE SÜRÜM)
// ==========================================================================

(function ($, mw) {
    'use strict';

    // Ortak ayarlar
    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');
    var cdxClasses = 'citizen-cdx-button--size-large cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet';

    // ----------------------------------------------------------------------
    // 1. ALINTI / OKU BUTON DÖNÜŞTÜRMELERİ VE DİNAMİK İKONLAR
    // ----------------------------------------------------------------------
    mw.hook('wikipage.content').add(function () {
        
        // --- Normal Maddeler (ns: 0) ---
        if (ns === 0) {
            var mainTalkLink = $('#ca-talk a, .citizen-section-talk a, a[href*="Tart%C4%B1%C5%9Fma:"], a[href*="Talk:"]');
            if (mainTalkLink.length > 0 && !mainTalkLink.hasClass('kb-processed')) {
                var citePageUrl = baseUrl.replace('$1', 'Kaynak:' + encodeURIComponent(pageName));
                mainTalkLink.addClass('kb-processed').replaceWith(
                    '<a href="' + citePageUrl + '" class="' + cdxClasses + '">' +
                    '<span class="citizen-ui-icon mw-ui-icon-quotes mw-ui-icon-wikimedia-quotes"></span> ' +
                    '<span>Alıntı</span>' +
                    '</a>'
                );
            }

            // Yapışkan Başlık (Sticky Header) için Alıntı Dönüşümü
            var stickyTalkBtn = document.getElementById('ca-talk-sticky-header');
            if (stickyTalkBtn && !stickyTalkBtn.classList.contains('kb-processed')) {
                stickyTalkBtn.classList.add('kb-processed');
                var iconSpan = stickyTalkBtn.querySelector('.citizen-ui-icon');
                if (iconSpan) iconSpan.className = 'citizen-ui-icon mw-ui-icon-quotes mw-ui-icon-wikimedia-quotes';
                var textSpan = stickyTalkBtn.querySelector('span:not(.citizen-ui-icon)');
                if (textSpan) textSpan.textContent = 'Alıntı';
            }
        }

        // --- Kaynak Ad Alanı (ns: 3000) ---
        if (ns === 3000) {
            var sourceTalkLink = $('#ca-talk a, .citizen-section-talk a, a[href*="Kaynak_tart%C4%B1%C5%9Fma:"]');
            if (sourceTalkLink.length > 0 && !sourceTalkLink.hasClass('kb-processed')) {
                var mainPageUrl = baseUrl.replace('$1', encodeURIComponent(pageName));
                sourceTalkLink.addClass('kb-processed').replaceWith(
                    '<a href="' + mainPageUrl + '" class="' + cdxClasses + '">' +
                    '<span class="citizen-ui-icon mw-ui-icon-eye mw-ui-icon-wikimedia-eye"></span> ' +
                    '<span>Oku</span>' +
                    '</a>'
                );
            }

            // Kaynak Arayüzü Şablonu Render Etme (Boş Sayfalarda)
            if (!isEditing && (mw.config.get('wgArticleId') === 0 || $('.noarticletext, .mw-noarticletext').length > 0)) {
                var container = $('#mw-content-text');
                if (container.length && !container.hasClass('kb-loaded')) {
                    container.addClass('kb-loaded');
                    $('.noarticletext, .mw-noarticletext').hide();
                    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['*']);
                            }
                        }
                    });
                }
            }
        }

        // --- Yan Menü (Drawer) İkonları ---
        var drawerIcons = {
            'n-Dizin': 'mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet',
            'n-Kısaltmalar': 'mw-ui-icon-recentChanges mw-ui-icon-wikimedia-recentChanges',
            'n-Kılavuz': 'mw-ui-icon-article mw-ui-icon-wikimedia-article',
            'n-Ansiklopedi-hakkında': 'mw-ui-icon-infoFilled mw-ui-icon-wikimedia-infoFilled'
        };

        Object.keys(drawerIcons).forEach(function (id) {
            var item = document.getElementById(id);
            if (item && !item.querySelector('.citizen-ui-icon')) {
                var link = item.querySelector('a');
                if (link) {
                    var icon = document.createElement('span');
                    icon.className = 'citizen-ui-icon ' + drawerIcons[id];
                    link.insertBefore(icon, link.firstChild);
                }
            }
        });

        // --- Yazarlar Kartı Oluşturma ---
        var $yazarKaynagi = $('#sayfa-yazarlari');
        var $target = $('#citizen-sidebar-lastmod');
        if ($yazarKaynagi.length && $target.length && !$('#citizen-sidebar-yazarlar').length) {
            var satirlar = $yazarKaynagi.html().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';
                var $yazarKarti = $('<nav>', { 'id': 'citizen-sidebar-yazarlar', 'class': 'citizen-menu mw-portlet' });
                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 $yazarElementi;

                    if ($orijinalLink.length > 0) {
                        $yazarElementi = $orijinalLink.clone().addClass(cdxClasses);
                        var metin = $yazarElementi.text();
                        $yazarElementi.html('')
                            .append($('<span>', { 'class': 'citizen-ui-icon mw-ui-icon-userAvatar mw-ui-icon-wikimedia-userAvatar' }))
                            .append($('<span>').text(metin));
                    } else {
                        $yazarElementi = $('<a>', {
                            'class': cdxClasses,
                            'style': 'cursor: default; pointer-events: none; color: inherit;'
                        })
                        .append($('<span>', { 'class': 'citizen-ui-icon mw-ui-icon-userAvatar mw-ui-icon-wikimedia-userAvatar' }))
                        .append($('<span>').html(yazar));
                    }
                    $li.append($yazarElementi);
                    $ul.append($li);
                });

                $yazarIcerik.append($ul);
                $yazarKarti.append($yazarBaslik).append($yazarIcerik);
                $target.after($yazarKarti);
            }
        }
    });

    // ----------------------------------------------------------------------
    // 2. DİNAMİK GÖZLEMCİ (KOMUT PALETİ TÜRKÇELEŞTİRME & ZAR BUTONU)
    // ----------------------------------------------------------------------
    var observer = new MutationObserver(function (mutations) {
        // Sonsuz döngüyü engellemek için gözlemciyi geçici olarak durduruyoruz
        observer.disconnect();

        // Son Değişiklikler başlığı sabitleme
        document.querySelectorAll('.citizen-menu__heading').forEach(function (heading) {
            if (heading.textContent.trim() === 'Last modified') {
                heading.textContent = 'Son değişiklikler';
            }
        });

        var palette = document.querySelector('.citizen-command-palette');
        if (palette) {
            var inputArea = palette.querySelector('.citizen-command-palette-header__input-area');
            if (inputArea && !palette.querySelector('#citizen-custom-random-btn')) {
                var 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 = baseUrl.replace('$1', 'Özel:Rastgele');
                });
                inputArea.appendChild(randomBtn);
            }

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

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

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

            var 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(function (hint) {
                var 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';
                }
            });
        }

        // Değişiklikler bittikten sonra gözlemciyi yeniden başlatıyoruz
        observeContext();
    });

    function observeContext() {
        observer.observe(document.body, { childList: true, subtree: true });
    }

    $(document).ready(function () {
        observeContext();
    });

})(jQuery, mediaWiki);