aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCaitlin Potter2014-03-10 19:32:09 -0400
committerVojta Jina2014-03-21 11:42:17 -0700
commit98d825e10d3bf76f47e69abba857a8933c8cb7d9 (patch)
tree16fdb10530d9fdc166c52d5730846aadf4ad6808
parent57b0d91fd88982ddcc002f038426685e85ce04b2 (diff)
downloadangular.js-98d825e10d3bf76f47e69abba857a8933c8cb7d9.tar.bz2
fix(jqLite): traverse `host` property for DocumentFragment in inheritedData()
If dealing with a document fragment node with a host element, and no parent, use the host element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM to lookup parent controllers. Closes #6637
-rw-r--r--src/jqLite.js8
-rw-r--r--test/jqLiteSpec.js13
2 files changed, 19 insertions, 2 deletions
diff --git a/src/jqLite.js b/src/jqLite.js
index ba613f21..738f47a9 100644
--- a/src/jqLite.js
+++ b/src/jqLite.js
@@ -364,11 +364,15 @@ function jqLiteInheritedData(element, name, value) {
var names = isArray(name) ? name : [name];
while (element.length) {
-
+ var node = element[0];
for (var i = 0, ii = names.length; i < ii; i++) {
if ((value = element.data(names[i])) !== undefined) return value;
}
- element = element.parent();
+
+ // If dealing with a document fragment node with a host element, and no parent, use the host
+ // element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM
+ // to lookup parent controllers.
+ element = jqLite(node.parentNode || (node.nodeType === 11 && node.host));
}
}
diff --git a/test/jqLiteSpec.js b/test/jqLiteSpec.js
index 482c05f4..faf1c98c 100644
--- a/test/jqLiteSpec.js
+++ b/test/jqLiteSpec.js
@@ -168,6 +168,19 @@ describe('jqLite', function() {
dealoc(ul);
});
+
+ it('should pass through DocumentFragment boundaries via host', function() {
+ var host = jqLite('<div></div>'),
+ frag = document.createDocumentFragment(),
+ $frag = jqLite(frag);
+ frag.host = host[0];
+ host.data("foo", 123);
+ host.append($frag);
+ expect($frag.inheritedData("foo")).toBe(123);
+
+ dealoc(host);
+ dealoc($frag);
+ });
});