Skip to content

Commit 41f04c3

Browse files
committed
added more tests and reverted scrolling
1 parent c8513cd commit 41f04c3

File tree

2 files changed

+61
-40
lines changed

2 files changed

+61
-40
lines changed

js/modal.js

+1-40
Original file line numberDiff line numberDiff line change
@@ -277,44 +277,6 @@
277277
}
278278
}
279279

280-
_preventDefault(e) {
281-
e.preventDefault();
282-
}
283-
284-
_preventWheelDefault(e) {
285-
let modalEl = this;
286-
let scrolledToBottom = modalEl.offsetHeight + modalEl.scrollTop >= modalEl.scrollHeight;
287-
let scrolledToTop = modalEl.scrollTop === 0;
288-
if ((scrolledToTop && e.deltaY < 0) || (scrolledToBottom && e.deltaY > 0)) {
289-
e.preventDefault();
290-
}
291-
}
292-
293-
preventBodyScrolling() {
294-
let modalEl = this.$el[0];
295-
// modalEl.setAttribute('tabindex', 0);
296-
// this.$el[0].focus();
297-
298-
this.$overlay[0].addEventListener('wheel', this._preventDefault);
299-
this.$overlay[0].addEventListener('touchmove', this._preventDefault);
300-
modalEl.addEventListener('wheel', this._preventWheelDefault);
301-
302-
// modalEl.addEventListener("keydown", function(e) {
303-
// let scrolledToBottom = modalEl.offsetHeight + modalEl.scrollTop >= modalEl.scrollHeight;
304-
// let scrolledToTop = modalEl.scrollTop === 0;
305-
// if (e.target === modalEl && [37, 39].indexOf(e.keyCode) > -1 ||
306-
// (e.keyCode === 38 && scrolledToTop) ||
307-
// ([32, 40].indexOf(e.keyCode) > -1 && scrolledToBottom)) {
308-
// e.preventDefault();
309-
// }
310-
// });
311-
}
312-
313-
enableBodyScrolling() {
314-
this.$overlay[0].removeEventListener('wheel', this._preventDefault);
315-
this.$overlay[0].removeEventListener('touchmove', this._preventDefault);
316-
this.$el[0].removeEventListener('wheel', this._preventWheelDefault);
317-
}
318280

319281
/**
320282
* Open Modal
@@ -327,6 +289,7 @@
327289

328290
this.isOpen = true;
329291
let body = document.body;
292+
body.style.overflow = 'hidden';
330293
this.$el[0].classList.add('open');
331294
body.appendChild(this.$overlay[0]);
332295

@@ -340,7 +303,6 @@
340303
}
341304

342305
this.animateIn();
343-
this.preventBodyScrolling();
344306

345307
return this;
346308
}
@@ -362,7 +324,6 @@
362324
}
363325

364326
this.animateOut();
365-
this.enableBodyScrolling();
366327

367328
return this;
368329
}

tests/spec/modal/modalSpec.js

+60
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,84 @@ describe( 'Modal:', function() {
1515
describe('Modals', function() {
1616
it('Should open and close correctly', function(done) {
1717
modal1.modal();
18+
expect(modal1).toBeHidden('Modal should be hidden');
1819

1920
click(trigger1[0]);
2021

2122
setTimeout(function() {
23+
expect(modal1).toBeVisible('Modal should be shown');
24+
expect(modal1.hasClass('open')).toEqual(true, 'Modal should have class open');
25+
2226
// Check overlay is attached
2327
var overlay = modal1.modal('getInstance').$overlay;
2428
var overlayInDOM = $.contains(document, overlay[0]);
2529
expect(overlayInDOM).toEqual(true, 'Overlay should be attached on open');
2630

2731
click(overlay[0]);
2832
setTimeout(function() {
33+
expect(modal1.hasClass('open')).toEqual(false, 'Modal should have class open removed');
34+
2935
var overlayInDOM = $.contains(document, overlay[0]);
3036
expect(overlayInDOM).toEqual(false, 'Overlay should be removed on close');
3137

3238
done();
3339
}, 500);
3440
}, 500);
3541
});
42+
43+
it('Should have a dismissible option', function(done) {
44+
modal1.modal({
45+
dismissible: false
46+
});
47+
48+
click(trigger1[0]);
49+
setTimeout(function() {
50+
expect(modal1).toBeVisible('Modal should be shown');
51+
var overlay = modal1.modal('getInstance').$overlay;
52+
var overlayInDOM = $.contains(document, overlay[0]);
53+
expect(overlayInDOM).toEqual(true, 'Overlay should be attached on open');
54+
55+
click(overlay[0]);
56+
setTimeout(function() {
57+
expect(modal1).toBeVisible('Modal should be shown');
58+
var overlayInDOM = $.contains(document, overlay[0]);
59+
expect(overlayInDOM).toEqual(true, 'modal should not be dismissable');
60+
61+
done();
62+
}, 500);
63+
}, 500);
64+
});
65+
66+
it('Should have callbacks', function(done) {
67+
var readyTest = false;
68+
var completeTest = false;
69+
modal1.modal({
70+
ready: function() {
71+
readyTest = true;
72+
},
73+
complete: function() {
74+
completeTest = true;
75+
}
76+
});
77+
78+
expect(readyTest).toEqual(false, 'callback not yet fired');
79+
expect(completeTest).toEqual(false, 'callback not yet fired');
80+
81+
click(trigger1[0]);
82+
setTimeout(function() {
83+
expect(readyTest).toEqual(true, 'callback fired');
84+
expect(completeTest).toEqual(false, 'callback not yet fired');
85+
86+
var overlay = modal1.modal('getInstance').$overlay;
87+
click(overlay[0]);
88+
setTimeout(function() {
89+
expect(readyTest).toEqual(true, 'callback fired');
90+
expect(completeTest).toEqual(true, 'callback fired');
91+
92+
done();
93+
}, 500);
94+
}, 500);
95+
});
3696
});
3797

3898
});

0 commit comments

Comments
 (0)