Index: runtime/observatory/lib/src/elements/isolate_reconnect.dart |
diff --git a/runtime/observatory/lib/src/elements/isolate_reconnect.dart b/runtime/observatory/lib/src/elements/isolate_reconnect.dart |
index 01edf8f0d1827ff7c52b070d8ef906580453af41..72c534b93aade3f53804d0b324890220ff1fae71 100644 |
--- a/runtime/observatory/lib/src/elements/isolate_reconnect.dart |
+++ b/runtime/observatory/lib/src/elements/isolate_reconnect.dart |
@@ -2,16 +2,115 @@ |
// 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 isolate_reconnect_element; |
+library isolate_riconnect_element; |
-import 'package:polymer/polymer.dart'; |
-import 'observatory_element.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/helpers/uris.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'; |
+ |
+class IsolateReconnectElement extends HtmlElement implements Renderable{ |
+ static const tag = const Tag<IsolateReconnectElement>('isolate-reconnect', |
+ dependencies: const [NavBarElement.tag, |
+ NavTopMenuElement.tag, |
+ NavNotifyElement.tag]); |
+ |
+ RenderingScheduler _r; |
+ |
+ Stream<RenderedEvent<IsolateReconnectElement>> get onRendered => |
+ _r.onRendered; |
+ |
+ M.VM _vm; |
+ String _missing; |
+ Uri _uri; |
+ Stream<M.VMUpdateEvent> _vmUpdates; |
+ StreamSubscription _subscription; |
+ |
+ M.VM get vm => _vm; |
+ String get missing => _missing; |
+ Uri get uri => _uri; |
+ |
+ set missing(String value) => _missing = _r.checkAndReact(_missing, value); |
+ set uri(Uri value) => _uri = _r.checkAndReact(_uri, value); |
+ |
+ M.NotificationRepository _notifications; |
+ factory IsolateReconnectElement(M.VM vm, Stream<M.VMUpdateEvent> vmUpdates, |
+ M.NotificationRepository notifications, {String missing: '', |
+ Uri uri, RenderingQueue queue}) { |
+ assert(vm != null); |
+ assert(vmUpdates != null); |
+ assert(missing != null); |
+ assert(notifications != null); |
+ IsolateReconnectElement e = document.createElement(tag.name); |
+ e._r = new RenderingScheduler(e, queue: queue); |
+ e._vm = vm; |
+ e._vmUpdates = vmUpdates; |
+ e._missing = missing; |
+ e._uri = uri ?? new Uri(); |
+ e._notifications = notifications; |
+ return e; |
+ } |
-@CustomTag('isolate-reconnect') |
-class IsolateReconnectElement extends ObservatoryElement { |
IsolateReconnectElement.created() : super.created(); |
- get missingIsolateId { |
+ @override |
+ void attached() { |
+ super.attached(); |
+ _r.enable(); |
+ _subscription = _vmUpdates.listen((e) => _r.dirty()); |
+ } |
+ |
+ @override |
+ void detached() { |
+ super.detached(); |
+ children = []; |
+ _r.disable(notify: true); |
+ _subscription.cancel(); |
+ } |
+ |
+ 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 = 'Isolate $_missing no longer exists', |
+ new BRElement(), new HRElement(), |
+ new DivElement()..classes = ['memberList'] |
+ ..children = (_vm.isolates.map((isolate) { |
+ final query = new Map.from(_uri.queryParameters); |
+ query['isolateId'] = isolate.id; |
+ final href = new Uri(path: _uri.path, queryParameters: query); |
+ return new DivElement()..classes = ['memberItem', 'doubleSpaced'] |
+ ..children = [ |
+ new SpanElement()..text = 'Continue in ', |
+ new AnchorElement(href: '#$href') |
+ ..text = '${isolate.id} (${isolate.name})' |
+ ]; |
+ }).toList()..add( |
+ new DivElement()..classes = ['memberItem', 'doubleSpaced'] |
+ ..children = [ |
+ new SpanElement()..text = 'Go to ', |
+ new AnchorElement(href: Uris.vm()) |
+ ..text = 'isolates summary', |
+ ] |
+ )) |
+ ], |
+ new ViewFooterElement(queue: _r.queue) |
+ ]; |
+ } |
+ |
+ /*get missingIsolateId { |
Cutch
2016/08/02 13:51:11
delete commented out code
cbernaschina
2016/08/02 15:53:07
Done.
|
return app.locationManager.uri.queryParameters['originalIsolateId']; |
} |
@@ -23,5 +122,35 @@ class IsolateReconnectElement extends ObservatoryElement { |
path = "/$path"; |
var generatedUri = new Uri(path: path, queryParameters: parameters); |
return app.locationManager.makeLink(generatedUri.toString()); |
- } |
+ }*/ |
} |
+ |
+/*<polymer-element name="isolate-reconnect"> |
Cutch
2016/08/02 13:51:11
delete commented out code
cbernaschina
2016/08/02 15:53:07
Done.
|
+ <template> |
+ <link rel="stylesheet" href="css/shared.css"> |
+ <style> |
+ .doubleSpaced { |
+ line-height: 2em; |
+ } |
+ </style> |
+ |
+ <nav-bar> |
+ <top-nav-menu last="{{ true }}"></top-nav-menu> |
+ <nav-notify notifications="{{ app.notifications }}"></nav-notify> |
+ </nav-bar> |
+ |
+ <div class="content-centered"> |
+ <h1 class="doubleSpaced">Isolate {{ missingIsolateId }} no longer exists</h1> |
+ <div class="memberList"> |
+ <template repeat="{{ i in app.vm.isolates }}"> |
+ <div class="memberItem doubleSpaced"> |
+ Continue in <a _href="{{ linkToContinueIn(i) }}">{{ i.id }} ({{ i.name }})</a> |
+ </div> |
+ </template> |
+ <div class="memberItem doubleSpaced"> |
+ Go to <a _href="{{ gotoLink('/vm') }}">isolates summary</a> |
+ </div> |
+ </div> |
+ </div> |
+ </template> |
+</polymer-element>*/ |