| 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 |