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 V6 - TOTAL AUTOMATION | ||
Fitur: Auto-Text, Auto-Status, Auto-Message (Approve/Reject), | |||
Hidden Proof, & Strict Security. | |||
========================================================== */ | ========================================================== */ | ||
(function(mw, | $(document).ready(function() { | ||
var user = mw.config.get('wgUserName'), | |||
pName = mw.config.get('wgPageName'), | |||
ns = mw.config.get('wgNamespaceNumber'), | |||
isAdmin = mw.config.get('wgUserGroups').includes('sysop'), | |||
api = new mw.Api(); | |||
var | var vBadgeUrl = mw.config.get('wgScriptPath') + '/index.php?title=Special:Redirect/file/Verified_Badge.png'; | ||
// --- 1. POP-UP PENJELASAN (DIHALAMAN PENGGUNA) --- | |||
// 1. | |||
function showVPopup() { | function showVPopup() { | ||
var h = '<div id="v-m" style="position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.8);z-index:99999;display:flex;align-items:center;justify-content:center;">' + | var h = '<div id="v-m" style="position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.8);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:320px;text-align:center;box-shadow:0 15px 35px rgba(0,0,0,0.5);">' + | ||
'<img src="'+ | '<img src="'+vBadgeUrl+'&width=60" style="width:60px;margin-bottom:15px;">' + | ||
'< | '<h2 style="margin:0 0 10px;font-size:20px;font-weight:bold;">Akun Terverifikasi</h2>' + | ||
'<p style="font-size:13px; | '<p style="color:#555;font-size:13px;line-height:1.5;margin-bottom:20px;">Identitas pemilik akun ini telah divalidasi oleh tim Mippedia berdasarkan dokumen resmi untuk memastikan keaslian profil.</p>' + | ||
'<button id="c-v-m" style="background:#0095f6;color:#fff;border:none;padding: | '<button id="c-v-m" style="background:#0095f6;color:#fff;border:none;padding:12px 0;width:100%;border-radius:10px;font-weight:bold;cursor:pointer;">Mengerti</button>' + | ||
'</div></div>'; | '</div></div>'; | ||
$('body').append(h); $('#c-v-m'). | $('body').append(h); $('#c-v-m').click(function(){$('#v-m').remove();}); | ||
} | } | ||
// 2. | // --- 2. RENDER BADGE --- | ||
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:', ''); }); | |||
mw.hook('wikipage.content').add(function() { | |||
$('.mw-userlink').each(function() { | |||
if (vUsers.includes($(this).text().trim()) && !$(this).next('.mp-v-g').length) { | |||
$(this).after('<span class="mp-v-g" style="margin-left:3px;vertical-align:middle;"><img src="'+vBadgeUrl+'&width=13" style="width:13px;"></span>'); | |||
} | |||
} | |||
}); | }); | ||
}); | }); | ||
} | if ((ns===2||ns===3) && vUsers.includes(mw.config.get('wgTitle')) && !$('#firstHeading .mp-v-p').length) { | ||
$('<span class="mp-v-p" style="margin-left:6px;vertical-align:middle;cursor:pointer;"><img src="'+vBadgeUrl+'&width=20" style="width:20px;"></span>').click(showVPopup).appendTo('#firstHeading'); | |||
} | |||
}); | |||
// 3. PROTEKSI KATEGORI ( | // --- 3. PROTEKSI KATEGORI (SATPAM NS PENGGUNA) --- | ||
if ( | if (ns===2 && ['edit','submit'].includes(mw.config.get('wgAction'))) { | ||
$('#editform').on('submit', function( | $('#editform').on('submit', function() { | ||
var c = $('#wpTextbox1').val(); | var c = $('#wpTextbox1').val(); | ||
if (/\[\[Category:Pengguna_Terverifikasi\]\]/gi.test(c) && !sessionStorage.getItem('sys_v')) { | if (/\[\[Category:Pengguna_Terverifikasi\]\]/gi.test(c) && !sessionStorage.getItem('sys_v')) { | ||
alert("⚠️ DILARANG: Kategori | alert("⚠️ DILARANG: Kategori verifikasi tidak boleh ditambahkan secara manual di halaman pengguna!"); | ||
$('#wpTextbox1').val(c.replace(/\[\[Category:Pengguna_Terverifikasi\]\]/gi, '')); | $('#wpTextbox1').val(c.replace(/\[\[Category:Pengguna_Terverifikasi\]\]/gi, '')); | ||
return false; | return false; | ||
| Baris 1.068: | Baris 1.053: | ||
} | } | ||
// 4. TOMBOL | // --- 4. TOMBOL & TEKS OTOMATIS (MINTA VERIFIKASI) --- | ||
if ( | if (ns===2 && user && pName.includes('Pengguna:'+user)) { | ||
var $ | if (!$('#ca-v-req').length) { | ||
var $btn = $('<li>').attr('id','ca-v-req').addClass('mw-list-item').append($('<a>').attr('href','#').append($('<span>').text('🔵 Verifikasi').css({'color':'#0095f6','font-weight':'bold'}))); | |||
$btn.click(function(e) { | |||
e.preventDefault(); | |||
var tpl = "== Permintaan Verifikasi ==\nHalo Pengurus, mohon verifikasi akun saya.\n\n{| class='wikitable'\n! Bukti Identitas !! URL/Tautan\n|-\n| Identitas Resmi || (Masukkan URL Bukti di sini)\n|}\n\n\n<pre class='hidden-proof' style='display:none'>(Masukkan URL Bukti Sekali Lagi di Sini)</pre>\n\n<div class='mippedia-status'>'''Status: 🕒 Sedang diverifikasi'''</div>\n\n--" + user; | |||
sessionStorage.setItem('v_req_txt', tpl); | |||
window.location.href = mw.util.getUrl("Pembicaraan_Pengguna:"+user, {action:'edit', section:'new'}); | |||
}); | |||
$('#p-cactions ul, #p-views ul').append($btn); | |||
} | |||
} | } | ||
if (mw.config.get('wgAction')==='edit' && sessionStorage.getItem('v_req_txt')) { | |||
if (config. | |||
$('#wpTextbox1').val(sessionStorage.getItem('v_req_txt')); | $('#wpTextbox1').val(sessionStorage.getItem('v_req_txt')); | ||
sessionStorage.removeItem('v_req_txt'); | sessionStorage.removeItem('v_req_txt'); | ||
} | } | ||
// 5. PANEL ADMIN (APPROVE | // --- 5. PANEL ADMIN (AUTO-APPROVE / REJECT) --- | ||
if ( | if (ns===3 && isAdmin && $('#mw-content-text').text().includes("Sedang diverifikasi")) { | ||
api.get({ action: 'query', prop: 'revisions', titles: | api.get({action:'query', prop:'revisions', titles:pName, rvprop:'user|content', rvlimit:1}).done(function(r) { | ||
var pg = r.query.pages[Object.keys(r.query.pages)[0]], | var pg = r.query.pages[Object.keys(r.query.pages)[0]], | ||
req = pg.revisions[0].user, | |||
con = pg.revisions[0]['*']; | |||
var proof = $($.parseHTML( | var proof = $($.parseHTML(con)).find('.hidden-proof').text() || "Tidak ada bukti terlampir"; | ||
var $pnl = $('<div style="background:#f0f7ff;border:2px solid #0095f6;padding:15px;border-radius:12px;margin-bottom:15px">').append('<b style="color:#0095f6;">🔵 ADMIN VERIFICATION</b><br>'); | var $pnl = $('<div style="background:#f0f7ff;border:2px solid #0095f6;padding:15px;border-radius:12px;margin-bottom:15px">').append('<b style="color:#0095f6;">🔵 ADMIN VERIFICATION SYSTEM</b><br>'); | ||
var $ | var $btnShow = $('<button>').text('👁️ LIHAT BUKTI').css({'margin-right':'8px','padding':'5px 10px','cursor':'pointer','border-radius':'4px','border':'1px solid #ccc'}); | ||
var $btnApp = $('<button>').text('✅ | var $btnApp = $('<button>').text('✅ SETUJUI').css({'background':'#0095f6','color':'#fff','border':'none','padding':'5px 15px','cursor':'pointer','font-weight':'bold','border-radius':'4px','margin-right':'8px'}); | ||
var $btnRej = $('<button>').text('❌ TOLAK').css({'background':'#ff4d4d','color':'#fff','border':'none','padding':'5px | var $btnRej = $('<button>').text('❌ TOLAK').css({'background':'#ff4d4d','color':'#fff','border':'none','padding':'5px 15px','cursor':'pointer','font-weight':'bold','border-radius':'4px'}); | ||
// | $btnShow.click(function(){ alert("Bukti Identitas:\n" + proof); }); | ||
$btnApp. | |||
$(this).prop('disabled', true).text('...'); | // FUNGSI SETUJUI | ||
$btnApp.click(function() { | |||
$(this).prop('disabled',true).text('Memproses...'); | |||
sessionStorage.setItem('sys_v', 'true'); | sessionStorage.setItem('sys_v', 'true'); | ||
api.postWithToken('edit', { action: 'edit', title: "Pengguna:" + mw.config.get('wgTitle'), appendtext: '\n[[Category:Pengguna_Terverifikasi]]', summary: 'System: | api.postWithToken('edit', {action:'edit', title:"Pengguna:"+mw.config.get('wgTitle'), appendtext:'\n[[Category:Pengguna_Terverifikasi]]', summary:'System: Akun Terverifikasi'}) | ||
.then(function() { | .then(function() { | ||
var | var up = con.replace("Status: 🕒 Sedang diverifikasi", "Status: ✅ '''Akun Terverifikasi''' 🔵"); | ||
return api.postWithToken('edit', { action: 'edit', title: | return api.postWithToken('edit', {action:'edit', title:pName, text:up, summary:'Approved'}); | ||
}).then(function() { | }).then(function() { | ||
return api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:" + | return api.postWithToken('edit', {action:'edit', title:"Pembicaraan_Pengguna:"+req, section:'new', text:"== Profil Terverifikasi ==\nHalo [["+req+"]], akun Anda resmi terverifikasi dengan centang biru 🔵. --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 21.43 (UTC)", summary:'Notif'}); | ||
}).done(function() { | }).done(function() { | ||
sessionStorage.removeItem('sys_v'); location.reload(); | sessionStorage.removeItem('sys_v'); location.reload(); | ||
| Baris 1.115: | Baris 1.103: | ||
}); | }); | ||
// | // FUNGSI TOLAK | ||
$btnRej. | $btnRej.click(function() { | ||
var alasan = prompt(" | var alasan = prompt("Masukkan alasan penolakan:"); | ||
if (!alasan) return; | if (!alasan) return; | ||
$(this).prop('disabled', true).text('...'); | $(this).prop('disabled',true).text('Memproses...'); | ||
var | var up = con.replace("Status: 🕒 Sedang diverifikasi", "Status: ❌ '''Verifikasi Ditolak'''"); | ||
api.postWithToken('edit', { action: 'edit', title: | api.postWithToken('edit', {action:'edit', title:pName, text:up + "\n\n'''Alasan Penolakan:''' " + alasan, summary:'Rejected'}) | ||
.then(function() { | .then(function() { | ||
return api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:" + | return api.postWithToken('edit', {action:'edit', title:"Pembicaraan_Pengguna:"+req, section:'new', text:"== Verifikasi Ditolak ==\nHalo [["+req+"]], permohonan verifikasi Anda belum dapat kami setujui.\n\n'''Alasan:''' " + alasan + "\n\nSilakan lengkapi data Anda kembali. --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 21.43 (UTC)", summary:'Rejected Notif'}); | ||
}).done(function() { location.reload(); }); | }).done(function() { location.reload(); }); | ||
}); | }); | ||
$('#mw-content-text').prepend($pnl.append($ | $('#mw-content-text').prepend($pnl.append($btnShow, $btnApp, $btnRej)); | ||
}); | }); | ||
} | } | ||
}); | |||
} | |||