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

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

Issue 2213613002: Converted observatory flag-list element (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Added tests 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
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 flag_list_element; 5 library flag_list_element;
6 6
7 import 'dart:html';
7 import 'dart:async'; 8 import 'dart:async';
8 import 'package:polymer/polymer.dart'; 9 import 'package:observatory/models.dart' as M;
9 import 'observatory_element.dart'; 10 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart';
10 import 'package:observatory/service.dart'; 11 import 'package:observatory/src/elements/helpers/tag.dart';
12 import 'package:observatory/src/elements/helpers/uris.dart';
13 import 'package:observatory/src/elements/nav/bar.dart';
14 import 'package:observatory/src/elements/nav/menu.dart';
15 import 'package:observatory/src/elements/nav/notify.dart';
16 import 'package:observatory/src/elements/nav/refresh.dart';
17 import 'package:observatory/src/elements/nav/top_menu.dart';
18 import 'package:observatory/src/elements/nav/vm_menu.dart';
19 import 'package:observatory/src/elements/view_footer.dart';
11 20
12 @CustomTag('flag-list') 21 class FlagListElement extends HtmlElement implements Renderable {
13 class FlagListElement extends ObservatoryElement { 22 static const tag = const Tag<FlagListElement>('flag-list',
14 @published ServiceMap flagList; 23 dependencies: const [NavBarElement.tag,
24 NavMenuElement.tag,
25 NavNotifyElement.tag,
26 NavRefreshElement.tag,
27 NavTopMenuElement.tag,
28 NavVMMenuElement.tag,
29 ViewFooterElement.tag,]);
15 30
16 void flagListChanged(oldValue) { 31 RenderingScheduler _r;
17 modifiedFlags = 32
18 flagList['flags'].where((flag) => flag['modified']).toList(); 33 Stream<RenderedEvent<FlagListElement>> get onRendered => _r.onRendered;
19 unmodifiedFlags = 34
20 flagList['flags'].where((flag) => !flag['modified']).toList(); 35 M.VMRef _vm;
36 Stream<M.VMUpdateEvent> _vmUpdates;
37 M.FlagsRepository _repository;
38 M.NotificationRepository _notifications;
39 Iterable<M.Flag> _flags;
40
41 M.VMRef get vm => _vm;
42
43 factory FlagListElement(M.VMRef vm,
44 Stream<M.VMUpdateEvent> vmUpdates,
45 M.FlagsRepository repository,
46 M.NotificationRepository notifications,
47 {RenderingQueue queue}) {
48 assert(vm != null);
49 assert(vmUpdates != null);
50 assert(repository != null);
51 assert(notifications != null);
52 FlagListElement e = document.createElement(tag.name);
53 e._r = new RenderingScheduler(e, queue: queue);
54 e._vm = vm;
55 e._vmUpdates = vmUpdates;
56 e._repository = repository;
57 e._notifications = notifications;
58 return e;
21 } 59 }
22 60
23 @observable List<ServiceMap> modifiedFlags = new List<ServiceMap>();
24 @observable List<ServiceMap> unmodifiedFlags = new List<ServiceMap>();
25
26 FlagListElement.created() : super.created(); 61 FlagListElement.created() : super.created();
27 62
28 Future refresh() { 63 @override
29 return flagList.reload(); 64 void attached() {
65 super.attached();
66 _r.enable();
67 _refresh();
68 }
69
70 @override
71 void detached() {
72 super.detached();
73 children = [];
74 _r.disable(notify: true);
75 }
76
77 void render() {
78 final content = <Element>[];
79 if (_flags == null) {
80 content.add(new HeadingElement.h1()..text = 'Loading Flags...');
81 } else {
82 final modified = _flags.where(_isModified);
83 final unmodified = _flags.where(_isUnmodified);
84
85 if (modified.isNotEmpty) {
86 content.add(new HeadingElement.h1()..text = 'Modified Flags');
87 content.add(new BRElement());
88 content.addAll(modified.expand(_renderFlag));
89 content.add(new HRElement());
90 }
91
92 content.add(new HeadingElement.h1()..text = 'Unmodified Flags');
93 content.add(new BRElement());
94
95 if (unmodified.isEmpty) {
96 content.add(new HeadingElement.h2()..text = 'None');
97 } else {
98 content.addAll(unmodified.expand(_renderFlag));
99 }
100 }
101
102 children = [
103 new NavBarElement(queue: _r.queue)
104 ..children = [
105 new NavTopMenuElement(queue: _r.queue),
106 new NavVMMenuElement(_vm, _vmUpdates, queue: _r.queue),
107 new NavMenuElement('flags', link: Uris.flags(), last: true,
108 queue: _r.queue),
109 new NavRefreshElement(queue: _r.queue)
110 ..onRefresh.listen((e) async {
111 e.element.disabled = true;
112 try {
113 await _refresh();
114 } finally {
115 e.element.disabled = false;
116 }
117 }),
118 new NavNotifyElement(_notifications, queue: _r.queue)
119 ],
120 new DivElement()
121 ..classes = ['content-centered']
122 ..children = content,
123 new ViewFooterElement(queue: _r.queue)
124 ];
125 }
126
127 Future _refresh() async {
128 _flags = await _repository.list(_vm);
129 _r.dirty();
130 }
131
132 static bool _isModified(M.Flag flag) => flag.modified;
133 static bool _isUnmodified(M.Flag flag) => !flag.modified;
134
135 static List<Element> _renderFlag(M.Flag flag) {
136 return [
137 new SpanElement()..classes = const ['comment']
138 ..text = '// ${flag.comment}',
139 new DivElement()..classes = flag.modified ? const ['flag', 'modified']
140 : const ['flag', 'unmodified']
141 ..children = [
142 new SpanElement()..classes = const ['name']
143 ..text = flag.name,
144 new SpanElement()..text = '=',
145 new SpanElement()..classes = const ['value']
146 ..text = flag.valueAsString ?? 'NULL'
147 ],
148 new BRElement(),
149 ];
30 } 150 }
31 } 151 }
32
33 @CustomTag('flag-item')
34 class FlagItemElement extends ObservatoryElement {
35 @published ObservableMap flag;
36
37 FlagItemElement.created() : super.created();
38 }
OLDNEW
« no previous file with comments | « runtime/observatory/lib/src/elements/css/shared.css ('k') | runtime/observatory/lib/src/elements/flag_list.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698