diff options
| -rw-r--r-- | src/bootstrap/bootstrap-prettify.js | 5 | ||||
| -rw-r--r-- | src/ngScenario/Application.js | 28 | ||||
| -rw-r--r-- | test/ngScenario/ApplicationSpec.js | 11 | 
3 files changed, 37 insertions, 7 deletions
diff --git a/src/bootstrap/bootstrap-prettify.js b/src/bootstrap/bootstrap-prettify.js index 026587a2..a9e61d4f 100644 --- a/src/bootstrap/bootstrap-prettify.js +++ b/src/bootstrap/bootstrap-prettify.js @@ -179,7 +179,8 @@ directive.ngEvalJavascript = ['getEmbeddedTemplate', function(getEmbeddedTemplat  }]; -directive.ngEmbedApp = ['$templateCache', '$browser', '$rootScope', '$location', function($templateCache, $browser, docsRootScope, $location) { +directive.ngEmbedApp = ['$templateCache', '$browser', '$rootScope', '$location', '$sniffer', +                function($templateCache,   $browser,  docsRootScope, $location,   $sniffer) {    return {      terminal: true,      link: function(scope, element, attrs) { @@ -189,6 +190,7 @@ directive.ngEmbedApp = ['$templateCache', '$browser', '$rootScope', '$location',          $provide.value('$templateCache', $templateCache);          $provide.value('$anchorScroll', angular.noop);          $provide.value('$browser', $browser); +        $provide.value('$sniffer', $sniffer);          $provide.provider('$location', function() {            this.$get = ['$rootScope', function($rootScope) {              docsRootScope.$on('$locationChangeSuccess', function(event, oldUrl, newUrl) { @@ -223,6 +225,7 @@ directive.ngEmbedApp = ['$templateCache', '$browser', '$rootScope', '$location',            event.preventDefault();          }        }); +        angular.bootstrap(element, modules);      }    }; diff --git a/src/ngScenario/Application.js b/src/ngScenario/Application.js index 2ca6c8fd..f7ce28cb 100644 --- a/src/ngScenario/Application.js +++ b/src/ngScenario/Application.js @@ -49,7 +49,7 @@ angular.scenario.Application.prototype.getWindow_ = function() {   */  angular.scenario.Application.prototype.navigateTo = function(url, loadFn, errorFn) {    var self = this; -  var frame = this.getFrame_(); +  var frame = self.getFrame_();    //TODO(esprehn): Refactor to use rethrow()    errorFn = errorFn || function(e) { throw e; };    if (url === 'about:blank') { @@ -57,21 +57,39 @@ angular.scenario.Application.prototype.navigateTo = function(url, loadFn, errorF    } else if (url.charAt(0) === '#') {      url = frame.attr('src').split('#')[0] + url;      frame.attr('src', url); -    this.executeAction(loadFn); +    self.executeAction(loadFn);    } else {      frame.remove(); -    this.context.find('#test-frames').append('<iframe>'); -    frame = this.getFrame_(); +    self.context.find('#test-frames').append('<iframe>'); +    frame = self.getFrame_(); + +    frame[0].contentWindow.name = "NG_DEFER_BOOTSTRAP!"; +      frame.load(function() {        frame.unbind();        try { +        var $window = self.getWindow_(); + +        if ($window.angular) { +          // Disable animations + +          // TODO(i): this doesn't disable javascript animations +          //          we don't need that for our tests, but it should be done +          $window.angular.resumeBootstrap([['$provide', function($provide) { +            $provide.decorator('$sniffer', function($delegate) { +              $delegate.supportsTransitions = false; +              return $delegate; +            }); +          }]]); +        } +          self.executeAction(loadFn);        } catch (e) {          errorFn(e);        }      }).attr('src', url);    } -  this.context.find('> h2 a').attr('href', url).text(url); +  self.context.find('> h2 a').attr('href', url).text(url);  };  /** diff --git a/test/ngScenario/ApplicationSpec.js b/test/ngScenario/ApplicationSpec.js index 0236b8d7..cb9fb478 100644 --- a/test/ngScenario/ApplicationSpec.js +++ b/test/ngScenario/ApplicationSpec.js @@ -9,11 +9,20 @@ describe('angular.scenario.Application', function() {    }    beforeEach(function() { +    document.body.innerHTML = '';      frames = _jQuery("<div></div>"); +    _jQuery(document.body).append(frames);      app = new angular.scenario.Application(frames);    }); -  it('should return new $window and $document after navigate', function() { + +  afterEach(function() { +    _jQuery('iframe').unbind(); // cleanup any leftover onload handlers +    document.body.innerHTML = ''; +  }); + + +  it('should return new $window and $document after navigateTo', function() {      var called;      var testWindow, testDocument, counter = 0;      app.getWindow_ = function() {  | 
