Revision: 12659
                            
                                                            
                                    
                                        
Updated Code
                                    
                                    
                                                    
                        at March 24, 2009 16:12 by postream
                            
                            Updated Code
/* ---------------------------------------------------------------
 * YQL2DOM Plugin
 *
 * Convert YQL Jason results to a complete HTML Dom
 * Note: unfortunatly the YQL JSON format is lossy
 * Info: http://developer.yahoo.com/yql/guide/output-xml-json-conversion.html
 *
 * Warning: this plugin doesn't work in the right manner
 * The problem is that there's no way to extract the attributes in the right order
 * So for example: <p>just a <strong>test</strong></p> may arbitrary become <p><strong>test</strong>just a </p>
 *
 * @return: dom object
 * -------------------------------------------------------------*/  
 
// in some cases we can only distinguish between tags and attributes by the name
var YQL2DOM_CONTENT_TAGS = ['a','p','h1','h2','h3','h4','h5','h6','div','span','td', 'strong','em','i','b']
$.YQL2DOM = function(jsonResults, tag) {
	var htmlResult = "";
	
	// just one content
	if (typeof(jsonResults) == 'string'){
		
		return '<' + tag + '>' + jsonResults + '</' + tag + '>';	
	
	// array of the same tag
	}else if($.isArray(jsonResults)){
		
		for (var i = 0; i < jsonResults.length; i++){  
			htmlResult += $.YQL2DOM(jsonResults[i], tag);		
		}  
	
	
	// just one tag
	}else if (typeof(jsonResults) == 'object'){
		
		var childrenHTML = "";
		var attributes = [];		
		var attrID = 0;
		
		for (index in jsonResults){  
			
			if(tag == 'p') console.log('index: ' + index + ' | tag: ' + tag);
			// content
			if(index == 'content'){
				childrenHTML += jsonResults[index];		
				if(tag == 'p') console.log('content ' + jsonResults[index]);
				
			// attribute or simple child
			}else if(typeof(jsonResults[index]) !== 'object' ){
				
				if(tag == 'p') console.log('whonows ' + index);
				
				// test if it has a tag name
				if($.inArray(index, YQL2DOM_CONTENT_TAGS) != -1)
					// simple tag
					childrenHTML += '<' + index + '>' + jsonResults[index] + '</' + index + '>';
				else
					// attribute
					attributes[attrID++] = index + "=\"" + jsonResults[index] + "\"";
				
			// child
			}else{
				childrenHTML += $.YQL2DOM(jsonResults[index], index);		
			}
		}  	
		if(tag === undefined){
			// root
			htmlResult = childrenHTML; 
		}else{
			attributes = (attrID > 0)?' ' + attributes.join(' '):'';
			htmlResult = "<" + tag + attributes + ">" + childrenHTML + "</" + tag + ">";		
		}
	}
	
	return htmlResult;
};
                                
                            Revision: 12658
                            
                                                            
                                    
                                        
Initial Code
                                    
                                    
                                                            
                                    
                                        
Initial URL
                                    
                                    
                                
                                                            
                                    
                                        
Initial Description
                                    
                                    
                                                            
                                    
                                        
Initial Title
                                    
                                    
                                                            
                                    
                                        
Initial Tags
                                    
                                    
                                
                                                            
                                    
                                        
Initial Language
                                    
                                    
                                                    
                        at March 24, 2009 00:43 by postream
                            
                            Initial Code
/* ---------------------------------------------------------------
 * YQL2DOM Plugin
 *
 * Convert YQL Jason results to a complete HTML Dom
 * Note: unfortunatly the YQL JSON format is lossy
 * Info: http://developer.yahoo.com/yql/guide/output-xml-json-conversion.html
 *
 * Warning: this plugin doesn't work in the right manner
 * The problem is that there's no way to extract the attributes in the right order
 * So for example: <p>just a <strong>test</strong></p> may arbitrary become <p><strong>test</strong>just a </p>
 *
 * @return: dom object
 * -------------------------------------------------------------*/  
 
// in some cases we can only distinguish between tags and attributes by the name
var YQL2DOM_CONTENT_TAGS = ['a','p','h1','h2','h3','h4','h5','h6','div','span','td', 'strong','em','i','b']
$.YQL2DOM = function(jsonResults, tag) {
	var htmlResult = "";
	
	if($.isArray(jsonResults)){
		// array of the same tag
		for (var i = 0; i < jsonResults.length; i++){  
			htmlResult += $.YQL2DOM(jsonResults[i], tag);		
		}  
	}else{
		// just one tag
		var childrenHTML = "";
		var attributes = [];		
		var attrID = 0;
		
		for (index in jsonResults){  
			
			if(tag == 'p') console.log('index: ' + index + ' | tag: ' + tag);
			// content
			if(index == 'content'){
				childrenHTML += jsonResults[index];		
				if(tag == 'p') console.log('content ' + jsonResults[index]);
				
			// attribute or simple child
			}else if(typeof(jsonResults[index]) !== 'object' ){
				
				if(tag == 'p') console.log('whonows ' + index);
				
				// test if it has a tag name
				if($.inArray(index, YQL2DOM_CONTENT_TAGS) != -1)
					// simple tag
					childrenHTML += '<' + index + '>' + jsonResults[index] + '</' + index + '>';
				else
					// attribute
					attributes[attrID++] = index + "=\"" + jsonResults[index] + "\"";
				
			// child
			}else{
				childrenHTML += $.YQL2DOM(jsonResults[index], index);		
			}
		}  	
		if(tag === undefined){
			// root
			htmlResult = childrenHTML; 
		}else{
			attributes = (attrID > 0)?' ' + attributes.join(' '):'';
			htmlResult = "<" + tag + attributes + ">" + childrenHTML + "</" + tag + ">";		
		}
	}
	
	return htmlResult;
};
                                Initial URL
Initial Description
Convert YQL Jason results to a complete HTML Dom Note: unfortunatly the YQL JSON format is lossy Info: http://developer.yahoo.com/yql/guide/output-xml-json-conversion.html Warning: this plugin doesn't work in the right manner! The problem is that there's no way to extract the attributes in the right order So for example: <p>just a <strong>test</strong></p> may arbitrary become <p><strong>test</strong>just a </p>
Initial Title
YQL2DOM jQuery Plugin
Initial Tags
Initial Language
jQuery