| /* |
| * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. |
| * Copyright (C) 2006 David Smith (catfish.man@gmail.com) |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of |
| * its contributors may be used to endorse or promote products derived |
| * from this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY |
| * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY |
| * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
| * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| var inputElement = null; |
| var mainWindow = window.opener; |
| var history = [""]; |
| var historyIndex = 0; |
| |
| function loaded() |
| { |
| inputElement = document.getElementById("input"); |
| inputElement.addEventListener("keydown", inputKeyDown, false); |
| inputElement.addEventListener("keyup", inputKeyUp, false); |
| inputElement.focus(); |
| } |
| |
| function inputKeyDown(event) |
| { |
| if (event.keyCode == 13 && !event.altKey) { |
| if (mainWindow.isPaused && mainWindow.currentStack) { |
| history[history.length - 1] = inputElement.innerText; |
| sendScript(inputElement.innerText); |
| inputElement.innerText = ""; |
| history.push(""); |
| historyIndex = history.length - 1; |
| inputElement.focus(); |
| } else |
| alert("The debugger needs to be paused.\tIn order to evaluate your script input you need to pause the debugger in the context of another script."); |
| event.preventDefault(); |
| } else if (event.keyCode == 38 && !event.altKey && historyIndex > 0) { |
| historyIndex--; |
| inputElement.innerText = history[historyIndex]; |
| inputElement.focus() |
| event.preventDefault(); |
| } else if (event.keyCode == 40 && !event.altKey && historyIndex < (history.length - 1)) { |
| historyIndex++; |
| inputElement.innerText = history[historyIndex]; |
| inputElement.focus() |
| event.preventDefault(); |
| } |
| } |
| |
| function inputKeyUp(event) |
| { |
| if (event.keyCode != 38 && event.keyCode != 40 && event.keyCode != 13) { |
| history[historyIndex] = inputElement.innerText; |
| } |
| } |
| |
| function appendMessage(exp, msg) |
| { |
| var historyDisplay = document.getElementById("history"); |
| var row = document.createElement("div"); |
| row.className = "row"; |
| if (historyDisplay.childNodes.length % 2) |
| row.className += " alt"; |
| |
| if (exp.length > 0) { |
| var expression = document.createElement("div"); |
| expression.className = "expression"; |
| expression.innerText = exp; |
| row.appendChild(expression); |
| } |
| |
| var result = document.createElement("div"); |
| result.className = "result"; |
| result.innerText = msg; |
| |
| row.appendChild(result); |
| |
| historyDisplay.appendChild(row); |
| historyDisplay.scrollTop = historyDisplay.scrollHeight; |
| } |
| |
| function sendScript(script) |
| { |
| appendMessage(script, mainWindow.DebuggerDocument.evaluateScript(script, mainWindow.currentCallFrame.index)); |
| if (script.indexOf("=") >= 0) |
| mainWindow.currentCallFrame.loadVariables(); |
| } |
| |
| function unloading() |
| { |
| mainWindow.consoleWindow = null; |
| } |