Sabtu, 24 Oktober 2026
13:10 WIB
TERKINI
Bandar Lampung Waspada Hujan Ringan: Prakiraan Cuaca Lampung Sepanjang 24 Oktober 2026 Bandar Lampung Penundaan Pembahasan APBD Lampung 2027: Berkas dan Data Terkini Jadi Kunci Bandar Lampung Fokus Pendidikan dan Ekonomi Desa, Lampung Matangkan APBD 2027 Bandar Lampung Polisi Hadir di Jalanan: Ratusan Makan Siang Gratis Eratkan Hubungan Warga Bandar Lampung Bandar Lampung Ancaman Serius TNBBS: 23 Kasus Pidana Kehutanan Terungkap dalam Satu Dekade Bandar Lampung Penipuan Rekrutmen Honorer Rp20 Juta di Bandar Lampung Berakhir Damai Bandar Lampung Transformasi 40 Tahun FISIP Unila: Dari Prestasi Global hingga Riset Solutif Lampung Bandar Lampung Sinergi Lintas Sektor: TNBBS Perkuat Penegakan Hukum Lingkungan dengan Enam Strategi Bandar Lampung Dorong Gaya Hidup Sehat, Pemkot Bandar Lampung Dukung Jalan Sehat Akbar di Panjang Bandar Lampung Peringatan Petugas Diabaikan, Pemotor Tewas Tertabrak Kereta Babaranjang di Bandar Lampung Bandar Lampung Waspada Hujan Ringan: Prakiraan Cuaca Lampung Sepanjang 24 Oktober 2026 Bandar Lampung Penundaan Pembahasan APBD Lampung 2027: Berkas dan Data Terkini Jadi Kunci Bandar Lampung Fokus Pendidikan dan Ekonomi Desa, Lampung Matangkan APBD 2027 Bandar Lampung Polisi Hadir di Jalanan: Ratusan Makan Siang Gratis Eratkan Hubungan Warga Bandar Lampung Bandar Lampung Ancaman Serius TNBBS: 23 Kasus Pidana Kehutanan Terungkap dalam Satu Dekade Bandar Lampung Penipuan Rekrutmen Honorer Rp20 Juta di Bandar Lampung Berakhir Damai Bandar Lampung Transformasi 40 Tahun FISIP Unila: Dari Prestasi Global hingga Riset Solutif Lampung Bandar Lampung Sinergi Lintas Sektor: TNBBS Perkuat Penegakan Hukum Lingkungan dengan Enam Strategi Bandar Lampung Dorong Gaya Hidup Sehat, Pemkot Bandar Lampung Dukung Jalan Sehat Akbar di Panjang Bandar Lampung Peringatan Petugas Diabaikan, Pemotor Tewas Tertabrak Kereta Babaranjang di Bandar Lampung

MediaWiki:Gadget-MassRollback-Core.js

Bagikan:
/**
 * [MASSROLLBACK — ROLLBACKERS HELPER SCRIPT]
 * 
 * ⚠️ PERINGATAN: JANGAN MENGUBAH SKRIP INI TANPA
 * PERSETUJUAN PENGEMBANG MASSROLLBACK
 * 
 * •==============================================•
 * > Pencipta: Janorovic Volkov
 * > Pengembang: Janorovic Volkov
 * > Tipe: JavaScript
 * 
 * Lihat [[WP:MassRollback]] untuk informasi selengkapnya
 * tentang skrip ini
 * •==============================================•
 */
$(document).ready(function(){
if(mw.config.get('wgCanonicalSpecialPageName')!=='Contributions')return;
constcfg=mw.config.get();
constgroups=cfg.wgUserGroups||[];
constisRollbacker=groups.includes('rollbacker');
constisSysop=groups.includes('sysop');
if(!isSysop&&!isRollbacker)return;
varrollbackSelectedButton=newOO.ui.ButtonWidget({
label:'Kembalikan yang dipilih',
id:'rollback-selected-button',
flags:['progressive']
});
varrollbackAllButton=newOO.ui.ButtonWidget({
label:'Kembalikan semua',
id:'rollback-all-button',
flags:['destructive']
});
functionshowNotice(message,title='MassRollback'){
vardialog=newOO.ui.MessageDialog();
varwindowManager=newOO.ui.WindowManager();
$(document.body).append(windowManager.$element);
windowManager.addWindows([dialog]);
windowManager.openWindow(dialog,{
title:title,
message:message,
actions:[
{
action:'accept',
label:'OK',
flags:['primary','progressive']
}
]
});
}
functionfinish(message){
showNotice(message);
setTimeout(()=>location.reload(),500);
$('input.rollback-checkbox').prop('checked',false);
}
if($('#rollback-box').length===0){
var$rollbackBox=$(`
            <div id="rollback-box" class="mw-htmlform-ooui-wrapper oo-ui-layout oo-ui-panelLayout oo-ui-panelLayout-padded oo-ui-panelLayout-framed">
                <form id="rollback-form" class="mw-htmlform mw-htmlform-ooui oo-ui-layout oo-ui-formLayout">
                    <fieldset class="oo-ui-layout oo-ui-labelElement oo-ui-fieldsetLayout mw-collapsibleFieldsetLayout mw-collapsible mw-made-collapsible">
                        <legend role="button" class="oo-ui-fieldsetLayout-header mw-collapsible-toggle mw-collapsible-toggle-expanded" aria-expanded="true" tabindex="0">
                            <span class="oo-ui-labelElement-label">MassRollback</span>
                        </legend>
                        <div class="oo-ui-fieldsetLayout-group mw-collapsible-content" style="display: block;">
                            <div class="oo-ui-widget oo-ui-widget-enabled">
                                <label for="rollback-reason">Alasan pengembalian massal (opsional):</label>
                                <select id="rollback-reason">
                                    <option value="">-- Pilih alasan --</option>
                                    <option value="Suntingan uji coba">Suntingan uji coba</option>
                                    <option value="Vandalisme">Vandalisme</option>
                                    <option value="Spam">Spam</option>
                                </select>
                                <input type="text" id="rollback-summary" placeholder="Alasan kustom (opsional)" style="margin-top:10px;width:100%;padding:5px;">
                            </div>
                            <div id="rollback-buttons" style="margin-top:10px;"></div>
                        </div>
                    </fieldset>
                </form>
            </div>
        `);
$('#mw-content-text').prepend($rollbackBox);
$('#rollback-reason').change(function(){
if(!$('#rollback-summary').val()){
$('#rollback-summary').val($(this).val());
}
});
$('#rollback-box .mw-collapsible-toggle').click(function(){
var$content=$(this).closest('fieldset').find('.mw-collapsible-content');
varexpanded=$(this).attr('aria-expanded')==='true';
$(this).attr('aria-expanded',expanded?'false':'true');
expanded?$content.slideUp():$content.slideDown();
});
$('#rollback-buttons')
.append(rollbackSelectedButton.$element)
.append(rollbackAllButton.$element);
functionrollbackPage(pageTitle,summary,markbotFlag){
constuserName=mw.config.get('wgRelevantUserName');
constformattedSummary=
`Mengembalikan suntingan [[Istimewa:Kontribusi/${userName}|${userName}]] secara massal`+
(summary?`: ${summary}`:'')+
` ([[WP:MassRollback|MassRollback]])`;
constmarkbot=markbotFlag===true;
constapi=newmw.Api();
returnapi.postWithToken('rollback',{
action:'rollback',
title:pageTitle,
user:userName,
summary:formattedSummary,
tags:'MassRollback',
markbot:markbot
});
}
asyncfunctiontwoStepConfirm(){
returnnewPromise(resolve=>{
vardialog=newOO.ui.MessageDialog();
varwm=newOO.ui.WindowManager();
$(document.body).append(wm.$element);
wm.addWindows([dialog]);
wm.openWindow(dialog,{
title:"Peringatan MassRollback",
message:
`⚠️ Anda akan menjalankan pengembalian massal!\n\n`+
`MassRollback adalah tindakan berisiko tinggi yang dapat mengembalikan banyak suntingan sekaligus.\n\n`+
`Apakah Anda ingin melanjutkan?`,
actions:[
{action:'cancel',label:'Batal',flags:['safe']},
{action:'continue',label:'Lanjutkan',flags:['destructive']}
]
}).closed.then(data=>{
if(data&&data.action==='continue'){
vardialog2=newOO.ui.MessageDialog();
varwm2=newOO.ui.WindowManager();
$(document.body).append(wm2.$element);
wm2.addWindows([dialog2]);
wm2.openWindow(dialog2,{
title:"Peringatan MassRollback",
message:
`⛔ Konfirmasi terakhir!\n\n`+
`Anda akan menjalankan pemgembalian massal.\n`+
`Aksi ini TIDAK dapat dibatalkan.\n\n`+
`Anda YAKIN ingin melanjutkan?`,
actions:[
{action:'cancel',label:'Tidak',flags:['safe']},
{action:'accept',label:'Ya, jalankan',flags:['destructive']}
]
}).closed.then(result=>{
resolve(result&&result.action==='accept');
});
}else{
resolve(false);
}
});
});
}
$('#rollback-selected-button').click(asyncfunction(e){
e.preventDefault();
constok=awaittwoStepConfirm();
if(!ok)return;
e.preventDefault();
constsummary=$('#rollback-summary').val();
constmarkbotFlag=isSysop?true:false;
constselectedPages={};
$('input.rollback-checkbox:checked').each(function(){
constp=$(this).data('title');
if(!selectedPages[p])selectedPages[p]=true;
});
constuserName=mw.config.get('wgRelevantUserName');
constpages=Object.keys(selectedPages);
if(!pages.length)returnshowNotice('⚠️\n\nTidak ada suntingan yang ditandai.');
Promise.allSettled(
pages.map(p=>rollbackPage(p,summary,markbotFlag))
).then(results=>{
constfailures=results.filter(r=>r.status==='rejected').length;
if(failures===0){
finish(`🟢\n\nSemua suntingan ${userName} telah dikembalikan!`);
}else{
finish(`🟡\n\nSebagian besar suntingan berhasil dikembalikan.\n${failures} halaman tidak dapat dikembalikan (normal, karena bukan revisi terakhir).`);
}
});
});
$('#rollback-all-button').click(asyncfunction(e){
e.preventDefault();
constok=awaittwoStepConfirm();
if(!ok)return;
constsummary=$('#rollback-summary').val();
constmarkbotFlag=isSysop?true:false;
constuserName=mw.config.get('wgRelevantUserName');
constapi=newmw.Api();
api.get({
action:'query',
list:'usercontribs',
ucuser:userName,
uclimit:'max',
ucprop:'title',
format:'json'
}).done(data=>{
consttitles=[...newSet(data.query.usercontribs.map(c=>c.title))];
Promise.allSettled(
titles.map(t=>rollbackPage(t,summary,markbotFlag))
).then(results=>{
constfailures=results.filter(r=>r.status==='rejected').length;
if(failures===0){
finish(`🟢\n\nSemua suntingan ${userName} telah dikembalikan!`);
}else{
finish(`🟡\n\nSebagian besar suntingan berhasil dikembalikan.\n${failures} halaman tidak dapat dikembalikan (normal, karena bukan revisi terakhir).`);
}
});
});
});
$('li[data-mw-revid]').each(function(){
const$li=$(this);
lettitle=$li.find('.mw-contributions-title').text().trim();
if(!title)title=$li.find('a.mw-contributions-title').text().trim();
const$checkbox=$('<input type="checkbox" class="rollback-checkbox" style="margin-right:5px;">')
.data('title',title);
$li.prepend($checkbox);
});
}
});
Konten disalin dari Wikipedia Bahasa Indonesia (lisensi CC BY-SA) Lihat versi asli di Wikipedia

Rekomendasi Pilihan