| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 import 'dart:html'; | 5 import 'dart:html'; |
| 6 import 'dart:async'; | 6 import 'dart:async'; |
| 7 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart'; | 7 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart'; |
| 8 import 'package:observatory/src/elements/helpers/tag.dart'; | 8 import 'package:observatory/src/elements/helpers/tag.dart'; |
| 9 import 'package:observatory/src/elements/helpers/uris.dart'; | 9 import 'package:observatory/src/elements/helpers/uris.dart'; |
| 10 import 'package:observatory/models.dart' show ConnectionException; | 10 import 'package:observatory/models.dart' show ConnectionException; |
| 11 | 11 |
| 12 | 12 class ExceptionDeleteEvent { |
| 13 class ExceptionDeleteEvent{ | |
| 14 final Exception exception; | 13 final Exception exception; |
| 15 final StackTrace stacktrace; | 14 final StackTrace stacktrace; |
| 16 | 15 |
| 17 ExceptionDeleteEvent(this.exception, {this.stacktrace}); | 16 ExceptionDeleteEvent(this.exception, {this.stacktrace}); |
| 18 } | 17 } |
| 19 | 18 |
| 20 class NavNotifyExceptionElement extends HtmlElement implements Renderable { | 19 class NavNotifyExceptionElement extends HtmlElement implements Renderable { |
| 21 static const tag = const Tag<NavNotifyExceptionElement>('nav-exception'); | 20 static const tag = const Tag<NavNotifyExceptionElement>('nav-exception'); |
| 22 | 21 |
| 23 RenderingScheduler _r; | 22 RenderingScheduler _r; |
| 24 | 23 |
| 25 Stream<RenderedEvent<NavNotifyExceptionElement>> get onRendered => | 24 Stream<RenderedEvent<NavNotifyExceptionElement>> get onRendered => |
| 26 _r.onRendered; | 25 _r.onRendered; |
| 27 | 26 |
| 28 final StreamController<ExceptionDeleteEvent> _onDelete = | 27 final StreamController<ExceptionDeleteEvent> _onDelete = |
| 29 new StreamController<ExceptionDeleteEvent>.broadcast(); | 28 new StreamController<ExceptionDeleteEvent>.broadcast(); |
| 30 Stream<ExceptionDeleteEvent> get onDelete => _onDelete.stream; | 29 Stream<ExceptionDeleteEvent> get onDelete => _onDelete.stream; |
| 31 | 30 |
| 32 Exception _exception; | 31 Exception _exception; |
| 33 StackTrace _stacktrace; | 32 StackTrace _stacktrace; |
| 34 | 33 |
| 35 Exception get exception => _exception; | 34 Exception get exception => _exception; |
| 36 StackTrace get stacktrace => _stacktrace; | 35 StackTrace get stacktrace => _stacktrace; |
| 37 | 36 |
| 38 factory NavNotifyExceptionElement(Exception exception, | 37 factory NavNotifyExceptionElement(Exception exception, |
| 39 {StackTrace stacktrace: null, RenderingQueue queue}) { | 38 {StackTrace stacktrace: null, RenderingQueue queue}) { |
| 40 assert(exception != null); | 39 assert(exception != null); |
| 41 NavNotifyExceptionElement e = document.createElement(tag.name); | 40 NavNotifyExceptionElement e = document.createElement(tag.name); |
| 42 e._r = new RenderingScheduler(e, queue: queue); | 41 e._r = new RenderingScheduler(e, queue: queue); |
| 43 e._exception = exception; | 42 e._exception = exception; |
| 44 e._stacktrace = stacktrace; | 43 e._stacktrace = stacktrace; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 65 renderConnectionException(); | 64 renderConnectionException(); |
| 66 } else { | 65 } else { |
| 67 renderGenericException(); | 66 renderGenericException(); |
| 68 } | 67 } |
| 69 } | 68 } |
| 70 | 69 |
| 71 void renderConnectionException() { | 70 void renderConnectionException() { |
| 72 children = [ | 71 children = [ |
| 73 new DivElement() | 72 new DivElement() |
| 74 ..children = [ | 73 ..children = [ |
| 75 new SpanElement()..text = 'The request cannot be completed because the ' | 74 new SpanElement() |
| 76 'VM is currently disconnected', | 75 ..text = 'The request cannot be completed because the ' |
| 77 new BRElement(), new BRElement(), | 76 'VM is currently disconnected', |
| 78 new SpanElement()..text = '[', | 77 new BRElement(), |
| 79 new AnchorElement(href: Uris.vmConnect()) | 78 new BRElement(), |
| 80 ..text = 'Connect to a different VM', | 79 new SpanElement()..text = '[', |
| 81 new SpanElement()..text = ']', | 80 new AnchorElement(href: Uris.vmConnect()) |
| 82 new ButtonElement()..innerHtml = '×' | 81 ..text = 'Connect to a different VM', |
| 83 ..onClick.map(_toEvent).listen(_delete) | 82 new SpanElement()..text = ']', |
| 84 ] | 83 new ButtonElement() |
| 84 ..innerHtml = '×' |
| 85 ..onClick.map(_toEvent).listen(_delete) |
| 86 ] |
| 85 ]; | 87 ]; |
| 86 } | 88 } |
| 87 | 89 |
| 88 void renderGenericException() { | 90 void renderGenericException() { |
| 89 List<Node> content; | 91 List<Node> content; |
| 90 content = [ | 92 content = [ |
| 91 new SpanElement()..text = 'Unexpected exception:', | 93 new SpanElement()..text = 'Unexpected exception:', |
| 92 new BRElement(), new BRElement(), | 94 new BRElement(), |
| 95 new BRElement(), |
| 93 new DivElement()..text = exception.toString(), | 96 new DivElement()..text = exception.toString(), |
| 94 new BRElement() | 97 new BRElement() |
| 95 ]; | 98 ]; |
| 96 if (stacktrace != null) { | 99 if (stacktrace != null) { |
| 97 content.addAll([ | 100 content.addAll([ |
| 98 new SpanElement()..text = 'Stacktrace:', | 101 new SpanElement()..text = 'Stacktrace:', |
| 99 new BRElement(), new BRElement(), | 102 new BRElement(), |
| 103 new BRElement(), |
| 100 new DivElement()..text = stacktrace.toString(), | 104 new DivElement()..text = stacktrace.toString(), |
| 101 new BRElement() | 105 new BRElement() |
| 102 ]); | 106 ]); |
| 103 } | 107 } |
| 104 content.addAll([ | 108 content.addAll([ |
| 105 new SpanElement()..text = '[', | 109 new SpanElement()..text = '[', |
| 106 new AnchorElement(href: Uris.vmConnect()) | 110 new AnchorElement(href: Uris.vmConnect()) |
| 107 ..text = 'Connect to a different VM', | 111 ..text = 'Connect to a different VM', |
| 108 new SpanElement()..text = ']', | 112 new SpanElement()..text = ']', |
| 109 new ButtonElement()..innerHtml = '×' | 113 new ButtonElement() |
| 114 ..innerHtml = '×' |
| 110 ..onClick.map(_toEvent).listen(_delete) | 115 ..onClick.map(_toEvent).listen(_delete) |
| 111 ]); | 116 ]); |
| 112 children = [ | 117 children = [new DivElement()..children = content]; |
| 113 new DivElement() | |
| 114 ..children = content | |
| 115 ]; | |
| 116 } | 118 } |
| 117 | 119 |
| 118 ExceptionDeleteEvent _toEvent(_) { | 120 ExceptionDeleteEvent _toEvent(_) { |
| 119 return new ExceptionDeleteEvent(exception, stacktrace: stacktrace); | 121 return new ExceptionDeleteEvent(exception, stacktrace: stacktrace); |
| 120 } | 122 } |
| 121 | 123 |
| 122 void _delete(ExceptionDeleteEvent e) { | 124 void _delete(ExceptionDeleteEvent e) { |
| 123 _onDelete.add(e); | 125 _onDelete.add(e); |
| 124 } | 126 } |
| 125 | 127 |
| 126 void delete() { | 128 void delete() { |
| 127 _onDelete.add(new ExceptionDeleteEvent(exception, stacktrace: stacktrace)); | 129 _onDelete.add(new ExceptionDeleteEvent(exception, stacktrace: stacktrace)); |
| 128 } | 130 } |
| 129 } | 131 } |
| OLD | NEW |