Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(51)

Side by Side Diff: runtime/observatory/lib/src/elements/retaining_path.dart

Issue 2265513003: Converted Observatory object-common element (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Fixed typos Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
Cutch 2016/08/19 22:11:19 update year
cbernaschina 2016/08/19 22:17:40 Done.
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/curly_block.dart';
9 import 'package:observatory/src/elements/instance_ref.dart';
10 import 'package:observatory/src/elements/helpers/any_ref.dart';
11 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart';
12 import 'package:observatory/src/elements/helpers/tag.dart';
13
14 class RetainingPathElement extends HtmlElement implements Renderable {
15 static const tag = const Tag<RetainingPathElement>('retaining-path',
16 dependencies: const [
17 CurlyBlockElement.tag,
18 InstanceRefElement.tag
19 ]);
20
21 RenderingScheduler<RetainingPathElement> _r;
22
23 Stream<RenderedEvent<RetainingPathElement>> get onRendered =>
24 _r.onRendered;
25
26 M.IsolateRef _isolate;
27 M.ObjectRef _object;
28 M.RetainingPathRepository _retainingPaths;
29 M.InstanceRepository _instances;
30 M.RetainingPath _path;
31 bool _expanded = false;
32
33 M.IsolateRef get isolate => _isolate;
34 M.ObjectRef get object => _object;
35
36 factory RetainingPathElement(M.IsolateRef isolate, M.ObjectRef object,
37 M.RetainingPathRepository retainingPaths, M.InstanceRepository instances,
38 {RenderingQueue queue}) {
39 assert(isolate != null);
40 assert(object != null);
41 assert(retainingPaths != null);
42 assert(instances != null);
43 RetainingPathElement e = document.createElement(tag.name);
44 e._r = new RenderingScheduler(e, queue: queue);
45 e._isolate = isolate;
46 e._object = object;
47 e._retainingPaths = retainingPaths;
48 e._instances = instances;
49 return e;
50 }
51
52 RetainingPathElement.created() : super.created();
53
54 @override
55 void attached() {
56 super.attached();
57 _r.enable();
58 }
59
60 @override
61 void detached() {
62 super.detached();
63 children = [];
64 _r.disable(notify: true);
65 }
66
67 void render() {
68 children = [
69 new CurlyBlockElement(expanded: _expanded, queue: _r.queue)
70 ..children = _createContent()
71 ..onToggle.listen((e) async {
72 _expanded = e.control.expanded;
73 if (_expanded) {
74 e.control.disabled = true;
75 await _refresh();
76 e.control.disabled = false;
77 }
78 })
79 ];
80 }
81
82 Future _refresh() async {
83 _path = null;
84 _path = await _retainingPaths.get(_isolate, _object.id);
85 _r.dirty();
86 }
87
88 List<Element> _createContent() {
89 if (_path == null) {
90 return [
91 new SpanElement()..text = 'Loading'
92 ];
93 }
94 return _path.elements.map(_createItem).toList();
95 }
96
97 Element _createItem(M.RetainingPathItem item) {
98 final content = <Element>[];
99
100 if (item.parentField != null) {
101 content.add(
102 new DivElement()
103 ..children = [
104 new SpanElement()..text = 'from ',
105 new InstanceRefElement(_isolate, item.parentField, _instances,
106 queue: _r.queue),
107 new SpanElement()..text = ' of ',
108 ]);
109 } else if (item.parentListIndex != null) {
110 content.add(
111 new SpanElement()
112 ..text = 'from [ ${item.parentListIndex} ] of ');
113 } else if (item.parentWordOffset != null) {
114 content.add(
115 new SpanElement()
116 ..text = 'from word [ ${item.parentWordOffset} ] of ');
117 } else {
118 content.add(new SpanElement()..text = 'from ');
119 }
120
121 content.add(
122 anyRef(_isolate, item.source, _instances, queue: _r.queue)
123 );
124
125 return new DivElement()..classes = ['indent']..children = content;
126 }
127 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698