1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
\r
2 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
\r
4 <title>log4javascript</title>
\r
5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
\r
6 <!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->
\r
7 <meta http-equiv="X-UA-Compatible" content="IE=7" />
\r
8 <script type="text/javascript">
\r
10 var loggingEnabled = true;
\r
11 var messagesBeforeDocLoaded = [];
\r
13 function toggleLoggingEnabled() {
\r
14 setLoggingEnabled($("enableLogging").checked);
\r
17 function setLoggingEnabled(enable) {
\r
18 loggingEnabled = enable;
\r
21 function scrollToLatestEntry() {
\r
22 var l = getLogContainer();
\r
23 if (typeof l.scrollTop != "undefined") {
\r
24 var latestLogEntry = l.lastChild;
\r
25 if (latestLogEntry) {
\r
26 l.scrollTop = l.scrollHeight;
\r
31 function log(logLevel, formattedMessage) {
\r
32 if (loggingEnabled) {
\r
34 doLog(logLevel, formattedMessage);
\r
36 messagesBeforeDocLoaded.push([logLevel, formattedMessage]);
\r
41 function doLog(logLevel, formattedMessage) {
\r
42 var logEntry = document.createElement("div");
\r
43 logEntry.appendChild(document.createTextNode(formattedMessage));
\r
44 logEntry.className = "logentry " + logLevel.name;
\r
45 getLogContainer().appendChild(logEntry);
\r
46 scrollToLatestEntry();
\r
49 function mainPageReloaded() {
\r
50 var separator = document.createElement("div");
\r
51 separator.className = "separator";
\r
52 separator.innerHTML = " ";
\r
53 getLogContainer().appendChild(separator);
\r
57 var logLevels = ["DEBUG", "INFO", "WARN", "ERROR", "FATAL"];
\r
59 window.onload = function() {
\r
60 setLogContainerHeight();
\r
61 toggleLoggingEnabled();
\r
62 for (var i = 0; i < messagesBeforeDocLoaded.length; i++) {
\r
63 doLog(messagesBeforeDocLoaded[i][0], messagesBeforeDocLoaded[i][1]);
\r
65 messagesBeforeDocLoaded = [];
\r
68 // Workaround to make sure log div starts at the correct size
\r
69 setTimeout(setLogContainerHeight, 20);
\r
72 function getLogContainer() {
\r
76 function clearLog() {
\r
77 getLogContainer().innerHTML = "";
\r
80 /* ------------------------------------------------------------------------- */
\r
82 // Other utility functions
\r
84 // Syntax borrowed from Prototype library
\r
86 return document.getElementById(id);
\r
89 function getWindowHeight() {
\r
90 if (window.innerHeight) {
\r
91 return window.innerHeight;
\r
92 } else if (document.documentElement && document.documentElement.clientHeight) {
\r
93 return document.documentElement.clientHeight;
\r
94 } else if (document.body) {
\r
95 return document.body.clientHeight;
\r
100 function getChromeHeight() {
\r
101 return $("toolbar").offsetHeight;
\r
104 function setLogContainerHeight() {
\r
105 var windowHeight = getWindowHeight();
\r
106 $("body").style.height = getWindowHeight() + "px";
\r
107 getLogContainer().style.height = "" +
\r
108 Math.max(0, windowHeight - getChromeHeight()) + "px";
\r
111 window.onresize = function() {
\r
112 setLogContainerHeight();
\r
117 <style type="text/css">
\r
119 background-color: white;
\r
123 font-family: tahoma, verdana, arial, helvetica, sans-serif;
\r
128 border-top: solid #ffffff 1px;
\r
129 border-bottom: solid #aca899 1px;
\r
130 background-color: #f1efe7;
\r
135 div#toolbar input.button {
\r
141 font-family: Courier New, Courier;
\r
177 div#log div.separator {
\r
178 background-color: #cccccc;
\r
188 <input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" class="stateful" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Enable logging</label>
\r
189 <input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="stateful button" title="Clear all log messages" />
\r
190 <input type="button" id="closeButton" value="Close" onclick="window.close()" class="stateful button" title="Close the window" />
\r
192 <div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>
\r