OLD | NEW |
(Empty) | |
| 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 |
| 3 // BSD-style license that can be found in the LICENSE file. |
| 4 |
| 5 import 'dart:html'; |
| 6 import 'dart:async'; |
| 7 import 'package:observatory/models.dart' as M; |
| 8 import 'package:observatory/src/elements/helpers/tag.dart'; |
| 9 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart'; |
| 10 |
| 11 class EventDeleteEvent{ |
| 12 final M.Event event; |
| 13 EventDeleteEvent(this.event); |
| 14 } |
| 15 |
| 16 class NavNotifyEventElement extends HtmlElement implements Renderable { |
| 17 static const tag = const Tag<NavNotifyEventElement>('nav-event'); |
| 18 |
| 19 RenderingScheduler _r; |
| 20 |
| 21 Stream<RenderedEvent<NavNotifyEventElement>> get onRendered => _r.onRendered; |
| 22 |
| 23 final StreamController<EventDeleteEvent> _onDelete = |
| 24 new StreamController<EventDeleteEvent>.broadcast(); |
| 25 Stream<EventDeleteEvent> get onDelete => _onDelete.stream; |
| 26 |
| 27 M.Event _event; |
| 28 M.Event get event => _event; |
| 29 |
| 30 factory NavNotifyEventElement(M.Event event, {RenderingQueue queue}) { |
| 31 assert(event != null); |
| 32 NavNotifyEventElement e = document.createElement(tag.name); |
| 33 e._r = new RenderingScheduler(e, queue: queue); |
| 34 e._event = event; |
| 35 return e; |
| 36 } |
| 37 |
| 38 NavNotifyEventElement.created() : super.created(); |
| 39 |
| 40 @override |
| 41 void attached() { |
| 42 super.attached(); |
| 43 _r.enable(); |
| 44 } |
| 45 |
| 46 @override |
| 47 void detached() { |
| 48 super.detached(); |
| 49 children = []; |
| 50 _r.disable(notify: true); |
| 51 } |
| 52 |
| 53 void render() { |
| 54 children = []; |
| 55 List<Element> content; |
| 56 if (event is M.PauseStartEvent) { |
| 57 content = _managePauseStartEvent(event as M.PauseStartEvent); |
| 58 } else if (event is M.PauseExitEvent) { |
| 59 content = _managePauseExitEvent(event as M.PauseExitEvent); |
| 60 } else if (event is M.PauseBreakpointEvent) { |
| 61 content = _managePauseBreakpointEvent(event as M.PauseBreakpointEvent); |
| 62 } else if (event is M.PauseInterruptedEvent) { |
| 63 content = _managePauseInterruptedEvent(event as M.PauseInterruptedEvent); |
| 64 } else if (event is M.PauseExceptionEvent) { |
| 65 content = _managePauseExceptionEvent(event as M.PauseExceptionEvent); |
| 66 } else if (event is M.NoneEvent) { |
| 67 content = _manageNoneEvent(event as M.NoneEvent); |
| 68 } else if (event is M.ConnectionClosedEvent) { |
| 69 content = _manageConnectionClosedEvent(event as M.ConnectionClosedEvent); |
| 70 } else if (event is M.InspectEvent) { |
| 71 content = _manageInspectEvent(event as M.InspectEvent); |
| 72 } else if (event is M.IsolateReloadEvent) { |
| 73 content = _manageIsolateReloadEvent(event as M.IsolateReloadEvent); |
| 74 } else { |
| 75 return; |
| 76 } |
| 77 children = [ |
| 78 new DivElement() |
| 79 ..children = [] |
| 80 ..children.addAll(content) |
| 81 ..children.add(new ButtonElement()..innerHtml = '×' |
| 82 ..onClick.map(_toEvent).listen(_delete)) |
| 83 ]; |
| 84 } |
| 85 |
| 86 static List<Element> _managePauseStartEvent(M.PauseStartEvent event) { |
| 87 return [ |
| 88 new SpanElement()..text = 'Isolate ', |
| 89 new AnchorElement( |
| 90 href: '#/inspect?isolateId=${Uri.encodeComponent(event.isolate.id)}') |
| 91 ..text = event.isolate.name, |
| 92 new SpanElement()..text = ' is paused at isolate start', |
| 93 new BRElement(), new BRElement(), new SpanElement()..text = '[', |
| 94 new AnchorElement( |
| 95 href: '#/debugger?isolateId=${Uri.encodeComponent(event.isolate.id)}') |
| 96 ..text = 'debug', |
| 97 new SpanElement()..text = ']' |
| 98 ]; |
| 99 } |
| 100 |
| 101 static List<Element> _managePauseExitEvent(M.PauseExitEvent event) { |
| 102 return [ |
| 103 new SpanElement()..text = 'Isolate ', |
| 104 new AnchorElement( |
| 105 href: '#/inspect?isolateId=${Uri.encodeComponent(event.isolate.id)}') |
| 106 ..text = event.isolate.name, |
| 107 new SpanElement()..text = ' is paused at isolate exit', |
| 108 new BRElement(), new BRElement(), new SpanElement()..text = '[', |
| 109 new AnchorElement( |
| 110 href: '#/debugger?isolateId=${Uri.encodeComponent(event.isolate.id)}') |
| 111 ..text = 'debug', |
| 112 new SpanElement()..text = ']' |
| 113 ]; |
| 114 } |
| 115 |
| 116 static List<Element> _managePauseBreakpointEvent(M.PauseBreakpointEvent event)
{ |
| 117 String message = ' is paused'; |
| 118 if (event.breakpoint != null) { |
| 119 message += ' at breakpoint ${event.breakpoint.number}'; |
| 120 } |
| 121 return [ |
| 122 new SpanElement()..text = 'Isolate ', |
| 123 new AnchorElement( |
| 124 href: '#/inspect?isolateId=${Uri.encodeComponent(event.isolate.id)}') |
| 125 ..text = event.isolate.name, |
| 126 new SpanElement() |
| 127 ..text = message, |
| 128 new BRElement(), new BRElement(), new SpanElement()..text = '[', |
| 129 new AnchorElement( |
| 130 href: '#/debugger?isolateId=${Uri.encodeComponent(event.isolate.id)}') |
| 131 ..text = 'debug', |
| 132 new SpanElement()..text = ']' |
| 133 ]; |
| 134 } |
| 135 |
| 136 static List<Element> _managePauseInterruptedEvent(M.PauseInterruptedEvent even
t) { |
| 137 return [ |
| 138 new SpanElement()..text = 'Isolate ', |
| 139 new AnchorElement( |
| 140 href: '#/inspect?isolateId=${Uri.encodeComponent(event.isolate.id)}') |
| 141 ..text = event.isolate.name, |
| 142 new SpanElement() |
| 143 ..text = ' is paused', |
| 144 new BRElement(), new BRElement(), new SpanElement()..text = '[', |
| 145 new AnchorElement( |
| 146 href: '#/debugger?isolateId=${Uri.encodeComponent(event.isolate.id)}') |
| 147 ..text = 'debug', |
| 148 new SpanElement()..text = ']' |
| 149 ]; |
| 150 } |
| 151 |
| 152 static List<Element> _managePauseExceptionEvent(M.PauseExceptionEvent event) { |
| 153 return [ |
| 154 new SpanElement()..text = 'Isolate ', |
| 155 new AnchorElement( |
| 156 href: '#/inspect?isolateId=${Uri.encodeComponent(event.isolate.id)}') |
| 157 ..text = event.isolate.name, |
| 158 new SpanElement() |
| 159 ..text = ' is paused due to exception', |
| 160 new BRElement(), new BRElement(), new SpanElement()..text = '[', |
| 161 new AnchorElement( |
| 162 href: '#/debugger?isolateId=${Uri.encodeComponent(event.isolate.id)}') |
| 163 ..text = 'debug', |
| 164 new SpanElement()..text = ']' |
| 165 ]; |
| 166 } |
| 167 |
| 168 static List<Element> _manageNoneEvent(M.NoneEvent event) { |
| 169 return [ |
| 170 new SpanElement()..text = 'Isolate ', |
| 171 new AnchorElement( |
| 172 href: '#/inspect?isolateId=${Uri.encodeComponent(event.isolate.id)}') |
| 173 ..text = event.isolate.name, |
| 174 new SpanElement() |
| 175 ..text = ' is paused', |
| 176 new BRElement(), new BRElement(), new SpanElement()..text = '[', |
| 177 new AnchorElement( |
| 178 href: '#/debugger?isolateId=${Uri.encodeComponent(event.isolate.id)}') |
| 179 ..text = 'debug', |
| 180 new SpanElement()..text = ']' |
| 181 ]; |
| 182 } |
| 183 |
| 184 static List<Element> _manageConnectionClosedEvent(M.ConnectionClosedEvent even
t) { |
| 185 return [ |
| 186 new SpanElement()..text = 'Disconnected from VM: ${event.reason}', |
| 187 new BRElement(), new BRElement(), new SpanElement()..text = '[', |
| 188 new AnchorElement(href: '#/vm-connect')..text = 'Connect to a VM', |
| 189 new SpanElement()..text = ']' |
| 190 ]; |
| 191 } |
| 192 |
| 193 static List<Element> _manageInspectEvent(M.InspectEvent event) { |
| 194 return [ |
| 195 new SpanElement()..text = 'Inspect ', |
| 196 // TODO(cbernaschina) add InstanceRefElement back. |
| 197 //new InstanceRefElement()..instance = event.inspectee |
| 198 ]; |
| 199 } |
| 200 |
| 201 static List<Element> _manageIsolateReloadEvent(M.IsolateReloadEvent event) { |
| 202 if (event.error != null) { |
| 203 return [ |
| 204 new SpanElement()..text = 'Isolate reload failed:', |
| 205 new BRElement(), new BRElement(), |
| 206 new DivElement() |
| 207 ..classes = ["indent", "error"] |
| 208 ..text = event.error.message.toString() |
| 209 ]; |
| 210 } else { |
| 211 return [new SpanElement()..text = 'Isolate reload']; |
| 212 } |
| 213 } |
| 214 |
| 215 EventDeleteEvent _toEvent(_) { |
| 216 return new EventDeleteEvent(_event); |
| 217 } |
| 218 |
| 219 void _delete(EventDeleteEvent e) { |
| 220 _onDelete.add(e); |
| 221 } |
| 222 |
| 223 void delete() { |
| 224 _onDelete.add(new EventDeleteEvent(_event)); |
| 225 } |
| 226 } |
OLD | NEW |