1 /* 2 * JBoss, Home of Professional Open Source 3 * Copyright 2013, Red Hat, Inc. and individual contributors 4 * by the @authors tag. See the copyright.txt in the distribution for a 5 * full listing of individual contributors. 6 * 7 * This is free software; you can redistribute it and/or modify it 8 * under the terms of the GNU Lesser General Public License as 9 * published by the Free Software Foundation; either version 2.1 of 10 * the License, or (at your option) any later version. 11 * 12 * This software is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with this software; if not, write to the Free 19 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 20 * 02110-1301 USA, or see the FSF site: http://www.fsf.org. 21 */ 22 23 if (typeof jsf != 'undefined') { 24 (function($, rf, jsf) { 25 26 //JSF log adapter 27 var identifyElement = function(elt) { 28 var identifier = '<' + elt.tagName.toLowerCase(); 29 var e = $(elt); 30 if (e.attr('id')) { 31 identifier += (' id=' + e.attr('id')); 32 } 33 if (e.attr('class')) { 34 identifier += (' class=' + e.attr('class')); 35 } 36 37 identifier += ' ...>'; 38 39 return identifier; 40 } 41 42 var formatPartialResponseElement = function(logElement, responseElement) { 43 var change = $(responseElement); 44 45 logElement.append("Element <b>" + responseElement.nodeName + "</b>"); 46 if (change.attr("id")) { 47 logElement.append(document.createTextNode(" for id=" + change.attr("id"))); 48 } 49 50 $(document.createElement("br")).appendTo(logElement); 51 $("<span style='color:dimgray'></span>").appendTo(logElement).text(change.toXML()); 52 $(document.createElement("br")).appendTo(logElement); 53 } 54 55 var formatPartialResponse = function(partialResponse) { 56 var logElement = $(document.createElement("span")); 57 58 partialResponse.children().each(function() { 59 var responseElement = $(this); 60 if (responseElement.is('changes')) { 61 logElement.append("Listing content of response <b>changes</b> element:<br />"); 62 responseElement.children().each(function() { 63 formatPartialResponseElement(logElement, this); 64 }); 65 } else { 66 formatPartialResponseElement(logElement, this); 67 } 68 }); 69 70 return logElement; 71 } 72 73 var jsfAjaxLogAdapter = function(data) { 74 try { 75 var log = rf.log; 76 77 var source = data.source; 78 var type = data.type; 79 80 var responseCode = data.responseCode; 81 var responseXML = data.responseXML; 82 var responseText = data.responseText; 83 84 if (type != 'error') { 85 log.info("Received '" + type + "' event from " + identifyElement(source)); 86 87 if (type == 'beforedomupdate') { 88 var partialResponse; 89 90 if (responseXML) { 91 partialResponse = $(responseXML).children("partial-response"); 92 } 93 94 var responseTextEntry = $("<span>Server returned responseText: </span><span style='color:dimgray'></span>").eq(1).text(responseText).end(); 95 96 if (partialResponse && partialResponse.length) { 97 log.debug(responseTextEntry); 98 log.info(formatPartialResponse(partialResponse)); 99 } else { 100 log.info(responseTextEntry); 101 } 102 } 103 } else { 104 var status = data.status; 105 log.error("Received '" + type + '@' + status + "' event from " + identifyElement(source)); 106 log.error("[" + data.responseCode + "] " + data.errorName + ": " + data.errorMessage); 107 } 108 } catch (e) { 109 //ignore logging errors 110 } 111 }; 112 113 var eventsListener = rf.createJSFEventsAdapter({ 114 begin: jsfAjaxLogAdapter, 115 beforedomupdate: jsfAjaxLogAdapter, 116 success: jsfAjaxLogAdapter, 117 complete: jsfAjaxLogAdapter, 118 error: jsfAjaxLogAdapter 119 }); 120 121 jsf.ajax.addOnEvent(eventsListener); 122 jsf.ajax.addOnError(eventsListener); 123 // 124 }(RichFaces.jQuery, RichFaces, jsf)); 125 } 126 ;