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 ULTIMATE VERIFICATION (NO-DELAY & UNIQUE)
   🔵 MIPPEDIA VERIFICATION SYSTEM (PERFECTION)
   Fitur: Satu Centang, Ukuran Proporsional, Kecepatan Instan
   Fix: No Delay, Single Badge, & Works Everywhere
   ========================================================== */
   ========================================================== */
$(document).ready(function() {
$(document).ready(function() {
    var api = new mw.Api();
     var user = mw.config.get('wgUserName');
     var user = mw.config.get('wgUserName');
    var pageName = mw.config.get('wgPageName');
     var ns = mw.config.get('wgNamespaceNumber');
     var ns = mw.config.get('wgNamespaceNumber');
    var isAdmin = mw.config.get('wgUserGroups').includes('sysop');
    var api = new mw.Api();


     // URL Gambar Badge (Pastikan path ini benar di server lo)
     // 1. Ambil Data User Terverifikasi & Gambar secara bersamaan
     var badgeUrl = mw.config.get('wgScriptPath') + '/images/Verified_Badge.png';
    $.when(
        api.get({ action: 'query', list: 'categorymembers', cmtitle: 'Category:Pengguna_Terverifikasi', cmlimit: 'max' }),
        api.parse('[[Berkas:Verified_Badge.png|20px|link=|middle]]')
     ).done(function(userRes, imgRes) {
        var verifiedUsers = userRes[0].query.categorymembers.map(function(m) { return m.title.replace('Pengguna:', ''); });
        var badgeHtml = $(imgRes[0]).find('img').first(); // Ambil elemen gambarnya saja


    // --- 1. CSS UNTUK TAMPILAN INSTAN (ANTI-DELAY) ---
         if (!badgeHtml.length) return; // Guard jika gambar gagal load
    $('head').append(`
         <style>
            .mippedia-verified::after {
                content: '';
                display: inline-block;
                background: url("${badgeUrl}") no-repeat center center;
                background-size: contain;
                vertical-align: middle;
                margin-left: 4px;
            }
            /* Ukuran di Heading Profil (Besar) */
            #firstHeading .mippedia-verified::after { width: 20px; height: 20px; }
            /* Ukuran di Riwayat/Daftar (Kecil & Rapi) */
            .mw-userlink.mippedia-verified::after { width: 14px; height: 14px; }
        </style>
    `);
 
    // --- 2. LOGIKA PENEMPELAN CLASS (CEPAT & UNIK) ---
    api.get({
        action: 'query',
        list: 'categorymembers',
        cmtitle: 'Category:Pengguna_Terverifikasi',
        cmlimit: 'max'
    }).done(function(data) {
        var verifiedUsers = data.query.categorymembers.map(function(member) {
            return member.title.replace('Pengguna:', '');
        });


         function applyVerification() {
         function applyBadge() {
             // A. Di Halaman Profil
             // A. Di Halaman Profil (Besar & Gagah)
             var currentTitle = mw.config.get('wgTitle');
             var currentTitle = mw.config.get('wgTitle');
             if ((ns === 2 || ns === 3) && verifiedUsers.includes(currentTitle)) {
             if ((ns === 2 || ns === 3) && verifiedUsers.includes(currentTitle)) {
                 if (!$('#firstHeading .mippedia-verified').length) {
                 if (!$('#firstHeading .mippedia-badge').length) {
                     $('#firstHeading').wrapInner('<span class="mippedia-verified"></span>');
                    var $pBadge = badgeHtml.clone().css({'width': '20px', 'height': '20px', 'margin-left': '5px'});
                     $('#firstHeading').append($('<span class="mippedia-badge"></span>').append($pBadge));
                 }
                 }
             }
             }


             // B. Di Seluruh Link Pengguna (Riwayat, dll)
             // B. Di Riwayat & Link Pengguna (Kecil & Rapi)
             $('.mw-userlink').each(function() {
             $('.mw-userlink').each(function() {
                 var $this = $(this);
                 var $this = $(this);
                 var username = $this.text().trim();
                 var username = $this.text().trim();
                 // Validasi: Hanya tempel jika user terverifikasi DAN belum ada class-nya
               
                 if (verifiedUsers.includes(username) && !$this.hasClass('mippedia-verified')) {
                 // Pastikan user terverifikasi, belum ada badge, dan bukan elemen duplikat
                     $this.addClass('mippedia-verified');
                 if (verifiedUsers.includes(username) && !$this.next('.mippedia-badge-global').length) {
                    var $gBadge = badgeHtml.clone().css({'width': '14px', 'height': '14px', 'margin-left': '3px'});
                     $this.after($('<span class="mippedia-badge-global"></span>').append($gBadge));
                 }
                 }
             });
             });
         }
         }


         // Eksekusi Instan
         // Jalankan langsung & pasang hook agar saat scroll/loading baru tetap muncul (Instan)
         applyVerification();
         applyBadge();
        // Jalankan saat ada perubahan konten (AJAX) tanpa delay render gambar
         mw.hook('wikipage.content').add(applyBadge);
         mw.hook('wikipage.content').add(applyVerification);
     });
     });


     // --- 3. SISTEM PERMINTAAN & ADMIN (LOGIKA TETAP SAMA) ---
     // --- 2. SISTEM REQUEST & PANEL ADMIN (TETAP UTUH) ---
     if (ns === 2 && user && pageName.includes('Pengguna:' + user)) {  
     if (ns === 2 && user && mw.config.get('wgPageName').includes('Pengguna:' + user)) {
         var $verifyLink = $('<li>').attr({'id': 'ca-verify-request', 'class': 'mw-list-item'}).append(
         var $btn = $('<li>').addClass('mw-list-item').append($('<a>').attr('href', '#').append($('<span>').text('🔵 Verifikasi').css('font-weight','bold')));
            $('<a>').attr({'href': '#', 'title': 'Minta Verifikasi'}).css({'display': 'flex', 'align-items': 'center', 'padding': '6px 12px'})
         $btn.click(function(e) {
            .append($('<span>').html('🔵 Verifikasi').css({'color': '#0095f6', 'font-weight': 'bold'}))
        );
         $verifyLink.click(function(e) {
             e.preventDefault();
             e.preventDefault();
             sessionStorage.setItem('mippedia_verify_req', "Halo Pengurus, memohon verifikasi.");
             sessionStorage.setItem('mippedia_verify_req', "Halo Pengurus, mohon verifikasi akun saya.");
             window.location.href = mw.util.getUrl("Pembicaraan_Pengguna:" + user, { 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($verifyLink);
    }
 
    if (ns === 3 && isAdmin && $('#mw-content-text').text().includes("Sedang diverifikasi")) {
        // ... (Logika Panel Admin lo yang sudah bener tetap di sini) ...
        var targetUserPage = "Pengguna:" + mw.config.get('wgTitle');
        api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'user|content', rvlimit: 1 }).done(function(res) {
            var pg = res.query.pages[Object.keys(res.query.pages)[0]];
            var requester = pg.revisions[0].user;
            var oldContent = pg.revisions[0]['*'];
            if (!$('#mw-content-text').text().includes("Permintaan Verifikasi Profil Pengguna")) return;
 
            var $panel = $('<div style="background:#f0f7ff; border:2px solid #0095f6; padding:15px; border-radius:12px; margin-bottom:15px;">' +
                '<b style="color:#0095f6;">🔵 ADMIN VERIFICATION</b><br><small>User: '+requester+'</small></div>');
            var $btnApprove = $('<button>').text('✅ VERIFIKASI').css({'background':'#0095f6','color':'#fff','padding':'5px 12px','border':'none','cursor':'pointer','font-weight':'bold'});
 
            $btnApprove.click(function() {
                $(this).prop('disabled', true).text('Step 1/3...');
                api.postWithToken('edit', { action: 'edit', title: targetUserPage, appendtext: '\n[[Category:Pengguna_Terverifikasi]]', summary: 'Akun Terverifikasi'
                }).then(function() {
                    var newText = oldContent.replace("Status: 🕒 Sedang diverifikasi", "Status: ✅ '''Akun Terverifikasi''' 🔵");
                    return api.postWithToken('edit', { action: 'edit', title: pageName, text: newText, summary: 'Approved' });
                }).then(function() {
                    var msg = "\n== Profil Terverifikasi ==\nHalo [["+requester+"]], akun Anda resmi terverifikasi 🔵. --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 20.23 (UTC)";
                    return api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:"+requester, section: 'new', text: msg });
                }).done(function() { location.reload(); });
            });
            $panel.append($btnApprove);
            $('#mw-content-text').prepend($panel);
         });
         });
        $('#p-cactions ul').append($btn);
     }
     }
});
});