Blame | Letzte Änderung | Log anzeigen | RSS feed
// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)//// See scriptaculous.js for full license.var Builder = {NODEMAP: {AREA: 'map',CAPTION: 'table',COL: 'table',COLGROUP: 'table',LEGEND: 'fieldset',OPTGROUP: 'select',OPTION: 'select',PARAM: 'object',TBODY: 'table',TD: 'table',TFOOT: 'table',TH: 'table',THEAD: 'table',TR: 'table'},// note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,// due to a Firefox bugnode: function(elementName) {elementName = elementName.toUpperCase();// try innerHTML approachvar parentTag = this.NODEMAP[elementName] || 'div';var parentElement = document.createElement(parentTag);try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";} catch(e) {}var element = parentElement.firstChild || null;// see if browser added wrapping tagsif(element && (element.tagName != elementName))element = element.getElementsByTagName(elementName)[0];// fallback to createElement approachif(!element) element = document.createElement(elementName);// abort if nothing could be createdif(!element) return;// attributes (or text)if(arguments[1])if(this._isStringOrNumber(arguments[1]) ||(arguments[1] instanceof Array)) {this._children(element, arguments[1]);} else {var attrs = this._attributes(arguments[1]);if(attrs.length) {try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707parentElement.innerHTML = "<" +elementName + " " +attrs + "></" + elementName + ">";} catch(e) {}element = parentElement.firstChild || null;// workaround firefox 1.0.X bugif(!element) {element = document.createElement(elementName);for(attr in arguments[1])element[attr == 'class' ? 'className' : attr] = arguments[1][attr];}if(element.tagName != elementName)element = parentElement.getElementsByTagName(elementName)[0];}}// text, or array of childrenif(arguments[2])this._children(element, arguments[2]);return element;},_text: function(text) {return document.createTextNode(text);},_attributes: function(attributes) {var attrs = [];for(attribute in attributes)attrs.push((attribute=='className' ? 'class' : attribute) +'="' + attributes[attribute].toString().escapeHTML() + '"');return attrs.join(" ");},_children: function(element, children) {if(typeof children=='object') { // array can hold nodes and textchildren.flatten().each( function(e) {if(typeof e=='object')element.appendChild(e)elseif(Builder._isStringOrNumber(e))element.appendChild(Builder._text(e));});} elseif(Builder._isStringOrNumber(children))element.appendChild(Builder._text(children));},_isStringOrNumber: function(param) {return(typeof param=='string' || typeof param=='number');}}