// small but works-for-me stuff for testing javascripts // not ready for "production" use Object.inspect = function(obj) { var info = []; if(typeof obj=="string" || typeof obj=="number") { return obj; } else { for(property in obj) if(typeof obj[property]!="function") info.push(property + ' => "' + obj[property] + '"'); } return ("'" + obj + "' #" + typeof obj + ": {" + info.join(", ") + "}"); } // borrowed from http://www.schuerig.de/michael/javascript/stdext.js // Copyright (c) 2005, Michael Schuerig, michael@schuerig.de Array.flatten = function(array, excludeUndefined) { if (excludeUndefined === undefined) { excludeUndefined = false; } var result = []; var len = array.length; for (var i = 0; i < len; i++) { var el = array[i]; if (el instanceof Array) { var flat = el.flatten(excludeUndefined); result = result.concat(flat); } else if (!excludeUndefined || el != undefined) { result.push(el); } } return result; }; if (!Array.prototype.flatten) { Array.prototype.flatten = function(excludeUndefined) { return Array.flatten(this, excludeUndefined); } } /*--------------------------------------------------------------------------*/ var Builder = { node: function(elementName) { var element = document.createElement(elementName); // attributes (or text) if(arguments[1]) { if(this._isStringOrNumber(arguments[1]) || (arguments[1] instanceof Array)) this._children(element, arguments[1]); else this._attributes(element, arguments[1]); } // text, or array of children if(arguments[2]) this._children(element, arguments[2]); return element; }, _text: function(text) { return document.createTextNode(text); }, _attributes: function(element, attributes) { for(attribute in attributes) if(this._isStringOrNumber(attributes[attribute])) element.setAttribute( attribute=='className' ? 'class' : attribute, attributes[attribute]); }, _children: function(element, children) { if(typeof children=='object') { // array can hold nodes and text children = children.flatten(); for(var i = 0; i 0 ? ' ' : '') + arguments[i]; } }, // returns true if all given classes exist in said element has: function(element) { element = $(element); if(!element || !element.className) return false; var regEx; for(var i = 1; i < arguments.length; i++) { regEx = new RegExp("\\b" + arguments[i] + "\\b"); if(!regEx.test(element.className)) return false; } return true; }, // expects arrays of strings and/or strings as optional paramters // Element.Class.has_any(element, ['classA','classB','classC'], 'classD') has_any: function(element) { element = $(element); if(!element || !element.className) return false; var regEx; for(var i = 1; i < arguments.length; i++) { if((typeof arguments[i] == 'object') && (arguments[i].constructor == Array)) { for(var j = 0; j < arguments[i].length; j++) { regEx = new RegExp("\\b" + arguments[i][j] + "\\b"); if(regEx.test(element.className)) return true; } } else { regEx = new RegExp("\\b" + arguments[i] + "\\b"); if(regEx.test(element.className)) return true; } } return false; }, childrenWith: function(element, className) { var children = $(element).getElementsByTagName('*'); var elements = new Array(); for (var i = 0; i < children.length; i++) { if (Element.Class.has(children[i], className)) { elements.push(children[i]); break; } } return elements; } }