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 638: | Baris 638: | ||
/* ========================================================== | /* ========================================================== | ||
🛡️ MIPPEDIA | 🛡️ MIPPEDIA ULTIMATE AUTOMATION v9.0 (STABLE) | ||
Sistem Verifikasi & Perlindungan Terpadu | |||
========================================================== */ | ========================================================== */ | ||
$(document).ready(function() { | $(document).ready(function() { | ||
| Baris 645: | Baris 646: | ||
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. HANDLING FORM OTOMATIS (SISI USER) --- | ||
if (mw.config.get('wgAction') === 'edit' | if (mw.config.get('wgAction') === 'edit') { | ||
if (sessionStorage.getItem('mippedia_req_text')) { | |||
$('#wpTextbox1').val(sessionStorage.getItem('mippedia_req_text') + "\n\n**Alasan:** \n(Tulis alasan lo, boys!) \n\n<div class='mippedia-status'>'''Status: 🕒 Sedang diajukan'''</div>\n\n--" + user); | |||
sessionStorage.removeItem('mippedia_req_text'); | |||
} else if (sessionStorage.getItem('mippedia_prot_type')) { | |||
var type = sessionStorage.getItem('mippedia_prot_type'); | |||
var dur = prompt("Durasi (1 week / infinite):", "infinite") || "infinite"; | |||
var temp = "Halo Pengurus,\n\nSaya memohon perlindungan berkas:\n* **Jenis:** " + type + "\n* **Durasi:** " + dur + "\n* **Alasan:** (Tulis alasan lo, boys!)\n\n<div class='mippedia-status'>'''Status: 🕒 Sedang diajukan'''</div>\n\n--" + user; | |||
$('#wpTextbox1').val(temp); | |||
sessionStorage.removeItem('mippedia_prot_type'); | |||
} | |||
} | } | ||
// --- 2. TOMBOL | // --- 2. TOMBOL DI HALAMAN BERKAS --- | ||
if (ns === 6) { | if (ns === 6) { | ||
api.get({ action: 'query', prop: 'info', titles: pageName, inprop: 'protection' }).done(function(d) { | |||
api.get({ action: 'query', prop: 'info', titles: pageName, inprop: 'protection' }).done(function( | var p = d.query.pages[Object.keys(d.query.pages)[0]]; | ||
var | var isOfficial = $('#mw-content-text').text().includes("Aset Resmi"); | ||
var | var prot = p.protection; | ||
var isFull = prot.some(x => x.level === 'sysop'); | |||
var isFull = | var isSemi = prot.some(x => x.level === 'autoconfirmed'); | ||
var isSemi = | |||
// Tombol Verifikasi | |||
if (!isOfficial) { | |||
var $vBtn = $('<button>').html('📩 Minta Verifikasi').css({'background':'#36c','color':'#fff','border':'none','padding':'5px 12px','border-radius':'20px','cursor':'pointer','margin-right':'5px'}); | |||
$vBtn.click(function() { | |||
} | sessionStorage.setItem('mippedia_req_text', "Halo Pengurus, mohon verifikasi berkas [[:" + pageName + "]] ini."); | ||
} | window.location.href = mw.util.getUrl("Pembicaraan_Berkas:" + mw.config.get('wgTitle'), { action: 'edit', section: 'new', preloadtitle: 'Permintaan Verifikasi Berkas' }); | ||
}); | |||
$('#firstHeading').after($vBtn); | |||
} | |||
// | // Tombol Proteksi | ||
if (isFull) | if (!isFull) { | ||
var txt = isSemi ? "🔒 Tingkatkan Proteksi" : "🔒 Minta Proteksi"; | |||
var $pBtn = $('<button>').html(txt).css({'background':'#d33','color':'#fff','border':'none','padding':'5px 12px','border-radius':'20px','cursor':'pointer'}); | |||
$pBtn.click(function() { | |||
sessionStorage.setItem('mippedia_prot_type', isSemi ? "Perlindungan Penuh" : "Semi Perlindungan"); | |||
window.location.href = mw.util.getUrl("Pembicaraan_Berkas:" + mw.config.get('wgTitle'), { action: 'edit', section: 'new', preloadtitle: 'Permintaan Perlindungan Berkas' }); | |||
}); | |||
$('#firstHeading').after($pBtn); | |||
} | |||
}); | }); | ||
} | } | ||
// --- 3. PANEL ADMIN | // --- 3. PANEL ADMIN (HALAMAN PEMBICARAAN) --- | ||
if (ns === 7) | if (ns === 7 && isAdmin && $('#mw-content-text').text().includes("Sedang diajukan")) { | ||
var filePage = pageName.replace('Pembicaraan_Berkas:', 'Berkas:'); | var filePage = pageName.replace('Pembicaraan_Berkas:', 'Berkas:'); | ||
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 requester = pg.revisions[0].user; | |||
var content = pg.revisions[0]['*']; | |||
var isProtectReq = content.includes("Perlindungan"); | |||
var | var color = isProtectReq ? "#fff0f0" : "#f0f5ff"; | ||
var | var border = isProtectReq ? "#d33" : "#36c"; | ||
var $panel = $('<div style="background:'+color+'; border:2px solid '+border+'; padding:15px; border-radius:10px; margin-bottom:10px;">' + | |||
'<b>🛡️ MIPPEDIA ADMIN CONTROL</b><br><small>Target: '+requester+'</small><br></div>'); | |||
var $btnOk = $('<button>').text('✅ SETUJUI').css({'background':'#00af89','color':'#fff','padding':'5px 10px','border':'none','cursor':'pointer','margin-top':'10px'}); | |||
var $btnNo = $('<button>').text('❌ TOLAK').css({'background':'#d33','color':'#fff','padding':'5px 10px','border':'none','cursor':'pointer','margin-left':'5px'}); | |||
$btnOk.click(function() { | |||
$(this).prop('disabled', true).text('Processing...'); | |||
if (isProtectReq) { | |||
// LOGIKA PROTEKSI | |||
var level = content.includes("Perlindungan Penuh") ? "sysop" : "autoconfirmed"; | |||
var dur = content.match(/Durasi:\s*(.*)/) ? content.match(/Durasi:\s*(.*)/)[1] : "infinite"; | |||
api.postWithToken('csrf', { action: 'protect', title: filePage, protections: 'edit='+level+'|move='+level, expiry: dur, reason: 'Request approved' }) | |||
api.postWithToken('csrf', { | .then(function() { return api.postWithToken('edit', { action: 'edit', title: pageName, text: content.replace("Status: 🕒 Sedang diajukan", "Status: ✅ '''Disetujui & Dilindungi'''"), summary: 'Status Update' }); }) | ||
.then(function() { return api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:"+requester, section: 'new', text: "== Notifikasi ==\nPermintaan proteksi lo buat [[:"+filePage+"]] udah beres, boys! --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 17.19 (UTC)", summary: 'Notif' }); }) | |||
.done(function() { location.reload(); }); | |||
} else { | |||
// LOGIKA VERIFIKASI | |||
api.postWithToken('edit', { action: 'edit', title: filePage, appendtext: '\nAset Resmi', summary: 'Official Asset' }) | |||
.then(function() { return api.postWithToken('edit', { action: 'edit', title: pageName, text: content.replace("Status: 🕒 Sedang diajukan", "Status: ✅ '''Disetujui'''"), summary: 'Status Update' }); }) | |||
.then(function() { return api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:"+requester, section: 'new', text: "== Notifikasi ==\nBerkas [[:"+filePage+"]] udah diverifikasi ya, boys! --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 17.19 (UTC)", summary: 'Notif' }); }) | |||
.done(function() { location.reload(); }); | |||
} | |||
}); | |||
$btnNo.click(function() { | |||
var alasan = prompt("Alasan:"); | |||
if (!alasan) return; | |||
api.postWithToken('edit', { action: 'edit', title: pageName, text: content.replace("Status: 🕒 Sedang diajukan", "Status: ❌ '''Ditolak'''\n\nAlasan: "+alasan), summary: 'Rejected' }) | |||
.then(function() { return api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:"+requester, section: 'new', text: "== Notifikasi ==\nSori boys, permintaan lo buat [[:"+filePage+"]] ditolak karena: "+alasan+" --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 17.19 (UTC)", summary: 'Notif' }); }) | |||
.done(function() { location.reload(); }); | |||
}); | |||
$panel.append($btnOk, $btnNo); | |||
$('#mw-content-text').prepend($panel); | |||
}); | }); | ||
} | } | ||
}); | }); | ||