User:Dbenbenn/monobook.js

From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
function other_wiki_tab(tabs, title)
{
  tabs.appendChild(addlilink('http://commons.wikimedia.org/wiki/' + title, 'commons'));
}

// Returns <li><a href="url">name</a></li>
function addlilink(url, name)
{
  var na = document.createElement('a');
  na.setAttribute('href', url);

  var txt = document.createTextNode(name);
  na.appendChild(txt);

  var li = document.createElement('li');
  li.appendChild(na);
  return li;
}

// Adds a "blocklog" tab and fills in the username field on Special:Blockip, if a "&faketarget=username" is present.
function do_blockip_stuff()
{
  // Look for a &faketarget= for the username/ip
  var l = location.search.substring(1).split('&');
  var target = '';
  for (var i = 0; i < l.length; ++i)
    {
      var n = l[i].indexOf('=');
      if (l[i].substring(0, n) == 'faketarget')
	{
	  target = l[i].substring(n + 1);
	  break;
	}
    }

  if (target == '')
    return;

  // put account name in "IP Address/username" field
  var addr = document.getElementsByName('wpBlockAddress')[0];
  addr.value = unescape(target);

  // add "blocklog" tab
  var c1 = document.getElementById('column-one');
  var tabs = c1.getElementsByTagName('div')[0].getElementsByTagName('ul')[0];
  tabs.appendChild(addlilink('/w/index.php?title=Special%3ALog&type=block&user=&page=User%3A' + target, 'blocklog'));
}

// Gets the URL version of the page title.
function get_tidy_title()
{
  var editlk = document.getElementById('ca-edit').getElementsByTagName('a')[0].href;
  // cut everything up to "title=" from the start and everything past "&action=edit" from the end
  editlk = editlk.substring(editlk.indexOf('title=') + 6, editlk.lastIndexOf('&action=edit'));

  return editlk;
}

// Adds "block" and "blocklog" tabs to User: and User talk: pages.
function add_user_tabs(tabs, title)
{
  username = title.substring(title.indexOf(':') + 1);
  var slloc = username.indexOf('/');
  if (slloc > 0)
    username = username.substring(0, slloc);

  other_wiki_tab(tabs, title);
  tabs.appendChild(addlilink('/w/index.php?title=Special%3ALog&user=' + username, 'log'));
  tabs.appendChild(addlilink('/w/index.php?title=Special%3ABlockip&wpBlockAddress=' + username, 'block'));
  tabs.appendChild(addlilink('/w/index.php?title=Special%3ALog&type=block&page=User%3A' + username, 'blocklog'));
}

function add_default_tabs(tabs, title)
{
  other_wiki_tab(tabs, title);
  tabs.appendChild(addlilink('/w/index.php?title=Special%3ALog&page=' + title, 'log'));
}

function add_image_tabs(tabs, imagetitle)
{
  other_wiki_tab(tabs, imagetitle);
  tabs.appendChild(addlilink('http://tools.wikimedia.de/~daniel/WikiSense/CheckUsage.php?w=_100000&i=' + imagetitle, 'check-usage'));
  tabs.appendChild(addlilink('/w/index.php?title=Special%3ALog&page=' + imagetitle, 'log'));

  imagetitle = imagetitle.substring(6);

  var i = 0;
  while (i < imagetitle.length && imagetitle.substring(i, i+1) >= '0' && imagetitle.substring(i, i+1) <= '9')
    i++;
  imagetitle = imagetitle.substring(i);

  if (i > 0 && imagetitle.substring(0, 3) == 'px-') {
    imagetitle = imagetitle.substring(3);
    tabs.appendChild(addlilink('/wiki/Image:' + imagetitle, 'unthumb'));
  }
}

function do_onload()
{
  var title = get_tidy_title();
  var tabs = document.getElementById('column-one').getElementsByTagName('div')[0].getElementsByTagName('ul')[0];

  if (title.indexOf('Image:') == 0)
    add_image_tabs(tabs, title);
  else if (title.indexOf('User:') == 0
      || title.indexOf('User_talk:') == 0)
    add_user_tabs(tabs, title);
  else if (title.indexOf('Block_user') == 0) // could stand to be more robust
    do_blockip_stuff();
  else
    add_default_tabs(tabs, title);
}

if (window.addEventListener) 
  window.addEventListener("load", do_onload, false);
else if (window.attachEvent) 
  window.attachEvent("onload", do_onload);