| Index: runtime/bin/vmservice/observatory/lib/src/elements/debugger.dart
|
| diff --git a/runtime/bin/vmservice/observatory/lib/src/elements/debugger.dart b/runtime/bin/vmservice/observatory/lib/src/elements/debugger.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1515bffd31838c3f85543c1dce8e6ff5c69edb6c
|
| --- /dev/null
|
| +++ b/runtime/bin/vmservice/observatory/lib/src/elements/debugger.dart
|
| @@ -0,0 +1,135 @@
|
| +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +library debugger_page_element;
|
| +
|
| +import 'dart:html';
|
| +import 'observatory_element.dart';
|
| +import 'package:observatory/service.dart';
|
| +import 'package:polymer/polymer.dart';
|
| +
|
| +@CustomTag('debugger-page')
|
| +class DebuggerPageElement extends ObservatoryElement {
|
| + @published Isolate isolate;
|
| + @published bool showConsole = false;
|
| +
|
| + DebuggerPageElement.created() : super.created();
|
| +
|
| + @override
|
| + void attached() {
|
| + super.attached();
|
| +
|
| + // TODO(turnidge): Get these values from the DOM.
|
| + // TODO(turnidge): splitterHeight is 0 until I implement it.
|
| + const int navbarHeight = 56;
|
| + const int splitterHeight = 0;
|
| + const int cmdHeight = 22;
|
| +
|
| + var stack = $['stack'];
|
| + int windowHeight = window.innerHeight;
|
| + int available = windowHeight - (navbarHeight + splitterHeight);
|
| + int stackHeight = available ~/ 1.3;
|
| + if (showConsole) {
|
| + stack.style.setProperty('height', '${stackHeight}px');
|
| + } else {
|
| + stack.style.setProperty('height', '${available}px');
|
| + }
|
| + }
|
| +}
|
| +
|
| +@CustomTag('debugger-stack')
|
| +class DebuggerStackElement extends ObservatoryElement {
|
| + @published Isolate isolate;
|
| + @published ServiceMap stack;
|
| + @published int activeFrame = 0;
|
| +
|
| + isolateChanged(oldValue) {
|
| + isolate.get('stacktrace').then((result) {
|
| + stack = result;
|
| + });
|
| + }
|
| +
|
| + DebuggerStackElement.created() : super.created();
|
| +}
|
| +
|
| +@CustomTag('debugger-frame')
|
| +class DebuggerFrameElement extends ObservatoryElement {
|
| + @published ObservableMap frame;
|
| +
|
| + // When true, the frame will start out expanded.
|
| + @published bool expand = false;
|
| +
|
| + @observable String scriptHeight;
|
| + @observable bool expanded = false;
|
| + @observable bool busy = false;
|
| +
|
| + DebuggerFrameElement.created() : super.created();
|
| +
|
| + @override
|
| + void attached() {
|
| + super.attached();
|
| + int windowHeight = window.innerHeight;
|
| + scriptHeight = '${windowHeight ~/ 1.6}px';
|
| + }
|
| +
|
| + void expandChanged(oldValue) {
|
| + if (expand != expanded) {
|
| + toggleExpand(null, null, null);
|
| + }
|
| + }
|
| +
|
| + void toggleExpand(var a, var b, var c) {
|
| + if (busy) {
|
| + return;
|
| + }
|
| + busy = true;
|
| + frame['function'].load().then((func) {
|
| + expanded = !expanded;
|
| + var frameOuter = $['frameOuter'];
|
| + if (expanded) {
|
| + frameOuter.classes.add('shadow');
|
| + } else {
|
| + frameOuter.classes.remove('shadow');
|
| + }
|
| + busy = false;
|
| + });
|
| + }
|
| +}
|
| +
|
| +@CustomTag('debugger-console')
|
| +class DebuggerConsoleElement extends ObservatoryElement {
|
| + @published Isolate isolate;
|
| +
|
| + DebuggerConsoleElement.created() : super.created();
|
| +}
|
| +
|
| +@CustomTag('debugger-input')
|
| +class DebuggerInputElement extends ObservatoryElement {
|
| + @published Isolate isolate;
|
| + @published String text = '';
|
| +
|
| + @override
|
| + void ready() {
|
| + super.ready();
|
| + var textBox = $['textBox'];
|
| + textBox.select();
|
| + textBox.onKeyDown.listen((KeyboardEvent e) {
|
| + switch (e.keyCode) {
|
| + case KeyCode.TAB:
|
| + e.preventDefault();
|
| + textBox.setRangeText('TAB');
|
| + textBox.setSelectionRange(textBox.selectionStart + 3,
|
| + textBox.selectionStart + 3);
|
| + break;
|
| + case KeyCode.ENTER:
|
| + print('Debugger command (not implemented): $text');
|
| + text = '';
|
| + break;
|
| + }
|
| + });
|
| + }
|
| +
|
| + DebuggerInputElement.created() : super.created();
|
| +}
|
| +
|
|
|