User:SD0001/hide-reverted-edits.js: Difference between revisions

Content deleted Content added
begin script for hiding reverted edits from page histories
 
complete
Line 1:
/**
// TODO: handle reverts of reverts
* Script to provide a button on page histories
* which when clicked shows a sanitized version of the history
* with reverted edits (and their reversions) removed
*
*/
 
$.when(mw.loader.using('mediawiki.util'), $.ready).then(function() {
 
$.when($.ready).then(function() {
if (mw.config.get('wgAction') !== 'history') return;
 
if (mw.config.get('wgAction') !== 'history') return;
$('#pagehistory li.mw-tag-mw-undo').each(function() {
 
var hidingReverts = false;
var editcomment = $(this).find('.comment').text();
$('<button>')
.attr('class', 'reverted-edits-showhide')
.text('Hide reverted edits')
.on('click', function(e) {
e.preventDefault();
 
if (!hidingReverts) {
// Plain mediawiki undo with untampered edit summary
hideRevertedEdits();
if (editcomment.startsWith('Undid revision ')) {
$('.reverted-edits-showhide').text('Show reverted edits');
var reverted_rev = parseInt(editcomment.slice('Undid revision '.length));
} else {
if (isNaN(reverted_rev)) return true;
$('#pagehistory li').show();
$('.reverted-edits-showhide').text('Hide reverted edits');
}
hidingReverts = !hidingReverts;
 
}).insertAfter('.mw-history-compareselectedversions');
$(this).hide();
$('.mw-history-compareselectedversions').css('display', 'inline');
$('[data-mw-revid=' + reverted_rev +']').hide();
 
});
// Twinkle reverts
} else if (editcomment.startsWith('Reverted ')) {
 
function hideRevertedEdits() {
// rollback
$('#pagehistory li').each(function(idx) {
if (/^Reverted (?:good faith|\d+) edits? by/.test(editcomment)) {
var reverted_user = /^Reverted (?:good faith|\d+) edits? by (.*?) \(talk\)/.exec(editcomment)[1];
 
if (this.style.display === 'none') {
// IPv6 addresses are in lowercase in history page, but in uppercase in rollback edit summary
return true; // continue if already hidden. This handles reverts of reverts.
if (mw.util.isIPv6Address(reverted_user)) {
}
reverted_user = reverted_user.toLowerCase();
 
}
var editcomment = $(this).find('.comment').text();
var rgx, rev;
 
// Plain mediawiki undo with untampered edit summary
if (editcomment.startsWith('Undid revision ')) {
var reverted_rev = parseInt(editcomment.slice('Undid revision '.length));
if (isNaN(reverted_rev)) return true;
$(this).hide();
$('[data-mw-revid=' + reverted_rev +']').hide();
var rev = $(this).next();
while console.log(idx, rev$(this).find('.mw-userlink bdichangeslist-date').text(), === reverted_user 'undo') {;
rev.hide();
rev = rev.next();
if (rev.length === 0) {
break; // end of page history (in current view)
}
}
 
// Twinkle 'Restore this version' editsreverts
} else if (rgx = /^Reverted to revision (\d+) by /.testexec(editcomment)) {
var last_good_revision = /^Reverted to revision (\d+) by /.exec(editcomment)rgx[1];
$(this).hide();
var rev = $(this).next();
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
break; // end of page history (in current view)
}
}
console.log(idx, $(this).find('.mw-changeslist-date').text(), 'TW restore');
 
// not a twinkle rollback?
} else {
return true;
}
 
var reverted_user;
}
 
// Twinkle rollback
if (rgx = /^Reverted (?:good faith|\d+) edits? by (.*?) \(talk\)/.exec(editcomment)) {
reverted_user = rgx[1];
console.log(idx, $(this).find('.mw-changeslist-date').text(), 'Twinkle rollback');
 
// STiki AGF/normal/vandalism revert
});
// also matches old Twinle "identified as vandalism" rollbacks
} else if (rgx = /^Reverted \d+ (?:good faith )?edits? by (.*?) (?:identified as (?:test\/)?vandalism )?using STiki/.exec(editcomment)) {
reverted_user = rgx[1];
console.log(idx, $(this).find('.mw-changeslist-date').text(), 'STiki rollback');
 
// Mediawikinormal mediawiki rollback and Huggle rollback
} else if (rgx = /^Reverted edits by (.*?) \(talk\)/.exec(editcomment)) {
$('#pagehistory li.mw-tag-mw-rollback').each(function() {
reverted_user = rgx[1];
console.log(idx, $(this).find('.mw-changeslist-date').text(), 'mw/huggle rollback');
 
// ClueBot
var editcomment = $(this).find('.comment').text();
} else if ( ['ClueBot NG', 'ClueBot'].includes($(this).find('.mw-userlink bdi').text()) ) {
reverted_user = /^Reverting possible vandalism by (.*?) to version by/.exec(editcomment)[1];
console.log(idx, $(this).find('.mw-changeslist-date').text(), 'cluebot rollback');
 
// XLinkBot
// sanity check
} else if ( $(this).find('.mw-userlink bdi').text() === 'XLinkBot' ) {
if (! editcomment.startsWith('Reverted edits by ')) return true;
reverted_user = /BOT--Reverting link additions\(s\) by (.*?) to/.exec(editcomment)[1];
console.log(idx, $(this).find('.mw-changeslist-date').text(), 'xlinkbot rollback');
}
 
if (reverted_user) {
var reverted_user = editcomment.slice('Reverted edits by '.length, editcomment.indexOf(' (talk)'));
 
// page history shows compressed IPv6 address (with multiple 0's replaced by ::)
// IPv6 addresses are in lowercase in history page, but in uppercase in rollback edit summary
// though rollback edit summaries use the uncompressed form (though with leading 0's removed)
if (mw.util.isIPv6Address(reverted_user)) {
if (mw.util.isIPv6Address(reverted_user)) {
reverted_user = reverted_user.toLowerCase();
reverted_user = reverted_user.replace(/\b(?:0+:){2,}/, ':').toLowerCase();
}
}
$(this).hide();
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)
}
}
 
$(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)
}
}
});
 
});
}