Skip to content

Commit ba0fda8

Browse files
committed
Add fix found online for modal
angular-ui/bootstrap#3144
1 parent febda42 commit ba0fda8

File tree

2 files changed

+667
-4
lines changed

2 files changed

+667
-4
lines changed

ui-bootstrap-tpls.js

+38-1
Original file line numberDiff line numberDiff line change
@@ -2602,6 +2602,11 @@ angular.module('ui.bootstrap.modal', [])
26022602
var $modalStack = {
26032603
NOW_CLOSING_EVENT: 'modal.stack.now-closing'
26042604
};
2605+
2606+
var bodyPad = 0;
2607+
var scrollBarWidth = 0;
2608+
var body = $document[0].body;
2609+
var fixedElements = angular.element(body.querySelector('.navbar-fixed-top, .navbar-fixed-bottom, .affix'));
26052610

26062611
//Modal focus behavior
26072612
var focusableElementList;
@@ -2627,7 +2632,28 @@ angular.module('ui.bootstrap.modal', [])
26272632
}
26282633
});
26292634

2635+
function checkScrollBar() {
2636+
if (body.clientWidth >= window.innerWidth ) { return; }
2637+
measureScrollBar();
2638+
}
2639+
2640+
function measureScrollBar() {
2641+
scrollBarWidth = window.innerWidth - body.clientWidth;
2642+
bodyPad = parseInt((angular.element(body).css('padding-right') || 0), 10);
2643+
}
2644+
2645+
function setScrollBar() {
2646+
angular.element(body).css('padding-right', bodyPad + scrollBarWidth + 'px');
2647+
fixedElements.css('padding-right', bodyPad + scrollBarWidth + 'px');
2648+
}
2649+
2650+
function resetScrollBar() {
2651+
angular.element(body).css('padding-right', bodyPad + 'px');
2652+
fixedElements.css('padding-right', bodyPad + 'px');
2653+
}
2654+
26302655
function removeModalWindow(modalInstance, elementToReceiveFocus) {
2656+
26312657
var body = $document.find('body').eq(0);
26322658
var modalWindow = openedWindows.get(modalInstance).value;
26332659

@@ -2638,7 +2664,11 @@ angular.module('ui.bootstrap.modal', [])
26382664
var modalBodyClass = modalWindow.openedClass || OPENED_MODAL_CLASS;
26392665
openedClasses.remove(modalBodyClass, modalInstance);
26402666
body.toggleClass(modalBodyClass, openedClasses.hasKey(modalBodyClass));
2667+
if (scrollBarWidth) {
2668+
resetScrollBar();
2669+
}
26412670
});
2671+
26422672
checkRemoveBackdrop();
26432673

26442674
//move focus to specified element if available, or else to body
@@ -2771,7 +2801,10 @@ angular.module('ui.bootstrap.modal', [])
27712801
body.append(backdropDomEl);
27722802
}
27732803

2804+
checkScrollBar();
2805+
27742806
var angularDomEl = angular.element('<div modal-window="modal-window"></div>');
2807+
27752808
angularDomEl.attr({
27762809
'template-url': modal.windowTemplateUrl,
27772810
'window-class': modal.windowClass,
@@ -2789,6 +2822,10 @@ angular.module('ui.bootstrap.modal', [])
27892822
body.append(modalDomEl);
27902823
body.addClass(modalBodyClass);
27912824

2825+
if (scrollBarWidth && currBackdropIndex === 0) {
2826+
setScrollBar();
2827+
}
2828+
27922829
$modalStack.clearFocusListCache();
27932830
};
27942831

@@ -5833,4 +5870,4 @@ angular.module("template/typeahead/typeahead-popup.html", []).run(["$templateCac
58335870
"</ul>\n" +
58345871
"");
58355872
}]);
5836-
!angular.$$csp() && angular.element(document).find('head').prepend('<style type="text/css">.ng-animate.item:not(.left):not(.right){-webkit-transition:0s ease-in-out left;transition:0s ease-in-out left}</style>');
5873+
!angular.$$csp() && angular.element(document).find('head').prepend('<style type="text/css">.ng-animate.item:not(.left):not(.right){-webkit-transition:0s ease-in-out left;transition:0s ease-in-out left}</style>');

0 commit comments

Comments
 (0)