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

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: 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/service_html.dart';
8 import 'helpers/tag.dart';
9
10 class WebSocketVMTargetEvent {
11 final WebSocketVMTarget target;
12
13 WebSocketVMTargetEvent(this.target);
14 }
15
16 class VmConnectTargetElement extends HtmlElement {
17 static final StyleElement _style = () {
18 var style = new StyleElement();
19 style.text = '.delete-button {'
20 ' padding: 4px;'
21 ' background: transparent;'
22 ' border: none !important;'
23 '}'
24 '.delete-button:hover {'
25 ' background: #ff0000;'
26 '}';
27 return style;
28 }();
29
30 static const tag =
31 const Tag<VmConnectTargetElement>('vm-connect-target-wrapped');
32
33 final StreamController<WebSocketVMTargetEvent> _onConnect =
34 new StreamController<WebSocketVMTargetEvent>();
35 Stream<WebSocketVMTargetEvent> get onConnect => _onConnect.stream;
36 final StreamController<WebSocketVMTargetEvent> _onDelete =
37 new StreamController<WebSocketVMTargetEvent>();
38 Stream<WebSocketVMTargetEvent> get onDelete => _onDelete.stream;
39
40 WebSocketVMTarget target;
41 bool isCurrent;
42
43 factory VmConnectTargetElement({WebSocketVMTarget target,
44 bool isCurrent: false}) {
45 VmConnectTargetElement e = document.createElement(tag.name);
46 if (target != null) e.target = target;
47 e.isCurrent = isCurrent || false;
48 return e;
49 }
50
51 VmConnectTargetElement.created() : super.created() {
52 createShadowRoot();
53 }
54
55 @override
56 void attached() {
57 super.attached();
58 render();
59 }
60
61 void connect() {
62 _connect(new WebSocketVMTargetEvent(target));
63 }
64
65 void delete() {
66 _delete(new WebSocketVMTargetEvent(target));
67 }
68
69 void render() {
70 if (target == null) return;
71
72 shadowRoot.children = [
73 _style.clone(true),
74 new AnchorElement(href: '#/vm')
75 ..text = isCurrent ? '${target.name} (Connected)' : '${target.name}'
76 ..onClick.where(_filter).map(_toEvent).listen(_connect),
77 new ButtonElement()
78 ..text = '✖ Remove' ..classes = ['delete-button']
79 ..onClick.map(_toEvent).listen(_delete)
80 ];
81 }
82
83 void _connect(WebSocketVMTargetEvent e) {
84 if (_onConnect.hasListener) {
85 _onConnect.add(e);
86 }
87 }
88
89 void _delete(WebSocketVMTargetEvent e) {
90 if (_onDelete.hasListener) {
91 _onDelete.add(e);
92 }
93 }
94
95 WebSocketVMTargetEvent _toEvent(_) {
96 return new WebSocketVMTargetEvent(target);
97 }
98
99 static bool _filter(MouseEvent event) {
100 return !(event.button > 0 || event.metaKey || event.ctrlKey ||
101 event.shiftKey || event.altKey);
102 }
103 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698