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

Side by Side 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, 8 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 | Annotate | Revision Log
OLDNEW
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 json_view_element; 5 library json_view_element;
6 6
7 import 'package:polymer/polymer.dart'; 7 import 'package:polymer/polymer.dart';
8 import 'observatory_element.dart'; 8 import 'observatory_element.dart';
9 import 'package:observatory/service.dart';
10
11 class JsonPrettyPrinter {
12 String prettyPrint(ServiceMap map, int indent) {
13 _depth = 0;
14 _indent = _space * indent;
15 _buffer.clear();
16 _buffer.write(_indentForDepth);
17 _buffer.write('{\n');
18 _printMap(map);
19 _buffer.write(_indentForDepth);
20 _buffer.write('}\n');
21 return _buffer.toString();
22 }
23
24 void _printMap(ObservableMap map) {
25 if (_seen.contains(map)) {
26 return;
27 }
28 _seen.add(map);
29 _depth++;
30 for (var k in map.keys) {
31 var v = map[k];
32 if (v is Map) {
33 _buffer.write(_indentForDepth);
34 _buffer.write('"$k": {\n');
35 _printMap(v);
36 _buffer.write(_indentForDepth);
37 _buffer.write('}\n');
38 } else if (v is List) {
39 _buffer.write(_indentForDepth);
40 _buffer.write('"$k": [\n');
41 _printList(v);
42 _buffer.write(_indentForDepth);
43 _buffer.write(']\n');
44 } else {
45 _buffer.write(_indentForDepth);
46 _buffer.write('"$k": $v');
47 _buffer.write('\n');
48 }
49 }
50 _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.
51 _seen.remove(map);
52 }
53
54 void _printList(ObservableList list) {
55 if (_seen.contains(list)) {
56 return;
57 }
58 _seen.add(list);
59 _depth++;
60 for (var v in list) {
61 if (v is Map) {
62 _buffer.write(_indentForDepth);
63 _buffer.write('{\n');
64 _printMap(v);
65 _buffer.write(_indentForDepth);
66 _buffer.write('}\n');
67 } else if (v is List) {
68 _buffer.write(_indentForDepth);
69 _buffer.write('[\n');
70 _printList(v);
71 _buffer.write(_indentForDepth);
72 _buffer.write(']\n');
73 } else {
74 _buffer.write(_indentForDepth);
75 _buffer.write(v);
76 _buffer.write('\n');
77 }
78 }
79 _depth--;
80 _seen.remove(list);
81 }
82
83 final _buffer = new StringBuffer();
84 final _seen = new Set();
85 static const String _space = ' ';
86 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.
87 int _depth;
turnidge 2014/04/01 19:42:48 Delete _depth.
Cutch 2014/04/02 18:26:52 Done.
88 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.
89 }
90
9 91
10 @CustomTag('json-view') 92 @CustomTag('json-view')
11 class JsonViewElement extends ObservatoryElement { 93 class JsonViewElement extends ObservatoryElement {
12 @published var json = null; 94 @published ServiceMap map;
13 var _count = 0; 95 @observable String mapAsString;
14
15 JsonViewElement.created() : super.created(); 96 JsonViewElement.created() : super.created();
16 97
17 void enteredView() { 98 void mapChanged(oldValue) {
18 super.enteredView(); 99 var jpp = new JsonPrettyPrinter();
19 _count = 0; 100 mapAsString = jpp.prettyPrint(map, 2);
20 }
21
22 void jsonChanged(oldValue) {
23 notifyPropertyChange(#valueType, "a", "b");
24 }
25
26 String get primitiveString {
27 return json.toString();
28 }
29
30 String get valueType {
31 if (json is Map) {
32 return 'Map';
33 } else if (json is List) {
34 return 'List';
35 }
36 return 'Primitive';
37 }
38
39 int get counter {
40 return _count++;
41 }
42
43 List get list {
44 if (json is List) {
45 return json;
46 }
47 return [];
48 }
49
50 List get keys {
51 if (json is Map) {
52 return json.keys.toList();
53 }
54 return [];
55 }
56
57 dynamic value(String key) {
58 return json[key];
59 } 101 }
60 } 102 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698