OLD | NEW |
---|---|
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 library isolate_reconnect_element; | 5 library isolate_riconnect_element; |
6 | 6 |
7 import 'package:polymer/polymer.dart'; | 7 import 'dart:html'; |
8 import 'observatory_element.dart'; | 8 import 'dart:async'; |
9 import 'package:observatory/models.dart' as M; | |
10 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart'; | |
11 import 'package:observatory/src/elements/helpers/tag.dart'; | |
12 import 'package:observatory/src/elements/helpers/uris.dart'; | |
13 import 'package:observatory/src/elements/nav/bar.dart'; | |
14 import 'package:observatory/src/elements/nav/notify.dart'; | |
15 import 'package:observatory/src/elements/nav/top_menu.dart'; | |
16 import 'package:observatory/src/elements/view_footer.dart'; | |
9 | 17 |
10 @CustomTag('isolate-reconnect') | 18 class IsolateReconnectElement extends HtmlElement implements Renderable{ |
11 class IsolateReconnectElement extends ObservatoryElement { | 19 static const tag = const Tag<IsolateReconnectElement>('isolate-reconnect', |
20 dependencies: const [NavBarElement.tag, | |
21 NavTopMenuElement.tag, | |
22 NavNotifyElement.tag]); | |
23 | |
24 RenderingScheduler _r; | |
25 | |
26 Stream<RenderedEvent<IsolateReconnectElement>> get onRendered => | |
27 _r.onRendered; | |
28 | |
29 M.VM _vm; | |
30 String _missing; | |
31 Uri _uri; | |
32 Stream<M.VMUpdateEvent> _vmUpdates; | |
33 StreamSubscription _subscription; | |
34 | |
35 M.VM get vm => _vm; | |
36 String get missing => _missing; | |
37 Uri get uri => _uri; | |
38 | |
39 set missing(String value) => _missing = _r.checkAndReact(_missing, value); | |
40 set uri(Uri value) => _uri = _r.checkAndReact(_uri, value); | |
41 | |
42 M.NotificationRepository _notifications; | |
43 factory IsolateReconnectElement(M.VM vm, Stream<M.VMUpdateEvent> vmUpdates, | |
44 M.NotificationRepository notifications, {String missing: '', | |
45 Uri uri, RenderingQueue queue}) { | |
46 assert(vm != null); | |
47 assert(vmUpdates != null); | |
48 assert(missing != null); | |
49 assert(notifications != null); | |
50 IsolateReconnectElement e = document.createElement(tag.name); | |
51 e._r = new RenderingScheduler(e, queue: queue); | |
52 e._vm = vm; | |
53 e._vmUpdates = vmUpdates; | |
54 e._missing = missing; | |
55 e._uri = uri ?? new Uri(); | |
56 e._notifications = notifications; | |
57 return e; | |
58 } | |
59 | |
12 IsolateReconnectElement.created() : super.created(); | 60 IsolateReconnectElement.created() : super.created(); |
13 | 61 |
14 get missingIsolateId { | 62 @override |
63 void attached() { | |
64 super.attached(); | |
65 _r.enable(); | |
66 _subscription = _vmUpdates.listen((e) => _r.dirty()); | |
67 } | |
68 | |
69 @override | |
70 void detached() { | |
71 super.detached(); | |
72 children = []; | |
73 _r.disable(notify: true); | |
74 _subscription.cancel(); | |
75 } | |
76 | |
77 void render() { | |
78 children = [ | |
79 new NavBarElement(queue: _r.queue) | |
80 ..children = [ | |
81 new NavTopMenuElement(last: true, queue: _r.queue), | |
82 new NavNotifyElement(_notifications, queue: _r.queue) | |
83 ], | |
84 new DivElement() | |
85 ..classes = ['content-centered'] | |
86 ..children = [ | |
87 new HeadingElement.h1()..text = 'Isolate $_missing no longer exists', | |
88 new BRElement(), new HRElement(), | |
89 new DivElement()..classes = ['memberList'] | |
90 ..children = (_vm.isolates.map((isolate) { | |
91 final query = new Map.from(_uri.queryParameters); | |
92 query['isolateId'] = isolate.id; | |
93 final href = new Uri(path: _uri.path, queryParameters: query); | |
94 return new DivElement()..classes = ['memberItem', 'doubleSpaced'] | |
95 ..children = [ | |
96 new SpanElement()..text = 'Continue in ', | |
97 new AnchorElement(href: '#$href') | |
98 ..text = '${isolate.id} (${isolate.name})' | |
99 ]; | |
100 }).toList()..add( | |
101 new DivElement()..classes = ['memberItem', 'doubleSpaced'] | |
102 ..children = [ | |
103 new SpanElement()..text = 'Go to ', | |
104 new AnchorElement(href: Uris.vm()) | |
105 ..text = 'isolates summary', | |
106 ] | |
107 )) | |
108 ], | |
109 new ViewFooterElement(queue: _r.queue) | |
110 ]; | |
111 } | |
112 | |
113 /*get missingIsolateId { | |
Cutch
2016/08/02 13:51:11
delete commented out code
cbernaschina
2016/08/02 15:53:07
Done.
| |
15 return app.locationManager.uri.queryParameters['originalIsolateId']; | 114 return app.locationManager.uri.queryParameters['originalIsolateId']; |
16 } | 115 } |
17 | 116 |
18 linkToContinueIn(isolate) { | 117 linkToContinueIn(isolate) { |
19 var parameters = new Map.from(app.locationManager.uri.queryParameters); | 118 var parameters = new Map.from(app.locationManager.uri.queryParameters); |
20 parameters['isolateId'] = isolate.id; | 119 parameters['isolateId'] = isolate.id; |
21 parameters.remove('originalIsolateId'); | 120 parameters.remove('originalIsolateId'); |
22 var path = parameters.remove('originalPath'); | 121 var path = parameters.remove('originalPath'); |
23 path = "/$path"; | 122 path = "/$path"; |
24 var generatedUri = new Uri(path: path, queryParameters: parameters); | 123 var generatedUri = new Uri(path: path, queryParameters: parameters); |
25 return app.locationManager.makeLink(generatedUri.toString()); | 124 return app.locationManager.makeLink(generatedUri.toString()); |
26 } | 125 }*/ |
27 } | 126 } |
127 | |
128 /*<polymer-element name="isolate-reconnect"> | |
Cutch
2016/08/02 13:51:11
delete commented out code
cbernaschina
2016/08/02 15:53:07
Done.
| |
129 <template> | |
130 <link rel="stylesheet" href="css/shared.css"> | |
131 <style> | |
132 .doubleSpaced { | |
133 line-height: 2em; | |
134 } | |
135 </style> | |
136 | |
137 <nav-bar> | |
138 <top-nav-menu last="{{ true }}"></top-nav-menu> | |
139 <nav-notify notifications="{{ app.notifications }}"></nav-notify> | |
140 </nav-bar> | |
141 | |
142 <div class="content-centered"> | |
143 <h1 class="doubleSpaced">Isolate {{ missingIsolateId }} no longer exists</ h1> | |
144 <div class="memberList"> | |
145 <template repeat="{{ i in app.vm.isolates }}"> | |
146 <div class="memberItem doubleSpaced"> | |
147 Continue in <a _href="{{ linkToContinueIn(i) }}">{{ i.id }} ({{ i.n ame }})</a> | |
148 </div> | |
149 </template> | |
150 <div class="memberItem doubleSpaced"> | |
151 Go to <a _href="{{ gotoLink('/vm') }}">isolates summary</a> | |
152 </div> | |
153 </div> | |
154 </div> | |
155 </template> | |
156 </polymer-element>*/ | |
OLD | NEW |