User:Bob/script/hideyellowboxes.js

From OpenWetWare
Jump to navigationJump to search

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: 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;
}