Content deleted Content added
fix redwarn summary |
handle twinkle's new restore-to-revision edit summary |
||
Line 54:
var editcomment = $this.find('.comment').text();
var rgx, reverted_user, last_good_revision;
// Plain MediaWiki undo with untampered edit summary
Line 72:
}
// 'Restore this version' reverts using Twinkle (old) or popups or pending changes reverts
// TW(old):
// popups: Revert to revision 34234234 by ...
// PC tool: Revereted 3 pending edits by Foo and Bar to revision 3243432 by ...
} else if (rgx = /^Revert(?:ed)? (?:\d+ pending edits? by .*?)?to revision (\d+)/.exec(editcomment)) {
log(idx, $this.find('.mw-changeslist-date').text(), 'restore');
// 'Restore this version' reverts using Twinkle (new)
} else if (rgx = /^Restored revision (\d+) by/) {
last_good_revision = rgx[1];
log(idx, $this.find('.mw-changeslist-date').text(), 'tw(new) restore');
// Reverts tagged as "Rollback"
} else if ($this.find('.mw-tag-marker-mw-rollback').length) {
reverted_user = $this.next().find('.mw-userlink bdi').text();
}
// Twinkle rollbacks
else if (rgx = /^Reverted (?:good faith|\d+) edits? by (.*?) \(talk\)/.exec(editcomment)) {
log(idx, $this.find('.mw-changeslist-date').text(), 'Twinkle rollback');
// Old Twinke vandalism rollback
// STiki vandalism rollbacks, and all reverts using MediaWiki rollback, Huggle, Cluebot have the "Rollback" tag added
// and hence would have been handled above. The regex checks here are to account for old reverts done before the
// "Rollback" tag was introduced
// STiki AGF/normal/vandalism revert
} else if (rgx = /^Reverted \d+ (?:good faith )?edits? by (.*?) (?:identified as test\/vandalism )?using STiki/.exec(editcomment)) {
reverted_user = rgx[1];
log(idx, $this.find('.mw-changeslist-date').text(), 'STiki rollback');
// normal MediaWiki rollback and Huggle rollback, and redwarn rollback
// MW/Huggle: Reverted edits by User (talk)
// RedWarn: Reverting edit(s) by User (talk)
} else if (rgx = /^Revert(?:ed|ing) edit\(?s\)? by (.*?) \(talk\)/.exec(editcomment)) {
reverted_user = rgx[1];
log(idx, $this.find('.mw-changeslist-date').text(), 'mw/huggle/redwarn rollback');
// ClueBot
} else if (['ClueBot NG', 'ClueBot'].includes($this.find('.mw-userlink bdi').text())) {
reverted_user = /^Reverting possible vandalism by (.*?) to version by/.exec(editcomment)?.[1];
log(idx, $this.find('.mw-changeslist-date').text(), 'cluebot rollback');
}
if (reverted_user) {
// page history shows compressed IPv6 address (with multiple 0's replaced by ::)
// though rollback edit summaries use the uncompressed form (though with leading 0's removed)
if (mw.util.isIPv6Address(reverted_user)) {
reverted_user = reverted_user.replace(/\b(?:0+:){2,}/, ':').toLowerCase();
}
$this.hide();
var $rev = $this.next();
while ($rev.find('.mw-userlink bdi').text() === reverted_user) {
$rev.hide();
$rev = $rev.next();
if ($rev.length === 0) break; // end of page history (in current view)
}
if (last_good_revision) {
if (parseInt(last_good_revision) > parseInt($rev.attr('data-mw-revid')) ||
parseInt(last_good_revision) < 100) { // sanity checks
return true; // revision id given has to be wrong
}
while ($rev.attr('data-mw-revid') !== last_good_revision) {
$rev.hide();
$rev = $rev.next();
if ($rev.length === 0) break; // end of page history in current view
}
|