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.000: Baris 1.000:
});
});


/* ==========================================================
  🔵 MIPPEDIA HYPER-LIGHT VERIFICATION
  Fitur: Zero Latency, Single API Call, High Efficiency
  ========================================================== */
$(document).ready(function() {
$(document).ready(function() {
     var api = new mw.Api(),
     var api = new mw.Api();
        u = mw.config.get('wgUserName'),
    var ns = mw.config.get('wgNamespaceNumber');
        p = mw.config.get('wgPageName'),
    var user = mw.config.get('wgUserName');
        ns = mw.config.get('wgNamespaceNumber'),
        isAdmin = mw.config.get('wgUserGroups').includes('sysop');


     // 1. DATA RETRIEVAL (Daftar User & Render Gambar Sekali Jalan)
     // 1. Ambil data & gambar DALAM SATU WAKTU (Single Thread)
     $.when(
     $.when(
         api.get({ action: 'query', list: 'categorymembers', cmtitle: 'Category:Pengguna_Terverifikasi', cmlimit: 'max' }),
         api.get({ action: 'query', list: 'categorymembers', cmtitle: 'Category:Pengguna_Terverifikasi', cmlimit: 'max' }),
         api.parse('[[Berkas:Verified_Badge.png|20px|link=|middle]]')
         api.parse('[[Berkas:Verified_Badge.png|20px|link=|middle]]')
     ).done(function(d, img) {
     ).done(function(userRes, imgRes) {
         var vUsers = d[0].query.categorymembers.map(function(m) { return m.title.replace('Pengguna:', ''); }),
         var verifiedUsers = userRes[0].query.categorymembers.map(function(m) { return m.title.replace('Pengguna:', ''); });
            $bBase = $(img[0]).find('img').first();
        var badgeSource = $(imgRes[0]).find('img').first();
         if (!$bBase.length) return;
         if (!badgeSource.length) return;


         function apply() {
        // Fungsi tempel kilat
             // Global Badge (Riwayat/Recent Changes) - Ukuran 13px & Sejajar
         function injectBadge() {
             // A. Halaman Profil (Langsung tempel)
            var currentTitle = mw.config.get('wgTitle');
            if ((ns === 2 || ns === 3) && verifiedUsers.includes(currentTitle)) {
                if (!$('#firstHeading .mp-v').length) {
                    var $pB = badgeSource.clone().attr('class', 'mp-v').css({'width':'18px','height':'18px','margin-left':'5px','vertical-align':'middle'});
                    $('#firstHeading').append($pB);
                }
            }
 
            // B. Riwayat & Daftar (Scanning kilat tanpa API ulang)
             $('.mw-userlink').each(function() {
             $('.mw-userlink').each(function() {
                 var $el = $(this), name = $el.text().trim();
                 var $u = $(this);
                if (vUsers.includes(name) && !$el.next('.mp-v').length) {
                if (verifiedUsers.includes($u.text().trim()) && !$u.next('.mp-v-g').length) {
                     $el.after($bBase.clone().addClass('mp-v').css({'width':'13px','height':'13px','margin-left':'3px','vertical-align':'middle','position':'relative','top':'-1px'}));
                     var $gB = badgeSource.clone().attr('class', 'mp-v-g').css({'width':'12px','height':'12px','margin-left':'3px','vertical-align':'middle'});
                    $u.after($gB);
                 }
                 }
             });
             });
            // Profile Badge (Halaman Utama) - Ukuran 20px
            var t = mw.config.get('wgTitle');
            if ((ns===2||ns===3) && vUsers.includes(t) && !$('#firstHeading .mp-v-p').length) {
                $('#firstHeading').append($bBase.clone().addClass('mp-v-p').css({'width':'20px','height':'20px','margin-left':'5px','vertical-align':'middle'}));
            }
         }
         }
         apply();
 
         mw.hook('wikipage.content').add(apply);
        // Jalankan & pasang hook (Untuk konten dinamis)
         injectBadge();
         mw.hook('wikipage.content').add(injectBadge);
     });
     });


     // 2. OTOMATISASI TEKS (Edit Mode)
     // --- SISTEM PANEL ADMIN & REQUEST (Disederhanakan kodenya) ---
    if (mw.config.get('wgAction')==='edit' && sessionStorage.getItem('mv_req')) {
     if (ns === 2 && user && mw.config.get('wgPageName').includes('Pengguna:' + user)) {
        var old = $('#wpTextbox1').val();
        $('#p-cactions ul').append($('<li>').addClass('mw-list-item').append($('<a>').attr('href', '#').text('🔵 Verifikasi').on('click', function(e) {
        $('#wpTextbox1').val(sessionStorage.getItem('mv_req') + "\n\n**Alasan:**\n(Tulis di sini)\n\n<div class='mippedia-status'>'''Status: 🕒 Sedang diverifikasi'''</div>\n\n--" + u);
        sessionStorage.removeItem('mv_req');
    }
 
    // 3. TOMBOL REQUEST (Tab Menu)
     if (ns===2 && u && p.includes('Pengguna:'+u) && !$('#ca-verify-request').length) {
        var $li = $('<li>').attr('id','ca-verify-request').addClass('mw-list-item').append($('<a>').attr('href','#').append($('<span>').text('🔵 Verifikasi').css({'color':'#0095f6','font-weight':'bold'})));
        $li.click(function(e) {
             e.preventDefault();
             e.preventDefault();
             sessionStorage.setItem('mv_req', "Halo Pengurus, memohon verifikasi untuk [["+p+"]].");
             sessionStorage.setItem('mippedia_verify_req', "Halo Pengurus, mohon verifikasi.");
             window.location.href = mw.util.getUrl("Pembicaraan_Pengguna:"+u, {action:'edit', section:'new', preloadtitle:'Permintaan Verifikasi'});
             window.location.href = mw.util.getUrl("Pembicaraan_Pengguna:" + user, { action: 'edit', section: 'new' });
         });
         })));
        $('#p-cactions ul, #p-views ul').append($li);
     }
     }


     // 4. SISTEM ADMIN OTOMATIS (Approve & Update Status)
     // Panel Admin (Hanya render jika ada teks pemicu - Hemat CPU)
     if (ns===3 && isAdmin && $('#mw-content-text').text().includes("Sedang diverifikasi")) {
     if (ns === 3 && mw.config.get('wgUserGroups').includes('sysop') && $('#mw-content-text').text().includes("Sedang diverifikasi")) {
         api.get({action:'query', prop:'revisions', titles:p, rvprop:'user|content', rvlimit:1}).done(function(r) {
         var $btn = $('<button>').text('✅ VERIFIKASI').css({'background':'#0095f6','color':'#fff','border':'none','padding':'5px','cursor':'pointer'})
            var pg = r.query.pages[Object.keys(r.query.pages)[0]],
             .click(function() {
                req = pg.revisions[0].user,
                 $(this).prop('disabled', true).text('Working...');
                con = pg.revisions[0]['*'];
                 api.postWithToken('edit', { action: 'edit', title: "Pengguna:"+mw.config.get('wgTitle'), appendtext: '\n[[Category:Pengguna_Terverifikasi]]', summary: 'Verified' })
           
                 .done(function() { location.reload(); });
            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 $btn = $('<button>').text('✅ APPROVE').css({'background':'#0095f6','color':'#fff','border':'none','padding':'5px 15px','cursor':'pointer','font-weight':'bold','border-radius':'4px'});
              
            $btn.click(function() {
                 $(this).prop('disabled',true).text('Processing...');
                // Step 1: Tambah Kategori ke Profil
                 api.postWithToken('edit', {action:'edit', title:"Pengguna:"+mw.config.get('wgTitle'), appendtext:'\n[[Category:Pengguna_Terverifikasi]]', summary:'Verified'})
                 .then(function() {
                    // Step 2: Update Status di Halaman Talk (Otomatis ganti teks)
                    var up = con.replace("Status: 🕒 Sedang diverifikasi", "Status: ✅ '''Akun Terverifikasi''' 🔵");
                    return api.postWithToken('edit', {action:'edit', title:p, text:up, summary:'Approved'});
                }).then(function() {
                    // Step 3: Kirim Pesan Notif Otomatis
                    return api.postWithToken('edit', {action:'edit', title:"Pembicaraan_Pengguna:"+req, section:'new', text:"\n== Akun Terverifikasi ==\nHalo [["+req+"]], akun Anda resmi terverifikasi 🔵. --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 20.47 (UTC)", summary:'Notif'});
                }).done(function() { location.reload(); });
             });
             });
            $('#mw-content-text').prepend($pnl.append($btn));
        $('#mw-content-text').prepend($('<div style="border:1px solid #0095f6;padding:10px;border-radius:8px;margin-bottom:10px">').append("<b>Admin Panel</b><br>", $btn));
        });
     }
     }
});
});