diff options
Diffstat (limited to 'archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/scriptaculous/builder.js')
-rw-r--r-- | archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/scriptaculous/builder.js | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/scriptaculous/builder.js b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/scriptaculous/builder.js new file mode 100644 index 000000000..b7466ad83 --- /dev/null +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/scriptaculous/builder.js @@ -0,0 +1,160 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +// script.aculo.us builder.js v1.6.4, Wed Sep 06 11:30:58 CEST 2006 + +// 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 bug + node: function( elementName ) + { + elementName = elementName.toUpperCase(); + + // try innerHTML approach + var parentTag = this.NODEMAP[elementName] || 'div'; + var parentElement = document.createElement(parentTag); + try + { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707 + parentElement.innerHTML = "<" + elementName + "></" + elementName + ">"; + } + catch( e ) + { + } + var element = parentElement.firstChild || null; + + // see if browser added wrapping tags + if ( element && (element.tagName != elementName) ) + element = element.getElementsByTagName(elementName)[0]; + + // fallback to createElement approach + if ( !element ) element = document.createElement(elementName); + + // abort if nothing could be created + if ( !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/2707 + parentElement.innerHTML = "<" + elementName + " " + attrs + "></" + elementName + ">"; + } + catch( e ) + { + } + element = parentElement.firstChild || null; + // workaround firefox 1.0.X bug + if ( !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 children + if ( 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 text + children.flatten().each(function( e ) + { + if ( typeof e == 'object' ) + element.appendChild(e) + else + if ( Builder._isStringOrNumber(e) ) + element.appendChild(Builder._text(e)); + }); + } + else + if ( Builder._isStringOrNumber(children) ) + element.appendChild(Builder._text(children)); + }, + _isStringOrNumber: function( param ) + { + return(typeof param == 'string' || typeof param == 'number'); + }, + dump: function( scope ) + { + if ( typeof scope != 'object' && typeof scope != 'function' ) scope = window; //global scope + + var 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))); + } + }); + } +}
\ No newline at end of file |