//[[user:js/markZeroEdits]]
function markZeroEdits(){
var i = -1, j, k, entry, plusminus, isHRDone
var rows, td, aa, sp, step
var firstEditor, thisEditor, isRevert
mzRevertRegExp = window.mzRevertRegExp || /^(BOT[ -]*)?Reverted|^Reverting|^Undid revision /
appendCSS(window.mzCSS || 'table.revert-edit *, table.zero-edit * {color:#777799; }\
table.revert-edit td {text-decoration: line-through}')
while (entry=document.getElementById('mw-rc-closearrow-'+(++i))){//loop through all multiple edits
//jsMsg(i + ' ' + entry)
//check if this is a 0 size diff
while ((entry=entry.parentNode) && entry.nodeName!='TR');
plusminus = entry.cells[1].getElementsByTagName('span')[0]
if (!plusminus || plusminus.className!='mw-plusminus-null') continue
//get all collapsed edits inside hidden DIV
rows = document.getElementById('mw-rc-subentries-' + (i)).firstChild.rows
//some initial values
firstEditor = '' //first editor (who is possibly reverted later)
//check all edits from bottom, i.e. by the timeline
for (j=rows.length-1; j>=0; j--){
//find editor
td = rows[j].cells[1]
aa = td.getElementsByTagName('a')
for (k=0; k<aa.length && /&oldid=/.test(aa[k].href); k++);
thisEditor = aa[k].href
//compare with previous editor
if (!firstEditor){ //this is a beginning of possible edit-revert block
firstEditor = thisEditor
isRevert = false
continue
}else if (thisEditor==firstEditor && j>0){ //first editor keeps making several edits
continue
}
//we now have either a different editor of the last edit
//find edit summary
sp = getElementsByClassName(td, 'span', 'comment')[0]
if (!sp) break
//check if this was a revert
if (!mzRevertRegExp.test(ts_getInnerText(sp).substring(1))) break
//by default do not trust self reverts and reverts by unregs
if (thisEditor==firstEditor && !window.mzTrustSelfRv) break
if (/Special:Contributions/.test(thisEditor) && !window.mzTrustUnregRv) break
//all checks done, this looks like a revert after all
isRevert = true
firstEditor = '' //get ready for the next block of edits
}
//categorize the entry
while ((entry=entry.parentNode) && entry.nodeName!='TABLE');
if (isRevert){
entry.className += 'revert-edit'
if (window.mzMoveReverts)
do{
step = entry.nextSibling; entry.parentNode.appendChild(entry); entry = step
}while (entry && entry.nodeName != 'TABLE' && entry.nodeName != 'HR')
}else{
entry.className += 'zero-edit'
}
}//while
}
$(markZeroEdits)