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

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

Issue 2119733003: Wrapping leaf nodes in non polymer elements (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Converted vm-connect 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/src/elements/helpers/tag.dart';
8 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart';
9
10 class RefreshEvent {
11 final NavRefreshElement element;
12 RefreshEvent(this.element);
13 }
14
15 class NavRefreshElement extends HtmlElement implements Renderable {
16 static const tag = const Tag<NavRefreshElement>('nav-refresh-wrapped');
17
18 RenderingScheduler _r;
19
20 Stream<RenderedEvent<NavRefreshElement>> get onRendered => _r.onRendered;
21
22 final StreamController<RefreshEvent> _onRefresh;
23 final Stream<RefreshEvent> onRefresh;
24
25 bool _disabled;
26 String _label;
27 bool get disabled => _disabled;
28 String get label => _label;
29 set disabled(bool value) {
30 if (_disabled != value) {
31 _disabled = value;
32 _r.dirty();
33 } else {
34 _r.scheduleNotification();
35 }
36 }
37 set label(String value) {
38 if (_label != value) {
39 _label = value;
40 _r.dirty();
41 } else {
42 _r.scheduleNotification();
43 }
44 }
45
46
47 factory NavRefreshElement({String label: 'Refresh', bool disabled: false,
48 RenderingQueue queue}) {
49 assert(label != null);
50 assert(disabled != null);
51 NavRefreshElement e = document.createElement(tag.name);
52 e._r = new RenderingScheduler(e, queue: queue);
53 e._label = label;
54 e._disabled = disabled;
55 return e;
56 }
57
58 NavRefreshElement.created()
59 : this._(new StreamController<RefreshEvent>());
60
61 NavRefreshElement._(StreamController<RefreshEvent> onRefresh)
62 : super.created(),
63 this._onRefresh = onRefresh,
64 this.onRefresh = onRefresh.stream.asBroadcastStream();
65
66 @override
67 void attached() { super.attached(); _r.enable(); }
68
69 @override
70 void detached() { super.detached(); children = []; _r.disable(notify: true); }
71
72 void render() {
73 children = [
74 new LIElement()
75 ..children = [
76 new ButtonElement()
77 ..text = label
78 ..disabled = disabled
79 ..onClick.map(_toEvent).listen(_refresh)
80 ]
81 ];
82 }
83
84 RefreshEvent _toEvent(_) {
85 return new RefreshEvent(this);
86 }
87
88 void _refresh(RefreshEvent e) {
89 _onRefresh.add(e);
90 }
91 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698