2
//if (!("console" in window) || !("firebug" in console)) {
5
var consoleFrame = null;
6
var consoleBody = null;
7
var commandLine = null;
9
var commandHistory = [""];
10
var commandPointer = 0;
11
var commandInsertPointer = -1;
12
var commandHistoryMax = 1000;
14
var frameVisible = false;
15
var messageQueue = [];
19
var clPrefix = ">>> ";
21
var isFirefox = navigator.userAgent.indexOf("Firefox") != -1;
22
var isIE = navigator.userAgent.indexOf("MSIE") != -1;
23
var isOpera = navigator.userAgent.indexOf("Opera") != -1;
24
var isSafari = navigator.userAgent.indexOf("AppleWebKit") != -1;
26
// ********************************************************************************************
30
consoleFrame = document.getElementById("inner");
31
consoleBody = document.getElementById("log");
33
commandLine = document.getElementById("commandLine");
34
addEvent(commandLine, "keydown", onCommandLineKeyDown);
41
window.onload = function init()
43
var iframe = document.createElement("iframe");
44
document.body.appendChild(iframe);
45
iframe.style.display = "none";
46
iframe.src = "/browser";
50
function focusCommandLine()
57
function evalCommandLine()
59
var text = commandLine.value;
60
commandLine.value = "";
62
appendToHistory(text);
63
logRow([clPrefix, text], "command");
68
function sendCommand(text)
70
var message = escape(text).replace("+", "%2B")
71
var request = new XMLHttpRequest();
72
request.open("GET", "command?message=" + message, true);
76
function appendToHistory(command, unique)
78
if (unique && commandHistory[commandInsertPointer] == command)
81
++commandInsertPointer;
82
if (commandInsertPointer >= commandHistoryMax)
83
commandInsertPointer = 0;
85
commandPointer = commandInsertPointer+1;
86
commandHistory[commandInsertPointer] = command;
89
function cycleCommandHistory(dir)
91
commandHistory[commandPointer] = commandLine.value;
96
if (commandPointer < 0)
102
if (commandPointer > commandInsertPointer+1)
103
commandPointer = commandInsertPointer+1;
106
var command = commandHistory[commandPointer];
108
commandLine.value = command;
109
commandLine.setSelectionRange(command.length, command.length);
114
var toolbar = consoleBody.ownerDocument.getElementById("toolbar");
115
var height = consoleFrame.offsetHeight - (toolbar.offsetHeight + commandLine.offsetHeight);
116
consoleBody.style.top = toolbar.offsetHeight + "px";
117
consoleBody.style.height = height + "px";
119
var commandLineBox = consoleBody.ownerDocument.getElementById("commandLineBox");
120
commandLineBox.style.top = (consoleFrame.offsetHeight - commandLine.offsetHeight) + "px";
123
// ********************************************************************************************
125
function logRow(message, className, handler)
127
var isScrolledToBottom =
128
consoleBody.scrollTop + consoleBody.offsetHeight >= consoleBody.scrollHeight;
133
handler(message, className);
135
if (isScrolledToBottom)
136
consoleBody.scrollTop = consoleBody.scrollHeight - consoleBody.offsetHeight;
139
function logFormatted(objects, className)
143
var format = objects[0];
146
if (typeof(format) != "string")
152
var parts = parseFormat(format);
153
for (var i = 0; i < parts.length; ++i)
156
if (part && typeof(part) == "object")
158
var object = objects[++objIndex];
159
part.appender(object, html);
162
appendText(part, html);
165
for (var i = objIndex+1; i < objects.length; ++i)
167
appendText(" ", html);
169
var object = objects[i];
170
if (typeof(object) == "string")
171
appendText(object, html);
173
appendObject(object, html);
176
logRow(html, className);
179
function writeRow(message, className)
181
var row = consoleBody.ownerDocument.createElement("div");
182
row.className = "logRow" + (className ? " logRow-"+className : "");
183
row.innerHTML = message.join("");
187
function appendRow(row)
189
var container = groupStack.length ? groupStack[groupStack.length-1] : consoleBody;
190
container.appendChild(row);
193
function parseFormat(format)
197
var reg = /((^%|[^\\]%)(\d+)?(\.)([a-zA-Z]))|((^%|[^\\]%)([a-zA-Z]))/;
198
var appenderMap = {s: appendText, d: appendInteger, i: appendInteger, f: appendFloat};
200
for (var m = reg.exec(format); m; m = reg.exec(format))
202
var type = m[8] ? m[8] : m[5];
203
var appender = type in appenderMap ? appenderMap[type] : appendObject;
204
var precision = m[3] ? parseInt(m[3]) : (m[4] == "." ? -1 : 0);
206
parts.push(format.substr(0, m[0][0] == "%" ? m.index : m.index+1));
207
parts.push({appender: appender, precision: precision});
209
format = format.substr(m.index+m[0].length);
217
// ********************************************************************************************
219
function addEvent(object, name, handler)
222
object.attachEvent("on"+name, handler);
224
object.addEventListener(name, handler, false);
227
function removeEvent(object, name, handler)
230
object.detachEvent("on"+name, handler);
232
object.removeEventListener(name, handler, false);
235
function cancelEvent(event)
238
event.cancelBubble = true;
240
event.stopPropagation();
243
function onCommandLineKeyDown(event)
245
if (event.keyCode == 13)
246
evalCommandLine();//evalCommandLine();
247
else if (event.keyCode == 27)
248
commandLine.value = "";
249
else if (event.keyCode == 38)
250
cycleCommandHistory(-1);
251
else if (event.keyCode == 40)
252
cycleCommandHistory(1);
255
window.command = function(text)
257
var lines = text.split("\0");
258
var className = lines[0];
260
logRow([html], className);