[richfaces-svn-commits] JBoss Rich Faces SVN: r15258 - in root: framework/trunk/impl/src/main/resources/META-INF/resources/richfaces.js and 1 other directories.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Fri Aug 21 11:51:31 EDT 2009


Author: nbelaevski
Date: 2009-08-21 11:51:30 -0400 (Fri, 21 Aug 2009)
New Revision: 15258

Modified:
   root/examples/trunk/components/core-demo/src/main/webapp/status.xhtml
   root/framework/trunk/impl/src/main/resources/META-INF/resources/richfaces.js/4_0_0.js
   root/ui/trunk/components/core/src/main/resources/META-INF/resources/richfaces.css/4_0_0.css
Log:
a4j:status fixed issue in form location script
JSF log adapter added
a4j:log default font changed to monotyped

Modified: root/examples/trunk/components/core-demo/src/main/webapp/status.xhtml
===================================================================
--- root/examples/trunk/components/core-demo/src/main/webapp/status.xhtml	2009-08-21 15:02:05 UTC (rev 15257)
+++ root/examples/trunk/components/core-demo/src/main/webapp/status.xhtml	2009-08-21 15:51:30 UTC (rev 15258)
@@ -55,6 +55,9 @@
 				<f:ajax />
 			</h:commandLink>
 		</h:form>
+
+		<a4j:log />
+		
 	</h:body>
 </f:view>
 </html>
\ No newline at end of file

Modified: root/framework/trunk/impl/src/main/resources/META-INF/resources/richfaces.js/4_0_0.js
===================================================================
--- root/framework/trunk/impl/src/main/resources/META-INF/resources/richfaces.js/4_0_0.js	2009-08-21 15:02:05 UTC (rev 15257)
+++ root/framework/trunk/impl/src/main/resources/META-INF/resources/richfaces.js/4_0_0.js	2009-08-21 15:51:30 UTC (rev 15258)
@@ -37,6 +37,25 @@
 	//
 	
 	//utils.js
+	jQuery.fn.toXML = function () {
+		var out = '';
+	
+		if (this.length > 0) {
+			if (typeof XMLSerializer == 'function' ||
+				typeof XMLSerializer == 'object') {
+			        
+				var xs = new XMLSerializer();
+				this.each(function() { out += xs.serializeToString(this); });
+			} else if (this[0].xml !== undefined) {
+				this.each(function() { out += this.xml; });
+			} else if (this.length > 0) {
+				this.each( function() { out += this; } );
+			}
+		}
+		
+		return out;
+	};
+	
 	richfaces.log = (function(jQuery) {
 		var LOG_LEVELS = {'debug': 1, 'info': 2, 'warn': 3, 'error': 4};
 		var LOG_LEVEL_COLORS = {'debug': 'darkblue', 'info': 'blue', 'warn': 'gold', 'error': 'red'};
@@ -62,38 +81,41 @@
 				window.console.clear();
 			} else {
 				var console = getConsole();
-				console.children().not(".rich-log-element").remove();
+				console.children(".rich-log-contents").children().remove();
 			}
 		};
 		
 		var getConsole = function() {
 			var console = jQuery('#richfaces\\.log');
-			if (console.length == 0) {
-				console = jQuery("<div id='richfaces.log'></div>").appendTo("body");
-			}
+			if (console.length != 0) {
+				if (!consoleInitialized) {
+					consoleInitialized = true;
 
-			if (!consoleInitialized) {
-				consoleInitialized = true;
+					var clearBtn = console.find("button.rich-log-element");
+					if (clearBtn.length == 0) {
+						clearBtn = jQuery("<button class='rich-log-element'>Clear</button>").appendTo(console);
+					}
+					clearBtn.click(clear);
+					
+					var levelSelect = console.find("select.rich-log-element");
+					if (levelSelect.length == 0) {
+						levelSelect = jQuery("<select class='rich-log-element' />").appendTo(console);
+					}
+					
+					if (levelSelect.children().length == 0) {
+						for (var level in LOG_LEVELS) {
+							jQuery("<option value='" + LOG_LEVELS[level]+ "'>" + level + "</option>").appendTo(levelSelect);
+						}
+					}
 
-				var clearBtn = console.find("button.rich-log-element");
-				if (clearBtn.length == 0) {
-					clearBtn = jQuery("<button class='rich-log-element'>Clear</button>").appendTo(console);
-				}
-				clearBtn.click(clear);
+					levelSelect.val(currentLogLevel);
+					levelSelect.change(function(event) { clear(); setLevelFromSelect(parseInt(jQuery(this).val(), 10)); return false;});
 				
-				var levelSelect = console.find("select.rich-log-element");
-				if (levelSelect.length == 0) {
-					levelSelect = jQuery("<select class='rich-log-element' />").appendTo(console);
-				}
-				
-				if (levelSelect.children().length == 0) {
-					for (var level in LOG_LEVELS) {
-						jQuery("<option value='" + LOG_LEVELS[level]+ "'>" + level + "</option>").appendTo(levelSelect);
+					var consoleEntries = console.find(".rich-log-contents");
+					if (consoleEntries.length == 0) {
+						consoleEntries = jQuery("<div class='rich-log-contents'></div>").appendTo(console);
 					}
 				}
-
-				levelSelect.val(currentLogLevel);
-				levelSelect.change(function(event) { clear(); setLevelFromSelect(parseInt(jQuery(this).val(), 10)); return false;});
 			}
 
 			return console;
@@ -101,12 +123,33 @@
 		
 		var useBrowserConsole = false;
 
-		var formatMessage = function(level, message) {
-			return level + '[' + new Date().toLocaleTimeString() + ']: ' + message;
+		var AM_PM = /(\s*(?:a|p)m)$/ig;
+		
+		var getMessagePrefix = function(level) {
+			var date = new Date();
+			var formattedDate = date.toLocaleTimeString();
+			
+			var ms = (date.getMilliseconds() + 1000).toString().substr(1);
+			if (AM_PM.test(formattedDate)) {
+				formattedDate = formattedDate.replace(AM_PM, "." + ms + "$1");
+			} else {
+				formattedDate += "." + ms;
+			}
+			
+			return level + '[' + formattedDate.replace() + ']: ';
 		};
 		
-		var appendConsoleEntry = function(level, text, console) {
-			jQuery("<div style='color: " + LOG_LEVEL_COLORS[level] + "'></div>").appendTo(console).text(text);
+		var appendConsoleEntry = function(level, messagePrefix, messageText, console) {
+			//TODO - cache jQuery("<element>")?
+			var newEntry = jQuery(document.createElement("div")).appendTo(console.children(".rich-log-contents"));
+			jQuery("<span style='color: " + LOG_LEVEL_COLORS[level] + "'></span>").appendTo(newEntry).text(messagePrefix);
+			
+			var entrySpan = jQuery(document.createElement("span")).appendTo(newEntry);
+			if (typeof messageText != 'object' || !messageText.appendTo) {
+				entrySpan.text(messageText);
+			} else {
+				messageText.appendTo(entrySpan);
+			}
 		};
 
 		var appendBrowserConsoleEntry = function(level, text) {
@@ -115,13 +158,13 @@
 		
 		var appendMessage = function(level, message) {
 			if (window.console && useBrowserConsole) {
-				var text = formatMessage(level, message);
+				var text = getMessagePrefix(level) + message;
 				appendBrowserConsoleEntry(level, text);
 			} else {
 				var console = getConsole();
-				if (LOG_LEVELS[level] >= currentLogLevel) {
-					var text = formatMessage(level, message);
-					appendConsoleEntry(level, text, console);
+				if (LOG_LEVELS[level] >= currentLogLevel && console.length != 0) {
+					var messagePrefix = getMessagePrefix(level);
+					appendConsoleEntry(level, messagePrefix, message, console);
 				}
 			}
 		};
@@ -137,6 +180,97 @@
 		return methods;
 	}(jQuery));
 	
+	//JSF log adapter
+	var identifyElement = function(elt) {
+		var identifier = '<' + elt.tagName.toLowerCase();
+		var e = jQuery(elt);
+		if (e.attr('id')) {
+			identifier += (' id=' + e.attr('id'));
+		}
+		if (e.attr('class')) {
+			identifier += (' class=' + e.attr('class'));
+		}
+
+		identifier += ' ...>';
+
+		return identifier;
+	}
+
+	var formatPartialResponseElement = function(logElement, responseElement) {
+		var change = jQuery(responseElement);
+
+		logElement.append("Element <b>" + responseElement.nodeName + "</b>");
+		if (change.attr("id")) {
+			logElement.append(document.createTextNode(" for id=" + change.attr("id")));
+		}
+
+		jQuery(document.createElement("br")).appendTo(logElement);
+		jQuery("<span style='color:dimgray'></span>").appendTo(logElement).text(change.toXML());
+		jQuery(document.createElement("br")).appendTo(logElement);
+	}
+	
+	var formatPartialResponse = function(partialResponse) {
+		var logElement = jQuery(document.createElement("span"));
+		
+		partialResponse.children().each(function() {
+			var responseElement = jQuery(this);
+			if (responseElement.is('changes')) {
+				logElement.append("Listing content of response <b>changes</b> element:<br />");
+				responseElement.children().each(function() {
+					formatPartialResponseElement(logElement, this);
+				});
+			} else {
+				formatPartialResponseElement(logElement, this);
+			}
+		});
+
+		return logElement;
+	}
+	
+	var jsfAjaxLogAdapter = function(data) {
+		try {
+			var log = richfaces.log;
+
+			var source = data.source;
+			var status = data.status;
+			var type = data.type;
+			
+			var responseCode = data.responseCode;
+			var responseXML = data.responseXML;
+			var responseText = data.responseText;
+
+			if (type == 'event') {
+				log.info("Received '" + status + "' event from " + identifyElement(source));
+
+				if (status == 'complete') {
+					var partialResponse;
+
+					if (responseXML) {
+						partialResponse = jQuery(responseXML).children("partial-response");
+					}
+
+					var responseTextEntry = jQuery("<span>Server returned responseText: </span><span style='color:dimgray'></span>").eq(1).text(responseText).end();
+					
+					if (partialResponse && partialResponse.length) {
+						log.debug(responseTextEntry);
+						log.info(formatPartialResponse(partialResponse));
+					} else {
+						log.info(responseTextEntry);
+					}
+				}
+			} else if (type == 'error') {
+				log.error("Received '" + status + "' error event from " + identifyElement(source));
+				log.error("[" + data.responseCode + "] " + data.errorName + ": " + data.errorMessage);
+			}
+		} catch (e) {
+			//ignore logging errors
+		}
+	};
+
+	jsf.ajax.addOnEvent(jsfAjaxLogAdapter);
+	jsf.ajax.addOnError(jsfAjaxLogAdapter);
+	//
+	
 	/**
 	 * Evaluates chained properties for the "base" object.
 	 * For example, window.document.location is equivalent to 
@@ -303,7 +437,7 @@
 		
 		if (methodName) {
 			var statusApplied = false;
-			var statusContainers = [jQuery(source).parent('form'), jQuery()];
+			var statusContainers = [jQuery(source).parents('form'), jQuery()];
 			for (var containerIdx = 0; containerIdx < statusContainers.length && !statusApplied; 
 				containerIdx++) {
 				
@@ -371,7 +505,7 @@
 		return {
 			register: function() {
 				initializeStatuses();
-				var container = getElement.call(this).parent('form');
+				var container = getElement.call(this).parents('form');
 				if (container.length == 0) {
 					container = jQuery();
 				};

Modified: root/ui/trunk/components/core/src/main/resources/META-INF/resources/richfaces.css/4_0_0.css
===================================================================
--- root/ui/trunk/components/core/src/main/resources/META-INF/resources/richfaces.css/4_0_0.css	2009-08-21 15:02:05 UTC (rev 15257)
+++ root/ui/trunk/components/core/src/main/resources/META-INF/resources/richfaces.css/4_0_0.css	2009-08-21 15:51:30 UTC (rev 15258)
@@ -1,5 +1,10 @@
-.rich-log{
+.rich-log {
 	height: 300px;
 	overflow: auto;
 	width: 100%;
 }
+
+.rich-log-contents {
+	font-family: Consolas, Courier New, Courier;
+	font-size: 14px;
+}



More information about the richfaces-svn-commits mailing list