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

Side by Side Diff: runtime/observatory/lib/src/elements/vm_connect_target.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:async';
6 import 'dart:html';
7 import 'package:observatory/models.dart' as M show Target;
8 import 'package:observatory/src/elements/helpers/tag.dart';
9 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart';
10
11 class TargetEvent {
12 final M.Target target;
13
14 TargetEvent(this.target);
15 }
16
17 class VMConnectTargetElement extends HtmlElement implements Renderable{
18
19 static const tag =
20 const Tag<VMConnectTargetElement>('vm-connect-target');
21
22 RenderingScheduler<VMConnectTargetElement> _r;
23
24 Stream<RenderedEvent<VMConnectTargetElement>> get onRendered => _r.onRendered;
25
26 final StreamController<TargetEvent> _onConnect;
27 final Stream<TargetEvent> onConnect;
28 final StreamController<TargetEvent> _onDelete;
29 final Stream<TargetEvent> onDelete;
30
31 M.Target _target;
32 bool _current;
33
34 M.Target get target => _target;
35 bool get current => _current;
36
37 factory VMConnectTargetElement(M.Target target, {bool current: false,
38 RenderingQueue queue}) {
39 assert(target != null);
40 assert(current != null);
41 VMConnectTargetElement e = document.createElement(tag.name);
42 e._r = new RenderingScheduler(e, queue: queue);
43 e._target = target;
44 e._current = current;
45 return e;
46 }
47
48 VMConnectTargetElement.created()
49 : this._(new StreamController<TargetEvent>(),
50 new StreamController<TargetEvent>());
51
52 VMConnectTargetElement._(StreamController<TargetEvent> onConnect,
53 StreamController<TargetEvent> onDelete)
54 : super.created(),
55 this._onConnect = onConnect,
56 this.onConnect = onConnect.stream.asBroadcastStream(),
57 this._onDelete = onDelete,
58 this.onDelete = onDelete.stream.asBroadcastStream();
59
60 @override
61 void attached() { super.attached(); assert(target != null); _r.enable(); }
62
63 @override
64 void detached() { super.detached(); children = []; _r.disable(notify: true); }
65
66 void connect() {
67 _connect(new TargetEvent(target));
68 }
69
70 void delete() {
71 _delete(new TargetEvent(target));
72 }
73
74 void render() {
75 children = [
76 new AnchorElement(href: '#/vm')
77 ..text = current ? '${target.name} (Connected)' : '${target.name}'
78 ..onClick.where(_filter).map(_toEvent).listen(_connect),
79 new ButtonElement()
80 ..text = '✖ Remove' ..classes = ['delete-button']
81 ..onClick.map(_toEvent).listen(_delete)
82 ];
83 }
84
85 void _connect(TargetEvent e) {
86 _onConnect.add(e);
87 }
88
89 void _delete(TargetEvent e) {
90 _onDelete.add(e);
91 }
92
93 TargetEvent _toEvent(_) {
94 return new TargetEvent(target);
95 }
96
97 static bool _filter(MouseEvent event) {
98 return !(event.button > 0 || event.metaKey || event.ctrlKey ||
99 event.shiftKey || event.altKey);
100 }
101 }
OLDNEW
« no previous file with comments | « runtime/observatory/lib/src/elements/vm_connect.html ('k') | runtime/observatory/lib/src/elements/vm_ref.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698