Moved functions for compatibility into Skeleton namespace.

This commit is contained in:
Eric Kever 2011-08-10 13:20:52 -04:00
parent 70ab570ba4
commit 553f2fa375

View File

@ -8,108 +8,142 @@
* un-jQuerified by Eric Kever * un-jQuerified by Eric Kever
*/ */
(function(){
var Skeleton = {
getElementsByClassName : function(context, cls){
if(context.getElementsByClassName){
return context.getElementsByClassName(cls);
}
if(window.addEventListener){ var ele = context.getElementsByTagName("*"),
var BIND_HANDLER = "addEventListener"; ret = [],
var BIND_HANDLER_PREFIX = ""; current,
}else if(window.attachEvent){ classes;
var BIND_HANDLER = "attachEvent";
var BIND_HANDLER_PREFIX = "on";
}
function getElementsByClassName(context, tag, cls){ for(var i = 0, j = ele.length; i < j; i++){
var ele = context.getElementsByTagName(tag), current = ele[i];
ret = [], classes = (current.getAttribute("className") || current.className).split(" ");
current, for(var k = 0, l = classes.length; k < l; k++){
classes; if(classes[k] === cls){
ret.push(current);
break;
}
}
}
for(var i = 0, j = ele.length; i < j; i++){ return ret;
current = ele[i]; },
classes = (current.getAttribute("className") || current.className).split(" ");
for(var k = 0, l = classes.length; k < l; k++){
if(classes[k] === cls){
ret.push(current);
break;
}
}
}
return ret; filterTags : function(list, tags){
} var exists = false;
function addClass(element, name){ for(var i = 0, j = list.length; i < j; i++){
var classes = (element.getAttribute("className") || element.className).split(" "), for(var k = 0, l = tags.length; k < l; k++){
exists = false; if(list[i].tagName === tags[k]){
exists = true;
break;
}
}
if(exists === true){
list.splice(i, 1);
}
}
for(i = 0, j = classes.length; i < j; i++){ return list;
if(classes[i] === name){ },
exists = true;
break;
}
}
if(!exists){
classes.push(name);
element.className = classes.join(" ");
}
}
function removeClass(element, name){ addClass : function(element, name){
var classes = (element.getAttribute("className") || element.className).split(" "), var classes = (element.getAttribute("className") || element.className).split(" "),
exists = false; exists = false;
for(var i = 0, j = classes.length; i < j; i++){ for(i = 0, j = classes.length; i < j; i++){
if(classes[i] === name){ if(classes[i] === name){
exists = true; exists = true;
break; break;
} }
} }
if(exists){ if(!exists){
classes.splice(i, 1); classes.push(name);
element.className = classes.join(" "); element.className = classes.join(" ");
} }
} },
removeClass : function(element, name){
var classes = (element.getAttribute("className") || element.className).split(" "),
exists = false;
for(var i = 0, j = classes.length; i < j; i++){
if(classes[i] === name){
exists = true;
break;
}
}
if(exists){
classes.splice(i, 1);
element.className = classes.join(" ");
}
},
addListener : function(element, on, fn, last){
last = (last || false);
var BH;
if(window.addEventListener){ //AddEventListener takes precedence here
BH = "addEventListener";
}else if(window.attachEvent){
BH = "attachEvent";
on = "on" + on;
}
element[BH](on, function(e){
var event = e || window.event;
return fn.call(element, event); //Force it to call the handler in the proper context (IE 7 & 8 do not)
}, last);
}
};
window.Skeleton = Skeleton;
})();
function doFancyExpensiveTabThings(){ function doFancyExpensiveTabThings(){
var tabs = (document.getElementsByClassName ? document.getElementsByClassName("tabs") : getElementsByClassName(document, "ul", "tabs")); var tabs = Skeleton.filterTags(Skeleton.getElementsByClassName(document, "tabs"), ["ul"]);
for(var i = 0, j = tabs.length; i < j; i++){ for(var i = 0, j = tabs.length; i < j; i++){
var tabList = tabs[i].getElementsByTagName('li'); var tabList = tabs[i].getElementsByTagName("li");
for(var k = 0, l = tabList.length; k < l; k++){ for(var k = 0, l = tabList.length; k < l; k++){
tabList[k].getElementsByTagName('a')[0][BIND_HANDLER](BIND_HANDLER_PREFIX + "click", function(e){ Skeleton.addListener(tabList[k].getElementsByTagName('a')[0], "click", function(e){
var event = e || window.event; var contentLocation = this.href.substr(this.href.indexOf("#")) + "Tab",
return (function(e){ contentElement,
var contentLocation = this.href.substr(this.href.indexOf("#")) + "Tab", siblings;
contentElement,
siblings;
if(contentLocation.charAt(0) === "#"){ if(contentLocation.charAt(0) === "#"){
if(e.preventDefault){ if(e.preventDefault){
e.preventDefault(); e.preventDefault();
}else{ }else{
e.returnValue = false; e.returnValue = false;
e.cancelBubble = true; e.cancelBubble = true;
} }
for(var m = 0; m < k; m++){ for(var m = 0; m < k; m++){
removeClass(tabList[m].getElementsByTagName('a')[0], "active"); Skeleton.removeClass(tabList[m].getElementsByTagName('a')[0], "active");
} }
addClass(this, "active");
contentElement = document.getElementById(contentLocation.substr(1)); Skeleton.addClass(this, "active");
addClass(contentElement, "active");
siblings = contentElement.parentNode.getElementsByTagName('li'); contentElement = document.getElementById(contentLocation.substr(1));
for(m = 0, n = siblings.length; m < n; m++){ Skeleton.addClass(contentElement, "active");
if(siblings[m] !== contentElement){
removeClass(siblings[m], "active"); siblings = contentElement.parentNode.getElementsByTagName('li');
} for(m = 0, n = siblings.length; m < n; m++){
} if(siblings[m] !== contentElement){
} Skeleton.removeClass(siblings[m], "active");
return false; }
}).call(event.target || event.srcElement, event); }
}, false); }
} return false;
} });
}
}
} }
window[BIND_HANDLER](BIND_HANDLER_PREFIX + "load", doFancyExpensiveTabThings, false); Skeleton.addListener(window, "load", doFancyExpensiveTabThings);