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

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

Issue 2170723002: Converted Observatory vm-nav-menu element (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Adding _getBoolAttribute helper method Created 4 years, 5 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) 2016, the Dart project authors. Please see the AUTHORS file
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 show VM, IsolateRef, Target, VMUpdateEvent;
9 import 'package:observatory/src/elements/helpers/tag.dart';
10 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart';
11 import 'package:observatory/src/elements/nav/menu.dart';
12 import 'package:observatory/src/elements/nav/menu_item.dart';
13
14 class NavVMMenuElement extends HtmlElement implements Renderable {
15 static const tag = const Tag<NavVMMenuElement>('nav-vm-menu',
16 dependencies: const [NavMenuElement.tag,
17 NavMenuItemElement.tag]);
18
19 RenderingScheduler _r;
20
21 Stream<RenderedEvent<NavVMMenuElement>> get onRendered => _r.onRendered;
22
23 Stream<M.VMUpdateEvent> _updates;
24 StreamSubscription _updatesSubscription;
25
26 bool _last;
27 M.VM _vm;
28 M.Target _target;
29 bool get last => _last;
30 M.VM get vm => _vm;
31 M.Target get target => _target;
32 set last(bool value) => _last = _r.checkAndReact(_last, value);
33
34 factory NavVMMenuElement(M.VM vm, Stream<M.VMUpdateEvent> updates,
35 {bool last: false, M.Target target, RenderingQueue queue}) {
36 assert(vm != null);
37 assert(updates != null);
38 assert(last != null);
39 NavVMMenuElement e = document.createElement(tag.name);
40 e._r = new RenderingScheduler(e, queue: queue);
41 e._vm = vm;
42 e._updates = updates;
43 e._last = last;
44 e._target = target;
45 return e;
46 }
47
48 NavVMMenuElement.created() : super.created() { createShadowRoot(); }
49
50 @override
51 void attached() {
52 super.attached();
53 _r.enable();
54 _updatesSubscription = _updates
55 .listen((M.VMUpdateEvent e) { _vm = e.vm; _r.dirty(); });
56 }
57
58 @override
59 void detached() {
60 super.detached();
61 _r.disable(notify: true);
62 shadowRoot.children = [];
63 assert(_updatesSubscription != null);
64 _updatesSubscription.cancel();
65 _updatesSubscription = null;
66 }
67
68 void render() {
69 final String name = (target == null) ? vm.name
70 : '${vm.name}@${target.name}';
71 /// TODO(cbernaschina) use the isolate repository.
72 shadowRoot.children = [
73 new NavMenuElement(name, link: '/vm', last: last, queue: _r.queue)
74 ..children = (
75 _vm.isolates.map((M.IsolateRef isolate) {
76 return new NavMenuItemElement(isolate.name, queue: _r.queue,
77 link: '/inspect?isolateId=${Uri.encodeComponent(isolate.id)}');
Cutch 2016/07/22 13:35:44 please use a uniform helper method for all link cr
cbernaschina 2016/07/22 17:01:23 Waiting the isolate menu to be accepted. Once that
78 }).toList()
79 ..add(new ContentElement())
80 )
81 ];
82 }
83 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698