/* Подключить:
importScript('u:Jaguar K/histc.js');
версия от 21:37, 28 марта 2021 — теперь [±] работает и вклад → в
версия от 22:40, 30 марта 2021 — строки по умолчанию развернуты (в том числе при динамическом вызове)
версия от 23:48, 30 марта 2021 — состояние свернуто/развернуто сохраняется после применения [±] (в том числе при динамическом вызове)
версия от 18:36, 4 апреля 2021 — изменен текст ссылки благодарности
версия от 00:55, 6 апреля 2021 — подсветка своих правок по умолчанию отключена, измените значение histCombMyBg вручную
версия от 17:18, 20 июня 2021 — решение проблем правок со скрытым автором и/или текстом и <big>
now diff classes are 'mw-history-histlinks-previous' & 'mw-history-histlinks-current'
*/
var histComb = new function(){
if (window.histCombThank) $('.mw-thanks-thank-link').text(histCombThank)
if (window.histCombTalk) $('.mw-usertoollinks-talk').text(histCombTalk)
if (window.histCombContrib) $('.mw-usertoollinks-contribs').text(histCombContrib)
if (window.histCombRevert) $('.mw-history-undo').text(histCombRevert)
var pagehis, histRow, histSize, isCombEdits = false
this.preLoad = function(){
for (var a=$('.mw-history-undo>a'), b=$('.mw-history-histlinks'), i=0, j=0; i<a.length; j++){
k=a[i].href.match(/undoafter=(\d+)&undo/)
m=b[j].children[1].children[0]
if(m) {m.href=m.href.replace("&diff=prev&oldid=","&oldid="+k[1]+"&diff="); i++}
}
}
this.onLoad = function(){
if (!(pagehis = document.getElementById('pagehistory'))) return
histRow = pagehis.getElementsByTagName('li')
histSize = new Array (histRow.length)
var row, spans, i, aa, author, author_p = '', size_digits
var sameAuthor = 0, thisMinor, allMinor = true
for (var rr=histRow.length-1; rr>=0; rr--){ //main loop: bottom to top
row = histRow[rr]
thisMinor = false
spans = row.getElementsByTagName('span')
//check all spans
for (i=0; i<spans.length; i++)
switch (spans[i].className){
case 'history-size':
size_digits = spans[i].innerHTML.match(/\d+/g)
histSize[rr] = size_digits ? size_digits.join('') : '0'
spans[i].title = spans[i].innerHTML.replace(/ /g,' ')
if (histSize[rr+1]); else histSize[rr+1] = histSize[rr] - spans[i].nextElementSibling.textContent.replace("−",'-').replace("+",'').replace(" ",''); // replace + only for tesr purpuse
insertDiffValue(spans[i], histSize[rr] - histSize[rr+1])
break
case 'minor':
thisMinor = true
break
case 'history-user': // get user name and shorten talk/contribs
aa = spans[i].getElementsByTagName('a')
if(aa[1]) author = aa[1].title.split(':')[1]
else author="delete"+rr
break
//case 'comment': histSumm = spans[i].innerHTML break
}//end switch inside for
if (!histSize[rr] && histSize[rr+1]) histSize[rr] = histSize[rr+1] //assume it was '(un)protect' edit
if(window.histCombMyBg){if (mw.config.get('wgUserName') == author) histRow[rr].style.backgroundColor = histCombMyBg}
//check how many consequent edits
if (author == author_p)
sameAuthor++
else {
if (sameAuthor > 1) createCombineEdit(rr+1, sameAuthor, allMinor)
sameAuthor = 1
author_p = author
allMinor = thisMinor
}
if (!thisMinor) allMinor = false
}//main loop
if (sameAuthor>1) createCombineEdit(0, sameAuthor, allMinor)
if (isCombEdits) { //add all expand/collapse link
var togAll = document.createElement('a')
togAll.appendChild(document.createTextNode('[±]'))
togAll.href = 'javascript:histComb.toggleAll()'
//togAll.style.marginLeft = '0.2em'
pagehis.parentNode.insertBefore(togAll, pagehis.previousSibling)
}
if ($.cookie('isComb') === 'true') histComb.toggleAll() //разворачивание блоков
}
this.toggleAll = function(){
var links = pagehis.getElementsByClassName('collapsedEdits')
for (var i=0; i<links.length; i++)
if (isCombEdits != (links[i].innerHTML == '[–]'))
eval(links[i].href)
$.cookie('isComb', isCombEdits, {expires: 365,path: '/'}) // state
isCombEdits = ! isCombEdits
}
this.toggle = function (m, len, isMinor){ //handler for collapsing link
var row = histRow[m]
var spans = row.getElementsByTagName('span')
var plus = row.lastChild
var radios = row.getElementsByTagName('input')
var topDiff = row.querySelector('.mw-history-histlinks').children[1].children[0] // "diff to last" in the combined edit
var i, clss, bottomDiff, oldid
var isHiding = (plus.innerHTML == '[–]')
if (isHiding) {//need to collapse −
plus.innerHTML = '[' + len + ']'
row.style.borderLeft = '1px solid transparent'
//hide other rows
for (i=m+1; i<m+len; i++) histRow[i].style.display = 'none'
//"diff from last" link: get oldid from the lowest collapsed edit
bDiff = histRow[m+len-1].querySelector('.mw-history-histlinks').children[1].children[0]
if(bDiff.href){bottomDiff=bDiff.href
if(bottomDiff.match(/oldid=(\d+)/)){
if (bottomDiff.indexOf('&diff=') == -1) topDiff.style.visibility = 'hidden' //the very 1st edit
oldid = bottomDiff.match(/oldid=(\d+)/)[1]
if(topDiff){
topDiff['old'] = topDiff.href
topDiff.href = topDiff.href.replace(/&oldid=\d+/, '&oldid='+oldid)}
}
} else if(topDiff)topDiff.style.visibility = 'hidden'
}else{ //need to expand
plus.innerHTML = '[–]'
//show other rows and visually reference the whole group
row.style.borderLeft = '1px dotted gray'
for (i=m+1; i<m+len; i++){
histRow[i].style.display = 'block'
histRow[i].style.borderLeft = '1px dotted gray'
histRow[i].style.listStyle = 'none none'
}
histRow[m+len-1].style.borderBottom = '1px dotted gray'
if(topDiff){ topDiff.style.visibility = 'visible' // diff is waful
if(topDiff['old'])topDiff.href = topDiff['old']
}
}
//hide/show/modify spans in this row
for (i=0; i<spans.length; i++)
switch (spans[i].className.split(' ')[0]){
case 'minor':
spans[i].style.display = (isHiding && !isMinor)?'none':'inline'
break
case 'history-size': //switch to combined diff size and back
insertDiffValue(spans[i], histSize[m] - (isHiding ? histSize[m+len] : histSize[m+1]))
break
case 'comment': //hide/show
spans[i].style.display = (isHiding && !window.histCombLeaveComment)?'none':'inline'
break
case 'mw-history-undo':
var undoLnk = spans[i].getElementsByTagName('a')[0]
if (isHiding) {
undoLnk['old'] = undoLnk.href
undoLnk.href = undoLnk.href.replace(/&undoafter=\d+/, '&undoafter='+oldid)
}else
undoLnk.href = undoLnk['old']
break
//case 'history-user':
}
}
function createCombineEdit(m, len, isMinor){ //creates collapsing link for row m down to row m+len
var row = histRow[m]
row.style.listStyle = 'none none'
row.style.position = 'relative'
var plus = document.createElement('a')
plus.className = 'collapsedEdits'
plus.appendChild(document.createTextNode('[–]'))
plus.style.position = 'absolute'
plus.style.left = '-22px'
plus.style.top = '2px'
plus.href = 'javascript:histComb.toggle('+m+','+len+','+isMinor+')'
row.appendChild(plus)
if (!window.histCombNoCollapse) histComb.toggle(m, len, isMinor) //and collapse
isCombEdits = true
}
function insertDiffValue(span, value){
var html, class2
if (value>0) {
html = '(+' + value + ')'
class2 = ' mw-plusminus-pos'
} else if (value<0) {
html = '(−' + -value + ')'
class2 = ' mw-plusminus-neg'
} else {
html = '(0)'
class2 = ' mw-plusminus-null'
}
//span.style.fontWeight = (value < -5000) ? 'bold' : 'normal'
span.innerHTML = html
span.className = span.className.split(' ')[0] + class2
}
}//obj
//if (doneOnloadHook) histComb.onLoad()
//else
if (mw.config.get('wgAction') == 'history') {
$(".history-size").removeClass('mw-diff-bytes');
$(histComb.preLoad);
$(histComb.onLoad);
mw.util.addCSS('.mw-diff-bytes{display: none;}');
}