User:BZPN/MassRollback2.js: Difference between revisions
From Test Wiki
Content deleted Content added
No edit summary |
No edit summary |
||
| Line 529: | Line 529: | ||
try { |
try { |
||
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) { |
||
// 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 = |
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 |
||