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

Unified Diff: pkg/mdv/lib/mdv.dart

Issue 17552019: Reorganize mdv and observe packages (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: merged Created 7 years, 6 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 | « no previous file | pkg/mdv/lib/src/bindings.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/mdv/lib/mdv.dart
diff --git a/pkg/mdv/lib/mdv.dart b/pkg/mdv/lib/mdv.dart
new file mode 100644
index 0000000000000000000000000000000000000000..f4423a75a6b1693a90273f05f52eb9e87b7e171e
--- /dev/null
+++ b/pkg/mdv/lib/mdv.dart
@@ -0,0 +1,100 @@
+// Copyright (c) 2013, 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.
+
+// TODO(jmesserly): more commentary here.
+/**
+ * This library provides access to Model-Driven-Views APIs on HTML elements.
+ * More information can be found at: <https://github.com/toolkitchen/mdv>.
+ */
+library mdv;
+
+import 'dart:async';
+import 'dart:collection';
+import 'dart:html';
+import 'dart:math' as math;
+import 'package:observe/observe.dart';
+
+part 'src/bindings.dart';
+part 'src/element.dart';
+part 'src/input_element.dart';
+part 'src/node.dart';
+part 'src/template.dart';
+part 'src/text.dart';
+
+/** Initialize the Model-Driven Views polyfill. */
+void initialize() {
+ TemplateElement.mdvPackage = _mdv;
+}
+
+StreamController<DocumentFragment> _instanceCreated;
+
+/**
+ * *Warning*: This is an implementation helper for Model-Driven Views and
+ * should not be used in your code.
+ *
+ * This event is fired whenever a template is instantiated via
+ * [Element.createInstance].
+ */
+// TODO(rafaelw): This is a hack, and is neccesary for the polyfill
+// because custom elements are not upgraded during clone()
+Stream<DocumentFragment> get instanceCreated {
+ if (_instanceCreated == null) {
+ _instanceCreated =
+ new StreamController<DocumentFragment>(sync: true);
+ }
+ return _instanceCreated.stream;
+}
+
+/**
+ * Binds all mustaches recursively starting from the [root] node.
+ *
+ * Note: this is not an official Model-Driven-Views API; it is intended to
+ * support binding the [ShadowRoot]'s content to a model.
+ */
+// TODO(jmesserly): this is needed to avoid two <template> nodes when using
+// bindings in a custom element's template. See also:
+// https://github.com/polymer-project/polymer/blob/master/src/bindMDV.js#L68
+// Called from:
+// https://github.com/polymer-project/polymer/blob/master/src/register.js#L99
+void bindModel(Node root, model, [CustomBindingSyntax syntax]) {
+ _Bindings._addBindings(root, model, syntax);
+}
+
+
+// TODO(jmesserly): investigate if expandos give us enough performance.
+
+// The expando for storing our MDV wrappers.
+//
+// In general, we need state associated with the nodes. Rather than having a
+// bunch of individual expandos, we keep one per node.
+//
+// Aside from the potentially helping performance, it also keeps things simpler
+// if we decide to integrate MDV into the DOM later, and means less code needs
+// to worry about expandos.
+final Expando _mdvExpando = new Expando('mdv');
+
+_mdv(node) {
+ var wrapper = _mdvExpando[node];
+ if (wrapper != null) return wrapper;
+
+ if (node is InputElement) {
+ wrapper = new _InputElementExtension(node);
+ } else if (node is Element) {
+ if (node.isTemplate) {
+ wrapper = new _TemplateExtension(node);
+ } else {
+ wrapper = new _ElementExtension(node);
+ }
+ } else if (node is Text) {
+ wrapper = new _TextExtension(node);
+ } else if (node is Node) {
+ wrapper = new _NodeExtension(node);
+ } else {
+ // TODO(jmesserly): this happens for things like CompoundBinding.
+ wrapper = node;
+ }
+
+ _mdvExpando[node] = wrapper;
+ return wrapper;
+}
« no previous file with comments | « no previous file | pkg/mdv/lib/src/bindings.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698