Blame | Letzte Änderung | Log anzeigen | RSS feed
// script.aculo.us builder.js v1.8.1, Thu Jan 03 22:07:12 -0500 2008// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)//// script.aculo.us is freely distributable under the terms of an MIT-style license.// For details, see the script.aculo.us web site: http://script.aculo.us/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.toUpperCase() != 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) ||arguments[1].tagName) {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.toUpperCase() != 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);},ATTR_MAP: {'className': 'class','htmlFor': 'for'},_attributes: function(attributes) {var attrs = [];for(attribute in attributes)attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) +'="' + attributes[attribute].toString().escapeHTML().gsub(/"/,'"') + '"');return attrs.join(" ");},_children: function(element, children) {if(children.tagName) {element.appendChild(children);return;}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');},build: function(html) {var element = this.node('div');$(element).update(html.strip());return element.down();},dump: function(scope) {if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scopevar tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " +"BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " +"FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+"KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+"PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+"TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);tags.each( function(tag){scope[tag] = function() {return Builder.node.apply(Builder, [tag].concat($A(arguments)));}});}}