diff options
author | dglazkov@google.com <dglazkov@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-10 19:11:09 +0000 |
---|---|---|
committer | dglazkov@google.com <dglazkov@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-10 19:11:09 +0000 |
commit | 15afbb51fd02caf9baebd5e406ec88bf59d8f835 (patch) | |
tree | b0e5ce4fb8c334e6e52e94f5d3afcabb45097b8f /webkit/inspector/DebuggerConsole.js | |
parent | 2a65160320c17d0c0f370d71fac51d6250b5b1fa (diff) | |
download | chromium_src-15afbb51fd02caf9baebd5e406ec88bf59d8f835.zip chromium_src-15afbb51fd02caf9baebd5e406ec88bf59d8f835.tar.gz chromium_src-15afbb51fd02caf9baebd5e406ec88bf59d8f835.tar.bz2 |
Move forked, DevTools-specific JS files out of third_party/WebKit
R=darin
BUG=3320
Review URL: http://codereview.chromium.org/44001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11358 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/inspector/DebuggerConsole.js')
-rw-r--r-- | webkit/inspector/DebuggerConsole.js | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/webkit/inspector/DebuggerConsole.js b/webkit/inspector/DebuggerConsole.js new file mode 100644 index 0000000..0ba3b28 --- /dev/null +++ b/webkit/inspector/DebuggerConsole.js @@ -0,0 +1,173 @@ +// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Helper functions and objects for the JS debugger UI. + * @see debugger.html + */ + +/** + * Document load listener. + */ +function onLoad() { + var debuggerConsole = new DebuggerConsole(); + DebuggerIPC.init(debuggerConsole); + DebugShell.initDebugShell(debuggerConsole); + debuggerConsole.focusOnCommandLine(); +} + +/** + * @constructor + */ +function DebuggerConsole() +{ + this._output = document.getElementById("output"); + + var input = document.getElementById("command-line-text"); + var self = this; + input.addEventListener( + 'keydown', + function(e) { + return self._onInputKeyDown(e); + }, + true); + input.addEventListener( + 'keypress', + function(e) { + return self._onInputKeyPress(e); + }, + true); + this._commandLineInput = input; + + // command object stores command-line history state. + this._command = { + history: [], + history_index: 0, + pending: null + }; +}; + +DebuggerConsole.prototype = { + /** + * Sets focus to command-line-text element. + */ + focusOnCommandLine: function() { + this._commandLineInput.focus(); + }, + + /** + * Called by chrome code when there's output to display. + * @param {string} txt + */ + appendText: function(txt) + { + this._output.appendChild(document.createTextNode(txt)); + this._output.appendChild(document.createElement('br')); + document.body.scrollTop = document.body.scrollHeight; + }, + + /** + * Called by chrome code to set the current state as to whether the debugger + * is stopped at a breakpoint or is running. + * @param {boolean} isBroken + */ + setDebuggerBreak: function(isBroken) + { + var out = this._output; + if (isBroken) { + out.style.color = "black"; + this.focusOnCommandLine(); + } else { + out.style.color = "gray"; + } + }, + + /** + * Execute a debugger command, add it to the command history and display it in + * the output window. + * @param {string} str + */ + executeCommand: function(str) { + this.appendText("$ " + str); + // Sends message to DebuggerContents.HandleCommand. + if (DebugShell.singleton) { + DebugShell.singleton.command(str); + } else { + this.appendText("FAILED to send the command as DebugShell is null"); + } + + this._command.history.push(str); + this._command.history_index = this._command.history.length; + this._command.pending = null; + }, + + + /** + * Display the previous history item in the given text field. + * @param {HTMLInputElement} field + */ + selectPreviousCommand_: function(field) { + var command = this._command; + if (command.history_index > 0) { + // Remember the current field value as a pending command if we're at the + // end (it's something the user typed in). + if (command.history_index == command.history.length) + command.pending = field.value; + command.history_index--; + field.value = command.history[command.history_index]; + field.select(); + } + }, + + /** + * Display the next history item in the given text field. + * @param {HTMLInputElement} field + */ + selectNextCommand_: function(field) { + var command = this._command; + if (command.history_index < command.history.length) { + command.history_index++; + if (command.history_index == command.history.length) { + field.value = command.pending || ""; + } else { + field.value = command.history[command.history_index]; + } + field.select(); + } + }, + + /** + * command-line-text's onkeydown handler. + * @param {KeyboardEvent} e + * @return {boolean} + */ + _onInputKeyDown: function (e) { + var field = e.target; + var key = e.keyCode; + if (key == 38) { // up arrow + this.selectPreviousCommand_(field); + return false; + } else if (key == 40) { // down arrow + this.selectNextCommand_(field); + return false; + } + return true; + }, + + /** + * command-line-text's onkeypress handler. + * @param {KeyboardEvent} e + * @return {boolean} + */ + _onInputKeyPress: function (e) { + var field = e.target; + var key = e.keyCode; + if (key == 13) { // enter + this.executeCommand(field.value); + field.value = ""; + return false; + } + return true; + } +}; |