MediaWiki:Gadget-BDonizleme.js
Görünüm
Not: Sayfayı kaydettikten sonra değişiklikleri görebilmek için tarayıcınızın önbelleğinizi temizlemeniz gerekir. Google Chrome, Firefox, Microsoft Edge ve Safari: ⇧ Shift tuşuna basılı tutun ve Yeniden Yükle araç çubuğu düğmesine tıklayın. Ayrıntılar ve diğer tarayıcılara yönelik yönergeler için Vikipedi:Önbelleğinizi atlayın sayfasını inceleyin.
// Bekleyen Değişiklikler sayfasında diff önizleme
if (mw.config.get('wgCanonicalSpecialPageName') === 'PendingChanges') {
mw.loader.using(['mediawiki.util'], function() {
// Stil ekle
$('<style>')
.text('.preview-viewed { background-color: #d4edda !important; }')
.appendTo('head');
// Tablo sütun genişliklerini sabitle
function fixTableColumnWidths($table) {
// Eğer zaten sabitlenmişse tekrar yapma
if ($table.data('widths-fixed')) return;
// Her hücrenin genişliğini al ve sabitle
$table.find('thead tr:first th, tbody tr:first td').each(function() {
var $cell = $(this);
var width = $cell.outerWidth();
$cell.css('width', width + 'px');
});
$table.data('widths-fixed', true);
}
// Her incele linkinin yanına (Ön izleme) ekle
$('a[href*="diff="]').each(function() {
var $link = $(this);
if ($link.text().includes('incele') && !$link.next('.preview-link').length) {
// İncele linkini arka planda yeni sekmede aç ve yeşile çevir
$link.on('click', function(e) {
e.preventDefault();
// Satırı yeşile çevir
$(this).closest('tr').addClass('preview-viewed');
// Yeni sekmede aç ama odağı burada tut
window.open($(this).attr('href'), '_blank');
window.focus();
});
$link.after(' <a href="#" class="preview-link" style="color: #72777d; font-size: 0.9em;">(Ön izleme)</a>');
}
});
// Ön izleme linkine tıklama
$(document).on('click', '.preview-link', function(e) {
e.preventDefault();
var $previewLink = $(this);
var $inceleLink = $previewLink.prev('a');
var $row = $previewLink.closest('tr');
var $table = $row.closest('table');
var $existingPreview = $row.next('.diff-preview-row');
// Zaten bu satırda açıksa kapat
if ($existingPreview.length) {
$existingPreview.remove();
$previewLink.text('(Ön izleme)');
return;
}
// SÜTUN GENİŞLİKLERİNİ SABİTLE
fixTableColumnWidths($table);
// DİĞER TÜM ÖNİZLEMELERİ KAPAT
$('.diff-preview-row').remove();
$('.preview-link').text('(Ön izleme)');
// Bu linki (Kapat) yap
$previewLink.text('(Kapat)');
// SATIRI YEŞİL YAP
$row.addClass('preview-viewed');
// Önizleme satırı oluştur
var $previewRow = $('<tr>')
.addClass('diff-preview-row')
.insertAfter($row);
var $cell = $('<td>')
.attr('colspan', '4')
.css({
'padding': '0',
'margin': '0',
'background': 'white',
'border': 'none'
})
.appendTo($previewRow);
var $container = $('<div>')
.css({
'margin': '0',
'padding': '0',
'background': 'white',
'border': 'none',
'box-shadow': 'none'
})
.appendTo($cell);
// Başlık
var $header = $('<div>')
.css({
'position': 'sticky',
'top': '0',
'background': '#eaecf0',
'padding': '8px 10px',
'margin': '0',
'border': 'none',
'border-bottom': '1px solid #c8ccd1',
'z-index': '100'
})
.html(
'<button class="preview-close-btn" style="float: right; padding: 4px 12px; margin: 0; cursor: pointer; background: #d33; color: white; border: none; border-radius: 3px; font-weight: bold;">✕ Kapat</button>' +
'<strong>Ön izleme</strong> - ' +
'<a href="' + $inceleLink.attr('href') + '" target="_blank" class="preview-external-link" style="color: #0645ad;">Tam sayfada aç ↗</a>'
)
.appendTo($container);
// Kapat butonuna tıklama
$header.find('.preview-close-btn').on('click', function() {
$previewRow.remove();
$previewLink.text('(Ön izleme)');
});
// İçerik alanı
var $content = $('<div>')
.css({
'max-width': '100%',
'overflow-x': 'auto',
'padding': '0',
'margin': '0',
'border': 'none'
})
.html('<div style="padding: 20px; text-align: center;"><img src="//upload.wikimedia.org/wikipedia/commons/d/de/Ajax-loader.gif" alt="Yükleniyor..."> Yükleniyor...</div>')
.appendTo($container);
// Diff sayfasını yükle
$.get($inceleLink.attr('href'), function(html) {
var $doc = $(html);
var $diff = $doc.find('.diff').first().clone();
var $diffHeader = $doc.find('#mw-fr-diff-headeritems').first().clone();
// Border ve padding'leri temizle
$diff.css({
'border': 'none',
'margin': '0'
});
$diffHeader.css({
'border': 'none',
'margin': '0'
});
if ($diffHeader.length || $diff.length) {
$content.empty();
// Sadece diff header ve diff tablosu
if ($diffHeader.length) $content.append($diffHeader);
if ($diff.length) $content.append($diff);
// TÜM LİNKLERE TIKLANDIĞINDA ÖN İZLEMEYİ KAPAT
$content.find('a').not('.preview-close-btn').on('click', function(e) {
// Link yeni sekmede açılacak
var href = $(this).attr('href');
if (href && href !== '#') {
// Önizlemeyi kapat
$previewRow.remove();
$previewLink.text('(Ön izleme)');
}
});
} else {
$content.html('<div style="padding: 20px; color: #d33;">İçerik bulunamadı.</div>');
}
}).fail(function() {
$content.html(
'<div style="padding: 20px; background: #fee;">' +
'<strong>Hata:</strong> İçerik yüklenemedi. ' +
'<a href="' + $inceleLink.attr('href') + '" target="_blank">Sayfayı aç</a>' +
'</div>'
);
});
// "Tam sayfada aç" linkine tıklandığında ön izlemeyi kapat
$header.find('.preview-external-link').on('click', function() {
$previewRow.remove();
$previewLink.text('(Ön izleme)');
});
});
});
}