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

Side by Side Diff: pkg/template_binding/lib/src/template.dart

Issue 355133002: switch Node.bind to interop (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 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 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. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of template_binding; 5 part of template_binding;
6 6
7 /** Extensions to [Element]s that behave as templates. */ 7 /** Extensions to [Element]s that behave as templates. */
8 class TemplateBindExtension extends _ElementExtension { 8 class TemplateBindExtension extends NodeBindExtension {
9 var _model; 9 var _model;
10 BindingDelegate _bindingDelegate; 10 BindingDelegate _bindingDelegate;
11 _TemplateIterator _iterator; 11 _TemplateIterator _iterator;
12 bool _setModelScheduled = false; 12 bool _setModelScheduled = false;
13 13
14 Element _templateInstanceRef; 14 Element _templateInstanceRef;
15 15
16 // Note: only used if `this is! TemplateElement` 16 // Note: only used if `this is! TemplateElement`
17 DocumentFragment _content; 17 DocumentFragment _content;
18 bool _templateIsDecorated; 18 bool _templateIsDecorated;
19 19
20 HtmlDocument _stagingDocument; 20 HtmlDocument _stagingDocument;
21 21
22 _InstanceBindingMap _bindingMap; 22 _InstanceBindingMap _bindingMap;
23 23
24 Node _refContent; 24 Node _refContent;
25 25
26 TemplateBindExtension._(Element node) : super(node); 26 TemplateBindExtension._(Element node) : super._(node);
27 27
28 Element get _node => super._node; 28 Element get _node => super._node;
29 29
30 TemplateBindExtension get _self => super._node is TemplateBindExtension 30 TemplateBindExtension get _self => _node is TemplateBindExtension
31 ? _node : this; 31 ? _node : this;
32 32
33 Bindable bind(String name, value, {bool oneTime: false}) { 33 Bindable bind(String name, value, {bool oneTime: false}) {
34 if (name != 'ref') return super.bind(name, value, oneTime: oneTime); 34 if (name != 'ref') return super.bind(name, value, oneTime: oneTime);
35 35
36
37 var ref = oneTime ? value : value.open((ref) { 36 var ref = oneTime ? value : value.open((ref) {
38 _node.attributes['ref'] = ref; 37 _node.attributes['ref'] = ref;
39 _refChanged(); 38 _refChanged();
40 }); 39 });
41 40
42 _node.attributes['ref'] = ref; 41 _node.attributes['ref'] = ref;
43 _refChanged(); 42 _refChanged();
44 if (oneTime) return null; 43 if (oneTime) return null;
45 44
46 return _updateBindings('ref', value); 45 if (bindings == null) bindings = {};
46 return bindings['ref'] = value;
47 } 47 }
48 48
49 _TemplateIterator _processBindingDirectives(_TemplateBindingMap directives) { 49 _TemplateIterator _processBindingDirectives(_TemplateBindingMap directives) {
50 if (_iterator != null) _iterator._closeDependencies(); 50 if (_iterator != null) _iterator._closeDependencies();
51 51
52 if (directives._if == null && 52 if (directives._if == null &&
53 directives._bind == null && 53 directives._bind == null &&
54 directives._repeat == null) { 54 directives._repeat == null) {
55 55
56 if (_iterator != null) { 56 if (_iterator != null) {
(...skipping 14 matching lines...) Expand all
71 71
72 return _iterator; 72 return _iterator;
73 } 73 }
74 74
75 /** 75 /**
76 * Creates an instance of the template, using the provided [model] and 76 * Creates an instance of the template, using the provided [model] and
77 * optional binding [delegate]. 77 * optional binding [delegate].
78 * 78 *
79 * If [instanceBindings] is supplied, each [Bindable] in the returned 79 * If [instanceBindings] is supplied, each [Bindable] in the returned
80 * instance will be added to the list. This makes it easy to close all of the 80 * instance will be added to the list. This makes it easy to close all of the
81 * bindings without walking the tree. This is not normally necesssary, but is 81 * bindings without walking the tree. This is not normally necessary, but is
82 * used internally by the system. 82 * used internally by the system.
83 */ 83 */
84 DocumentFragment createInstance([model, BindingDelegate delegate]) { 84 DocumentFragment createInstance([model, BindingDelegate delegate]) {
85 if (delegate == null) delegate = _bindingDelegate; 85 if (delegate == null) delegate = _bindingDelegate;
86 if (_refContent == null) _refContent = templateBind(_ref).content; 86 if (_refContent == null) _refContent = templateBind(_ref).content;
87 87
88 var content = _refContent; 88 var content = _refContent;
89 if (content.firstChild == null) return _emptyInstance; 89 if (content.firstChild == null) return _emptyInstance;
90 90
91 final map = _getInstanceBindingMap(content, delegate); 91 final map = _getInstanceBindingMap(content, delegate);
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 } 519 }
520 520
521 _getInstanceRoot(node) { 521 _getInstanceRoot(node) {
522 while (node.parentNode != null) { 522 while (node.parentNode != null) {
523 node = node.parentNode; 523 node = node.parentNode;
524 } 524 }
525 _InstanceExtension instance = _instanceExtension[node]; 525 _InstanceExtension instance = _instanceExtension[node];
526 return instance != null && instance._templateCreator != null ? node : null; 526 return instance != null && instance._templateCreator != null ? node : null;
527 } 527 }
528 528
529 // Note: JS code tests that getElementById is present. We can't do that
530 // easily, so instead check for the types known to implement it.
531 bool _hasGetElementById(Node node) =>
532 node is Document || node is ShadowRoot || node is SvgSvgElement;
533
529 final Expando<_InstanceExtension> _instanceExtension = new Expando(); 534 final Expando<_InstanceExtension> _instanceExtension = new Expando();
530 535
531 final _isStagingDocument = new Expando(); 536 final _isStagingDocument = new Expando();
OLDNEW
« no previous file with comments | « pkg/template_binding/lib/src/select_element.dart ('k') | pkg/template_binding/lib/src/text.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698