MediaWiki:Common.js: Perbedaan antara revisi
Wikisporta (bicara | kontrib) ←Mengosongkan halaman Tanda: Pengosongan Suntingan perangkat seluler Suntingan peramban seluler |
Wikisporta (bicara | kontrib) Tidak ada ringkasan suntingan Tanda: Dikembalikan |
||
| Baris 1: | Baris 1: | ||
/** | |||
* Auto Related Articles Generator for MediaWiki | |||
* Memilih secara acak hingga 3 wikilink biru di dalam artikel untuk dijadikan artikel terkait. | |||
*/ | |||
$(function() { | |||
// Jalankan hanya di halaman baca artikel (action=view atau tanpa action) | |||
if ($('#mw-content-text').length && mw.config.get('wgIsArticle')) { | |||
var container = $('#auto-related-articles'); | |||
// Cek apakah templat dipanggil dalam kondisi kosong (butuh otomatis) | |||
var hasManualParams = false; | |||
container.find('.mw-related-item, script').each(function() { | |||
// Jika sudah ada item dari manual parameter, biarkan | |||
}); | |||
// Jika wadah ada dan belum terisi manual | |||
if (container.length) { | |||
var validLinks = []; | |||
// Cari semua link di dalam konten artikel | |||
$('#mw-content-text a').each(function() { | |||
var href = $(this).attr('href'); | |||
var title = $(this).attr('title'); | |||
// Validasi: Pastikan ini link internal wiki, BUKAN redlink (.new), | |||
// dan bukan bagian dari namespace khusus (File:, Special:, Help:, dll) | |||
if (href && href.startsWith('/wiki/') && !$(this).hasClass('new')) { | |||
if (title && !title.includes(':') && title !== mw.config.get('wgPageName')) { | |||
// Hindari duplikat | |||
ifmo: if (!validLinks.includes(title)) { | |||
validLinks.push(title); | |||
} | |||
} | |||
} | |||
}); | |||
// Jika ditemukan link valid, ambil secara acak maksimal 3 buah | |||
if (validLinks.length > 0) { | |||
// Acak array (Shuffle) | |||
validLinks.sort(function() { return 0.5 - Math.random(); }); | |||
// Ambil maksimal 3 | |||
var selectedLinks = validLinks.slice(0, 3); | |||
// Eksekusi pemanggilan ekstensi RelatedArticles via HTML/API atau render otomatis | |||
var htmlOutput = ''; | |||
selectedLinks.forEach(function(articleTitle) { | |||
// Render elemen penampung atau inject format related articles | |||
htmlOutput += '<div class="related-article-item"><a href="' + mw.util.getUrl(articleTitle) + '" title="' + articleTitle + '">' + articleTitle + '</a></div>'; | |||
}); | |||
// Masukkan ke dalam kontainer jika belum ada isi manual | |||
if (container.text().trim() === '' || container.find('a').length === 0) { | |||
container.html(htmlOutput); | |||
} | |||
} | |||
} | |||
} | |||
}); | |||