Skip to content

Commit

Permalink
fix($ionicLoading): make hideOnStateChange work if loader is delayed
Browse files Browse the repository at this point in the history
Closes #3022.
  • Loading branch information
ajoslin committed Feb 6, 2015
1 parent 2f30786 commit 878c817
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 24 deletions.
43 changes: 21 additions & 22 deletions js/angular/service/loading.js
Original file line number Diff line number Diff line change
Expand Up @@ -111,30 +111,28 @@ function($ionicLoadingConfig, $ionicBody, $ionicTemplateLoader, $ionicBackdrop,
template: LOADING_TPL,
appendTo: $ionicBody.get()
})
.then(function(loader) {
var self = loader;

loader.show = function(options) {
.then(function(self) {
self.show = function(options) {
var templatePromise = options.templateUrl ?
$ionicTemplateLoader.load(options.templateUrl) :
//options.content: deprecated
$q.when(options.template || options.content || '');

self.scope = options.scope || self.scope;

if (!this.isShown) {
if (!self.isShown) {
//options.showBackdrop: deprecated
this.hasBackdrop = !options.noBackdrop && options.showBackdrop !== false;
if (this.hasBackdrop) {
self.hasBackdrop = !options.noBackdrop && options.showBackdrop !== false;
if (self.hasBackdrop) {
$ionicBackdrop.retain();
$ionicBackdrop.getElement().addClass('backdrop-loading');
}
}

if (options.duration) {
$timeout.cancel(this.durationTimeout);
this.durationTimeout = $timeout(
angular.bind(this, this.hide),
$timeout.cancel(self.durationTimeout);
self.durationTimeout = $timeout(
angular.bind(self, self.hide),
+options.duration
);
}
Expand Down Expand Up @@ -165,13 +163,13 @@ function($ionicLoadingConfig, $ionicBody, $ionicTemplateLoader, $ionicBackdrop,
}
});

this.isShown = true;
self.isShown = true;
};
loader.hide = function() {
self.hide = function() {

deregisterBackAction();
if (this.isShown) {
if (this.hasBackdrop) {
if (self.isShown) {
if (self.hasBackdrop) {
$ionicBackdrop.release();
$ionicBackdrop.getElement().removeClass('backdrop-loading');
}
Expand All @@ -181,11 +179,11 @@ function($ionicLoadingConfig, $ionicBody, $ionicTemplateLoader, $ionicBackdrop,
!self.isShown && self.element.removeClass('visible');
}, 200);
}
$timeout.cancel(this.durationTimeout);
this.isShown = false;
$timeout.cancel(self.durationTimeout);
self.isShown = false;
};

return loader;
return self;
});
}
return loaderInstance;
Expand All @@ -195,14 +193,15 @@ function($ionicLoadingConfig, $ionicBody, $ionicTemplateLoader, $ionicBackdrop,
options = extend({}, $ionicLoadingConfig || {}, options || {});
var delay = options.delay || options.showDelay || 0;

deregisterStateListener();
if (options.hideOnStateChange) {
deregisterStateListener = $rootScope.$on('$stateChangeSuccess', hideLoader);
}

//If loading.show() was called previously, cancel it and show with our new options
loadingShowDelay && $timeout.cancel(loadingShowDelay);
$timeout.cancel(loadingShowDelay);
loadingShowDelay = $timeout(noop, delay);

loadingShowDelay.then(getLoader).then(function(loader) {
if (options.hideOnStateChange) {
deregisterStateListener = $rootScope.$on('$stateChangeSuccess', hideLoader);
}
return loader.show(options);
});

Expand Down
2 changes: 0 additions & 2 deletions test/unit/angular/service/loading.unit.js
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,6 @@ describe('$ionicLoading service', function() {
template: ''
});
spyOn(loader, 'hide');
$timeout.flush();
$rootScope.$broadcast('$stateChangeSuccess');
$rootScope.$apply();
expect(loader.hide).toHaveBeenCalled();
Expand All @@ -213,7 +212,6 @@ describe('$ionicLoading service', function() {
template: ''
});
spyOn(loader, 'hide');
$timeout.flush();
$rootScope.$broadcast('$stateChangeSuccess');
$rootScope.$apply();
expect(loader.hide).not.toHaveBeenCalled();
Expand Down

0 comments on commit 878c817

Please sign in to comment.