MediaWiki:Tabs.js: Difference between revisions

From Zelda Dungeon Wiki
Jump to navigation Jump to search
Want an adless experience? Log in or Create an account.
(I give up.)
(I think that getElementsByClassName function is what's been messing up the js all over the wiki)
Line 1: Line 1:
/*
Developed by Robert Nyman, http://www.robertnyman.com
Code/licensing: http://code.google.com/p/getelementsbyclassname/
*/
var getElementsByClassName = function (className, tag, elm){
if (document.getElementsByClassName) {
getElementsByClassName = function (className, tag, elm) {
elm = elm || document;
var elements = elm.getElementsByClassName(className),
nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
returnElements = [],
current;
for(var i=0, il=elements.length; i<il; i+=1){
current = elements[i];
if(!nodeName || nodeName.test(current.nodeName)) {
returnElements.push(current);
}
}
return returnElements;
};
}
else if (document.evaluate) {
getElementsByClassName = function (className, tag, elm) {
tag = tag || "*";
elm = elm || document;
var classes = className.split(" "),
classesToCheck = "",
xhtmlNamespace = "http://www.w3.org/1999/xhtml",
namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
returnElements = [],
elements,
node;
for(var j=0, jl=classes.length; j<jl; j+=1){
classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
}
try {
elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
}
catch (e) {
elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
}
while ((node = elements.iterateNext())) {
returnElements.push(node);
}
return returnElements;
};
}
else {
getElementsByClassName = function (className, tag, elm) {
tag = tag || "*";
elm = elm || document;
var classes = className.split(" "),
classesToCheck = [],
elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
current,
returnElements = [],
match;
for(var k=0, kl=classes.length; k<kl; k+=1){
classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
}
for(var l=0, ll=elements.length; l<ll; l+=1){
current = elements[l];
match = false;
for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
match = classesToCheck[m].test(current.className);
if (!match) {
break;
}
}
if (match) {
returnElements.push(current);
}
}
return returnElements;
};
}
return getElementsByClassName(className, tag, elm);
};
var getChildrenByTagName = function(parent, name) {
var getChildrenByTagName = function(parent, name) {
var nodeList = [];
var nodeList = [];
Line 88: Line 9:
/* Move tabs from the tabcontent section to the tab section */
/* Move tabs from the tabcontent section to the tab section */
/* This assumes that every tabcontent div is paired with one tab div. */
/* This assumes that every tabcontent div is paired with one tab div. */
var destinations = getElementsByClassName("tab");
var destinations = document.getElementsByClassName("tab");
var tabcontents = getElementsByClassName("tabcontent");
var tabcontents = document.getElementsByClassName("tabcontent");
for( var i = 0; i < tabcontents.length; ++i ) {
for( var i = 0; i < tabcontents.length; ++i ) {
var tabs = getChildrenByTagName(tabcontents[i], "UL");
var tabs = getChildrenByTagName(tabcontents[i], "UL");

Revision as of 02:39, July 1, 2014

var getChildrenByTagName = function(parent, name) {
	var nodeList = [];
	for (var child = parent.firstChild; child != null; child = child.nextSibling) {
		if (child.nodeType == 1 && name == child.nodeName) { nodeList.push(child); }
	}
	return nodeList;
};

/* Move tabs from the tabcontent section to the tab section */
/* This assumes that every tabcontent div is paired with one tab div. */
var destinations = document.getElementsByClassName("tab");
var tabcontents = document.getElementsByClassName("tabcontent");
for( var i = 0; i < tabcontents.length; ++i ) {
	var tabs = getChildrenByTagName(tabcontents[i], "UL");
	for( var j = 0; j < tabs.length; ++j ) {
		/* Move from tabcontents ul to tab ul */
		destinations[i].firstChild.appendChild(tabs[j].firstChild);
		/* Remove the now empty tabcontents ul */
		tabcontents[i].removeChild(tabs[j]);
	}
}