From 5fdab52dd7c269f99839f4fa6b5854d9548269fa Mon Sep 17 00:00:00 2001 From: Igor Minar Date: Wed, 21 Mar 2012 15:16:41 -0700 Subject: feat(jqLite): make injector() and scope() work with the document object For typical app that has ng-app directive on the html element, we now can do: angular.element(document).injector() or .injector() angular.element(document).scope() or .scope() instead of: angular.element(document.getElementsByTagName('html')[0]).injector() ... --- src/jqLite.js | 7 +++++++ test/jqLiteSpec.js | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/src/jqLite.js b/src/jqLite.js index 79f22e62..007deaa8 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -279,6 +279,13 @@ function JQLiteController(element, name) { function JQLiteInheritedData(element, name, value) { element = jqLite(element); + + // if element is the document object work with the html element instead + // this makes $(document).scope() possible + if(element[0].nodeType == 9) { + element = element.find('html'); + } + while (element.length) { if (value = element.data(name)) return value; element = element.parent(); diff --git a/test/jqLiteSpec.js b/test/jqLiteSpec.js index fbe6edcb..afbb6836 100644 --- a/test/jqLiteSpec.js +++ b/test/jqLiteSpec.js @@ -107,6 +107,20 @@ describe('jqLite', function() { expect(deepChild.inheritedData('myData')).toBeFalsy(); dealoc(element); }); + + + it('should work with the child html element instead if the current element is the document obj', + function() { + var item = {}, + doc = jqLite(document), + html = doc.find('html'); + + html.data('item', item); + expect(doc.inheritedData('item')).toBe(item); + expect(html.inheritedData('item')).toBe(item); + dealoc(doc); + } + ); }); @@ -118,6 +132,18 @@ describe('jqLite', function() { dealoc(element); }); + it('should retrieve scope attached to the html element if its requested on the document', + function() { + var doc = jqLite(document), + html = doc.find('html'), + scope = {}; + + html.data('$scope', scope); + + expect(doc.scope()).toBe(scope); + expect(html.scope()).toBe(scope); + dealoc(doc); + }); it('should walk up the dom to find scope', function() { var element = jqLite(''); @@ -147,6 +173,27 @@ describe('jqLite', function() { expect(span.injector()).toBe(injector); dealoc(template); }); + + + it('should retrieve injector attached to the html element if its requested on document', + function() { + var doc = jqLite(document), + html = doc.find('html'), + injector = {}; + + html.data('$injector', injector); + + expect(doc.injector()).toBe(injector); + expect(html.injector()).toBe(injector); + dealoc(doc); + }); + + + it('should do nothing with a noncompiled template', function() { + var template = jqLite('
'); + expect(template.injector()).toBeUndefined(); + dealoc(template); + }); }); -- cgit v1.2.3