User:Cryptic/spoiler.js

//

var hide_spoilers_initially = window.hide_spoilers_initially || false;

var hide_endspoiler_tag = window.hide_endspoiler_tag || false;

var spoiler_num = 0;

function spoiler_toggle(num)

{

var contents = document.getElementById('spoilercontents_' + num);

var lk = document.getElementById('spoilerlk_' + num);

if (!contents || !lk)

return;

if (contents.style.display == 'none')

{

contents.style.display = '';

lk.replaceChild(document.createTextNode('hide'), lk.firstChild);

}

else

{

contents.style.display = 'none';

lk.replaceChild(document.createTextNode('show'), lk.firstChild);

}

}

function setup_spoilers()

{

var divs = document.getElementsByTagName('div');

var hide_initially = hide_spoilers_initially

&& !/(\?title=|\/wiki\/)(Talk|User|Wikipedia|Image|MediaWiki|Template|Help|Category|Portal)(_talk)?:/.test(window.location.href);

for (var i = 0; i < divs.length; ++i)

{

var node = divs[i];

if (node.id != 'spoiler')

continue;

++spoiler_num;

var lk = document.createElement('a');

lk.setAttribute('href', 'javascript:spoiler_toggle(' + spoiler_num + ')');

lk.appendChild(document.createTextNode(hide_initially ? 'show' : 'hide'));

lk.id = 'spoilerlk_' + spoiler_num;

lk.className = 'spoilertoggle';

node.appendChild(document.createTextNode(' ['));

node.appendChild(lk);

node.appendChild(document.createTextNode(']'));

var contents = document.createElement('div');

contents.className = 'spoilercontents';

contents.id = 'spoilercontents_' + spoiler_num;

if (hide_initially)

contents.style.display = 'none';

var depth = 0;

while (depth >= 0)

{

var n = node.nextSibling;

if (!n)

break;

if (n.id == 'spoiler')

++depth;

else if (n.className && n.className.indexOf('endspoiler') >= 0

&& --depth < 0 && !hide_endspoiler_tag)

break;

n.parentNode.removeChild(n);

contents.appendChild(n);

}

if (node.nextSibling)

node.parentNode.insertBefore(contents, node.nextSibling);

else

node.parentNode.appendChild(contents);

}

}

addOnloadHook(setup_spoilers);

//