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 ULTIMATE VERIFICATION SYSTEM | ||
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 | var api = new mw.Api(); | ||
// --- 1. | // --- 1. LOGIKA CENTANG BIRU GLOBAL (RIWAYAT, RECENT CHANGES, DLL) --- | ||
function applyGlobalBadge($element) { | |||
if ($element.data('has-badge')) return; | |||
api. | api.parse('[[Berkas:Verified_Badge.png|14px|link=|middle]]').done(function(renderedImage) { | ||
var cleanImage = $(renderedImage).find('img').first(); | |||
var $badge = $('<span style="margin-left: 3px; vertical-align: middle; display: inline-block;"></span>').append(cleanImage); | |||
$element.after($badge); | |||
$element.data('has-badge', true); | |||
}); | |||
var | } | ||
var | |||
// Ambil daftar user terverifikasi dari kategori | |||
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:', ''); | |||
}); | }); | ||
} | |||
// 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(); | ||
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( | 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() { | ||
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() { | ||
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 | |||
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(); }); | ||
}); | }); | ||
| Baris 1.104: | Baris 1.110: | ||
var alasan = prompt("Alasan:"); | var alasan = prompt("Alasan:"); | ||
if (!alasan) return; | if (!alasan) return; | ||
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 | 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(); }); | ||
}); | }); | ||
$panel.append($btnApprove, $btnReject); | $panel.append($btnApprove, $btnReject); | ||
$('#mw-content-text').prepend($panel); | $('#mw-content-text').prepend($panel); | ||