Skip to content

Commit 3e6ce18

Browse files
committed
fix(popup): if popup is taller than the window, shrink the popup body and make it scrollable. Closes #1679
1 parent f4043e6 commit 3e6ce18

File tree

4 files changed

+38
-0
lines changed

4 files changed

+38
-0
lines changed

Diff for: js/angular/service/popup.js

+11
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,17 @@ function($ionicTemplateLoader, $ionicBackdrop, $q, $timeout, $rootScope, $docume
317317
//if hidden while waiting for raf, don't show
318318
if (!self.isShown) return;
319319

320+
//if the popup is taller than the window, make the popup body scrollable
321+
if(self.element[0].offsetHeight > window.innerHeight - 20){
322+
self.element[0].style.height = window.innerHeight - 20+'px';
323+
popupBody = self.element[0].querySelectorAll('.popup-body');
324+
popupHead = self.element[0].querySelectorAll('.popup-head');
325+
popupButtons = self.element[0].querySelectorAll('.popup-buttons');
326+
self.element.addClass('popup-tall');
327+
newHeight = window.innerHeight - popupHead[0].offsetHeight - popupButtons[0].offsetHeight -20;
328+
popupBody[0].style.height = newHeight + 'px';
329+
};
330+
320331
self.element.removeClass('popup-hidden');
321332
self.element.addClass('popup-showing active');
322333
ionic.DomUtil.centerElementByMarginTwice(self.element[0]);

Diff for: scss/_popup.scss

+6
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@
3636
@include animation-timing-function(ease-in-out);
3737
@include animation-fill-mode(both);
3838
}
39+
&.popup-tall{
40+
overflow:hidden;
41+
.popup-body{
42+
overflow:auto;
43+
}
44+
}
3945
}
4046

4147
.popup-head {

Diff for: test/html/popup.html

+9
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
<button class="button button-balanced" ng-click="showPrompt()">Prompt</button>
1919
<button class="button button-balanced" ng-click="showPasswordPrompt()">Password Prompt</button>
2020
<button class="button button-positive" ng-click="showAlert()">Alert</button>
21+
<button class="button button-positive" ng-click="showTallAlert()">Tall Alert</button>
2122
<div class="list">
2223
<a class="item" href="#">Item</a>
2324
<a class="item" href="#">Item</a>
@@ -145,6 +146,14 @@
145146
}, 1000);
146147
});
147148
};
149+
$scope.showTallAlert = function() {
150+
$ionicPopup.alert({
151+
title: 'Tall Alert',
152+
content: 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.'
153+
}).then(function(res) {
154+
console.log('Closed');
155+
});
156+
};
148157
});
149158
</script>
150159
</body>

Diff for: test/unit/angular/service/popup.unit.js

+12
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,18 @@ describe('$ionicPopup service', function() {
108108
expect(popup.element.hasClass('active')).toBe(false);
109109
ionic.requestAnimationFrame = function(cb) { cb(); };
110110
});
111+
it('should shrink .popup-body height so that the popup is never taller than the window', function() {
112+
str = 'All work and no play... ';
113+
for(var i=0; i<13;i++){
114+
str = str + str;
115+
}
116+
var popup = TestUtil.unwrapPromise($ionicPopup._createPopup({
117+
template: str
118+
}));
119+
popup.show();
120+
var windowIsLarger = popup.element[0].offsetHeight < window.innerHeight;
121+
expect(windowIsLarger).toBe(true);
122+
});
111123
});
112124

113125
describe('hide', function() {

0 commit comments

Comments
 (0)