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 | 🔵 MIPPEDIA IRONCLAD VERIFICATION SYSTEM | ||
Fitur: | Fitur: Anti-Manual Category, Pop-up Detail, & Auto-System | ||
========================================================== */ | ========================================================== */ | ||
$(document).ready(function() { | $(document).ready(function() { | ||
var user = mw.config.get('wgUserName') | var user = mw.config.get('wgUserName'), | ||
pageName = mw.config.get('wgPageName'), | |||
ns = mw.config.get('wgNamespaceNumber'), | |||
isAdmin = mw.config.get('wgUserGroups').includes('sysop'), | |||
api = new mw.Api(); | |||
// --- 1. LOGIKA CENTANG BIRU | // --- 1. LOGIKA CENTANG BIRU & POP-UP --- | ||
function | 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.6);z-index:10000;display:flex;align-items:center;justify-content:center;padding:20px;">' + | |||
'<div style="background:#fff;padding:25px;border-radius:15px;max-width:400px;text-align:center;box-shadow:0 10px 30px rgba(0,0,0,0.3);">' + | |||
'<div style="font-size:50px;margin-bottom:15px;">🔵</div>' + | |||
'<h2 style="margin-top:0;color:#333;">Akun Terverifikasi</h2>' + | |||
'<p style="color:#666;line-height:1.5;font-size:14px;">Mippedia telah mengonfirmasi bahwa individu atau entitas ini adalah asli. Akun ini telah melewati proses verifikasi ketat untuk memastikan kredibilitas dan mencegah peniruan identitas di komunitas kami.</p>' + | |||
'<button id="close-v-modal" style="background:#0095f6;color:#fff;border:none;padding:10px 25px;border-radius:20px;cursor:pointer;font-weight:bold;margin-top:10px;">Mengerti</button>' + | |||
'</div></div>'; | |||
$('body').append(modalHtml); | |||
$('#close-v-modal').click(function() { $('#mippedia-v-modal').remove(); }); | |||
} | } | ||
api.get({ action: 'query', list: 'categorymembers', cmtitle: 'Category:Pengguna_Terverifikasi', cmlimit: 'max' }).done(function(d) { | |||
api.get({ | var vUsers = d.query.categorymembers.map(function(m) { return m.title.replace('Pengguna:', ''); }); | ||
var | |||
// | // Badge di Riwayat (Kecil) | ||
function | mw.hook('wikipage.content').add(function() { | ||
$('a.mw-userlink').each(function() { | $('a.mw-userlink').each(function() { | ||
var | var name = $(this).text().trim(); | ||
if ( | if (vUsers.includes(name) && !$(this).next('.mp-v-g').length) { | ||
$(this).after('<span class="mp-v-g" style="margin-left:3px;vertical-align:middle;display:inline-block;cursor:default;"><img src="' + mw.config.get('wgScriptPath') + '/index.php?title=Special:Redirect/file/Verified_Badge.png&width=13" style="width:13px;height:13px;position:relative;top:-1px;"></span>'); | |||
} | } | ||
}); | }); | ||
} | }); | ||
// | // Badge di Profil (Besar + Klik Pop-up) | ||
var currentTitle = mw.config.get('wgTitle'); | var currentTitle = mw.config.get('wgTitle'); | ||
if ((ns === 2 || ns === 3) && | if ((ns === 2 || ns === 3) && vUsers.includes(currentTitle) && !$('#firstHeading .mp-v-p').length) { | ||
var $pBadge = $('<span class="mp-v-p" style="margin-left:6px;vertical-align:middle;display:inline-flex;cursor:pointer;"><img src="' + mw.config.get('wgScriptPath') + '/index.php?title=Special:Redirect/file/Verified_Badge.png&width=20" style="width:20px;height:20px;"></span>'); | |||
$pBadge.click(showVerifiedPopup); | |||
$('#firstHeading').append($pBadge); | |||
} | } | ||
}); | }); | ||
// --- 2. AUTO-FILL | // --- 2. PROTEKSI KATEGORI MANUAL (SATPAM) --- | ||
if (mw.config.get('wgAction') === 'edit' || mw.config.get('wgAction') === 'submit') { | |||
$('#editform').on('submit', function(e) { | |||
var $box = $('#wpTextbox1'); | |||
var content = $box.val(); | |||
var catTag = /\[\[Category:Pengguna_Terverifikasi\]\]/gi; | |||
// Logika: Jika user bukan sistem verifikasi otomatis (tidak ada flag di session) | |||
if (!sessionStorage.getItem('is_system_verify')) { | |||
// Jika teks kategori ada, cek apakah sebelumnya sudah ada (menghapus dibolehkan, menambah dilarang) | |||
if (catTag.test(content)) { | |||
// Cari konten versi asli dari database (jika bisa) atau blokir penambahan baru | |||
alert("⚠️ KEAMANAN: Kategori verifikasi tidak boleh ditambahkan secara manual! Silakan gunakan sistem verifikasi resmi."); | |||
$box.val(content.replace(catTag, '')); // Hapus paksa teks kategorinya | |||
} | |||
} | |||
}); | |||
} | |||
// --- 3. AUTO-FILL & REQUEST --- | |||
if (mw.config.get('wgAction') === 'edit' && sessionStorage.getItem('mippedia_verify_req')) { | if (mw.config.get('wgAction') === 'edit' && sessionStorage.getItem('mippedia_verify_req')) { | ||
$('#wpTextbox1').val(sessionStorage.getItem('mippedia_verify_req') + "\n\n<div class='mippedia-status'>'''Status: 🕒 Sedang diverifikasi'''</div>\n\n--" + user); | |||
$('#wpTextbox1').val( | |||
sessionStorage.removeItem('mippedia_verify_req'); | sessionStorage.removeItem('mippedia_verify_req'); | ||
} | } | ||
if (ns === 2 && user && pageName.includes('Pengguna:' + user)) { | |||
if (ns === 2 && user && pageName.includes('Pengguna:' + user)) { | var $btn = $('<li>').addClass('mw-list-item').append($('<a>').attr('href', '#').append($('<span>').text('🔵 Verifikasi').css({'color':'#0095f6','font-weight':'bold'}))); | ||
$btn.click(function(e) { | |||
e.preventDefault(); | |||
sessionStorage.setItem('mippedia_verify_req', "Halo Pengurus,\n\nMohon verifikasi akun saya agar terverifikasi."); | |||
window.location.href = mw.util.getUrl("Pembicaraan_Pengguna:" + user, { action: 'edit', section: 'new' }); | |||
}); | |||
$('#p-cactions ul, #p-views ul').append($btn); | |||
} | } | ||
// --- 4. PANEL ADMIN | // --- 4. PANEL ADMIN (DENGAN BYPASS PROTEKSI) --- | ||
if (ns === 3 && isAdmin && $('#mw-content-text').text().includes("Sedang diverifikasi")) { | if (ns === 3 && isAdmin && $('#mw-content-text').text().includes("Sedang diverifikasi")) { | ||
var | var $pnl = $('<div style="background:#f0f7ff;border:2px solid #0095f6;padding:12px;border-radius:10px;margin-bottom:10px">').append('<b>🔵 ADMIN SYSTEM</b><br>'); | ||
var $btnApprove = $('<button>').text('✅ APPROVE').css({'background':'#0095f6','color':'#fff','border':'none','padding':'5px 15px','cursor':'pointer','font-weight':'bold','border-radius':'4px'}); | |||
$btnApprove.click(function() { | |||
$(this).prop('disabled', true).text('Working...'); | |||
sessionStorage.setItem('is_system_verify', 'true'); // Flag agar tidak diblokir satpam | |||
api.postWithToken('edit', { action: 'edit', title: "Pengguna:" + mw.config.get('wgTitle'), appendtext: '\n[[Category:Pengguna_Terverifikasi]]', summary: 'System: Account Verified' }) | |||
.then(function() { | |||
return api.postWithToken('edit', { action: 'edit', title: pageName, text: $('#mw-content-text').text().replace("Status: 🕒 Sedang diverifikasi", "Status: ✅ '''Akun Terverifikasi''' 🔵"), summary: 'Approved' }); | |||
}).done(function() { | |||
sessionStorage.removeItem('is_system_verify'); | |||
location.reload(); | |||
}); | }); | ||
}); | }); | ||
$('#mw-content-text').prepend($pnl.append($btnApprove)); | |||
} | } | ||
}); | }); | ||