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 ( | 🔵 MIPPEDIA ULTIMATE VERIFICATION SYSTEM (V4 - TOTAL LOCKDOWN) | ||
Fitur: | Fitur: Anti-Penyalahgunaan Manual, Auto-Delete Penyelundup, & Pop-up Larangan | ||
========================================================== */ | ========================================================== */ | ||
$(document).ready(function() { | $(document).ready(function() { | ||
| Baris 1.019: | Baris 1.019: | ||
'<div style="margin-bottom:15px;">' + renderedImage + '</div>' + | '<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>' + | '<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 | '<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.</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>' + | '<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>'; | '</div></div>'; | ||
| Baris 1.063: | Baris 1.063: | ||
}); | }); | ||
// --- 3. 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 identityTemplate = | var identityTemplate = "\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>"; | ||
var savedText = sessionStorage.getItem('mippedia_verify_req'); | var savedText = sessionStorage.getItem('mippedia_verify_req'); | ||
$('#wpTextbox1').val(savedText + "\n\n**Persyaratan Verifikasi:** \n(Tulis alasan | $('#wpTextbox1').val(savedText + "\n\n**Persyaratan Verifikasi:** \n(Tulis alasan lo, boys!) " + identityTemplate + "\n\n<div class='mippedia-status'>'''Status: 🕒 Sedang diverifikasi'''</div>\n\n--" + user); | ||
sessionStorage.removeItem('mippedia_verify_req'); | sessionStorage.removeItem('mippedia_verify_req'); | ||
} | } | ||
// --- 4. | // --- 4. PROTEKSI TOTAL (ANTI-MANUAL & ANTI-VANDAL) --- | ||
if (! | if (ns === 2 && (['edit', 'submit'].includes(mw.config.get('wgAction')))) { | ||
$('#editform').on('submit', function(e) { | |||
var $box = $('#wpTextbox1'); | |||
var newContent = $box.val(); | |||
var catName = "Category:Pengguna_Terverifikasi"; | |||
var catPattern = /\[\[Category:Pengguna_Terverifikasi\]\]/gi; | |||
// Ambil konten asli sebelum diedit | |||
api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content' }).done(function(res) { | |||
var pages = res.query.pages; | |||
var oldContent = ""; | |||
for (var id in pages) { oldContent = pages[id].revisions ? pages[id].revisions[0]['*'] : ""; } | |||
var isAdding = catPattern.test(newContent) && !catPattern.test(oldContent); | |||
var isRemoving = !catPattern.test(newContent) && catPattern.test(oldContent); | |||
// JIKA MENAMBAHKAN SECARA MANUAL (DILARANG KERAS UNTUK SIAPAPUN) | |||
if (isAdding && !sessionStorage.getItem('is_system_verify')) { | |||
e.preventDefault(); | |||
var alertHtml = '<div id="mippedia-block-modal" style="position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(255,0,0,0.85);z-index:100000;display:flex;align-items:center;justify-content:center;color:#fff;font-family:sans-serif;">' + | |||
'<div style="text-align:center; padding:20px; max-width:400px;">' + | |||
'<h1 style="font-size:50px;">⚠️</h1>' + | |||
'<h2>PELANGGARAN KERAS!</h2>' + | |||
'<p>Dilarang menambahkan status <b>Pengguna Terverifikasi</b> secara manual. Status ini hanya bisa diberikan melalui jalur resmi Mippedia.</p>' + | |||
'<button id="back-to-edit" style="background:#fff;color:#ff0000;border:none;padding:10px 20px;border-radius:5px;font-weight:bold;cursor:pointer;">KEMBALI</button>' + | |||
'</div></div>'; | |||
$('body').append(alertHtml); | |||
$('#back-to-edit').click(function() { | |||
$('#mippedia-block-modal').remove(); | |||
$box.val(newContent.replace(catPattern, '')); // Otomatis hapus kodenya | |||
}); | |||
return false; | |||
} | |||
// JIKA MENGHAPUS (Hanya Admin yang boleh) | |||
if (isRemoving && !isAdmin) { | |||
e.preventDefault(); | |||
alert("⚠️ AKSES DITOLAK: Anda tidak memiliki wewenang untuk mencabut status verifikasi."); | |||
$box.val(newContent + "\n[[Category:Pengguna_Terverifikasi]]"); // Paksa balikkan kodenya | |||
return false; | |||
} | |||
}); | |||
}); | |||
} | } | ||
| Baris 1.090: | Baris 1.121: | ||
if (!$('#ca-verify-request').length) { | if (!$('#ca-verify-request').length) { | ||
var $verifyLink = $('<li>').attr({'id': 'ca-verify-request', 'class': 'mw-list-item'}).append( | var $verifyLink = $('<li>').attr({'id': 'ca-verify-request', 'class': 'mw-list-item'}).append( | ||
$('<a>').attr({'href': '#', 'title': 'Minta Verifikasi'}).css({ | $('<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'}) | $('<span>').html('🔵 Verifikasi').css({'color': '#0095f6', 'font-weight': 'bold', 'margin-left': '2px'}) | ||
) | ) | ||
| Baris 1.098: | Baris 1.127: | ||
$verifyLink.click(function(e) { | $verifyLink.click(function(e) { | ||
e.preventDefault(); | e.preventDefault(); | ||
sessionStorage.setItem('mippedia_verify_req', "Halo Pengurus Mippedia,\n\nSaya mengajukan permohonan verifikasi identitas | sessionStorage.setItem('mippedia_verify_req', "Halo Pengurus Mippedia,\n\nSaya mengajukan permohonan verifikasi identitas untuk profil [[" + pageName + "]]."); | ||
window.location.href = mw.util.getUrl("Pembicaraan_Pengguna:" + user, { 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' }); | ||
}); | }); | ||
| Baris 1.105: | Baris 1.134: | ||
} | } | ||
// --- 6. PANEL ADMIN | // --- 6. PANEL ADMIN (APPROVE & REJECT) --- | ||
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.116: | Baris 1.145: | ||
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;">' + | 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 | '<div><b style="color:#0095f6;">🔵 ADMIN PANEL</b><br><small>User: '+requester+'</small></div></div>'); | ||
var $btnGroup = $('<div style="display:flex; gap:10px;"></div>'); | var $btnGroup = $('<div style="display:flex; gap:10px;"></div>'); | ||
| Baris 1.122: | Baris 1.151: | ||
var $btnReject = $('<button>').text('❌ TOLAK').css({'background':'#ff4d4d','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'}); | ||
$btnApprove.click(function() { | $btnApprove.click(function() { | ||
$(this).prop('disabled', true).text('Approving...'); | $(this).prop('disabled', true).text('Approving...'); | ||
sessionStorage.setItem('is_system_verify', 'true'); | sessionStorage.setItem('is_system_verify', 'true'); | ||
api.postWithToken('edit', { action: 'edit', title: targetUserPage, appendtext: '\n[[Category:Pengguna_Terverifikasi]]', summary: ' | api.postWithToken('edit', { action: 'edit', title: targetUserPage, appendtext: '\n[[Category:Pengguna_Terverifikasi]]', summary: 'Approved' | ||
}).then(function() { | }).then(function() { | ||
var cleanText = oldContent.replace(/<div class='sysop-show'[\s\S]*?<\/div>/g, "''(Data identitas telah dihapus otomatis)''"); | |||
var cleanText = oldContent.replace(/<div class='sysop-show'[\s\S]*?<\/div>/g, "''(Data identitas telah dihapus otomatis | |||
var newText = cleanText.replace("Status: 🕒 Sedang diverifikasi", "Status: ✅ '''Akun Terverifikasi''' 🔵"); | var newText = cleanText.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() { | ||
var msg = "\n== | var msg = "\n== Profil Terverifikasi ==\nHalo [["+requester+"]], akun Anda resmi terverifikasi. Data identitas Anda telah dihapus demi keamanan. --[[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() { | }).done(function() { | ||
| Baris 1.141: | Baris 1.168: | ||
}); | }); | ||
$btnReject.click(function() { | $btnReject.click(function() { | ||
$(this).prop('disabled', true).text('Rejecting...'); | $(this).prop('disabled', true).text('Rejecting...'); | ||
var cleanText = oldContent.replace(/<div class='sysop-show'[\s\S]*?<\/div>/g, "''(Data identitas telah dihapus otomatis)''"); | |||
var cleanText = oldContent.replace(/<div class='sysop-show'[\s\S]*?<\/div>/g, "''(Data identitas telah dihapus otomatis | |||
var newText = cleanText.replace("Status: 🕒 Sedang diverifikasi", "Status: ❌ '''Permintaan Ditolak'''"); | var newText = cleanText.replace("Status: 🕒 Sedang diverifikasi", "Status: ❌ '''Permintaan Ditolak'''"); | ||
api.postWithToken('edit', { action: 'edit', title: pageName, text: newText, summary: 'Rejected' | |||
api.postWithToken('edit', { action: 'edit', title: pageName, text: newText, summary: 'Rejected | |||
}).then(function() { | }).then(function() { | ||
var msg = "\n== Informasi | var msg = "\n== Informasi Verifikasi ==\nHalo [["+requester+"]], permohonan Anda belum disetujui saat ini. Data sensitif Anda sudah kami hapus. --[[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() { | }).done(function() { location.reload(); }); | ||
}); | }); | ||