Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 script_ref_element; | 5 library script_ref_element; |
| 6 | 6 |
| 7 import 'package:polymer/polymer.dart'; | 7 import 'dart:html'; |
| 8 import 'package:observatory/service.dart'; | 8 import 'dart:async'; |
| 9 import 'service_ref.dart'; | 9 import 'package:observatory/models.dart' |
| 10 show IsolateRef, ScriptRef, Script, ScriptRepository; | |
| 11 import 'package:observatory/src/elements/helpers/tag.dart'; | |
| 12 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart'; | |
| 10 | 13 |
| 11 @CustomTag('script-ref') | 14 class ScriptRefElement extends HtmlElement implements AsyncRenderable{ |
| 12 class ScriptRefElement extends ServiceRefElement { | 15 static const tag = const Tag<ScriptRefElement>('script-ref-wrapped'); |
| 13 @published int pos; | |
| 14 | 16 |
| 15 String get hoverText { | 17 RenderingScheduler _r; |
| 16 if (ref == null) { | |
| 17 return super.hoverText; | |
| 18 } | |
| 19 return ref.vmName; | |
| 20 } | |
| 21 | 18 |
| 22 void posChanged(oldValue) { | 19 Stream<RenderedEvent<ScriptRefElement>> get onRendered => _r.onRendered; |
| 23 _updateProperties(null); | |
| 24 } | |
| 25 | 20 |
| 26 void _updateProperties(_) { | 21 |
| 27 if (ref != null && ref.loaded) { | 22 IsolateRef _isolate; |
| 28 notifyPropertyChange(#name, 0, 1); | 23 ScriptRef _script; |
| 29 notifyPropertyChange(#url, 0, 1); | 24 ScriptRepository _repository; |
| 25 int _token; | |
| 26 | |
| 27 | |
| 28 IsolateRef get isolate => _isolate; | |
| 29 ScriptRef get script => _script; | |
| 30 int get token => _token; | |
| 31 | |
| 32 set token(int token) { | |
| 33 if (_token != token) { | |
| 34 _token = token; | |
| 35 _r.dirty(); | |
| 36 } else { | |
| 37 _r.scheduleNotification(); | |
| 30 } | 38 } |
| 31 } | 39 } |
| 32 | 40 |
| 33 String get name { | 41 factory ScriptRefElement(IsolateRef isolate, ScriptRef script, |
| 34 if (ref == null) { | 42 ScriptRepository repository, {int token: null}) { |
| 35 return super.name; | 43 assert(isolate != null); |
| 36 } | 44 assert(script != null); |
| 37 if ((pos != null) && (pos >= 0)) { | 45 ScriptRefElement e = document.createElement(tag.name); |
|
Cutch
2016/07/12 16:24:36
script.load().then((_) => markAsDirty());
script.
| |
| 38 if (ref.loaded) { | 46 e._isolate = isolate; |
| 39 // Script is loaded, get the line number. | 47 e._script = script; |
| 40 Script script = ref; | 48 e._repository = repository; |
| 41 return '${super.name}:${script.tokenToLine(pos)}:' | 49 e._token = token; |
| 42 '${script.tokenToCol(pos)}'; | 50 return e; |
| 43 } else { | |
| 44 ref.load().then(_updateProperties); | |
| 45 } | |
| 46 } | |
| 47 return super.name; | |
| 48 } | 51 } |
| 49 | 52 |
| 50 String get url { | 53 ScriptRefElement.created() : super.created() { |
| 51 if (ref == null) { | 54 _r = new RenderingScheduler<ScriptRefElement>(this); |
| 52 return super.url; | |
| 53 } | |
| 54 if ((pos != null) && (pos >= 0)) { | |
| 55 if (ref.loaded) { | |
| 56 return '${super.url}---pos=${pos}'; | |
| 57 } else { | |
| 58 ref.load().then(_updateProperties); | |
| 59 } | |
| 60 } | |
| 61 return super.url; | |
| 62 } | 55 } |
| 63 | 56 |
| 64 ScriptRefElement.created() : super.created(); | 57 @override |
| 58 void attached() { | |
| 59 super.attached(); | |
| 60 assert(script != null); | |
| 61 _r.scheduleRendering(); | |
| 62 } | |
| 63 | |
| 64 @override | |
| 65 void detached() { | |
| 66 super.detached(); | |
| 67 children = []; | |
| 68 _r.scheduleNotification(); | |
| 69 } | |
| 70 | |
| 71 Future<RenderingCallback> render() async { | |
| 72 String href = '#/inspect?' | |
| 73 'isolateId=${Uri.encodeComponent(isolate.id)}&' | |
| 74 'objectId=${Uri.encodeComponent(script.id)}'; | |
| 75 String text = script.uri.split('/').last; | |
| 76 if (token != null) { | |
| 77 final Script script = await _repository.get(_script.id); | |
| 78 int line = script.tokenToLine(token); | |
| 79 int column = script.tokenToCol(token); | |
| 80 text = '${text}:${line}:${column}'; | |
| 81 href = '${href}---pos=${token}'; | |
| 82 } | |
| 83 return () { | |
| 84 children = [ | |
| 85 new AnchorElement(href: href) | |
| 86 ..title = script.uri | |
| 87 ..text = text | |
| 88 ]; | |
| 89 }; | |
| 90 } | |
| 65 } | 91 } |
| 66 | |
| 67 @CustomTag('source-link') | |
| 68 class SourceLinkElement extends PolymerElement { | |
| 69 SourceLinkElement.created() : super.created(); | |
| 70 | |
| 71 @published SourceLocation location; | |
| 72 } | |
| OLD | NEW |