OLD | NEW |
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 script_inset_element; | 5 library script_inset_element; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:html'; | 8 import 'dart:html'; |
9 import 'observatory_element.dart'; | 9 import 'observatory_element.dart'; |
10 import 'service_ref.dart'; | 10 import 'service_ref.dart'; |
11 import 'package:observatory/service.dart'; | 11 import 'package:observatory/service.dart'; |
12 import 'package:polymer/polymer.dart'; | 12 import 'package:polymer/polymer.dart'; |
13 | 13 |
14 const nbsp = "\u00A0"; | 14 const nbsp = "\u00A0"; |
15 | 15 |
16 void addInfoBox(content, infoBox) { | 16 void addInfoBox(content, infoBox) { |
17 infoBox.style.position = 'absolute'; | 17 infoBox.style.position = 'absolute'; |
18 infoBox.style.padding = '1em'; | 18 infoBox.style.padding = '1em'; |
19 infoBox.style.border = 'solid black 2px'; | 19 infoBox.style.border = 'solid black 2px'; |
20 infoBox.style.zIndex = '10'; | 20 infoBox.style.zIndex = '10'; |
21 infoBox.style.backgroundColor = 'white'; | 21 infoBox.style.backgroundColor = 'white'; |
22 | 22 infoBox.style.cursor = 'auto'; |
23 infoBox.style.display = 'none'; // Initially hidden. | 23 infoBox.style.display = 'none'; // Initially hidden. |
24 | 24 |
25 var show = false; | 25 var show = false; |
26 content.onClick.listen((event) { | 26 content.onClick.listen((event) { |
27 show = !show; | 27 show = !show; |
28 infoBox.style.display = show ? 'block' : 'none'; | 28 infoBox.style.display = show ? 'block' : 'none'; |
| 29 content.style.backgroundColor = show ? 'white' : ''; |
29 }); | 30 }); |
30 | 31 |
31 // Causes infoBox to be positioned relative to the bottom-left of content. | 32 // Causes infoBox to be positioned relative to the bottom-left of content. |
32 content.style.display = 'inline-block'; | 33 content.style.display = 'inline-block'; |
| 34 content.style.cursor = 'pointer'; |
33 content.append(infoBox); | 35 content.append(infoBox); |
34 } | 36 } |
35 | 37 |
36 abstract class Annotation { | 38 abstract class Annotation { |
37 int line; | 39 int line; |
38 int columnStart; | 40 int columnStart; |
39 int columnStop; | 41 int columnStop; |
40 | 42 |
41 void applyStyleTo(element); | 43 void applyStyleTo(element); |
42 } | 44 } |
43 | 45 |
44 class CurrentExecutionAnnotation extends Annotation { | 46 class CurrentExecutionAnnotation extends Annotation { |
45 void applyStyleTo(element) { | 47 void applyStyleTo(element) { |
46 if (element == null) { | 48 if (element == null) { |
47 return; // TODO(rmacnak): Handling overlapping annotations. | 49 return; // TODO(rmacnak): Handling overlapping annotations. |
48 } | 50 } |
49 element.classes.add("currentCol"); | 51 element.classes.add("currentCol"); |
50 element.title = "Current execution"; | 52 element.title = "Current execution"; |
51 } | 53 } |
52 } | 54 } |
53 | 55 |
54 class CallSiteAnnotation extends Annotation { | 56 class CallSiteAnnotation extends Annotation { |
55 CallSite callSite; | 57 CallSite callSite; |
56 | 58 |
57 Element row() { | 59 Element row([content]) { |
58 var e = new DivElement(); | 60 var e = new DivElement(); |
59 e.style.display = "table-row"; | 61 e.style.display = "table-row"; |
| 62 if (content is String) e.text = content; |
60 return e; | 63 return e; |
61 } | 64 } |
62 | 65 |
63 Element cell(content) { | 66 Element cell(content) { |
64 var e = new DivElement(); | 67 var e = new DivElement(); |
65 e.style.display = "table-cell"; | 68 e.style.display = "table-cell"; |
66 e.style.padding = "3px"; | 69 e.style.padding = "3px"; |
67 if (content is String) e.text = content; | 70 if (content is String) e.text = content; |
68 if (content is Element) e.children.add(content); | 71 if (content is Element) e.children.add(content); |
69 return e; | 72 return e; |
70 } | 73 } |
71 | 74 |
72 Element serviceRef(object) { | 75 Element serviceRef(object) { |
73 AnyServiceRefElement e = new Element.tag("any-service-ref"); | 76 AnyServiceRefElement e = new Element.tag("any-service-ref"); |
74 e.ref = object; | 77 e.ref = object; |
75 return e; | 78 return e; |
76 } | 79 } |
77 | 80 |
78 Element entriesTable() { | 81 Element entriesTable() { |
79 var e = new DivElement(); | 82 var e = new DivElement(); |
80 e.style.display = "table"; | 83 e.style.display = "table"; |
81 e.style.color = "#333"; | 84 e.style.color = "#333"; |
82 e.style.font = "400 14px 'Montserrat', sans-serif"; | 85 e.style.font = "400 14px 'Montserrat', sans-serif"; |
83 | 86 |
84 var r = row(); | 87 if (callSite.entries.isEmpty) { |
85 r.append(cell("Container")); | 88 e.append(row('Did not execute')); |
86 r.append(cell("Count")); | 89 } else { |
87 r.append(cell("Target")); | 90 var r = row(); |
88 e.append(r); | 91 r.append(cell("Container")); |
| 92 r.append(cell("Count")); |
| 93 r.append(cell("Target")); |
| 94 e.append(r); |
89 | 95 |
90 for (var entry in callSite.entries) { | 96 for (var entry in callSite.entries) { |
91 var r = row(); | 97 var r = row(); |
92 r.append(cell(serviceRef(entry.receiverContainer))); | 98 r.append(cell(serviceRef(entry.receiverContainer))); |
93 r.append(cell(entry.count.toString())); | 99 r.append(cell(entry.count.toString())); |
94 r.append(cell(serviceRef(entry.target))); | 100 r.append(cell(serviceRef(entry.target))); |
95 e.append(r); | 101 e.append(r); |
| 102 } |
96 } | 103 } |
97 | 104 |
98 return e; | 105 return e; |
99 } | 106 } |
100 | 107 |
101 void applyStyleTo(element) { | 108 void applyStyleTo(element) { |
102 if (element == null) { | 109 if (element == null) { |
103 return; // TODO(rmacnak): Handling overlapping annotations. | 110 return; // TODO(rmacnak): Handling overlapping annotations. |
104 } | 111 } |
105 element.style.fontWeight = "bold"; | 112 element.style.fontWeight = "bold"; |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
400 pending.add(line.script.isolate.removeBreakpoint(bpt)); | 407 pending.add(line.script.isolate.removeBreakpoint(bpt)); |
401 } | 408 } |
402 Future.wait(pending).then((_) { | 409 Future.wait(pending).then((_) { |
403 busy = false; | 410 busy = false; |
404 }); | 411 }); |
405 } | 412 } |
406 } | 413 } |
407 | 414 |
408 BreakpointToggleElement.created() : super.created(); | 415 BreakpointToggleElement.created() : super.created(); |
409 } | 416 } |
OLD | NEW |