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 USER VERIFICATION SYSTEM (FIXED IMAGE)
   🔵 MIPPEDIA USER VERIFICATION SYSTEM (TECH-SYNC)
   Fitur: Request Badge, Auto-Notif, & Blue Tick Anti-Broken
   Fitur: Request Badge, Auto-Notif, & Centang Biru (Metode Berkas)
   ========================================================== */
   ========================================================== */
$(document).ready(function() {
$(document).ready(function() {
Baris 1.011: Baris 1.011:
     var $content = $('#mw-content-text');
     var $content = $('#mw-content-text');


     // --- 1. DISPLAY CENTANG BIRU (FIX POSISI & URL GAMBAR) ---
     // --- 1. DISPLAY CENTANG BIRU (PAKE CARA KODE BERKAS) ---
     if (ns === 2 || ns === 3) {
     if (ns === 2 || ns === 3) {
         var api = new mw.Api();
         var api = new mw.Api();
         api.get({
         api.get({
             action: 'query',
             action: 'query',
             prop: 'categories|imageinfo', // Minta info kategori dan info gambar sekaligus
             prop: 'categories',
             titles: pageName,
             titles: pageName,
             clcategories: 'Category:Pengguna_Terverifikasi',
             clcategories: 'Category:Pengguna_Terverifikasi'
            generator: 'images',
            gimprefix: 'Verified_Badge.png', // Cari file badge-nya
            iiprop: 'url'
         }).done(function(data) {
         }).done(function(data) {
             var pages = data.query.pages;
             var pages = data.query.pages;
             var isVerified = false;
             var isVerified = false;
            var finalImageUrl = "";
            // Cek apakah kategori terverifikasi ada
             for (var id in pages) {
             for (var id in pages) {
                 if (pages[id].categories) isVerified = true;
                 if (pages[id].categories) isVerified = true;
                // Ambil URL asli dari Verified_Badge.png
                if (pages[id].title && pages[id].title.includes('Verified_Badge.png')) {
                    finalImageUrl = pages[id].imageinfo[0].url;
                }
             }
             }


            // Jika terverifikasi, munculkan badge dengan URL yang sudah divalidasi
             if (isVerified) {
             if (isVerified) {
                 // Jika URL API gagal, kita pake fallback manual yang lebih kuat
                 // Pake teknik 'parse' biar gambar Verified_Badge.png pasti muncul
                 var badgeSrc = finalImageUrl || (mw.config.get('wgScriptPath') + '/images/6/6b/Verified_Badge.png');
                 api.parse('[[Berkas:Verified_Badge.png|20px|link=|middle]]')
               
                    .done(function(renderedImage) {
                var badgeHtml = ' <img id="mippedia-user-badge" src="' + badgeSrc + '" width="18" height="18" style="vertical-align: middle; margin-left: 5px; display: inline-block;" title="Profil Terverifikasi">';
                        // Hilangkan tag <p> bawaan hasil parse agar tidak berantakan
                $('#firstHeading').append(badgeHtml);
                        var cleanImage = $(renderedImage).find('img').first() || renderedImage;
                       
                        // Masukkan tepat di sebelah nama (firstHeading)
                        var badgeHtml = $('<span style="margin-left: 5px; vertical-align: middle; display: inline-block;"></span>').append(cleanImage);
                        $('#firstHeading').append(badgeHtml);
                    });
             }
             }
         });
         });
Baris 1.050: Baris 1.044:
     if (mw.config.get('wgAction') === 'edit' && sessionStorage.getItem('mippedia_verify_req')) {
     if (mw.config.get('wgAction') === 'edit' && sessionStorage.getItem('mippedia_verify_req')) {
         var savedText = sessionStorage.getItem('mippedia_verify_req');
         var savedText = sessionStorage.getItem('mippedia_verify_req');
         $('#wpTextbox1').val(savedText + "\n\n**Persyaratan Verifikasi:** \n(Lampirkan bukti profil/identitas, boys!) \n\n<div class='mippedia-status'>'''Status: 🕒 Sedang diverifikasi'''</div>\n\n--" + user);
         $('#wpTextbox1').val(savedText + "\n\n**Persyaratan Verifikasi:** \n(Tulis alasan verifikasi, boys!) \n\n<div class='mippedia-status'>'''Status: 🕒 Sedang diverifikasi'''</div>\n\n--" + user);
         sessionStorage.removeItem('mippedia_verify_req');
         sessionStorage.removeItem('mippedia_verify_req');
     }
     }


     // --- 3. TOMBOL MINTA VERIFIKASI ---
     // --- 3. TOMBOL MINTA VERIFIKASI (DI MENU TAB) ---
     if (ns === 2 && user && pageName.includes('Pengguna:' + user)) {  
     if (ns === 2 && user && pageName.includes('Pengguna:' + user)) {  
         var $verifyLink = $('<li>').attr({'id': 'ca-verify-request', 'class': 'mw-list-item'}).append(
         var $verifyLink = $('<li>').attr({'id': 'ca-verify-request', 'class': 'mw-list-item'}).append(
             $('<a>').attr({'href': '#', 'title': 'Minta Lencana Verifikasi'}).css({
             $('<a>').attr({'href': '#', 'title': 'Minta Verifikasi'}).css({
                 'display': 'flex', 'align-items': 'center', 'padding': '6px 12px'
                 'display': 'flex', 'align-items': 'center', 'padding': '6px 12px'
             }).append(
             }).append(
                 $('<span>').html('🔵 Verifikasi Profil').css({'color': '#0095f6', 'font-weight': 'bold', 'margin-left': '2px'})
                 $('<span>').html('🔵 Verifikasi').css({'color': '#0095f6', 'font-weight': 'bold', 'margin-left': '2px'})
             )
             )
         );
         );
Baris 1.067: Baris 1.061:
             e.preventDefault();
             e.preventDefault();
             var talkPage = "Pembicaraan_Pengguna:" + user;
             var talkPage = "Pembicaraan_Pengguna:" + user;
             sessionStorage.setItem('mippedia_verify_req', "Halo Pengurus,\n\nSaya memohon verifikasi untuk profil pengguna saya di [[" + pageName + "]] guna mendapatkan lencana biru.");
             sessionStorage.setItem('mippedia_verify_req', "Halo Pengurus,\n\nSaya memohon verifikasi untuk akun [[" + pageName + "]] agar terverifikasi.");
             window.location.href = mw.util.getUrl(talkPage, { action: 'edit', section: 'new', preloadtitle: 'Permintaan Verifikasi Profil Pengguna' });
             window.location.href = mw.util.getUrl(talkPage, { action: 'edit', section: 'new', preloadtitle: 'Permintaan Verifikasi Profil Pengguna' });
         });
         });
Baris 1.074: Baris 1.068:
     }
     }


     // --- 4. PANEL ADMIN VERIFIKASI (LOGIKA TETAP SAMA) ---
     // --- 4. PANEL ADMIN VERIFIKASI (SISTEM OTOMATIS) ---
     if (ns === 3 && isAdmin && $content.text().includes("Sedang diverifikasi")) {
     if (ns === 3 && isAdmin && $content.text().includes("Sedang diverifikasi")) {
        var api = new mw.Api();
         var targetUserPage = "Pengguna:" + mw.config.get('wgTitle');
         var targetUserPage = "Pengguna:" + mw.config.get('wgTitle');
          
          
Baris 1.087: Baris 1.080:


             var $panel = $('<div style="background:#f0f7ff; border:2px solid #0095f6; padding:15px; border-radius:12px; margin-bottom:15px;">' +
             var $panel = $('<div style="background:#f0f7ff; border:2px solid #0095f6; padding:15px; border-radius:12px; margin-bottom:15px;">' +
                 '<b style="color:#0095f6;">🔵 ADMIN VERIFICATION PANEL</b><br><small>User: '+requester+'</small></div>');
                 '<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'});
             var $btnApprove = $('<button>').text('✅ VERIFIKASI').css({'background':'#0095f6','color':'#fff','padding':'5px 12px','border':'none','cursor':'pointer','font-weight':'bold'});
Baris 1.098: Baris 1.091:
                     $btnApprove.text('Step 2/3...');
                     $btnApprove.text('Step 2/3...');
                     var newText = oldContent.replace("Status: 🕒 Sedang diverifikasi", "Status: ✅ '''Akun Terverifikasi''' 🔵");
                     var newText = oldContent.replace("Status: 🕒 Sedang diverifikasi", "Status: ✅ '''Akun Terverifikasi''' 🔵");
                     return api.postWithToken('edit', { action: 'edit', title: pageName, text: newText, summary: 'Verification Approved' });
                     return api.postWithToken('edit', { action: 'edit', title: pageName, text: newText, summary: 'Approved' });
                 }).then(function() {
                 }).then(function() {
                     $btnApprove.text('Step 3/3...');
                     $btnApprove.text('Step 3/3...');
                     var msg = "\n== Selamat! Profil Anda Terverifikasi ==\nHalo [["+requester+"]], permohonan verifikasi profil [["+targetUserPage+"]] telah disetujui. Lencana biru 🔵 sudah muncul! --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 20.05 (UTC)";
                     var msg = "\n== Profil Terverifikasi ==\nHalo [["+requester+"]], akun Anda [["+targetUserPage+"]] resmi terverifikasi dengan centang biru 🔵. --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 20.10 (UTC)";
                     return api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:"+requester, section: 'new', text: msg });
                     return api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:"+requester, section: 'new', text: msg });
                 }).done(function() {
                 }).done(function() {
Baris 1.114: Baris 1.107:
                 var newText = oldContent.replace("Status: 🕒 Sedang diverifikasi", "Status: ❌ '''Ditolak'''\n\nAlasan: " + alasan);
                 var newText = oldContent.replace("Status: 🕒 Sedang diverifikasi", "Status: ❌ '''Ditolak'''\n\nAlasan: " + alasan);
                 api.postWithToken('edit', { action: 'edit', title: pageName, text: newText, summary: 'Rejected' }).then(function() {
                 api.postWithToken('edit', { action: 'edit', title: pageName, text: newText, summary: 'Rejected' }).then(function() {
                     var msg = "\n== Notifikasi Verifikasi ==\nHalo [["+requester+"]], permohonan verifikasi profil ditolak karena: " + alasan + " --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 20.05 (UTC)";
                     var msg = "\n== Notifikasi Verifikasi ==\nHalo [["+requester+"]], verifikasi profil Anda ditolak: " + alasan + " --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 20.10 (UTC)";
                     return api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:"+requester, section: 'new', text: msg });
                     return api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:"+requester, section: 'new', text: msg });
                 }).done(function() {
                 }).done(function() {