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 EXCLUSIVE PROTECTION SYSTEM (STABLE) | ||
Fokus: Request Protect, Auto-Lock, & Notif Ke User | |||
========================================================== */ | ========================================================== */ | ||
$(document).ready(function() { | $(document).ready(function() { | ||
| Baris 648: | Baris 648: | ||
var api = new mw.Api(); | var api = new mw.Api(); | ||
// --- 1. | // --- 1. SISI PENGGUNA: FORM OTOMATIS --- | ||
if (mw.config.get('wgAction') === 'edit' | if (mw.config.get('wgAction') === 'edit' && sessionStorage.getItem('mippedia_prot_type')) { | ||
var type = sessionStorage.getItem('mippedia_prot_type'); | |||
var dur = prompt("Berapa lama di lindungi? (contoh: 1 week, 1 month, atau infinite)", "infinite") || "infinite"; | |||
var template = "Halo Pengurus Mippedia,\n\nSaya memohon perlindungan berkas sebagai berikut:\n" + | |||
"* **Jenis:** " + type + "\n" + | |||
"* **Durasi:** " + dur + "\n" + | |||
"* **Alasan:** (Tulis alasan lo di sini, boys!)\n\n" + | |||
"<div class='mippedia-status'>'''Status: 🕒 Sedang diajukan'''</div>\n\n--" + user; | |||
$('#wpTextbox1').val(template); | |||
sessionStorage.removeItem('mippedia_prot_type'); | |||
} | } | ||
// --- 2. | // --- 2. SISI HALAMAN BERKAS: TOMBOL DINAMIS --- | ||
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(d) { | ||
var | var pg = d.query.pages[Object.keys(d.query.pages)[0]]; | ||
var prot = pg.protection; | |||
var prot = | |||
var isFull = prot.some(x => x.level === 'sysop'); | var isFull = prot.some(x => x.level === 'sysop'); | ||
var isSemi = prot.some(x => x.level === 'autoconfirmed'); | var isSemi = prot.some(x => x.level === 'autoconfirmed'); | ||
// Tombol | if (isFull) return; // Full protection = Tombol Hilang | ||
var btnText = isSemi ? "🔒 Minta Peningkatan Perlindungan" : "🔒 Minta Perlindungan"; | |||
var btnColor = isSemi ? "#ff4d4f" : "#d33"; | |||
var $protBtn = $('<button>').html(btnText).css({ | |||
'background': btnColor, 'color': '#fff', 'border': 'none', 'padding': '5px 15px', | |||
'border-radius': '20px', 'font-size': '11px', 'font-weight': '800', 'cursor': 'pointer', 'margin': '10px 5px' | |||
}); | |||
$protBtn.click(function() { | |||
if (!user) { window.location.href = mw.util.getUrl('Istimewa:Masuk_log', { returnto: pageName }); return; } | |||
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($protBtn); | |||
}); | }); | ||
} | } | ||
// --- 3. | // --- 3. SISI ADMIN: EKSEKUSI OTOMATIS --- | ||
if (ns === 7 && isAdmin && $('#mw-content-text').text().includes("Sedang diajukan")) { | 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:'); | ||
| Baris 703: | Baris 700: | ||
var content = pg.revisions[0]['*']; | var content = pg.revisions[0]['*']; | ||
var $panel = $('<div style="background:#fff0f0; border:2px solid #d33; padding:15px; border-radius:12px; margin-bottom:20px;">' + | |||
'<b style="color:#d33;">🛡️ ADMIN PROTECTION CONTROL</b><br><small>User: '+requester+'</small></div>'); | |||
var $panel = $('<div style="background: | |||
'<b>🛡️ | |||
var $ | var $btnApprove = $('<button>').text('✅ SETUJUI & LOCK').css({'background':'#d33','color':'#fff','padding':'8px 15px','border':'none','cursor':'pointer','font-weight':'bold'}); | ||
var $ | var $btnReject = $('<button>').text('❌ TOLAK').css({'background':'#555','color':'#fff','padding':'8px 15px','border':'none','cursor':'pointer','margin-left':'10px'}); | ||
$ | $btnApprove.click(function() { | ||
$(this).prop('disabled', true).text(' | $(this).prop('disabled', true).text('Locking System...'); | ||
var level = content.includes("Perlindungan Penuh") ? "sysop" : "autoconfirmed"; | |||
var dur = content.match(/Durasi:\s*(.*)/) ? content.match(/Durasi:\s*(.*)/)[1] : "infinite"; | |||
// Urutan Eksekusi: Lock -> Update Teks Diskusi -> Kirim Pesan ke User | |||
api.postWithToken('csrf', { | |||
action: 'protect', | |||
title: filePage, | |||
protections: 'edit='+level+'|move='+level, | |||
expiry: dur, | |||
reason: 'Permintaan Perlindungan Disetujui' | |||
}).then(function() { | |||
api.postWithToken('edit', { | return api.postWithToken('edit', { | ||
action: 'edit', | |||
title: pageName, | |||
text: content.replace("Status: 🕒 Sedang diajukan", "Status: ✅ '''Disetujui & Dilindungi ("+level+")'''"), | |||
summary: 'Update Status Perlindungan' | |||
}); | |||
}).then(function() { | |||
var msg = "\n== Notifikasi Perlindungan ==\nHalo [[" + requester + "]], permintaan perlindungan lo buat [[:" + filePage + "]] udah '''DISETUJUI''' dan berkas beneran udah gue kunci secara sistem. Aman, boys! --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 17.26 (UTC)"; | |||
return api.postWithToken('edit', { | |||
action: 'edit', | |||
title: "Pembicaraan_Pengguna:" + requester, | |||
section: 'new', | |||
text: msg, | |||
summary: 'Notifikasi Perlindungan Berkas' | |||
}); | |||
}).done(function() { | |||
location.reload(); | |||
}); | |||
}); | }); | ||
$ | $btnReject.click(function() { | ||
var alasan = prompt("Alasan:"); | var alasan = prompt("Alasan penolakan:"); | ||
if (!alasan) return; | if (!alasan) return; | ||
api.postWithToken('edit', { action: 'edit', title: pageName, text: content.replace("Status: 🕒 Sedang diajukan", "Status: ❌ '''Ditolak'''\n\ | $(this).prop('disabled', true).text('Rejecting...'); | ||
api.postWithToken('edit', { | |||
action: 'edit', | |||
title: pageName, | |||
text: content.replace("Status: 🕒 Sedang diajukan", "Status: ❌ '''Ditolak'''\n\n''Alasan: " + alasan + "''"), | |||
summary: 'Permintaan Perlindungan Ditolak' | |||
}).then(function() { | |||
var msg = "\n== Notifikasi Perlindungan ==\nHalo [[" + requester + "]], permintaan perlindungan lo buat [[:" + filePage + "]] '''DITOLAK''' karena: ''" + alasan + "''. --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 17.26 (UTC)"; | |||
return api.postWithToken('edit', { | |||
action: 'edit', | |||
title: "Pembicaraan_Pengguna:" + requester, | |||
section: 'new', | |||
text: msg, | |||
summary: 'Notifikasi Penolakan Perlindungan' | |||
}); | |||
}).done(function() { | |||
location.reload(); | |||
}); | |||
}); | }); | ||
$panel.append($ | $panel.append($btnApprove, $btnReject); | ||
$('#mw-content-text').prepend($panel); | $('#mw-content-text').prepend($panel); | ||
}); | }); | ||
} | } | ||
}); | }); | ||