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 IRONCLAD | 🔵 MIPPEDIA IRONCLAD SYSTEM V2 | ||
Fitur: | Fitur: Proteksi Kategori Ketat, Pop-up Centered, & Full Auto | ||
========================================================== */ | ========================================================== */ | ||
$(document).ready(function() { | $(document).ready(function() { | ||
| Baris 1.011: | Baris 1.011: | ||
api = new mw.Api(); | api = new mw.Api(); | ||
// --- 1. | // URL Gambar Centang Biru Asli | ||
var vBadgeUrl = mw.config.get('wgScriptPath') + '/index.php?title=Special:Redirect/file/Verified_Badge.png'; | |||
// --- 1. POP-UP TERVERIFIKASI (FIX TAMPILAN) --- | |||
function showVerifiedPopup() { | 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. | var modalHtml = '<div id="mippedia-v-modal" 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;">' + | ||
'<div style="background:#fff;padding: | '<div style="background:#fff;padding:30px;border-radius:20px;width:85%;max-width:350px;text-align:center;box-shadow:0 15px 35px rgba(0,0,0,0.4);position:relative;margin:auto;">' + | ||
'< | '<img src="' + vBadgeUrl + '&width=60" style="width:60px;height:60px;margin-bottom:20px;">' + | ||
'<h2 style="margin | '<h2 style="margin:0 0 15px 0;color:#1a1a1a;font-family:sans-serif;font-size:22px;">Akun Terverifikasi</h2>' + | ||
'<p style="color:# | '<p style="color:#555;line-height:1.6;font-size:14px;margin-bottom:25px;font-family:sans-serif;">Mippedia telah mengonfirmasi bahwa individu atau entitas ini adalah asli. Akun ini telah melewati proses verifikasi ketat untuk memastikan kredibilitas dan mencegah peniruan identitas.</p>' + | ||
'<button id="close-v-modal" style="background:#0095f6;color:#fff;border:none;padding: | '<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:16px;">Mengerti</button>' + | ||
'</div></div>'; | '</div></div>'; | ||
$('body').append(modalHtml); | $('body').append(modalHtml); | ||
| Baris 1.024: | Baris 1.027: | ||
} | } | ||
// --- 2. RENDER BADGE (RIWAYAT & PROFIL) --- | |||
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:', ''); }); | ||
mw.hook('wikipage.content').add(function() { | mw.hook('wikipage.content').add(function() { | ||
$(' | $('.mw-userlink').each(function() { | ||
var name = $(this).text().trim(); | var name = $(this).text().trim(); | ||
if (vUsers.includes(name) && !$(this).next('.mp-v-g').length) { | 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 | $(this).after('<span class="mp-v-g" style="margin-left:3px;vertical-align:middle;display:inline-block;"><img src="' + vBadgeUrl + '&width=13" style="width:13px;height:13px;position:relative;top:-1px;"></span>'); | ||
} | } | ||
}); | }); | ||
}); | }); | ||
var currentTitle = mw.config.get('wgTitle'); | var currentTitle = mw.config.get('wgTitle'); | ||
if ((ns === 2 || ns === 3) && vUsers.includes(currentTitle) && !$('#firstHeading .mp-v-p').length) { | 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="' + | var $pBadge = $('<span class="mp-v-p" style="margin-left:6px;vertical-align:middle;display:inline-flex;cursor:pointer;"><img src="' + vBadgeUrl + '&width=20" style="width:20px;height:20px;"></span>'); | ||
$pBadge.click(showVerifiedPopup); | $pBadge.click(showVerifiedPopup); | ||
$('#firstHeading').append($pBadge); | $('#firstHeading').append($pBadge); | ||
| Baris 1.046: | Baris 1.048: | ||
}); | }); | ||
// --- | // --- 3. PROTEKSI KATEGORI (SATPAM KETAT) --- | ||
if ( | if (['edit', 'submit'].includes(mw.config.get('wgAction'))) { | ||
function checkCategory() { | |||
var $box = $('#wpTextbox1'); | var $box = $('#wpTextbox1'); | ||
if (!$box.length) return; | |||
var content = $box.val(); | var content = $box.val(); | ||
var | var catPattern = /\[\[Category:Pengguna_Terverifikasi\]\]/gi; | ||
// | // Jika ada kategori manual dinput & bukan lewat sistem otomatis | ||
if (!sessionStorage.getItem('is_system_verify')) { | if (catPattern.test(content) && !sessionStorage.getItem('is_system_verify')) { | ||
alert("⚠️ AKSES DITOLAK: Kategori verifikasi tidak boleh ditambahkan secara manual!\n\nGunakan tombol 'Verifikasi' di menu profil."); | |||
$box.val(content.replace(catPattern, '')); // Hapus teksnya secara paksa | |||
return false; | |||
} | |||
return true; | |||
} | } | ||
// Cek saat tombol simpan diklik | |||
$('#wpSave, #wpPreview, #wpDiff').on('click', function(e) { | |||
if (!checkCategory()) { | |||
e.preventDefault(); | |||
return false; | |||
} | } | ||
}); | }); | ||
} | } | ||
// --- | // --- 4. 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.getItem('mippedia_verify_req') + "\n\n<div class='mippedia-status'>'''Status: 🕒 Sedang diverifikasi'''</div>\n\n--" + user); | ||
| Baris 1.072: | Baris 1.082: | ||
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'}))); | if (!$('#ca-verify-request').length) { | ||
var $btn = $('<li>').attr('id','ca-verify-request').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."); | |||
window.location.href = mw.util.getUrl("Pembicaraan_Pengguna:" + user, { action: 'edit', section: 'new' }); | |||
}); | |||
$('#p-cactions ul, #p-views ul').append($btn); | |||
} | |||
} | } | ||
// --- | // --- 5. PANEL ADMIN (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 $pnl = $('<div style="background:#f0f7ff;border:2px solid #0095f6;padding:12px;border-radius:10px;margin-bottom:10px">').append('<b>🔵 ADMIN SYSTEM</b><br>'); | var $pnl = $('<div style="background:#f0f7ff;border:2px solid #0095f6;padding:12px;border-radius:10px;margin-bottom:10px">').append('<b>🔵 ADMIN SYSTEM</b><br>'); | ||
| Baris 1.088: | Baris 1.100: | ||
$btnApprove.click(function() { | $btnApprove.click(function() { | ||
$(this).prop('disabled', true).text('Working...'); | $(this).prop('disabled', true).text('Working...'); | ||
sessionStorage.setItem('is_system_verify', 'true'); // Flag | sessionStorage.setItem('is_system_verify', 'true'); // Flag bypass satpam | ||
api.postWithToken('edit', { action: 'edit', title: "Pengguna:" + mw.config.get('wgTitle'), appendtext: '\n[[Category:Pengguna_Terverifikasi]]', summary: 'System: Account Verified' }) | api.postWithToken('edit', { action: 'edit', title: "Pengguna:" + mw.config.get('wgTitle'), appendtext: '\n[[Category:Pengguna_Terverifikasi]]', summary: 'System: Account Verified' }) | ||
.then(function() { | .then(function() { | ||
var newT = $('#mw-content-text').text().replace("Status: 🕒 Sedang diverifikasi", "Status: ✅ '''Akun Terverifikasi''' 🔵"); | |||
return api.postWithToken('edit', { action: 'edit', title: pageName, text: newT, summary: 'Approved' }); | |||
}).done(function() { | }).done(function() { | ||
sessionStorage.removeItem('is_system_verify'); | sessionStorage.removeItem('is_system_verify'); | ||