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

Unified Diff: third_party/pkg/angular/lib/core_dom/tagging_view_factory.dart

Issue 257423008: Update all Angular libs (run update_all.sh). (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 side-by-side diff with in-line comments
Download patch
Index: third_party/pkg/angular/lib/core_dom/tagging_view_factory.dart
diff --git a/third_party/pkg/angular/lib/core_dom/tagging_view_factory.dart b/third_party/pkg/angular/lib/core_dom/tagging_view_factory.dart
new file mode 100644
index 0000000000000000000000000000000000000000..d6ebe1bbf34935cab20439fee9d40d480f895f4d
--- /dev/null
+++ b/third_party/pkg/angular/lib/core_dom/tagging_view_factory.dart
@@ -0,0 +1,87 @@
+part of angular.core.dom_internal;
+
+class TaggingViewFactory implements ViewFactory {
+ final List<TaggedElementBinder> elementBinders;
+ final List<dom.Node> templateNodes;
+ final Profiler _perf;
+
+ TaggingViewFactory(this.templateNodes, this.elementBinders, this._perf);
+
+ BoundViewFactory bind(Injector injector) =>
+ new BoundViewFactory(this, injector);
+
+ View call(Injector injector, [List<dom.Node> nodes /* TODO: document fragment */]) {
+ if (nodes == null) {
+ nodes = cloneElements(templateNodes);
+ }
+ var timerId;
+ try {
+ assert((timerId = _perf.startTimer('ng.view')) != false);
+ var view = new View(nodes, injector.get(EventHandler));
+ _link(view, nodes, elementBinders, injector);
+ return view;
+ } finally {
+ assert(_perf.stopTimer(timerId) != false);
+ }
+ }
+
+ _bindTagged(TaggedElementBinder tagged, rootInjector, elementBinders, View view, boundNode) {
+ var binder = tagged.binder;
+ var parentInjector = tagged.parentBinderOffset == -1 ? rootInjector : elementBinders[tagged.parentBinderOffset].injector;
+ assert(parentInjector != null);
+
+ tagged.injector = binder != null ? binder.bind(view, parentInjector, boundNode) : parentInjector;
+
+ if (tagged.textBinders != null) {
+ for (var k = 0, kk = tagged.textBinders.length; k < kk; k++) {
+ TaggedTextBinder taggedText = tagged.textBinders[k];
+ taggedText.binder.bind(view, tagged.injector, boundNode.childNodes[taggedText.offsetIndex]);
+ }
+ }
+ }
+
+ View _link(View view, List<dom.Node> nodeList, List elementBinders, Injector rootInjector) {
+ var directiveDefsByName = {};
+
+ var elementBinderIndex = 0;
+ for (int i = 0, ii = nodeList.length; i < ii; i++) {
+ var node = nodeList[i];
+
+ // if node isn't attached to the DOM, create a parent for it.
+ var parentNode = node.parentNode;
+ var fakeParent = false;
+ if (parentNode == null) {
+ fakeParent = true;
+ parentNode = new dom.DivElement();
+ parentNode.append(node);
+ }
+
+ if (node.nodeType == 1) {
+ var elts = node.querySelectorAll('.ng-binding');
+ // HACK: querySelectorAll doesn't return the node.
+ var startIndex = node.classes.contains('ng-binding') ? -1 : 0;
+ for (int j = startIndex, jj = elts.length; j < jj; j++, elementBinderIndex++) {
+ TaggedElementBinder tagged = elementBinders[elementBinderIndex];
+ var boundNode = j == -1 ? node : elts[j];
+
+ _bindTagged(tagged, rootInjector, elementBinders, view, boundNode);
+ }
+ } else if (node.nodeType == 3 || node.nodeType == 8) {
+ TaggedElementBinder tagged = elementBinders[elementBinderIndex];
+ assert(tagged.binder != null || tagged.isTopLevel);
+ if (tagged.binder != null) {
+ _bindTagged(tagged, rootInjector, elementBinders, view, node);
+ }
+ elementBinderIndex++;
+ } else {
+ throw "nodeType sadness ${node.nodeType}}";
+ }
+
+ if (fakeParent) {
+ // extract the node from the parentNode.
+ nodeList[i] = parentNode.nodes[0];
+ }
+ }
+ return view;
+ }
+}
« no previous file with comments | « third_party/pkg/angular/lib/core_dom/tagging_compiler.dart ('k') | third_party/pkg/angular/lib/core_dom/template_cache.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698