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;
+}