| Index: runtime/bin/vmservice/client/lib/src/elements/script_inset.dart
|
| diff --git a/runtime/bin/vmservice/client/lib/src/elements/script_inset.dart b/runtime/bin/vmservice/client/lib/src/elements/script_inset.dart
|
| index d697983f1baae7f549f7bd113e46e142f4750edf..814c45f61988a8e9b18b84bb7c6f26fca738a71b 100644
|
| --- a/runtime/bin/vmservice/client/lib/src/elements/script_inset.dart
|
| +++ b/runtime/bin/vmservice/client/lib/src/elements/script_inset.dart
|
| @@ -25,6 +25,7 @@ class ScriptInsetElement extends ObservatoryElement {
|
| @observable int currentLine;
|
| @observable int startLine;
|
| @observable int endLine;
|
| + @observable bool linesReady = false;
|
|
|
| @observable List<ScriptLine> lines = toObservable([]);
|
|
|
| @@ -34,11 +35,15 @@ class ScriptInsetElement extends ObservatoryElement {
|
|
|
| MutationObserver _observer;
|
|
|
| - void _onMutation(mutations, observer) {
|
| + void _scrollToCurrentPos() {
|
| var line = shadowRoot.querySelector('#line-$currentLine');
|
| if (line != null) {
|
| line.scrollIntoView();
|
| }
|
| + }
|
| +
|
| + void _onMutation(mutations, observer) {
|
| + _scrollToCurrentPos();
|
| }
|
|
|
| void attached() {
|
| @@ -60,6 +65,7 @@ class ScriptInsetElement extends ObservatoryElement {
|
|
|
| void currentPosChanged(oldValue) {
|
| _updateLines();
|
| + _scrollToCurrentPos();
|
| }
|
|
|
| void startPosChanged(oldValue) {
|
| @@ -77,6 +83,7 @@ class ScriptInsetElement extends ObservatoryElement {
|
| var _updateFuture;
|
|
|
| void _updateLines() {
|
| + linesReady = false;
|
| if (_updateFuture != null) {
|
| // Already scheduled.
|
| return;
|
| @@ -103,11 +110,39 @@ class ScriptInsetElement extends ObservatoryElement {
|
| endLine = (endPos != null
|
| ? script.tokenToLine(endPos)
|
| : script.lines.length);
|
| +
|
| lines.clear();
|
| for (int i = (startLine - 1); i <= (endLine - 1); i++) {
|
| lines.add(script.lines[i]);
|
| }
|
| + linesReady = true;
|
| }
|
|
|
| ScriptInsetElement.created() : super.created();
|
| }
|
| +
|
| +@CustomTag('breakpoint-toggle')
|
| +class BreakpointToggleElement extends ObservatoryElement {
|
| + @published ScriptLine line;
|
| + @observable bool busy = false;
|
| +
|
| + void toggleBreakpoint(var a, var b, var c) {
|
| + if (busy) {
|
| + return;
|
| + }
|
| + busy = true;
|
| + if (line.bpt == null) {
|
| + // No breakpoint. Set it.
|
| + line.script.isolate.setBreakpoint(line.script, line.line).then((_) {
|
| + busy = false;
|
| + });
|
| + } else {
|
| + // Existing breakpoint. Remove it.
|
| + line.script.isolate.clearBreakpoint(line.bpt).then((_) {
|
| + busy = false;
|
| + });
|
| + }
|
| + }
|
| +
|
| + BreakpointToggleElement.created() : super.created();
|
| +}
|
|
|