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

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

Issue 2310003004: Removed polymer & mirror from Observatory (Closed)
Patch Set: Fixed crash in heap-map page Created 4 years, 3 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) 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
3 // BSD-style license that can be found in the LICENSE file.
4
5 library observatory_element;
6
7 import 'dart:async';
8 import 'dart:html';
9 import 'package:observatory/app.dart';
10 import 'package:observatory/service.dart';
11 import 'package:polymer/polymer.dart';
12
13 /// Base class for all Observatory custom elements.
14 class ObservatoryElement extends PolymerElement {
15 ObservatoryElement.created() : super.created();
16
17 ObservatoryApplication get app => ObservatoryApplication.app;
18 Page get page => app.currentPage;
19
20 @override
21 void attached() {
22 super.attached();
23 _startPoll();
24 }
25
26 @override
27 void attributeChanged(String name, var oldValue, var newValue) {
28 super.attributeChanged(name, oldValue, newValue);
29 }
30
31 @override
32 void detached() {
33 super.detached();
34 _stopPoll();
35 }
36
37 @override
38 void ready() {
39 super.ready();
40 }
41
42 /// Set to a non-null value to enable polling on this element. When the poll
43 /// timer fires, onPoll will be called.
44 @observable Duration pollPeriod;
45 Timer _pollTimer;
46
47 /// Called every [pollPeriod] while the element is attached to the DOM.
48 void onPoll() { }
49
50 void pollPeriodChanged(oldValue) {
51 if (pollPeriod != null) {
52 _startPoll();
53 } else {
54 _stopPoll();
55 }
56 }
57
58 void _startPoll() {
59 if (pollPeriod == null) {
60 return;
61 }
62 if (_pollTimer != null) {
63 _pollTimer.cancel();
64 }
65 _pollTimer = new Timer(pollPeriod, _onPoll);
66 }
67
68 void _stopPoll() {
69 if (_pollTimer != null) {
70 _pollTimer.cancel();
71 }
72 _pollTimer = null;
73 }
74
75 void _onPoll() {
76 onPoll();
77 if (pollPeriod == null) {
78 // Stop polling.
79 _stopPoll();
80 return;
81 }
82 // Restart timer.
83 _pollTimer = new Timer(pollPeriod, _onPoll);
84 }
85
86 /// Utility method for handling on-click of <a> tags. Navigates
87 /// within the application using the [LocationManager].
88 void goto(MouseEvent event, var detail, Element target) {
89 app.locationManager.onGoto(event);
90 event.stopPropagation();
91 }
92
93 void onClickGoto(MouseEvent event) {
94 app.locationManager.onGoto(event);
95 event.stopPropagation();
96 }
97
98 String makeLink(String url, [ServiceObject obj]) {
99 if (obj != null) {
100 if (obj is Isolate) {
101 url = '${url}?isolateId=${Uri.encodeComponent(obj.id)}';
102 } else {
103 if (obj.id == null) {
104 // No id
105 return url;
106 }
107 url = ('${url}?isolateId=${Uri.encodeComponent(obj.isolate.id)}'
108 '&objectId=${Uri.encodeComponent(obj.id)}');
109 }
110 }
111 return url;
112 }
113
114 /// Create a link that can be consumed by [goto].
115 String gotoLink(String url, [ServiceObject obj]) {
116 return app.locationManager.makeLink(makeLink(url, obj));
117 }
118 String gotoLinkForwardingParameters(String url, [ServiceObject obj]) {
119 return app.locationManager.makeLinkForwardingParameters(makeLink(url, obj));
120 }
121
122 String formatTimePrecise(double time) => Utils.formatTimePrecise(time);
123 String formatTimeMilliseconds(int millis) =>
124 Utils.formatTimeMilliseconds(millis);
125 String formatTime(double time) => Utils.formatTime(time);
126
127 String formatSeconds(double x) => Utils.formatSeconds(x);
128
129
130 String formatSize(int bytes) => Utils.formatSize(bytes);
131
132 int parseInt(String value) => int.parse(value);
133
134 String asStringLiteral(String value, [bool wasTruncated=false]) {
135 var result = new List();
136 result.add("'".codeUnitAt(0));
137 for (int codeUnit in value.codeUnits) {
138 if (codeUnit == '\n'.codeUnitAt(0)) result.addAll('\\n'.codeUnits);
139 else if (codeUnit == '\r'.codeUnitAt(0)) result.addAll('\\r'.codeUnits);
140 else if (codeUnit == '\f'.codeUnitAt(0)) result.addAll('\\f'.codeUnits);
141 else if (codeUnit == '\b'.codeUnitAt(0)) result.addAll('\\b'.codeUnits);
142 else if (codeUnit == '\t'.codeUnitAt(0)) result.addAll('\\t'.codeUnits);
143 else if (codeUnit == '\v'.codeUnitAt(0)) result.addAll('\\v'.codeUnits);
144 else if (codeUnit == '\$'.codeUnitAt(0)) result.addAll('\\\$'.codeUnits);
145 else if (codeUnit == '\\'.codeUnitAt(0)) result.addAll('\\\\'.codeUnits);
146 else if (codeUnit == "'".codeUnitAt(0)) result.addAll("'".codeUnits);
147 else if (codeUnit < 32) {
148 var escapeSequence = "\\u" + codeUnit.toRadixString(16).padLeft(4, "0") ;
149 result.addAll(escapeSequence.codeUnits);
150 } else result.add(codeUnit);
151 }
152 if (wasTruncated) {
153 result.addAll("...".codeUnits);
154 } else {
155 result.add("'".codeUnitAt(0));
156 }
157 return new String.fromCharCodes(result);
158 }
159
160 void clearShadowRoot() {
161 // Remove all non-style elements.
162 // Have to do the following because removeWhere doesn't work on DOM child
163 // node lists. i.e. removeWhere((e) => e is! StyleElement);
164 var styleElements = [];
165 for (var child in shadowRoot.children) {
166 if (child is StyleElement) {
167 styleElements.add(child);
168 }
169 }
170 shadowRoot.children.clear();
171 for (var style in styleElements) {
172 shadowRoot.children.add(style);
173 }
174 }
175
176 void insertTextSpanIntoShadowRoot(String text) {
177 var spanElement = new SpanElement();
178 spanElement.text = text;
179 shadowRoot.children.add(spanElement);
180 }
181
182 void insertLinkIntoShadowRoot(String label, String href, [String title]) {
183 var anchorElement = new AnchorElement();
184 anchorElement.href = href;
185 anchorElement.text = label;
186 if (title != null) {
187 anchorElement.title = title;
188 }
189 anchorElement.onClick.listen(onClickGoto);
190 shadowRoot.children.add(anchorElement);
191 }
192 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698