User:Jossi/monobook.js

From Wikipedia, the free encyclopedia

Note: After saving, you have to bypass your browser's cache to see the changes. Firefox/Mozilla/Safari: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Internet Explorer: press Ctrl-F5, Opera/Konqueror: press F5.

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.
//Interiot's javascript edit counter
if (document.title.indexOf('User:Interiot/Tool2/code.js') != -1) {
  document.write('<script type="text/javascript" src="'
    + 'http://en.wikipedia.org/w/index.php?title=User:Interiot/Tool2/code.js'
    + '&action=raw&ctype=text/javascript&dontcountme=s"></script>'); }

// install [[User:Cacycle/diff]] text diff code
document.write('<script type="text/javascript" src="'
  + 'http://en.wikipedia.org/w/index.php?title=User:Cacycle/diff.js'
  + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');

// install [[User:Pilaf/Live_Preview]] page preview tool
document.write('<script type="text/javascript" src="'
  + 'http://en.wikipedia.org/w/index.php?title=User:Pilaf/livepreview.js'
  + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');

// install [[User:Cacycle/editor]] edit tool
document.write('<script type="text/javascript" src="'
  + 'http://en.wikipedia.org/w/index.php?title=User:Cacycle/wikEd.js'
  + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');
//<nowiki>


// [[User:Lupin/popups.js]] - please include this line
document.write('<script type="text/javascript" src="'
             + 'http://en.wikipedia.org/w/index.php?title=User:Lupin/popups.js'
             + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');

simplePopups=true;


function addlilink(tabs, url, name){
    var na = document.createElement('a');
    na.href = url;
    na.appendChild(document.createTextNode(name));
    var li = document.createElement('li');
    li.appendChild(na);
    tabs.appendChild(li);
    return li;
}

//////////////////////////////////////////
// Tabs by Korath
// 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;
}

// appends msg to the currently-editted page, sets the summary to summ,
// and marks or unmarks the Watch this page checkbox according to watch.
function edit_summary_watch(msg, summ, watch, line)
{
  var f = document.editform, t = f.wpTextbox1;
  if ((t.value.length > 0) && (line == 1))
    t.value += '\n';
  t.value += msg;
  f.wpSummary.value = summ;
  f.wpWatchthis.checked = watch;
}

function vfddelete(){
    document.forms.deleteconfirm.wpReason.value = '[[Wikipedia:Articles for deletion/' + unescape(window.location.href.replace(/^.*\?title=([^&]+)&action=delete.*$/, '$1').replace(/_/g, ' ')).replace(/^(Talk|Wikipedia( talk)?):/, '') + ']]';
}

// adds various tabs to call the above
function add_tabs()
{
  var c1 = document.getElementById('column-one');
  var tabs = c1.getElementsByTagName('div')[0].getElementsByTagName('ul')[0];

  // Only add for pages with "Editing User talk:" somewhere in the title
  if (document.title.indexOf("Editing User talk:") != -1)
    {
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:User:Jossi/Welcome}} ~" + "~" + "~" + "~", "{{" + "welcome}}", false, 1)',"Welc"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:User:Jossi/welcomeip}} ~" + "~" + "~" + "~", "{{welcomeip}}", false, 1)',"WelcIP"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:bv-n|}} ~" + "~" + "~" + "~\n", "warning", false, 1)',"BV"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:test-n|}} ~" + "~" + "~" + "~\n", "Your test", false, 1)',"T1"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:test2-n|}} ~" + "~" + "~" + "~\n", "2nd Warning", false, 1)',"T2"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:test2a-n|}} ~" + "~" + "~" + "~\n", "2nd Warning", false, 1)',"T2a"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:test2b}} ~" + "~" + "~" + "~\n", "2nd Warning", false, 1)',"T2b"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:test3-n|}} ~" + "~" + "~" + "~\n", "3rd Warning", false, 1)',"T3"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:test4}} ~" + "~" + "~" + "~\n", "Last warning before block", false, 1)',"T4"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:test5}} ~"+ "~" + "~" + "~\n", "Blocked for vandalism of Wikipedia", false, 1)',"T5"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:vblock|period" + "}}", "Blocked for vandalism of Wikipedia", false, 1)',"BL"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:nothanks-sd|pg=page|url=source}}~" + "~" + "~" + "~\n", "{{" + "nothanks}}", false, 1)',"NT"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:spam1}} ~" + "~" + "~" + "~\n", "{{" + "spam1}}", false, 1)',"S1"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:spam2}} ~" + "~" + "~" + "~\n", "{{" + "spam2}}", false, 1)',"S2"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:rvfd}} ~" + "~" + "~" + "~\n", "{{" + "rvfd}}", false, 1)',"RVFD"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:blanking}} ~" + "~" + "~" + "~\n", "{{" + "blanking}}", false, 1)',"Blank"));

    }
    if(document.title.indexOf("Confirm delete - Delete") != -1)
    {
        tabs.appendChild(addlilink('javascript:vfddelete()', 'VFD', ''));
    }
}

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

function hidevfd(){
    var divs = document.getElementsByTagName("div");
    for(var x = 0; x < divs.length; ++x)
        if(divs[x].className.indexOf("vfd") != -1)
            divs[x].style.display = "none";
    document.getElementById('footer').style.display = 'none';
}

function showvfd(){
    var divs = document.getElementsByTagName("div");
    for(var x = 0; x < divs.length; ++x)
        if(divs[x].className.indexOf("vfd") != -1)
            divs[x].style.display = "";
    document.getElementById('footer').style.display = '';
}

function vfdlinks(){
    var tabs = document.getElementById('p-cactions').getElementsByTagName('ul')[0];
    if(document.title.indexOf("Wikipedia:Articles for deletion") == 0){
        add_link2('javascript:hidevfd()', 'hide');
        add_link2('javascript:showvfd()', 'show');
    }
}

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

///////////////////////////////////////////////////////////////////
// AutoVFD by Korath
// This needs to change depending on skin used.
//////////////////////////////////////////////////////////////////
function add_link2(url, name)
{
  var na = document.createElement('a');
  na.setAttribute('href', url);
  na.appendChild(document.createTextNode(name));

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

  var tabs = document.getElementById('p-cactions').getElementsByTagName('ul')[0];
  tabs.appendChild(li);
}

function strip_namespace(target)
{
  var colon = target.indexOf(':');
  if (colon != -1)
    {
      var spaces = new Array('User', 'Wikipedia', 'Image', 'MediaWiki', 'Template', 'Help', 'Category');
      var ns = target.substring(0, colon);
      if (ns == '' || ns == 'Talk')
        return target.substring(colon + 1);
      else
        for (var i = 0; i < spaces.length; ++i)
          {
            if (ns == spaces[i]
                || ns == spaces[i] + '_talk')
              return target.substring(colon + 1);
          }
    }

  return target;
}
function copyvio()
{
  document.editform.wpTextbox1.value = '{' + '{' + 'copyvio|url=}}';
  document.editform.wpSummary.value = 'copyvio';

  var target = document.editform.action;
  target = target.substring(target.indexOf('title=') + 6,
                            target.lastIndexOf('&action=submit'));

  var months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
  var date = new Date();
  date = months[date.getUTCMonth()] + '_' + date.getUTCDate();

  var pagename = strip_namespace(target);

  window.open('/w/index.php?title=Wikipedia:Copyright_problems&action=edit&fakeaction=copyviolist&faketarget=' + pagename,
              'status,toolbar,location,menubar,directories,resizeable,scrollbars');
}

function autocopyvio()
{
  if (document.title.indexOf('Editing ') == 0)
    {
      var action = '';
      var target = '';
      if (location.search)
        {
          var l = location.search.substring(1).split('&');
          for (var i = 0; i < l.length; ++i)
            {
              var eq = l[i].indexOf('=');
              var name = l[i].substring(0, eq);
              if (name == 'fakeaction')
                action = l[i].substring(eq + 1);
              else if (name == 'faketarget')
                target = unescape(l[i].substring(eq + 1)).replace(/_/g, ' ');
              
            }
        }

      if (action == 'copyviolist')
        {
          var index = document.editform.wpTextbox1.value.lastIndexOf("\n==Footer==");
          if (index == -1)
          {
            window.alert("Couldn't find footer\n\n");
          }
          else
          {
            var firsthalf = document.editform.wpTextbox1.value.substr(0,index);
            var secondhalf = document.editform.wpTextbox1.value.substr(index);
            document.editform.wpTextbox1.value = firsthalf + '*' + '[[' + target + ']]' + ' from [' + '] ~' + '~~' + '~\n' + secondhalf;
//            document.editform.wpTextbox1.SelectionStart = document.editform.wpTextbox1.Text.Length;
//            document.editform.wpTextbox1.SelectionLength = 0;
//            document.editform.wpTextbox1.ScrollToCaret();
            document.editform.wpSummary.value = 'Copyvio ' + '[[' + target + ']]';
          }
        }
      //else
      //  add_link2('javascript:copyvio()', 'copyvio');
    }
}

if (window.addEventListener)
  window.addEventListener('load', autocopyvio, false);
else if (window.attachEvent)
  window.attachEvent('onload', autocopyvio);

function vfd()
{
  document.editform.wpTextbox1.value = '{' + '{' + 'subst:afd}}\n' + document.editform.wpTextbox1.value;
  document.editform.wpSummary.value = 'AfD';
  document.editform.wpWatchthis.checked = true;

  var target = document.editform.action;
  target = target.substring(target.indexOf('title=') + 6,
                            target.lastIndexOf('&action=submit'));

  var months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
  var date = new Date();
  date = date.getUTCFullYear() + '_' + months[date.getUTCMonth()] + '_' + date.getUTCDate();

  var pagename = strip_namespace(target);

  window.open('/w/index.php?title=Wikipedia:Articles_for_deletion/' + pagename + '&action=edit&fakeaction=vfdsub&faketarget=' + target,
              'Vfd ' + unescape(target),
              'status,toolbar,location,menubar,directories,resizable,scrollbars');
  window.open('/w/index.php?title=Wikipedia:Articles_for_deletion/Log/' + date + '&action=edit&fakeaction=vfdlist&faketarget=' + pagename,
              'VfdLog ' + unescape(target),
              'status,toolbar,location,menubar,directories,resizable,scrollbars');
}

function closevfd(result)
{
 if(result == 1)
 {
         document.editform.wpTextbox1.value = "{{" + "subst:afd top}} \'\'\'KEEP\'\'\'. -~" + "~" + "~" + "~\n" + document.editform.wpTextbox1.value;
 edit_summary_watch("{{" + "subst:afd bottom}}", "close - keep", false, 0);
 }

 else if(result == 2)
 {
         document.editform.wpTextbox1.value = "{{" + "subst:afd top}} \'\'\'MERGE\'\'\' to \'\' \'\'. -~" + "~" + "~" + "~\n" + document.editform.wpTextbox1.value;
 edit_summary_watch("{{" + "subst:afd bottom}}", "close - merge+redir", false, 0);
 }

 else if(result == 3)
 {
         document.editform.wpTextbox1.value = "{{" + "subst:afd top}} \'\'\'REDIRECT\'\'\' to \'\' \'\'. -~" + "~" + "~" + "~\n" + document.editform.wpTextbox1.value;
 edit_summary_watch("{{" + "subst:afd bottom}}", "close - redir", false, 0);
 }
        else if (result ==4)
 {
         document.editform.wpTextbox1.value = "{{" + "subst:afd top}} \'\'\'DELETE\'\'\'. -~" + "~" + "~" + "~\n" + document.editform.wpTextbox1.value;
 edit_summary_watch("{{" + "subst:afd bottom}}", "close - delete", false, 0);
 }
        else if (result ==5)
 {
         document.editform.wpTextbox1.value = "{{" + "subst:afd top}} \'\'\'NO CONSENSUS\'\'\'. -~" + "~" + "~" + "~\n" + document.editform.wpTextbox1.value;
 edit_summary_watch("{{" + "subst:afd bottom}}", "close - no consensus", false, 0);
 }
}

function vfdvote(vote)
{
 if (vote == 1)
         edit_summary_watch("*\'\'\'Delete\'\'\' -~"+"~"+"~"+"~", document.editform.wpSummary.value + "delete", true, 0);
 else if (vote == 2)
 edit_summary_watch("*\'\'\'Keep\'\'\' -~"+"~"+"~"+"~", document.editform.wpSummary.value + "keep", true, 0);
 else if (vote == 3)
 edit_summary_watch("*\'\'\'Merge\'\'\' -~"+"~"+"~"+"~", document.editform.wpSummary.value + "merge", true, 0);
 else if (vote == 4)
 edit_summary_watch("*\'\'\'Redirect\'\'\' -~"+"~"+"~"+"~", document.editform.wpSummary.value + "redirect", true, 0);

}

function vfdtalk(result)
{
     boiler1 = "=" + "=Articles for Deletion debate=" + "=\nThis article ";
     boiler2 = " an [" + "[Wikipedia:Articles for deletion|Articles for Deletion]" + "] debate. The discussion can be found [" + "[Wikipedia:Articles for deletion/{" + "{subst" + ":PAGENAME}" + "}|here]" + "]. -~" + "~" + "~" + "~";

     if(result == 1)
         edit_summary_watch(boiler1 + "survived" + boiler2, document.editform.wpSummary.value + "link to AfD", false, 0);
     else if (result == 2)
         edit_summary_watch(boiler1 + "was merged with and redirected to \'\' \'\' as a result of" + boiler2, document.editform.wpSummary.value + "link to AfD", false, 0);
     else if (result == 3)
         edit_summary_watch(boiler1 + "was redirected to \'\' \'\' as a result of" + boiler2, document.editform.wpSummary.value + "link to AfD", false, 0);

}

function deletiontags()
{
        if (document.title.indexOf("Editing Wikipedia:Votes for deletion") != -1 || document.title.indexOf("Editing Wikipedia:Pages for deletion") != -1 || document.title.indexOf("Editing Wikipedia:Articles for deletion") != -1)
        {
            add_link2('javascript:vfdvote(1)', 'v - d');
            add_link2('javascript:vfdvote(2)', 'v - k');
            add_link2('javascript:vfdvote(3)', 'v - m');
            add_link2('javascript:vfdvote(4)', 'v - r');
            add_link2('javascript:closevfd(1)', 'c - k');
            add_link2('javascript:closevfd(2)', 'c - m');
            add_link2('javascript:closevfd(3)', 'c - r');
            add_link2('javascript:closevfd(4)', 'c - d');
            add_link2('javascript:closevfd(5)', 'c - nc');
        }
        else if (document.title.indexOf("Editing Wikipedia:Votes for deletion") == -1 && document.title.indexOf("Editing Wikipedia:Pages for deletion") == -1 && document.title.indexOf("Editing Wikipedia:Articles for deletion") == -1 && document.title.indexOf("Editing Talk:") == -1 && document.title.indexOf("Editing User talk:") == -1)
        {
            add_link2('javascript:vfd()', 'vfd');
            add_link2('javascript:copyvio()', 'copyvio');
        }
        else if (document.title.indexOf("Editing Wikipedia:Votes for deletion") == -1 && document.title.indexOf("Editing Wikipedia:Pages for deletion") == -1 && document.title.indexOf("Editing Wikipedia:Articles for deletion") == -1 && document.title.indexOf("Editing Talk:") != -1 && document.title.indexOf("Editing User talk:") == -1)
        {
            add_link2('javascript:vfdtalk(1)','afd - k');
            add_link2('javascript:vfdtalk(2)','afd - m');
            add_link2('javascript:vfdtalk(3)','afd - r');
        }
}

function autovfd()
{
  if (document.title.indexOf('Editing ') == 0)
    {
      var action = '';
      var target = '';
      if (location.search)
        {
          var l = location.search.substring(1).split('&');
          for (var i = 0; i < l.length; ++i)
            {
              var eq = l[i].indexOf('=');
              var name = l[i].substring(0, eq);
              if (name == 'fakeaction')
                action = l[i].substring(eq + 1);
              else if (name == 'faketarget')
                target = unescape(l[i].substring(eq + 1)).replace(/_/g, ' ');
            }
        }

      if (action == 'vfdlist')
        {
          document.editform.wpTextbox1.value += '{{' + 'subst:afd3|pg=' + target + '}}\n';
          document.editform.wpSummary.value = '[[Wikipedia:Articles for deletion/' + target + ']]';
          document.editform.wpWatchthis.checked = false;
        }
      else if (action == 'vfdsub')
        {
          if (document.editform.wpTextbox1.value.length > 0)
            {
              target = document.editform.action;
              target = unescape(target.substring(target.indexOf('title=') + 6, target.lastIndexOf('&action=submit'))).replace(/_/g, ' ');
              window.alert("There's an old vfd at the default location already.\n\n" +
                           'Please either move it out of the way (and update existing links to it), or file the Vfd by hand in another location (such as [[' + target + ' (2)]]).');
            }
          else
          {
            document.editform.wpTextbox1.value += "{{" + "subst:afd2|pg=" + target + "|text=\'\'\'Delete\'\'\'}} -~" + "~" + "~" + "~";
            document.editform.wpSummary.value = 'Nominate';
            document.editform.wpWatchthis.checked = true;
          }
        }
      else
           deletiontags();
    }
}

if (window.addEventListener)
  window.addEventListener('load', autovfd, false);
else if (window.attachEvent)
  window.attachEvent('onload', autovfd);

// 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;
}

//function do_onload()
//{
//  if (document.title.indexOf('User:') == 0
//      || document.title.indexOf('User talk:') == 0)
//    add_block_tab();
//}

// Adds a "blocklog" tab and fills in the username field on Special:Blockip, if a "&faketarget=username" is present.
function do_blockip_stuff()
{
  // focus on Reason field
  document.getElementsByName('wpBlockReason')[0].focus();

  // 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'));
}

// Opens the block log in the current window, and Special:Blockip in a popup.
// Width, height, top, and left are chosen for a 1600x1200 display.
function blockpage_and_log(target)
{
  window.open('/w/index.php?title=Special%3ABlockip&faketarget=' + target, 'Block', 'width=1400,height=525,top=525,left=0');
  document.location.href = 'http://en.wikipedia.org/w/index.php?title=Special%3ALog&type=block&user=&page=User%3A' + target;
}

// Adds "block" and "blocklog" tabs to User: and User talk: pages.
function add_block_tab()
{
  var c1 = document.getElementById('column-one');
  var tabs = c1.getElementsByTagName('div')[0].getElementsByTagName('ul')[0];

  // use the "edit this page" tab to get already-tidied url
  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'));
  editlk = editlk.substring(editlk.indexOf(':') + 1);
  var slloc = editlk.indexOf('/');
  if (slloc > 0)
    editlk = editlk.substring(0, slloc);

  // add "block" tab
  //tabs.appendChild(addlilink('/w/index.php?title=Special%3ABlockip&faketarget=' + editlk, 'block'));

  // To open the block page and block log simultaneously, replace the above line with:
   tabs.appendChild(addlilink('javascript:blockpage_and_log("' + editlk + '")', 'Block'));
  // and uncomment the blockpage_and_log() function above.

  // add "blocklog" tab
  tabs.appendChild(addlilink('/w/index.php?title=Special%3ALog&type=block&user=&page=User%3A' + editlk, 'blocklog'));

  //add "contributions" tab
  tabs.appendChild(addlilink('/w/wiki.phtml?title=Special:Contributions&target=User%3A' + editlk, 'contributions'));

}

function do_onload()
{
  if (document.title.indexOf('User:') == 0
      || document.title.indexOf('User talk:') == 0)
    add_block_tab();
  else if (document.title.indexOf('Block user') == 0) // could stand to be more robust
    do_blockip_stuff();
}

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

if ( document.createElement && window.addEventListener )
{
 function SoFixItInit() // pre-load, (don't want to slow down loading of article's content, though)
 {

 }

 function SoFixItLoad() // post-load
 {
 UserMenu = new PortletMenu( 'p-personal'   );
 PageMenu = new PortletMenu( 'p-cactions'   );
  NavMenu = new PortletMenu( 'p-navigation' );
 //ToolMenu = new PortletMenu( 'p-tb'         );

 // This is inefficient and not particularly robust.
 // This comes first, I want this link to come up as
 // fast as possible.
 //
 function GetByClass( sElem, sClass )
 { var i, a2 = [], a = document.getElementsByTagName( sElem );
 for ( i = 0; i < a.length; i++ )
 if ( a[ i ].className == sClass )
 a2.push( a[ i ] );
 return a2;
 }
 var a, td = GetByClass( 'td', 'diff-otitle' );
 if ( ( td = td[ 0 ] ) && ( a = td.getElementsByTagName( 'a' )[ 0 ] ) )
 a.href = a.href + '&action=edit'; // need to change text, later

 var userName = UserMenu.getText( 'pt-userpage' );

 // personal (top-most) menu
 //
 // Splash  Talk  Prefs  Watch  List  Contribs  Kate  Logs  #IRC  Out
 //
 UserMenu.setText( 'pt-mytalk'     , 'talk'  );
 UserMenu.setText( 'pt-preferences', 'prefs' );
 UserMenu.setText( 'pt-watchlist'  , 'watch' );
 UserMenu.setText( 'pt-mycontris'  , 'contribs' );
 UserMenu.setText( 'pt-logout'     , 'out'   );
 //
 UserMenu.setHref( 'pt-mycontris',
 'http://en.wikipedia.org/w/index.php?title=Special:Contributions&target=' +
 userName + '&offset=0&limit=500' );
 //
 //
 // it seems there is a stylesheet that makes them lowercase
 //
 // ok, the lowercased menu items are starting to really bug me:
 //
 document.getElementById( 'p-personal' ).getElementsByTagName( 'ul' )[0].style.textTransform = 'none';
 //
 UserMenu.insertBefore( 'pt-mycontris', 'pt-list', 'list', '/wiki/Special:Watchlist/edit' );
 UserMenu.insertBefore( 'pt-logout'   , 'pt-logs', 'logs',
 '/w/index.php?title=Special%3ALog&user=' + userName );
 UserMenu.insertBefore( 'pt-logout'   , 'pt-irc' , '#irc', 'irc://irc.freenode.net/wikipedia' );
 UserMenu.insertBefore( 'pt-logs'     , 'pt-kate', 'kate',
 'javascript:void InlineKate( "' + userName + '" )' );

 // so I always know what time it is in UTC land:
 //
 UserMenu.append( 'pt-utc', UTCTime(), 'javascript:void UserMenu.setText("pt-utc",UTCTime())' );

 // article-actions menu, (the "tabs")
 //
 if ( PageMenu[ 'ca-history' ] ) // theory: if it has a history tab, then it's purgable
 {
 PageMenu.insertBefore( 'ca-history', 'ca-lastdiff', 'Last Diff',
 PageMenu.getHref( 'ca-history' ).replace( /action=history/, 'diff=0' ) );

 PageMenu.append( 'ca-purge', 'Purge',
 PageMenu.getHref( 'ca-history' ).replace( /action=history/, 'action=purge' ) );
 }

 var x = 1;
 //NavMenu.append( 'n-' + x++, 'monobook.js', '/wiki/User:' + userName + '/monobook.js' );
 NavMenu.append( 'n-' + x++, 'Cat:Wikipedia', '/wiki/Category:Wikipedia' );
 NavMenu.append( 'n-' + x++, 'Cat:Policies', '/wiki/Category:Wikipedia_policies_and_guidelines' );
 NavMenu.append( 'n-' + x++, 'Cat:Official', '/wiki/Category:Wikipedia_official_policy' );
 NavMenu.append( 'n-' + x++, 'Templates', '/wiki/Wikipedia:Template' );
 NavMenu.append( 'n-' + x++, 'Cleanup tags', '/wiki/Wikipedia:Template_messages/Cleanup' );
                NavMenu.append( 'n-' + x++, 'Stub sorts', '/wiki/Stub_types' );


 }

 function PortletMenu( id ) // constructor
 {
 this.menu = document.getElementById( id );
 this.list = this.menu.getElementsByTagName( 'ul' )[ 0 ]; // bypass "<h5>Views</h5>", etc.

 // sigh...as far as I can figure, there is empty whitespace being treated
 // as TextNodes....
 //
 var LIs = this.list.getElementsByTagName( 'li' );

 for ( var i = 0; i < LIs.length; i++ )
 {
 this[ LIs[ i ].id ] = LIs[ i ];
 }

 this.newItem = function( id, txt, url )
 { var li = document.createElement( 'li' ); li.id   = id;
 var  a = document.createElement( 'a'  );  a.href = url;

  a.appendChild( document.createTextNode( txt ) );
 li.appendChild( a );

 this[ id ] = li; // watch this!!!

 return li;
 }

 this.append = function( id, txt, url )
 { this.list.appendChild( this.newItem( id, txt, url ) );
 }
 
 this.insertBefore = function( old, id, txt, url )
 { this.list.insertBefore( this.newItem( id, txt, url ), this[ old ] );
 }

 // the ByTagName here is a bit annoying, but in Safari, I was picking
 // up TextNodes by using this[ id ].firstChild.firstChild
 //
 this.getText = function( id      ) { return this[ id ].getElementsByTagName( 'a' )[ 0 ].firstChild.data }
 this.setText = function( id, txt ) {        this[ id ].getElementsByTagName( 'a' )[ 0 ].firstChild.data = txt }

 this.getHref = function( id      ) { return this[ id ].getElementsByTagName( 'a' )[ 0 ].href       }
 this.setHref = function( id, url ) {        this[ id ].getElementsByTagName( 'a' )[ 0 ].href = url }
 
 // I add em as I need em....
 }

 function InlineKate( user )
 {
 var kate =
 'http://kohl.wikimedia.org/~kate/cgi-bin/count_edits?dbname=enwiki&user=' + user;

 var div = document.createElement( 'div' );
 div.id = 'inlineKateDiv';
 div.style.position = 'absolute';
 div.style.zIndex   = 1000;
 div.style.left     =  '20px';
 div.style.top      =  '20px';
 div.style.backgroundColor = '#FFFFFF';
 div.style.borderStyle     = 'solid';
 div.style.borderWidth     = ' medium';
 div.style.borderColor     = '#000000';

 var top = document.createElement( 'div' );
 top.id = 'inlineKateTop';
 top.style.textAlign = 'right';
 top.style.margin = '8px';
 top.style.backgroundColor = '#DDDDDD';

 var a = document.createElement( 'a' );
 a.appendChild( document.createTextNode( "Go to Kate's" ) );
 a.href    = kate;
 a.target  = '_parent';
 a.style.margin = '8px';

 top.appendChild( a );

 a = document.createElement( 'a' );
 a.appendChild( document.createTextNode( 'Close' ) );
 a.href    = "javascript:void RemoveNode('inlineKateDiv')";
 a.style.margin = '8px';

 top.appendChild( a );

 div.appendChild( top );

 var iframe = document.createElement( 'iframe' );
 iframe.id   = 'inlineKateBot';
 iframe.style.width  = '300px';
 iframe.style.height = '400px';
 iframe.style.margin =   '8px';
 iframe.style.borderStyle = 'solid';
 iframe.style.borderWidth = 'thin';
 iframe.style.borderColor = '#000000';
 iframe.src = kate;

 div.appendChild( iframe );

 document.body.appendChild( div );
 }

 function RemoveNode( id )
 { var node = document.getElementById( id )
 node.parentNode.removeChild( node );
 }

 function UTCTime()
 {
 // Get a date stamp for the time in UTC-land.
 //
 // for the future: a format arg
 //
 var s = '',
 d = new Date(),
 a = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' ');
 return d.getUTCDate() + ' ' +
 a[ d.getUTCMonth() ] + ' ' +
 d.getUTCFullYear() + ' ' +
 ( '0' + d.getUTCHours()   ).substr( -2 ) + ':' +
 ( '0' + d.getUTCMinutes() ).substr( -2 ) + ' ' + 'UTC';
 }

 SoFixItInit();
 window.addEventListener( 'load', SoFixItLoad, false );
}

// Released into the public domain by [[User:Func]]
function NUPatrol()
{
 if ( window.location.href.indexOf( 'Special:Log/newusers'        ) < 0 &&
      window.location.href.indexOf( '&type=newusers' ) < 0  ) return;

 var items, item, i, links, user, name, talk, contribs, insertLoc, link;

 items = document.getElementById( 'bodyContent' ).getElementsByTagName( 'ul' )[ 0 ].getElementsByTagName( 'li' );

 function NewLink( txt, url, plainlinks, linkColor )
 { var a = document.createElement( 'a' );
 a.appendChild( document.createTextNode( txt ) );
 a.href = url;
 if ( plainlinks ) a.className = 'plainlinks';
 if ( linkColor )
 { if ( typeof linkColor == "string" )
 a.style.color = linkColor;
 else a.style.color = '#FF0000'; // old default behavior
 }
 return a;
 }

 for ( i = 0; i < items.length; i++ )
 {
 item = items[ i ];
 
 links = item.getElementsByTagName( 'a' );

 user = links[ 0 ]; name = user.firstChild.nodeValue;
 talk = links[ 2 ]; talk.firstChild.nodeValue = 'talk'; // lowercase 'Talk' for consistency
 contribs = links[ 3 ];

 insertLoc = user.nextSibling; // ' newusers '

 item.insertBefore( document.createTextNode( ' ( ' ), insertLoc );

 item.insertBefore( talk, insertLoc );
 item.insertBefore( document.createTextNode( ', ' ), insertLoc );

 item.insertBefore( contribs, insertLoc );
 item.insertBefore( document.createTextNode( ', ' ), insertLoc );

 item.insertBefore( NewLink( 'actions', '/w/index.php?title=Special%3ALog&user=' + name, true, '#000088' ), insertLoc );
 item.insertBefore( document.createTextNode( ', ' ), insertLoc );

 item.insertBefore( NewLink( 'blocks', '/w/index.php?title=Special%3ALog&type=block&page=User%3A' + name, true, '#008800' ), insertLoc );
 item.insertBefore( document.createTextNode( ', ' ), insertLoc );

 item.insertBefore( NewLink( 'is blocked?', '/wiki/Special:Ipblocklist?action=search&ip=' + name, true, '#888800' ), insertLoc );
 item.insertBefore( document.createTextNode( ', ' ), insertLoc );

 item.insertBefore( NewLink( 'do block!', '/w/index.php?title=Special:Blockip&ip=' + name, true, '#880000' ), insertLoc );

 item.insertBefore( document.createTextNode( ' )' ), insertLoc );

 item.removeChild( insertLoc.nextSibling ); // should remove the span
 item.removeChild( insertLoc ); // should remove ' newusers ' text
 }
}
if ( window.addEventListener ) window.addEventListener( 'load', NUPatrol, false );
else if ( window.attachEvent ) window.attachEvent( 'onload', NUPatrol );



//</nowiki>