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

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

Issue 2160793004: Converted Observatory curly-block element (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: 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
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 curly_block_element; 5 library curly_block_element;
6 6
7 import 'package:polymer/polymer.dart'; 7 import 'dart:async';
8 import 'observatory_element.dart'; 8 import 'dart:html';
9 import 'package:observatory/src/elements/helpers/tag.dart';
10 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart';
9 11
10 @CustomTag('curly-block') 12 class CurlyBlockToggleEvent {
11 class CurlyBlockElement extends ObservatoryElement { 13 final CurlyBlockElement control;
12 CurlyBlockElement.created() : super.created();
13 14
14 @observable bool expanded = false; 15 CurlyBlockToggleEvent(this.control);
15 @observable bool busy = false; 16 }
16 @published var callback = null;
17 @published bool expand = false;
18 @published String expandKey;
19 17
20 void expandChanged(oldValue) { 18 class CurlyBlockElement extends HtmlElement implements Renderable {
21 expanded = expand; 19 static final StyleElement _style = () {
20 var style = new StyleElement();
21 style.text = 'span.curly-block {'
Cutch 2016/07/19 16:18:56 use ''' quotes and new lines.
cbernaschina 2016/07/19 16:36:01 Done.
22 ' color: #0489c3;'
23 ' cursor: pointer;'
24 '}'
25 'span.curly-block.disabled {'
26 ' color: white;'
27 ' cursor: wait;'
28 '}';
29 return style;
30 }();
31
32 static const tag = const Tag<CurlyBlockElement>('curly-block-wrapped');
33
34 RenderingScheduler<CurlyBlockElement> _r;
35
36 final StreamController<CurlyBlockToggleEvent> _onToggle;
37 final Stream<CurlyBlockToggleEvent> onToggle;
38 Stream<RenderedEvent<CurlyBlockElement>> get onRendered => _r.onRendered;
39
40 bool _expanded;
41 bool _disabled;
42
43 bool get expanded => _expanded;
44 set expanded(bool expanded) {
45 if (_expanded != expanded) {
46 _expanded = expanded;
47 _onToggle.add(new CurlyBlockToggleEvent(this));
48 _r.dirty();
49 } else {
50 _r.scheduleNotification();
51 }
22 } 52 }
23 53 bool get disabled => _disabled;
24 void expandKeyChanged(oldValue) { 54 set disabled(bool disabled) {
25 if (expandKey != null) { 55 if (_disabled != disabled) {
26 var value = app.expansions[expandKey]; 56 _disabled = disabled;
27 if (value != null) { 57 _r.dirty();
28 if (expanded != value) { 58 } else {
29 toggleExpand(null, null, null); 59 _r.scheduleNotification();
30 }
31 }
32 } 60 }
33 } 61 }
34 62
35 void doneCallback() { 63 factory CurlyBlockElement({bool expanded: false, bool disabled:false,
36 expanded = !expanded; 64 RenderingQueue queue}) {
37 if (expandKey != null) { 65 assert(expanded != null);
38 app.expansions[expandKey] = expanded; 66 assert(disabled != null);
39 } 67 CurlyBlockElement e = document.createElement(tag.name);
40 busy = false; 68 e._r = new RenderingScheduler(e, queue: queue);
69 e._expanded = expanded;
70 e._disabled = disabled;
71 return e;
41 } 72 }
42 73
43 void toggleExpand(var event, var b, var c) { 74 CurlyBlockElement.created()
44 assert(callback == null || expand == false); 75 : this._(new StreamController<CurlyBlockToggleEvent>());
45 if (busy) { 76
77 CurlyBlockElement._(StreamController<CurlyBlockToggleEvent> onToggle)
78 : super.created(),
79 this._onToggle = onToggle,
80 this.onToggle = onToggle.stream.asBroadcastStream() {
81 createShadowRoot();
82 }
83
84 @override
85 void attached() { super.attached(); _r.enable(); }
86
87 @override
88 void detached() {
89 super.detached(); _r.disable(notify: true);
90 shadowRoot.children = [];
91 }
92
93 void toggle() {
94 if (disabled) {
95 _r.scheduleNotification();
46 return; 96 return;
47 } 97 }
48 busy = true; 98 expanded = !expanded;
49 if (callback != null) { 99 }
50 callback(!expanded, doneCallback); 100
101 void render() {
102 List<Element> children = [
103 _style.clone(true),
104 new SpanElement()..text = '{'
105 ];
106 SpanElement label = new SpanElement()
107 ..classes = disabled ? ['curly-block', 'disabled'] : ['curly-block']
108 ..innerHtml = expanded ?
109 '&nbsp;&nbsp;&#8863;&nbsp;&nbsp;' : '&nbsp;&nbsp;&#8862;&nbsp;&nbsp;';
110 if (disabled) {
111 children.add(label);
51 } else { 112 } else {
52 doneCallback(); 113 children.add(new AnchorElement()
114 ..onClick.listen((_) { toggle(); })
115 ..children = [label]);
53 } 116 }
117 if (expanded) {
118 children.addAll([
119 new BRElement(),
120 new ContentElement()
121 ]);
122 }
123 children.add(new SpanElement()..text = '}');
124 shadowRoot.children = children;
54 } 125 }
55 } 126 }
OLDNEW
« no previous file with comments | « runtime/observatory/lib/src/elements/context_ref.html ('k') | runtime/observatory/lib/src/elements/curly_block.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698