Chromium Code Reviews| Index: runtime/observatory/lib/src/elements/error_view.dart |
| diff --git a/runtime/observatory/lib/src/elements/error_view.dart b/runtime/observatory/lib/src/elements/error_view.dart |
| index 53582cc84ba0388534a9d7420288b42e54be665d..aeb3aa848038081b50b206770a5eb7d138d0f03b 100644 |
| --- a/runtime/observatory/lib/src/elements/error_view.dart |
| +++ b/runtime/observatory/lib/src/elements/error_view.dart |
| @@ -4,14 +4,93 @@ |
| library error_view_element; |
| -import 'observatory_element.dart'; |
| -import 'package:polymer/polymer.dart'; |
| -import 'package:observatory/service.dart'; |
| +import 'dart:html'; |
| +import 'dart:async'; |
| +import 'package:observatory/models.dart' as M; |
| +import 'package:observatory/src/elements/helpers/rendering_scheduler.dart'; |
| +import 'package:observatory/src/elements/helpers/tag.dart'; |
| +import 'package:observatory/src/elements/nav/bar.dart'; |
| +import 'package:observatory/src/elements/nav/notify.dart'; |
| +import 'package:observatory/src/elements/nav/top_menu.dart'; |
| +import 'package:observatory/src/elements/view_footer.dart'; |
| -/// Displays an Error ServiceObject. |
| -@CustomTag('error-view') |
| -class ErrorViewElement extends ObservatoryElement { |
| - @published DartError error; |
| +class ErrorViewElement extends HtmlElement implements Renderable{ |
| + static const tag = const Tag<ErrorViewElement>('error-view', |
| + dependencies: const [NavBarElement.tag, |
| + NavTopMenuElement.tag, |
| + NavNotifyElement.tag, |
| + ViewFooterElement.tag]); |
| + |
| + RenderingScheduler _r; |
| + |
| + Stream<RenderedEvent<ErrorViewElement>> get onRendered => |
| + _r.onRendered; |
| + |
| + M.Error _error; |
| + M.NotificationRepository _notifications; |
| + |
| + M.Error get error => _error; |
| + |
| + factory ErrorViewElement(M.NotificationRepository notifications, |
| + M.Error error, |
| + {RenderingQueue queue}) { |
| + assert(error != null); |
| + assert(notifications != null); |
| + ErrorViewElement e = document.createElement(tag.name); |
| + e._r = new RenderingScheduler(e, queue: queue); |
| + e._error = error; |
| + e._notifications = notifications; |
| + return e; |
| + } |
| ErrorViewElement.created() : super.created(); |
| -} |
| + |
| + @override |
| + void attached() { |
| + super.attached(); |
| + _r.enable(); |
| + } |
| + |
| + @override |
| + void detached() { |
| + super.detached(); |
| + children = []; |
| + _r.disable(notify: true); |
| + } |
| + |
| + void render() { |
| + children = [ |
| + new NavBarElement(queue: _r.queue) |
| + ..children = [ |
| + new NavTopMenuElement(last: true, queue: _r.queue), |
| + new NavNotifyElement(_notifications, queue: _r.queue) |
| + ], |
| + new DivElement() |
| + ..classes = ['content-centered'] |
| + ..children = [ |
| + new HeadingElement.h1() |
| + ..text = 'Error: ${_kindToString(_error.kind)}', |
| + new BRElement(), |
| + new DivElement()..classes = ['well'] |
| + ..children = [ |
| + new PreElement()..text = error.message |
| + ] |
| + ], |
| + new ViewFooterElement(queue: _r.queue) |
| + ]; |
| + } |
| + |
| + static String _kindToString(M.ErrorKind kind) { |
| + switch(kind) { |
| + case M.ErrorKind.unhandledException: |
| + return 'Unhandled Exception'; |
| + case M.ErrorKind.languageError: |
| + return 'Language Error'; |
| + case M.ErrorKind.internalError: |
| + return 'Internal Error'; |
| + case M.ErrorKind.terminationError: |
| + return 'Termination Error'; |
| + } |
| + throw new Exception('Unkown M.ErrorKind ($kind)'); |
|
rmacnak
2016/08/26 17:05:26
unknown
|
| + } |
| +} |