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 V3 - THE IRON WALL
   🛡️ MIPPEDIA LINK-SENTRY V4 - GLOBAL FORCE
   Fitur: Blokir Global Link Luar (Kecuali Admin & Patroli)
   Pasti Berjalan di Semua Editor (Desktop & Mobile)
   Hanya mengizinkan domain yang ada di Whitelist.
   Blokir link luar kecuali Whitelist untuk SEMUA user (kecuali Admin)
   ========================================================== */
   ========================================================== */
mw.hook('editPage.setup').add(function() {
(function() {
    var userGroups = mw.config.get('wgUserGroups');
    function validateMippediaLinks(e) {
   
        var userGroups = mw.config.get('wgUserGroups') || [];
    // 1. IZINKAN: Admin (sysop) dan Patroli (patroller)
       
    // Mereka bebas memasukkan link apa saja.
        // 1. IZINKAN: Admin (sysop) dan Patroli (patroller)
    if (userGroups.indexOf('sysop') !== -1 || userGroups.indexOf('patroller') !== -1) return;
        if (userGroups.indexOf('sysop') !== -1 || userGroups.indexOf('patroller') !== -1) return;


    $('#editform').on('submit', function(e) {
        // Ambil konten dari kotak teks utama (wpTextbox1)
         var content = $('#wpTextbox1').val();
         var $textbox = $('#wpTextbox1');
       
        if (!$textbox.length) return; // Bukan halaman edit
         // Regex untuk menangkap domain dari URL (http/https)
 
         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 "JALUR HIJAU" (WHITELIST)
         // 2. DAFTAR DOMAIN TERPERCAYA (WHITELIST)
        // Silakan tambah di sini jika ada domain baru yang dipercaya.
         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', // Project Network
             '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', // Berita Indo
             'antaranews.com', 'liputan6.com', 'republika.co.id',
             'reuters.com', 'apnews.com', 'bbc.com', 'nytimes.com', 'theguardian.com', // Berita Global
             'reuters.com', 'apnews.com', 'bbc.com', 'nytimes.com', 'theguardian.com',
             'wikipedia.org', 'wikimedia.org', 'wikidata.org' // Edukasi & Wiki Network
             'wikipedia.org', 'wikimedia.org', 'wikidata.org'
         ];
         ];


Baris 1.362: Baris 1.362:
             var isTrusted = false;
             var isTrusted = false;


            // Cek apakah domain cocok dengan whitelist atau merupakan subdomainnya
             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 PENYEKATAN
         // 3. EKSEKUSI BLOKIR
         if (unauthorizedLinks.length > 0) {
         if (unauthorizedLinks.length > 0) {
            e.preventDefault();
           
            // Ambil daftar unik domain yang diblokir
             var uniqueUnauthorized = [...new Set(unauthorizedLinks)];
             var uniqueUnauthorized = [...new Set(unauthorizedLinks)];
           
             alert(
             alert(
                 "❌ AKSES DITOLAK: DOMAIN TIDAK DIIZINKAN ❌\n\n" +
                 "❌ AKSES DITOLAK: DOMAIN DILARANG ❌\n\n" +
                 "Mippedia hanya mengizinkan referensi dari sumber berita kredibel dan internal network.\n\n" +
                 "Mippedia tidak mengizinkan domain berikut:\n- " + uniqueUnauthorized.join('\n- ') + "\n\n" +
                "Domain berikut dilarang untuk disimpan:\n- " + uniqueUnauthorized.join('\n- ') + "\n\n" +
                 "Harap hapus link tersebut untuk melanjutkan penyimpanan."
                 "Harap gunakan sumber terpercaya atau hubungi Admin jika Anda merasa domain ini penting."
             );
             );
           
            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);
     });
     });
});
})();