Skip to content

Instantly share code, notes, and snippets.

@acreeger
Created June 30, 2011 11:35
Show Gist options
  • Save acreeger/1056051 to your computer and use it in GitHub Desktop.
Save acreeger/1056051 to your computer and use it in GitHub Desktop.
buildTree - tt.fm
buildTree: function(tree, containers) {
var type = $.type(tree);
if (type == "string" || type == "number") {
return document.createTextNode(String(tree));
}
if (type != "array") {
return tree;
}
var elemDescriptor = tree[0];
var cssClasses, elemId, containerKey = [];
if (elemDescriptor.indexOf(".") > -1) {
elemDescriptor = elemDescriptor.split(".");
cssClasses = elemDescriptor.slice(1); //[song]
elemDescriptor = elemDescriptor[0]; //div
}
if (elemDescriptor.indexOf("##") > -1) {
elemDescriptor = elemDescriptor.split("##");
containerKey = (containers ? elemDescriptor.slice(1) : []);
elemDescriptor = elemDescriptor[0]; ["div"]
}
if (elemDescriptor.indexOf("#") > -1) {
elemDescriptor = elemDescriptor.split("#");
elemId = elemDescriptor[1];
elemDescriptor = elemDescriptor[0];
}
var elem = document.createElement(elemDescriptor);
if (cssClasses) {
elem.className = cssClasses.join(" ");
}
for (var i = 0; i < containerKey.length; i++) {
containers[containerKey[i]] = elem;
}
if (elemId) {
elem.id = elemId;
}
var index = 1;
var elemData = tree[index];
if (elemData) {
if (util.typeOf(elemData) == "object") {
util.applyAttributes(elem, elemData, containers);
if (elemDescriptor.toLowerCase() == "a" && !elem.href) {
elem.href = "#";
}
index = 2;
}
for (; index < tree.length; index++) {
if (tree[index] !== null && tree[index] !== undefined) {
elem.appendChild(util.buildTree(tree[index], containers));
}
}
}
if (elemDescriptor == "input") {
this.setupPlaceholders(elem);
}
return elem;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment