Difference between revisions of "MediaWiki:Common.js"

From Discovery Wiki
Jump to navigationJump to search
(Rewrote the present functions.)
Line 1: Line 1:
 
/* Any JavaScript here will be loaded for all users on every page load. */
 
/* Any JavaScript here will be loaded for all users on every page load. */
  
/* Event attach functions. Use DW_hookToElement to hook functions to browser
+
/* Event attach functions. */
events for certain elements. */
 
 
function DW_eventAttach (obj, event, handler) {
 
function DW_eventAttach (obj, event, handler) {
 
if (obj.addEventListener) {
 
if (obj.addEventListener) {
Line 13: Line 12:
 
}
 
}
  
function DW_hookToElement (el, n, ev, func) {
+
/* Functions for Template:SpoilerWindow */
var el_list = document.getElementsByTagName(el);
+
function DW_createSpoilerLink () {
 +
var el_list = document.getElementsByTagName('div');
 
var el_cur;
 
var el_cur;
 
for (var i = 0, l = el_list.length; i < l; i++){  
 
for (var i = 0, l = el_list.length; i < l; i++){  
 
el_cur = el_list[i];
 
el_cur = el_list[i];
if (el_cur.name && el_cur.name == n) {
+
DW_eventAttach(el_cur, ev, func);
+
if ((el_cur.className && el_cur.className == 'dwspoiler')) {
 +
var container = el_cur.getElementsByTagName('div');
 +
if (!container.item(1).style.display || container.item(1).style.display == 'block') {
 +
var text = document.createTextNode('Hide');
 +
} else {
 +
var text = document.createTextNode('Show');
 +
}
 +
 +
var link = document.createElement('a');
 +
link.appendChild(text);
 +
link.setAttribute('href', 'javascript:void(0);');
 +
DW_eventAttach(link, 'click', function () { DW_toggleVisibility(this); });
 +
 +
container.item(0).appendChild(document.createTextNode('['));
 +
container.item(0).appendChild(link);
 +
container.item(0).appendChild(document.createTextNode(']'));
 +
 
}
 
}
 
}
 
}
 
}
 
}
 +
addOnloadHook(DW_createSpoilerLink);
  
/* Function for Template:SpoilerBox */
 
 
function DW_toggleVisibility (obj) {
 
function DW_toggleVisibility (obj) {
var container = obj.parentNode.parentNode.getElementsByTagName('div').item(0);
+
var container = obj.parentNode.parentNode.getElementsByTagName('div').item(1);
 
if (!container.style.display || container.style.display == 'block') {
 
if (!container.style.display || container.style.display == 'block') {
 
container.style.display = 'none';
 
container.style.display = 'none';
Line 35: Line 51:
 
}
 
}
 
}
 
}
addOnloadHook(function () { DW_hookToElement('span', 'dwspoiler', 'click', function () { DW_toggleVisibility(this); }); });
 

Revision as of 23:47, 12 July 2009

/* Any JavaScript here will be loaded for all users on every page load. */

/* Event attach functions. */
function DW_eventAttach (obj, event, handler) {
	if (obj.addEventListener) {
		obj.addEventListener(event, handler, false);
	} else if (obj.attachEvent) {
		var r = obj.attachEvent('on' + event, handler);
	} else {
		obj['on' + event] = handler;
	}
}

/* Functions for Template:SpoilerWindow */
function DW_createSpoilerLink () {
	var el_list = document.getElementsByTagName('div');
	var el_cur;
	for (var i = 0, l = el_list.length; i < l; i++){ 
		el_cur = el_list[i];
		
		if ((el_cur.className && el_cur.className == 'dwspoiler')) {
			var container = el_cur.getElementsByTagName('div');
			if (!container.item(1).style.display || container.item(1).style.display == 'block') {
				var text = document.createTextNode('Hide');
			} else {
				var text = document.createTextNode('Show');
			}
			
			var link = document.createElement('a');
			link.appendChild(text);
			link.setAttribute('href', 'javascript:void(0);');
			DW_eventAttach(link, 'click', function () { DW_toggleVisibility(this); });
			
			container.item(0).appendChild(document.createTextNode('['));
			container.item(0).appendChild(link);
			container.item(0).appendChild(document.createTextNode(']'));
			
		}
	}
}
addOnloadHook(DW_createSpoilerLink);

function DW_toggleVisibility (obj) {
	var container = obj.parentNode.parentNode.getElementsByTagName('div').item(1);
	if (!container.style.display || container.style.display == 'block') {
		container.style.display = 'none';
		obj.innerHTML = 'Show';
	} else {
		container.style.display = 'block';
		obj.innerHTML = 'Hide';
	}
}