diff options
| author | Caitlin Potter | 2014-03-10 19:32:09 -0400 | 
|---|---|---|
| committer | Vojta Jina | 2014-03-21 11:42:17 -0700 | 
| commit | 98d825e10d3bf76f47e69abba857a8933c8cb7d9 (patch) | |
| tree | 16fdb10530d9fdc166c52d5730846aadf4ad6808 | |
| parent | 57b0d91fd88982ddcc002f038426685e85ce04b2 (diff) | |
| download | angular.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.js | 8 | ||||
| -rw-r--r-- | test/jqLiteSpec.js | 13 | 
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); +    });    }); | 
