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 (TECH-SYNC)
   🔵 MIPPEDIA ULTIMATE VERIFICATION SYSTEM
   Fitur: Request Badge, Auto-Notif, & Centang Biru (Metode Berkas)
   Gabungan: Request, Auto-Notif, Admin Panel, & Global Badge
   ========================================================== */
   ========================================================== */
$(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();


     // --- 1. DISPLAY CENTANG BIRU (PAKE CARA KODE BERKAS) ---
     // --- 1. LOGIKA CENTANG BIRU GLOBAL (RIWAYAT, RECENT CHANGES, DLL) ---
     if (ns === 2 || ns === 3) {
     function applyGlobalBadge($element) {
         var api = new mw.Api();
         if ($element.data('has-badge')) return;  
         api.get({
         api.parse('[[Berkas:Verified_Badge.png|14px|link=|middle]]').done(function(renderedImage) {
            action: 'query',
             var cleanImage = $(renderedImage).find('img').first();
            prop: 'categories',
             var $badge = $('<span style="margin-left: 3px; vertical-align: middle; display: inline-block;"></span>').append(cleanImage);
            titles: pageName,
             $element.after($badge);
            clcategories: 'Category:Pengguna_Terverifikasi'
            $element.data('has-badge', true);
        }).done(function(data) {
        });
             var pages = data.query.pages;
    }
             var isVerified = false;
             for (var id in pages) {
                if (pages[id].categories) isVerified = true;
            }


            if (isVerified) {
    // Ambil daftar user terverifikasi dari kategori
                // Pake teknik 'parse' biar gambar Verified_Badge.png pasti muncul
    api.get({
                api.parse('[[Berkas:Verified_Badge.png|20px|link=|middle]]')
        action: 'query',
                    .done(function(renderedImage) {
        list: 'categorymembers',
                        // Hilangkan tag <p> bawaan hasil parse agar tidak berantakan
        cmtitle: 'Category:Pengguna_Terverifikasi',
                        var cleanImage = $(renderedImage).find('img').first() || renderedImage;
        cmlimit: 'max'
                       
    }).done(function(data) {
                        // Masukkan tepat di sebelah nama (firstHeading)
        var verifiedUsers = data.query.categorymembers.map(function(member) {
                        var badgeHtml = $('<span style="margin-left: 5px; vertical-align: middle; display: inline-block;"></span>').append(cleanImage);
            return member.title.replace('Pengguna:', '');
                        $('#firstHeading').append(badgeHtml);
                    });
            }
         });
         });
     }
 
        // Scan link pengguna di halaman riwayat/recent changes
        function scanLinks() {
            $('a.mw-userlink').each(function() {
                var username = $(this).text().trim();
                if (verifiedUsers.includes(username)) {
                    applyGlobalBadge($(this));
                }
            });
        }
 
        // Jalankan scan & pasang hook untuk konten dinamis
        scanLinks();
        mw.hook('wikipage.content').add(scanLinks);
 
        // Khusus di Halaman Profil (firstHeading)
        var currentTitle = mw.config.get('wgTitle');
        if ((ns === 2 || ns === 3) && verifiedUsers.includes(currentTitle)) {
            api.parse('[[Berkas:Verified_Badge.png|20px|link=|middle]]').done(function(renderedImage) {
                var cleanImage = $(renderedImage).find('img').first();
                $('#firstHeading').append($('<span style="margin-left: 5px; vertical-align: middle;"></span>').append(cleanImage));
            });
        }
     });


     // --- 2. AUTO-FILL TEKS PERMINTAAN ---
     // --- 2. AUTO-FILL TEKS PERMINTAAN ---
Baris 1.057: Baris 1.073:
             )
             )
         );
         );
         $verifyLink.click(function(e) {
         $verifyLink.click(function(e) {
             e.preventDefault();
             e.preventDefault();
            var talkPage = "Pembicaraan_Pengguna:" + user;
             sessionStorage.setItem('mippedia_verify_req', "Halo Pengurus,\n\nSaya memohon verifikasi untuk akun [[" + pageName + "]] agar terverifikasi.");
             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("Pembicaraan_Pengguna:" + user, { action: 'edit', section: 'new', preloadtitle: 'Permintaan Verifikasi Profil Pengguna' });
         });
         });
         $('#p-cactions ul, #p-views ul').append($verifyLink);
         $('#p-cactions ul, #p-views ul').append($verifyLink);
     }
     }


     // --- 4. PANEL ADMIN VERIFIKASI (SISTEM OTOMATIS) ---
     // --- 4. PANEL ADMIN VERIFIKASI (SISTEM OTOMATIS) ---
     if (ns === 3 && isAdmin && $content.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');
       
         api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'user|content', rvlimit: 1 }).done(function(res) {
         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 pg = res.query.pages[Object.keys(res.query.pages)[0]];
             var requester = pg.revisions[0].user;
             var requester = pg.revisions[0].user;
             var oldContent = pg.revisions[0]['*'];
             var oldContent = pg.revisions[0]['*'];
 
             if (!$('#mw-content-text').text().includes("Permintaan Verifikasi Profil Pengguna")) return;
             if (!$content.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;">' +
             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>');
                 '<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'});
             var $btnReject = $('<button>').text('❌ TOLAK').css({'background':'#555','color':'#fff','padding':'5px 12px','border':'none','cursor':'pointer','margin-left':'10px'});
             var $btnReject = $('<button>').text('❌ TOLAK').css({'background':'#555','color':'#fff','padding':'5px 12px','border':'none','cursor':'pointer','margin-left':'10px'});
Baris 1.089: Baris 1.099:
                 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() {
                    $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: 'Approved' });
                     return api.postWithToken('edit', { action: 'edit', title: pageName, text: newText, summary: 'Approved' });
                 }).then(function() {
                 }).then(function() {
                    $btnApprove.text('Step 3/3...');
                     var msg = "\n== Profil Terverifikasi ==\nHalo [["+requester+"]], akun Anda resmi terverifikasi dengan centang biru 🔵. --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 20.19 (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() { location.reload(); });
                    location.reload();
                });
             });
             });


Baris 1.104: Baris 1.110:
                 var alasan = prompt("Alasan:");
                 var alasan = prompt("Alasan:");
                 if (!alasan) return;
                 if (!alasan) return;
                $(this).prop('disabled', true).text('Rejecting...');
                 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+"]], verifikasi profil Anda ditolak: " + alasan + " --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 20.10 (UTC)";
                     var msg = "\n== Notifikasi Verifikasi ==\nHalo [["+requester+"]], verifikasi ditolak: " + alasan + " --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 20.19 (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() { location.reload(); });
                    location.reload();
                });
             });
             });
             $panel.append($btnApprove, $btnReject);
             $panel.append($btnApprove, $btnReject);
             $('#mw-content-text').prepend($panel);
             $('#mw-content-text').prepend($panel);