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 vm_connect_element; | 5 library vm_connect_element; |
6 | 6 |
7 import 'dart:html'; | 7 import 'dart:html'; |
8 import 'dart:async'; | 8 import 'dart:async'; |
9 import 'dart:convert'; | 9 import 'dart:convert'; |
10 import 'package:observatory/models.dart' as M; | 10 import 'package:observatory/models.dart' as M; |
11 import 'package:observatory/app.dart'; | 11 import 'package:observatory/app.dart'; |
12 import 'package:observatory/src/elements/helpers/tag.dart'; | 12 import 'package:observatory/src/elements/helpers/tag.dart'; |
13 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart'; | 13 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart'; |
14 import 'package:observatory/src/elements/helpers/nav_bar.dart'; | 14 import 'package:observatory/src/elements/helpers/nav_bar.dart'; |
| 15 import 'package:observatory/src/elements/helpers/uris.dart'; |
15 import 'package:observatory/src/elements/nav/notify.dart'; | 16 import 'package:observatory/src/elements/nav/notify.dart'; |
16 import 'package:observatory/src/elements/nav/top_menu.dart'; | 17 import 'package:observatory/src/elements/nav/top_menu.dart'; |
17 import 'package:observatory/src/elements/view_footer.dart'; | 18 import 'package:observatory/src/elements/view_footer.dart'; |
18 import 'package:observatory/src/elements/vm_connect_target.dart'; | 19 import 'package:observatory/src/elements/vm_connect_target.dart'; |
19 | 20 |
20 typedef void CrashDumpLoadCallback(Map dump); | 21 typedef void CrashDumpLoadCallback(Map dump); |
21 | 22 |
22 class VMConnectElement extends HtmlElement implements Renderable { | 23 class VMConnectElement extends HtmlElement implements Renderable { |
23 static const tag = | 24 static const tag = |
24 const Tag<VMConnectElement>('vm-connect', dependencies: const [ | 25 const Tag<VMConnectElement>('vm-connect', dependencies: const [ |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 new FormElement() | 113 new FormElement() |
113 ..autocomplete = 'on' | 114 ..autocomplete = 'on' |
114 ..children = [ | 115 ..children = [ |
115 _createAddressBox(), | 116 _createAddressBox(), |
116 new SpanElement()..text = ' ', | 117 new SpanElement()..text = ' ', |
117 new ButtonElement() | 118 new ButtonElement() |
118 ..classes = ['vm_connect'] | 119 ..classes = ['vm_connect'] |
119 ..text = 'Connect' | 120 ..text = 'Connect' |
120 ..onClick.listen((e) { | 121 ..onClick.listen((e) { |
121 e.preventDefault(); | 122 e.preventDefault(); |
122 _create(); | 123 _createAndConnect(); |
123 }), | 124 }), |
124 ], | 125 ], |
125 new BRElement(), | 126 new BRElement(), |
126 new PreElement() | 127 new PreElement() |
127 ..classes = ['well'] | 128 ..classes = ['well'] |
128 ..text = 'Run Standalone with: \'--observe\'', | 129 ..text = 'Run Standalone with: \'--observe\'', |
129 ], | 130 ], |
130 new DivElement()..classes = ['flex-item-20-percent'], | 131 new DivElement()..classes = ['flex-item-20-percent'], |
131 new DivElement() | 132 new DivElement() |
132 ..classes = ['flex-item-40-percent'] | 133 ..classes = ['flex-item-40-percent'] |
(...skipping 10 matching lines...) Expand all Loading... |
143 ] | 144 ] |
144 ], | 145 ], |
145 ], | 146 ], |
146 new ViewFooterElement(queue: _r.queue) | 147 new ViewFooterElement(queue: _r.queue) |
147 ]; | 148 ]; |
148 } | 149 } |
149 | 150 |
150 TextInputElement _createAddressBox() { | 151 TextInputElement _createAddressBox() { |
151 var textbox = new TextInputElement() | 152 var textbox = new TextInputElement() |
152 ..classes = ['textbox'] | 153 ..classes = ['textbox'] |
153 ..placeholder = '127.0.0.1:8181' | 154 ..placeholder = 'http://127.0.0.1:8181/...' |
154 ..value = _address | 155 ..value = _address |
155 ..onKeyUp.where((e) => e.key == '\n').listen((e) { | 156 ..onKeyUp.where((e) => e.key == '\n').listen((e) { |
156 e.preventDefault(); | 157 e.preventDefault(); |
157 _create(); | 158 _createAndConnect(); |
158 }); | 159 }); |
159 textbox.onInput.listen((e) { | 160 textbox.onInput.listen((e) { |
160 _address = textbox.value; | 161 _address = textbox.value; |
161 }); | 162 }); |
162 return textbox; | 163 return textbox; |
163 } | 164 } |
164 | 165 |
165 FileUploadInputElement _createCrushDumpLoader() { | 166 FileUploadInputElement _createCrushDumpLoader() { |
166 FileUploadInputElement e = new FileUploadInputElement() | 167 FileUploadInputElement e = new FileUploadInputElement() |
167 ..id = 'crashDumpFile'; | 168 ..id = 'crashDumpFile'; |
168 e.onChange.listen((_) { | 169 e.onChange.listen((_) { |
169 var reader = new FileReader(); | 170 var reader = new FileReader(); |
170 reader.readAsText(e.files[0]); | 171 reader.readAsText(e.files[0]); |
171 reader.onLoad.listen((_) { | 172 reader.onLoad.listen((_) { |
172 var crashDump = JSON.decode(reader.result); | 173 var crashDump = JSON.decode(reader.result); |
173 _loadDump(crashDump); | 174 _loadDump(crashDump); |
174 }); | 175 }); |
175 }); | 176 }); |
176 return e; | 177 return e; |
177 } | 178 } |
178 | 179 |
179 void _create() { | 180 void _createAndConnect() { |
180 if (_address == null || _address.isEmpty) return; | 181 if (_address == null || _address.isEmpty) return; |
181 _targets.add(_normalizeStandaloneAddress(_address)); | 182 String normalizedNetworkAddress = _normalizeStandaloneAddress(_address); |
| 183 _targets.add(normalizedNetworkAddress); |
| 184 var target = _targets.find(normalizedNetworkAddress); |
| 185 assert(target != null); |
| 186 _targets.setCurrent(target); |
| 187 ObservatoryApplication.app.locationManager.go(Uris.vm()); |
182 } | 188 } |
183 | 189 |
184 void _connect(TargetEvent e) { | 190 void _connect(TargetEvent e) { |
185 _targets.setCurrent(e.target); | 191 _targets.setCurrent(e.target); |
186 } | 192 } |
187 | 193 |
188 void _delete(TargetEvent e) => _targets.delete(e.target); | 194 void _delete(TargetEvent e) => _targets.delete(e.target); |
189 | 195 |
190 static String _normalizeStandaloneAddress(String networkAddress) { | 196 static String _normalizeStandaloneAddress(String networkAddress) { |
191 if (!networkAddress.startsWith('http') && | 197 if (!networkAddress.startsWith('http') && |
192 !networkAddress.startsWith('ws')) { | 198 !networkAddress.startsWith('ws')) { |
193 networkAddress = 'http://$networkAddress'; | 199 networkAddress = 'http://$networkAddress'; |
194 } | 200 } |
195 try { | 201 try { |
196 Uri uri = Uri.parse(networkAddress); | 202 Uri uri = Uri.parse(networkAddress); |
197 print('returning ${uri.host} ${uri.port}'); | 203 return 'ws://${uri.authority}${uri.path}ws'; |
198 return 'ws://${uri.host}:${uri.port}/ws'; | |
199 } catch (e) { | 204 } catch (e) { |
200 print('caught exception with: $networkAddress -- $e'); | 205 print('caught exception with: $networkAddress -- $e'); |
201 return networkAddress; | 206 return networkAddress; |
202 } | 207 } |
203 } | 208 } |
204 } | 209 } |
OLD | NEW |