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

Unified Diff: runtime/bin/vmservice/client/lib/src/elements/json_view.dart

Issue 221263002: Miscellaneous Observatory UI improvements (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: runtime/bin/vmservice/client/lib/src/elements/json_view.dart
diff --git a/runtime/bin/vmservice/client/lib/src/elements/json_view.dart b/runtime/bin/vmservice/client/lib/src/elements/json_view.dart
index 8aca30dc4c44c6e6c3532301e3e867d27fc5bf39..26b6954555e58bf45e40074108c3a7f4a37f25e7 100644
--- a/runtime/bin/vmservice/client/lib/src/elements/json_view.dart
+++ b/runtime/bin/vmservice/client/lib/src/elements/json_view.dart
@@ -6,55 +6,90 @@ library json_view_element;
import 'package:polymer/polymer.dart';
import 'observatory_element.dart';
+import 'package:observatory/service.dart';
-@CustomTag('json-view')
-class JsonViewElement extends ObservatoryElement {
- @published var json = null;
- var _count = 0;
-
- JsonViewElement.created() : super.created();
-
- void enteredView() {
- super.enteredView();
- _count = 0;
+class JsonPrettyPrinter {
+ String prettyPrint(ServiceMap map) {
+ _buffer.clear();
+ _buffer.write('{\n');
+ _printMap(map, 0);
+ _buffer.write('}\n');
+ return _buffer.toString();
}
- void jsonChanged(oldValue) {
- notifyPropertyChange(#valueType, "a", "b");
- }
-
- String get primitiveString {
- return json.toString();
+ void _printMap(ObservableMap map, int depth) {
+ if (_seen.contains(map)) {
+ return;
+ }
+ _seen.add(map);
+ for (var k in map.keys) {
+ var v = map[k];
+ if (v is Map) {
+ _writeIndent(depth);
+ _buffer.write('"$k": {\n');
+ _printMap(v, depth + 1);
+ _writeIndent(depth);
+ _buffer.write('}\n');
+ } else if (v is List) {
+ _writeIndent(depth);
+ _buffer.write('"$k": [\n');
+ _printList(v, depth + 1);
+ _writeIndent(depth);
+ _buffer.write(']\n');
+ } else {
+ _writeIndent(depth);
+ _buffer.write('"$k": $v');
+ _buffer.write('\n');
+ }
+ }
+ _seen.remove(map);
}
- String get valueType {
- if (json is Map) {
- return 'Map';
- } else if (json is List) {
- return 'List';
+ void _printList(ObservableList list, int depth) {
+ if (_seen.contains(list)) {
+ return;
+ }
+ _seen.add(list);
+ for (var v in list) {
+ if (v is Map) {
+ _writeIndent(depth);
+ _buffer.write('{\n');
+ _printMap(v, depth + 1);
+ _writeIndent(depth);
+ _buffer.write('}\n');
+ } else if (v is List) {
+ _writeIndent(depth);
+ _buffer.write('[\n');
+ _printList(v, depth + 1);
+ _writeIndent(depth);
+ _buffer.write(']\n');
+ } else {
+ _writeIndent(depth);
+ _buffer.write(v);
+ _buffer.write('\n');
+ }
}
- return 'Primitive';
+ _seen.remove(list);
}
- int get counter {
- return _count++;
+ void _writeIndent(int depth) {
+ const tab = ' '; // 2 spaces.
+ _buffer.write(depth * tab);
}
- List get list {
- if (json is List) {
- return json;
- }
- return [];
- }
+ final _buffer = new StringBuffer();
+ final _seen = new Set();
+}
- List get keys {
- if (json is Map) {
- return json.keys.toList();
- }
- return [];
- }
- dynamic value(String key) {
- return json[key];
+@CustomTag('json-view')
+class JsonViewElement extends ObservatoryElement {
+ @published ServiceMap map;
+ @observable String mapAsString;
+ JsonViewElement.created() : super.created();
+
+ void mapChanged(oldValue) {
+ var jpp = new JsonPrettyPrinter();
+ mapAsString = jpp.prettyPrint(map);
}
}

Powered by Google App Engine
This is Rietveld 408576698