User:Ed smildE/monobook.js

From Homestar Runner Wiki

(Difference between revisions)
Jump to: navigation, search
Line 1: Line 1:
-
/* bottom tabs */
+
// Create "my links" sidebar box
 +
function myLinksBox () {
 +
  // Create div#p-mylinks
 +
  var myLinks = document.createElement('div');
 +
  myLinks.id = 'p-mylinks';
 +
  myLinks.className = 'portlet';
-
function morelinks() {
+
  // Create h5 and append to div#p-mylinks
-
  var tabs = document.getElementById('p-cactions').cloneNode(true);
+
  var h5 = document.createElement('h5');
-
  tabs.id = 'mytabs';
+
  h5.appendChild(document.createTextNode('My Links'));
-
  var listitems = tabs.getElementsByTagName('LI');
+
  myLinks.appendChild(h5);
-
  for (i=0;i<listitems.length;i++) {
+
-
    if(listitems[i].id) listitems[i].id = 'mytabs-' + listitems[i].id;
+
-
  }
+
-
  document.getElementById('column-content').appendChild(tabs);
+
-
}
+
-
if (window.addEventListener) window.addEventListener("load",morelinks,false);
+
-
else if (window.attachEvent) window.attachEvent("onload",morelinks);
+
-
/* purge tab */
+
  // Create div.pBody and append to div#p-mylinks
-
function addPurgeButton()
+
  var pBody = document.createElement('div');
-
   {
+
   pBody.className = 'pBody';
-
      var href = document.location.href;
+
  myLinks.appendChild(pBody);
-
      {    
+
 
-
          var historyHref = document.getElementById( "ca-history" ).firstChild.href;
+
  // Create ul and append to div.pBody
-
          var div = document.getElementById( "p-cactions" );
+
  var ul = document.createElement('ul');
-
          var ul = div.getElementsByTagName( "ul" )[0];
+
  pBody.appendChild(ul);
-
          var newLi = document.createElement( "li" );
+
 
-
          var newA = document.createElement( "a" );
+
   // Append div#p-mylinks to sidebar just before external links box
-
          newA.setAttribute( "href" , historyHref.replace( "=history" , "=purge" ) );
+
  var sidebar = document.getElementById('column-one');
-
          var text = document.createTextNode( "purge" );
+
  sidebar.insertBefore(myLinks, document.getElementById('p-ext'));
-
          newA.appendChild( text );
+
 
-
          newLi.appendChild( newA );
+
  // Populate the actual links
-
          ul.appendChild( newLi );
+
  addLink("p-mylinks", "/index.php/Special:BrokenRedirects", "Broken redirects", "n-brokenredirects", "The list of broken redirects.");
-
      }
+
  addLink("p-mylinks", "/index.php/Special:DoubleRedirects", "Double redirects", "n-doubleredirects", "The list of double redirects.");
 +
  addLink("p-mylinks", "/index.php?limit=5000&title=Special%3ARecentchanges&namespace=8", "Interface changes", "n-interfacechanges", "The list of recent interface changes.");
 +
  addLink("p-mylinks", "/index.php/Special:Log/move", "Moved pages", "n-movedpages", "The list of recently moved pages.");
 +
  addLink("p-mylinks", "/index.php/Special:Log/newusers", "New users", "n-newusers", "The list of new users.");
 +
  addLink("p-mylinks", "/index.php/Special:Renameuser", "Rename user", "n-renameuser", "Rename a user.");
 +
  addLink("p-mylinks", "/index.php/Special:Userrights", "User rights", "n-userrights", "Modify a user's rights.");
 +
}
 +
 
 +
// Modify my talk link and add additional user page and talk links for GrapeNuts
 +
function modPersonalMenu() {
 +
  var mytalk = document.getElementById('pt-mytalk');
 +
  mytalk.firstChild.firstChild.data = 'Talk';
 +
  mytalk.insertBefore(document.createTextNode("("), mytalk.firstChild);
 +
  mytalk.appendChild(document.createTextNode("·"));
 +
  var mycontribs = document.createElement('a');
 +
  mycontribs.href = '/index.php/Special:Contributions/JoeyDay';
 +
  mycontribs.appendChild(document.createTextNode('Edits'));
 +
  mytalk.appendChild(mycontribs);
 +
  mytalk.appendChild(document.createTextNode(")"));
 +
 
 +
  addLink("p-personal", "/index.php/User talk:GrapeNuts", "Talk", "pt-gntalk", "GrapeNuts' talk page.", "", "pt-preferences");
 +
  var gntalk = document.getElementById('pt-gntalk');
 +
  gntalk.insertBefore(document.createTextNode("("), gntalk.firstChild);
 +
  gntalk.appendChild(document.createTextNode("·"));
 +
  var gncontribs = document.createElement('a');
 +
  gncontribs.href = '/index.php/Special:Contributions/GrapeNuts';
 +
  gncontribs.appendChild(document.createTextNode('Edits'));
 +
  gntalk.appendChild(gncontribs);
 +
  gntalk.appendChild(document.createTextNode(")"));
 +
 
 +
  addLink("p-personal", "/index.php/User:GrapeNuts", "GrapeNuts", "pt-grapenuts", "GrapeNuts' user page.", "", "pt-gntalk");
 +
 
 +
  var mycontris = document.getElementById('pt-mycontris');
 +
  mycontris.parentNode.removeChild(mycontris);
 +
 
 +
  var myprefs = document.getElementById('pt-preferences');
 +
  myprefs.parentNode.removeChild(myprefs);
 +
  addLink("p-personal", "/index.php/Special:Preferences", "Preferences", "pt-preferences", "My preferences", "", "pt-logout");
 +
}
 +
 
 +
// Add time to your monobook "personal menu" list at the very top of the page.
 +
// Created by [[User:Mathwiz2020]]
 +
//
 +
// Indicate where you would like the time to appear:
 +
//  pt-userpage, pt-mytalk, pt-preferences,
 +
//  pt-watchlist, pt-mycontris, pt-logout
 +
//
 +
gsTimeInsertBefore = ''; // leave blank to append after "logout"
 +
//
 +
function getTime() {
 +
  var time = new Date();
 +
  var hours = time.getUTCHours();
 +
  if (hours < 10) { hours = "0" + hours; }
 +
  var minutes = time.getUTCMinutes();
 +
  if (minutes < 10) { minutes = "0" + minutes; }
 +
  var currentTime = hours + ":" + minutes
 +
  document.getElementById('pt-time').childNodes[0].childNodes[0].replaceData(0, 5, currentTime);
 +
  doTime = window.setTimeout("getTime()", 1000);
 +
}
 +
 
 +
function makeTime() {
 +
  var div = document.createElement( 'div' );
 +
  div.id = 'pt-time';
 +
 
 +
  var mySpan = document.createElement( 'span' );
 +
  mySpan.appendChild( document.createTextNode( '00:00 UTC' ) );
 +
 
 +
  div.appendChild( mySpan );
 +
 
 +
  if ( ! gsTimeInsertBefore ) { // append to end (right) of list
 +
    document.getElementById( 'globalWrapper' ).parentNode.appendChild( div );
   }
   }
-
   if ( window.addEventListener ) window.addEventListener( "load" , addPurgeButton , false );
+
  else {
-
  else if ( window.attachEvent ) window.attachEvent( "onload", addPurgeButton );
+
    var before = document.getElementById( gsTimeInsertBefore );
 +
    before.appendChild( li, before );
 +
  }
 +
  doTime = window.setTimeout("getTime()", 1000);
 +
}
 +
 
 +
// Add purge tab to action tabs
 +
function addPurge () {
 +
  var x = document.getElementById('ca-history');
 +
  if(!x) return;
 +
  if(x.children) x = x.children[0].href;
 +
  else x = x.childNodes[0].href;
 +
  if (document.getElementById('ca-delete')) {
 +
    addLink("p-cactions", x.replace(/=history/, "=purge"), 'purge', 'ca-purge', 'Purge the internal cache for this page', '', 'ca-delete');
 +
  }
 +
  else if (document.getElementById('ca-move')) {
 +
    addLink("p-cactions", x.replace(/=history/, "=purge"), 'purge', 'ca-purge', 'Purge the internal cache for this page', '', 'ca-move');
 +
  }
 +
  else if (document.getElementById('ca-watch')) {
 +
    addLink("p-cactions", x.replace(/=history/, "=purge"), 'purge', 'ca-purge', 'Purge the internal cache for this page', '', 'ca-watch');
 +
  }
 +
  else {
 +
    addLink("p-cactions", x.replace(/=history/, "=purge"), 'purge', 'ca-purge', 'Purge the internal cache for this page', '', 'ca-unwatch');
 +
  }
 +
}
 +
 
 +
// Adds bottom tabs
 +
function morelinks() {
 +
  var tabs = document.getElementById('p-cactions').cloneNode(true);
 +
  tabs.id = 'mytabs';
 +
  var listitems = tabs.getElementsByTagName('LI');
 +
  for (i=0;i<listitems.length;i++) {
 +
    if(listitems[i].id) listitems[i].id = 'mytabs-' + listitems[i].id;
 +
  }
 +
  document.getElementById('column-content').appendChild(tabs);
 +
}
 +
 
 +
 
 +
// Enables adding links to the interface just about anywhere.
 +
//
 +
// * where is the id of the toolbar where the button should be added;
 +
//   i.e. one of "p-cactions", "p-personal", "p-navigation", or "p-tb".
 +
//
 +
// * url is the URL which will be called when the button is clicked.
 +
//  javascript: urls can be used to do more complex things.
 +
//
 +
// * name is what will appear as the name of the button.
 +
//
 +
// * id is the id of the button; it's best to define one. 
 +
//  Use a prefix to make sure its unique. Optional.
 +
//
 +
// * title is the tooltip title that gives a longer description
 +
//  of the button; if you define a accesskey, mention it here. Optional.
 +
//
 +
// * key is the char you want for the accesskey. Optional.
 +
//
 +
// * after is the id of the button you want to follow this one. Optional.
 +
//
 +
function addLink (where, url, name, id, title, key, after) {
 +
  var na = document.createElement('a');
 +
  na.href = url;
 +
  na.appendChild(document.createTextNode(name));
 +
  var li = document.createElement('li');
 +
  if (id) {
 +
    li.id = id;
 +
  }
 +
  li.appendChild(na);
 +
  var tabs = document.getElementById(where).getElementsByTagName('ul')[0];
 +
  if (after) {
 +
    tabs.insertBefore(li,document.getElementById(after));
 +
  }
 +
  else {
 +
    tabs.appendChild(li);
 +
  }
 +
  if (id) {
 +
    if (key && title) {
 +
      ta[id] = [key, title];
 +
    }
 +
    else if (key) {
 +
      ta[id] = [key, ''];
 +
    }
 +
    else if (title) {
 +
      ta[id] = ['', title];
 +
    }
 +
  }
 +
  // re-render the title and accesskeys from existing code in wikibits.js
 +
  akeytt();
 +
  return li;
 +
}
 +
 
 +
//--- Execute all functions ---//
 +
function doEverything () {
 +
  myLinksBox();
 +
  modPersonalMenu();
 +
  makeTime();
 +
  addPurge();
 +
  morelinks();
 +
}
 +
if (window.addEventListener) {
 +
  window.addEventListener("load", doEverything, false);
 +
}
 +
else if (window.attachEvent) {
 +
  window.attachEvent("onload", doEverything);
 +
}

Revision as of 19:33, 23 April 2006

 // Create "my links" sidebar box
 function myLinksBox () {
   // Create div#p-mylinks
   var myLinks = document.createElement('div');
   myLinks.id = 'p-mylinks';
   myLinks.className = 'portlet';

   // Create h5 and append to div#p-mylinks
   var h5 = document.createElement('h5');
   h5.appendChild(document.createTextNode('My Links'));
   myLinks.appendChild(h5);

   // Create div.pBody and append to div#p-mylinks
   var pBody = document.createElement('div');
   pBody.className = 'pBody';
   myLinks.appendChild(pBody);

   // Create ul and append to div.pBody
   var ul = document.createElement('ul');
   pBody.appendChild(ul);

   // Append div#p-mylinks to sidebar just before external links box
   var sidebar = document.getElementById('column-one');
   sidebar.insertBefore(myLinks, document.getElementById('p-ext'));

   // Populate the actual links
   addLink("p-mylinks", "/index.php/Special:BrokenRedirects", "Broken redirects", "n-brokenredirects", "The list of broken redirects.");
   addLink("p-mylinks", "/index.php/Special:DoubleRedirects", "Double redirects", "n-doubleredirects", "The list of double redirects.");
   addLink("p-mylinks", "/index.php?limit=5000&title=Special%3ARecentchanges&namespace=8", "Interface changes", "n-interfacechanges", "The list of recent interface changes.");
   addLink("p-mylinks", "/index.php/Special:Log/move", "Moved pages", "n-movedpages", "The list of recently moved pages.");
   addLink("p-mylinks", "/index.php/Special:Log/newusers", "New users", "n-newusers", "The list of new users.");
   addLink("p-mylinks", "/index.php/Special:Renameuser", "Rename user", "n-renameuser", "Rename a user.");
   addLink("p-mylinks", "/index.php/Special:Userrights", "User rights", "n-userrights", "Modify a user's rights.");
 }

 // Modify my talk link and add additional user page and talk links for GrapeNuts
 function modPersonalMenu() {
   var mytalk = document.getElementById('pt-mytalk');
   mytalk.firstChild.firstChild.data = 'Talk';
   mytalk.insertBefore(document.createTextNode("("), mytalk.firstChild);
   mytalk.appendChild(document.createTextNode("·"));
   var mycontribs = document.createElement('a');
   mycontribs.href = '/index.php/Special:Contributions/JoeyDay';
   mycontribs.appendChild(document.createTextNode('Edits'));
   mytalk.appendChild(mycontribs);
   mytalk.appendChild(document.createTextNode(")"));

   addLink("p-personal", "/index.php/User talk:GrapeNuts", "Talk", "pt-gntalk", "GrapeNuts' talk page.", "", "pt-preferences");
   var gntalk = document.getElementById('pt-gntalk');
   gntalk.insertBefore(document.createTextNode("("), gntalk.firstChild);
   gntalk.appendChild(document.createTextNode("·"));
   var gncontribs = document.createElement('a');
   gncontribs.href = '/index.php/Special:Contributions/GrapeNuts';
   gncontribs.appendChild(document.createTextNode('Edits'));
   gntalk.appendChild(gncontribs);
   gntalk.appendChild(document.createTextNode(")"));

   addLink("p-personal", "/index.php/User:GrapeNuts", "GrapeNuts", "pt-grapenuts", "GrapeNuts' user page.", "", "pt-gntalk");

   var mycontris = document.getElementById('pt-mycontris');
   mycontris.parentNode.removeChild(mycontris);

   var myprefs = document.getElementById('pt-preferences');
   myprefs.parentNode.removeChild(myprefs);
   addLink("p-personal", "/index.php/Special:Preferences", "Preferences", "pt-preferences", "My preferences", "", "pt-logout");
 }

 // Add time to your monobook "personal menu" list at the very top of the page.
 // Created by [[User:Mathwiz2020]]
 //
 // Indicate where you would like the time to appear:
 //   pt-userpage, pt-mytalk, pt-preferences,
 //   pt-watchlist, pt-mycontris, pt-logout
 //
 gsTimeInsertBefore = ''; // leave blank to append after "logout"
 //
 function getTime() {
   var time = new Date();
   var hours = time.getUTCHours();
   if (hours < 10) { hours = "0" + hours; }
   var minutes = time.getUTCMinutes();
   if (minutes < 10) { minutes = "0" + minutes; }
   var currentTime = hours + ":" + minutes
   document.getElementById('pt-time').childNodes[0].childNodes[0].replaceData(0, 5, currentTime);
   doTime = window.setTimeout("getTime()", 1000);
 }

 function makeTime() {
   var div = document.createElement( 'div' );
   div.id = 'pt-time';

   var mySpan = document.createElement( 'span' );
   mySpan.appendChild( document.createTextNode( '00:00 UTC' ) );

   div.appendChild( mySpan );

   if ( ! gsTimeInsertBefore ) { // append to end (right) of list
     document.getElementById( 'globalWrapper' ).parentNode.appendChild( div );
   }
   else { 
     var before = document.getElementById( gsTimeInsertBefore );
     before.appendChild( li, before );
   }
   doTime = window.setTimeout("getTime()", 1000);
 }

 // Add purge tab to action tabs
 function addPurge () {
   var x = document.getElementById('ca-history');
   if(!x) return;
   if(x.children) x = x.children[0].href;
   else x = x.childNodes[0].href;
   if (document.getElementById('ca-delete')) {
     addLink("p-cactions", x.replace(/=history/, "=purge"), 'purge', 'ca-purge', 'Purge the internal cache for this page', '', 'ca-delete');
   }
   else if (document.getElementById('ca-move')) {
     addLink("p-cactions", x.replace(/=history/, "=purge"), 'purge', 'ca-purge', 'Purge the internal cache for this page', '', 'ca-move');
   }
   else if (document.getElementById('ca-watch')) {
     addLink("p-cactions", x.replace(/=history/, "=purge"), 'purge', 'ca-purge', 'Purge the internal cache for this page', '', 'ca-watch');
   }
   else {
     addLink("p-cactions", x.replace(/=history/, "=purge"), 'purge', 'ca-purge', 'Purge the internal cache for this page', '', 'ca-unwatch');
   }
 }

 // Adds bottom tabs
 function morelinks() {
   var tabs = document.getElementById('p-cactions').cloneNode(true);
   tabs.id = 'mytabs';
   var listitems = tabs.getElementsByTagName('LI');
   for (i=0;i<listitems.length;i++) {
     if(listitems[i].id) listitems[i].id = 'mytabs-' + listitems[i].id;
   }
   document.getElementById('column-content').appendChild(tabs);
 }


 // Enables adding links to the interface just about anywhere.
 //
 // * where is the id of the toolbar where the button should be added;
 //   i.e. one of "p-cactions", "p-personal", "p-navigation", or "p-tb".
 //
 // * url is the URL which will be called when the button is clicked.
 //   javascript: urls can be used to do more complex things.
 //
 // * name is what will appear as the name of the button.
 //
 // * id is the id of the button; it's best to define one.  
 //   Use a prefix to make sure its unique. Optional.
 //
 // * title is the tooltip title that gives a longer description 
 //   of the button; if you define a accesskey, mention it here. Optional.
 //
 // * key is the char you want for the accesskey. Optional.
 //
 // * after is the id of the button you want to follow this one. Optional.
 //
 function addLink (where, url, name, id, title, key, after) {
   var na = document.createElement('a');
   na.href = url;
   na.appendChild(document.createTextNode(name));
   var li = document.createElement('li');
   if (id) {
     li.id = id;
   }
   li.appendChild(na);
   var tabs = document.getElementById(where).getElementsByTagName('ul')[0];
   if (after) {
     tabs.insertBefore(li,document.getElementById(after));
   }
   else {
     tabs.appendChild(li);
   }
   if (id) {
     if (key && title) {
       ta[id] = [key, title];
     }
     else if (key) {
       ta[id] = [key, ''];
     }
     else if (title) {
       ta[id] = ['', title];
     }
   }
   // re-render the title and accesskeys from existing code in wikibits.js
   akeytt();
   return li;
 }

 //--- Execute all functions ---//
 function doEverything () {
   myLinksBox();
   modPersonalMenu();
   makeTime();
   addPurge();
   morelinks();
 }
 if (window.addEventListener) {
   window.addEventListener("load", doEverything, false);
 }
 else if (window.attachEvent) {
   window.attachEvent("onload", doEverything);
 }
Personal tools