User:Vintei/monobook.js

From Wikipedia, the free encyclopedia

If a message on your talk page led you here, please be wary of who left it. The code below could contain malicious content capable of compromising your account; if your account appears to be compromised, it will be blocked. If you are unsure whether the code is safe, you can ask at the appropriate village pump.
Note: After saving, you have to bypass your browser's cache to see the changes. In Internet Explorer and Firefox, hold down the Ctrl key and click the Refresh or Reload button. Opera users have to clear their caches through Tools→Preferences, see the instructions for Opera. Konqueror and Safari users can just click the Reload button.
importScript("User:Lupin/recent2.js");
// [[User:Lupin/popups.js]]
importScript('User:Lupin/popups.js');
importScript('User:AzaToth/twinkle.js');
importScript('User:Ioeth/friendly.js');
if (location.href.indexOf('Special:Watchlist') != -1) {
  importScript('User:Misza13/watchlistSorter.js');
}
// Stub tag tab. By [[User:ais523]], on a request by [[User:thesublime514]].
// ([[User:ais523/stubtagtab.js]])
// <source lang="javascript">
addOnloadHook(function(){
  if(wgNamespaceNumber==0&&wgAction=="view")
  {
    if(document.getElementById("ca-edit"))
      addPortletLink('p-cactions', 'javascript:stubtagtab()', 'stub', 'ca-stubtag',
                                   'Add a stub tag to this page', '');
  }
  if(location.href.indexOf("&autoaddstubtag=")!=-1&&document.getElementById('wpTextbox1')!=null)
  {
    var x=decodeURIComponent(location.href.split("&autoaddstubtag=")[1]);
    if(x=="") x="stub"; else x+="-stub";
    document.getElementById('wpTextbox1').value+="\n{"+"{"+x+"}}"; //add to the end of the article
    document.getElementById('wpSummary').value=
      "Tagging with {"+"{"+x+"}} using [[WP:US/S|user scripts]]";
    document.getElementById('wpPreview').click();
  }
});
 
function stubtagtab()
{
  var x=prompt("Which stub tag? (Leave blank for {"+
               "{stub}}; otherwise -stub will be added to the name)");
  if(x==null) return;
  location.href=wgServer+wgScript+"?title="+encodeURIComponent(wgPageName)+                                  
                "&action=edit&autoaddstubtag="+encodeURIComponent(x);
}
 
// </source> [[Category:Wikipedia scripts]]
importScript('User:Barticus88/edit section zero.js');
function talkpageplus()
{
    var talkpagelink = document.getElementById('ca-talk');
    if (talkpagelink.className == 'new')
    {
        talkpagelink.firstChild.href += '&section=new';
    }
}
 
addOnloadHook(talkpageplus);
//
//
var histComb = new function(){
 
if (!window.histCombTalk) histCombTalk = 't'
if (!window.histCombContrib) histCombContrib = 'c'
if (!window.histCombMyBg) histCombMyBg = '#F0FFF0'
 
var  pagehis, histRow, histSize, isCombEdits = false
 
 
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'
      if (histSize[rr+1]){ 
        spans[i].title = spans[i].innerHTML.replace(/&nbsp;/g,' ')
        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')
      author = aa[1].title.split(':')[1]
      aa[1].innerHTML = histCombTalk 
      if (aa.length >= 3 && (aa[2].title.indexOf(':Contributions/') != -1)) //for anons this could be 'block'
        aa[2].innerHTML = histCombContrib 
      break
    case 'mw-history-undo':
      aa = spans[i].getElementsByTagName('a')[0]
      aa.title = aa.innerHTML 
      aa.innerHTML = '×'
      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 (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) { //collapse top editor too
   createCombineEdit(0, sameAuthor, allMinor)
   if (histRow.length > sameAuthor){ //and select next editor left radio button
     rr = histRow[sameAuthor]
     rr.className = 'selected'
     rr.getElementsByTagName('input')[0].checked = true
   }
 }
 
 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)   
 }
 
 //bonus: link to toоlserver
 var lnk = document.createElement('a')
 lnk.style.marginLeft = '20px'
 lnk.href = 'http://tools.wikimedia.de/~daniel/WikiSense/Contributors.php?'
  +'wikilang='+wgServer.substring(wgServer.lastIndexOf('/')+1, wgServer.indexOf('.'))
  +'&wikifam='+wgServer.substring(wgServer.indexOf('.'))
  +'&grouped=on&order=-edit_count&page='+encodeURIComponent(wgPageName)
 lnk.appendChild(document.createTextNode('Contributors'))
 lnk.title = 'All authors sorted by edits (on toolserver)'
 if (i=document.getElementById('contentSub')) i.appendChild(lnk)
 
}
 
 
this.toggleAll = function(){
 var links = getElementsByClassName(pagehis, 'a', 'collapsedEdits')
 for (var i=0; i<links.length; i++)
   if (isCombEdits != (links[i].innerHTML == '[–]'))
     eval(links[i].href)
 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.getElementsByTagName('a')[ m > 0 ? 1 : 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
   bottomDiff = histRow[m+len-1].getElementsByTagName('a')[1].href
   if (bottomDiff.indexOf('&diff=') == -1)  topDiff.style.visibility = 'hidden' //the very 1st edit
   oldid = bottomDiff.match(/oldid=(\d+)/)[1]
   topDiff['old'] = topDiff.href
   topDiff.href = topDiff.href.replace(/&oldid=\d+/, '&oldid='+oldid)
 }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'
   topDiff.href = topDiff['old']
   topDiff.style.visibility = 'visible'
 }
 //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 < -500) ? 'bold' : 'normal'
 span.innerHTML = html
 span.className = span.className.split(' ')[0] + class2
}
 
}//obj
 
if (doneOnloadHook) histComb.onLoad()
else if (wgAction == 'history') addOnloadHook(histComb.onLoad)