0
0
mirror of https://github.com/twbs/bootstrap.git synced 2024-12-01 13:24:25 +01:00

Merge branch 'master' into 2.0.4-wip

This commit is contained in:
Jacob Thornton 2012-05-16 19:10:49 -07:00
commit 4b53778150
6 changed files with 273 additions and 216 deletions

View File

@ -52,8 +52,9 @@
this.isShown = true this.isShown = true
escape.call(this) this.escape()
backdrop.call(this, function () {
this.backdrop(function () {
var transition = $.support.transition && that.$element.hasClass('fade') var transition = $.support.transition && that.$element.hasClass('fade')
if (!that.$element.parent().length) { if (!that.$element.parent().length) {
@ -69,6 +70,8 @@
that.$element.addClass('in') that.$element.addClass('in')
that.enforceFocus()
transition ? transition ?
that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) : that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
that.$element.trigger('shown') that.$element.trigger('shown')
@ -91,90 +94,102 @@
$('body').removeClass('modal-open') $('body').removeClass('modal-open')
escape.call(this) this.escape()
this.relaxFocus()
this.$element.removeClass('in') this.$element.removeClass('in')
$.support.transition && this.$element.hasClass('fade') ? $.support.transition && this.$element.hasClass('fade') ?
hideWithTransition.call(this) : this.hideWithTransition() :
hideModal.call(this) this.hideModal()
} }
} , enforceFocus: function () {
var that = this
var console = window.console
/* MODAL PRIVATE METHODS console.log('attach');
* ===================== */ $(document).on('focusin.modal', function (e) {
console.log('triggered');
function hideWithTransition() { if (that.$element[0] !== e.target && !that.$element.has(e.target).length) {
var that = this that.$element.focus()
, timeout = setTimeout(function () { }
that.$element.off($.support.transition.end) })
hideModal.call(that)
}, 500)
this.$element.one($.support.transition.end, function () {
clearTimeout(timeout)
hideModal.call(that)
})
}
function hideModal(that) {
this.$element
.hide()
.trigger('hidden')
backdrop.call(this)
}
function backdrop(callback) {
var that = this
, animate = this.$element.hasClass('fade') ? 'fade' : ''
if (this.isShown && this.options.backdrop) {
var doAnimate = $.support.transition && animate
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
.appendTo(document.body)
if (this.options.backdrop != 'static') {
this.$backdrop.click($.proxy(this.hide, this))
} }
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow , relaxFocus: function () {
$(document).off('focus.modal')
}
this.$backdrop.addClass('in') , escape: function () {
var that = this
if (this.isShown && this.options.keyboard) {
$(document).on('keyup.dismiss.modal', function ( e ) {
e.which == 27 && that.hide()
})
} else if (!this.isShown) {
$(document).off('keyup.dismiss.modal')
}
}
doAnimate ? , hideWithTransition: function () {
this.$backdrop.one($.support.transition.end, callback) : var that = this
callback() , timeout = setTimeout(function () {
that.$element.off($.support.transition.end)
that.hideModal()
}, 500)
} else if (!this.isShown && this.$backdrop) { this.$element.one($.support.transition.end, function () {
this.$backdrop.removeClass('in') clearTimeout(timeout)
that.hideModal()
})
}
$.support.transition && this.$element.hasClass('fade')? , hideModal: function (that) {
this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) : this.$element
removeBackdrop.call(this) .hide()
.trigger('hidden')
} else if (callback) { this.backdrop()
callback() }
}
}
function removeBackdrop() { , removeBackdrop: function () {
this.$backdrop.remove() this.$backdrop.remove()
this.$backdrop = null this.$backdrop = null
} }
function escape() { , backdrop: function (callback) {
var that = this var that = this
if (this.isShown && this.options.keyboard) { , animate = this.$element.hasClass('fade') ? 'fade' : ''
$(document).on('keyup.dismiss.modal', function ( e ) {
e.which == 27 && that.hide() if (this.isShown && this.options.backdrop) {
}) var doAnimate = $.support.transition && animate
} else if (!this.isShown) {
$(document).off('keyup.dismiss.modal') this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
} .appendTo(document.body)
if (this.options.backdrop != 'static') {
this.$backdrop.click($.proxy(this.hide, this))
}
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
this.$backdrop.addClass('in')
doAnimate ?
this.$backdrop.one($.support.transition.end, callback) :
callback()
} else if (!this.isShown && this.$backdrop) {
this.$backdrop.removeClass('in')
$.support.transition && this.$element.hasClass('fade')?
this.$backdrop.one($.support.transition.end, $.proxy(this.removeBackdrop, this)) :
this.removeBackdrop()
} else if (callback) {
callback()
}
}
} }

View File

@ -719,8 +719,9 @@
this.isShown = true this.isShown = true
escape.call(this) this.escape()
backdrop.call(this, function () {
this.backdrop(function () {
var transition = $.support.transition && that.$element.hasClass('fade') var transition = $.support.transition && that.$element.hasClass('fade')
if (!that.$element.parent().length) { if (!that.$element.parent().length) {
@ -736,6 +737,8 @@
that.$element.addClass('in') that.$element.addClass('in')
that.enforceFocus()
transition ? transition ?
that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) : that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
that.$element.trigger('shown') that.$element.trigger('shown')
@ -758,90 +761,102 @@
$('body').removeClass('modal-open') $('body').removeClass('modal-open')
escape.call(this) this.escape()
this.relaxFocus()
this.$element.removeClass('in') this.$element.removeClass('in')
$.support.transition && this.$element.hasClass('fade') ? $.support.transition && this.$element.hasClass('fade') ?
hideWithTransition.call(this) : this.hideWithTransition() :
hideModal.call(this) this.hideModal()
} }
} , enforceFocus: function () {
var that = this
var console = window.console
/* MODAL PRIVATE METHODS console.log('attach');
* ===================== */ $(document).on('focusin.modal', function (e) {
console.log('triggered');
function hideWithTransition() { if (that.$element[0] !== e.target && !that.$element.has(e.target).length) {
var that = this that.$element.focus()
, timeout = setTimeout(function () { }
that.$element.off($.support.transition.end) })
hideModal.call(that)
}, 500)
this.$element.one($.support.transition.end, function () {
clearTimeout(timeout)
hideModal.call(that)
})
}
function hideModal(that) {
this.$element
.hide()
.trigger('hidden')
backdrop.call(this)
}
function backdrop(callback) {
var that = this
, animate = this.$element.hasClass('fade') ? 'fade' : ''
if (this.isShown && this.options.backdrop) {
var doAnimate = $.support.transition && animate
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
.appendTo(document.body)
if (this.options.backdrop != 'static') {
this.$backdrop.click($.proxy(this.hide, this))
} }
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow , relaxFocus: function () {
$(document).off('focus.modal')
}
this.$backdrop.addClass('in') , escape: function () {
var that = this
if (this.isShown && this.options.keyboard) {
$(document).on('keyup.dismiss.modal', function ( e ) {
e.which == 27 && that.hide()
})
} else if (!this.isShown) {
$(document).off('keyup.dismiss.modal')
}
}
doAnimate ? , hideWithTransition: function () {
this.$backdrop.one($.support.transition.end, callback) : var that = this
callback() , timeout = setTimeout(function () {
that.$element.off($.support.transition.end)
that.hideModal()
}, 500)
} else if (!this.isShown && this.$backdrop) { this.$element.one($.support.transition.end, function () {
this.$backdrop.removeClass('in') clearTimeout(timeout)
that.hideModal()
})
}
$.support.transition && this.$element.hasClass('fade')? , hideModal: function (that) {
this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) : this.$element
removeBackdrop.call(this) .hide()
.trigger('hidden')
} else if (callback) { this.backdrop()
callback() }
}
}
function removeBackdrop() { , removeBackdrop: function () {
this.$backdrop.remove() this.$backdrop.remove()
this.$backdrop = null this.$backdrop = null
} }
function escape() { , backdrop: function (callback) {
var that = this var that = this
if (this.isShown && this.options.keyboard) { , animate = this.$element.hasClass('fade') ? 'fade' : ''
$(document).on('keyup.dismiss.modal', function ( e ) {
e.which == 27 && that.hide() if (this.isShown && this.options.backdrop) {
}) var doAnimate = $.support.transition && animate
} else if (!this.isShown) {
$(document).off('keyup.dismiss.modal') this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
} .appendTo(document.body)
if (this.options.backdrop != 'static') {
this.$backdrop.click($.proxy(this.hide, this))
}
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
this.$backdrop.addClass('in')
doAnimate ?
this.$backdrop.one($.support.transition.end, callback) :
callback()
} else if (!this.isShown && this.$backdrop) {
this.$backdrop.removeClass('in')
$.support.transition && this.$element.hasClass('fade')?
this.$backdrop.one($.support.transition.end, $.proxy(this.removeBackdrop, this)) :
this.removeBackdrop()
} else if (callback) {
callback()
}
}
} }

File diff suppressed because one or more lines are too long

View File

@ -199,8 +199,9 @@
<h2>Live demo</h2> <h2>Live demo</h2>
<p>Toggle a modal via javascript by clicking the button below. It will slide down and fade in from the top of the page.</p> <p>Toggle a modal via javascript by clicking the button below. It will slide down and fade in from the top of the page.</p>
<!-- sample modal content --> <!-- sample modal content -->
<div id="myModal" class="modal hide fade"> <div id="myModal" class="modal hide fade" tabindex=0>
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button> <button type="button" class="close" data-dismiss="modal">&times;</button>
<h3>Modal Heading</h3> <h3>Modal Heading</h3>
@ -209,6 +210,11 @@
<h4>Text in a modal</h4> <h4>Text in a modal</h4>
<p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem.</p> <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem.</p>
<form class="well">
<label>Label name</label>
<input type="text" class="span3" placeholder="Type something…">
</form>
<h4>Popover in a modal</h4> <h4>Popover in a modal</h4>
<p>This <a href="#" class="btn popover-test" title="A Title" data-content="And here's some amazing content. It's very engaging. right?">button</a> should trigger a popover on hover.</p> <p>This <a href="#" class="btn popover-test" title="A Title" data-content="And here's some amazing content. It's very engaging. right?">button</a> should trigger a popover on hover.</p>

View File

@ -122,8 +122,9 @@
<h2>{{_i}}Live demo{{/i}}</h2> <h2>{{_i}}Live demo{{/i}}</h2>
<p>{{_i}}Toggle a modal via javascript by clicking the button below. It will slide down and fade in from the top of the page.{{/i}}</p> <p>{{_i}}Toggle a modal via javascript by clicking the button below. It will slide down and fade in from the top of the page.{{/i}}</p>
<!-- sample modal content --> <!-- sample modal content -->
<div id="myModal" class="modal hide fade"> <div id="myModal" class="modal hide fade" tabindex="0">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button> <button type="button" class="close" data-dismiss="modal">&times;</button>
<h3>{{_i}}Modal Heading{{/i}}</h3> <h3>{{_i}}Modal Heading{{/i}}</h3>
@ -132,6 +133,11 @@
<h4>{{_i}}Text in a modal{{/i}}</h4> <h4>{{_i}}Text in a modal{{/i}}</h4>
<p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem.</p> <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem.</p>
<form class="well">
<label>Label name</label>
<input type="text" class="span3" placeholder="Type something…">
</form>
<h4>{{_i}}Popover in a modal{{/i}}</h4> <h4>{{_i}}Popover in a modal{{/i}}</h4>
<p>{{_i}}This <a href="#" class="btn popover-test" title="A Title" data-content="And here's some amazing content. It's very engaging. right?">button</a> should trigger a popover on hover.{{/i}}</p> <p>{{_i}}This <a href="#" class="btn popover-test" title="A Title" data-content="And here's some amazing content. It's very engaging. right?">button</a> should trigger a popover on hover.{{/i}}</p>

157
js/bootstrap-modal.js vendored
View File

@ -52,8 +52,9 @@
this.isShown = true this.isShown = true
escape.call(this) this.escape()
backdrop.call(this, function () {
this.backdrop(function () {
var transition = $.support.transition && that.$element.hasClass('fade') var transition = $.support.transition && that.$element.hasClass('fade')
if (!that.$element.parent().length) { if (!that.$element.parent().length) {
@ -69,6 +70,8 @@
that.$element.addClass('in') that.$element.addClass('in')
that.enforceFocus()
transition ? transition ?
that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) : that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
that.$element.trigger('shown') that.$element.trigger('shown')
@ -91,90 +94,102 @@
$('body').removeClass('modal-open') $('body').removeClass('modal-open')
escape.call(this) this.escape()
this.relaxFocus()
this.$element.removeClass('in') this.$element.removeClass('in')
$.support.transition && this.$element.hasClass('fade') ? $.support.transition && this.$element.hasClass('fade') ?
hideWithTransition.call(this) : this.hideWithTransition() :
hideModal.call(this) this.hideModal()
} }
} , enforceFocus: function () {
var that = this
var console = window.console
/* MODAL PRIVATE METHODS console.log('attach');
* ===================== */ $(document).on('focusin.modal', function (e) {
console.log('triggered');
function hideWithTransition() { if (that.$element[0] !== e.target && !that.$element.has(e.target).length) {
var that = this that.$element.focus()
, timeout = setTimeout(function () { }
that.$element.off($.support.transition.end) })
hideModal.call(that)
}, 500)
this.$element.one($.support.transition.end, function () {
clearTimeout(timeout)
hideModal.call(that)
})
}
function hideModal(that) {
this.$element
.hide()
.trigger('hidden')
backdrop.call(this)
}
function backdrop(callback) {
var that = this
, animate = this.$element.hasClass('fade') ? 'fade' : ''
if (this.isShown && this.options.backdrop) {
var doAnimate = $.support.transition && animate
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
.appendTo(document.body)
if (this.options.backdrop != 'static') {
this.$backdrop.click($.proxy(this.hide, this))
} }
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow , relaxFocus: function () {
$(document).off('focus.modal')
}
this.$backdrop.addClass('in') , escape: function () {
var that = this
if (this.isShown && this.options.keyboard) {
$(document).on('keyup.dismiss.modal', function ( e ) {
e.which == 27 && that.hide()
})
} else if (!this.isShown) {
$(document).off('keyup.dismiss.modal')
}
}
doAnimate ? , hideWithTransition: function () {
this.$backdrop.one($.support.transition.end, callback) : var that = this
callback() , timeout = setTimeout(function () {
that.$element.off($.support.transition.end)
that.hideModal()
}, 500)
} else if (!this.isShown && this.$backdrop) { this.$element.one($.support.transition.end, function () {
this.$backdrop.removeClass('in') clearTimeout(timeout)
that.hideModal()
})
}
$.support.transition && this.$element.hasClass('fade')? , hideModal: function (that) {
this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) : this.$element
removeBackdrop.call(this) .hide()
.trigger('hidden')
} else if (callback) { this.backdrop()
callback() }
}
}
function removeBackdrop() { , removeBackdrop: function () {
this.$backdrop.remove() this.$backdrop.remove()
this.$backdrop = null this.$backdrop = null
} }
function escape() { , backdrop: function (callback) {
var that = this var that = this
if (this.isShown && this.options.keyboard) { , animate = this.$element.hasClass('fade') ? 'fade' : ''
$(document).on('keyup.dismiss.modal', function ( e ) {
e.which == 27 && that.hide() if (this.isShown && this.options.backdrop) {
}) var doAnimate = $.support.transition && animate
} else if (!this.isShown) {
$(document).off('keyup.dismiss.modal') this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
} .appendTo(document.body)
if (this.options.backdrop != 'static') {
this.$backdrop.click($.proxy(this.hide, this))
}
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
this.$backdrop.addClass('in')
doAnimate ?
this.$backdrop.one($.support.transition.end, callback) :
callback()
} else if (!this.isShown && this.$backdrop) {
this.$backdrop.removeClass('in')
$.support.transition && this.$element.hasClass('fade')?
this.$backdrop.one($.support.transition.end, $.proxy(this.removeBackdrop, this)) :
this.removeBackdrop()
} else if (callback) {
callback()
}
}
} }