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

Unified Diff: runtime/observatory/lib/src/elements/shims/binding.dart

Issue 2154343002: Added custom tags helper classes to the Observatory (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Fixed typos & Added comments Created 4 years, 5 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
« no previous file with comments | « runtime/observatory/lib/src/elements/helpers/tag.dart ('k') | runtime/observatory/web/index.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/observatory/lib/src/elements/shims/binding.dart
diff --git a/runtime/observatory/lib/src/elements/shims/binding.dart b/runtime/observatory/lib/src/elements/shims/binding.dart
new file mode 100644
index 0000000000000000000000000000000000000000..5e37609dc58bdead8bc05147a0909ed2ed45578b
--- /dev/null
+++ b/runtime/observatory/lib/src/elements/shims/binding.dart
@@ -0,0 +1,61 @@
+// Copyright (c) 2016, 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:core';
+import 'dart:html';
+import 'dart:js';
+import 'dart:mirrors';
+import 'package:js/js.dart';
+import 'package:js_util/js_util.dart';
+import 'package:polymer/polymer.dart';
+
+class Binding {
+ final String attribute;
+ final String property;
+ const Binding (attribute, [String property])
+ : attribute = attribute,
+ property = property == null ? attribute : property;
+}
+
+///This is a temporary bridge between Polymer Bindings and the wrapper entities.
+class Binder<T extends HtmlElement> {
+ final List<Binding> attributes;
+ final callback;
+
+ Binder(List<Binding> attributes)
+ : attributes = attributes,
+ callback = _createCallback(T, attributes);
+
+ registerCallback(T element) {
+ assert(element != null);
+ setValue(element, 'bind', callback);
+ }
+
+ static _createCallback(Type T, List<Binding> attributes){
+ final target = reflectClass(T);
+ final setters = <String, Symbol>{};
+ for (Binding binding in attributes){
+ var member = target.instanceMembers[new Symbol(binding.property + '=')];
+ if (!member.isSetter)
+ throw new ArgumentError(
+ '${binding.property} is not a Setter for class $T');
+ setters[binding.attribute] = new Symbol(binding.property);
+ }
+ return allowInteropCaptureThis((_this, name, value, [other]) {
+ final setter = setters[name];
+ if (setter == null) return;
+ Bindable bindable;
+ if (identical(1, 1.0)) { // dart2js
+ bindable = getValue(getValue(value, '__dartBindable'), 'o') as Bindable;
+ } else { // vm
+ bindable = getValue(value, '__dartBindable');
+ }
+ var obj = reflect(_this);
+ obj.setField(setter, bindable.value);
+ bindable.open((value) {
+ obj.setField(setter, value);
+ });
+ });
+ }
+}
« no previous file with comments | « runtime/observatory/lib/src/elements/helpers/tag.dart ('k') | runtime/observatory/web/index.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698