MediaWiki:Common.js: Perbedaan antara revisi
Tidak ada ringkasan suntingan Tanda: Suntingan perangkat seluler Suntingan peramban seluler |
Tidak ada ringkasan suntingan Tanda: Suntingan perangkat seluler Suntingan peramban seluler |
||
| Baris 1.263: | Baris 1.263: | ||
/* ========================================================== | /* ========================================================== | ||
🚀 MIPPEDIA | 🚀 MIPPEDIA OMNI-AUTO v5 (Mobile & Desktop Optimized) | ||
Fix: | Fix: Auto-Position, Data Button, & Social Media Whitelist | ||
========================================================== */ | ========================================================== */ | ||
$(document).ready(function() { | $(document).ready(function() { | ||
| Baris 1.270: | Baris 1.270: | ||
var namespace = mw.config.get('wgNamespaceNumber'); | var namespace = mw.config.get('wgNamespaceNumber'); | ||
var dataDomain = 'https://data.mippedia.org'; | var dataDomain = 'https://data.mippedia.org'; | ||
if (namespace === 0) { | if (namespace === 0) { | ||
// 1. CEK DATA KE PUSAT | |||
$.ajax({ | $.ajax({ | ||
url: dataDomain + '/api.php', | url: dataDomain + '/api.php', | ||
| Baris 1.295: | Baris 1.283: | ||
if ($infobox.length) { | if ($infobox.length) { | ||
// FIX GAMBAR: Ambil | // Jalankan fungsi suntik tombol data | ||
injectMippediaDataBtn(pageName); | |||
// FIX GAMBAR: Ambil dari jalur lokal wiki | |||
$infobox.find('img, .image').each(function() { | $infobox.find('img, .image').each(function() { | ||
var $imgObj = $(this).is('img') ? $(this) : $(this).find('img'); | var $imgObj = $(this).is('img') ? $(this) : $(this).find('img'); | ||
| Baris 1.305: | Baris 1.296: | ||
}); | }); | ||
// WHITELIST URL | // WHITELIST: Lindungi link medsos & URL luar | ||
$infobox.find('a').each(function() { | $infobox.find('a').each(function() { | ||
var href = $(this).attr('href') || ''; | var href = $(this).attr('href') || ''; | ||
var text = $(this).text().trim(); | var text = $(this).text().trim(); | ||
if (href.indexOf('http') === 0 || text.length <= 4) { | |||
if (href.indexOf('http') === 0 || text.length <= | |||
$(this).addClass('is-safe-link'); | $(this).addClass('is-safe-link'); | ||
} else { | } else { | ||
| Baris 1.318: | Baris 1.308: | ||
}); | }); | ||
// | // 2. PENEMPATAN INFOBOX (KHUSUS MOBILE & DESKTOP) | ||
var $ | // Gunakan interval singkat untuk memastikan elemen konten sudah siap | ||
var placementTimer = setInterval(function() { | |||
var $contentBody = $('#mw-content-text .mw-parser-output'); | |||
if ($contentBody.length) { | |||
var $firstP = $contentBody.find('> p').filter(function() { | |||
return $(this).text().trim().length > 15; | |||
}).first(); | |||
if ($firstP.length) { | |||
$firstP.after($infobox); | |||
clearInterval(placementTimer); | |||
} else if ($contentBody.length) { | |||
} | $contentBody.prepend($infobox); | ||
clearInterval(placementTimer); | |||
// | } | ||
// Jalankan cek link biru/merah | |||
checkInternalLinks($infobox); | |||
} | |||
}, 500); | |||
// Stop timer setelah 5 detik jika gagal (mencegah loop) | |||
setTimeout(function() { clearInterval(placementTimer); }, 5000); | |||
} | } | ||
} | } | ||
| Baris 1.339: | Baris 1.337: | ||
} | } | ||
// | function injectMippediaDataBtn(name) { | ||
if ($('#mippedia-data-btn').length === 0) { | |||
var dataUrl = dataDomain + '/wiki/' + encodeURIComponent(name); | |||
var $btn = $('<div id="mippedia-data-btn" style="margin: 12px 0;">') | |||
.append($('<a>', { | |||
href: dataUrl, | |||
target: '_blank', | |||
style: 'background: #36c; color: #fff; padding: 8px 14px; border-radius: 6px; font-weight: bold; text-decoration: none; display: inline-block; font-size: 12px; box-shadow: 0 2px 5px rgba(0,0,0,0.2);', | |||
text: 'LIHAT DI MIPPEDIA DATA' | |||
})); | |||
// Support untuk Mobile (Minerva) dan Desktop (Vector) | |||
var $header = $('.estimasi-baca-container, .minerva__subtitle, #siteSub, #contentSub').last(); | |||
if ($header.length) { | |||
$header.after($btn); | |||
} else { | |||
$('#firstHeading').after($btn); | |||
} | |||
} | |||
} | |||
function checkInternalLinks($container) { | function checkInternalLinks($container) { | ||
var titles = []; | var titles = []; | ||