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 flag_list_element; | 5 library flag_list_element; |
6 | 6 |
7 import 'dart:html'; | 7 import 'dart:html'; |
8 import 'dart:async'; | 8 import 'dart:async'; |
9 import 'package:observatory/models.dart' as M; | 9 import 'package:observatory/models.dart' as M; |
10 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart'; | 10 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart'; |
(...skipping 15 matching lines...) Expand all Loading... |
26 NavRefreshElement.tag, | 26 NavRefreshElement.tag, |
27 NavTopMenuElement.tag, | 27 NavTopMenuElement.tag, |
28 NavVMMenuElement.tag, | 28 NavVMMenuElement.tag, |
29 ViewFooterElement.tag,]); | 29 ViewFooterElement.tag,]); |
30 | 30 |
31 RenderingScheduler _r; | 31 RenderingScheduler _r; |
32 | 32 |
33 Stream<RenderedEvent<FlagListElement>> get onRendered => _r.onRendered; | 33 Stream<RenderedEvent<FlagListElement>> get onRendered => _r.onRendered; |
34 | 34 |
35 M.VMRef _vm; | 35 M.VMRef _vm; |
36 Stream<M.VMUpdateEvent> _vmUpdates; | 36 M.EventRepository _events; |
37 M.FlagsRepository _repository; | 37 M.FlagsRepository _repository; |
38 M.NotificationRepository _notifications; | 38 M.NotificationRepository _notifications; |
39 Iterable<M.Flag> _flags; | 39 Iterable<M.Flag> _flags; |
40 | 40 |
41 M.VMRef get vm => _vm; | 41 M.VMRef get vm => _vm; |
42 | 42 |
43 factory FlagListElement(M.VMRef vm, | 43 factory FlagListElement(M.VMRef vm, |
44 Stream<M.VMUpdateEvent> vmUpdates, | 44 M.EventRepository events, |
45 M.FlagsRepository repository, | 45 M.FlagsRepository repository, |
46 M.NotificationRepository notifications, | 46 M.NotificationRepository notifications, |
47 {RenderingQueue queue}) { | 47 {RenderingQueue queue}) { |
48 assert(vm != null); | 48 assert(vm != null); |
49 assert(vmUpdates != null); | 49 assert(events != null); |
50 assert(repository != null); | 50 assert(repository != null); |
51 assert(notifications != null); | 51 assert(notifications != null); |
52 FlagListElement e = document.createElement(tag.name); | 52 FlagListElement e = document.createElement(tag.name); |
53 e._r = new RenderingScheduler(e, queue: queue); | 53 e._r = new RenderingScheduler(e, queue: queue); |
54 e._vm = vm; | 54 e._vm = vm; |
55 e._vmUpdates = vmUpdates; | 55 e._events = events; |
56 e._repository = repository; | 56 e._repository = repository; |
57 e._notifications = notifications; | 57 e._notifications = notifications; |
58 return e; | 58 return e; |
59 } | 59 } |
60 | 60 |
61 FlagListElement.created() : super.created(); | 61 FlagListElement.created() : super.created(); |
62 | 62 |
63 @override | 63 @override |
64 void attached() { | 64 void attached() { |
65 super.attached(); | 65 super.attached(); |
| 66 _refresh(); |
66 _r.enable(); | 67 _r.enable(); |
67 _refresh(); | |
68 } | 68 } |
69 | 69 |
70 @override | 70 @override |
71 void detached() { | 71 void detached() { |
72 super.detached(); | 72 super.detached(); |
73 children = []; | 73 children = []; |
74 _r.disable(notify: true); | 74 _r.disable(notify: true); |
75 } | 75 } |
76 | 76 |
77 void render() { | 77 void render() { |
(...skipping 18 matching lines...) Expand all Loading... |
96 content.add(new HeadingElement.h2()..text = 'None'); | 96 content.add(new HeadingElement.h2()..text = 'None'); |
97 } else { | 97 } else { |
98 content.addAll(unmodified.expand(_renderFlag)); | 98 content.addAll(unmodified.expand(_renderFlag)); |
99 } | 99 } |
100 } | 100 } |
101 | 101 |
102 children = [ | 102 children = [ |
103 new NavBarElement(queue: _r.queue) | 103 new NavBarElement(queue: _r.queue) |
104 ..children = [ | 104 ..children = [ |
105 new NavTopMenuElement(queue: _r.queue), | 105 new NavTopMenuElement(queue: _r.queue), |
106 new NavVMMenuElement(_vm, _vmUpdates, queue: _r.queue), | 106 new NavVMMenuElement(_vm, _events, queue: _r.queue), |
107 new NavMenuElement('flags', link: Uris.flags(), last: true, | 107 new NavMenuElement('flags', link: Uris.flags(), last: true, |
108 queue: _r.queue), | 108 queue: _r.queue), |
109 new NavRefreshElement(queue: _r.queue) | 109 new NavRefreshElement(queue: _r.queue) |
110 ..onRefresh.listen((e) async { | 110 ..onRefresh.listen((e) async { |
111 e.element.disabled = true; | 111 e.element.disabled = true; |
112 try { | 112 try { |
113 await _refresh(); | 113 await _refresh(); |
114 } finally { | 114 } finally { |
115 e.element.disabled = false; | 115 e.element.disabled = false; |
116 } | 116 } |
117 }), | 117 }), |
118 new NavNotifyElement(_notifications, queue: _r.queue) | 118 new NavNotifyElement(_notifications, queue: _r.queue) |
119 ], | 119 ], |
120 new DivElement() | 120 new DivElement() |
121 ..classes = ['content-centered'] | 121 ..classes = ['content-centered'] |
122 ..children = content, | 122 ..children = content, |
123 new ViewFooterElement(queue: _r.queue) | 123 new ViewFooterElement(queue: _r.queue) |
124 ]; | 124 ]; |
125 } | 125 } |
126 | 126 |
127 Future _refresh() async { | 127 Future _refresh() { |
128 _flags = await _repository.list(_vm); | 128 return _repository.list().then((flags) { |
129 _r.dirty(); | 129 _flags = flags; |
| 130 _r.dirty(); |
| 131 }); |
130 } | 132 } |
131 | 133 |
132 static bool _isModified(M.Flag flag) => flag.modified; | 134 static bool _isModified(M.Flag flag) => flag.modified; |
133 static bool _isUnmodified(M.Flag flag) => !flag.modified; | 135 static bool _isUnmodified(M.Flag flag) => !flag.modified; |
134 | 136 |
135 static List<Element> _renderFlag(M.Flag flag) { | 137 static List<Element> _renderFlag(M.Flag flag) { |
136 return [ | 138 return [ |
137 new SpanElement()..classes = const ['comment'] | 139 new SpanElement()..classes = const ['comment'] |
138 ..text = '// ${flag.comment}', | 140 ..text = '// ${flag.comment}', |
139 new DivElement()..classes = flag.modified ? const ['flag', 'modified'] | 141 new DivElement()..classes = flag.modified ? const ['flag', 'modified'] |
140 : const ['flag', 'unmodified'] | 142 : const ['flag', 'unmodified'] |
141 ..children = [ | 143 ..children = [ |
142 new SpanElement()..classes = const ['name'] | 144 new SpanElement()..classes = const ['name'] |
143 ..text = flag.name, | 145 ..text = flag.name, |
144 new SpanElement()..text = '=', | 146 new SpanElement()..text = '=', |
145 new SpanElement()..classes = const ['value'] | 147 new SpanElement()..classes = const ['value'] |
146 ..text = flag.valueAsString ?? 'NULL' | 148 ..text = flag.valueAsString ?? 'NULL' |
147 ], | 149 ], |
148 new BRElement(), | 150 new BRElement(), |
149 ]; | 151 ]; |
150 } | 152 } |
151 } | 153 } |
OLD | NEW |