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 (V3 - HIGH SECURITY) | |||
Fitur: Identitas Rahasia, Tombol Tolak, & Auto-Purge Data | |||
========================================================== */ | |||
$(document).ready(function() { | $(document).ready(function() { | ||
var user = mw.config.get('wgUserName'); | |||
var pageName = mw.config.get('wgPageName'); | |||
var ns = mw.config.get('wgNamespaceNumber'); | |||
var isAdmin = mw.config.get('wgUserGroups').includes('sysop'); | |||
var api = new mw.Api(); | |||
var vFile = 'Verified_Badge.png'; | |||
// --- 1. POP-UP TERVERIFIKASI --- | |||
function showVerifiedPopup() { | |||
api.parse('[[Berkas:' + vFile + '|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) { | |||
if ($element.data('has-badge') || $element.next('.mippedia-badge-global').length) return; | |||
api.parse('[[Berkas:' + vFile + '|13px|link=|middle]]').done(function(renderedImage) { | |||
if ($element.next('.mippedia-badge-global').length) return; | |||
var cleanImage = $(renderedImage).find('img').first(); | |||
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.data('has-badge', true); | |||
}); | |||
} | |||
api.get({ action: 'query', list: 'categorymembers', cmtitle: 'Category:Pengguna_Terverifikasi', cmlimit: 'max' }).done(function(data) { | |||
var verifiedUsers = data.query.categorymembers.map(function(member) { return member.title.replace('Pengguna:', ''); }); | |||
function scanLinks() { | |||
$('a.mw-userlink').each(function() { | |||
var username = $(this).text().trim(); | |||
if (verifiedUsers.includes(username)) { applyGlobalBadge($(this)); } | |||
}); | |||
} | |||
scanLinks(); | |||
mw.hook('wikipage.content').add(scanLinks); | |||
var currentTitle = mw.config.get('wgTitle'); | |||
if ((ns === 2 || ns === 3) && verifiedUsers.includes(currentTitle)) { | |||
if (!$('#firstHeading').find('.mippedia-profile-badge').length) { | |||
api.parse('[[Berkas:' + vFile + '|22px|link=|middle]]').done(function(renderedImage) { | |||
var cleanImage = $(renderedImage).find('img').first(); | |||
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); | |||
$pBadge.click(showVerifiedPopup); | |||
$('#firstHeading').append($pBadge); | |||
}); | |||
} | |||
} | |||
}); | |||
// --- 3. AUTO-FILL TEKS PERMINTAAN (DENGAN FORM IDENTITAS RAHASIA) --- | |||
if (mw.config.get('wgAction') === 'edit' && sessionStorage.getItem('mippedia_verify_req')) { | |||
var identityTemplate = | |||
"\n\n\n" + | |||
"<div class='sysop-show' style='background:#fff5f5; border:1px solid #ff0000; padding:10px;'>\n" + | |||
"=== Data Identitas Pemohon ===\n" + | |||
"* '''Foto KTP/ID:''' [[Berkas:Isi_Nama_File_Di_Sini.jpg|thumb|150px]]\n" + | |||
"* '''Foto Selfie dengan KTP:''' [[Berkas:Isi_Nama_File_Di_Sini.jpg|thumb|150px]]\n" + | |||
"* '''Nama Lengkap:''' \n" + | |||
"* '''Tautan Media Sosial:''' \n" + | |||
"</div>\n" + | |||
""; | |||
var savedText = sessionStorage.getItem('mippedia_verify_req'); | |||
$('#wpTextbox1').val(savedText + "\n\n**Persyaratan Verifikasi:** \n(Tulis alasan mengapa akun lo layak dapet centang biru, boys!) " + identityTemplate + "\n\n<div class='mippedia-status'>'''Status: 🕒 Sedang diverifikasi'''</div>\n\n--" + user); | |||
sessionStorage.removeItem('mippedia_verify_req'); | |||
} | |||
// --- 4. SEMBUNYIKAN DATA PRIVASI DARI NON-ADMIN --- | |||
if (!isAdmin) { | |||
$('.sysop-show').hide(); | |||
} | |||
// --- 5. TOMBOL MINTA VERIFIKASI --- | |||
if (ns === 2 && user && mw.config.get('wgTitle') === user) { | |||
if (!$('#ca-verify-request').length) { | |||
var $verifyLink = $('<li>').attr({'id': 'ca-verify-request', 'class': 'mw-list-item'}).append( | |||
$('<a>').attr({'href': '#', 'title': 'Minta Verifikasi'}).css({ | |||
'display': 'flex', 'align-items': 'center', 'padding': '6px 12px' | |||
}).append( | |||
$('<span>').html('🔵 Verifikasi').css({'color': '#0095f6', 'font-weight': 'bold', 'margin-left': '2px'}) | |||
) | |||
); | |||
$verifyLink.click(function(e) { | |||
e.preventDefault(); | |||
sessionStorage.setItem('mippedia_verify_req', "Halo Pengurus Mippedia,\n\nSaya mengajukan permohonan verifikasi identitas akun untuk profil [[" + pageName + "]] sesuai dengan kebijakan komunitas."); | |||
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); | |||
} | |||
} | |||
// --- 6. PANEL ADMIN VERIFIKASI (APPROVE & REJECT) --- | |||
if (ns === 3 && isAdmin && $('#mw-content-text').text().includes("Sedang diverifikasi")) { | |||
var targetUserPage = "Pengguna:" + mw.config.get('wgTitle'); | |||
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]]; | |||
if (!pg || !pg.revisions) return; | |||
var requester = pg.revisions[0].user; | |||
var oldContent = pg.revisions[0]['*']; | |||
if (!$('#mw-content-text').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; display:flex; flex-direction:column; gap:10px;">' + | |||
'<div><b style="color:#0095f6;">🔵 ADMIN VERIFICATION PANEL</b><br><small>Memproses permohonan: <b>'+requester+'</b></small></div></div>'); | |||
var $btnGroup = $('<div style="display:flex; gap:10px;"></div>'); | |||
var $btnApprove = $('<button>').text('✅ SETUJUI').css({'background':'#0095f6','color':'#fff','padding':'8px 15px','border':'none','border-radius':'6px','cursor':'pointer','font-weight':'bold'}); | |||
var $btnReject = $('<button>').text('❌ TOLAK').css({'background':'#ff4d4d','color':'#fff','padding':'8px 15px','border':'none','border-radius':'6px','cursor':'pointer','font-weight':'bold'}); | |||
// LOGIKA SETUJUI | |||
$btnApprove.click(function() { | |||
$(this).prop('disabled', true).text('Approving...'); | |||
sessionStorage.setItem('is_system_verify', 'true'); | |||
api.postWithToken('edit', { action: 'edit', title: targetUserPage, appendtext: '\n[[Category:Pengguna_Terverifikasi]]', summary: 'Akun Terverifikasi' | |||
}).then(function() { | |||
// HAPUS DATA PRIVASI OTOMATIS SAAT DISETUJUI | |||
var cleanText = oldContent.replace(/<div class='sysop-show'[\s\S]*?<\/div>/g, "''(Data identitas telah dihapus otomatis demi keamanan tingkat tinggi)''"); | |||
var newText = cleanText.replace("Status: 🕒 Sedang diverifikasi", "Status: ✅ '''Akun Terverifikasi''' 🔵"); | |||
return api.postWithToken('edit', { action: 'edit', title: pageName, text: newText, summary: 'Approved & Purged Identity Data' }); | |||
}).then(function() { | |||
var msg = "\n== Selamat! Profil Anda Terverifikasi ==\nHalo [["+requester+"]],\n\nKabar gembira! Tim Pengurus Mippedia telah meninjau data identitas Anda dan memutuskan untuk **MENYETUJUI** permohonan verifikasi Anda. Akun Anda kini memiliki lencana centang biru 🔵 sebagai tanda kredibilitas asli.\n\nData identitas yang Anda kirimkan telah kami hapus secara otomatis dari sistem kami demi menjaga keamanan privasi Anda. Terima kasih telah berkontribusi di Mippedia! --[[Pengguna:Admin|Admin]]"; | |||
return api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:"+requester, section: 'new', text: msg }); | |||
}).done(function() { | |||
sessionStorage.removeItem('is_system_verify'); | |||
location.reload(); | |||
}); | |||
}); | |||
// LOGIKA TOLAK | |||
$btnReject.click(function() { | |||
$(this).prop('disabled', true).text('Rejecting...'); | |||
// HAPUS DATA PRIVASI OTOMATIS SAAT DITOLAK | |||
var cleanText = oldContent.replace(/<div class='sysop-show'[\s\S]*?<\/div>/g, "''(Data identitas telah dihapus otomatis demi keamanan tingkat tinggi)''"); | |||
var newText = cleanText.replace("Status: 🕒 Sedang diverifikasi", "Status: ❌ '''Permintaan Ditolak'''"); | |||
api.postWithToken('edit', { action: 'edit', title: pageName, text: newText, summary: 'Rejected & Purged Identity Data' | |||
}).then(function() { | |||
var msg = "\n== Informasi: Permintaan Verifikasi Belum Disetujui ==\nHalo [["+requester+"]],\n\nMohon maaf, setelah melakukan peninjauan terhadap data yang Anda kirimkan, Tim Pengurus Mippedia memutuskan untuk **BELUM DAPAT MENYETUJUI** permohonan verifikasi Anda saat ini. Hal ini bisa disebabkan oleh data yang kurang jelas atau tidak memenuhi kriteria verifikasi kami.\n\nJangan khawatir, data identitas sensitif yang Anda kirimkan sudah kami hapus secara otomatis demi keamanan Anda. Anda dapat mengajukan permohonan kembali di masa mendatang dengan data yang lebih lengkap. --[[Pengguna:Admin|Admin]]"; | |||
return api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:"+requester, section: 'new', text: msg }); | |||
}).done(function() { | |||
location.reload(); | |||
}); | |||
}); | |||
$btnGroup.append($btnApprove, $btnReject); | |||
$panel.append($btnGroup); | |||
$('#mw-content-text').prepend($panel); | |||
}); | |||
} | |||
}); | }); | ||