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 867: | Baris 867: | ||
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 ==\nSori [["+requester+"]], permintaan lo ditolak: " + alasan + " --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 19.40 (UTC)"; | var msg = "\n== Notifikasi ==\nSori [["+requester+"]], permintaan lo ditolak: " + alasan + " --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 19.40 (UTC)"; | ||
return api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:"+requester, section: 'new', text: msg }); | |||
}).done(function() { | |||
location.reload(); | |||
}); | |||
}); | |||
$panel.append($btnOk, $btnNo); | |||
$('#mw-content-text').prepend($panel); | |||
}); | |||
} | |||
}); | |||
/* ========================================================== | |||
🛡️ MIPPEDIA USER PAGE PROTECTION SYSTEM | |||
Khusus Namespace Pengguna - Versi Stabil, Rapi & Otomatis | |||
========================================================== */ | |||
$(document).ready(function() { | |||
var user = mw.config.get('wgUserName'); | |||
var pageName = mw.config.get('wgPageName'); | |||
var ns = mw.config.get('wgNamespaceNumber'); | |||
var isAdmin = mw.config.get('wgUserGroups').includes('sysop'); | |||
var $content = $('#mw-content-text'); | |||
// --- 1. AUTO-FILL TEKS PERLINDUNGAN --- | |||
if (mw.config.get('wgAction') === 'edit' && sessionStorage.getItem('mippedia_user_protect')) { | |||
var savedText = sessionStorage.getItem('mippedia_user_protect'); | |||
$('#wpTextbox1').val(savedText + "\n\n**Alasan Perlindungan:** \n(Tulis alasan kenapa halaman pengguna ini perlu dikunci, boys!) \n\n<div class='mippedia-status'>'''Status: 🕒 Sedang diajukan'''</div>\n\n--" + user); | |||
sessionStorage.removeItem('mippedia_user_protect'); | |||
} | |||
// --- 2. TOMBOL DINAMIS (KHUSUS NAMESPACE PENGGUNA / NS 2) --- | |||
if (ns === 2 && user) { | |||
var api = new mw.Api(); | |||
api.get({ action: 'query', prop: 'info', titles: pageName, inprop: 'protection' }).done(function(data) { | |||
var page = data.query.pages[Object.keys(data.query.pages)[0]]; | |||
var protections = page.protection; | |||
var isFull = protections.some(p => p.type === 'edit' && p.level === 'sysop'); | |||
var isSemi = protections.some(p => p.type === 'edit' && p.level === 'autoconfirmed'); | |||
if (isFull) return; | |||
var btnLabel = isSemi ? 'Proteksi Penuh' : 'Proteksi Profil'; | |||
var reqType = isSemi ? 'Perlindungan Penuh' : 'Perlindungan'; | |||
var $protLink = $('<li>').attr({ | |||
'id': 'ca-protect-user-request', | |||
'class': 'mw-list-item' | |||
}).append( | |||
$('<a>').attr({'href': '#', 'title': 'Minta perlindungan halaman pengguna'}).css({ | |||
'display': 'flex', | |||
'align-items': 'center', | |||
'padding': '6px 12px' | |||
}).append( | |||
$('<span>').html('🔒 ' + btnLabel).css({ | |||
'color': '#202122', | |||
'font-weight': 'bold', | |||
'margin-left': '2px' | |||
}) | |||
) | |||
); | |||
$protLink.click(function(e) { | |||
e.preventDefault(); | |||
// Halaman Pengguna pake Pembicaraan Pengguna: (Namespace 3) | |||
var talkPage = "Pembicaraan_Pengguna:" + mw.config.get('wgTitle'); | |||
sessionStorage.setItem('mippedia_user_protect', "Halo Pengurus,\n\nSaya memohon " + reqType + " untuk halaman pengguna [[" + pageName + "]] guna menghindari vandalisme profil."); | |||
window.location.href = mw.util.getUrl(talkPage, { action: 'edit', section: 'new', preloadtitle: 'Permintaan Perlindungan Halaman Pengguna' }); | |||
}); | |||
$('#p-cactions ul, #p-views ul').append($protLink); | |||
}); | |||
} | |||
// --- 3. PANEL ADMIN (HALAMAN PEMBICARAAN PENGGUNA / NS 3) --- | |||
if (ns === 3 && isAdmin && $content.text().includes("Sedang diajukan")) { | |||
var api = new mw.Api(); | |||
// Target perlindungan adalah halaman pengguna utamanya | |||
var targetUserPage = "Pengguna:" + mw.config.get('wgTitle'); | |||
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 oldContent = pg.revisions[0]['*']; | |||
if (!$content.text().includes("Permintaan Perlindungan Halaman Pengguna")) return; | |||
var $panel = $('<div style="background:#fff0f0; border:2px solid #d33; padding:15px; border-radius:10px; margin-bottom:15px;">' + | |||
'<b>🛡️ ADMIN USER-PAGE CONTROL</b><br><small>Request by: '+requester+'</small></div>'); | |||
var $btnOk = $('<button>').text('✅ SETUJUI').css({'background':'#d33','color':'#fff','padding':'5px 12px','border':'none','cursor':'pointer','font-weight':'bold'}); | |||
var $btnNo = $('<button>').text('❌ TOLAK').css({'background':'#555','color':'#fff','padding':'5px 12px','border':'none','cursor':'pointer','margin-left':'10px'}); | |||
$btnOk.click(function() { | |||
var level = oldContent.includes("Penuh") ? "sysop" : "autoconfirmed"; | |||
$(this).prop('disabled', true).text('Step 1/3...'); | |||
// STEP 1: PROTEKSI | |||
api.postWithToken('csrf', { | |||
action: 'protect', title: targetUserPage, protections: 'edit='+level+'|move='+level, expiry: 'infinite', reason: 'User Page Protection: Approved' | |||
}).then(function() { | |||
// STEP 2: UPDATE STATUS | |||
$btnOk.text('Step 2/3...'); | |||
var newText = oldContent.replace("Status: 🕒 Sedang diajukan", "Status: ✅ '''Dilindungi ("+level+")'''"); | |||
return api.postWithToken('edit', { action: 'edit', title: pageName, text: newText, summary: 'Protection Status Updated' }); | |||
}).then(function() { | |||
// STEP 3: NOTIFIKASI OTOMATIS (KE USER) | |||
$btnOk.text('Step 3/3...'); | |||
var msg = "\n== Notifikasi Perlindungan Profil ==\nHalo [["+requester+"]], permohonan perlindungan untuk halaman pengguna lo [["+targetUserPage+"]] udah disetujui dan aktif, boys! --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 19.48 (UTC)"; | |||
return api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:"+requester, section: 'new', text: msg }); | |||
}).done(function() { | |||
location.reload(); | |||
}); | |||
}); | |||
$btnNo.click(function() { | |||
var alasan = prompt("Alasan penolakan:"); | |||
if (!alasan) return; | |||
$(this).prop('disabled', true).text('Rejecting...'); | |||
var newText = oldContent.replace("Status: 🕒 Sedang diajukan", "Status: ❌ '''Ditolak'''\n\nAlasan: " + alasan); | |||
api.postWithToken('edit', { action: 'edit', title: pageName, text: newText, summary: 'Protection Rejected' }).then(function() { | |||
var msg = "\n== Notifikasi ==\nHalo [["+requester+"]], permintaan perlindungan profil lo belum bisa disetujui karena: " + alasan + " --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 19.48 (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() { | ||