Skip to content

Commit 6b4c469

Browse files
Merge pull request #244 from stefanotorresi/patch-218
Allow empty parentSelector
2 parents 2eb411c + 94fe2cd commit 6b4c469

File tree

2 files changed

+48
-3
lines changed

2 files changed

+48
-3
lines changed

src/loading-bar.js

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

197-
var $parent = $document.find($parentSelector).eq(0);
198197
$timeout.cancel(completeTimeout);
199198

200199
// do not continually broadcast the started event:
201200
if (started) {
202201
return;
203202
}
204203

204+
var document = $document[0];
205+
var parent = document.querySelector ?
206+
document.querySelector($parentSelector)
207+
: $document.find($parentSelector)[0]
208+
;
209+
210+
if (! parent) {
211+
parent = document.getElementsByTagName('body')[0];
212+
}
213+
214+
var $parent = angular.element(parent);
215+
var $after = parent.lastChild && angular.element(parent.lastChild);
216+
205217
$rootScope.$broadcast('cfpLoadingBar:started');
206218
started = true;
207219

208220
if (includeBar) {
209-
$animate.enter(loadingBarContainer, $parent, angular.element($parent[0].lastChild));
221+
$animate.enter(loadingBarContainer, $parent, $after);
210222
}
211223

212224
if (includeSpinner) {
213-
$animate.enter(spinner, $parent, angular.element($parent[0].lastChild));
225+
$animate.enter(spinner, $parent, loadingBarContainer);
214226
}
215227

216228
_set(startSize);

test/loading-bar-interceptor-config.coffee

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,3 +79,36 @@ describe 'loadingBarInterceptor Service - config options', ->
7979
expect(cfpLoadingBar.status()).toBeGreaterThan .5
8080
cfpLoadingBar.complete()
8181
$timeout.flush()
82+
83+
it 'should append the loadingbar as the first child of the parent container if empty', ->
84+
emptyEl = angular.element '<div id="empty"></div>'
85+
angular.element(document).find('body').eq(0).append emptyEl
86+
87+
module 'chieffancypants.loadingBar', (cfpLoadingBarProvider) ->
88+
cfpLoadingBarProvider.parentSelector = '#empty'
89+
return
90+
inject ($timeout, $document, cfpLoadingBar) ->
91+
cfpLoadingBar.start()
92+
parent = $document[0].querySelector(cfpLoadingBar.parentSelector)
93+
children = parent.childNodes
94+
expect(children.length).toBe 2
95+
expect(children[0].id).toBe 'loading-bar'
96+
expect(children[1].id).toBe 'loading-bar-spinner'
97+
cfpLoadingBar.complete()
98+
$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)