Index: runtime/observatory/lib/src/elements/any_service_ref_wrapper.dart |
diff --git a/runtime/observatory/lib/src/elements/any_service_ref_wrapper.dart b/runtime/observatory/lib/src/elements/any_service_ref_wrapper.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9f5564e22b46be16de17e7ad9a2727fe980e9f6c |
--- /dev/null |
+++ b/runtime/observatory/lib/src/elements/any_service_ref_wrapper.dart |
@@ -0,0 +1,102 @@ |
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+import 'dart:html'; |
+import 'package:observatory/service_html.dart' show ServiceMap; |
+import 'package:observatory/src/elements/helpers/tag.dart'; |
+import 'package:observatory/src/elements/shims/binding.dart'; |
+ |
+class AnyServiceRefElementWrapper extends HtmlElement { |
+ |
+ static final binder = new Binder<AnyServiceRefElementWrapper>( |
+ const [const Binding('ref'), const Binding('expandKey'), |
+ const Binding('asValue')]); |
+ |
+ static const tag = const Tag<AnyServiceRefElementWrapper>('any-service-ref'); |
+ |
+ ServiceMap _ref; |
+ String _expandKey; |
+ bool _asValue; |
+ ServiceMap get ref => _ref; |
+ String get expandKey => _expandKey; |
+ bool get asValue => _asValue; |
+ void set ref(ServiceMap ref) { _ref = ref; render(); } |
+ void set expandKey(String expandKey) { _expandKey = expandKey; render(); } |
+ void set asValue(bool asValue) { _asValue = asValue; render(); } |
+ |
+ AnyServiceRefElementWrapper.created() : super.created() { |
+ binder.registerCallback(this); |
+ createShadowRoot(); |
+ render(); |
+ } |
+ |
+ @override |
+ void attached() { |
+ super.attached(); |
+ render(); |
+ } |
+ |
+ void render() { |
+ shadowRoot.children = []; |
+ if (_ref == null) return; |
+ |
+ shadowRoot.children.add(_constructElementForRef()); |
+ } |
+ |
+ Element _constructElementForRef() { |
+ var type = ref.type; |
+ switch (type) { |
+ case 'Class': |
+ var element = new Element.tag('class-ref'); |
+ element.ref = ref; |
+ element.asValue = asValue; |
+ return element; |
+ case 'Code': |
+ var element = new Element.tag('code-ref'); |
+ element.ref = ref; |
+ return element; |
+ case 'Context': |
+ var element = new Element.tag('context-ref'); |
+ element.ref = ref; |
+ return element; |
+ case 'Error': |
+ var element = new Element.tag('error-ref'); |
+ element.ref = ref; |
+ return element; |
+ case 'Field': |
+ var element = new Element.tag('field-ref'); |
+ element.ref = ref; |
+ return element; |
+ case 'Function': |
+ var element = new Element.tag('function-ref'); |
+ element.ref = ref; |
+ return element; |
+ case 'Library': |
+ var element = new Element.tag('library-ref'); |
+ element.ref = ref; |
+ element.asValue = asValue; |
+ return element; |
+ case 'Object': |
+ var element = new Element.tag('object-ref'); |
+ element.ref = ref; |
+ return element; |
+ case 'Script': |
+ var element = new Element.tag('script-ref'); |
+ element.ref = ref; |
+ return element; |
+ case 'Instance': |
+ case 'Sentinel': |
+ var element = new Element.tag('instance-ref'); |
+ element.ref = ref; |
+ if (expandKey != null) { |
+ element.expandKey = expandKey; |
+ } |
+ return element; |
+ default: |
+ SpanElement element = new Element.tag('span'); |
+ element.text = "<<Unknown service ref: $ref>>"; |
+ return element; |
+ } |
+ } |
+} |