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 SYSTEM (STYLE FIX)
   🔵 MIPPEDIA ULTIMATE VERIFICATION SYSTEM (FIXED)
   Fitur: Satu Centang, Ukuran Kecil di Riwayat, & Sejajar Nama
   Fokus: Perbaikan Pop-up & Proteksi Kategori Manual
   ========================================================== */
   ========================================================== */
$(document).ready(function() {
$(document).ready(function() {
Baris 1.011: Baris 1.011:
     var api = new mw.Api();
     var api = new mw.Api();


     // --- 1. LOGIKA CENTANG BIRU GLOBAL (RIWAYAT, RECENT CHANGES, DLL) ---
     // --- 1. POP-UP TERVERIFIKASI (FIXED & CENTERED) ---
    function showVerifiedPopup() {
        // Render gambar ukuran besar khusus buat dalem Pop-up secara dinamis
        api.parse('[[Berkas:Verified_Badge.png|60px|link=|middle]]').done(function(renderedImage) {
            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="margin-bottom:15px;">' + renderedImage + '</div>' +
                '<h2 style="margin:0 0 10px 0;color:#1a1a1a;font-family:sans-serif;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>' +
                '<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>' +
                '</div></div>';
            $('body').append(modalHtml);
            $('#close-v-modal').click(function() { $('#mippedia-v-modal').remove(); });
        });
    }
 
    // --- 2. LOGIKA CENTANG BIRU GLOBAL ---
     function applyGlobalBadge($element) {
     function applyGlobalBadge($element) {
        // Cek agar tidak duplikat
         if ($element.data('has-badge') || $element.next('.mippedia-badge-global').length) return;  
         if ($element.data('has-badge') || $element.next('.mippedia-badge-global').length) return;  
          
          
         api.parse('[[Berkas:Verified_Badge.png|13px|link=|middle]]').done(function(renderedImage) {
         api.parse('[[Berkas:Verified_Badge.png|13px|link=|middle]]').done(function(renderedImage) {
             if ($element.next('.mippedia-badge-global').length) return;
             if ($element.next('.mippedia-badge-global').length) return;
             var cleanImage = $(renderedImage).find('img').first();
             var cleanImage = $(renderedImage).find('img').first();
              
              
             // Pengaturan posisi: margin-top disesuaikan agar sejajar teks nama
             // Tambah cursor pointer dan event click untuk Pop-up
             var $badge = $('<span class="mippedia-badge-global" style="margin-left: 4px; display: inline-flex; align-items: center; vertical-align: middle; position: relative; top: -1px;"></span>').append(cleanImage);
             var $badge = $('<span class="mippedia-badge-global" style="margin-left: 4px; display: inline-flex; align-items: center; vertical-align: middle; position: relative; top: -1px; cursor: pointer;"></span>').append(cleanImage);
           
            $badge.click(function(e) { e.preventDefault(); showVerifiedPopup(); });
              
              
             $element.after($badge);
             $element.after($badge);
Baris 1.029: Baris 1.045:
     }
     }


    // Ambil daftar user terverifikasi dari kategori
     api.get({
     api.get({
         action: 'query',
         action: 'query',
Baris 1.040: Baris 1.055:
         });
         });


        // Scan link pengguna di halaman riwayat/recent changes
         function scanLinks() {
         function scanLinks() {
             $('a.mw-userlink').each(function() {
             $('a.mw-userlink').each(function() {
Baris 1.053: Baris 1.067:
         mw.hook('wikipage.content').add(scanLinks);
         mw.hook('wikipage.content').add(scanLinks);


        // Khusus di Halaman Profil (firstHeading) - Tetap Besar & Sejajar
         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)) {
Baris 1.059: Baris 1.072:
                 api.parse('[[Berkas:Verified_Badge.png|20px|link=|middle]]').done(function(renderedImage) {
                 api.parse('[[Berkas:Verified_Badge.png|20px|link=|middle]]').done(function(renderedImage) {
                     var cleanImage = $(renderedImage).find('img').first();
                     var cleanImage = $(renderedImage).find('img').first();
                     $('#firstHeading').append($('<span class="mippedia-profile-badge" style="margin-left: 6px; display: inline-flex; align-items: center; vertical-align: middle;"></span>').append(cleanImage));
                     var $pBadge = $('<span class="mippedia-profile-badge" style="margin-left: 6px; display: inline-flex; align-items: center; vertical-align: middle; cursor: pointer;"></span>').append(cleanImage);
                   
                    // Pemicu Pop-up di Profil
                    $pBadge.click(function() { showVerifiedPopup(); });
                    $('#firstHeading').append($pBadge);
                 });
                 });
             }
             }
Baris 1.065: Baris 1.082:
     });
     });


     // --- 2. AUTO-FILL TEKS PERMINTAAN ---
     // --- 3. AUTO-FILL TEKS PERMINTAAN ---
     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');
Baris 1.071: Baris 1.088:
         sessionStorage.removeItem('mippedia_verify_req');
         sessionStorage.removeItem('mippedia_verify_req');
     }
     }
   
 
    // --- 1. POP-UP TERVERIFIKASI (FIXED & CENTERED) ---
     // --- 4. PROTEKSI KATEGORI (REVISED & STRONGER) ---
    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;">' +
            '<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;">' +
            '<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>' +
            '<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>' +
            '<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>' +
            '</div></div>';
        $('body').append(modalHtml);
        $('#close-v-modal').click(function() { $('#mippedia-v-modal').remove(); });
     }
   
// --- 3. PROTEKSI KATEGORI (KHUSUS NAMESPACE 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) {
        // Gunakan mousedown pada tombol save untuk cek sebelum submit terkirim
         $('#wpSave, #wpPreview, #wpDiff').on('click', function(e) {
             var $box = $('#wpTextbox1');
             var $box = $('#wpTextbox1');
             var content = $box.val();
             var content = $box.val();
Baris 1.093: Baris 1.098:


             if (catPattern.test(content) && !sessionStorage.getItem('is_system_verify')) {
             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.");
                 alert("⚠️ AKSES DITOLAK: Penambahan kategori verifikasi secara manual dilarang!\n\nKategori akan dihapus secara otomatis.");
                 $box.val(content.replace(catPattern, ''));  
                 $box.val(content.replace(catPattern, ''));  
                e.preventDefault();
                 return false;
                 return false;
             }
             }
Baris 1.100: Baris 1.106:
     }
     }


     // --- 3. TOMBOL MINTA VERIFIKASI ---
     // --- 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.119: Baris 1.125:
     }
     }


     // --- 4. PANEL ADMIN VERIFIKASI ---
     // --- 6. PANEL ADMIN VERIFIKASI ---
     if (ns === 3 && isAdmin && $('#mw-content-text').text().includes("Sedang diverifikasi")) {
     if (ns === 3 && isAdmin && $('#mw-content-text').text().includes("Sedang diverifikasi")) {
         var targetUserPage = "Pengguna:" + mw.config.get('wgTitle');
         var targetUserPage = "Pengguna:" + mw.config.get('wgTitle');
Baris 1.134: Baris 1.140:
             $btnApprove.click(function() {
             $btnApprove.click(function() {
                 $(this).prop('disabled', true).text('Processing...');
                 $(this).prop('disabled', true).text('Processing...');
                // Set flag agar proteksi kategori tidak memblokir aksi admin
                sessionStorage.setItem('is_system_verify', 'true');
                 api.postWithToken('edit', { action: 'edit', title: targetUserPage, appendtext: '\n[[Category:Pengguna_Terverifikasi]]', summary: 'Akun Terverifikasi'
                 api.postWithToken('edit', { action: 'edit', title: targetUserPage, appendtext: '\n[[Category:Pengguna_Terverifikasi]]', summary: 'Akun Terverifikasi'
                 }).then(function() {
                 }).then(function() {
Baris 1.139: Baris 1.147:
                     return api.postWithToken('edit', { action: 'edit', title: pageName, text: newText, summary: 'Approved' });
                     return api.postWithToken('edit', { action: 'edit', title: pageName, text: newText, summary: 'Approved' });
                 }).then(function() {
                 }).then(function() {
                     var msg = "\n== Profil Terverifikasi ==\nHalo [["+requester+"]], akun Anda resmi terverifikasi dengan centang biru 🔵. --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 22.34 (UTC)";
                     var msg = "\n== Profil Terverifikasi ==\nHalo [["+requester+"]], akun Anda resmi terverifikasi dengan centang biru 🔵. --[[Pengguna:Admin|Admin]]";
                     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() { location.reload(); });
                 }).done(function() {  
                    sessionStorage.removeItem('is_system_verify');
                    location.reload();  
                });
             });
             });
             $panel.append($btnApprove);
             $panel.append($btnApprove);