mirror of https://github.com/twbs/bootstrap.git
				
				
				
			Merge pull request #13627 from twbs/maybe-fix-12364
Hopefully fixes trigger focus restoration on modal close
This commit is contained in:
		
						commit
						3cbbc70d55
					
				| 
						 | 
					@ -268,10 +268,13 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ($this.is('a')) e.preventDefault()
 | 
					    if ($this.is('a')) e.preventDefault()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Plugin.call($target, option, this)
 | 
					    $target.one('show.bs.modal', function (showEvent) {
 | 
				
			||||||
    $target.one('hide.bs.modal', function () {
 | 
					      if (showEvent.isDefaultPrevented()) return  // only register focus restorer if modal will actually get shown
 | 
				
			||||||
      $this.is(':visible') && $this.trigger('focus')
 | 
					      $target.one('hidden.bs.modal', function () {
 | 
				
			||||||
 | 
					        $this.is(':visible') && $this.trigger('focus')
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
 | 
					    Plugin.call($target, option, this)
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}(jQuery);
 | 
					}(jQuery);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -201,4 +201,55 @@ $(function () {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    div.remove()
 | 
					    div.remove()
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  test('should restore focus to toggling element when modal is hidden after having been opened via data-api', function () {
 | 
				
			||||||
 | 
					    stop()
 | 
				
			||||||
 | 
					    $.support.transition = false
 | 
				
			||||||
 | 
					    var toggleBtn = $('<button data-toggle="modal" data-target="#modal-test">Launch modal</button>').appendTo('#qunit-fixture')
 | 
				
			||||||
 | 
					    var div = $('<div id="modal-test"><div class="contents"><div id="close" data-dismiss="modal"></div></div></div>')
 | 
				
			||||||
 | 
					    div
 | 
				
			||||||
 | 
					      .on('hidden.bs.modal', function () {
 | 
				
			||||||
 | 
					        window.setTimeout(function () { // give the focus restoration callback a chance to run
 | 
				
			||||||
 | 
					          equal(document.activeElement, toggleBtn[0], 'toggling element is once again focused')
 | 
				
			||||||
 | 
					          div.remove()
 | 
				
			||||||
 | 
					          toggleBtn.remove()
 | 
				
			||||||
 | 
					          start()
 | 
				
			||||||
 | 
					        }, 0)
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .on('shown.bs.modal', function () {
 | 
				
			||||||
 | 
					        $('#close').click()
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .appendTo('#qunit-fixture')
 | 
				
			||||||
 | 
					    toggleBtn.click()
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  test('should not restore focus to toggling element if the associated show event gets prevented', function () {
 | 
				
			||||||
 | 
					    stop()
 | 
				
			||||||
 | 
					    $.support.transition = false
 | 
				
			||||||
 | 
					    var toggleBtn = $('<button data-toggle="modal" data-target="#modal-test">Launch modal</button>').appendTo('#qunit-fixture')
 | 
				
			||||||
 | 
					    var otherBtn = $('<button id="other-btn">Golden boy</button>').appendTo('#qunit-fixture')
 | 
				
			||||||
 | 
					    var div = $('<div id="modal-test"><div class="contents"><div id="close" data-dismiss="modal"></div></div></div>')
 | 
				
			||||||
 | 
					    div
 | 
				
			||||||
 | 
					      .one('show.bs.modal', function (e) {
 | 
				
			||||||
 | 
					        e.preventDefault()
 | 
				
			||||||
 | 
					        otherBtn.focus()
 | 
				
			||||||
 | 
					        window.setTimeout(function () { // give the focus event from the previous line a chance to run
 | 
				
			||||||
 | 
					          div.bootstrapModal('show')
 | 
				
			||||||
 | 
					        }, 0)
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .on('hidden.bs.modal', function () {
 | 
				
			||||||
 | 
					        window.setTimeout(function () { // give the focus restoration callback a chance to run (except it shouldn't run in this case)
 | 
				
			||||||
 | 
					          equal(document.activeElement, otherBtn[0], 'show was prevented, so focus should not have been restored to toggling element')
 | 
				
			||||||
 | 
					          div.remove()
 | 
				
			||||||
 | 
					          toggleBtn.remove()
 | 
				
			||||||
 | 
					          otherBtn.remove()
 | 
				
			||||||
 | 
					          start()
 | 
				
			||||||
 | 
					        }, 0)
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .on('shown.bs.modal', function () {
 | 
				
			||||||
 | 
					        $('#close').click()
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .appendTo('#qunit-fixture')
 | 
				
			||||||
 | 
					    toggleBtn.click()
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue