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

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

Issue 2274013006: Converted Observatory objectstore-view element (Closed)
Patch Set: Fixed link color Created 4 years, 3 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
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 objectstore_view_element; 5 library objectstore_view_element;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'observatory_element.dart'; 8 import 'dart:html';
9 import 'package:observatory/service.dart'; 9 import 'package:observatory/models.dart' as M;
10 import 'package:polymer/polymer.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 import 'package:observatory/src/elements/instance_ref.dart';
14 import 'package:observatory/src/elements/nav/bar.dart';
15 import 'package:observatory/src/elements/nav/isolate_menu.dart';
16 import 'package:observatory/src/elements/nav/notify.dart';
17 import 'package:observatory/src/elements/nav/refresh.dart';
18 import 'package:observatory/src/elements/nav/top_menu.dart';
19 import 'package:observatory/src/elements/nav/vm_menu.dart';
20 import 'package:observatory/src/elements/view_footer.dart';
21
22 class ObjectStoreViewElement extends HtmlElement implements Renderable {
23 static const tag = const Tag<ObjectStoreViewElement>('objectstore-view',
24 dependencies: const [
25 InstanceRefElement.tag,
26 NavBarElement.tag,
27 NavTopMenuElement.tag,
28 NavVMMenuElement.tag,
29 NavIsolateMenuElement.tag,
30 NavRefreshElement.tag,
31 NavNotifyElement.tag,
32 ViewFooterElement.tag
33 ]);
34
35 RenderingScheduler<ObjectStoreViewElement> _r;
36
37 Stream<RenderedEvent<ObjectStoreViewElement>> get onRendered => _r.onRendered;
38
39 M.VM _vm;
40 M.IsolateRef _isolate;
41 M.EventRepository _events;
42 M.NotificationRepository _notifications;
43 M.ObjectStore _store;
44 M.ObjectStoreRepository _stores;
45 M.InstanceRepository _instances;
11 46
12 47
13 @CustomTag('objectstore-view') 48 M.VMRef get vm => _vm;
14 class ObjectStoreViewElement extends ObservatoryElement { 49 M.IsolateRef get isolate => _isolate;
15 @published ObjectStore objectStore; 50 M.NotificationRepository get notifications => _notifications;
51
52 factory ObjectStoreViewElement(M.VM vm, M.IsolateRef isolate,
53 M.EventRepository events,
54 M.NotificationRepository notifications,
55 M.ObjectStoreRepository stores,
56 M.InstanceRepository instances,
57 {RenderingQueue queue}) {
58 assert(vm != null);
59 assert(isolate != null);
60 assert(events != null);
61 assert(notifications != null);
62 assert(stores != null);
63 assert(instances != null);
64 ObjectStoreViewElement e = document.createElement(tag.name);
65 e._r = new RenderingScheduler(e, queue: queue);
66 e._vm = vm;
67 e._isolate = isolate;
68 e._events = events;
69 e._notifications = notifications;
70 e._stores = stores;
71 e._instances = instances;
72 return e;
73 }
16 74
17 ObjectStoreViewElement.created() : super.created(); 75 ObjectStoreViewElement.created() : super.created();
18 76
19 Future refresh() { 77 @override
20 return objectStore.isolate.getObjectStore().then((newObjectStore) { 78 attached() {
21 objectStore = newObjectStore; 79 super.attached();
22 }); 80 _r.enable();
81 _refresh();
82 }
83
84 @override
85 detached() {
86 super.detached();
87 _r.disable(notify: true);
88 children = [];
89 }
90
91 void render() {
92 final fields = _store?.fields?.toList(growable: false);
93 children = [
94 new NavBarElement(queue: _r.queue)
95 ..children = [
96 new NavTopMenuElement(queue: _r.queue),
97 new NavVMMenuElement(_vm, _events, queue: _r.queue),
98 new NavIsolateMenuElement(_isolate, _events, queue: _r.queue),
99 new NavRefreshElement(disabled: _store == null, queue: _r.queue)
100 ..onRefresh.listen((e) => _refresh()),
101 new NavNotifyElement(_notifications, queue: _r.queue)
102 ],
103 new DivElement()..classes = const ['content-centered-big']
104 ..children = [
105 new HeadingElement.h1()
106 ..text = fields == null
107 ? 'Object Store'
108 : 'Object Store (${fields.length})',
109 new HRElement(),
110 fields == null
111 ? (new HeadingElement.h2()..text = 'Loading...')
112 : (new DivElement()..classes = const ['memberList']
113 ..children = fields.map((field) =>
114 new DivElement()..classes = const ['memberItem']
115 ..children = [
116 new DivElement()..classes = const ['memberName']
117 ..text = field.name,
118 new DivElement()..classes = const ['memberValue']
119 ..children = [
120 anyRef(_isolate, field.value, _instances,
121 queue: _r.queue)
122 ]
123 ]).toList()),
124 new ViewFooterElement(queue: _r.queue)
125 ]
126 ];
127 }
128
129 Future _refresh() async {
130 _store = null;
131 _r.dirty();
132 _store = await _stores.get(_isolate);
133 _r.dirty();
23 } 134 }
24 } 135 }
OLDNEW
« no previous file with comments | « runtime/observatory/lib/src/elements/css/shared.css ('k') | runtime/observatory/lib/src/elements/objectstore_view.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698