Skip to content

Commit 913e2a7

Browse files
fall back to body if parentSelector does not exist
1 parent 34ce693 commit 913e2a7

File tree

2 files changed

+27
-5
lines changed

2 files changed

+27
-5
lines changed

src/loading-bar.js

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -194,25 +194,31 @@ angular.module('cfp.loadingBar', [])
194194
$animate = $injector.get('$animate');
195195
}
196196

197-
// $document.find is limited to lookups by tag name in jqLite
198-
// https://docs.angularjs.org/api/ng/function/angular.element
199-
var $parent = angular.element($document[0].querySelector($parentSelector)).eq(0);
200197
$timeout.cancel(completeTimeout);
201198

202199
// do not continually broadcast the started event:
203200
if (started) {
204201
return;
205202
}
206203

204+
var parent = $document[0].querySelector($parentSelector);
205+
206+
if (! parent) {
207+
parent = $document[0].querySelector('body');
208+
}
209+
210+
var $parent = angular.element(parent);
211+
var $after = parent.lastChild && angular.element(parent.lastChild);
212+
207213
$rootScope.$broadcast('cfpLoadingBar:started');
208214
started = true;
209215

210216
if (includeBar) {
211-
$animate.enter(loadingBarContainer, $parent, $parent[0].lastChild && angular.element($parent[0].lastChild));
217+
$animate.enter(loadingBarContainer, $parent, $after);
212218
}
213219

214220
if (includeSpinner) {
215-
$animate.enter(spinner, $parent, $parent[0].lastChild && angular.element($parent[0].lastChild));
221+
$animate.enter(spinner, $parent, loadingBarContainer);
216222
}
217223

218224
_set(startSize);

test/loading-bar-interceptor-config.coffee

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,3 +96,19 @@ describe 'loadingBarInterceptor Service - config options', ->
9696
expect(children[1].id).toBe 'loading-bar-spinner'
9797
cfpLoadingBar.complete()
9898
$timeout.flush()
99+
100+
it 'should append the loading bar to the body if parentSelector is empty', ->
101+
module 'chieffancypants.loadingBar', (cfpLoadingBarProvider) ->
102+
cfpLoadingBarProvider.parentSelector = '#doesnotexist'
103+
return
104+
inject ($timeout, $document, cfpLoadingBar) ->
105+
parent = $document[0].querySelector(cfpLoadingBar.parentSelector)
106+
expect(parent).toBeFalsy;
107+
body = $document[0].querySelector 'body'
108+
cfpLoadingBar.start()
109+
bar = angular.element(body.querySelector '#loading-bar');
110+
spinner = angular.element(body.querySelector '#loading-bar-spinner');
111+
expect(bar.length).toBe 1
112+
expect(spinner.length).toBe 1
113+
cfpLoadingBar.complete()
114+
$timeout.flush()

0 commit comments

Comments
 (0)