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
|
+ } |
+} |