modal.js 19 KB
Newer Older
1
$(function () {
2
  'use strict'
3

fat's avatar
fat committed
4
  QUnit.module('modal plugin')
XhmikosR's avatar
XhmikosR committed
5

fat's avatar
fat committed
6
7
8
  QUnit.test('should be defined on jquery object', function (assert) {
    assert.expect(1)
    assert.ok($(document.body).modal, 'modal method is defined')
XhmikosR's avatar
XhmikosR committed
9
10
  })

fat's avatar
fat committed
11
  QUnit.module('modal', {
12
13
14
15
    before: function () {
      // Enable the scrollbar measurer
      $('<style type="text/css"> .modal-scrollbar-measure { position: absolute; top: -9999px; width: 50px; height: 50px; overflow: scroll; } </style>').appendTo('head')
    },
fat's avatar
fat committed
16
    beforeEach: function () {
17
18
19
      // Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
      $.fn.bootstrapModal = $.fn.modal.noConflict()
    },
fat's avatar
fat committed
20
    afterEach: function () {
21
22
23
24
25
      $.fn.modal = $.fn.bootstrapModal
      delete $.fn.bootstrapModal
    }
  })

fat's avatar
fat committed
26
27
28
  QUnit.test('should provide no conflict', function (assert) {
    assert.expect(1)
    assert.strictEqual($.fn.modal, undefined, 'modal was set back to undefined (orig value)')
29
30
  })

31
32
33
34
35
36
37
38
39
40
41
42
  QUnit.test('should throw explicit error on undefined method', function (assert) {
    assert.expect(1)
    var $el = $('<div id="modal-test"/>')
    $el.bootstrapModal()
    try {
      $el.bootstrapModal('noMethod')
    }
    catch (err) {
      assert.strictEqual(err.message, 'No method named "noMethod"')
    }
  })

fat's avatar
fat committed
43
44
  QUnit.test('should return jquery collection containing the element', function (assert) {
    assert.expect(2)
Heinrich Fenkart's avatar
Heinrich Fenkart committed
45
46
    var $el = $('<div id="modal-test"/>')
    var $modal = $el.bootstrapModal()
fat's avatar
fat committed
47
48
    assert.ok($modal instanceof $, 'returns jquery collection')
    assert.strictEqual($modal[0], $el[0], 'collection contains element')
XhmikosR's avatar
XhmikosR committed
49
50
  })

fat's avatar
fat committed
51
52
  QUnit.test('should expose defaults var for settings', function (assert) {
    assert.expect(1)
53
    assert.ok($.fn.bootstrapModal.Constructor.Default, 'default object exposed')
XhmikosR's avatar
XhmikosR committed
54
55
  })

fat's avatar
fat committed
56
57
  QUnit.test('should insert into dom when show method is called', function (assert) {
    assert.expect(1)
58
    var done = assert.async()
Heinrich Fenkart's avatar
Heinrich Fenkart committed
59
60

    $('<div id="modal-test"/>')
XhmikosR's avatar
XhmikosR committed
61
      .on('shown.bs.modal', function () {
fat's avatar
fat committed
62
        assert.notEqual($('#modal-test').length, 0, 'modal inserted into dom')
63
        done()
XhmikosR's avatar
XhmikosR committed
64
      })
65
      .bootstrapModal('show')
XhmikosR's avatar
XhmikosR committed
66
67
  })

fat's avatar
fat committed
68
69
  QUnit.test('should fire show event', function (assert) {
    assert.expect(1)
70
    var done = assert.async()
Heinrich Fenkart's avatar
Heinrich Fenkart committed
71
72

    $('<div id="modal-test"/>')
XhmikosR's avatar
XhmikosR committed
73
      .on('show.bs.modal', function () {
fat's avatar
fat committed
74
        assert.ok(true, 'show event fired')
75
        done()
XhmikosR's avatar
XhmikosR committed
76
      })
77
      .bootstrapModal('show')
XhmikosR's avatar
XhmikosR committed
78
79
  })

fat's avatar
fat committed
80
81
  QUnit.test('should not fire shown when show was prevented', function (assert) {
    assert.expect(1)
82
    var done = assert.async()
Heinrich Fenkart's avatar
Heinrich Fenkart committed
83
84

    $('<div id="modal-test"/>')
XhmikosR's avatar
XhmikosR committed
85
86
      .on('show.bs.modal', function (e) {
        e.preventDefault()
fat's avatar
fat committed
87
        assert.ok(true, 'show event fired')
88
        done()
XhmikosR's avatar
XhmikosR committed
89
90
      })
      .on('shown.bs.modal', function () {
fat's avatar
fat committed
91
        assert.ok(false, 'shown event fired')
XhmikosR's avatar
XhmikosR committed
92
      })
93
      .bootstrapModal('show')
XhmikosR's avatar
XhmikosR committed
94
95
  })

fat's avatar
fat committed
96
97
  QUnit.test('should hide modal when hide is called', function (assert) {
    assert.expect(3)
98
    var done = assert.async()
XhmikosR's avatar
XhmikosR committed
99

Heinrich Fenkart's avatar
Heinrich Fenkart committed
100
    $('<div id="modal-test"/>')
XhmikosR's avatar
XhmikosR committed
101
      .on('shown.bs.modal', function () {
fat's avatar
fat committed
102
103
        assert.ok($('#modal-test').is(':visible'), 'modal visible')
        assert.notEqual($('#modal-test').length, 0, 'modal inserted into dom')
104
        $(this).bootstrapModal('hide')
XhmikosR's avatar
XhmikosR committed
105
106
      })
      .on('hidden.bs.modal', function () {
fat's avatar
fat committed
107
        assert.ok(!$('#modal-test').is(':visible'), 'modal hidden')
108
        done()
XhmikosR's avatar
XhmikosR committed
109
      })
110
      .bootstrapModal('show')
XhmikosR's avatar
XhmikosR committed
111
112
  })

fat's avatar
fat committed
113
114
  QUnit.test('should toggle when toggle is called', function (assert) {
    assert.expect(3)
115
    var done = assert.async()
Heinrich Fenkart's avatar
Heinrich Fenkart committed
116
117

    $('<div id="modal-test"/>')
XhmikosR's avatar
XhmikosR committed
118
      .on('shown.bs.modal', function () {
fat's avatar
fat committed
119
120
        assert.ok($('#modal-test').is(':visible'), 'modal visible')
        assert.notEqual($('#modal-test').length, 0, 'modal inserted into dom')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
121
        $(this).bootstrapModal('toggle')
XhmikosR's avatar
XhmikosR committed
122
123
      })
      .on('hidden.bs.modal', function () {
fat's avatar
fat committed
124
        assert.ok(!$('#modal-test').is(':visible'), 'modal hidden')
125
        done()
XhmikosR's avatar
XhmikosR committed
126
      })
127
      .bootstrapModal('toggle')
XhmikosR's avatar
XhmikosR committed
128
129
  })

fat's avatar
fat committed
130
131
  QUnit.test('should remove from dom when click [data-dismiss="modal"]', function (assert) {
    assert.expect(3)
132
    var done = assert.async()
Heinrich Fenkart's avatar
Heinrich Fenkart committed
133
134

    $('<div id="modal-test"><span class="close" data-dismiss="modal"/></div>')
XhmikosR's avatar
XhmikosR committed
135
      .on('shown.bs.modal', function () {
fat's avatar
fat committed
136
137
138
        assert.ok($('#modal-test').is(':visible'), 'modal visible')
        assert.notEqual($('#modal-test').length, 0, 'modal inserted into dom')
        $(this).find('.close').trigger('click')
XhmikosR's avatar
XhmikosR committed
139
140
      })
      .on('hidden.bs.modal', function () {
fat's avatar
fat committed
141
        assert.ok(!$('#modal-test').is(':visible'), 'modal hidden')
142
        done()
XhmikosR's avatar
XhmikosR committed
143
      })
144
      .bootstrapModal('toggle')
XhmikosR's avatar
XhmikosR committed
145
146
  })

fat's avatar
fat committed
147
148
  QUnit.test('should allow modal close with "backdrop:false"', function (assert) {
    assert.expect(2)
149
    var done = assert.async()
Heinrich Fenkart's avatar
Heinrich Fenkart committed
150
151

    $('<div id="modal-test" data-backdrop="false"/>')
XhmikosR's avatar
XhmikosR committed
152
      .on('shown.bs.modal', function () {
fat's avatar
fat committed
153
        assert.ok($('#modal-test').is(':visible'), 'modal visible')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
154
        $(this).bootstrapModal('hide')
XhmikosR's avatar
XhmikosR committed
155
156
      })
      .on('hidden.bs.modal', function () {
fat's avatar
fat committed
157
        assert.ok(!$('#modal-test').is(':visible'), 'modal hidden')
158
        done()
XhmikosR's avatar
XhmikosR committed
159
      })
160
      .bootstrapModal('show')
XhmikosR's avatar
XhmikosR committed
161
162
  })

fat's avatar
fat committed
163
164
  QUnit.test('should close modal when clicking outside of modal-content', function (assert) {
    assert.expect(3)
165
    var done = assert.async()
Heinrich Fenkart's avatar
Heinrich Fenkart committed
166
167

    $('<div id="modal-test"><div class="contents"/></div>')
168
      .on('shown.bs.modal', function () {
fat's avatar
fat committed
169
170
171
172
        assert.notEqual($('#modal-test').length, 0, 'modal inserted into dom')
        $('.contents').trigger('click')
        assert.ok($('#modal-test').is(':visible'), 'modal visible')
        $('#modal-test').trigger('click')
XhmikosR's avatar
XhmikosR committed
173
      })
174
      .on('hidden.bs.modal', function () {
fat's avatar
fat committed
175
        assert.ok(!$('#modal-test').is(':visible'), 'modal hidden')
176
        done()
XhmikosR's avatar
XhmikosR committed
177
      })
178
      .bootstrapModal('show')
XhmikosR's avatar
XhmikosR committed
179
180
  })

181
182
183
184
185
186
187
188
189
190
191
192
193
  QUnit.test('should not close modal when clicking outside of modal-content if data-backdrop="true"', function (assert) {
    assert.expect(1)
    var done = assert.async()

    $('<div id="modal-test" data-backdrop="false"><div class="contents"/></div>')
      .on('shown.bs.modal', function () {
        $('#modal-test').trigger('click')
        assert.ok($('#modal-test').is(':visible'), 'modal not hidden')
        done()
      })
      .bootstrapModal('show')
  })

fat's avatar
fat committed
194
195
  QUnit.test('should close modal when escape key is pressed via keydown', function (assert) {
    assert.expect(3)
196
    var done = assert.async()
197

fat's avatar
fat committed
198
199
    var $div = $('<div id="modal-test"/>')
    $div
200
      .on('shown.bs.modal', function () {
201
        assert.ok($('#modal-test').length, 'modal inserted into dom')
fat's avatar
fat committed
202
203
        assert.ok($('#modal-test').is(':visible'), 'modal visible')
        $div.trigger($.Event('keydown', { which: 27 }))
204
205

        setTimeout(function () {
fat's avatar
fat committed
206
207
          assert.ok(!$('#modal-test').is(':visible'), 'modal hidden')
          $div.remove()
208
          done()
209
210
211
212
213
        }, 0)
      })
      .bootstrapModal('show')
  })

fat's avatar
fat committed
214
215
  QUnit.test('should not close modal when escape key is pressed via keyup', function (assert) {
    assert.expect(3)
216
    var done = assert.async()
217

fat's avatar
fat committed
218
219
    var $div = $('<div id="modal-test"/>')
    $div
220
      .on('shown.bs.modal', function () {
fat's avatar
fat committed
221
222
223
        assert.ok($('#modal-test').length, 'modal inserted into dom')
        assert.ok($('#modal-test').is(':visible'), 'modal visible')
        $div.trigger($.Event('keyup', { which: 27 }))
224
225

        setTimeout(function () {
fat's avatar
fat committed
226
227
          assert.ok($div.is(':visible'), 'modal still visible')
          $div.remove()
228
          done()
229
230
231
232
233
        }, 0)
      })
      .bootstrapModal('show')
  })

fat's avatar
fat committed
234
235
  QUnit.test('should trigger hide event once when clicking outside of modal-content', function (assert) {
    assert.expect(1)
236
    var done = assert.async()
XhmikosR's avatar
XhmikosR committed
237
238
239

    var triggered

Heinrich Fenkart's avatar
Heinrich Fenkart committed
240
    $('<div id="modal-test"><div class="contents"/></div>')
241
      .on('shown.bs.modal', function () {
XhmikosR's avatar
XhmikosR committed
242
        triggered = 0
fat's avatar
fat committed
243
        $('#modal-test').trigger('click')
XhmikosR's avatar
XhmikosR committed
244
      })
245
      .on('hide.bs.modal', function () {
XhmikosR's avatar
XhmikosR committed
246
        triggered += 1
fat's avatar
fat committed
247
        assert.strictEqual(triggered, 1, 'modal hide triggered once')
248
        done()
XhmikosR's avatar
XhmikosR committed
249
      })
250
      .bootstrapModal('show')
XhmikosR's avatar
XhmikosR committed
251
252
  })

253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
  QUnit.test('should remove aria-hidden attribute when shown, add it back when hidden', function (assert) {
    assert.expect(3)
    var done = assert.async()

    $('<div id="modal-test" aria-hidden="true"/>')
      .on('shown.bs.modal', function () {
        assert.notOk($('#modal-test').is('[aria-hidden]'), 'aria-hidden attribute removed')
        $(this).bootstrapModal('hide')
      })
      .on('hidden.bs.modal', function () {
        assert.ok($('#modal-test').is('[aria-hidden]'), 'aria-hidden attribute added')
        assert.strictEqual($('#modal-test').attr('aria-hidden'), 'true', 'correct aria-hidden="true" added')
        done()
      })
      .bootstrapModal('show')
  })

fat's avatar
fat committed
270
271
  QUnit.test('should close reopened modal with [data-dismiss="modal"] click', function (assert) {
    assert.expect(2)
272
    var done = assert.async()
Heinrich Fenkart's avatar
Heinrich Fenkart committed
273
274

    $('<div id="modal-test"><div class="contents"><div id="close" data-dismiss="modal"/></div></div>')
275
      .one('shown.bs.modal', function () {
fat's avatar
fat committed
276
        $('#close').trigger('click')
XhmikosR's avatar
XhmikosR committed
277
278
      })
      .one('hidden.bs.modal', function () {
279
        // after one open-close cycle
fat's avatar
fat committed
280
        assert.ok(!$('#modal-test').is(':visible'), 'modal hidden')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
281
        $(this)
282
          .one('shown.bs.modal', function () {
fat's avatar
fat committed
283
            $('#close').trigger('click')
284
          })
Heinrich Fenkart's avatar
Heinrich Fenkart committed
285
          .one('hidden.bs.modal', function () {
fat's avatar
fat committed
286
            assert.ok(!$('#modal-test').is(':visible'), 'modal hidden')
287
            done()
Heinrich Fenkart's avatar
Heinrich Fenkart committed
288
289
          })
          .bootstrapModal('show')
XhmikosR's avatar
XhmikosR committed
290
      })
291
      .bootstrapModal('show')
XhmikosR's avatar
XhmikosR committed
292
  })
Chris Rebert's avatar
Chris Rebert committed
293

fat's avatar
fat committed
294
295
  QUnit.test('should restore focus to toggling element when modal is hidden after having been opened via data-api', function (assert) {
    assert.expect(1)
296
    var done = assert.async()
Heinrich Fenkart's avatar
Heinrich Fenkart committed
297
298
299
300

    var $toggleBtn = $('<button data-toggle="modal" data-target="#modal-test"/>').appendTo('#qunit-fixture')

    $('<div id="modal-test"><div class="contents"><div id="close" data-dismiss="modal"/></div></div>')
Chris Rebert's avatar
Chris Rebert committed
301
      .on('hidden.bs.modal', function () {
Heinrich Fenkart's avatar
Heinrich Fenkart committed
302
        setTimeout(function () {
fat's avatar
fat committed
303
          assert.ok($(document.activeElement).is($toggleBtn), 'toggling element is once again focused')
304
          done()
Chris Rebert's avatar
Chris Rebert committed
305
306
307
        }, 0)
      })
      .on('shown.bs.modal', function () {
fat's avatar
fat committed
308
        $('#close').trigger('click')
Chris Rebert's avatar
Chris Rebert committed
309
310
      })
      .appendTo('#qunit-fixture')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
311

fat's avatar
fat committed
312
    $toggleBtn.trigger('click')
Chris Rebert's avatar
Chris Rebert committed
313
314
  })

fat's avatar
fat committed
315
316
  QUnit.test('should not restore focus to toggling element if the associated show event gets prevented', function (assert) {
    assert.expect(1)
317
    var done = assert.async()
Heinrich Fenkart's avatar
Heinrich Fenkart committed
318
319
320
321
    var $toggleBtn = $('<button data-toggle="modal" data-target="#modal-test"/>').appendTo('#qunit-fixture')
    var $otherBtn = $('<button id="other-btn"/>').appendTo('#qunit-fixture')

    $('<div id="modal-test"><div class="contents"><div id="close" data-dismiss="modal"/></div>')
Chris Rebert's avatar
Chris Rebert committed
322
323
      .one('show.bs.modal', function (e) {
        e.preventDefault()
fat's avatar
fat committed
324
        $otherBtn.trigger('focus')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
325
326
327
        setTimeout($.proxy(function () {
          $(this).bootstrapModal('show')
        }, this), 0)
Chris Rebert's avatar
Chris Rebert committed
328
329
      })
      .on('hidden.bs.modal', function () {
Heinrich Fenkart's avatar
Heinrich Fenkart committed
330
        setTimeout(function () {
fat's avatar
fat committed
331
          assert.ok($(document.activeElement).is($otherBtn), 'focus returned to toggling element')
332
          done()
Chris Rebert's avatar
Chris Rebert committed
333
334
335
        }, 0)
      })
      .on('shown.bs.modal', function () {
fat's avatar
fat committed
336
        $('#close').trigger('click')
Chris Rebert's avatar
Chris Rebert committed
337
338
      })
      .appendTo('#qunit-fixture')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
339

fat's avatar
fat committed
340
341
342
    $toggleBtn.trigger('click')
  })

343
  QUnit.test('should adjust the inline body padding when opening and restore when closing', function (assert) {
fat's avatar
fat committed
344
345
346
    assert.expect(2)
    var done = assert.async()
    var $body = $(document.body)
347
    var originalPadding = $body.css('padding-right')
fat's avatar
fat committed
348
349
350

    $('<div id="modal-test"/>')
      .on('hidden.bs.modal', function () {
351
352
        var currentPadding = $body.css('padding-right')
        assert.strictEqual(currentPadding, originalPadding, 'body padding should be reset after closing')
fat's avatar
fat committed
353
354
355
356
        $body.removeAttr('style')
        done()
      })
      .on('shown.bs.modal', function () {
357
358
        var currentPadding = $body.css('padding-right')
        assert.notStrictEqual(currentPadding, originalPadding, 'body padding should be adjusted while opening')
fat's avatar
fat committed
359
360
361
362
363
        $(this).bootstrapModal('hide')
      })
      .bootstrapModal('show')
  })

364
365
  QUnit.test('should store the original body padding in data-padding-right before showing', function (assert) {
    assert.expect(2)
fat's avatar
fat committed
366
367
    var done = assert.async()
    var $body = $(document.body)
368
369
    var originalPadding = '0px'
    $body.css('padding-right', originalPadding)
fat's avatar
fat committed
370
371
372

    $('<div id="modal-test"/>')
      .on('hidden.bs.modal', function () {
373
374
        assert.strictEqual($body.data('padding-right'), undefined, 'data-padding-right should be cleared after closing')
        $body.removeAttr('style')
fat's avatar
fat committed
375
376
377
        done()
      })
      .on('shown.bs.modal', function () {
378
        assert.strictEqual($body.data('padding-right'), originalPadding, 'original body padding should be stored in data-padding-right')
fat's avatar
fat committed
379
380
381
382
383
        $(this).bootstrapModal('hide')
      })
      .bootstrapModal('show')
  })

384
  QUnit.test('should adjust the inline padding of fixed elements when opening and restore when closing', function (assert) {
385
386
    assert.expect(2)
    var done = assert.async()
387
388
    var $element = $('<div class="fixed-top"></div>').appendTo('#qunit-fixture')
    var originalPadding = $element.css('padding-right')
389
390

    $('<div id="modal-test"/>')
391
392
393
394
395
396
      .on('hidden.bs.modal', function () {
        var currentPadding = $element.css('padding-right')
        assert.strictEqual(currentPadding, originalPadding, 'fixed element padding should be reset after closing')
        $element.remove()
        done()
      })
397
      .on('shown.bs.modal', function () {
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
        var currentPadding = $element.css('padding-right')
        assert.notStrictEqual(currentPadding, originalPadding, 'fixed element padding should be adjusted while opening')
        $(this).bootstrapModal('hide')
      })
      .bootstrapModal('show')
  })

  QUnit.test('should store the original padding of fixed elements in data-padding-right before showing', function (assert) {
    assert.expect(2)
    var done = assert.async()
    var $element = $('<div class="fixed-top"></div>').appendTo('#qunit-fixture')
    var originalPadding = '0px'
    $element.css('padding-right', originalPadding)

    $('<div id="modal-test"/>')
      .on('hidden.bs.modal', function () {
        assert.strictEqual($element.data('padding-right'), undefined, 'data-padding-right should be cleared after closing')
        $element.remove()
416
417
        done()
      })
418
419
420
421
      .on('shown.bs.modal', function () {
        assert.strictEqual($element.data('padding-right'), originalPadding, 'original fixed element padding should be stored in data-padding-right')
        $(this).bootstrapModal('hide')
      })
422
423
424
      .bootstrapModal('show')
  })

425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
  QUnit.test('should adjust the inline margin of the navbar-toggler when opening and restore when closing', function (assert) {
    assert.expect(2)
    var done = assert.async()
    var $element = $('<div class="navbar-toggler"></div>').appendTo('#qunit-fixture')
    var originalMargin = $element.css('margin-right')

    $('<div id="modal-test"/>')
      .on('hidden.bs.modal', function () {
        var currentMargin = $element.css('margin-right')
        assert.strictEqual(currentMargin, originalMargin, 'navbar-toggler margin should be reset after closing')
        $element.remove()
        done()
      })
      .on('shown.bs.modal', function () {
        var currentMargin = $element.css('margin-right')
        assert.notStrictEqual(currentMargin, originalMargin, 'navbar-toggler margin should be adjusted while opening')
        $(this).bootstrapModal('hide')
      })
      .bootstrapModal('show')
  })

  QUnit.test('should store the original margin of the navbar-toggler in data-margin-right before showing', function (assert) {
    assert.expect(2)
448
    var done = assert.async()
449
450
451
    var $element = $('<div class="navbar-toggler"></div>').appendTo('#qunit-fixture')
    var originalMargin = '0px'
    $element.css('margin-right', originalMargin)
452
453

    $('<div id="modal-test"/>')
454
455
456
457
458
      .on('hidden.bs.modal', function () {
        assert.strictEqual($element.data('margin-right'), undefined, 'data-margin-right should be cleared after closing')
        $element.remove()
        done()
      })
459
      .on('shown.bs.modal', function () {
460
        assert.strictEqual($element.data('margin-right'), originalMargin, 'original navbar-toggler margin should be stored in data-margin-right')
461
462
        $(this).bootstrapModal('hide')
      })
463
464
465
466
467
468
469
470
471
472
      .bootstrapModal('show')
  })

  QUnit.test('should ignore values set via CSS when trying to restore body padding after closing', function (assert) {
    assert.expect(1)
    var done = assert.async()
    var $body = $(document.body)
    var $style = $('<style>body { padding-right: 42px; }</style>').appendTo('head')

    $('<div id="modal-test"/>')
473
      .on('hidden.bs.modal', function () {
474
475
        assert.ok(!$body.attr('style'), 'body does not have inline padding set')
        $style.remove()
476
477
        done()
      })
478
479
480
      .on('shown.bs.modal', function () {
        $(this).bootstrapModal('hide')
      })
481
482
483
      .bootstrapModal('show')
  })

fat's avatar
fat committed
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
  QUnit.test('should ignore other inline styles when trying to restore body padding after closing', function (assert) {
    assert.expect(2)
    var done = assert.async()
    var $body = $(document.body)
    var $style = $('<style>body { padding-right: 42px; }</style>').appendTo('head')

    $body.css('color', 'red')

    $('<div id="modal-test"/>')
      .on('hidden.bs.modal', function () {
        assert.strictEqual($body[0].style.paddingRight, '', 'body does not have inline padding set')
        assert.strictEqual($body[0].style.color, 'red', 'body still has other inline styles set')
        $body.removeAttr('style')
        $style.remove()
        done()
      })
      .on('shown.bs.modal', function () {
        $(this).bootstrapModal('hide')
      })
      .bootstrapModal('show')
  })

  QUnit.test('should properly restore non-pixel inline body padding after closing', function (assert) {
    assert.expect(1)
    var done = assert.async()
    var $body = $(document.body)

    $body.css('padding-right', '5%')

    $('<div id="modal-test"/>')
      .on('hidden.bs.modal', function () {
        assert.strictEqual($body[0].style.paddingRight, '5%', 'body does not have inline padding set')
        $body.removeAttr('style')
        done()
      })
      .on('shown.bs.modal', function () {
        $(this).bootstrapModal('hide')
      })
      .bootstrapModal('show')
Chris Rebert's avatar
Chris Rebert committed
523
  })
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545

  QUnit.test('should not follow link in area tag', function (assert) {
    assert.expect(2)
    var done = assert.async()

    $('<map><area id="test" shape="default" data-toggle="modal" data-target="#modal-test" href="demo.html"/></map>')
      .appendTo('#qunit-fixture')

    $('<div id="modal-test"><div class="contents"><div id="close" data-dismiss="modal"/></div></div>')
      .appendTo('#qunit-fixture')

    $('#test')
      .on('click.bs.modal.data-api', function (event) {
        assert.notOk(event.isDefaultPrevented(), 'navigating to href will happen')

        setTimeout(function () {
          assert.ok(event.isDefaultPrevented(), 'model shown instead of navigating to href')
          done()
        }, 1)
      })
      .trigger('click')
  })
546
})