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:
/* Ana Sayfa Son Değişiklikler Feed Motoru - Tıklayınız İbareli Sürüm */
// Citizen Komut Paleti Eksiksiz Türkçeleştirme
mw.loader.using(['mediawiki.api', 'mediawiki.util'], function () {
    $(document).ready(function () {
        var $feedContainer = $('#wiki-recent-js-feed');
        if (!$feedContainer.length) return;
 
        var api = new mw.Api();
       
        // Sadece ana maddeleri (Namespace 0) listeler
        api.get({
            action: 'query',
            list: 'recentchanges',
            rcnamespace: 0,
            rclimit: 5,
            rctype: 'edit|new',
            format: 'json'
        }).done(function (data) {
            var items = data.query.recentchanges;
            if (!items || items.length === 0) {
                $feedContainer.html('<div style="color:#666; padding:20px; text-align:center;">Henüz bir değişiklik bulunmuyor.</div>');
                return;
            }
 
            var titles = items.map(function (item) { return item.title; });
 
            // Sayfa görsellerini çek
            api.get({
                action: 'query',
                titles: titles.join('|'),
                prop: 'pageimages',
                piprop: 'thumbnail',
                pithumbsize: 160,
                format: 'json'
            }).done(function (imgData) {
                var pages = imgData.query.pages;
                var imageMap = {};
               
                for (var pageId in pages) {
                    var p = pages[pageId];
                    if (p.thumbnail && p.thumbnail.source) {
                        imageMap[p.title] = p.thumbnail.source;
                    }
                }
 
                var htmlOutput = '';
               
                items.forEach(function (item) {
                    var pageTitle = item.title;
                    var pageLink = mw.util.getUrl(pageTitle);
                    var imgUrl = imageMap[pageTitle];
 
                    htmlOutput += '<div class="wiki-recent-row">' +
                        '<div class="wiki-recent-text">' +
                            '<div class="wiki-recent-title"><a href="' + pageLink + '">' + pageTitle + '</a></div>' +
                            '<div class="wiki-recent-subtext"><a href="' + pageLink + '">Okumak için tıklayınız</a></div>' +
                        '</div>' +
                        '<div class="wiki-recent-img-wrapper">';
                   
                    if (imgUrl) {
                        htmlOutput += '<a href="' + pageLink + '"><img src="' + imgUrl + '" alt="' + pageTitle + '"></a>';
                    } else {
                        htmlOutput += '<a href="' + pageLink + '"><div class="wiki-recent-empty-thumb"></div></a>';
                    }
                   
                    htmlOutput += '</div></div>';
                });
 
                $feedContainer.html(htmlOutput);
            });
        }).fail(function () {
            $feedContainer.html('<div style="color:#888; padding:20px; text-align:center;">Akış yüklenirken bir sorun oluştu.</div>');
        });
    });
});
/* Arama Paleti Her Açıldığında Rastgele Sayfa Butonunu Yeniden Oluşturan Kesin Çözüm */
$( function () {
// Butonu ekleyen fonksiyon
function injectRandomButton() {
var $inputArea = $( '.citizen-command-palette-header__input-area' );
if ( $inputArea.length && !$( '#citizen-custom-random-btn' ).length ) {
var randomBtn = $( '<a>' )
.attr( {
id: 'citizen-custom-random-btn',
href: '/m/Özel:Rastgele',
title: 'Rastgele Sayfa Getir'
} )
.html( '<span class="citizen-ui-icon mw-ui-icon-die mw-ui-icon-wikimedia-die"></span>' );
 
$inputArea.append( randomBtn );
}
}
 
// Sayfa ilk yüklendiğinde eğer palet açıksa ekle
injectRandomButton();
 
// Vue.js element silme/ekleme hareketlerini (DOM değişikliklerini) sürekli izleyen gözlemci
var observer = new MutationObserver( function ( mutations ) {
mutations.forEach( function ( mutation ) {
if ( mutation.addedNodes.length ) {
injectRandomButton();
}
} );
} );
 
// Bütün sayfayı ve dinamik açılan pencereleri izlemeye al
observer.observe( document.body, {
childList: true,
subtree: true
} );
} );
/////////////
///  ///  ///
///  ///  ///
///  ///  ///
// Citizen Komut Paleti Tam Türkçeleştirme (Kesin Sonuç)
const observer = new MutationObserver((mutations) => {
const observer = new MutationObserver((mutations) => {
     mutations.forEach((mutation) => {
     mutations.forEach((mutation) => {
119. satır: 5. satır:
          
          
         if (palette) {
         if (palette) {
             // 1. "Recent" Başlığı İçin Derin Arama (Sınıf bağımsız, tüm elemanları tara)
             // 1. "Recent" Başlığı İçin Derin Arama
             const allElements = palette.querySelectorAll('*');
             const allElements = palette.querySelectorAll('*');
             allElements.forEach(el => {
             allElements.forEach(el => {
                // Eğer elemanın doğrudan kendi metni "Recent" ise ve alt elemanları yoksa değiştir
                 if (el.childNodes.length === 1 && el.textContent.trim() === 'Recent') {
                 if (el.childNodes.length === 1 && el.textContent.trim() === 'Recent') {
                     el.textContent = 'Son Aramalar';
                     el.textContent = 'Son Aramalar';
128. satır: 13. satır:
             });
             });


             // 2. Sağ taraftaki "Page" ve "Action" Rozetleri
             // 2. Sağ taraftaki "Page" ve "Action" Rozetleri (İnatçı Yapı İçin Kesin Çözüm)
             const badges = palette.querySelectorAll('[class*="badge"], [class*="item-badge"]');
             const badges = palette.querySelectorAll('[class*="badge"], [class*="item-badge"], .citizen-command-palette__item-badge');
             badges.forEach(badge => {
             badges.forEach(badge => {
                // İç elemanları temizleyip sadece saf metne odaklanarak değiştiriyoruz
                 const text = badge.textContent.trim();
                 const text = badge.textContent.trim();
                 if (text === 'Page') badge.textContent = 'Sayfa';
                 if (text === 'Page') {
                 if (text === 'Action') badge.textContent = 'Eylem';
                    badge.innerHTML = 'Sayfa';
                 } else if (text === 'Action') {
                    badge.innerHTML = 'Eylem';
                }
             });
             });


144. satır: 33. satır:
             });
             });


             // 4. Sol alttaki Alt Not Alanı
             // 4. Sol alttaki Değişken Alt Not Alanları (Tüm Varyasyonlar)
             const note = palette.querySelector('[class*="footer-note"]');
             const note = palette.querySelector('[class*="footer-note"]');
             if (note) {
             if (note) {
                 if (note.innerHTML.includes('for all commands') || note.innerHTML.includes('all commands')) {
                 const noteHTML = note.innerHTML;
                if (noteHTML.includes('for all commands') || noteHTML.includes('all commands')) {
                     note.innerHTML = 'Tüm komutlar için <code>/</code> yazın';
                     note.innerHTML = 'Tüm komutlar için <code>/</code> yazın';
                 } else if (note.innerHTML.includes('for namespace') || note.innerHTML.includes('namespace')) {
                 } else if (noteHTML.includes('for namespace') || noteHTML.includes('namespace')) {
                     note.innerHTML = 'Ad alanlarında aramak için <code>:</code> yazın';
                     note.innerHTML = 'Ad alanlarında aramak için <code>:</code> yazın';
                } else if (noteHTML.includes('to search for users') || noteHTML.includes('for users')) {
                    note.innerHTML = 'Kullanıcıları aramak için <code>@</code> yazın';
                } else if (noteHTML.includes('to search for templates') || noteHTML.includes('for templates')) {
                    note.innerHTML = 'Şablonları aramak için <code>{{</code> yazın';
                 }
                 }
             }
             }

10.47, 7 Temmuz 2026 tarihindeki hâli

// Citizen Komut Paleti Eksiksiz Türkçeleştirme
const observer = new MutationObserver((mutations) => {
    mutations.forEach((mutation) => {
        const palette = document.querySelector('.citizen-command-palette');
        
        if (palette) {
            // 1. "Recent" Başlığı İçin Derin Arama
            const allElements = palette.querySelectorAll('*');
            allElements.forEach(el => {
                if (el.childNodes.length === 1 && el.textContent.trim() === 'Recent') {
                    el.textContent = 'Son Aramalar';
                }
            });

            // 2. Sağ taraftaki "Page" ve "Action" Rozetleri (İnatçı Yapı İçin Kesin Çözüm)
            const badges = palette.querySelectorAll('[class*="badge"], [class*="item-badge"], .citizen-command-palette__item-badge');
            badges.forEach(badge => {
                // İç elemanları temizleyip sadece saf metne odaklanarak değiştiriyoruz
                const text = badge.textContent.trim();
                if (text === 'Page') {
                    badge.innerHTML = 'Sayfa';
                } else if (text === 'Action') {
                    badge.innerHTML = 'Eylem';
                }
            });

            // 3. "Create or edit page" Açıklamaları
            const descriptions = palette.querySelectorAll('[class*="description"], [class*="item-description"]');
            descriptions.forEach(desc => {
                if (desc.textContent.trim() === 'Create or edit page') {
                    desc.textContent = 'Sayfa oluştur veya düzenle';
                }
            });

            // 4. Sol alttaki Değişken Alt Not Alanları (Tüm Varyasyonlar)
            const note = palette.querySelector('[class*="footer-note"]');
            if (note) {
                const noteHTML = note.innerHTML;
                if (noteHTML.includes('for all commands') || noteHTML.includes('all commands')) {
                    note.innerHTML = 'Tüm komutlar için <code>/</code> yazın';
                } else if (noteHTML.includes('for namespace') || noteHTML.includes('namespace')) {
                    note.innerHTML = 'Ad alanlarında aramak için <code>:</code> yazın';
                } else if (noteHTML.includes('to search for users') || noteHTML.includes('for users')) {
                    note.innerHTML = 'Kullanıcıları aramak için <code>@</code> yazın';
                } else if (noteHTML.includes('to search for templates') || noteHTML.includes('for templates')) {
                    note.innerHTML = 'Şablonları aramak için <code>{{</code> yazın';
                }
            }

            // 5. Alt taraftaki Tuş İpuçları
            const hints = palette.querySelectorAll('[class*="keyboard-hint"]');
            hints.forEach(hint => {
                const label = hint.querySelector('[class*="label"]');
                if (label) {
                    const text = label.textContent.trim();
                    if (text === 'Select') label.textContent = 'Seç';
                    else if (text === 'Navigate') label.textContent = 'Gezin';
                    else if (text === 'Actions') label.textContent = 'Eylemler';
                    else if (text === 'Close') label.textContent = 'Kapat';
                }
            });
        }
    });
});

// Sayfayı izlemeye al
observer.observe(document.body, { childList: true, subtree: true });