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/models.dart' as M; | 7 import 'package:observatory/models.dart' as M; |
8 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart'; | 8 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart'; |
9 import 'package:observatory/src/elements/helpers/tag.dart'; | 9 import 'package:observatory/src/elements/helpers/tag.dart'; |
10 import 'package:observatory/src/elements/helpers/uris.dart'; | 10 import 'package:observatory/src/elements/helpers/uris.dart'; |
11 | 11 |
12 class EventDeleteEvent{ | 12 class EventDeleteEvent { |
13 final M.Event event; | 13 final M.Event event; |
14 EventDeleteEvent(this.event); | 14 EventDeleteEvent(this.event); |
15 } | 15 } |
16 | 16 |
17 class NavNotifyEventElement extends HtmlElement implements Renderable { | 17 class NavNotifyEventElement extends HtmlElement implements Renderable { |
18 static const tag = const Tag<NavNotifyEventElement>('nav-event'); | 18 static const tag = const Tag<NavNotifyEventElement>('nav-event'); |
19 | 19 |
20 RenderingScheduler _r; | 20 RenderingScheduler _r; |
21 | 21 |
22 Stream<RenderedEvent<NavNotifyEventElement>> get onRendered => _r.onRendered; | 22 Stream<RenderedEvent<NavNotifyEventElement>> get onRendered => _r.onRendered; |
23 | 23 |
24 final StreamController<EventDeleteEvent> _onDelete = | 24 final StreamController<EventDeleteEvent> _onDelete = |
25 new StreamController<EventDeleteEvent>.broadcast(); | 25 new StreamController<EventDeleteEvent>.broadcast(); |
26 Stream<EventDeleteEvent> get onDelete => _onDelete.stream; | 26 Stream<EventDeleteEvent> get onDelete => _onDelete.stream; |
27 | 27 |
28 M.Event _event; | 28 M.Event _event; |
29 | 29 |
30 M.Event get event => _event; | 30 M.Event get event => _event; |
31 | 31 |
32 factory NavNotifyEventElement(M.Event event, {RenderingQueue queue}) { | 32 factory NavNotifyEventElement(M.Event event, {RenderingQueue queue}) { |
33 assert(event != null); | 33 assert(event != null); |
34 NavNotifyEventElement e = document.createElement(tag.name); | 34 NavNotifyEventElement e = document.createElement(tag.name); |
35 e._r = new RenderingScheduler(e, queue: queue); | 35 e._r = new RenderingScheduler(e, queue: queue); |
36 e._event = event; | 36 e._event = event; |
37 return e; | 37 return e; |
38 } | 38 } |
39 | 39 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 content = _manageInspectEvent(event as M.InspectEvent); | 73 content = _manageInspectEvent(event as M.InspectEvent); |
74 } else if (event is M.IsolateReloadEvent) { | 74 } else if (event is M.IsolateReloadEvent) { |
75 content = _manageIsolateReloadEvent(event as M.IsolateReloadEvent); | 75 content = _manageIsolateReloadEvent(event as M.IsolateReloadEvent); |
76 } else { | 76 } else { |
77 return; | 77 return; |
78 } | 78 } |
79 children = [ | 79 children = [ |
80 new DivElement() | 80 new DivElement() |
81 ..children = [] | 81 ..children = [] |
82 ..children.addAll(content) | 82 ..children.addAll(content) |
83 ..children.add(new ButtonElement()..innerHtml = '×' | 83 ..children.add(new ButtonElement() |
84 ..onClick.map(_toEvent).listen(_delete)) | 84 ..innerHtml = '×' |
| 85 ..onClick.map(_toEvent).listen(_delete)) |
85 ]; | 86 ]; |
86 } | 87 } |
87 | 88 |
88 static List<Element> _managePauseStartEvent(M.PauseStartEvent event) { | 89 static List<Element> _managePauseStartEvent(M.PauseStartEvent event) { |
89 return [ | 90 return [ |
90 new SpanElement()..text = 'Isolate ', | 91 new SpanElement()..text = 'Isolate ', |
91 new AnchorElement( | 92 new AnchorElement(href: Uris.inspect(event.isolate)) |
92 href: Uris.inspect(event.isolate)) | |
93 ..text = event.isolate.name, | 93 ..text = event.isolate.name, |
94 new SpanElement()..text = ' is paused at isolate start', | 94 new SpanElement()..text = ' is paused at isolate start', |
95 new BRElement(), new BRElement(), new SpanElement()..text = '[', | 95 new BRElement(), |
96 new AnchorElement( | 96 new BRElement(), |
97 href: Uris.debugger(event.isolate)) | 97 new SpanElement()..text = '[', |
98 ..text = 'debug', | 98 new AnchorElement(href: Uris.debugger(event.isolate))..text = 'debug', |
99 new SpanElement()..text = ']' | 99 new SpanElement()..text = ']' |
100 ]; | 100 ]; |
101 } | 101 } |
102 | 102 |
103 static List<Element> _managePauseExitEvent(M.PauseExitEvent event) { | 103 static List<Element> _managePauseExitEvent(M.PauseExitEvent event) { |
104 return [ | 104 return [ |
105 new SpanElement()..text = 'Isolate ', | 105 new SpanElement()..text = 'Isolate ', |
106 new AnchorElement( | 106 new AnchorElement(href: Uris.inspect(event.isolate)) |
107 href: Uris.inspect(event.isolate)) | |
108 ..text = event.isolate.name, | 107 ..text = event.isolate.name, |
109 new SpanElement()..text = ' is paused at isolate exit', | 108 new SpanElement()..text = ' is paused at isolate exit', |
110 new BRElement(), new BRElement(), new SpanElement()..text = '[', | 109 new BRElement(), |
111 new AnchorElement( | 110 new BRElement(), |
112 href: Uris.debugger(event.isolate)) | 111 new SpanElement()..text = '[', |
113 ..text = 'debug', | 112 new AnchorElement(href: Uris.debugger(event.isolate))..text = 'debug', |
114 new SpanElement()..text = ']' | 113 new SpanElement()..text = ']' |
115 ]; | 114 ]; |
116 } | 115 } |
117 | 116 |
118 static List<Element> _managePauseBreakpointEvent(M.PauseBreakpointEvent event)
{ | 117 static List<Element> _managePauseBreakpointEvent( |
| 118 M.PauseBreakpointEvent event) { |
119 String message = ' is paused'; | 119 String message = ' is paused'; |
120 if (event.breakpoint != null) { | 120 if (event.breakpoint != null) { |
121 message += ' at breakpoint ${event.breakpoint.number}'; | 121 message += ' at breakpoint ${event.breakpoint.number}'; |
122 } | 122 } |
123 return [ | 123 return [ |
124 new SpanElement()..text = 'Isolate ', | 124 new SpanElement()..text = 'Isolate ', |
125 new AnchorElement( | 125 new AnchorElement(href: Uris.inspect(event.isolate)) |
126 href: Uris.inspect(event.isolate)) | |
127 ..text = event.isolate.name, | 126 ..text = event.isolate.name, |
128 new SpanElement() | 127 new SpanElement()..text = message, |
129 ..text = message, | 128 new BRElement(), |
130 new BRElement(), new BRElement(), new SpanElement()..text = '[', | 129 new BRElement(), |
131 new AnchorElement( | 130 new SpanElement()..text = '[', |
132 href: Uris.debugger(event.isolate)) | 131 new AnchorElement(href: Uris.debugger(event.isolate))..text = 'debug', |
133 ..text = 'debug', | |
134 new SpanElement()..text = ']' | 132 new SpanElement()..text = ']' |
135 ]; | 133 ]; |
136 } | 134 } |
137 | 135 |
138 static List<Element> _managePauseInterruptedEvent(M.PauseInterruptedEvent even
t) { | 136 static List<Element> _managePauseInterruptedEvent( |
| 137 M.PauseInterruptedEvent event) { |
139 return [ | 138 return [ |
140 new SpanElement()..text = 'Isolate ', | 139 new SpanElement()..text = 'Isolate ', |
141 new AnchorElement( | 140 new AnchorElement(href: Uris.inspect(event.isolate)) |
142 href: Uris.inspect(event.isolate)) | |
143 ..text = event.isolate.name, | 141 ..text = event.isolate.name, |
144 new SpanElement() | 142 new SpanElement()..text = ' is paused', |
145 ..text = ' is paused', | 143 new BRElement(), |
146 new BRElement(), new BRElement(), new SpanElement()..text = '[', | 144 new BRElement(), |
147 new AnchorElement( | 145 new SpanElement()..text = '[', |
148 href: Uris.debugger(event.isolate)) | 146 new AnchorElement(href: Uris.debugger(event.isolate))..text = 'debug', |
149 ..text = 'debug', | |
150 new SpanElement()..text = ']' | 147 new SpanElement()..text = ']' |
151 ]; | 148 ]; |
152 } | 149 } |
153 | 150 |
154 static List<Element> _managePauseExceptionEvent(M.PauseExceptionEvent event) { | 151 static List<Element> _managePauseExceptionEvent(M.PauseExceptionEvent event) { |
155 return [ | 152 return [ |
156 new SpanElement()..text = 'Isolate ', | 153 new SpanElement()..text = 'Isolate ', |
157 new AnchorElement( | 154 new AnchorElement(href: Uris.inspect(event.isolate)) |
158 href: Uris.inspect(event.isolate)) | |
159 ..text = event.isolate.name, | 155 ..text = event.isolate.name, |
160 new SpanElement() | 156 new SpanElement()..text = ' is paused due to exception', |
161 ..text = ' is paused due to exception', | 157 new BRElement(), |
162 new BRElement(), new BRElement(), new SpanElement()..text = '[', | 158 new BRElement(), |
163 new AnchorElement( | 159 new SpanElement()..text = '[', |
164 href: Uris.debugger(event.isolate)) | 160 new AnchorElement(href: Uris.debugger(event.isolate))..text = 'debug', |
165 ..text = 'debug', | |
166 new SpanElement()..text = ']' | 161 new SpanElement()..text = ']' |
167 ]; | 162 ]; |
168 } | 163 } |
169 | 164 |
170 static List<Element> _manageNoneEvent(M.NoneEvent event) { | 165 static List<Element> _manageNoneEvent(M.NoneEvent event) { |
171 return [ | 166 return [ |
172 new SpanElement()..text = 'Isolate ', | 167 new SpanElement()..text = 'Isolate ', |
173 new AnchorElement( | 168 new AnchorElement(href: Uris.inspect(event.isolate)) |
174 href: Uris.inspect(event.isolate)) | |
175 ..text = event.isolate.name, | 169 ..text = event.isolate.name, |
176 new SpanElement() | 170 new SpanElement()..text = ' is paused', |
177 ..text = ' is paused', | 171 new BRElement(), |
178 new BRElement(), new BRElement(), new SpanElement()..text = '[', | 172 new BRElement(), |
179 new AnchorElement( | 173 new SpanElement()..text = '[', |
180 href: Uris.debugger(event.isolate)) | 174 new AnchorElement(href: Uris.debugger(event.isolate))..text = 'debug', |
181 ..text = 'debug', | |
182 new SpanElement()..text = ']' | 175 new SpanElement()..text = ']' |
183 ]; | 176 ]; |
184 } | 177 } |
185 | 178 |
186 static List<Element> _manageConnectionClosedEvent(M.ConnectionClosedEvent even
t) { | 179 static List<Element> _manageConnectionClosedEvent( |
| 180 M.ConnectionClosedEvent event) { |
187 return [ | 181 return [ |
188 new SpanElement()..text = 'Disconnected from VM: ${event.reason}', | 182 new SpanElement()..text = 'Disconnected from VM: ${event.reason}', |
189 new BRElement(), new BRElement(), new SpanElement()..text = '[', | 183 new BRElement(), |
| 184 new BRElement(), |
| 185 new SpanElement()..text = '[', |
190 new AnchorElement(href: Uris.vmConnect())..text = 'Connect to a VM', | 186 new AnchorElement(href: Uris.vmConnect())..text = 'Connect to a VM', |
191 new SpanElement()..text = ']' | 187 new SpanElement()..text = ']' |
192 ]; | 188 ]; |
193 } | 189 } |
194 | 190 |
195 static List<Element> _manageInspectEvent(M.InspectEvent event) { | 191 static List<Element> _manageInspectEvent(M.InspectEvent event) { |
196 return [ | 192 return [ |
197 new SpanElement()..text = 'Inspect ${event.inspectee.id}', | 193 new SpanElement()..text = 'Inspect ${event.inspectee.id}', |
198 new BRElement(), new BRElement(), new SpanElement()..text = '[', | 194 new BRElement(), new BRElement(), new SpanElement()..text = '[', |
199 new AnchorElement(href: Uris.inspect(event.isolate, | 195 new AnchorElement( |
200 object: event.inspectee)) | 196 href: Uris.inspect(event.isolate, object: event.inspectee)) |
201 ..text = 'Inspect', | 197 ..text = 'Inspect', |
202 new SpanElement()..text = ']' | 198 new SpanElement()..text = ']' |
203 // TODO(cbernaschina) add InstanceRefElement back. | 199 // TODO(cbernaschina) add InstanceRefElement back. |
204 //new InstanceRefElement()..instance = event.inspectee | 200 //new InstanceRefElement()..instance = event.inspectee |
205 ]; | 201 ]; |
206 } | 202 } |
207 | 203 |
208 static List<Element> _manageIsolateReloadEvent(M.IsolateReloadEvent event) { | 204 static List<Element> _manageIsolateReloadEvent(M.IsolateReloadEvent event) { |
209 if (event.error != null) { | 205 if (event.error != null) { |
210 return [ | 206 return [ |
211 new SpanElement()..text = 'Isolate reload failed:', | 207 new SpanElement()..text = 'Isolate reload failed:', |
212 new BRElement(), new BRElement(), | 208 new BRElement(), |
| 209 new BRElement(), |
213 new DivElement() | 210 new DivElement() |
214 ..classes = ["indent", "error"] | 211 ..classes = ["indent", "error"] |
215 ..text = event.error.message.toString() | 212 ..text = event.error.message.toString() |
216 ]; | 213 ]; |
217 } else { | 214 } else { |
218 return [new SpanElement()..text = 'Isolate reload']; | 215 return [new SpanElement()..text = 'Isolate reload']; |
219 } | 216 } |
220 } | 217 } |
221 | 218 |
222 EventDeleteEvent _toEvent(_) { | 219 EventDeleteEvent _toEvent(_) { |
223 return new EventDeleteEvent(_event); | 220 return new EventDeleteEvent(_event); |
224 } | 221 } |
225 | 222 |
226 void _delete(EventDeleteEvent e) { | 223 void _delete(EventDeleteEvent e) { |
227 _onDelete.add(e); | 224 _onDelete.add(e); |
228 } | 225 } |
229 | 226 |
230 void delete() { | 227 void delete() { |
231 _onDelete.add(new EventDeleteEvent(_event)); | 228 _onDelete.add(new EventDeleteEvent(_event)); |
232 } | 229 } |
233 } | 230 } |
OLD | NEW |