1 (function($, document) {
3 var create = $.create = (function() {
5 function addAttrs( el, obj, context ) {
6 for( var attr in obj ){
11 el.innerHTML = obj[ attr ];
14 for( var style in obj.css ) {
15 $.attr( el.style, style, obj.css[ style ] );
18 case 'text' : case 'child' : case 'children' :
19 createNode( obj[attr], el, context );
22 el.className = obj[attr];
25 for( var data in obj.data ) {
26 $.data( el, data, obj.data[data] );
30 if( attr.indexOf("on") === 0 && $.isFunction(obj[attr]) ) {
31 $.event.add( el, attr.substr(2).replace(/^[A-Z]/, function(a) { return a.toLowerCase(); }), obj[attr] );
33 $.attr( el, attr, obj[attr] );
39 function createNode(obj, parent, context) {
40 if(obj && ($.isArray(obj) || obj instanceof $)) {
41 for(var ret = [], i = 0; i < obj.length; i++) {
42 var newNode = createNode(obj[i], parent, context);
50 if(typeof(obj) === 'string') {
51 el = context.createTextNode( obj );
54 } else if(obj.nodeType === 1) {
56 } else if( obj instanceof app.ui.AbstractWidget ) {
59 el = context.createElement( obj.tag || 'DIV' );
60 addAttrs(el, obj, context);
62 if(parent){ parent.appendChild(el); }
66 return function(elementDef, parentNode) {
67 return createNode(elementDef, parentNode, (parentNode && parentNode.ownerDocument) || document);
73 // inject create into jquery internals so object definitions are treated as first class constructors (overrides non-public methods)
77 $.clean = function( elems, context, fragment, scripts ) {
78 for(var i = 0; i < elems.length; i++) {
79 if( elems[i].tag || elems[i] instanceof app.ui.AbstractWidget ) {
80 elems[i] = create( elems[i], null, context );
83 return clean( elems, context, fragment, scripts );
86 $.fn.init = function( selector, context, rootjQuery ) {
87 if ( selector && ( selector.tag || selector instanceof app.ui.AbstractWidget )) {
88 selector = create( selector, null, context );
90 return init.call( this, selector, context, rootjQuery );
93 $.fn.init.prototype = $.fn;
95 })(jQuery, window.document);