| 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);
|
| }
|
| }
|
|
|