0
0
mirror of https://github.com/twbs/bootstrap.git synced 2025-02-07 04:54:24 +01:00
This commit is contained in:
Heinrich Fenkart 2014-11-05 01:45:16 +01:00
parent 72ad89b077
commit db90ff6df7
6 changed files with 72 additions and 22 deletions

41
dist/js/bootstrap.js vendored
View File

@ -959,11 +959,11 @@ if (typeof jQuery === 'undefined') {
this.isShown = true this.isShown = true
this.checkScrollbar() this.checkScrollbar()
this.setScrollbar()
this.$body.addClass('modal-open') this.$body.addClass('modal-open')
this.setScrollbar()
this.escape() this.escape()
if (this.options.backdrop) this.resize() this.resize()
this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
@ -978,7 +978,8 @@ if (typeof jQuery === 'undefined') {
.show() .show()
.scrollTop(0) .scrollTop(0)
if (that.options.backdrop) that.setBackdropHeight() if (that.options.backdrop) that.adjustBackdrop()
that.adjustDialog()
if (transition) { if (transition) {
that.$element[0].offsetWidth // force reflow that.$element[0].offsetWidth // force reflow
@ -1014,7 +1015,7 @@ if (typeof jQuery === 'undefined') {
this.isShown = false this.isShown = false
this.escape() this.escape()
if (this.options.backdrop) this.resize() this.resize()
$(document).off('focusin.bs.modal') $(document).off('focusin.bs.modal')
@ -1052,7 +1053,7 @@ if (typeof jQuery === 'undefined') {
Modal.prototype.resize = function () { Modal.prototype.resize = function () {
if (this.isShown) { if (this.isShown) {
$(window).on('resize.bs.modal', $.proxy(this.setBackdropHeight, this)) $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
} else { } else {
$(window).off('resize.bs.modal') $(window).off('resize.bs.modal')
} }
@ -1063,6 +1064,7 @@ if (typeof jQuery === 'undefined') {
this.$element.hide() this.$element.hide()
this.backdrop(function () { this.backdrop(function () {
that.$body.removeClass('modal-open') that.$body.removeClass('modal-open')
that.resetAdjustments()
that.resetScrollbar() that.resetScrollbar()
that.$element.trigger('hidden.bs.modal') that.$element.trigger('hidden.bs.modal')
}) })
@ -1119,19 +1121,43 @@ if (typeof jQuery === 'undefined') {
} }
} }
Modal.prototype.setBackdropHeight = function () { // these following methods are used to handle overflowing modals
Modal.prototype.handleUpdate = function () {
if (this.options.backdrop) this.adjustBackdrop()
this.adjustDialog()
}
Modal.prototype.adjustBackdrop = function () {
this.$backdrop this.$backdrop
.css('height', 0) .css('height', 0)
.css('height', this.$element[0].scrollHeight) .css('height', this.$element[0].scrollHeight)
} }
Modal.prototype.adjustDialog = function () {
var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
this.$element.css({
paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
})
}
Modal.prototype.resetAdjustments = function () {
this.$element.css({
paddingLeft: '',
paddingRight: ''
})
}
Modal.prototype.checkScrollbar = function () { Modal.prototype.checkScrollbar = function () {
this.bodyIsOverflowing = document.body.scrollHeight > document.documentElement.clientHeight
this.scrollbarWidth = this.measureScrollbar() this.scrollbarWidth = this.measureScrollbar()
} }
Modal.prototype.setScrollbar = function () { Modal.prototype.setScrollbar = function () {
var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
} }
Modal.prototype.resetScrollbar = function () { Modal.prototype.resetScrollbar = function () {
@ -1139,7 +1165,6 @@ if (typeof jQuery === 'undefined') {
} }
Modal.prototype.measureScrollbar = function () { // thx walsh Modal.prototype.measureScrollbar = function () { // thx walsh
if (document.body.clientWidth >= window.innerWidth) return 0
var scrollDiv = document.createElement('div') var scrollDiv = document.createElement('div')
scrollDiv.className = 'modal-scrollbar-measure' scrollDiv.className = 'modal-scrollbar-measure'
this.$body.append(scrollDiv) this.$body.append(scrollDiv)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -959,11 +959,11 @@ if (typeof jQuery === 'undefined') {
this.isShown = true this.isShown = true
this.checkScrollbar() this.checkScrollbar()
this.setScrollbar()
this.$body.addClass('modal-open') this.$body.addClass('modal-open')
this.setScrollbar()
this.escape() this.escape()
if (this.options.backdrop) this.resize() this.resize()
this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
@ -978,7 +978,8 @@ if (typeof jQuery === 'undefined') {
.show() .show()
.scrollTop(0) .scrollTop(0)
if (that.options.backdrop) that.setBackdropHeight() if (that.options.backdrop) that.adjustBackdrop()
that.adjustDialog()
if (transition) { if (transition) {
that.$element[0].offsetWidth // force reflow that.$element[0].offsetWidth // force reflow
@ -1014,7 +1015,7 @@ if (typeof jQuery === 'undefined') {
this.isShown = false this.isShown = false
this.escape() this.escape()
if (this.options.backdrop) this.resize() this.resize()
$(document).off('focusin.bs.modal') $(document).off('focusin.bs.modal')
@ -1052,7 +1053,7 @@ if (typeof jQuery === 'undefined') {
Modal.prototype.resize = function () { Modal.prototype.resize = function () {
if (this.isShown) { if (this.isShown) {
$(window).on('resize.bs.modal', $.proxy(this.setBackdropHeight, this)) $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
} else { } else {
$(window).off('resize.bs.modal') $(window).off('resize.bs.modal')
} }
@ -1063,6 +1064,7 @@ if (typeof jQuery === 'undefined') {
this.$element.hide() this.$element.hide()
this.backdrop(function () { this.backdrop(function () {
that.$body.removeClass('modal-open') that.$body.removeClass('modal-open')
that.resetAdjustments()
that.resetScrollbar() that.resetScrollbar()
that.$element.trigger('hidden.bs.modal') that.$element.trigger('hidden.bs.modal')
}) })
@ -1119,19 +1121,43 @@ if (typeof jQuery === 'undefined') {
} }
} }
Modal.prototype.setBackdropHeight = function () { // these following methods are used to handle overflowing modals
Modal.prototype.handleUpdate = function () {
if (this.options.backdrop) this.adjustBackdrop()
this.adjustDialog()
}
Modal.prototype.adjustBackdrop = function () {
this.$backdrop this.$backdrop
.css('height', 0) .css('height', 0)
.css('height', this.$element[0].scrollHeight) .css('height', this.$element[0].scrollHeight)
} }
Modal.prototype.adjustDialog = function () {
var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
this.$element.css({
paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
})
}
Modal.prototype.resetAdjustments = function () {
this.$element.css({
paddingLeft: '',
paddingRight: ''
})
}
Modal.prototype.checkScrollbar = function () { Modal.prototype.checkScrollbar = function () {
this.bodyIsOverflowing = document.body.scrollHeight > document.documentElement.clientHeight
this.scrollbarWidth = this.measureScrollbar() this.scrollbarWidth = this.measureScrollbar()
} }
Modal.prototype.setScrollbar = function () { Modal.prototype.setScrollbar = function () {
var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
} }
Modal.prototype.resetScrollbar = function () { Modal.prototype.resetScrollbar = function () {
@ -1139,7 +1165,6 @@ if (typeof jQuery === 'undefined') {
} }
Modal.prototype.measureScrollbar = function () { // thx walsh Modal.prototype.measureScrollbar = function () { // thx walsh
if (document.body.clientWidth >= window.innerWidth) return 0
var scrollDiv = document.createElement('div') var scrollDiv = document.createElement('div')
scrollDiv.className = 'modal-scrollbar-measure' scrollDiv.className = 'modal-scrollbar-measure'
this.$body.append(scrollDiv) this.$body.append(scrollDiv)

File diff suppressed because one or more lines are too long