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.002: Baris 1.002:
/* ==========================================================
/* ==========================================================
     🔵 MIPPEDIA ACCOUNT VERIFICATION SYSTEM
     🔵 MIPPEDIA ACCOUNT VERIFICATION SYSTEM
     Basis: Kode Stabil User + Pop-up (Teknik Berkas Wiki)
     Fix: Posisi Centang Sejajar (Inline) & Pop-up
   ========================================================== */
   ========================================================== */
$(document).ready(function() {
$(document).ready(function() {
Baris 1.009: Baris 1.009:
     var ns = mw.config.get('wgNamespaceNumber');
     var ns = mw.config.get('wgNamespaceNumber');
     var isAdmin = mw.config.get('wgUserGroups').includes('sysop');
     var isAdmin = mw.config.get('wgUserGroups').includes('sysop');
    var $content = $('#mw-content-text');
     var api = new mw.Api();
     var api = new mw.Api();


    // Nama file gambar di Wiki lo
     var vFile = 'Verified_Badge.png';  
     var vFile = 'Verified_Badge.png';  


     // --- 0. SISTEM POP-UP (KOTAK INFORMASI CENTERED) ---
     // --- 0. SISTEM POP-UP ---
     function showVPopup() {
     function showVPopup() {
        // Render gambar ukuran besar khusus buat dalem Pop-up
         api.parse('[[Berkas:' + vFile + '|60px|link=|middle]]').done(function(renderedImage) {
         api.parse('[[Berkas:' + vFile + '|60px|link=|middle]]').done(function(renderedImage) {
             var modalHtml = '<div id="v-modal-overlay" style="position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.7);z-index:99999;display:flex;align-items:center;justify-content:center;">' +
             var modalHtml = '<div id="v-modal-overlay" style="position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.7);z-index:99999;display:flex;align-items:center;justify-content:center;">' +
Baris 1.031: Baris 1.028:
     }
     }


     // --- 1. RENDER CENTANG & POP-UP CLICK ---
     // --- 1. RENDER CENTANG (FIX POSISI SEJAJAR) ---
     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:', ''); });
          
          
         // Render di link nama pengguna (History/Recent Changes)
         // Render di link nama pengguna (History/RC)
         mw.hook('wikipage.content').add(function() {
         mw.hook('wikipage.content').add(function() {
             $('.mw-userlink').each(function() {
             $('.mw-userlink').each(function() {
Baris 1.041: Baris 1.038:
                 var name = $el.text().trim();
                 var name = $el.text().trim();
                 if (vUsers.includes(name) && !$el.next('.mp-v-icon').length) {
                 if (vUsers.includes(name) && !$el.next('.mp-v-icon').length) {
                    // Pake parse biar MediaWiki ngerender Berkas: jadi <img> yang bener
                     api.parse('[[Berkas:' + vFile + '|13px|link=|middle]]').done(function(renderedImage) {
                     api.parse('[[Berkas:' + vFile + '|13px|link=|middle]]').done(function(renderedImage) {
                         $el.after('<span class="mp-v-icon" style="margin-left:3px;vertical-align:middle;">' + renderedImage + '</span>');
                         $el.after('<span class="mp-v-icon" style="display:inline-block; margin-left:3px; vertical-align:middle;">' + renderedImage + '</span>');
                     });
                     });
                 }
                 }
Baris 1.049: Baris 1.045:
         });
         });


         // Render di Judul Halaman Profil (Bisa Diklik buat Pop-up)
         // Render di Judul Profil - DIPAKSA SEJAJAR (INLINE)
         var targetTitle = mw.config.get('wgTitle');
         var targetTitle = mw.config.get('wgTitle');
         if ((ns === 2 || ns === 3) && vUsers.includes(targetTitle) && !$('#firstHeading .mp-v-badge').length) {
         if ((ns === 2 || ns === 3) && vUsers.includes(targetTitle) && !$('#firstHeading .mp-v-badge').length) {
            // Render gambar ukuran standar buat di judul (20px)
             api.parse('[[Berkas:' + vFile + '|22px|link=|middle]]').done(function(renderedImage) {
             api.parse('[[Berkas:' + vFile + '|20px|link=|middle]]').done(function(renderedImage) {
                // Gunakan display:inline-flex biar nempel terus di samping teks judul
                 var $badge = $('<span class="mp-v-badge" style="margin-left:8px;vertical-align:middle;cursor:pointer;">' + renderedImage + '</span>');
                 var $badge = $('<span class="mp-v-badge" style="display:inline-flex; align-items:center; margin-left:8px; cursor:pointer; vertical-align:middle;">' + renderedImage + '</span>');
                 $badge.click(showVPopup);
                 $badge.click(showVPopup);
                 $('#firstHeading').append($badge);
               
                // Masukkan ke dalam elemen heading agar tidak pecah baris
                 $('#firstHeading').css('display', 'flex').css('align-items', 'center').append($badge);
             });
             });
         }
         }
     });
     });


     // --- 2. AUTO-FILL TEKS VERIFIKASI (KODE LO) ---
     // --- 2. LOGIKA PROTEKSI & ADMIN (TETAP SAMA SEPERTI KODE LO) ---
     if (mw.config.get('wgAction') === 'edit' && sessionStorage.getItem('mippedia_auth_verify')) {
     if (mw.config.get('wgAction') === 'edit' && sessionStorage.getItem('mippedia_auth_verify')) {
         var savedText = sessionStorage.getItem('mippedia_auth_verify');
         var savedText = sessionStorage.getItem('mippedia_auth_verify');
         var vTable = "{| class='wikitable' style='width:100%'\n|+ Bukti Identitas Resmi\n|-\n! Dokumen !! Tautan/URL Bukti\n|-\n| KTP / Paspor / SIM || (Masukkan URL Foto Bukti lo di sini, boys!)\n|-\n| Akun Medsos / Website || (Masukkan URL pembuktian identitas lainnya)\n|}";
         var vTable = "{| class='wikitable' style='width:100%'\n|+ Bukti Identitas Resmi\n|-\n! Dokumen !! Tautan/URL Bukti\n|-\n| KTP / Paspor / SIM || (Masukkan URL Foto Bukti lo di sini, boys!)\n|-\n| Akun Medsos / Website || (Masukkan URL pembuktian identitas lainnya)\n|}";
       
         $('#wpTextbox1').val(savedText + "\n\n" + vTable + "\n\n<div class='mippedia-status'>'''Status: 🕒 Sedang diverifikasi'''</div>\n\n--" + user);
         $('#wpTextbox1').val(savedText + "\n\n" + vTable + "\n\n<div class='mippedia-status'>'''Status: 🕒 Sedang diverifikasi'''</div>\n\n--" + user);
         sessionStorage.removeItem('mippedia_auth_verify');
         sessionStorage.removeItem('mippedia_auth_verify');
     }
     }


    // --- 3. TOMBOL VERIFIKASI (KODE LO) ---
     if (ns === 2 && user && pageName.includes('Pengguna:' + user) && !$('#ca-mippedia-verify').length) {
     if (ns === 2 && user && pageName.includes('Pengguna:' + user)) {
        var $vLink = $('<li>').attr({'id': 'ca-mippedia-verify', 'class': 'mw-list-item'}).append(
        if (!$('#ca-mippedia-verify').length) {
            $('<a>').attr({'href': '#'}).css({'display': 'flex', 'align-items': 'center', 'padding': '6px 12px'}).append(
            var $vLink = $('<li>').attr({'id': 'ca-mippedia-verify', 'class': 'mw-list-item'}).append(
                $('<span>').html('🔵 Verifikasi').css({'color': '#0095f6', 'font-weight': 'bold'})
                $('<a>').attr({'href': '#', 'title': 'Ajukan verifikasi akun'}).css({
            )
                    'display': 'flex', 'align-items': 'center', 'padding': '6px 12px'
        );
                }).append(
        $vLink.click(function(e) {
                    $('<span>').html('🔵 Verifikasi').css({'color': '#0095f6', 'font-weight': 'bold'})
            e.preventDefault();
                )
            sessionStorage.setItem('mippedia_auth_verify', "== Permintaan Verifikasi Akun ==\nHalo Pengurus,\n\nSaya memohon verifikasi untuk akun [[" + pageName + "]] agar mendapatkan lencana centang biru resmi.");
            );
            window.location.href = mw.util.getUrl("Pembicaraan_Pengguna:" + mw.config.get('wgTitle'), { action: 'edit', section: 'new', preloadtitle: 'Permintaan Verifikasi Akun' });
 
        });
            $vLink.click(function(e) {
        $('#p-cactions ul, #p-views ul').append($vLink);
                e.preventDefault();
                var talkPage = "Pembicaraan_Pengguna:" + mw.config.get('wgTitle');
                sessionStorage.setItem('mippedia_auth_verify', "== Permintaan Verifikasi Akun ==\nHalo Pengurus,\n\nSaya memohon verifikasi untuk akun [[" + pageName + "]] agar mendapatkan lencana centang biru resmi.");
                window.location.href = mw.util.getUrl(talkPage, { action: 'edit', section: 'new', preloadtitle: 'Permintaan Verifikasi Akun' });
            });
 
            $('#p-cactions ul, #p-views ul').append($vLink);
        }
     }
     }


    // --- 4. SISTEM PENCEGAHAN (KODE LO) ---
     if (ns === 2 && ['edit', 'submit'].includes(mw.config.get('wgAction'))) {
     if (ns === 2 && ['edit', 'submit'].includes(mw.config.get('wgAction'))) {
         $('#editform').on('submit', function() {
         $('#editform').on('submit', function() {
             var content = $('#wpTextbox1').val();
             var content = $('#wpTextbox1').val();
             if (/\[\[Category:Pengguna_Terverifikasi\]\]/gi.test(content) && !sessionStorage.getItem('is_admin_action')) {
             if (/\[\[Category:Pengguna_Terverifikasi\]\]/gi.test(content) && !sessionStorage.getItem('is_admin_action')) {
                 alert("⚠️ AKSES DITOLAK: Penambahan kategori verifikasi secara manual dilarang!\nSistem akan menghapus kategori tersebut secara otomatis.");
                 alert("⚠️ AKSES DITOLAK: Penambahan kategori secara manual dilarang!");
                 $('#wpTextbox1').val(content.replace(/\[\[Category:Pengguna_Terverifikasi\]\]/gi, ''));
                 $('#wpTextbox1').val(content.replace(/\[\[Category:Pengguna_Terverifikasi\]\]/gi, ''));
                 return false;
                 return false;
             }
             }
        });
    }
    // --- 5. PANEL ADMIN (KODE LO) ---
    if (ns === 3 && isAdmin && $content.text().includes("Sedang diverifikasi")) {
        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]['*'];
            var $panel = $('<div style="background:#f0f7ff; border:2px solid #0095f6; padding:15px; border-radius:10px; margin-bottom:15px;">' +
                '<b>🔵 ADMIN VERIFICATION CONTROL</b><br><small>Pemohon: '+requester+'</small></div>');
           
            var $btnOk = $('<button>').text('✅ SETUJUI').css({'background':'#0095f6','color':'#fff','padding':'5px 12px','border':'none','cursor':'pointer','font-weight':'bold'});
            var $btnNo = $('<button>').text('❌ TOLAK').css({'background':'#555','color':'#fff','padding':'5px 12px','border':'none','cursor':'pointer','margin-left':'10px'});
            $btnOk.click(function() {
                $(this).prop('disabled', true).text('Processing...');
                sessionStorage.setItem('is_admin_action', 'true');
                api.postWithToken('edit', {
                    action: 'edit', title: targetUserPage, appendtext: '\n[[Category:Pengguna_Terverifikasi]]', summary: 'System: 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: 'Verification Approved' });
                }).then(function() {
                    var msg = "\n== Akun Terverifikasi ==\nHalo [["+requester+"]], permohonan verifikasi lo udah disetujui, boys! Sekarang profil lo punya centang biru resmi. --[[Pengguna:Admin|Admin]] 🔵";
                    return api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:"+requester, section: 'new', text: msg });
                }).done(function() {
                    sessionStorage.removeItem('is_admin_action');
                    location.reload();
                });
            });
            $btnNo.click(function() {
                var alasan = prompt("Masukkan alasan penolakan:");
                if (!alasan) return;
                $(this).prop('disabled', true).text('Rejecting...');
               
                var newText = oldContent.replace("Status: 🕒 Sedang diverifikasi", "Status: ❌ '''Verifikasi Ditolak'''\n\nAlasan: " + alasan);
                api.postWithToken('edit', { action: 'edit', title: pageName, text: newText, summary: 'Verification Rejected' }).then(function() {
                    var msg = "\n== Notifikasi Verifikasi ==\nHalo [["+requester+"]], permohonan verifikasi lo ditolak karena: " + alasan + ". Silakan ajukan ulang dengan bukti lebih kuat, boys! --[[Pengguna:Admin|Admin]]";
                    return api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:"+requester, section: 'new', text: msg });
                }).done(function() {
                    location.reload();
                });
            });
            $panel.append($btnOk, $btnNo);
            $('#mw-content-text').prepend($panel);
         });
         });
     }
     }
});
});