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.001: Baris 1.001:


/* ==========================================================
/* ==========================================================
   🔵 MIPPEDIA IRONCLAD SYSTEM V3
   🔵 MIPPEDIA IRONCLAD SYSTEM V4 - FULL EDITION
   Fitur: Proteksi Namespace Pengguna Saja, Fix Pop-up, & Full Auto
   Fitur: Auto-Text, Auto-Message, Auto-Status, Pop-up & Security
   ========================================================== */
   ========================================================== */
$(document).ready(function() {
$(document).ready(function() {
Baris 1.013: Baris 1.013:
     var vBadgeUrl = mw.config.get('wgScriptPath') + '/index.php?title=Special:Redirect/file/Verified_Badge.png';
     var vBadgeUrl = mw.config.get('wgScriptPath') + '/index.php?title=Special:Redirect/file/Verified_Badge.png';


     // --- 1. POP-UP TERVERIFIKASI (FIXED & CENTERED) ---
     // --- 1. POP-UP TERVERIFIKASI ---
     function showVerifiedPopup() {
     function showVerifiedPopup() {
         var modalHtml = '<div id="mippedia-v-modal" style="position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.75);z-index:99999;display:flex;align-items:center;justify-content:center;">' +
         var modalHtml = '<div id="mippedia-v-modal" style="position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.75);z-index:99999;display:flex;align-items:center;justify-content:center;">' +
             '<div style="background:#fff;padding:30px;border-radius:20px;width:85%;max-width:320px;text-align:center;box-shadow:0 15px 35px rgba(0,0,0,0.5);position:relative;">' +
             '<div style="background:#fff;padding:30px;border-radius:20px;width:85%;max-width:320px;text-align:center;box-shadow:0 15px 35px rgba(0,0,0,0.5);">' +
             '<img src="' + vBadgeUrl + '&width=60" style="width:60px;height:60px;margin-bottom:15px;">' +
             '<img src="' + vBadgeUrl + '&width=60" style="width:60px;height:60px;margin-bottom:15px;">' +
             '<h2 style="margin:0 0 10px 0;color:#1a1a1a;font-family:sans-serif;font-size:20px;font-weight:bold;">Akun Terverifikasi</h2>' +
             '<h2 style="margin:0 0 10px 0;color:#1a1a1a;font-size:20px;font-weight:bold;">Akun Terverifikasi</h2>' +
             '<p style="color:#555;line-height:1.5;font-size:13px;margin-bottom:20px;font-family:sans-serif;">Mippedia telah mengonfirmasi bahwa identitas pemilik akun ini adalah asli. Lencana ini menandakan kredibilitas tinggi di dalam komunitas kami.</p>' +
             '<p style="color:#555;line-height:1.5;font-size:13px;margin-bottom:20px;">Mippedia telah mengonfirmasi bahwa identitas pemilik akun ini adalah asli. Lencana ini menandakan kredibilitas tinggi.</p>' +
             '<button id="close-v-modal" style="background:#0095f6;color:#fff;border:none;padding:12px 0;width:100%;border-radius:10px;cursor:pointer;font-weight:bold;font-size:14px;">Mengerti</button>' +
             '<button id="close-v-modal" style="background:#0095f6;color:#fff;border:none;padding:12px 0;width:100%;border-radius:10px;cursor:pointer;font-weight:bold;">Mengerti</button>' +
             '</div></div>';
             '</div></div>';
         $('body').append(modalHtml);
         $('body').append(modalHtml);
Baris 1.026: Baris 1.026:
     }
     }


     // --- 2. RENDER BADGE ---
     // --- 2. RENDER BADGE (RIWAYAT & PROFIL) ---
     api.get({ action: 'query', list: 'categorymembers', cmtitle: 'Category:Pengguna_Terverifikasi', cmlimit: 'max' }).done(function(d) {
     api.get({ action: 'query', list: 'categorymembers', cmtitle: 'Category:Pengguna_Terverifikasi', cmlimit: 'max' }).done(function(d) {
         var vUsers = d.query.categorymembers.map(function(m) { return m.title.replace('Pengguna:', ''); });
         var vUsers = d.query.categorymembers.map(function(m) { return m.title.replace('Pengguna:', ''); });
Baris 1.039: Baris 1.039:
         });
         });


        var currentTitle = mw.config.get('wgTitle');
         if ((ns === 2 || ns === 3) && vUsers.includes(mw.config.get('wgTitle')) && !$('#firstHeading .mp-v-p').length) {
         if ((ns === 2 || ns === 3) && vUsers.includes(currentTitle) && !$('#firstHeading .mp-v-p').length) {
             var $pBadge = $('<span class="mp-v-p" style="margin-left:6px;vertical-align:middle;display:inline-flex;cursor:pointer;"><img src="' + vBadgeUrl + '&width=20" style="width:20px;height:20px;"></span>');
             var $pBadge = $('<span class="mp-v-p" style="margin-left:6px;vertical-align:middle;display:inline-flex;cursor:pointer;"><img src="' + vBadgeUrl + '&width=20" style="width:20px;height:20px;"></span>');
             $pBadge.click(showVerifiedPopup);
             $pBadge.click(showVerifiedPopup);
Baris 1.047: Baris 1.046:
     });
     });


     // --- 3. PROTEKSI KATEGORI (KHUSUS NAMESPACE PENGGUNA) ---
     // --- 3. PROTEKSI KATEGORI (SATPAM NS PENGGUNA) ---
     if (ns === 2 && (['edit', 'submit'].includes(mw.config.get('wgAction')))) {
     if (ns === 2 && ['edit', 'submit'].includes(mw.config.get('wgAction'))) {
         $('#editform').on('submit', function(e) {
         $('#editform').on('submit', function(e) {
             var $box = $('#wpTextbox1');
             var content = $('#wpTextbox1').val();
            var content = $box.val();
             if (/\[\[Category:Pengguna_Terverifikasi\]\]/gi.test(content) && !sessionStorage.getItem('is_system_verify')) {
             var catPattern = /\[\[Category:Pengguna_Terverifikasi\]\]/gi;
                 alert("⚠️ DITOLAK: Penambahan kategori manual dilarang!");
 
                 $('#wpTextbox1').val(content.replace(/\[\[Category:Pengguna_Terverifikasi\]\]/gi, ''));
            if (catPattern.test(content) && !sessionStorage.getItem('is_system_verify')) {
                 alert("⚠️ AKSES DITOLAK: Penambahan kategori verifikasi secara manual hanya dilarang di profil pengguna.\n\nSilakan gunakan sistem verifikasi otomatis.");
                 $box.val(content.replace(catPattern, ''));  
                 return false;
                 return false;
             }
             }
Baris 1.062: Baris 1.058:
     }
     }


     // --- 4. AUTO-FILL & REQUEST ---
     // --- 4. OTOMATISASI TEKS REQUEST ---
     if (mw.config.get('wgAction') === 'edit' && sessionStorage.getItem('mippedia_verify_req')) {
     if (mw.config.get('wgAction') === 'edit' && sessionStorage.getItem('mippedia_verify_req')) {
         $('#wpTextbox1').val(sessionStorage.getItem('mippedia_verify_req') + "\n\n<div class='mippedia-status'>'''Status: 🕒 Sedang diverifikasi'''</div>\n\n--" + user);
        var reqText = sessionStorage.getItem('mippedia_verify_req');
         $('#wpTextbox1').val(reqText + "\n\n**Alasan:**\n(Tulis alasan lo di sini, boys!)\n\n<div class='mippedia-status'>'''Status: 🕒 Sedang diverifikasi'''</div>\n\n--" + user);
         sessionStorage.removeItem('mippedia_verify_req');
         sessionStorage.removeItem('mippedia_verify_req');
     }
     }


    // --- 5. TOMBOL MINTA VERIFIKASI ---
     if (ns === 2 && user && pageName.includes('Pengguna:' + user)) {
     if (ns === 2 && user && pageName.includes('Pengguna:' + user)) {
         if (!$('#ca-verify-request').length) {
         if (!$('#ca-verify-request').length) {
Baris 1.073: Baris 1.071:
             $btn.click(function(e) {
             $btn.click(function(e) {
                 e.preventDefault();
                 e.preventDefault();
                 sessionStorage.setItem('mippedia_verify_req', "Halo Pengurus,\n\nMohon verifikasi akun saya.");
                 sessionStorage.setItem('mippedia_verify_req', "== Permintaan Verifikasi ==\nHalo Pengurus, mohon verifikasi akun saya.");
                 window.location.href = mw.util.getUrl("Pembicaraan_Pengguna:" + user, { action: 'edit', section: 'new' });
                 window.location.href = mw.util.getUrl("Pembicaraan_Pengguna:" + user, { action: 'edit', section: 'new' });
             });
             });
Baris 1.080: Baris 1.078:
     }
     }


     // --- 5. PANEL ADMIN (BYPASS) ---
     // --- 6. SISTEM ADMIN OTOMATIS (APPROVE & PESAN) ---
     if (ns === 3 && isAdmin && $('#mw-content-text').text().includes("Sedang diverifikasi")) {
     if (ns === 3 && isAdmin && $('#mw-content-text').text().includes("Sedang diverifikasi")) {
         var $pnl = $('<div style="background:#f0f7ff;border:2px solid #0095f6;padding:12px;border-radius:10px;margin-bottom:10px">').append('<b>🔵 ADMIN SYSTEM</b><br>');
         api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'user|content', rvlimit: 1 }).done(function(res) {
        var $btnApprove = $('<button>').text('✅ APPROVE').css({'background':'#0095f6','color':'#fff','border':'none','padding':'5px 15px','cursor':'pointer','font-weight':'bold','border-radius':'4px'});
            var pg = res.query.pages[Object.keys(res.query.pages)[0]],
                requester = pg.revisions[0].user,
                oldContent = pg.revisions[0]['*'];
 
            var $pnl = $('<div style="background:#f0f7ff;border:2px solid #0095f6;padding:12px;border-radius:10px;margin-bottom:10px">').append('<b>🔵 ADMIN SYSTEM</b><br>');
            var $btnApprove = $('<button>').text('✅ APPROVE').css({'background':'#0095f6','color':'#fff','border':'none','padding':'5px 15px','cursor':'pointer','font-weight':'bold','border-radius':'4px'});


        $btnApprove.click(function() {
            $btnApprove.click(function() {
            $(this).prop('disabled', true).text('Working...');
                $(this).prop('disabled', true).text('Processing...');
            sessionStorage.setItem('is_system_verify', 'true');
                sessionStorage.setItem('is_system_verify', 'true');
            api.postWithToken('edit', { action: 'edit', title: "Pengguna:" + mw.config.get('wgTitle'), appendtext: '\n[[Category:Pengguna_Terverifikasi]]', summary: 'System: Account Verified' })
               
            .then(function() {
                // A. Tambah Kategori ke Profil
                var newT = $('#mw-content-text').text().replace("Status: 🕒 Sedang diverifikasi", "Status: ✅ '''Akun Terverifikasi''' 🔵");
                api.postWithToken('edit', { action: 'edit', title: "Pengguna:" + mw.config.get('wgTitle'), appendtext: '\n[[Category:Pengguna_Terverifikasi]]', summary: 'System: Verified' })
                return api.postWithToken('edit', { action: 'edit', title: pageName, text: newT, summary: 'Approved' });
                .then(function() {
            }).done(function() {  
                    // B. Update Status di Halaman Talk
                sessionStorage.removeItem('is_system_verify');
                    var newT = oldContent.replace("Status: 🕒 Sedang diverifikasi", "Status: ✅ '''Akun Terverifikasi''' 🔵");
                location.reload();  
                    return api.postWithToken('edit', { action: 'edit', title: pageName, text: newT, summary: 'Approved' });
                }).then(function() {
                    // C. Kirim Pesan Otomatis ke Wall User
                    var msg = "\n== Profil Terverifikasi ==\nHalo [["+requester+"]], akun Anda resmi terverifikasi dengan centang biru 🔵. --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 21.24 (UTC)";
                    return api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:" + requester, section: 'new', text: msg, summary: 'Verification Notice' });
                }).done(function() {  
                    sessionStorage.removeItem('is_system_verify');
                    location.reload();
                });
             });
             });
            $('#mw-content-text').prepend($pnl.append($btnApprove));
         });
         });
        $('#mw-content-text').prepend($pnl.append($btnApprove));
     }
     }
});
});