User:Bob/script/hideyellowboxes.js

From OpenWetWare

Jump to: navigation, search

Note - After saving, you may have to bypass your browser's cache to see the changes. Mozilla / Firefox / Safari: hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (Command-R on a Macintosh); Konqueror: click Reload or press F5; Opera: clear the cache in Tools → Preferences; Internet Explorer: hold Ctrl while clicking Refresh, or press Ctrl-F5.

addOnloadHook(function(){
if(wgNamespaceNumber > 0 && wgNamespaceNumber % 2 != 0) { // if we're on a talk page
 
  /* do you want the templates to be collapsed on page load? */
  var autocollapse = true;
 
  var els = new Array();
      els['chick']    = "next($('contentSub'))";
      els['modern']   = "next($('contentSub'))";
      els['monobook'] = "next($('contentSub'))";
      els['myskin']   = "next($('contentSub'))";
      els['simple']   = "next($('contentSub'))";
      els['standard']    = "next($('catlinks'))";
      els['cologneblue'] = "next($('article').childNodes[1])";
      els['nostalgia']   = "$('article').childNodes[0]";
 
    var pageEl = eval(els[skin]);
 
  while(pageEl.className.search(/catlinks|pagetitle|subtitle/i) != -1
        || pageEl.id.search(/jump-to-nav|contentSub/i) != -1) {
    pageEl = next(pageEl);
  }
 
  if (isYellowBox(pageEl)) { // if there's a yellow box at the beginning
    var tableIndex = 'YellowBoxes';
    var collapseCaption = "hide";
    var expandCaption = "show";
 
    var table = document.createElement('table');
      table.className = 'messagebox standard-talk collapsible collapsed';
      table.style.background = 'transparent';
      table.style.border = '1px solid #AAAAAA';
      table.setAttribute( "id", "collapsibleTable" + tableIndex );
    var headtr = table.insertRow(0);
    var header = document.createElement("th");
      header.appendChild( document.createTextNode( "Talk page templates" ) );
      header.style.textAlign = "center";
    var bodytr = table.insertRow(1);
    var td = bodytr.insertCell(0);
    headtr.appendChild(header);
 
    var Button     = document.createElement( "span" );
    var ButtonLink = document.createElement( "a" );
    var ButtonText = document.createTextNode( collapseCaption );
 
    Button.style.styleFloat = "right";
    Button.style.cssFloat = "right";
    Button.style.fontWeight = "normal";
    Button.style.textAlign = "right";
    Button.style.width = "6em";
 
    ButtonLink.style.color = header.style.color;
    ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
    ButtonLink.setAttribute( "href", "javascript:collapseTable('" + tableIndex + "');" );
    ButtonLink.appendChild( ButtonText );
 
    Button.appendChild( document.createTextNode( "[" ) );
    Button.appendChild( ButtonLink );
    Button.appendChild( document.createTextNode( "]" ) );
 
    header.insertBefore( Button, header.childNodes[0] );
 
    pageEl.parentNode.insertBefore(table,pageEl); // insert our table
    var templates = new Array();
    while(isYellowBox(pageEl)) { // keep moving through the page until we run out of yellow boxes
      templates.push(pageEl);
      pageEl = next(pageEl);
    }
 
    for (i = 0; i < templates.length; i++) {
      templates[i] = wrapInMessageBox(templates[i],td); // put the templates in our new table
    }
 
    if(autocollapse)
      collapseTable('YellowBoxes'); // collapse the table
  }
}
 
});
 
function isYellowBox(el) {
  if(el.className.search(/messagebox|standard-talk/i) != -1)
    return true;
  else
    return false;
}
 
function wrapInMessageBox(el,wrapper) {
  var newEl = el.cloneNode(true);
  wrapper.appendChild(newEl);
  el.parentNode.removeChild(el);
  return newEl;
}
 
function next(el) {
    el = el.nextSibling;
    while (el.nodeType != 1) { // fix for Firefox
      el = el.nextSibling;
    }
    return el;
}
 
function $() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1)
			return element;
		elements.push(element);
	}
	return elements;
}
Personal tools