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

Side by Side Diff: packages/template_binding/lib/src/instance_binding_map.dart

Issue 2989763002: Update charted to 0.4.8 and roll (Closed)
Patch Set: Removed Cutch from list of reviewers Created 3 years, 4 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
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 part of template_binding;
6
7 class _InstanceBindingMap {
8 final List bindings;
9 List<_InstanceBindingMap> children;
10 DocumentFragment content;
11
12 bool get isTemplate => false;
13
14 _InstanceBindingMap(this.bindings);
15
16 _InstanceBindingMap getChild(int index) {
17 if (children == null || index >= children.length) return null;
18 return children[index];
19 }
20 }
21
22 class _TemplateBindingMap extends _InstanceBindingMap {
23 bool get isTemplate => true;
24
25 MustacheTokens _if, _bind, _repeat;
26
27 _TemplateBindingMap(List bindings) : super(bindings);
28 }
29
30 _InstanceBindingMap _createInstanceBindingMap(Node node,
31 BindingDelegate delegate) {
32
33 _InstanceBindingMap map = _getBindings(node, delegate);
34 if (map == null) map = new _InstanceBindingMap([]);
35
36 List children = null;
37 int index = 0;
38 for (var c = node.firstChild; c != null; c = c.nextNode, index++) {
39 var childMap = _createInstanceBindingMap(c, delegate);
40 if (childMap == null) continue;
41
42 // TODO(jmesserly): use a sparse map instead?
43 if (children == null) children = new List(node.nodes.length);
44 children[index] = childMap;
45 }
46 map.children = children;
47
48 return map;
49 }
50
51 Node _cloneAndBindInstance(Node node, Node parent, Document stagingDocument,
52 _InstanceBindingMap bindings, model, BindingDelegate delegate,
53 List instanceBindings, [TemplateInstance instanceRecord]) {
54
55 var clone = parent.append(stagingDocument.importNode(node, false));
56
57 int i = 0;
58 for (var c = node.firstChild; c != null; c = c.nextNode, i++) {
59 var childMap = bindings != null ? bindings.getChild(i) : null;
60 _cloneAndBindInstance(c, clone, stagingDocument, childMap, model, delegate,
61 instanceBindings);
62 }
63
64 if (bindings.isTemplate) {
65 TemplateBindExtension.decorate(clone, node);
66 if (delegate != null) {
67 templateBindFallback(clone).bindingDelegate = delegate;
68 }
69 }
70
71 _processBindings(clone, bindings, model, instanceBindings);
72 return clone;
73 }
74
75 // TODO(rafaelw): Setup a MutationObserver on content which clears the expando
76 // so that bindingMaps regenerate when template.content changes.
77 _getInstanceBindingMap(DocumentFragment content, BindingDelegate delegate) {
78 if (delegate == null) delegate = BindingDelegate._DEFAULT;
79
80 if (delegate._bindingMaps == null) delegate._bindingMaps = new Expando();
81 var map = delegate._bindingMaps[content];
82 if (map == null) {
83 map = _createInstanceBindingMap(content, delegate);
84 delegate._bindingMaps[content] = map;
85 }
86 return map;
87 }
OLDNEW
« no previous file with comments | « packages/template_binding/lib/src/binding_delegate.dart ('k') | packages/template_binding/lib/src/mustache_tokens.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698