OLD | NEW |
---|---|
(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 | |
8 import 'package:observatory/app.dart'; | |
9 import 'package:observatory/mocks.dart'; | |
10 import 'package:observatory/models.dart' as M; | |
11 import 'package:observatory/service.dart'; | |
12 import 'package:observatory/service_common.dart'; | |
13 import 'package:observatory/src/elements/helpers/tag.dart'; | |
14 import 'package:observatory/src/elements/shims/binding.dart'; | |
15 import 'package:observatory/src/elements/nav/vm_menu.dart'; | |
16 | |
17 class NavVMMenuElementWrapper extends HtmlElement { | |
18 static final binder = new Binder<NavVMMenuElementWrapper>( | |
19 const [const Binding('last'), const Binding('vm')]); | |
20 | |
21 static const tag = const Tag<NavVMMenuElementWrapper>('vm-nav-menu'); | |
22 | |
23 StreamSubscription _subscription; | |
24 StreamController<M.VMUpdateEvent> _updatesController = | |
25 new StreamController<M.VMUpdateEvent>.broadcast(); | |
26 | |
27 bool _last = false; | |
28 VM _vm; | |
29 bool get last => _last; | |
30 VM get vm => _vm; | |
31 set last(bool value) { | |
32 _last = value; render(); | |
33 } | |
34 set vm(VM value) { | |
35 _vm = value; _detached(); _attached(); | |
36 } | |
37 | |
38 NavVMMenuElementWrapper.created() : super.created() { | |
39 binder.registerCallback(this); | |
40 _last = !_isNullOrFalse(getAttribute('last')); | |
Cutch
2016/07/21 02:30:33
I think this needs a better name.
_last = attribu
cbernaschina
2016/07/21 17:28:16
What about:
_last = _getBoolAttribute('last');
?
cbernaschina
2016/07/21 18:32:17
Done.
| |
41 createShadowRoot(); | |
42 render(); | |
43 } | |
44 | |
45 @override | |
46 void attached() { | |
47 super.attached(); | |
48 _attached(); | |
49 } | |
50 | |
51 @override | |
52 void detached() { | |
53 super.detached(); | |
54 _detached(); | |
55 } | |
56 | |
57 void _attached() { | |
58 if (_vm != null) { | |
59 _subscription = _vm.changes.listen((_) { | |
60 _updatesController.add(new VMUpdateEventMock(vm: _vm)); | |
61 }); | |
62 } | |
63 render(); | |
64 } | |
65 | |
66 void _detached() { | |
67 if (_subscription != null) { | |
68 _subscription.cancel(); | |
69 _subscription = null; | |
70 } | |
71 } | |
72 | |
73 void render() { | |
74 shadowRoot.children = []; | |
75 if (_vm == null || _last == null) return; | |
76 | |
77 shadowRoot.children = [ | |
78 new NavVMMenuElement(vm, _updatesController.stream, last: last, | |
79 target: (vm as CommonWebSocketVM)?.target, | |
80 queue: ObservatoryApplication.app.queue) | |
81 ..children = [new ContentElement()] | |
82 ]; | |
83 } | |
84 | |
85 static bool _isNullOrFalse(String value) { | |
86 return value == null || value == 'false'; | |
87 } | |
88 } | |
OLD | NEW |