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.327: | Baris 1.327: | ||
/* ========================================================== | /* ========================================================== | ||
🛡️ MIPPEDIA LINK-SENTRY | 🛡️ MIPPEDIA LINK-SENTRY V4 - GLOBAL FORCE | ||
Pasti Berjalan di Semua Editor (Desktop & Mobile) | |||
Blokir link luar kecuali Whitelist untuk SEMUA user (kecuali Admin) | |||
========================================================== */ | ========================================================== */ | ||
(function() { | |||
function validateMippediaLinks(e) { | |||
var userGroups = mw.config.get('wgUserGroups') || []; | |||
// 1. IZINKAN: Admin (sysop) dan Patroli (patroller) | |||
if (userGroups.indexOf('sysop') !== -1 || userGroups.indexOf('patroller') !== -1) return; | |||
// Ambil konten dari kotak teks utama (wpTextbox1) | |||
var | var $textbox = $('#wpTextbox1'); | ||
if (!$textbox.length) return; // Bukan halaman edit | |||
var content = $textbox.val(); | |||
var urlRegex = /https?:\/\/([a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5})/gi; | var urlRegex = /https?:\/\/([a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5})/gi; | ||
var match; | var match; | ||
var unauthorizedLinks = []; | var unauthorizedLinks = []; | ||
// 2. DAFTAR DOMAIN | // 2. DAFTAR DOMAIN TERPERCAYA (WHITELIST) | ||
var trustedDomains = [ | var trustedDomains = [ | ||
'mippedia.org', 'id.mippedia.org', 'en.mippedia.org', | 'mippedia.org', 'id.mippedia.org', 'en.mippedia.org', | ||
'concise.mippedia.org', 'data.mippedia.org', | 'concise.mippedia.org', 'data.mippedia.org', | ||
'mippediacommunity.site', | 'mippediacommunity.site', | ||
'kompas.com', 'cnnindonesia.com', 'detik.com', 'tempo.co', | 'kompas.com', 'cnnindonesia.com', 'detik.com', 'tempo.co', | ||
'antaranews.com', 'liputan6.com', 'republika.co.id', | 'antaranews.com', 'liputan6.com', 'republika.co.id', | ||
'reuters.com', 'apnews.com', 'bbc.com', 'nytimes.com', 'theguardian.com', | 'reuters.com', 'apnews.com', 'bbc.com', 'nytimes.com', 'theguardian.com', | ||
'wikipedia.org', 'wikimedia.org', 'wikidata.org' | 'wikipedia.org', 'wikimedia.org', 'wikidata.org' | ||
]; | ]; | ||
| Baris 1.362: | Baris 1.362: | ||
var isTrusted = false; | var isTrusted = false; | ||
for (var i = 0; i < trustedDomains.length; i++) { | for (var i = 0; i < trustedDomains.length; i++) { | ||
if (domainFound === trustedDomains[i] || domainFound.endsWith('.' + trustedDomains[i])) { | if (domainFound === trustedDomains[i] || domainFound.endsWith('.' + trustedDomains[i])) { | ||
| Baris 1.375: | Baris 1.374: | ||
} | } | ||
// 3. EKSEKUSI | // 3. EKSEKUSI BLOKIR | ||
if (unauthorizedLinks.length > 0) { | if (unauthorizedLinks.length > 0) { | ||
var uniqueUnauthorized = [...new Set(unauthorizedLinks)]; | var uniqueUnauthorized = [...new Set(unauthorizedLinks)]; | ||
alert( | alert( | ||
"❌ AKSES DITOLAK: DOMAIN | "❌ AKSES DITOLAK: DOMAIN DILARANG ❌\n\n" + | ||
"Mippedia | "Mippedia tidak mengizinkan domain berikut:\n- " + uniqueUnauthorized.join('\n- ') + "\n\n" + | ||
"Harap hapus link tersebut untuk melanjutkan penyimpanan." | |||
"Harap | |||
); | ); | ||
e.preventDefault(); | |||
e.stopImmediatePropagation(); | |||
return false; | return false; | ||
} | } | ||
} | |||
// Pasang listener di tombol simpan manapun (Desktop & Mobile) | |||
$(document).on('click', '#wpSave, #wpSaveWidget, .editCheck-save, button[type="submit"]', function(e) { | |||
// Hanya jalankan jika kita sedang di halaman edit (ada wpTextbox1) | |||
if ($('#wpTextbox1').length) { | |||
return validateMippediaLinks(e); | |||
} | |||
}); | |||
// Tambahan untuk MobileFrontend | |||
mw.hook('wikipage.content').add(function() { | |||
$('form.editor-interface').on('submit', validateMippediaLinks); | |||
}); | }); | ||
}); | })(); | ||