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.221: Baris 1.221:
             var promoList = ['memang hebat', 'terpercaya sekali', 'terbaik di dunia', 'hubungi nomor kami', 'harga murah', 'kualitas terjamin', 'solusi terbaik'];
             var promoList = ['memang hebat', 'terpercaya sekali', 'terbaik di dunia', 'hubungi nomor kami', 'harga murah', 'kualitas terjamin', 'solusi terbaik'];
             if (promoList.some(p => rawContent.toLowerCase().includes(p)) && !/\{\{Hapus/i.test(content)) {
             if (promoList.some(p => rawContent.toLowerCase().includes(p)) && !/\{\{Hapus/i.test(content)) {
                 content = '{{Hapus|Alasan: Deteksi kalimat promosi otomatis}}\n' + content;
                 content = '{{Hapus|Deteksi kalimat promosi otomatis}}\n' + content;
                 summaryParts.push('+Promo');
                 summaryParts.push('+Promo');
             }
             }
Baris 1.302: Baris 1.302:


/* ==========================================================
/* ==========================================================
   🎭 MIPPEDIA AUTH LOADER - LOGIN & REGISTER ANIMATION
   💀 MIPPEDIA AUTO-REAPER SYSTEM (SEPARATE MODULE)
   Memberikan kesan profesional saat masuk/daftar ke sistem.
   Fungsi: Deteksi {{Hapus...}} -> Kunci Halaman -> Hapus Otomatis
  Hanya berfungsi jika dijalankan oleh akun ADMINISTRATOR.
   ========================================================== */
   ========================================================== */
(function() {
(function() {
     var action = mw.config.get('wgAction');
     // 1. Inisialisasi API
     var specialPage = mw.config.get('wgCanonicalSpecialPageName');
     var api = new mw.Api();


     // Hanya jalan di halaman Login dan CreateAccount
     // 2. Fungsi Utama Pemantau
     if (specialPage !== 'Userlogin' && specialPage !== 'CreateAccount') return;
    function monitorRecentChanges() {
        api.get({
            action: 'query',
            list: 'recentchanges',
            rcnamespace: 0, // Hanya artikel
            rclimit: 10,
            rcprop: 'title|ids'
        }).done(function(data) {
            var changes = data.query.recentchanges;
           
            changes.forEach(function(rc) {
                checkAndExecute(rc.title);
            });
        });
     }
 
    // 3. Cek Isi Artikel & Eksekusi
    function checkAndExecute(title) {
        api.get({
            action: 'query',
            titles: title,
            prop: 'revisions',
            rvprop: 'content'
        }).done(function(res) {
            var pages = res.query.pages;
            var pageId = Object.keys(pages)[0];
            if (pageId === "-1") return; // Halaman sudah tidak ada


    // 1. CSS Injection: Desain Overlay & Animasi Loading
            var content = pages[pageId].revisions[0]['*'];
    var style = document.createElement('style');
    style.innerHTML = `
        #mippedia-loader {
            position: fixed; top: 0; left: 0; width: 100%; height: 100%;
            background: rgba(255, 255, 255, 0.95);
            display: none; flex-direction: column; align-items: center; justify-content: center;
            z-index: 10000; backdrop-filter: blur(5px); transition: all 0.3s ease;
        }
        .mip-spinner {
            width: 60px; height: 60px;
            border: 5px solid #f3f3f3; border-top: 5px solid #3498db;
            border-radius: 50%; animation: mip-spin 1s linear infinite;
            margin-bottom: 20px; box-shadow: 0 0 15px rgba(52, 152, 219, 0.2);
        }
        .mip-text {
            font-family: 'Segoe UI', Roboto, sans-serif;
            font-size: 18px; color: #2c3e50; font-weight: 500;
            letter-spacing: 1px; animation: mip-fade 1.5s infinite;
        }
        @keyframes mip-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
        @keyframes mip-fade { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }
    `;
    document.head.appendChild(style);


    // 2. HTML Injection: Membuat elemen Loader
            // CEK: Apakah ada template hapus spesifik?
    var loader = document.createElement('div');
            if (content.includes('{{Hapus|Deteksi kalimat promosi otomatis}}')) {
    loader.id = 'mippedia-loader';
                console.log('💀 Target Terdeteksi: ' + title);
    loader.innerHTML = `
        <div class="mip-spinner"></div>
        <div class="mip-text" id="mip-loader-msg">Mengautentikasi...</div>
    `;
    document.body.appendChild(loader);


    // 3. Logic: Trigger saat form disubmit
                // LANGKAH 1: Kunci Halaman (Protect) agar tidak bisa diedit orang lain
    $(document).ready(function() {
                api.postWithToken('csrf', {
        var $form = $('#mw-upload-form, #userlogin2, #userlogin');
                    action: 'protect',
        // MediaWiki menggunakan ID berbeda tergantung skin, kita ambil selector umum form login
                    title: title,
       
                    protections: 'edit=sysop|move=sysop',
        $('form').on('submit', function() {
                    expiry: 'infinite',
            var buttonId = $(document.activeElement).attr('id');
                     reason: 'Mippedia Security: Mengunci artikel promosi untuk pemusnahan.'
           
                 }).done(function() {
            // Pastikan loader muncul hanya saat tombol submit ditekan
                     console.log('🔒 Halaman Dikunci: ' + title);
            if (buttonId === 'wpLoginAttempt' || buttonId === 'wpCreateaccount') {
               
                // Ganti teks sesuai aksi
                if (buttonId === 'wpCreateaccount') {
                     $('#mip-loader-msg').text('Mempersiapkan Akun Mippedia...');
                 } else {
                     $('#mip-loader-msg').text('Menghubungkan ke Inti Mippedia...');
                }


                // Munculkan Loader dengan efek transisi
                    // LANGKAH 2: Hitung Mundur 60 Detik (1 Menit) untuk Penghapusan Permanen
                $('#mippedia-loader').css('display', 'flex').hide().fadeIn(300);
                    setTimeout(function() {
                        api.postWithToken('csrf', {
                            action: 'delete',
                            title: title,
                            reason: 'Mippedia Auto-Reaper: Penghapusan otomatis artikel promosi terdeteksi sistem.'
                        }).done(function() {
                            console.log('🔥 Musnah Total: ' + title);
                        });
                    }, 60000); // 60.000 ms = 1 menit
                });
             }
             }
         });
         });
     });
     }
 
    // Jalankan pemantauan setiap 30 detik
    setInterval(monitorRecentChanges, 30000);
    console.log('🛡️ Mippedia Reaper System is Active...');
})();
})();