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

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

Issue 2169313002: Converted Observatory vm-connect-target element (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Added Uris helper function 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/rendering_scheduler.dart';
9 import 'package:observatory/src/elements/helpers/tag.dart';
10 import 'package:observatory/src/elements/helpers/uris.dart';
11
12 class TargetEvent {
13 final M.Target target;
14
15 TargetEvent(this.target);
16 }
17
18 class VMConnectTargetElement extends HtmlElement implements Renderable{
19
20 static const tag =
21 const Tag<VMConnectTargetElement>('vm-connect-target-wrapped');
22
23 RenderingScheduler<VMConnectTargetElement> _r;
24
25 Stream<RenderedEvent<VMConnectTargetElement>> get onRendered => _r.onRendered;
26
27 final StreamController<TargetEvent> _onConnect =
28 new StreamController<TargetEvent>.broadcast();
29 Stream<TargetEvent> get onConnect => _onConnect.stream;
30 final StreamController<TargetEvent> _onDelete =
31 new StreamController<TargetEvent>.broadcast();
32 Stream<TargetEvent> get onDelete => _onDelete.stream;
33
34 M.Target _target;
35 bool _current;
36
37 M.Target get target => _target;
38 bool get current => _current;
39
40 factory VMConnectTargetElement(M.Target target, {bool current: false,
41 RenderingQueue queue}) {
42 assert(target != null);
43 assert(current != null);
44 VMConnectTargetElement e = document.createElement(tag.name);
45 e._r = new RenderingScheduler(e, queue: queue);
46 e._target = target;
47 e._current = current;
48 return e;
49 }
50
51 VMConnectTargetElement.created() : super.created();
52
53 @override
54 void attached() {
55 super.attached();
56 _r.enable();
57 }
58
59 @override
60 void detached() {
61 super.detached();
62 children = [];
63 _r.disable(notify: true);
64 }
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: Uris.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

Powered by Google App Engine
This is Rietveld 408576698