UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

233 lines (195 loc) 6.11 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2004-2008 1&1 Internet AG, Germany, http://www.1und1.de License: MIT: https://opensource.org/licenses/MIT See the LICENSE file in the project's top-level directory for details. Authors: * Sebastian Werner (wpbasti) ************************************************************************ */ /** * Contains some common methods available to all log appenders. */ qx.Bootstrap.define("qx.log.appender.Util", { statics : { /** * Converts a single log entry to HTML * * @signature function(entry) * @param entry {Map} The entry to process */ toHtml : function(entry) { var output = []; var item, msg, sub, list; output.push("<span class='offset'>", this.formatOffset(entry.offset, 6), "</span> "); if (entry.object) { if (entry.clazz) { output.push("<span class='object' title='Object instance with hash code: " + entry.object + "'>", entry.clazz.classname, "[", entry.object, "]</span>: "); } else { var obj = entry.win.qx.core.ObjectRegistry.fromHashCode(entry.object, true); if (obj) { output.push("<span class='object' title='Object instance with hash code: " + obj.$$hash + "'>", obj.classname, "[", obj.$$hash, "]</span>: "); } } } else if (entry.clazz) { output.push("<span class='object'>" + entry.clazz.classname, "</span>: "); } var items = entry.items; for (var i=0, il=items.length; i<il; i++) { item = items[i]; msg = item.text; if (msg instanceof Array) { var list = []; for (var j=0, jl=msg.length; j<jl; j++) { sub = msg[j]; if (typeof sub === "string") { list.push("<span>" + this.escapeHTML(sub) + "</span>"); } else if (sub.key) { list.push("<span class='type-key'>" + sub.key + "</span>:<span class='type-" + sub.type + "'>" + this.escapeHTML(sub.text) + "</span>"); } else { list.push("<span class='type-" + sub.type + "'>" + this.escapeHTML(sub.text) + "</span>"); } } output.push("<span class='type-" + item.type + "'>"); if (item.type === "map") { output.push("{", list.join(", "), "}"); } else { output.push("[", list.join(", "), "]"); } output.push("</span>"); } else { output.push("<span class='type-" + item.type + "'>" + this.escapeHTML(msg) + "</span> "); } } var wrapper = document.createElement("DIV"); wrapper.innerHTML = output.join(""); wrapper.className = "level-" + entry.level; return wrapper; }, /** * Formats a numeric time offset to 6 characters. * * @param offset {Integer} Current offset value * @param length {Integer?6} Refine the length * @return {String} Padded string */ formatOffset : function(offset, length) { var str = offset.toString(); var diff = (length||6) - str.length; var pad = ""; for (var i=0; i<diff; i++) { pad += "0"; } return pad+str; }, /** * Escapes the HTML in the given value * * @param value {String} value to escape * @return {String} escaped value */ escapeHTML : function(value) { return String(value).replace(/[<>&"']/g, this.__escapeHTMLReplace); }, /** * Internal replacement helper for HTML escape. * * @param ch {String} Single item to replace. * @return {String} Replaced item */ __escapeHTMLReplace : function(ch) { var map = { "<" : "&lt;", ">" : "&gt;", "&" : "&amp;", "'" : "&#39;", '"' : "&quot;" }; return map[ch] || "?"; }, /** * Converts a single log entry to plain text * * @param entry {Map} The entry to process * @return {String} the formatted log entry */ toText : function(entry) { return this.toTextArray(entry).join(" "); }, /** * Converts a single log entry to an array of plain text * * @param entry {Map} The entry to process * @return {Array} Argument list ready message array. */ toTextArray : function(entry) { var output = []; output.push(this.formatOffset(entry.offset, 6)); if (entry.object) { if (entry.clazz) { output.push(entry.clazz.classname + "[" + entry.object + "]:"); } else { var obj = entry.win.qx.core.ObjectRegistry.fromHashCode(entry.object, true); if (obj) { output.push(obj.classname + "[" + obj.$$hash + "]:"); } } } else if (entry.clazz) { output.push(entry.clazz.classname + ":"); } var items = entry.items; var item, msg; for (var i=0, il=items.length; i<il; i++) { item = items[i]; msg = item.text; if (item.trace && item.trace.length > 0) { if (typeof(this.FORMAT_STACK) == "function") { qx.log.Logger.deprecatedConstantWarning(qx.log.appender.Util, "FORMAT_STACK", "Use qx.dev.StackTrace.FORMAT_STACKTRACE instead"); msg += "\n" + this.FORMAT_STACK(item.trace); } else { msg += "\n" + item.trace; } } if (msg instanceof Array) { var list = []; for (var j=0, jl=msg.length; j<jl; j++) { list.push(msg[j].text); } if (item.type === "map") { output.push("{", list.join(", "), "}"); } else { output.push("[", list.join(", "), "]"); } } else { output.push(msg); } } return output; } } });