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

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..b03322c7f7c34504791a8adecb58794f437e5463 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,97 @@ 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, int indent) {
+ _depth = 0;
+ _indent = _space * indent;
+ _buffer.clear();
+ _buffer.write(_indentForDepth);
+ _buffer.write('{\n');
+ _printMap(map);
+ _buffer.write(_indentForDepth);
+ _buffer.write('}\n');
+ return _buffer.toString();
}
- void jsonChanged(oldValue) {
- notifyPropertyChange(#valueType, "a", "b");
- }
-
- String get primitiveString {
- return json.toString();
+ void _printMap(ObservableMap map) {
+ if (_seen.contains(map)) {
+ return;
+ }
+ _seen.add(map);
+ _depth++;
+ for (var k in map.keys) {
+ var v = map[k];
+ if (v is Map) {
+ _buffer.write(_indentForDepth);
+ _buffer.write('"$k": {\n');
+ _printMap(v);
+ _buffer.write(_indentForDepth);
+ _buffer.write('}\n');
+ } else if (v is List) {
+ _buffer.write(_indentForDepth);
+ _buffer.write('"$k": [\n');
+ _printList(v);
+ _buffer.write(_indentForDepth);
+ _buffer.write(']\n');
+ } else {
+ _buffer.write(_indentForDepth);
+ _buffer.write('"$k": $v');
+ _buffer.write('\n');
+ }
+ }
+ _depth--;
turnidge 2014/04/01 19:42:48 The downside to using a member for _depth is that
Cutch 2014/04/02 18:26:52 Done.
+ _seen.remove(map);
}
- String get valueType {
- if (json is Map) {
- return 'Map';
- } else if (json is List) {
- return 'List';
+ void _printList(ObservableList list) {
+ if (_seen.contains(list)) {
+ return;
+ }
+ _seen.add(list);
+ _depth++;
+ for (var v in list) {
+ if (v is Map) {
+ _buffer.write(_indentForDepth);
+ _buffer.write('{\n');
+ _printMap(v);
+ _buffer.write(_indentForDepth);
+ _buffer.write('}\n');
+ } else if (v is List) {
+ _buffer.write(_indentForDepth);
+ _buffer.write('[\n');
+ _printList(v);
+ _buffer.write(_indentForDepth);
+ _buffer.write(']\n');
+ } else {
+ _buffer.write(_indentForDepth);
+ _buffer.write(v);
+ _buffer.write('\n');
+ }
}
- return 'Primitive';
+ _depth--;
+ _seen.remove(list);
}
- int get counter {
- return _count++;
- }
+ final _buffer = new StringBuffer();
+ final _seen = new Set();
+ static const String _space = ' ';
+ String _indent;
turnidge 2014/04/01 19:42:48 I would drop the _indent member and just hard-code
Cutch 2014/04/02 18:26:52 Done.
+ int _depth;
turnidge 2014/04/01 19:42:48 Delete _depth.
Cutch 2014/04/02 18:26:52 Done.
+ String get _indentForDepth => _indent * _depth;
turnidge 2014/04/01 19:42:48 Consider replacing with a function (_indent or _wr
Cutch 2014/04/02 18:26:52 Done.
+}
- List get list {
- if (json is List) {
- return json;
- }
- return [];
- }
- List get keys {
- if (json is Map) {
- return json.keys.toList();
- }
- return [];
- }
+@CustomTag('json-view')
+class JsonViewElement extends ObservatoryElement {
+ @published ServiceMap map;
+ @observable String mapAsString;
+ JsonViewElement.created() : super.created();
- dynamic value(String key) {
- return json[key];
+ void mapChanged(oldValue) {
+ var jpp = new JsonPrettyPrinter();
+ mapAsString = jpp.prettyPrint(map, 2);
}
}

Powered by Google App Engine
This is Rietveld 408576698