|
14 | 14 | // ======================
|
15 | 15 |
|
16 | 16 | var Modal = function (element, options) {
|
17 |
| - this.options = options |
18 |
| - this.$body = $(document.body) |
19 |
| - this.$element = $(element) |
20 |
| - this.$dialog = this.$element.find('.modal-dialog') |
21 |
| - this.$backdrop = null |
22 |
| - this.isShown = null |
23 |
| - this.originalBodyPad = null |
24 |
| - this.scrollbarWidth = 0 |
| 17 | + this.options = options |
| 18 | + this.$body = $(document.body) |
| 19 | + this.$element = $(element) |
| 20 | + this.$dialog = this.$element.find('.modal-dialog') |
| 21 | + this.$backdrop = null |
| 22 | + this.isShown = null |
| 23 | + this.originalBodyPad = null |
| 24 | + this.scrollbarWidth = 0 |
25 | 25 | this.ignoreBackdropClick = false
|
| 26 | + this.fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom' |
26 | 27 |
|
27 | 28 | if (this.options.remote) {
|
28 | 29 | this.$element
|
|
33 | 34 | }
|
34 | 35 | }
|
35 | 36 |
|
36 |
| - Modal.VERSION = '3.4.0' |
| 37 | + Modal.VERSION = '3.4.0' |
37 | 38 |
|
38 | 39 | Modal.TRANSITION_DURATION = 300
|
39 | 40 | Modal.BACKDROP_TRANSITION_DURATION = 150
|
|
50 | 51 |
|
51 | 52 | Modal.prototype.show = function (_relatedTarget) {
|
52 | 53 | var that = this
|
53 |
| - var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) |
| 54 | + var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) |
54 | 55 |
|
55 | 56 | this.$element.trigger(e)
|
56 | 57 |
|
|
141 | 142 | .off('focusin.bs.modal') // guard against infinite focus loop
|
142 | 143 | .on('focusin.bs.modal', $.proxy(function (e) {
|
143 | 144 | if (document !== e.target &&
|
144 |
| - this.$element[0] !== e.target && |
145 |
| - !this.$element.has(e.target).length) { |
| 145 | + this.$element[0] !== e.target && |
| 146 | + !this.$element.has(e.target).length) { |
146 | 147 | this.$element.trigger('focus')
|
147 | 148 | }
|
148 | 149 | }, this))
|
|
244 | 245 | var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
|
245 | 246 |
|
246 | 247 | this.$element.css({
|
247 |
| - paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '', |
| 248 | + paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '', |
248 | 249 | paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
|
249 | 250 | })
|
250 | 251 | }
|
|
269 | 270 | Modal.prototype.setScrollbar = function () {
|
270 | 271 | var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
|
271 | 272 | this.originalBodyPad = document.body.style.paddingRight || ''
|
272 |
| - if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) |
| 273 | + var scrollbarWidth = this.scrollbarWidth |
| 274 | + if (this.bodyIsOverflowing) { |
| 275 | + this.$body.css('padding-right', bodyPad + scrollbarWidth) |
| 276 | + $(this.fixedContent).each(function (index, element) { |
| 277 | + var actualPadding = element.style.paddingRight |
| 278 | + var calculatedPadding = $(element).css('padding-right') |
| 279 | + $(element) |
| 280 | + .data('padding-right', actualPadding) |
| 281 | + .css('padding-right', parseFloat(calculatedPadding) + scrollbarWidth + 'px') |
| 282 | + }) |
| 283 | + } |
273 | 284 | }
|
274 | 285 |
|
275 | 286 | Modal.prototype.resetScrollbar = function () {
|
276 | 287 | this.$body.css('padding-right', this.originalBodyPad)
|
| 288 | + $(this.fixedContent).each(function (index, element) { |
| 289 | + var padding = $(element).data('padding-right') |
| 290 | + $(element).removeData('padding-right') |
| 291 | + element.style.paddingRight = padding ? padding : '' |
| 292 | + }) |
277 | 293 | }
|
278 | 294 |
|
279 | 295 | Modal.prototype.measureScrollbar = function () { // thx walsh
|
|
291 | 307 |
|
292 | 308 | function Plugin(option, _relatedTarget) {
|
293 | 309 | return this.each(function () {
|
294 |
| - var $this = $(this) |
295 |
| - var data = $this.data('bs.modal') |
| 310 | + var $this = $(this) |
| 311 | + var data = $this.data('bs.modal') |
296 | 312 | var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
|
297 | 313 |
|
298 | 314 | if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
|
|
303 | 319 |
|
304 | 320 | var old = $.fn.modal
|
305 | 321 |
|
306 |
| - $.fn.modal = Plugin |
| 322 | + $.fn.modal = Plugin |
307 | 323 | $.fn.modal.Constructor = Modal
|
308 | 324 |
|
309 | 325 |
|
|
320 | 336 | // ==============
|
321 | 337 |
|
322 | 338 | $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
|
323 |
| - var $this = $(this) |
324 |
| - var href = $this.attr('href') |
325 |
| - var target = $this.attr('data-target') || |
| 339 | + var $this = $(this) |
| 340 | + var href = $this.attr('href') |
| 341 | + var target = $this.attr('data-target') || |
326 | 342 | (href && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
|
327 | 343 |
|
328 | 344 | var $target = $(document).find(target)
|
329 |
| - var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) |
| 345 | + var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) |
330 | 346 |
|
331 | 347 | if ($this.is('a')) e.preventDefault()
|
332 | 348 |
|
|
0 commit comments