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

MediaWiki arayüz sayfası
12.32, 9 Temmuz 2026 tarihinde C. Karakuş (mesaj | katkılar) tarafından oluşturulmuş 631 numaralı sürüm

Not: Yayımladıktan sonra değişiklikleri görmeniz için tarayıcınızın önbelleğini temizlemeniz gerekebilir.

  • Firefox / Safari: Shift tuşuna basılıyken Yeniden Yükle'ye tıklayın ya da Ctrl-F5 ya da Ctrl-R tıklayın (Mac için ⌘-R)
  • Google Chrome: Ctrl-Shift-R'ye basın. (Mac için ⌘-Shift-R)
  • Edge: Ctrl basılıyken Yenile'ye tıklayın ya da Ctrl-F5'e basın.
// ==========================================================================
// 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);