MediaWiki:Common.js: Revizyonlar arasındaki fark
MediaWiki arayüz sayfası
More actions
C. Karakuş (mesaj | katkılar) Değişiklik özeti yok |
C. Karakuş (mesaj | katkılar) Değişiklik özeti yok |
||
| 393. satır: | 393. satır: | ||
}; | }; | ||
})(); | })(); | ||
///// | |||
//// | |||
//// | |||
/// | |||
//// | |||
//// | |||
//// | |||
// Leaflet.js kütüphanesini dinamik olarak yükleyen fonksiyon | |||
function loadLeaflet(callback) { | |||
if (window.L) { | |||
callback(); | |||
return; | |||
} | |||
// CSS Yükle | |||
var link = document.createElement('link'); | |||
link.rel = 'stylesheet'; | |||
link.href = 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.css'; | |||
document.head.appendChild(link); | |||
// JS Yükle | |||
var script = document.createElement('script'); | |||
script.src = 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.js'; | |||
script.onload = callback; | |||
document.head.appendChild(script); | |||
} | |||
// Sayfa yüklendiğinde harita elementi varsa çalıştır | |||
$(function() { | |||
if ($('#leaflet-wiki-map').length === 0) return; | |||
loadLeaflet(function() { | |||
// Haritayı oluştur (Anadolu odaklı) | |||
var map = L.map('leaflet-wiki-map').setView([39.9, 35.2], 6); | |||
// CartoDB Dark Matter (Karanlık Tema) katmanını ekle | |||
L.tileLayer('https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png', { | |||
attribution: '© OpenStreetMap, © CARTO' | |||
}).addTo(map); | |||
// Kırmızı dairesel marker ikonu | |||
var redIcon = L.divIcon({ | |||
className: 'custom-map-marker', | |||
iconSize: [12, 12], | |||
iconAnchor: [6, 6] | |||
}); | |||
// HTML içindeki gizli veri elementlerini oku (Şablonla beslenecek) | |||
$('.map-marker-data').each(function() { | |||
var lat = parseFloat($(this).data('lat')); | |||
var lng = parseFloat($(this).data('lng')); | |||
var title = $(this).data('title'); | |||
var link = $(this).data('link'); | |||
if (!isNaN(lat) && !isNaN(lng)) { | |||
var popupContent = '<b style="color: #ffffff;">' + title + '</b><br>' + | |||
'<a href="' + link + '" style="color: #b30000; font-weight: bold;">Maddeyi Oku →</a>'; | |||
L.marker([lat, lng], {icon: redIcon}) | |||
.addTo(map) | |||
.bindPopup(popupContent); | |||
} | |||
}); | |||
}); | |||
}); | |||
06.42, 15 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);
}
});
// ----------------------------------------------------------------------
// SENİN ORİJİNAL KODUN - MAVİ ÇİZGİ VE MOBİL DÜZELTMELİ %100 JS SÜRÜMÜ
// ----------------------------------------------------------------------
mw.hook('wikipage.content').add(function () {
var $orijinalToc = $('#citizen-toc').length ? $('#citizen-toc') : $('#mw-panel-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) {
// KRİTİK EKLEME: Sadece JS kullanarak mobil ve sticky yerleşim CSS'ini enjekte ediyoruz
var cssStilleri = `
/* Masaüstünde senin oluşturduğun yeni kutuyu sticky yapıyoruz */
@media screen and (min-width: 1120px) {
#kb-sticky-sidebar-toc {
position: sticky !important;
top: 5rem !important;
z-index: 10 !important;
display: block !important;
}
}
/* Mobilde yan sütun alta kaydığı için senin yeni kutunu gizliyoruz, orijinal eski kutu (sol alttaki buton) çalışsın diye */
@media screen and (max-width: 1119px) {
#kb-sticky-sidebar-toc {
display: none !important;
}
#citizen-toc, #mw-panel-toc {
display: block !important;
visibility: visible !important;
opacity: 1 !important;
}
}
`;
$('<style>').text(cssStilleri).appendTo('head');
// 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: Canlı içerik listesini söküp almak yerine KOPYALIYORUZ (.clone(true)).
// Böylece temanın içindeki mavi çizgi tetikleyicileri (event handlers) yaşamaya devam ediyor.
var $yeniIcerik = $orijinalToc.find('.citizen-toc-contents').clone(true);
// 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' });
// ORİJİNAL ADIM 4: 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 (DÜZELTİLDİ): .remove() ile imha etmek yerine sadece masaüstünde görünmez yapıyoruz.
// Böylece arka planda çalışmaya devam ediyor ve mavi çizgi animasyonları kırılmıyor.
$('<style>').text('@media screen and (min-width: 1120px) { #citizen-toc, #mw-panel-toc { display: none !important; } }').appendTo('head');
}
});
//////////////////////////////
// ----------------------------------------------------------------------
// %100 KESİN ÇÖZÜM: EN SONDAKİ INATÇI "ALINTI" YAZISINI DA SİLEN MOTOR
// ----------------------------------------------------------------------
(function () {
window.onbeforeprint = function () {
// 1. Genel arayüz elemanlarını ve buton gruplarını gizle
$('.citizen-page-actions, #citizen-share, #p-associated-pages, #ca-talk, #citizen-page-more-dropdown').hide();
$('.printfooter, .post-content-footer, .citizen-footer__links, .catlinks, #catlinks, .page-tools').hide();
// "İlgili Maddeler" başlığını ve altındaki her şeyi tamamen temizle
$('#İlgili_Maddeler').parent().hide();
$('#İlgili_Maddeler').parent().nextAll().hide();
// KESİN TEMİZLİK: "Alıntı", "Share", "sitesinden" geçen tüm HTML elementlerini (a, span, li, button) bulup gizle
$('a, span, li, button, summary').filter(function() {
var text = $(this).text().trim().toLowerCase();
return text === 'alıntı' || text.includes('share') || text.includes('sitesinden') || text.includes('more actions');
}).hide();
// Link bazlı rota temizliği
$('a[href*="K%C4%B1z%C4%B1lba%C5%9F"], a[href*="Kaynak:"]').hide();
// 2. Yazarlar Listesini Oluşturma Alanı
if (!$('#baski-temiz-yazarlar').length) {
var yazarIsimleri = [];
$('#citizen-sidebar-yazarlar').find('a').each(function () {
var txt = $(this).text().trim();
if (txt && txt !== 'Yazarlar' && !txt.includes('hakkında') && txt.length > 2 && txt.length < 35) {
if (yazarIsimleri.indexOf(txt) === -1) {
yazarIsimleri.push(txt);
}
}
});
if (yazarIsimleri.length > 0) {
var $yazarKutusu = $('<div>', { id: 'baski-temiz-yazarlar' });
$yazarKutusu.append('<h3>Yazarlar</h3>');
var $liste = $('<ul>');
$.each(yazarIsimleri, function (i, isim) {
$liste.append('<li>' + isim + '</li>');
});
$yazarKutusu.append($liste);
// Boşluk kalmayacak şekilde doğrudan makale sonuna ekle
$('.mw-parser-output').first().append($yazarKutusu);
}
}
};
window.onafterprint = function () {
// Baskı bittiğinde her şeyi normal site düzeni için geri aç
$('.citizen-page-actions, #citizen-share, #p-associated-pages, #ca-talk, #citizen-page-more-dropdown').show();
$('.printfooter, .post-content-footer, .citizen-footer__links, .catlinks, #catlinks, .page-tools').show();
$('#İlgili_Maddeler').parent().show();
$('#İlgili_Maddeler').parent().nextAll().show();
$('a, span, li, button, summary').filter(function() {
var text = $(this).text().trim().toLowerCase();
return text === 'alıntı' || text.includes('share') || text.includes('sitesinden') || text.includes('more actions');
}).show();
$('a[href*="K%C4%B1z%C4%B1lba%C5%9F"], a[href*="Kaynak:"]').show();
$('#baski-temiz-yazarlar').remove();
};
})();
/////
////
////
///
////
////
////
// Leaflet.js kütüphanesini dinamik olarak yükleyen fonksiyon
function loadLeaflet(callback) {
if (window.L) {
callback();
return;
}
// CSS Yükle
var link = document.createElement('link');
link.rel = 'stylesheet';
link.href = 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.css';
document.head.appendChild(link);
// JS Yükle
var script = document.createElement('script');
script.src = 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.js';
script.onload = callback;
document.head.appendChild(script);
}
// Sayfa yüklendiğinde harita elementi varsa çalıştır
$(function() {
if ($('#leaflet-wiki-map').length === 0) return;
loadLeaflet(function() {
// Haritayı oluştur (Anadolu odaklı)
var map = L.map('leaflet-wiki-map').setView([39.9, 35.2], 6);
// CartoDB Dark Matter (Karanlık Tema) katmanını ekle
L.tileLayer('https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png', {
attribution: '© OpenStreetMap, © CARTO'
}).addTo(map);
// Kırmızı dairesel marker ikonu
var redIcon = L.divIcon({
className: 'custom-map-marker',
iconSize: [12, 12],
iconAnchor: [6, 6]
});
// HTML içindeki gizli veri elementlerini oku (Şablonla beslenecek)
$('.map-marker-data').each(function() {
var lat = parseFloat($(this).data('lat'));
var lng = parseFloat($(this).data('lng'));
var title = $(this).data('title');
var link = $(this).data('link');
if (!isNaN(lat) && !isNaN(lng)) {
var popupContent = '<b style="color: #ffffff;">' + title + '</b><br>' +
'<a href="' + link + '" style="color: #b30000; font-weight: bold;">Maddeyi Oku →</a>';
L.marker([lat, lng], {icon: redIcon})
.addTo(map)
.bindPopup(popupContent);
}
});
});
});