mirror of
https://github.com/twbs/bootstrap.git
synced 2025-01-17 09:52:29 +01:00
Merge branch '2.1.0-wip' into 2.0.3-wip
Conflicts: docs/assets/bootstrap.zip
This commit is contained in:
commit
f87e4c60e9
Binary file not shown.
23
docs/assets/js/bootstrap-carousel.js
vendored
23
docs/assets/js/bootstrap-carousel.js
vendored
@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
var Carousel = function (element, options) {
|
var Carousel = function (element, options) {
|
||||||
this.$element = $(element)
|
this.$element = $(element)
|
||||||
this.options = $.extend({}, $.fn.carousel.defaults, options)
|
this.options = options
|
||||||
this.options.slide && this.slide(this.options.slide)
|
this.options.slide && this.slide(this.options.slide)
|
||||||
this.options.pause == 'hover' && this.$element
|
this.options.pause == 'hover' && this.$element
|
||||||
.on('mouseenter', $.proxy(this.pause, this))
|
.on('mouseenter', $.proxy(this.pause, this))
|
||||||
@ -37,7 +37,8 @@
|
|||||||
Carousel.prototype = {
|
Carousel.prototype = {
|
||||||
|
|
||||||
cycle: function () {
|
cycle: function () {
|
||||||
this.interval = setInterval($.proxy(this.next, this), this.options.interval)
|
this.options.interval
|
||||||
|
&& (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,13 +95,7 @@
|
|||||||
|
|
||||||
if ($next.hasClass('active')) return
|
if ($next.hasClass('active')) return
|
||||||
|
|
||||||
if (!$.support.transition && this.$element.hasClass('slide')) {
|
if ($.support.transition && this.$element.hasClass('slide')) {
|
||||||
this.$element.trigger('slide')
|
|
||||||
$active.removeClass('active')
|
|
||||||
$next.addClass('active')
|
|
||||||
this.sliding = false
|
|
||||||
this.$element.trigger('slid')
|
|
||||||
} else {
|
|
||||||
$next.addClass(type)
|
$next.addClass(type)
|
||||||
$next[0].offsetWidth // force reflow
|
$next[0].offsetWidth // force reflow
|
||||||
$active.addClass(direction)
|
$active.addClass(direction)
|
||||||
@ -112,6 +107,12 @@
|
|||||||
that.sliding = false
|
that.sliding = false
|
||||||
setTimeout(function () { that.$element.trigger('slid') }, 0)
|
setTimeout(function () { that.$element.trigger('slid') }, 0)
|
||||||
})
|
})
|
||||||
|
} else {
|
||||||
|
this.$element.trigger('slide')
|
||||||
|
$active.removeClass('active')
|
||||||
|
$next.addClass('active')
|
||||||
|
this.sliding = false
|
||||||
|
this.$element.trigger('slid')
|
||||||
}
|
}
|
||||||
|
|
||||||
isCycling && this.cycle()
|
isCycling && this.cycle()
|
||||||
@ -129,11 +130,11 @@
|
|||||||
return this.each(function () {
|
return this.each(function () {
|
||||||
var $this = $(this)
|
var $this = $(this)
|
||||||
, data = $this.data('carousel')
|
, data = $this.data('carousel')
|
||||||
, options = typeof option == 'object' && option
|
, options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option)
|
||||||
if (!data) $this.data('carousel', (data = new Carousel(this, options)))
|
if (!data) $this.data('carousel', (data = new Carousel(this, options)))
|
||||||
if (typeof option == 'number') data.to(option)
|
if (typeof option == 'number') data.to(option)
|
||||||
else if (typeof option == 'string' || (option = options.slide)) data[option]()
|
else if (typeof option == 'string' || (option = options.slide)) data[option]()
|
||||||
else data.cycle()
|
else if (options.interval) data.cycle()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
23
docs/assets/js/bootstrap-collapse.js
vendored
23
docs/assets/js/bootstrap-collapse.js
vendored
@ -42,11 +42,18 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
, show: function () {
|
, show: function () {
|
||||||
var dimension = this.dimension()
|
var dimension
|
||||||
, scroll = $.camelCase(['scroll', dimension].join('-'))
|
, scroll
|
||||||
, actives = this.$parent && this.$parent.find('.in')
|
, actives
|
||||||
, hasData
|
, hasData
|
||||||
|
|
||||||
|
if (this.transitioning) return
|
||||||
|
|
||||||
|
dimension = this.dimension()
|
||||||
|
scroll = $.camelCase(['scroll', dimension].join('-'))
|
||||||
|
actives = this.$parent && this.$parent.find('> .accordion-group > .in')
|
||||||
|
hasData
|
||||||
|
|
||||||
if (actives && actives.length) {
|
if (actives && actives.length) {
|
||||||
hasData = actives.data('collapse')
|
hasData = actives.data('collapse')
|
||||||
actives.collapse('hide')
|
actives.collapse('hide')
|
||||||
@ -56,11 +63,12 @@
|
|||||||
this.$element[dimension](0)
|
this.$element[dimension](0)
|
||||||
this.transition('addClass', 'show', 'shown')
|
this.transition('addClass', 'show', 'shown')
|
||||||
this.$element[dimension](this.$element[0][scroll])
|
this.$element[dimension](this.$element[0][scroll])
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
, hide: function () {
|
, hide: function () {
|
||||||
var dimension = this.dimension()
|
var dimension
|
||||||
|
if (this.transitioning) return
|
||||||
|
dimension = this.dimension()
|
||||||
this.reset(this.$element[dimension]())
|
this.reset(this.$element[dimension]())
|
||||||
this.transition('removeClass', 'hide', 'hidden')
|
this.transition('removeClass', 'hide', 'hidden')
|
||||||
this.$element[dimension](0)
|
this.$element[dimension](0)
|
||||||
@ -74,7 +82,7 @@
|
|||||||
[dimension](size || 'auto')
|
[dimension](size || 'auto')
|
||||||
[0].offsetWidth
|
[0].offsetWidth
|
||||||
|
|
||||||
this.$element[size ? 'addClass' : 'removeClass']('collapse')
|
this.$element[size != null ? 'addClass' : 'removeClass']('collapse')
|
||||||
|
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
@ -83,9 +91,12 @@
|
|||||||
var that = this
|
var that = this
|
||||||
, complete = function () {
|
, complete = function () {
|
||||||
if (startEvent == 'show') that.reset()
|
if (startEvent == 'show') that.reset()
|
||||||
|
that.transitioning = 0
|
||||||
that.$element.trigger(completeEvent)
|
that.$element.trigger(completeEvent)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.transitioning = 1
|
||||||
|
|
||||||
this.$element
|
this.$element
|
||||||
.trigger(startEvent)
|
.trigger(startEvent)
|
||||||
[method]('in')
|
[method]('in')
|
||||||
|
4
docs/assets/js/bootstrap-dropdown.js
vendored
4
docs/assets/js/bootstrap-dropdown.js
vendored
@ -86,7 +86,9 @@
|
|||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
$('html').on('click.dropdown.data-api', clearMenus)
|
$('html').on('click.dropdown.data-api', clearMenus)
|
||||||
$('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
|
$('body')
|
||||||
|
.on('click.dropdown', '.dropdown form', function (e) { e.stopPropagation() })
|
||||||
|
.on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
|
||||||
})
|
})
|
||||||
|
|
||||||
}( window.jQuery );
|
}( window.jQuery );
|
6
docs/assets/js/bootstrap-popover.js
vendored
6
docs/assets/js/bootstrap-popover.js
vendored
@ -38,8 +38,8 @@
|
|||||||
, title = this.getTitle()
|
, title = this.getTitle()
|
||||||
, content = this.getContent()
|
, content = this.getContent()
|
||||||
|
|
||||||
$tip.find('.popover-title')[ $.type(title) == 'object' ? 'append' : 'html' ](title)
|
$tip.find('.popover-title').html(title)
|
||||||
$tip.find('.popover-content > *')[ $.type(content) == 'object' ? 'append' : 'html' ](content)
|
$tip.find('.popover-content > *').html(content)
|
||||||
|
|
||||||
$tip.removeClass('fade top bottom left right in')
|
$tip.removeClass('fade top bottom left right in')
|
||||||
}
|
}
|
||||||
@ -56,8 +56,6 @@
|
|||||||
content = $e.attr('data-content')
|
content = $e.attr('data-content')
|
||||||
|| (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
|
|| (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
|
||||||
|
|
||||||
content = content.toString().replace(/(^\s*|\s*$)/, "")
|
|
||||||
|
|
||||||
return content
|
return content
|
||||||
}
|
}
|
||||||
|
|
||||||
|
33
docs/assets/js/bootstrap-scrollspy.js
vendored
33
docs/assets/js/bootstrap-scrollspy.js
vendored
@ -43,25 +43,42 @@
|
|||||||
constructor: ScrollSpy
|
constructor: ScrollSpy
|
||||||
|
|
||||||
, refresh: function () {
|
, refresh: function () {
|
||||||
this.targets = this.$body
|
var self = this
|
||||||
|
, $targets
|
||||||
|
|
||||||
|
this.offsets = []
|
||||||
|
this.targets = []
|
||||||
|
|
||||||
|
$targets = this.$body
|
||||||
.find(this.selector)
|
.find(this.selector)
|
||||||
.map(function () {
|
.map(function () {
|
||||||
var href = $(this).attr('href')
|
var href = $(this).attr('href')
|
||||||
return /^#\w/.test(href) && $(href).length ? href : null
|
, $href = /^#\w/.test(href) && $(href)
|
||||||
|
return ( $href
|
||||||
|
&& href.length
|
||||||
|
&& [[ $href.position().top, href ]] ) || null
|
||||||
|
})
|
||||||
|
.sort(function (a, b) { return a[0] - b[0] })
|
||||||
|
.each(function () {
|
||||||
|
self.offsets.push(this[0])
|
||||||
|
self.targets.push(this[1])
|
||||||
})
|
})
|
||||||
|
|
||||||
this.offsets = $.map(this.targets, function (id) {
|
|
||||||
return $(id).position().top
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
, process: function () {
|
, process: function () {
|
||||||
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
|
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
|
||||||
|
, scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
|
||||||
|
, maxScroll = scrollHeight - this.$scrollElement.height()
|
||||||
, offsets = this.offsets
|
, offsets = this.offsets
|
||||||
, targets = this.targets
|
, targets = this.targets
|
||||||
, activeTarget = this.activeTarget
|
, activeTarget = this.activeTarget
|
||||||
, i
|
, i
|
||||||
|
|
||||||
|
if (scrollTop >= maxScroll) {
|
||||||
|
return activeTarget != (i = targets.last()[0])
|
||||||
|
&& this.activate ( i )
|
||||||
|
}
|
||||||
|
|
||||||
for (i = offsets.length; i--;) {
|
for (i = offsets.length; i--;) {
|
||||||
activeTarget != targets[i]
|
activeTarget != targets[i]
|
||||||
&& scrollTop >= offsets[i]
|
&& scrollTop >= offsets[i]
|
||||||
@ -85,8 +102,10 @@
|
|||||||
.addClass('active')
|
.addClass('active')
|
||||||
|
|
||||||
if ( active.parent('.dropdown-menu') ) {
|
if ( active.parent('.dropdown-menu') ) {
|
||||||
active.closest('li.dropdown').addClass('active')
|
active = active.closest('li.dropdown').addClass('active')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
active.trigger('activate')
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
8
docs/assets/js/bootstrap-tooltip.js
vendored
8
docs/assets/js/bootstrap-tooltip.js
vendored
@ -73,8 +73,9 @@
|
|||||||
if (!self.options.delay || !self.options.delay.show) {
|
if (!self.options.delay || !self.options.delay.show) {
|
||||||
self.show()
|
self.show()
|
||||||
} else {
|
} else {
|
||||||
|
clearTimeout(this.timeout)
|
||||||
self.hoverState = 'in'
|
self.hoverState = 'in'
|
||||||
setTimeout(function() {
|
this.timeout = setTimeout(function() {
|
||||||
if (self.hoverState == 'in') {
|
if (self.hoverState == 'in') {
|
||||||
self.show()
|
self.show()
|
||||||
}
|
}
|
||||||
@ -88,8 +89,9 @@
|
|||||||
if (!self.options.delay || !self.options.delay.hide) {
|
if (!self.options.delay || !self.options.delay.hide) {
|
||||||
self.hide()
|
self.hide()
|
||||||
} else {
|
} else {
|
||||||
|
clearTimeout(this.timeout)
|
||||||
self.hoverState = 'out'
|
self.hoverState = 'out'
|
||||||
setTimeout(function() {
|
this.timeout = setTimeout(function() {
|
||||||
if (self.hoverState == 'out') {
|
if (self.hoverState == 'out') {
|
||||||
self.hide()
|
self.hide()
|
||||||
}
|
}
|
||||||
@ -206,8 +208,6 @@
|
|||||||
title = $e.attr('data-original-title')
|
title = $e.attr('data-original-title')
|
||||||
|| (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
|
|| (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
|
||||||
|
|
||||||
title = (title || '').toString().replace(/(^\s*|\s*$)/, "")
|
|
||||||
|
|
||||||
return title
|
return title
|
||||||
}
|
}
|
||||||
|
|
||||||
|
8
docs/assets/js/bootstrap-typeahead.js
vendored
8
docs/assets/js/bootstrap-typeahead.js
vendored
@ -39,8 +39,9 @@
|
|||||||
|
|
||||||
, select: function () {
|
, select: function () {
|
||||||
var val = this.$menu.find('.active').attr('data-value')
|
var val = this.$menu.find('.active').attr('data-value')
|
||||||
this.$element.val(val)
|
this.$element
|
||||||
this.$element.change();
|
.val(val)
|
||||||
|
.change()
|
||||||
return this.hide()
|
return this.hide()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,7 +110,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
, highlighter: function (item) {
|
, highlighter: function (item) {
|
||||||
return item.replace(new RegExp('(' + this.query + ')', 'ig'), function ($1, match) {
|
var query = this.query.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&')
|
||||||
|
return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
|
||||||
return '<strong>' + match + '</strong>'
|
return '<strong>' + match + '</strong>'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -589,6 +589,21 @@ $('#myModal').on('hidden', function () {
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<h3>Events</h3>
|
||||||
|
<table class="table table-bordered table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="width: 150px;">Event</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>activate</td>
|
||||||
|
<td>This event fires whenever a new item becomes activated by the scrollspy.</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@ -1320,7 +1335,7 @@ $('#myCollapsible').on('hidden', function () {
|
|||||||
<td>interval</td>
|
<td>interval</td>
|
||||||
<td>number</td>
|
<td>number</td>
|
||||||
<td>5000</td>
|
<td>5000</td>
|
||||||
<td>The amount of time to delay between automatically cycling an item.</td>
|
<td>The amount of time to delay between automatically cycling an item. If false, carousel will not automatically cycle.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>pause</td>
|
<td>pause</td>
|
||||||
|
17
docs/templates/pages/javascript.mustache
vendored
17
docs/templates/pages/javascript.mustache
vendored
@ -513,6 +513,21 @@ $('#myModal').on('hidden', function () {
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<h3>{{_i}}Events{{/i}}</h3>
|
||||||
|
<table class="table table-bordered table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="width: 150px;">{{_i}}Event{{/i}}</th>
|
||||||
|
<th>{{_i}}Description{{/i}}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>{{_i}}activate{{/i}}</td>
|
||||||
|
<td>{{_i}}This event fires whenever a new item becomes activated by the scrollspy.{{/i}}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@ -1244,7 +1259,7 @@ $('#myCollapsible').on('hidden', function () {
|
|||||||
<td>{{_i}}interval{{/i}}</td>
|
<td>{{_i}}interval{{/i}}</td>
|
||||||
<td>{{_i}}number{{/i}}</td>
|
<td>{{_i}}number{{/i}}</td>
|
||||||
<td>5000</td>
|
<td>5000</td>
|
||||||
<td>{{_i}}The amount of time to delay between automatically cycling an item.{{/i}}</td>
|
<td>{{_i}}The amount of time to delay between automatically cycling an item. If false, carousel will not automatically cycle.{{/i}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{_i}}pause{{/i}}</td>
|
<td>{{_i}}pause{{/i}}</td>
|
||||||
|
23
js/bootstrap-carousel.js
vendored
23
js/bootstrap-carousel.js
vendored
@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
var Carousel = function (element, options) {
|
var Carousel = function (element, options) {
|
||||||
this.$element = $(element)
|
this.$element = $(element)
|
||||||
this.options = $.extend({}, $.fn.carousel.defaults, options)
|
this.options = options
|
||||||
this.options.slide && this.slide(this.options.slide)
|
this.options.slide && this.slide(this.options.slide)
|
||||||
this.options.pause == 'hover' && this.$element
|
this.options.pause == 'hover' && this.$element
|
||||||
.on('mouseenter', $.proxy(this.pause, this))
|
.on('mouseenter', $.proxy(this.pause, this))
|
||||||
@ -37,7 +37,8 @@
|
|||||||
Carousel.prototype = {
|
Carousel.prototype = {
|
||||||
|
|
||||||
cycle: function () {
|
cycle: function () {
|
||||||
this.interval = setInterval($.proxy(this.next, this), this.options.interval)
|
this.options.interval
|
||||||
|
&& (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,13 +95,7 @@
|
|||||||
|
|
||||||
if ($next.hasClass('active')) return
|
if ($next.hasClass('active')) return
|
||||||
|
|
||||||
if (!$.support.transition && this.$element.hasClass('slide')) {
|
if ($.support.transition && this.$element.hasClass('slide')) {
|
||||||
this.$element.trigger('slide')
|
|
||||||
$active.removeClass('active')
|
|
||||||
$next.addClass('active')
|
|
||||||
this.sliding = false
|
|
||||||
this.$element.trigger('slid')
|
|
||||||
} else {
|
|
||||||
$next.addClass(type)
|
$next.addClass(type)
|
||||||
$next[0].offsetWidth // force reflow
|
$next[0].offsetWidth // force reflow
|
||||||
$active.addClass(direction)
|
$active.addClass(direction)
|
||||||
@ -112,6 +107,12 @@
|
|||||||
that.sliding = false
|
that.sliding = false
|
||||||
setTimeout(function () { that.$element.trigger('slid') }, 0)
|
setTimeout(function () { that.$element.trigger('slid') }, 0)
|
||||||
})
|
})
|
||||||
|
} else {
|
||||||
|
this.$element.trigger('slide')
|
||||||
|
$active.removeClass('active')
|
||||||
|
$next.addClass('active')
|
||||||
|
this.sliding = false
|
||||||
|
this.$element.trigger('slid')
|
||||||
}
|
}
|
||||||
|
|
||||||
isCycling && this.cycle()
|
isCycling && this.cycle()
|
||||||
@ -129,11 +130,11 @@
|
|||||||
return this.each(function () {
|
return this.each(function () {
|
||||||
var $this = $(this)
|
var $this = $(this)
|
||||||
, data = $this.data('carousel')
|
, data = $this.data('carousel')
|
||||||
, options = typeof option == 'object' && option
|
, options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option)
|
||||||
if (!data) $this.data('carousel', (data = new Carousel(this, options)))
|
if (!data) $this.data('carousel', (data = new Carousel(this, options)))
|
||||||
if (typeof option == 'number') data.to(option)
|
if (typeof option == 'number') data.to(option)
|
||||||
else if (typeof option == 'string' || (option = options.slide)) data[option]()
|
else if (typeof option == 'string' || (option = options.slide)) data[option]()
|
||||||
else data.cycle()
|
else if (options.interval) data.cycle()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
23
js/bootstrap-collapse.js
vendored
23
js/bootstrap-collapse.js
vendored
@ -42,11 +42,18 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
, show: function () {
|
, show: function () {
|
||||||
var dimension = this.dimension()
|
var dimension
|
||||||
, scroll = $.camelCase(['scroll', dimension].join('-'))
|
, scroll
|
||||||
, actives = this.$parent && this.$parent.find('.in')
|
, actives
|
||||||
, hasData
|
, hasData
|
||||||
|
|
||||||
|
if (this.transitioning) return
|
||||||
|
|
||||||
|
dimension = this.dimension()
|
||||||
|
scroll = $.camelCase(['scroll', dimension].join('-'))
|
||||||
|
actives = this.$parent && this.$parent.find('> .accordion-group > .in')
|
||||||
|
hasData
|
||||||
|
|
||||||
if (actives && actives.length) {
|
if (actives && actives.length) {
|
||||||
hasData = actives.data('collapse')
|
hasData = actives.data('collapse')
|
||||||
actives.collapse('hide')
|
actives.collapse('hide')
|
||||||
@ -56,11 +63,12 @@
|
|||||||
this.$element[dimension](0)
|
this.$element[dimension](0)
|
||||||
this.transition('addClass', 'show', 'shown')
|
this.transition('addClass', 'show', 'shown')
|
||||||
this.$element[dimension](this.$element[0][scroll])
|
this.$element[dimension](this.$element[0][scroll])
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
, hide: function () {
|
, hide: function () {
|
||||||
var dimension = this.dimension()
|
var dimension
|
||||||
|
if (this.transitioning) return
|
||||||
|
dimension = this.dimension()
|
||||||
this.reset(this.$element[dimension]())
|
this.reset(this.$element[dimension]())
|
||||||
this.transition('removeClass', 'hide', 'hidden')
|
this.transition('removeClass', 'hide', 'hidden')
|
||||||
this.$element[dimension](0)
|
this.$element[dimension](0)
|
||||||
@ -74,7 +82,7 @@
|
|||||||
[dimension](size || 'auto')
|
[dimension](size || 'auto')
|
||||||
[0].offsetWidth
|
[0].offsetWidth
|
||||||
|
|
||||||
this.$element[size ? 'addClass' : 'removeClass']('collapse')
|
this.$element[size != null ? 'addClass' : 'removeClass']('collapse')
|
||||||
|
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
@ -83,9 +91,12 @@
|
|||||||
var that = this
|
var that = this
|
||||||
, complete = function () {
|
, complete = function () {
|
||||||
if (startEvent == 'show') that.reset()
|
if (startEvent == 'show') that.reset()
|
||||||
|
that.transitioning = 0
|
||||||
that.$element.trigger(completeEvent)
|
that.$element.trigger(completeEvent)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.transitioning = 1
|
||||||
|
|
||||||
this.$element
|
this.$element
|
||||||
.trigger(startEvent)
|
.trigger(startEvent)
|
||||||
[method]('in')
|
[method]('in')
|
||||||
|
4
js/bootstrap-dropdown.js
vendored
4
js/bootstrap-dropdown.js
vendored
@ -86,7 +86,9 @@
|
|||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
$('html').on('click.dropdown.data-api', clearMenus)
|
$('html').on('click.dropdown.data-api', clearMenus)
|
||||||
$('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
|
$('body')
|
||||||
|
.on('click.dropdown', '.dropdown form', function (e) { e.stopPropagation() })
|
||||||
|
.on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
|
||||||
})
|
})
|
||||||
|
|
||||||
}( window.jQuery );
|
}( window.jQuery );
|
6
js/bootstrap-popover.js
vendored
6
js/bootstrap-popover.js
vendored
@ -38,8 +38,8 @@
|
|||||||
, title = this.getTitle()
|
, title = this.getTitle()
|
||||||
, content = this.getContent()
|
, content = this.getContent()
|
||||||
|
|
||||||
$tip.find('.popover-title')[ $.type(title) == 'object' ? 'append' : 'html' ](title)
|
$tip.find('.popover-title').html(title)
|
||||||
$tip.find('.popover-content > *')[ $.type(content) == 'object' ? 'append' : 'html' ](content)
|
$tip.find('.popover-content > *').html(content)
|
||||||
|
|
||||||
$tip.removeClass('fade top bottom left right in')
|
$tip.removeClass('fade top bottom left right in')
|
||||||
}
|
}
|
||||||
@ -56,8 +56,6 @@
|
|||||||
content = $e.attr('data-content')
|
content = $e.attr('data-content')
|
||||||
|| (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
|
|| (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
|
||||||
|
|
||||||
content = content.toString().replace(/(^\s*|\s*$)/, "")
|
|
||||||
|
|
||||||
return content
|
return content
|
||||||
}
|
}
|
||||||
|
|
||||||
|
33
js/bootstrap-scrollspy.js
vendored
33
js/bootstrap-scrollspy.js
vendored
@ -43,25 +43,42 @@
|
|||||||
constructor: ScrollSpy
|
constructor: ScrollSpy
|
||||||
|
|
||||||
, refresh: function () {
|
, refresh: function () {
|
||||||
this.targets = this.$body
|
var self = this
|
||||||
|
, $targets
|
||||||
|
|
||||||
|
this.offsets = []
|
||||||
|
this.targets = []
|
||||||
|
|
||||||
|
$targets = this.$body
|
||||||
.find(this.selector)
|
.find(this.selector)
|
||||||
.map(function () {
|
.map(function () {
|
||||||
var href = $(this).attr('href')
|
var href = $(this).attr('href')
|
||||||
return /^#\w/.test(href) && $(href).length ? href : null
|
, $href = /^#\w/.test(href) && $(href)
|
||||||
|
return ( $href
|
||||||
|
&& href.length
|
||||||
|
&& [[ $href.position().top, href ]] ) || null
|
||||||
|
})
|
||||||
|
.sort(function (a, b) { return a[0] - b[0] })
|
||||||
|
.each(function () {
|
||||||
|
self.offsets.push(this[0])
|
||||||
|
self.targets.push(this[1])
|
||||||
})
|
})
|
||||||
|
|
||||||
this.offsets = $.map(this.targets, function (id) {
|
|
||||||
return $(id).position().top
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
, process: function () {
|
, process: function () {
|
||||||
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
|
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
|
||||||
|
, scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
|
||||||
|
, maxScroll = scrollHeight - this.$scrollElement.height()
|
||||||
, offsets = this.offsets
|
, offsets = this.offsets
|
||||||
, targets = this.targets
|
, targets = this.targets
|
||||||
, activeTarget = this.activeTarget
|
, activeTarget = this.activeTarget
|
||||||
, i
|
, i
|
||||||
|
|
||||||
|
if (scrollTop >= maxScroll) {
|
||||||
|
return activeTarget != (i = targets.last()[0])
|
||||||
|
&& this.activate ( i )
|
||||||
|
}
|
||||||
|
|
||||||
for (i = offsets.length; i--;) {
|
for (i = offsets.length; i--;) {
|
||||||
activeTarget != targets[i]
|
activeTarget != targets[i]
|
||||||
&& scrollTop >= offsets[i]
|
&& scrollTop >= offsets[i]
|
||||||
@ -85,8 +102,10 @@
|
|||||||
.addClass('active')
|
.addClass('active')
|
||||||
|
|
||||||
if ( active.parent('.dropdown-menu') ) {
|
if ( active.parent('.dropdown-menu') ) {
|
||||||
active.closest('li.dropdown').addClass('active')
|
active = active.closest('li.dropdown').addClass('active')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
active.trigger('activate')
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
8
js/bootstrap-tooltip.js
vendored
8
js/bootstrap-tooltip.js
vendored
@ -73,8 +73,9 @@
|
|||||||
if (!self.options.delay || !self.options.delay.show) {
|
if (!self.options.delay || !self.options.delay.show) {
|
||||||
self.show()
|
self.show()
|
||||||
} else {
|
} else {
|
||||||
|
clearTimeout(this.timeout)
|
||||||
self.hoverState = 'in'
|
self.hoverState = 'in'
|
||||||
setTimeout(function() {
|
this.timeout = setTimeout(function() {
|
||||||
if (self.hoverState == 'in') {
|
if (self.hoverState == 'in') {
|
||||||
self.show()
|
self.show()
|
||||||
}
|
}
|
||||||
@ -88,8 +89,9 @@
|
|||||||
if (!self.options.delay || !self.options.delay.hide) {
|
if (!self.options.delay || !self.options.delay.hide) {
|
||||||
self.hide()
|
self.hide()
|
||||||
} else {
|
} else {
|
||||||
|
clearTimeout(this.timeout)
|
||||||
self.hoverState = 'out'
|
self.hoverState = 'out'
|
||||||
setTimeout(function() {
|
this.timeout = setTimeout(function() {
|
||||||
if (self.hoverState == 'out') {
|
if (self.hoverState == 'out') {
|
||||||
self.hide()
|
self.hide()
|
||||||
}
|
}
|
||||||
@ -206,8 +208,6 @@
|
|||||||
title = $e.attr('data-original-title')
|
title = $e.attr('data-original-title')
|
||||||
|| (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
|
|| (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
|
||||||
|
|
||||||
title = (title || '').toString().replace(/(^\s*|\s*$)/, "")
|
|
||||||
|
|
||||||
return title
|
return title
|
||||||
}
|
}
|
||||||
|
|
||||||
|
8
js/bootstrap-typeahead.js
vendored
8
js/bootstrap-typeahead.js
vendored
@ -39,8 +39,9 @@
|
|||||||
|
|
||||||
, select: function () {
|
, select: function () {
|
||||||
var val = this.$menu.find('.active').attr('data-value')
|
var val = this.$menu.find('.active').attr('data-value')
|
||||||
this.$element.val(val)
|
this.$element
|
||||||
this.$element.change();
|
.val(val)
|
||||||
|
.change()
|
||||||
return this.hide()
|
return this.hide()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,7 +110,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
, highlighter: function (item) {
|
, highlighter: function (item) {
|
||||||
return item.replace(new RegExp('(' + this.query + ')', 'ig'), function ($1, match) {
|
var query = this.query.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&')
|
||||||
|
return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
|
||||||
return '<strong>' + match + '</strong>'
|
return '<strong>' + match + '</strong>'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
<script src="unit/bootstrap-tooltip.js"></script>
|
<script src="unit/bootstrap-tooltip.js"></script>
|
||||||
<script src="unit/bootstrap-popover.js"></script>
|
<script src="unit/bootstrap-popover.js"></script>
|
||||||
<script src="unit/bootstrap-typeahead.js"></script>
|
<script src="unit/bootstrap-typeahead.js"></script>
|
||||||
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>
|
<div>
|
||||||
<h1 id="qunit-header">Bootstrap Plugin Test Suite</h1>
|
<h1 id="qunit-header">Bootstrap Plugin Test Suite</h1>
|
||||||
|
16
js/tests/unit/bootstrap-typeahead.js
vendored
16
js/tests/unit/bootstrap-typeahead.js
vendored
@ -52,6 +52,22 @@ $(function () {
|
|||||||
typeahead.$menu.remove()
|
typeahead.$menu.remove()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test("should not explode when regex chars are entered", function () {
|
||||||
|
var $input = $('<input />').typeahead({
|
||||||
|
source: ['aa', 'ab', 'ac', 'mdo*', 'fat+']
|
||||||
|
})
|
||||||
|
, typeahead = $input.data('typeahead')
|
||||||
|
|
||||||
|
$input.val('+')
|
||||||
|
typeahead.lookup()
|
||||||
|
|
||||||
|
ok(typeahead.$menu.is(":visible"), 'typeahead is visible')
|
||||||
|
equals(typeahead.$menu.find('li').length, 1, 'has 1 item in menu')
|
||||||
|
equals(typeahead.$menu.find('.active').length, 1, 'one item is active')
|
||||||
|
|
||||||
|
typeahead.$menu.remove()
|
||||||
|
})
|
||||||
|
|
||||||
test("should hide menu when query entered", function () {
|
test("should hide menu when query entered", function () {
|
||||||
stop()
|
stop()
|
||||||
var $input = $('<input />').typeahead({
|
var $input = $('<input />').typeahead({
|
||||||
|
Loading…
x
Reference in New Issue
Block a user