User:BZPN/MassRollback2.js: Difference between revisions

From Test Wiki
Content deleted Content added
BZPN (talk | contribs)
No edit summary
BZPN (talk | contribs)
No edit summary
Line 529: Line 529:


try {
try {
await self.performRollback([$(this).data('mr-edit')]);
const edit = $(this).data('mr-edit');
// If username missing from config, try from RC line extraction
if (!mw.config.get('wgRelevantUserName') && edit.user) {
mw.config.set('wgRelevantUserName', edit.user);
}
await self.performRollback([edit]);
mw.notify('Successfully rolled back 1 edit.', { type: 'success' });
mw.notify('Successfully rolled back 1 edit.', { type: 'success' });
if (confirmResult.leaveWarning) {
if (confirmResult.leaveWarning) {
Line 549: Line 554:
const revid = $line.data('mw-revid') || $line.attr('data-mw-revid');
const revid = $line.data('mw-revid') || $line.attr('data-mw-revid');
const parentid = $line.data('mw-rollback-revision') || $line.attr('data-mw-prev-revid') || $line.attr('data-mw-rollback-revision');
const parentid = $line.data('mw-rollback-revision') || $line.attr('data-mw-prev-revid') || $line.attr('data-mw-rollback-revision');
// Try to get page title
let title = $line.find('.mw-title, .mw-changeslist-title, a.mw-changeslist-title').first().text().trim();
let title = $line.find('.mw-title, .mw-changeslist-title, a.mw-changeslist-title').first().text().trim();
if (!title) {
if (!title) {
const $plink = $line.find('a[title]').first();
const $plink = $line.find('a[title]').first();
title = ($plink.attr('title') || '').trim();
title = ($plink.attr('title') || '').trim();
}
// Try to get username from the RC line
let user = $line.find('.mw-userlink').first().text().trim();
if (!user) {
const $ulink = $line.find('a[href*="/wiki/User:"] , a.mw-userlink').first();
user = ($ulink.text() || '').trim();
}
}
if (revid && parentid && title) {
if (revid && parentid && title) {
return { title: title, revid: revid, parentid: parentid, timestamp: new Date().toISOString() };
return { title: title, revid: revid, parentid: parentid, timestamp: new Date().toISOString(), user: user || null };
}
}
// Fallback from diff link
const $diff = $line.find('a[href*="diff="][href*="oldid="]').first();
const $diff = $line.find('a[href*="diff="][href*="oldid="]').first();
if ($diff.length) {
if ($diff.length) {
Line 563: Line 576:
const pid = params.oldid || params.prev || '';
const pid = params.oldid || params.prev || '';
if (!title) title = ($diff.attr('title') || '').replace(/^Special:Diff\/\d+/, '').trim();
if (!title) title = ($diff.attr('title') || '').replace(/^Special:Diff\/\d+/, '').trim();
if (rv && title) return { title: title, revid: rv, parentid: pid, timestamp: new Date().toISOString() };
if (rv && title) return { title: title, revid: rv, parentid: pid, timestamp: new Date().toISOString(), user: user || null };
}
}
return null;
return null;
Line 929: Line 942:
// Nowa wersja: grupujemy edycje wg tytułu i dla każdej grupy wykrywamy ciąg kolejnych edycji.
// Nowa wersja: grupujemy edycje wg tytułu i dla każdej grupy wykrywamy ciąg kolejnych edycji.
performRollback: function(contributions) {
performRollback: function(contributions) {
const userName = mw.config.get('wgRelevantUserName');
// Ensure userName is available (RC may not set wgRelevantUserName)
let userName = mw.config.get('wgRelevantUserName');
if (!userName && contributions && contributions.length && contributions[0].user) {
userName = contributions[0].user;
}
const reason = $('#rollback-reason').val() === 'other'
const reason = $('#rollback-reason').val() === 'other'
? $('#custom-reason').val()
? $('#custom-reason').val()
: $('#rollback-reason option:selected').text();
: $('#rollback-reason option:selected').text();
const summary = `[[Help:Revert a page|Reverted]] edit(s) by [[User:${userName}|${userName}]]: ${reason} ([[User:BZPN/MassRollback|MR]])`;
const summary = userName
? `[[Help:Revert a page|Reverted]] edit(s) by [[User:${userName}|${userName}]]: ${reason} ([[User:BZPN/MassRollback|MR]])`
: `[[Help:Revert a page|Reverted]] edit(s): ${reason} ([[User:BZPN/MassRollback|MR]])`;
const api = new mw.Api();
const api = new mw.Api();

// If username still not available, fallback to extracting from contributions array
if (!userName) {
const fromList = (contributions || []).map(c => c.user).filter(Boolean)[0];
if (fromList) userName = fromList;
}


// Group edits by page title
// Group edits by page title