summaryrefslogtreecommitdiffstats
path: root/chrome/browser/debugger/resources/debugger.js
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/debugger/resources/debugger.js')
-rw-r--r--chrome/browser/debugger/resources/debugger.js124
1 files changed, 124 insertions, 0 deletions
diff --git a/chrome/browser/debugger/resources/debugger.js b/chrome/browser/debugger/resources/debugger.js
new file mode 100644
index 0000000..a52a5c0
--- /dev/null
+++ b/chrome/browser/debugger/resources/debugger.js
@@ -0,0 +1,124 @@
+/**
+ * @fileoverview Helper functions and objects for the JS debugger UI.
+ * @see debugger.html
+ */
+
+/**
+ * Called at the end of <body>.
+ */
+function loaded() {
+ focusOnCommandLine();
+};
+
+/**
+ * Sets focus to command-line-text element.
+ */
+function focusOnCommandLine() {
+ var input = document.getElementById('command-line-text');
+ input.focus();
+};
+
+/**
+ * Called by chrome code when there's output to display.
+ */
+function appendText(txt) {
+ var output = document.getElementById('output');
+ output.appendChild(document.createTextNode(txt));
+ output.appendChild(document.createElement('br'));
+ document.body.scrollTop = document.body.scrollHeight;
+};
+
+// command object stores command-line history state.
+var command = {
+ history: [],
+ history_index: 0,
+ pending: null
+};
+
+/**
+ * Execute a debugger command, add it to the command history and display it in
+ * the output window.
+ */
+function executeCommand(str) {
+ appendText("$ " + str);
+ // Sends field.value to DebuggerContents.HandleCommand.
+ chrome.send("command", [str]);
+ command.history.push(str);
+ command.history_index = command.history.length;
+ command.pending = null;
+};
+
+/**
+ * Display the previous history item in the given text field.
+ */
+function selectPreviousCommand(field) {
+ 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.
+ */
+function selectNextCommand(field) {
+ 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 onkeypress handler
+ */
+function keypress(e) {
+ var field = e.target;
+ var key = e.keyCode;
+ if (key == 13) { // enter
+ executeCommand(field.value);
+ field.value = "";
+ return false;
+ }
+ return true;
+};
+
+/**
+ * command-line-text's onkeydown handler
+ */
+function keydown(e) {
+ var field = e.target;
+ var key = e.keyCode;
+ if (key == 38) { // up arrow
+ selectPreviousCommand(field);
+ return false;
+ } else if (key == 40) { // down arrow
+ selectNextCommand(field);
+ return false;
+ }
+ return true;
+};
+
+/**
+ * Called by chrome code to set the current state as to whether the debugger
+ * is stopped at a breakpoint or is running.
+ */
+function setDebuggerBreak(is_broken) {
+ var out = document.getElementById('output');
+ if (is_broken) {
+ out.style.color = "black";
+ focusOnCommandLine();
+ } else {
+ out.style.color = "gray";
+ }
+};