mirror of
https://github.com/twbs/bootstrap.git
synced 2025-01-17 09:52:29 +01:00
grunt
This commit is contained in:
commit
34891de173
15
Gruntfile.js
15
Gruntfile.js
@ -53,6 +53,9 @@ module.exports = function (grunt) {
|
|||||||
src: 'js/*.js'
|
src: 'js/*.js'
|
||||||
},
|
},
|
||||||
test: {
|
test: {
|
||||||
|
options: {
|
||||||
|
jshintrc: 'js/tests/unit/.jshintrc'
|
||||||
|
},
|
||||||
src: 'js/tests/unit/*.js'
|
src: 'js/tests/unit/*.js'
|
||||||
},
|
},
|
||||||
assets: {
|
assets: {
|
||||||
@ -65,10 +68,6 @@ module.exports = function (grunt) {
|
|||||||
config: 'js/.jscsrc'
|
config: 'js/.jscsrc'
|
||||||
},
|
},
|
||||||
grunt: {
|
grunt: {
|
||||||
options: {
|
|
||||||
requireCamelCaseOrUpperCaseIdentifiers: null,
|
|
||||||
requireParenthesesAroundIIFE: true
|
|
||||||
},
|
|
||||||
src: '<%= jshint.grunt.src %>'
|
src: '<%= jshint.grunt.src %>'
|
||||||
},
|
},
|
||||||
src: {
|
src: {
|
||||||
@ -233,7 +232,7 @@ module.exports = function (grunt) {
|
|||||||
core: {
|
core: {
|
||||||
files: {
|
files: {
|
||||||
'dist/css/<%= pkg.name %>.min.css': 'dist/css/<%= pkg.name %>.css',
|
'dist/css/<%= pkg.name %>.min.css': 'dist/css/<%= pkg.name %>.css',
|
||||||
'dist/css/<%= pkg.name %>-theme.min.css': 'dist/css/<%= pkg.name %>-theme.css',
|
'dist/css/<%= pkg.name %>-theme.min.css': 'dist/css/<%= pkg.name %>-theme.css'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
docs: {
|
docs: {
|
||||||
@ -315,9 +314,9 @@ module.exports = function (grunt) {
|
|||||||
pretty: true,
|
pretty: true,
|
||||||
data: function () {
|
data: function () {
|
||||||
var filePath = path.join(__dirname, 'less/variables.less');
|
var filePath = path.join(__dirname, 'less/variables.less');
|
||||||
var fileContent = fs.readFileSync(filePath, {encoding: 'utf8'});
|
var fileContent = fs.readFileSync(filePath, { encoding: 'utf8' });
|
||||||
var parser = new BsLessdocParser(fileContent);
|
var parser = new BsLessdocParser(fileContent);
|
||||||
return {sections: parser.parseFile()};
|
return { sections: parser.parseFile() };
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
files: {
|
files: {
|
||||||
@ -392,7 +391,7 @@ module.exports = function (grunt) {
|
|||||||
|
|
||||||
|
|
||||||
// These plugins provide necessary tasks.
|
// These plugins provide necessary tasks.
|
||||||
require('load-grunt-tasks')(grunt, {scope: 'devDependencies'});
|
require('load-grunt-tasks')(grunt, { scope: 'devDependencies' });
|
||||||
require('time-grunt')(grunt);
|
require('time-grunt')(grunt);
|
||||||
|
|
||||||
// Docs HTML validation task
|
// Docs HTML validation task
|
||||||
|
17
README.md
17
README.md
@ -14,7 +14,7 @@ To get started, check out <http://getbootstrap.com>!
|
|||||||
- [Contributing](#contributing)
|
- [Contributing](#contributing)
|
||||||
- [Community](#community)
|
- [Community](#community)
|
||||||
- [Versioning](#versioning)
|
- [Versioning](#versioning)
|
||||||
- [Authors](#authors)
|
- [Creators](#creators)
|
||||||
- [Copyright and license](#copyright-and-license)
|
- [Copyright and license](#copyright-and-license)
|
||||||
|
|
||||||
## Quick start
|
## Quick start
|
||||||
@ -134,22 +134,9 @@ Keep track of development and community news.
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Versioning
|
## Versioning
|
||||||
|
|
||||||
For transparency into our release cycle and in striving to maintain backward compatibility, Bootstrap is maintained under the Semantic Versioning guidelines. Sometimes we screw up, but we'll adhere to these rules whenever possible.
|
For transparency into our release cycle and in striving to maintain backward compatibility, Bootstrap is maintained under [the Semantic Versioning guidelines](http://semver.org/). Sometimes we screw up, but we'll adhere to those rules whenever possible.
|
||||||
|
|
||||||
Releases will be numbered with the following format:
|
|
||||||
|
|
||||||
`<major>.<minor>.<patch>`
|
|
||||||
|
|
||||||
And constructed with the following guidelines:
|
|
||||||
|
|
||||||
- Breaking backward compatibility **bumps the major** while resetting minor and patch
|
|
||||||
- New additions without breaking backward compatibility **bumps the minor** while resetting the patch
|
|
||||||
- Bug fixes and misc changes **bumps only the patch**
|
|
||||||
|
|
||||||
For more information on SemVer, please visit <http://semver.org/>.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,5 +30,8 @@
|
|||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "3.1.x-dev"
|
"dev-master": "3.1.x-dev"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"replace": {
|
||||||
|
"twitter/bootstrap": "self.version"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
40
dist/css/bootstrap.css
vendored
40
dist/css/bootstrap.css
vendored
@ -2440,18 +2440,24 @@ input[type="month"].input-lg {
|
|||||||
}
|
}
|
||||||
input[type="radio"][disabled],
|
input[type="radio"][disabled],
|
||||||
input[type="checkbox"][disabled],
|
input[type="checkbox"][disabled],
|
||||||
.radio[disabled],
|
input[type="radio"].disabled,
|
||||||
.radio-inline[disabled],
|
input[type="checkbox"].disabled,
|
||||||
.checkbox[disabled],
|
|
||||||
.checkbox-inline[disabled],
|
|
||||||
fieldset[disabled] input[type="radio"],
|
fieldset[disabled] input[type="radio"],
|
||||||
fieldset[disabled] input[type="checkbox"],
|
fieldset[disabled] input[type="checkbox"] {
|
||||||
fieldset[disabled] .radio,
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
.radio-inline.disabled,
|
||||||
|
.checkbox-inline.disabled,
|
||||||
fieldset[disabled] .radio-inline,
|
fieldset[disabled] .radio-inline,
|
||||||
fieldset[disabled] .checkbox,
|
|
||||||
fieldset[disabled] .checkbox-inline {
|
fieldset[disabled] .checkbox-inline {
|
||||||
cursor: not-allowed;
|
cursor: not-allowed;
|
||||||
}
|
}
|
||||||
|
.radio.disabled label,
|
||||||
|
.checkbox.disabled label,
|
||||||
|
fieldset[disabled] .radio label,
|
||||||
|
fieldset[disabled] .checkbox label {
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
.input-sm {
|
.input-sm {
|
||||||
height: 30px;
|
height: 30px;
|
||||||
padding: 5px 10px;
|
padding: 5px 10px;
|
||||||
@ -3816,6 +3822,9 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
|
|||||||
right: 0;
|
right: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
z-index: 1030;
|
z-index: 1030;
|
||||||
|
-webkit-transform: translate3d(0, 0, 0);
|
||||||
|
-o-transform: translate3d(0, 0, 0);
|
||||||
|
transform: translate3d(0, 0, 0);
|
||||||
}
|
}
|
||||||
@media (min-width: 768px) {
|
@media (min-width: 768px) {
|
||||||
.navbar-fixed-top,
|
.navbar-fixed-top,
|
||||||
@ -5309,16 +5318,14 @@ button.close {
|
|||||||
-webkit-transition: -webkit-transform .3s ease-out;
|
-webkit-transition: -webkit-transform .3s ease-out;
|
||||||
-o-transition: -o-transform .3s ease-out;
|
-o-transition: -o-transform .3s ease-out;
|
||||||
transition: transform .3s ease-out;
|
transition: transform .3s ease-out;
|
||||||
-webkit-transform: translate(0, -25%);
|
-webkit-transform: translate3d(0, -25%, 0);
|
||||||
-ms-transform: translate(0, -25%);
|
-o-transform: translate3d(0, -25%, 0);
|
||||||
-o-transform: translate(0, -25%);
|
transform: translate3d(0, -25%, 0);
|
||||||
transform: translate(0, -25%);
|
|
||||||
}
|
}
|
||||||
.modal.in .modal-dialog {
|
.modal.in .modal-dialog {
|
||||||
-webkit-transform: translate(0, 0);
|
-webkit-transform: translate3d(0, 0, 0);
|
||||||
-ms-transform: translate(0, 0);
|
-o-transform: translate3d(0, 0, 0);
|
||||||
-o-transform: translate(0, 0);
|
transform: translate3d(0, 0, 0);
|
||||||
transform: translate(0, 0);
|
|
||||||
}
|
}
|
||||||
.modal-dialog {
|
.modal-dialog {
|
||||||
position: relative;
|
position: relative;
|
||||||
@ -5904,6 +5911,9 @@ button.close {
|
|||||||
}
|
}
|
||||||
.affix {
|
.affix {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
|
-webkit-transform: translate3d(0, 0, 0);
|
||||||
|
-o-transform: translate3d(0, 0, 0);
|
||||||
|
transform: translate3d(0, 0, 0);
|
||||||
}
|
}
|
||||||
@-ms-viewport {
|
@-ms-viewport {
|
||||||
width: device-width;
|
width: device-width;
|
||||||
|
2
dist/css/bootstrap.css.map
vendored
2
dist/css/bootstrap.css.map
vendored
File diff suppressed because one or more lines are too long
2
dist/css/bootstrap.min.css
vendored
2
dist/css/bootstrap.min.css
vendored
File diff suppressed because one or more lines are too long
108
dist/js/bootstrap.js
vendored
108
dist/js/bootstrap.js
vendored
@ -42,7 +42,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
|
|
||||||
// http://blog.alexmaccaw.com/css-transitions
|
// http://blog.alexmaccaw.com/css-transitions
|
||||||
$.fn.emulateTransitionEnd = function (duration) {
|
$.fn.emulateTransitionEnd = function (duration) {
|
||||||
var called = false, $el = this
|
var called = false
|
||||||
|
var $el = this
|
||||||
$(this).one($.support.transition.end, function () { called = true })
|
$(this).one($.support.transition.end, function () { called = true })
|
||||||
var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
|
var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
|
||||||
setTimeout(callback, duration)
|
setTimeout(callback, duration)
|
||||||
@ -297,7 +298,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
wrap: true
|
wrap: true
|
||||||
}
|
}
|
||||||
|
|
||||||
Carousel.prototype.cycle = function (e) {
|
Carousel.prototype.cycle = function (e) {
|
||||||
e || (this.paused = false)
|
e || (this.paused = false)
|
||||||
|
|
||||||
this.interval && clearInterval(this.interval)
|
this.interval && clearInterval(this.interval)
|
||||||
@ -364,10 +365,13 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
$next = this.$element.find('.item')[fallback]()
|
$next = this.$element.find('.item')[fallback]()
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($next.hasClass('active')) return this.sliding = false
|
if ($next.hasClass('active')) return (this.sliding = false)
|
||||||
|
|
||||||
var relatedTarget = $next[0]
|
var relatedTarget = $next[0]
|
||||||
var slideEvent = $.Event('slide.bs.carousel', { relatedTarget: relatedTarget, direction: direction })
|
var slideEvent = $.Event('slide.bs.carousel', {
|
||||||
|
relatedTarget: relatedTarget,
|
||||||
|
direction: direction
|
||||||
|
})
|
||||||
this.$element.trigger(slideEvent)
|
this.$element.trigger(slideEvent)
|
||||||
if (slideEvent.isDefaultPrevented()) return
|
if (slideEvent.isDefaultPrevented()) return
|
||||||
|
|
||||||
@ -394,7 +398,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
$next.removeClass([type, direction].join(' ')).addClass('active')
|
$next.removeClass([type, direction].join(' ')).addClass('active')
|
||||||
$active.removeClass(['active', direction].join(' '))
|
$active.removeClass(['active', direction].join(' '))
|
||||||
that.sliding = false
|
that.sliding = false
|
||||||
setTimeout(function () { that.$element.trigger(slidEvent) }, 0)
|
setTimeout(function () {
|
||||||
|
that.$element.trigger(slidEvent)
|
||||||
|
}, 0)
|
||||||
})
|
})
|
||||||
.emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)
|
.emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)
|
||||||
} else {
|
} else {
|
||||||
@ -446,7 +452,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
// =================
|
// =================
|
||||||
|
|
||||||
$(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
|
$(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
|
||||||
var $this = $(this), href
|
var href
|
||||||
|
var $this = $(this)
|
||||||
var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
|
var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
|
||||||
var options = $.extend({}, $target.data(), $this.data())
|
var options = $.extend({}, $target.data(), $this.data())
|
||||||
var slideIndex = $this.attr('data-slide-to')
|
var slideIndex = $this.attr('data-slide-to')
|
||||||
@ -454,7 +461,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
|
|
||||||
Plugin.call($target, options)
|
Plugin.call($target, options)
|
||||||
|
|
||||||
if (slideIndex = $this.attr('data-slide-to')) {
|
if (slideIndex) {
|
||||||
$target.data('bs.carousel').to(slideIndex)
|
$target.data('bs.carousel').to(slideIndex)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -631,7 +638,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
// =================
|
// =================
|
||||||
|
|
||||||
$(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
|
$(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
|
||||||
var $this = $(this), href
|
var href
|
||||||
|
var $this = $(this)
|
||||||
var target = $this.attr('data-target')
|
var target = $this.attr('data-target')
|
||||||
|| e.preventDefault()
|
|| e.preventDefault()
|
||||||
|| (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
|
|| (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
|
||||||
@ -993,7 +1001,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
} else if (!this.isShown && this.$backdrop) {
|
} else if (!this.isShown && this.$backdrop) {
|
||||||
this.$backdrop.removeClass('in')
|
this.$backdrop.removeClass('in')
|
||||||
|
|
||||||
var callbackRemove = function() {
|
var callbackRemove = function () {
|
||||||
that.removeBackdrop()
|
that.removeBackdrop()
|
||||||
callback && callback()
|
callback && callback()
|
||||||
}
|
}
|
||||||
@ -1013,8 +1021,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
this.scrollbarWidth = this.scrollbarWidth || this.measureScrollbar()
|
this.scrollbarWidth = this.scrollbarWidth || this.measureScrollbar()
|
||||||
}
|
}
|
||||||
|
|
||||||
Modal.prototype.setScrollbar = function () {
|
Modal.prototype.setScrollbar = function () {
|
||||||
var bodyPad = parseInt(this.$body.css('padding-right') || 0)
|
var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
|
||||||
if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
|
if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1073,10 +1081,13 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
|
|
||||||
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);
|
||||||
@ -1228,12 +1239,17 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
if (this.hasContent() && this.enabled) {
|
if (this.hasContent() && this.enabled) {
|
||||||
this.$element.trigger(e)
|
this.$element.trigger(e)
|
||||||
|
|
||||||
if (e.isDefaultPrevented()) return
|
var inDom = $.contains(document.documentElement, this.$element[0])
|
||||||
var that = this;
|
if (e.isDefaultPrevented() || !inDom) return
|
||||||
|
var that = this
|
||||||
|
|
||||||
var $tip = this.tip()
|
var $tip = this.tip()
|
||||||
|
|
||||||
|
var tipId = this.getUID(this.type)
|
||||||
|
|
||||||
this.setContent()
|
this.setContent()
|
||||||
|
$tip.attr('id', tipId)
|
||||||
|
this.$element.attr('aria-describedby', tipId)
|
||||||
|
|
||||||
if (this.options.animation) $tip.addClass('fade')
|
if (this.options.animation) $tip.addClass('fade')
|
||||||
|
|
||||||
@ -1249,6 +1265,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
.detach()
|
.detach()
|
||||||
.css({ top: 0, left: 0, display: 'block' })
|
.css({ top: 0, left: 0, display: 'block' })
|
||||||
.addClass(placement)
|
.addClass(placement)
|
||||||
|
.data('bs.' + this.type, this)
|
||||||
|
|
||||||
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
|
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
|
||||||
|
|
||||||
@ -1277,7 +1294,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
this.applyPlacement(calculatedOffset, placement)
|
this.applyPlacement(calculatedOffset, placement)
|
||||||
this.hoverState = null
|
this.hoverState = null
|
||||||
|
|
||||||
var complete = function() {
|
var complete = function () {
|
||||||
that.$element.trigger('shown.bs.' + that.type)
|
that.$element.trigger('shown.bs.' + that.type)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1356,6 +1373,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
var $tip = this.tip()
|
var $tip = this.tip()
|
||||||
var e = $.Event('hide.bs.' + this.type)
|
var e = $.Event('hide.bs.' + this.type)
|
||||||
|
|
||||||
|
this.$element.removeAttr('aria-describedby')
|
||||||
|
|
||||||
function complete() {
|
function complete() {
|
||||||
if (that.hoverState != 'in') $tip.detach()
|
if (that.hoverState != 'in') $tip.detach()
|
||||||
that.$element.trigger('hidden.bs.' + that.type)
|
that.$element.trigger('hidden.bs.' + that.type)
|
||||||
@ -1380,7 +1399,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
|
|
||||||
Tooltip.prototype.fixTitle = function () {
|
Tooltip.prototype.fixTitle = function () {
|
||||||
var $e = this.$element
|
var $e = this.$element
|
||||||
if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
|
if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {
|
||||||
$e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
|
$e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1397,7 +1416,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop(),
|
scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop(),
|
||||||
width: isBody ? $(window).width() : $element.outerWidth(),
|
width: isBody ? $(window).width() : $element.outerWidth(),
|
||||||
height: isBody ? $(window).height() : $element.outerHeight()
|
height: isBody ? $(window).height() : $element.outerHeight()
|
||||||
}, isBody ? {top: 0, left: 0} : $element.offset())
|
}, isBody ? { top: 0, left: 0 } : $element.offset())
|
||||||
}
|
}
|
||||||
|
|
||||||
Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
|
Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
|
||||||
@ -1447,12 +1466,18 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
return title
|
return title
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.getUID = function (prefix) {
|
||||||
|
do prefix += ~~(Math.random() * 1000000)
|
||||||
|
while (document.getElementById(prefix))
|
||||||
|
return prefix
|
||||||
|
}
|
||||||
|
|
||||||
Tooltip.prototype.tip = function () {
|
Tooltip.prototype.tip = function () {
|
||||||
return this.$tip = this.$tip || $(this.options.template)
|
return (this.$tip = this.$tip || $(this.options.template))
|
||||||
}
|
}
|
||||||
|
|
||||||
Tooltip.prototype.arrow = function () {
|
Tooltip.prototype.arrow = function () {
|
||||||
return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')
|
return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
|
||||||
}
|
}
|
||||||
|
|
||||||
Tooltip.prototype.validate = function () {
|
Tooltip.prototype.validate = function () {
|
||||||
@ -1599,7 +1624,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
}
|
}
|
||||||
|
|
||||||
Popover.prototype.arrow = function () {
|
Popover.prototype.arrow = function () {
|
||||||
return this.$arrow = this.$arrow || this.tip().find('.arrow')
|
return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
|
||||||
}
|
}
|
||||||
|
|
||||||
Popover.prototype.tip = function () {
|
Popover.prototype.tip = function () {
|
||||||
@ -1655,20 +1680,17 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
// ==========================
|
// ==========================
|
||||||
|
|
||||||
function ScrollSpy(element, options) {
|
function ScrollSpy(element, options) {
|
||||||
var href
|
|
||||||
var process = $.proxy(this.process, this)
|
var process = $.proxy(this.process, this)
|
||||||
|
|
||||||
this.$element = $(element).is('body') ? $(window) : $(element)
|
|
||||||
this.$body = $('body')
|
this.$body = $('body')
|
||||||
this.$scrollElement = this.$element.on('scroll.bs.scrollspy', process)
|
this.$scrollElement = $(element).is('body') ? $(window) : $(element)
|
||||||
this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
|
this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
|
||||||
this.selector = (this.options.target
|
this.selector = (this.options.target || '') + ' .nav li > a'
|
||||||
|| ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
|
this.offsets = []
|
||||||
|| '') + ' .nav li > a'
|
this.targets = []
|
||||||
this.offsets = $([])
|
|
||||||
this.targets = $([])
|
|
||||||
this.activeTarget = null
|
this.activeTarget = null
|
||||||
|
|
||||||
|
this.$scrollElement.on('scroll.bs.scrollspy', process)
|
||||||
this.refresh()
|
this.refresh()
|
||||||
this.process()
|
this.process()
|
||||||
}
|
}
|
||||||
@ -1680,10 +1702,16 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
}
|
}
|
||||||
|
|
||||||
ScrollSpy.prototype.refresh = function () {
|
ScrollSpy.prototype.refresh = function () {
|
||||||
var offsetMethod = this.$element[0] == window ? 'offset' : 'position'
|
var offsetMethod = 'offset'
|
||||||
|
var offsetBase = 0
|
||||||
|
|
||||||
this.offsets = $([])
|
if (!$.isWindow(this.$scrollElement[0])) {
|
||||||
this.targets = $([])
|
offsetMethod = 'position'
|
||||||
|
offsetBase = this.$scrollElement.scrollTop()
|
||||||
|
}
|
||||||
|
|
||||||
|
this.offsets = []
|
||||||
|
this.targets = []
|
||||||
|
|
||||||
var self = this
|
var self = this
|
||||||
|
|
||||||
@ -1698,7 +1726,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
return ($href
|
return ($href
|
||||||
&& $href.length
|
&& $href.length
|
||||||
&& $href.is(':visible')
|
&& $href.is(':visible')
|
||||||
&& [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null
|
&& [[$href[offsetMethod]().top + offsetBase, href]]) || null
|
||||||
})
|
})
|
||||||
.sort(function (a, b) { return a[0] - b[0] })
|
.sort(function (a, b) { return a[0] - b[0] })
|
||||||
.each(function () {
|
.each(function () {
|
||||||
@ -1710,14 +1738,14 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
ScrollSpy.prototype.process = function () {
|
ScrollSpy.prototype.process = function () {
|
||||||
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
|
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
|
||||||
var scrollHeight = this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
|
var scrollHeight = this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
|
||||||
var maxScroll = scrollHeight - this.$scrollElement.height()
|
var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
|
||||||
var offsets = this.offsets
|
var offsets = this.offsets
|
||||||
var targets = this.targets
|
var targets = this.targets
|
||||||
var activeTarget = this.activeTarget
|
var activeTarget = this.activeTarget
|
||||||
var i
|
var i
|
||||||
|
|
||||||
if (scrollTop >= maxScroll) {
|
if (scrollTop >= maxScroll) {
|
||||||
return activeTarget != (i = targets.last()[0]) && this.activate(i)
|
return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (activeTarget && scrollTop <= offsets[0]) {
|
if (activeTarget && scrollTop <= offsets[0]) {
|
||||||
@ -1728,7 +1756,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
activeTarget != targets[i]
|
activeTarget != targets[i]
|
||||||
&& scrollTop >= offsets[i]
|
&& scrollTop >= offsets[i]
|
||||||
&& (!offsets[i + 1] || scrollTop <= offsets[i + 1])
|
&& (!offsets[i + 1] || scrollTop <= offsets[i + 1])
|
||||||
&& this.activate( targets[i] )
|
&& this.activate(targets[i])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1892,7 +1920,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
// TAB PLUGIN DEFINITION
|
// TAB PLUGIN DEFINITION
|
||||||
// =====================
|
// =====================
|
||||||
|
|
||||||
function Plugin( option ) {
|
function Plugin(option) {
|
||||||
return this.each(function () {
|
return this.each(function () {
|
||||||
var $this = $(this)
|
var $this = $(this)
|
||||||
var data = $this.data('bs.tab')
|
var data = $this.data('bs.tab')
|
||||||
@ -2015,7 +2043,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
|
|||||||
.trigger($.Event(affixType.replace('affix', 'affixed')))
|
.trigger($.Event(affixType.replace('affix', 'affixed')))
|
||||||
|
|
||||||
if (affix == 'bottom') {
|
if (affix == 'bottom') {
|
||||||
this.$element.offset({ top: scrollHeight - this.$element.height() - offsetBottom })
|
this.$element.offset({
|
||||||
|
top: scrollHeight - this.$element.height() - offsetBottom
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
dist/js/bootstrap.min.js
vendored
2
dist/js/bootstrap.min.js
vendored
File diff suppressed because one or more lines are too long
@ -246,7 +246,7 @@
|
|||||||
<button class="btn btn-default btn-lg dropdown-toggle" type="button" data-toggle="dropdown">
|
<button class="btn btn-default btn-lg dropdown-toggle" type="button" data-toggle="dropdown">
|
||||||
Large button <span class="caret"></span>
|
Large button <span class="caret"></span>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu" role="menu">
|
||||||
...
|
...
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@ -256,7 +256,7 @@
|
|||||||
<button class="btn btn-default btn-sm dropdown-toggle" type="button" data-toggle="dropdown">
|
<button class="btn btn-default btn-sm dropdown-toggle" type="button" data-toggle="dropdown">
|
||||||
Small button <span class="caret"></span>
|
Small button <span class="caret"></span>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu" role="menu">
|
||||||
...
|
...
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@ -266,7 +266,7 @@
|
|||||||
<button class="btn btn-default btn-xs dropdown-toggle" type="button" data-toggle="dropdown">
|
<button class="btn btn-default btn-xs dropdown-toggle" type="button" data-toggle="dropdown">
|
||||||
Extra small button <span class="caret"></span>
|
Extra small button <span class="caret"></span>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu" role="menu">
|
||||||
...
|
...
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@ -313,7 +313,7 @@
|
|||||||
<span class="caret"></span>
|
<span class="caret"></span>
|
||||||
<span class="sr-only">Toggle Dropdown</span>
|
<span class="sr-only">Toggle Dropdown</span>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu" role="menu">
|
||||||
<!-- Dropdown menu links -->
|
<!-- Dropdown menu links -->
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -121,7 +121,7 @@
|
|||||||
Dropdown
|
Dropdown
|
||||||
<span class="caret"></span>
|
<span class="caret"></span>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu" role="menu">
|
||||||
<li><a href="#">Dropdown link</a></li>
|
<li><a href="#">Dropdown link</a></li>
|
||||||
<li><a href="#">Dropdown link</a></li>
|
<li><a href="#">Dropdown link</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -221,7 +221,7 @@
|
|||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<div class="input-group-btn">
|
<div class="input-group-btn">
|
||||||
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button>
|
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu" role="menu">
|
||||||
<li><a href="#">Action</a></li>
|
<li><a href="#">Action</a></li>
|
||||||
<li><a href="#">Another action</a></li>
|
<li><a href="#">Another action</a></li>
|
||||||
<li><a href="#">Something else here</a></li>
|
<li><a href="#">Something else here</a></li>
|
||||||
@ -237,7 +237,7 @@
|
|||||||
<input type="text" class="form-control">
|
<input type="text" class="form-control">
|
||||||
<div class="input-group-btn">
|
<div class="input-group-btn">
|
||||||
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button>
|
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button>
|
||||||
<ul class="dropdown-menu dropdown-menu-right">
|
<ul class="dropdown-menu dropdown-menu-right" role="menu">
|
||||||
<li><a href="#">Action</a></li>
|
<li><a href="#">Action</a></li>
|
||||||
<li><a href="#">Another action</a></li>
|
<li><a href="#">Another action</a></li>
|
||||||
<li><a href="#">Something else here</a></li>
|
<li><a href="#">Something else here</a></li>
|
||||||
|
@ -98,7 +98,7 @@
|
|||||||
<li><a href="#">Link</a></li>
|
<li><a href="#">Link</a></li>
|
||||||
<li class="dropdown">
|
<li class="dropdown">
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu" role="menu">
|
||||||
<li><a href="#">Action</a></li>
|
<li><a href="#">Action</a></li>
|
||||||
<li><a href="#">Another action</a></li>
|
<li><a href="#">Another action</a></li>
|
||||||
<li><a href="#">Something else here</a></li>
|
<li><a href="#">Something else here</a></li>
|
||||||
@ -119,7 +119,7 @@
|
|||||||
<li><a href="#">Link</a></li>
|
<li><a href="#">Link</a></li>
|
||||||
<li class="dropdown">
|
<li class="dropdown">
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu" role="menu">
|
||||||
<li><a href="#">Action</a></li>
|
<li><a href="#">Action</a></li>
|
||||||
<li><a href="#">Another action</a></li>
|
<li><a href="#">Another action</a></li>
|
||||||
<li><a href="#">Something else here</a></li>
|
<li><a href="#">Something else here</a></li>
|
||||||
|
@ -137,7 +137,7 @@
|
|||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
Dropdown <span class="caret"></span>
|
Dropdown <span class="caret"></span>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu" role="menu">
|
||||||
...
|
...
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
@ -171,7 +171,7 @@
|
|||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
Dropdown <span class="caret"></span>
|
Dropdown <span class="caret"></span>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu" role="menu">
|
||||||
...
|
...
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
@ -207,7 +207,8 @@
|
|||||||
{% endhighlight %}
|
{% endhighlight %}
|
||||||
|
|
||||||
<h3>Checkboxes and radios</h3>
|
<h3>Checkboxes and radios</h3>
|
||||||
<p>Checkboxes are for selecting one or several options in a list while radios are for selecting one option from many.</p>
|
<p>Checkboxes are for selecting one or several options in a list, while radios are for selecting one option from many.</p>
|
||||||
|
<p>A checkbox or radio with the <code>disabled</code> attribute will be styled appropriately. To have the <code><label></code> for the checkbox or radio also display a "not-allowed" cursor when the user hovers over the label, add the <code>.disabled</code> class to your <code>.radio</code>, <code>.radio-inline</code>, <code>.checkbox</code>, <code>.checkbox-inline</code>, or <code><fieldset></code>.</p>
|
||||||
<h4>Default (stacked)</h4>
|
<h4>Default (stacked)</h4>
|
||||||
<div class="bs-example">
|
<div class="bs-example">
|
||||||
<form role="form">
|
<form role="form">
|
||||||
@ -217,6 +218,12 @@
|
|||||||
Option one is this and that—be sure to include why it's great
|
Option one is this and that—be sure to include why it's great
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="checkbox disabled">
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" value="" disabled>
|
||||||
|
Option two is disabled
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
<br>
|
<br>
|
||||||
<div class="radio">
|
<div class="radio">
|
||||||
<label>
|
<label>
|
||||||
@ -230,6 +237,12 @@
|
|||||||
Option two can be something else and selecting it will deselect option one
|
Option two can be something else and selecting it will deselect option one
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="radio disabled">
|
||||||
|
<label>
|
||||||
|
<input type="radio" name="optionsRadios" id="optionsRadios3" value="option3" disabled>
|
||||||
|
Option three is disabled
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div><!-- /.bs-example -->
|
</div><!-- /.bs-example -->
|
||||||
{% highlight html %}
|
{% highlight html %}
|
||||||
@ -239,6 +252,12 @@
|
|||||||
Option one is this and that—be sure to include why it's great
|
Option one is this and that—be sure to include why it's great
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="checkbox disabled">
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" value="" disabled>
|
||||||
|
Option two is disabled
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="radio">
|
<div class="radio">
|
||||||
<label>
|
<label>
|
||||||
@ -252,6 +271,12 @@
|
|||||||
Option two can be something else and selecting it will deselect option one
|
Option two can be something else and selecting it will deselect option one
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="radio disabled">
|
||||||
|
<label>
|
||||||
|
<input type="radio" name="optionsRadios" id="optionsRadios3" value="option3" disabled>
|
||||||
|
Option three is disabled
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
{% endhighlight %}
|
{% endhighlight %}
|
||||||
|
|
||||||
<h4>Inline checkboxes and radios</h4>
|
<h4>Inline checkboxes and radios</h4>
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
|
|
||||||
!function ($) {
|
!function ($) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
|
|
||||||
|
@ -6,7 +6,10 @@
|
|||||||
* details, see http://creativecommons.org/licenses/by/3.0/.
|
* details, see http://creativecommons.org/licenses/by/3.0/.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* global JSZip, less, saveAs, UglifyJS, __js, __less, __fonts */
|
||||||
|
|
||||||
window.onload = function () { // wait for load in a dumb way because B-0
|
window.onload = function () { // wait for load in a dumb way because B-0
|
||||||
|
'use strict';
|
||||||
var cw = '/*!\n' +
|
var cw = '/*!\n' +
|
||||||
' * Bootstrap v3.1.1 (http://getbootstrap.com)\n' +
|
' * Bootstrap v3.1.1 (http://getbootstrap.com)\n' +
|
||||||
' * Copyright 2011-2014 Twitter, Inc.\n' +
|
' * Copyright 2011-2014 Twitter, Inc.\n' +
|
||||||
@ -24,6 +27,12 @@ window.onload = function () { // wait for load in a dumb way because B-0
|
|||||||
throw err
|
throw err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function showSuccess(msg) {
|
||||||
|
$('<div class="bs-callout bs-callout-info">' +
|
||||||
|
'<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>' + msg +
|
||||||
|
'</div>').insertAfter('.bs-customize-download')
|
||||||
|
}
|
||||||
|
|
||||||
function showCallout(msg, showUpTop) {
|
function showCallout(msg, showUpTop) {
|
||||||
var callout = $('<div class="bs-callout bs-callout-danger">' +
|
var callout = $('<div class="bs-callout bs-callout-danger">' +
|
||||||
'<h4>Attention!</h4>' +
|
'<h4>Attention!</h4>' +
|
||||||
@ -60,16 +69,18 @@ window.onload = function () { // wait for load in a dumb way because B-0
|
|||||||
data: JSON.stringify(data)
|
data: JSON.stringify(data)
|
||||||
})
|
})
|
||||||
.success(function (result) {
|
.success(function (result) {
|
||||||
|
var gistUrl = result.html_url;
|
||||||
var origin = window.location.protocol + '//' + window.location.host
|
var origin = window.location.protocol + '//' + window.location.host
|
||||||
var newUrl = origin + window.location.pathname + '?id=' + result.id
|
var customizerUrl = origin + window.location.pathname + '?id=' + result.id
|
||||||
history.replaceState(false, document.title, newUrl)
|
showSuccess('<strong>Success!</strong> Your configuration has been saved to <a href="' + gistUrl + '">' + gistUrl + '</a> ' +
|
||||||
callback(result.html_url, newUrl)
|
'and can be revisited here at <a href="' + customizerUrl + '">' + customizerUrl + '</a> for further customization.')
|
||||||
|
history.replaceState(false, document.title, customizerUrl)
|
||||||
|
callback(gistUrl, customizerUrl)
|
||||||
})
|
})
|
||||||
.error(function (err) {
|
.error(function (err) {
|
||||||
try {
|
try {
|
||||||
showError('<strong>Ruh roh!</strong> Could not save gist file, configuration not saved.', err)
|
showError('<strong>Ruh roh!</strong> Could not save gist file, configuration not saved.', err)
|
||||||
}
|
} catch (sameErr) {
|
||||||
catch (sameErr) {
|
|
||||||
// deliberately ignore the error
|
// deliberately ignore the error
|
||||||
}
|
}
|
||||||
callback('<none>', '<none>')
|
callback('<none>', '<none>')
|
||||||
@ -150,7 +161,7 @@ window.onload = function () { // wait for load in a dumb way because B-0
|
|||||||
if (fonts) {
|
if (fonts) {
|
||||||
var fontsFolder = zip.folder('fonts')
|
var fontsFolder = zip.folder('fonts')
|
||||||
for (var fontsFileName in fonts) {
|
for (var fontsFileName in fonts) {
|
||||||
fontsFolder.file(fontsFileName, fonts[fontsFileName], {base64: true})
|
fontsFolder.file(fontsFileName, fonts[fontsFileName], { base64: true })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -208,7 +219,7 @@ window.onload = function () { // wait for load in a dumb way because B-0
|
|||||||
var lessSource = __less[lessFilename]
|
var lessSource = __less[lessFilename]
|
||||||
|
|
||||||
var lessFilenames = includedLessFilenames(lessFilename)
|
var lessFilenames = includedLessFilenames(lessFilename)
|
||||||
$.each(lessFilenames, function(index, filename) {
|
$.each(lessFilenames, function (index, filename) {
|
||||||
var fileInclude = lessFileIncludes[filename]
|
var fileInclude = lessFileIncludes[filename]
|
||||||
|
|
||||||
// Files not explicitly unchecked are compiled into the final stylesheet.
|
// Files not explicitly unchecked are compiled into the final stylesheet.
|
||||||
@ -245,7 +256,7 @@ window.onload = function () { // wait for load in a dumb way because B-0
|
|||||||
function generateCSS(preamble) {
|
function generateCSS(preamble) {
|
||||||
var oneChecked = false
|
var oneChecked = false
|
||||||
var lessFileIncludes = {}
|
var lessFileIncludes = {}
|
||||||
$('#less-section input').each(function() {
|
$('#less-section input').each(function () {
|
||||||
var $this = $(this)
|
var $this = $(this)
|
||||||
var checked = $this.is(':checked')
|
var checked = $this.is(':checked')
|
||||||
lessFileIncludes[$this.val()] = checked
|
lessFileIncludes[$this.val()] = checked
|
||||||
@ -396,7 +407,7 @@ window.onload = function () { // wait for load in a dumb way because B-0
|
|||||||
var url = window.webkitURL || window.URL // Safari 6 uses "webkitURL".
|
var url = window.webkitURL || window.URL // Safari 6 uses "webkitURL".
|
||||||
var svg = new Blob(
|
var svg = new Blob(
|
||||||
['<svg xmlns=\'http://www.w3.org/2000/svg\'></svg>'],
|
['<svg xmlns=\'http://www.w3.org/2000/svg\'></svg>'],
|
||||||
{type: 'image/svg+xml;charset=utf-8'}
|
{ type: 'image/svg+xml;charset=utf-8' }
|
||||||
)
|
)
|
||||||
var objectUrl = url.createObjectURL(svg);
|
var objectUrl = url.createObjectURL(svg);
|
||||||
if (/^blob:/.exec(objectUrl) === null) {
|
if (/^blob:/.exec(objectUrl) === null) {
|
||||||
@ -404,8 +415,7 @@ window.onload = function () { // wait for load in a dumb way because B-0
|
|||||||
// than "blob:", which means it has been polyfilled and is not supported by
|
// than "blob:", which means it has been polyfilled and is not supported by
|
||||||
// this browser.
|
// this browser.
|
||||||
failback()
|
failback()
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
$('<img>')
|
$('<img>')
|
||||||
.on('load', function () {
|
.on('load', function () {
|
||||||
$compileBtn.prop('disabled', false)
|
$compileBtn.prop('disabled', false)
|
||||||
|
4
docs/assets/js/customize.min.js
vendored
4
docs/assets/js/customize.min.js
vendored
File diff suppressed because one or more lines are too long
2
docs/assets/js/docs.min.js
vendored
2
docs/assets/js/docs.min.js
vendored
@ -13,4 +13,4 @@ var Holder=Holder||{};!function(a,b){function c(a,b,c){b=parseInt(b,10),a=parseI
|
|||||||
* Licensed under the Creative Commons Attribution 3.0 Unported License. For
|
* Licensed under the Creative Commons Attribution 3.0 Unported License. For
|
||||||
* details, see http://creativecommons.org/licenses/by/3.0/.
|
* details, see http://creativecommons.org/licenses/by/3.0/.
|
||||||
*/
|
*/
|
||||||
!function(a){a(function(){var b=a(window),c=a(document.body);c.scrollspy({target:".bs-docs-sidebar"}),b.on("load",function(){c.scrollspy("refresh")}),a(".bs-docs-container [href=#]").click(function(a){a.preventDefault()}),setTimeout(function(){var b=a(".bs-docs-sidebar");b.affix({offset:{top:function(){var c=b.offset().top,d=parseInt(b.children(0).css("margin-top"),10),e=a(".bs-docs-nav").height();return this.top=c-e-d},bottom:function(){return this.bottom=a(".bs-docs-footer").outerHeight(!0)}}})},100),setTimeout(function(){a(".bs-top").affix()},100),function(){var b=a("#bs-theme-stylesheet"),c=a(".bs-docs-theme-toggle");c.click(function(){var a=b.attr("href");a&&0!==a.indexOf("data")?(b.attr("href",""),c.text("Preview theme")):(b.attr("href",b.attr("data-href")),c.text("Disable theme preview"))})}(),a(".tooltip-demo").tooltip({selector:'[data-toggle="tooltip"]',container:"body"}),a(".tooltip-test").tooltip(),a(".popover-test").popover(),a(".bs-docs-navbar").tooltip({selector:'a[data-toggle="tooltip"]',container:".bs-docs-navbar .nav"}),a(".bs-docs-popover").popover(),a(".bs-docs-popover-dismiss").popover({trigger:"focus"}),a("#loading-example-btn").click(function(){var b=a(this);b.button("loading"),setTimeout(function(){b.button("reset")},3e3)})})}(jQuery);
|
!function(a){"use strict";a(function(){var b=a(window),c=a(document.body);c.scrollspy({target:".bs-docs-sidebar"}),b.on("load",function(){c.scrollspy("refresh")}),a(".bs-docs-container [href=#]").click(function(a){a.preventDefault()}),setTimeout(function(){var b=a(".bs-docs-sidebar");b.affix({offset:{top:function(){var c=b.offset().top,d=parseInt(b.children(0).css("margin-top"),10),e=a(".bs-docs-nav").height();return this.top=c-e-d},bottom:function(){return this.bottom=a(".bs-docs-footer").outerHeight(!0)}}})},100),setTimeout(function(){a(".bs-top").affix()},100),function(){var b=a("#bs-theme-stylesheet"),c=a(".bs-docs-theme-toggle");c.click(function(){var a=b.attr("href");a&&0!==a.indexOf("data")?(b.attr("href",""),c.text("Preview theme")):(b.attr("href",b.attr("data-href")),c.text("Disable theme preview"))})}(),a(".tooltip-demo").tooltip({selector:'[data-toggle="tooltip"]',container:"body"}),a(".tooltip-test").tooltip(),a(".popover-test").popover(),a(".bs-docs-navbar").tooltip({selector:'a[data-toggle="tooltip"]',container:".bs-docs-navbar .nav"}),a(".bs-docs-popover").popover(),a(".bs-docs-popover-dismiss").popover({trigger:"focus"}),a("#loading-example-btn").click(function(){var b=a(this);b.button("loading"),setTimeout(function(){b.button("reset")},3e3)})})}(jQuery);
|
@ -9,6 +9,7 @@
|
|||||||
// http://getbootstrap.com/getting-started/#support-ie10-width
|
// http://getbootstrap.com/getting-started/#support-ie10-width
|
||||||
|
|
||||||
(function () {
|
(function () {
|
||||||
|
'use strict';
|
||||||
if (navigator.userAgent.match(/IEMobile\/10\.0/)) {
|
if (navigator.userAgent.match(/IEMobile\/10\.0/)) {
|
||||||
var msViewportStyle = document.createElement('style')
|
var msViewportStyle = document.createElement('style')
|
||||||
msViewportStyle.appendChild(
|
msViewportStyle.appendChild(
|
||||||
|
@ -9,5 +9,5 @@
|
|||||||
*/
|
*/
|
||||||
// Intended to prevent false-positive bug reports about responsive styling supposedly not working in IE8.
|
// Intended to prevent false-positive bug reports about responsive styling supposedly not working in IE8.
|
||||||
if (window.location.protocol == 'file:') {
|
if (window.location.protocol == 'file:') {
|
||||||
alert('ERROR: Bootstrap\'s responsive CSS is disabled!\nSee getbootstrap.com/getting-started/#respond-file-proto for details.')
|
window.alert('ERROR: Bootstrap\'s responsive CSS is disabled!\nSee getbootstrap.com/getting-started/#respond-file-proto for details.')
|
||||||
}
|
}
|
||||||
|
4
docs/assets/js/raw-files.min.js
vendored
4
docs/assets/js/raw-files.min.js
vendored
File diff suppressed because one or more lines are too long
@ -5,6 +5,23 @@ slug: customize
|
|||||||
lead: Customize Bootstrap's components, Less variables, and jQuery plugins to get your very own version.
|
lead: Customize Bootstrap's components, Less variables, and jQuery plugins to get your very own version.
|
||||||
---
|
---
|
||||||
|
|
||||||
|
<!-- less.js isn't IE8-compatible and throws an exception during initialization, so our Blob compatibility check and error messaging code never get called in that case.
|
||||||
|
So we use a conditional comment instead to inform folks about the lack of IE8 support.
|
||||||
|
The alert covers up the entire customizer UI.
|
||||||
|
-->
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<style>
|
||||||
|
.bs-customizer,
|
||||||
|
.bs-docs-sidebar {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div class="alert alert-danger bs-customizer-alert-ie">
|
||||||
|
<strong>The Bootstrap Customizer does not support IE9 and below.</strong><br>
|
||||||
|
Please take a second to <a href="http://browsehappy.com/">upgrade to a more modern browser</a>.
|
||||||
|
</div>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
<!-- Customizer form -->
|
<!-- Customizer form -->
|
||||||
<form class="bs-customizer" role="form">
|
<form class="bs-customizer" role="form">
|
||||||
<div class="bs-docs-section" id="less-section">
|
<div class="bs-docs-section" id="less-section">
|
||||||
|
2
docs/dist/css/bootstrap.css.map
vendored
2
docs/dist/css/bootstrap.css.map
vendored
File diff suppressed because one or more lines are too long
2
docs/dist/css/bootstrap.min.css
vendored
2
docs/dist/css/bootstrap.min.css
vendored
File diff suppressed because one or more lines are too long
2
docs/dist/js/bootstrap.min.js
vendored
2
docs/dist/js/bootstrap.min.js
vendored
File diff suppressed because one or more lines are too long
@ -53,7 +53,7 @@
|
|||||||
<li><a href="#contact">Contact</a></li>
|
<li><a href="#contact">Contact</a></li>
|
||||||
<li class="dropdown">
|
<li class="dropdown">
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu" role="menu">
|
||||||
<li><a href="#">Action</a></li>
|
<li><a href="#">Action</a></li>
|
||||||
<li><a href="#">Another action</a></li>
|
<li><a href="#">Another action</a></li>
|
||||||
<li><a href="#">Something else here</a></li>
|
<li><a href="#">Something else here</a></li>
|
||||||
|
@ -51,7 +51,7 @@
|
|||||||
<li><a href="#contact">Contact</a></li>
|
<li><a href="#contact">Contact</a></li>
|
||||||
<li class="dropdown">
|
<li class="dropdown">
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu" role="menu">
|
||||||
<li><a href="#">Action</a></li>
|
<li><a href="#">Action</a></li>
|
||||||
<li><a href="#">Another action</a></li>
|
<li><a href="#">Another action</a></li>
|
||||||
<li><a href="#">Something else here</a></li>
|
<li><a href="#">Something else here</a></li>
|
||||||
|
@ -51,7 +51,7 @@
|
|||||||
<li><a href="#contact">Contact</a></li>
|
<li><a href="#contact">Contact</a></li>
|
||||||
<li class="dropdown">
|
<li class="dropdown">
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu" role="menu">
|
||||||
<li><a href="#">Action</a></li>
|
<li><a href="#">Action</a></li>
|
||||||
<li><a href="#">Another action</a></li>
|
<li><a href="#">Another action</a></li>
|
||||||
<li><a href="#">Something else here</a></li>
|
<li><a href="#">Something else here</a></li>
|
||||||
|
@ -53,7 +53,7 @@
|
|||||||
<li><a href="#">Link</a></li>
|
<li><a href="#">Link</a></li>
|
||||||
<li class="dropdown">
|
<li class="dropdown">
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu" role="menu">
|
||||||
<li><a href="#">Action</a></li>
|
<li><a href="#">Action</a></li>
|
||||||
<li><a href="#">Another action</a></li>
|
<li><a href="#">Another action</a></li>
|
||||||
<li><a href="#">Something else here</a></li>
|
<li><a href="#">Something else here</a></li>
|
||||||
|
@ -53,7 +53,7 @@
|
|||||||
<li><a href="#contact">Contact</a></li>
|
<li><a href="#contact">Contact</a></li>
|
||||||
<li class="dropdown">
|
<li class="dropdown">
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu" role="menu">
|
||||||
<li><a href="#">Action</a></li>
|
<li><a href="#">Action</a></li>
|
||||||
<li><a href="#">Another action</a></li>
|
<li><a href="#">Another action</a></li>
|
||||||
<li><a href="#">Something else here</a></li>
|
<li><a href="#">Something else here</a></li>
|
||||||
|
@ -51,7 +51,7 @@
|
|||||||
<li><a href="#contact">Contact</a></li>
|
<li><a href="#contact">Contact</a></li>
|
||||||
<li class="dropdown">
|
<li class="dropdown">
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu" role="menu">
|
||||||
<li><a href="#">Action</a></li>
|
<li><a href="#">Action</a></li>
|
||||||
<li><a href="#">Another action</a></li>
|
<li><a href="#">Another action</a></li>
|
||||||
<li><a href="#">Something else here</a></li>
|
<li><a href="#">Something else here</a></li>
|
||||||
|
@ -53,7 +53,7 @@
|
|||||||
<li><a href="#contact">Contact</a></li>
|
<li><a href="#contact">Contact</a></li>
|
||||||
<li class="dropdown">
|
<li class="dropdown">
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu" role="menu">
|
||||||
<li><a href="#">Action</a></li>
|
<li><a href="#">Action</a></li>
|
||||||
<li><a href="#">Another action</a></li>
|
<li><a href="#">Another action</a></li>
|
||||||
<li><a href="#">Something else here</a></li>
|
<li><a href="#">Something else here</a></li>
|
||||||
@ -399,7 +399,7 @@
|
|||||||
<li><a href="#contact">Contact</a></li>
|
<li><a href="#contact">Contact</a></li>
|
||||||
<li class="dropdown">
|
<li class="dropdown">
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu" role="menu">
|
||||||
<li><a href="#">Action</a></li>
|
<li><a href="#">Action</a></li>
|
||||||
<li><a href="#">Another action</a></li>
|
<li><a href="#">Another action</a></li>
|
||||||
<li><a href="#">Something else here</a></li>
|
<li><a href="#">Something else here</a></li>
|
||||||
@ -432,7 +432,7 @@
|
|||||||
<li><a href="#contact">Contact</a></li>
|
<li><a href="#contact">Contact</a></li>
|
||||||
<li class="dropdown">
|
<li class="dropdown">
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu" role="menu">
|
||||||
<li><a href="#">Action</a></li>
|
<li><a href="#">Action</a></li>
|
||||||
<li><a href="#">Another action</a></li>
|
<li><a href="#">Another action</a></li>
|
||||||
<li><a href="#">Something else here</a></li>
|
<li><a href="#">Something else here</a></li>
|
||||||
|
@ -32,21 +32,19 @@
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<button class="btn pull-right tooltip-bottom" title="This should be shifted to the left">Shift Left</button>
|
<button class="btn btn-default pull-right tooltip-bottom" title="This should be shifted to the left">Shift Left</button>
|
||||||
<button class="btn tooltip-bottom" title="This should be shifted to the right">Shift Right</button>
|
<button class="btn btn-default tooltip-bottom" title="This should be shifted to the right">Shift Right</button>
|
||||||
<button class="btn tooltip-right" title="This should be shifted down">Shift Down</button>
|
<button class="btn btn-default tooltip-right" title="This should be shifted down">Shift Down</button>
|
||||||
|
|
||||||
<div class="placeholder">There is a button down there ↓</div>
|
<button class="btn btn-default tooltip-right btn-bottom" title="This should be shifted up">Shift Up</button>
|
||||||
|
|
||||||
<button class="btn tooltip-right" title="This should be shifted up">Shift Up</button>
|
|
||||||
|
|
||||||
<div class="container-viewport">
|
<div class="container-viewport">
|
||||||
<button class="btn tooltip-viewport-bottom" title="This should be shifted to the left">Shift Left</button>
|
<button class="btn btn-default tooltip-viewport-bottom" title="This should be shifted to the left">Shift Left</button>
|
||||||
<button class="btn tooltip-viewport-right" title="This should be shifted down">Shift Down</button>
|
<button class="btn btn-default tooltip-viewport-right" title="This should be shifted down">Shift Down</button>
|
||||||
|
|
||||||
<button class="btn pull-right tooltip-viewport-bottom" title="This should be shifted to the right">Shift Right</button>
|
<button class="btn btn-default pull-right tooltip-viewport-bottom" title="This should be shifted to the right">Shift Right</button>
|
||||||
|
|
||||||
<button class="btn tooltip-viewport-right btn-bottom" title="This should be shifted up">Shift Up</button>
|
<button class="btn btn-default tooltip-viewport-right btn-bottom" title="This should be shifted up">Shift Up</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,18 +8,16 @@ body {
|
|||||||
.tooltip .tooltip-inner {
|
.tooltip .tooltip-inner {
|
||||||
min-width: 250px;
|
min-width: 250px;
|
||||||
max-width: 500px;
|
max-width: 500px;
|
||||||
min-height: 200px;
|
min-height: 100px;
|
||||||
}
|
text-align: left;
|
||||||
.placeholder {
|
|
||||||
height: 900px;
|
|
||||||
}
|
}
|
||||||
.container-viewport {
|
.container-viewport {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 600px;
|
top: 100px;
|
||||||
left: 200px;
|
right: 250px;
|
||||||
width: 600px;
|
left: 250px;
|
||||||
height: 400px;
|
height: 300px;
|
||||||
background: #c00;
|
background-color: #eee;
|
||||||
}
|
}
|
||||||
.btn-bottom {
|
.btn-bottom {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
@ -1,11 +1,6 @@
|
|||||||
{
|
{
|
||||||
"curly" : true,
|
"extends" : "../js/.jshintrc",
|
||||||
"eqeqeq": true,
|
"browser" : false,
|
||||||
"newcap": true,
|
"es3" : false,
|
||||||
"noarg" : true,
|
"node" : true
|
||||||
"node" : true,
|
|
||||||
"nonbsp": true,
|
|
||||||
"strict": true,
|
|
||||||
"undef" : true,
|
|
||||||
"unused": true
|
|
||||||
}
|
}
|
||||||
|
11
js/.jscsrc
11
js/.jscsrc
@ -1,16 +1,22 @@
|
|||||||
{
|
{
|
||||||
"disallowEmptyBlocks": true,
|
"disallowEmptyBlocks": true,
|
||||||
"disallowKeywords": ["with"],
|
"disallowKeywords": ["with"],
|
||||||
"disallowLeftStickedOperators": ["?", "+", "-", "/", "*", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="],
|
"disallowLeftStickedOperators": ["?", "/", "*", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="],
|
||||||
"disallowMixedSpacesAndTabs": true,
|
"disallowMixedSpacesAndTabs": true,
|
||||||
"disallowMultipleLineStrings": true,
|
"disallowMultipleLineStrings": true,
|
||||||
|
"disallowMultipleVarDecl": true,
|
||||||
"disallowQuotedKeysInObjects": "allButReserved",
|
"disallowQuotedKeysInObjects": "allButReserved",
|
||||||
"disallowRightStickedOperators": ["?", "/", "*", ":", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="],
|
"disallowRightStickedOperators": ["?", "/", "*", ":", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="],
|
||||||
"disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"],
|
"disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"],
|
||||||
"disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
|
"disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
|
||||||
|
"disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true },
|
||||||
|
"disallowSpacesInsideArrayBrackets": true,
|
||||||
|
"disallowSpacesInsideParentheses": true,
|
||||||
|
"disallowTrailingComma": true,
|
||||||
"disallowTrailingWhitespace": true,
|
"disallowTrailingWhitespace": true,
|
||||||
"requireCamelCaseOrUpperCaseIdentifiers": true,
|
"requireCamelCaseOrUpperCaseIdentifiers": true,
|
||||||
"requireCapitalizedConstructors": true,
|
"requireCapitalizedConstructors": true,
|
||||||
|
"requireCommaBeforeLineBreak": true,
|
||||||
"requireDotNotation": true,
|
"requireDotNotation": true,
|
||||||
"requireLeftStickedOperators": [","],
|
"requireLeftStickedOperators": [","],
|
||||||
"requireLineFeedAtFileEnd": true,
|
"requireLineFeedAtFileEnd": true,
|
||||||
@ -18,10 +24,11 @@
|
|||||||
"requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!==", ">", "<", ">=", "<="],
|
"requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!==", ">", "<", ">=", "<="],
|
||||||
"requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch"],
|
"requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch"],
|
||||||
"requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!==", ">", "<", ">=", "<="],
|
"requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!==", ">", "<", ">=", "<="],
|
||||||
"requireSpacesInAnonymousFunctionExpression": { "beforeOpeningCurlyBrace": true },
|
"requireSpacesInAnonymousFunctionExpression": { "beforeOpeningCurlyBrace": true, "beforeOpeningRoundBrace": true },
|
||||||
"requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true },
|
"requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true },
|
||||||
"requireSpacesInFunctionExpression": { "beforeOpeningCurlyBrace": true },
|
"requireSpacesInFunctionExpression": { "beforeOpeningCurlyBrace": true },
|
||||||
"requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true },
|
"requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true },
|
||||||
|
"requireSpacesInsideObjectBrackets": "allButNested",
|
||||||
"validateIndentation": 2,
|
"validateIndentation": 2,
|
||||||
"validateLineBreaks": "LF",
|
"validateLineBreaks": "LF",
|
||||||
"validateQuoteMarks": "'"
|
"validateQuoteMarks": "'"
|
||||||
|
12
js/.jshintrc
12
js/.jshintrc
@ -1,13 +1,15 @@
|
|||||||
{
|
{
|
||||||
"asi" : true,
|
"asi" : true,
|
||||||
"boss" : true,
|
|
||||||
"browser" : true,
|
"browser" : true,
|
||||||
"debug" : true,
|
|
||||||
"devel" : true,
|
|
||||||
"eqeqeq" : false,
|
"eqeqeq" : false,
|
||||||
"eqnull" : true,
|
"eqnull" : true,
|
||||||
|
"es3" : true,
|
||||||
"expr" : true,
|
"expr" : true,
|
||||||
|
"jquery" : true,
|
||||||
|
"latedef" : true,
|
||||||
"laxbreak" : true,
|
"laxbreak" : true,
|
||||||
"unused" : true,
|
"nonbsp" : true,
|
||||||
"validthis": true
|
"strict" : true,
|
||||||
|
"undef" : true,
|
||||||
|
"unused" : true
|
||||||
}
|
}
|
||||||
|
@ -86,7 +86,9 @@
|
|||||||
.trigger($.Event(affixType.replace('affix', 'affixed')))
|
.trigger($.Event(affixType.replace('affix', 'affixed')))
|
||||||
|
|
||||||
if (affix == 'bottom') {
|
if (affix == 'bottom') {
|
||||||
this.$element.offset({ top: scrollHeight - this.$element.height() - offsetBottom })
|
this.$element.offset({
|
||||||
|
top: scrollHeight - this.$element.height() - offsetBottom
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
wrap: true
|
wrap: true
|
||||||
}
|
}
|
||||||
|
|
||||||
Carousel.prototype.cycle = function (e) {
|
Carousel.prototype.cycle = function (e) {
|
||||||
e || (this.paused = false)
|
e || (this.paused = false)
|
||||||
|
|
||||||
this.interval && clearInterval(this.interval)
|
this.interval && clearInterval(this.interval)
|
||||||
@ -103,10 +103,13 @@
|
|||||||
$next = this.$element.find('.item')[fallback]()
|
$next = this.$element.find('.item')[fallback]()
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($next.hasClass('active')) return this.sliding = false
|
if ($next.hasClass('active')) return (this.sliding = false)
|
||||||
|
|
||||||
var relatedTarget = $next[0]
|
var relatedTarget = $next[0]
|
||||||
var slideEvent = $.Event('slide.bs.carousel', { relatedTarget: relatedTarget, direction: direction })
|
var slideEvent = $.Event('slide.bs.carousel', {
|
||||||
|
relatedTarget: relatedTarget,
|
||||||
|
direction: direction
|
||||||
|
})
|
||||||
this.$element.trigger(slideEvent)
|
this.$element.trigger(slideEvent)
|
||||||
if (slideEvent.isDefaultPrevented()) return
|
if (slideEvent.isDefaultPrevented()) return
|
||||||
|
|
||||||
@ -133,7 +136,9 @@
|
|||||||
$next.removeClass([type, direction].join(' ')).addClass('active')
|
$next.removeClass([type, direction].join(' ')).addClass('active')
|
||||||
$active.removeClass(['active', direction].join(' '))
|
$active.removeClass(['active', direction].join(' '))
|
||||||
that.sliding = false
|
that.sliding = false
|
||||||
setTimeout(function () { that.$element.trigger(slidEvent) }, 0)
|
setTimeout(function () {
|
||||||
|
that.$element.trigger(slidEvent)
|
||||||
|
}, 0)
|
||||||
})
|
})
|
||||||
.emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)
|
.emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)
|
||||||
} else {
|
} else {
|
||||||
@ -185,7 +190,8 @@
|
|||||||
// =================
|
// =================
|
||||||
|
|
||||||
$(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
|
$(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
|
||||||
var $this = $(this), href
|
var href
|
||||||
|
var $this = $(this)
|
||||||
var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
|
var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
|
||||||
var options = $.extend({}, $target.data(), $this.data())
|
var options = $.extend({}, $target.data(), $this.data())
|
||||||
var slideIndex = $this.attr('data-slide-to')
|
var slideIndex = $this.attr('data-slide-to')
|
||||||
@ -193,7 +199,7 @@
|
|||||||
|
|
||||||
Plugin.call($target, options)
|
Plugin.call($target, options)
|
||||||
|
|
||||||
if (slideIndex = $this.attr('data-slide-to')) {
|
if (slideIndex) {
|
||||||
$target.data('bs.carousel').to(slideIndex)
|
$target.data('bs.carousel').to(slideIndex)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,7 +159,8 @@
|
|||||||
// =================
|
// =================
|
||||||
|
|
||||||
$(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
|
$(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
|
||||||
var $this = $(this), href
|
var href
|
||||||
|
var $this = $(this)
|
||||||
var target = $this.attr('data-target')
|
var target = $this.attr('data-target')
|
||||||
|| e.preventDefault()
|
|| e.preventDefault()
|
||||||
|| (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
|
|| (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
|
||||||
|
15
js/modal.js
15
js/modal.js
@ -188,7 +188,7 @@
|
|||||||
} else if (!this.isShown && this.$backdrop) {
|
} else if (!this.isShown && this.$backdrop) {
|
||||||
this.$backdrop.removeClass('in')
|
this.$backdrop.removeClass('in')
|
||||||
|
|
||||||
var callbackRemove = function() {
|
var callbackRemove = function () {
|
||||||
that.removeBackdrop()
|
that.removeBackdrop()
|
||||||
callback && callback()
|
callback && callback()
|
||||||
}
|
}
|
||||||
@ -208,8 +208,8 @@
|
|||||||
this.scrollbarWidth = this.scrollbarWidth || this.measureScrollbar()
|
this.scrollbarWidth = this.scrollbarWidth || this.measureScrollbar()
|
||||||
}
|
}
|
||||||
|
|
||||||
Modal.prototype.setScrollbar = function () {
|
Modal.prototype.setScrollbar = function () {
|
||||||
var bodyPad = parseInt(this.$body.css('padding-right') || 0)
|
var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
|
||||||
if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
|
if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -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);
|
||||||
|
@ -72,7 +72,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
Popover.prototype.arrow = function () {
|
Popover.prototype.arrow = function () {
|
||||||
return this.$arrow = this.$arrow || this.tip().find('.arrow')
|
return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
|
||||||
}
|
}
|
||||||
|
|
||||||
Popover.prototype.tip = function () {
|
Popover.prototype.tip = function () {
|
||||||
|
@ -14,20 +14,17 @@
|
|||||||
// ==========================
|
// ==========================
|
||||||
|
|
||||||
function ScrollSpy(element, options) {
|
function ScrollSpy(element, options) {
|
||||||
var href
|
|
||||||
var process = $.proxy(this.process, this)
|
var process = $.proxy(this.process, this)
|
||||||
|
|
||||||
this.$element = $(element).is('body') ? $(window) : $(element)
|
|
||||||
this.$body = $('body')
|
this.$body = $('body')
|
||||||
this.$scrollElement = this.$element.on('scroll.bs.scrollspy', process)
|
this.$scrollElement = $(element).is('body') ? $(window) : $(element)
|
||||||
this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
|
this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
|
||||||
this.selector = (this.options.target
|
this.selector = (this.options.target || '') + ' .nav li > a'
|
||||||
|| ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
|
this.offsets = []
|
||||||
|| '') + ' .nav li > a'
|
this.targets = []
|
||||||
this.offsets = $([])
|
|
||||||
this.targets = $([])
|
|
||||||
this.activeTarget = null
|
this.activeTarget = null
|
||||||
|
|
||||||
|
this.$scrollElement.on('scroll.bs.scrollspy', process)
|
||||||
this.refresh()
|
this.refresh()
|
||||||
this.process()
|
this.process()
|
||||||
}
|
}
|
||||||
@ -39,10 +36,16 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
ScrollSpy.prototype.refresh = function () {
|
ScrollSpy.prototype.refresh = function () {
|
||||||
var offsetMethod = this.$element[0] == window ? 'offset' : 'position'
|
var offsetMethod = 'offset'
|
||||||
|
var offsetBase = 0
|
||||||
|
|
||||||
this.offsets = $([])
|
if (!$.isWindow(this.$scrollElement[0])) {
|
||||||
this.targets = $([])
|
offsetMethod = 'position'
|
||||||
|
offsetBase = this.$scrollElement.scrollTop()
|
||||||
|
}
|
||||||
|
|
||||||
|
this.offsets = []
|
||||||
|
this.targets = []
|
||||||
|
|
||||||
var self = this
|
var self = this
|
||||||
|
|
||||||
@ -57,7 +60,7 @@
|
|||||||
return ($href
|
return ($href
|
||||||
&& $href.length
|
&& $href.length
|
||||||
&& $href.is(':visible')
|
&& $href.is(':visible')
|
||||||
&& [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null
|
&& [[$href[offsetMethod]().top + offsetBase, href]]) || null
|
||||||
})
|
})
|
||||||
.sort(function (a, b) { return a[0] - b[0] })
|
.sort(function (a, b) { return a[0] - b[0] })
|
||||||
.each(function () {
|
.each(function () {
|
||||||
@ -69,14 +72,14 @@
|
|||||||
ScrollSpy.prototype.process = function () {
|
ScrollSpy.prototype.process = function () {
|
||||||
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
|
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
|
||||||
var scrollHeight = this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
|
var scrollHeight = this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
|
||||||
var maxScroll = scrollHeight - this.$scrollElement.height()
|
var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
|
||||||
var offsets = this.offsets
|
var offsets = this.offsets
|
||||||
var targets = this.targets
|
var targets = this.targets
|
||||||
var activeTarget = this.activeTarget
|
var activeTarget = this.activeTarget
|
||||||
var i
|
var i
|
||||||
|
|
||||||
if (scrollTop >= maxScroll) {
|
if (scrollTop >= maxScroll) {
|
||||||
return activeTarget != (i = targets.last()[0]) && this.activate(i)
|
return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (activeTarget && scrollTop <= offsets[0]) {
|
if (activeTarget && scrollTop <= offsets[0]) {
|
||||||
@ -87,7 +90,7 @@
|
|||||||
activeTarget != targets[i]
|
activeTarget != targets[i]
|
||||||
&& scrollTop >= offsets[i]
|
&& scrollTop >= offsets[i]
|
||||||
&& (!offsets[i + 1] || scrollTop <= offsets[i + 1])
|
&& (!offsets[i + 1] || scrollTop <= offsets[i + 1])
|
||||||
&& this.activate( targets[i] )
|
&& this.activate(targets[i])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,7 +92,7 @@
|
|||||||
// TAB PLUGIN DEFINITION
|
// TAB PLUGIN DEFINITION
|
||||||
// =====================
|
// =====================
|
||||||
|
|
||||||
function Plugin( option ) {
|
function Plugin(option) {
|
||||||
return this.each(function () {
|
return this.each(function () {
|
||||||
var $this = $(this)
|
var $this = $(this)
|
||||||
var data = $this.data('bs.tab')
|
var data = $this.data('bs.tab')
|
||||||
|
5
js/tests/unit/.jshintrc
Normal file
5
js/tests/unit/.jshintrc
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"extends" : "../../.jshintrc",
|
||||||
|
"devel" : true,
|
||||||
|
"qunit" : true
|
||||||
|
}
|
@ -1,4 +1,5 @@
|
|||||||
$(function () {
|
$(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
module('affix plugin')
|
module('affix plugin')
|
||||||
|
|
||||||
@ -7,11 +8,11 @@ $(function () {
|
|||||||
})
|
})
|
||||||
|
|
||||||
module('affix', {
|
module('affix', {
|
||||||
setup: function() {
|
setup: function () {
|
||||||
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
|
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
|
||||||
$.fn.bootstrapAffix = $.fn.affix.noConflict()
|
$.fn.bootstrapAffix = $.fn.affix.noConflict()
|
||||||
},
|
},
|
||||||
teardown: function() {
|
teardown: function () {
|
||||||
$.fn.affix = $.fn.bootstrapAffix
|
$.fn.affix = $.fn.bootstrapAffix
|
||||||
delete $.fn.bootstrapAffix
|
delete $.fn.bootstrapAffix
|
||||||
}
|
}
|
||||||
@ -45,7 +46,7 @@ $(function () {
|
|||||||
.on('affix.bs.affix', function () {
|
.on('affix.bs.affix', function () {
|
||||||
ok(true, 'affix event triggered')
|
ok(true, 'affix event triggered')
|
||||||
}).on('affixed.bs.affix', function () {
|
}).on('affixed.bs.affix', function () {
|
||||||
ok(true,'affixed event triggered')
|
ok(true, 'affixed event triggered')
|
||||||
$('#affixTarget').remove()
|
$('#affixTarget').remove()
|
||||||
$('#affixAfter').remove()
|
$('#affixAfter').remove()
|
||||||
start()
|
start()
|
||||||
@ -53,7 +54,9 @@ $(function () {
|
|||||||
|
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
window.scrollTo(0, document.body.scrollHeight)
|
window.scrollTo(0, document.body.scrollHeight)
|
||||||
setTimeout(function () { window.scroll(0,0) }, 0)
|
setTimeout(function () {
|
||||||
},0)
|
window.scroll(0, 0)
|
||||||
|
}, 0)
|
||||||
|
}, 0)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
$(function () {
|
$(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
module('alert plugin')
|
module('alert plugin')
|
||||||
|
|
||||||
@ -7,11 +8,11 @@ $(function () {
|
|||||||
})
|
})
|
||||||
|
|
||||||
module('alert', {
|
module('alert', {
|
||||||
setup: function() {
|
setup: function () {
|
||||||
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
|
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
|
||||||
$.fn.bootstrapAlert = $.fn.alert.noConflict()
|
$.fn.bootstrapAlert = $.fn.alert.noConflict()
|
||||||
},
|
},
|
||||||
teardown: function() {
|
teardown: function () {
|
||||||
$.fn.alert = $.fn.bootstrapAlert
|
$.fn.alert = $.fn.bootstrapAlert
|
||||||
delete $.fn.bootstrapAlert
|
delete $.fn.bootstrapAlert
|
||||||
}
|
}
|
||||||
@ -29,8 +30,8 @@ $(function () {
|
|||||||
var alertHTML = '<div class="alert-message warning fade in">' +
|
var alertHTML = '<div class="alert-message warning fade in">' +
|
||||||
'<a class="close" href="#" data-dismiss="alert">×</a>' +
|
'<a class="close" href="#" data-dismiss="alert">×</a>' +
|
||||||
'<p><strong>Holy guacamole!</strong> Best check yo self, you\'re not looking too good.</p>' +
|
'<p><strong>Holy guacamole!</strong> Best check yo self, you\'re not looking too good.</p>' +
|
||||||
'</div>',
|
'</div>'
|
||||||
alert = $(alertHTML).bootstrapAlert()
|
var alert = $(alertHTML).bootstrapAlert()
|
||||||
|
|
||||||
alert.find('.close').click()
|
alert.find('.close').click()
|
||||||
|
|
||||||
@ -43,8 +44,8 @@ $(function () {
|
|||||||
var alertHTML = '<div class="alert-message warning fade in">' +
|
var alertHTML = '<div class="alert-message warning fade in">' +
|
||||||
'<a class="close" href="#" data-dismiss="alert">×</a>' +
|
'<a class="close" href="#" data-dismiss="alert">×</a>' +
|
||||||
'<p><strong>Holy guacamole!</strong> Best check yo self, you\'re not looking too good.</p>' +
|
'<p><strong>Holy guacamole!</strong> Best check yo self, you\'re not looking too good.</p>' +
|
||||||
'</div>',
|
'</div>'
|
||||||
alert = $(alertHTML).appendTo('#qunit-fixture').bootstrapAlert()
|
var alert = $(alertHTML).appendTo('#qunit-fixture').bootstrapAlert()
|
||||||
|
|
||||||
ok($('#qunit-fixture').find('.alert-message').length, 'element added to dom')
|
ok($('#qunit-fixture').find('.alert-message').length, 'element added to dom')
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
$(function () {
|
$(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
module('button plugin')
|
module('button plugin')
|
||||||
|
|
||||||
@ -7,11 +8,11 @@ $(function () {
|
|||||||
})
|
})
|
||||||
|
|
||||||
module('button', {
|
module('button', {
|
||||||
setup: function() {
|
setup: function () {
|
||||||
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
|
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
|
||||||
$.fn.bootstrapButton = $.fn.button.noConflict()
|
$.fn.bootstrapButton = $.fn.button.noConflict()
|
||||||
},
|
},
|
||||||
teardown: function() {
|
teardown: function () {
|
||||||
$.fn.button = $.fn.bootstrapButton
|
$.fn.button = $.fn.bootstrapButton
|
||||||
delete $.fn.bootstrapButton
|
delete $.fn.bootstrapButton
|
||||||
}
|
}
|
||||||
@ -88,8 +89,8 @@ $(function () {
|
|||||||
})
|
})
|
||||||
|
|
||||||
test('should toggle active when btn children are clicked', function () {
|
test('should toggle active when btn children are clicked', function () {
|
||||||
var btn = $('<button class="btn" data-toggle="button">mdo</button>'),
|
var btn = $('<button class="btn" data-toggle="button">mdo</button>')
|
||||||
inner = $('<i></i>')
|
var inner = $('<i></i>')
|
||||||
btn
|
btn
|
||||||
.append(inner)
|
.append(inner)
|
||||||
.appendTo($('#qunit-fixture'))
|
.appendTo($('#qunit-fixture'))
|
||||||
@ -99,9 +100,9 @@ $(function () {
|
|||||||
})
|
})
|
||||||
|
|
||||||
test('should toggle active when btn children are clicked within btn-group', function () {
|
test('should toggle active when btn children are clicked within btn-group', function () {
|
||||||
var btngroup = $('<div class="btn-group" data-toggle="buttons"></div>'),
|
var btngroup = $('<div class="btn-group" data-toggle="buttons"></div>')
|
||||||
btn = $('<button class="btn">fat</button>'),
|
var btn = $('<button class="btn">fat</button>')
|
||||||
inner = $('<i></i>')
|
var inner = $('<i></i>')
|
||||||
btngroup
|
btngroup
|
||||||
.append(btn.append(inner))
|
.append(btn.append(inner))
|
||||||
.appendTo($('#qunit-fixture'))
|
.appendTo($('#qunit-fixture'))
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
$(function () {
|
$(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
module('carousel plugin')
|
module('carousel plugin')
|
||||||
|
|
||||||
@ -7,11 +8,11 @@ $(function () {
|
|||||||
})
|
})
|
||||||
|
|
||||||
module('carousel', {
|
module('carousel', {
|
||||||
setup: function() {
|
setup: function () {
|
||||||
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
|
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
|
||||||
$.fn.bootstrapCarousel = $.fn.carousel.noConflict()
|
$.fn.bootstrapCarousel = $.fn.carousel.noConflict()
|
||||||
},
|
},
|
||||||
teardown: function() {
|
teardown: function () {
|
||||||
$.fn.carousel = $.fn.bootstrapCarousel
|
$.fn.carousel = $.fn.bootstrapCarousel
|
||||||
delete $.fn.bootstrapCarousel
|
delete $.fn.bootstrapCarousel
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
$(function () {
|
$(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
module('collapse plugin')
|
module('collapse plugin')
|
||||||
|
|
||||||
@ -7,11 +8,11 @@ $(function () {
|
|||||||
})
|
})
|
||||||
|
|
||||||
module('collapse', {
|
module('collapse', {
|
||||||
setup: function() {
|
setup: function () {
|
||||||
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
|
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
|
||||||
$.fn.bootstrapCollapse = $.fn.collapse.noConflict()
|
$.fn.bootstrapCollapse = $.fn.collapse.noConflict()
|
||||||
},
|
},
|
||||||
teardown: function() {
|
teardown: function () {
|
||||||
$.fn.collapse = $.fn.bootstrapCollapse
|
$.fn.collapse = $.fn.bootstrapCollapse
|
||||||
delete $.fn.bootstrapCollapse
|
delete $.fn.bootstrapCollapse
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
$(function () {
|
$(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
module('dropdowns plugin')
|
module('dropdowns plugin')
|
||||||
|
|
||||||
@ -7,11 +8,11 @@ $(function () {
|
|||||||
})
|
})
|
||||||
|
|
||||||
module('dropdowns', {
|
module('dropdowns', {
|
||||||
setup: function() {
|
setup: function () {
|
||||||
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
|
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
|
||||||
$.fn.bootstrapDropdown = $.fn.dropdown.noConflict()
|
$.fn.bootstrapDropdown = $.fn.dropdown.noConflict()
|
||||||
},
|
},
|
||||||
teardown: function() {
|
teardown: function () {
|
||||||
$.fn.dropdown = $.fn.bootstrapDropdown
|
$.fn.dropdown = $.fn.bootstrapDropdown
|
||||||
delete $.fn.bootstrapDropdown
|
delete $.fn.bootstrapDropdown
|
||||||
}
|
}
|
||||||
@ -37,8 +38,8 @@ $(function () {
|
|||||||
'<li><a href="#">Another link</a></li>' +
|
'<li><a href="#">Another link</a></li>' +
|
||||||
'</ul>' +
|
'</ul>' +
|
||||||
'</li>' +
|
'</li>' +
|
||||||
'</ul>',
|
'</ul>'
|
||||||
dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown().click()
|
var dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown().click()
|
||||||
|
|
||||||
ok(!dropdown.parent('.dropdown').hasClass('open'), 'open class added on click')
|
ok(!dropdown.parent('.dropdown').hasClass('open'), 'open class added on click')
|
||||||
})
|
})
|
||||||
@ -54,8 +55,8 @@ $(function () {
|
|||||||
'<li><a href="#">Another link</a></li>' +
|
'<li><a href="#">Another link</a></li>' +
|
||||||
'</ul>' +
|
'</ul>' +
|
||||||
'</li>' +
|
'</li>' +
|
||||||
'</ul>',
|
'</ul>'
|
||||||
dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown().click()
|
var dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown().click()
|
||||||
|
|
||||||
ok(!dropdown.parent('.dropdown').hasClass('open'), 'open class added on click')
|
ok(!dropdown.parent('.dropdown').hasClass('open'), 'open class added on click')
|
||||||
})
|
})
|
||||||
@ -71,8 +72,8 @@ $(function () {
|
|||||||
'<li><a href="#">Another link</a></li>' +
|
'<li><a href="#">Another link</a></li>' +
|
||||||
'</ul>' +
|
'</ul>' +
|
||||||
'</li>' +
|
'</li>' +
|
||||||
'</ul>',
|
'</ul>'
|
||||||
dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown().click()
|
var dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown().click()
|
||||||
|
|
||||||
ok(dropdown.parent('.dropdown').hasClass('open'), 'open class added on click')
|
ok(dropdown.parent('.dropdown').hasClass('open'), 'open class added on click')
|
||||||
})
|
})
|
||||||
@ -88,8 +89,8 @@ $(function () {
|
|||||||
'<li><a href="#">Another link</a></li>' +
|
'<li><a href="#">Another link</a></li>' +
|
||||||
'</ul>' +
|
'</ul>' +
|
||||||
'</li>' +
|
'</li>' +
|
||||||
'</ul>',
|
'</ul>'
|
||||||
dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown().click()
|
var dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown().click()
|
||||||
|
|
||||||
ok(dropdown.parent('.dropdown').hasClass('open'), 'open class added on click')
|
ok(dropdown.parent('.dropdown').hasClass('open'), 'open class added on click')
|
||||||
})
|
})
|
||||||
@ -106,8 +107,8 @@ $(function () {
|
|||||||
'<li><a href="#">Another link</a></li>' +
|
'<li><a href="#">Another link</a></li>' +
|
||||||
'</ul>' +
|
'</ul>' +
|
||||||
'</li>' +
|
'</li>' +
|
||||||
'</ul>',
|
'</ul>'
|
||||||
dropdown = $(dropdownHTML)
|
var dropdown = $(dropdownHTML)
|
||||||
.appendTo('#qunit-fixture')
|
.appendTo('#qunit-fixture')
|
||||||
.find('[data-toggle="dropdown"]')
|
.find('[data-toggle="dropdown"]')
|
||||||
.bootstrapDropdown()
|
.bootstrapDropdown()
|
||||||
@ -135,10 +136,10 @@ $(function () {
|
|||||||
' <ul class="dropdown-menu">' +
|
' <ul class="dropdown-menu">' +
|
||||||
' <li><a href="#">Action 1</a></li>' +
|
' <li><a href="#">Action 1</a></li>' +
|
||||||
' </ul>' +
|
' </ul>' +
|
||||||
'</div>',
|
'</div>'
|
||||||
dropdowns = $(dropdownHTML).appendTo('#qunit-fixture').find('[data-toggle="dropdown"]'),
|
var dropdowns = $(dropdownHTML).appendTo('#qunit-fixture').find('[data-toggle="dropdown"]')
|
||||||
first = dropdowns.first(),
|
var first = dropdowns.first()
|
||||||
last = dropdowns.last()
|
var last = dropdowns.last()
|
||||||
|
|
||||||
ok(dropdowns.length == 2, 'Should be two dropdowns')
|
ok(dropdowns.length == 2, 'Should be two dropdowns')
|
||||||
|
|
||||||
@ -168,8 +169,8 @@ $(function () {
|
|||||||
'<li><a href="#">Another link</a></li>' +
|
'<li><a href="#">Another link</a></li>' +
|
||||||
'</ul>' +
|
'</ul>' +
|
||||||
'</li>' +
|
'</li>' +
|
||||||
'</ul>',
|
'</ul>'
|
||||||
dropdown = $(dropdownHTML)
|
var dropdown = $(dropdownHTML)
|
||||||
.appendTo('#qunit-fixture')
|
.appendTo('#qunit-fixture')
|
||||||
.find('[data-toggle="dropdown"]')
|
.find('[data-toggle="dropdown"]')
|
||||||
.bootstrapDropdown()
|
.bootstrapDropdown()
|
||||||
@ -202,8 +203,8 @@ $(function () {
|
|||||||
'<li><a href="#">Another link</a></li>' +
|
'<li><a href="#">Another link</a></li>' +
|
||||||
'</ul>' +
|
'</ul>' +
|
||||||
'</li>' +
|
'</li>' +
|
||||||
'</ul>',
|
'</ul>'
|
||||||
dropdown = $(dropdownHTML)
|
var dropdown = $(dropdownHTML)
|
||||||
.appendTo('#qunit-fixture')
|
.appendTo('#qunit-fixture')
|
||||||
.find('[data-toggle="dropdown"]')
|
.find('[data-toggle="dropdown"]')
|
||||||
.bootstrapDropdown()
|
.bootstrapDropdown()
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
$(function () {
|
$(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
module('modal plugin')
|
module('modal plugin')
|
||||||
|
|
||||||
@ -8,11 +9,11 @@ $(function () {
|
|||||||
})
|
})
|
||||||
|
|
||||||
module('modal', {
|
module('modal', {
|
||||||
setup: function() {
|
setup: function () {
|
||||||
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
|
// 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()
|
$.fn.bootstrapModal = $.fn.modal.noConflict()
|
||||||
},
|
},
|
||||||
teardown: function() {
|
teardown: function () {
|
||||||
$.fn.modal = $.fn.bootstrapModal
|
$.fn.modal = $.fn.bootstrapModal
|
||||||
delete $.fn.bootstrapModal
|
delete $.fn.bootstrapModal
|
||||||
}
|
}
|
||||||
@ -201,4 +202,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()
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
* Licensed under the MIT license.
|
* Licensed under the MIT license.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*global QUnit:true, alert:true*/
|
|
||||||
(function () {
|
(function () {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
$(function () {
|
$(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
module('popover plugin')
|
module('popover plugin')
|
||||||
|
|
||||||
@ -8,11 +9,11 @@ $(function () {
|
|||||||
})
|
})
|
||||||
|
|
||||||
module('popover', {
|
module('popover', {
|
||||||
setup: function() {
|
setup: function () {
|
||||||
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
|
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
|
||||||
$.fn.bootstrapPopover = $.fn.popover.noConflict()
|
$.fn.bootstrapPopover = $.fn.popover.noConflict()
|
||||||
},
|
},
|
||||||
teardown: function() {
|
teardown: function () {
|
||||||
$.fn.popover = $.fn.bootstrapPopover
|
$.fn.popover = $.fn.bootstrapPopover
|
||||||
delete $.fn.bootstrapPopover
|
delete $.fn.bootstrapPopover
|
||||||
}
|
}
|
||||||
@ -46,6 +47,16 @@ $(function () {
|
|||||||
ok(!!popover.data('bs.popover'), 'popover instance exists')
|
ok(!!popover.data('bs.popover'), 'popover instance exists')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('should store popover trigger in popover instance data object', function () {
|
||||||
|
$.support.transition = false
|
||||||
|
var popover = $('<a href="#" title="ResentedHook">@ResentedHook</a>')
|
||||||
|
.appendTo('#qunit-fixture')
|
||||||
|
.bootstrapPopover()
|
||||||
|
popover.bootstrapPopover('show')
|
||||||
|
ok(!!$('.popover').data('bs.popover'), 'popover trigger stored in instance data')
|
||||||
|
$('#qunit-fixture').empty()
|
||||||
|
})
|
||||||
|
|
||||||
test('should get title and content from options', function () {
|
test('should get title and content from options', function () {
|
||||||
$.support.transition = false
|
$.support.transition = false
|
||||||
var popover = $('<a href="#">@fat</a>')
|
var popover = $('<a href="#">@fat</a>')
|
||||||
@ -73,7 +84,7 @@ $(function () {
|
|||||||
test('should not duplicate HTML object', function () {
|
test('should not duplicate HTML object', function () {
|
||||||
$.support.transition = false
|
$.support.transition = false
|
||||||
|
|
||||||
$div = $('<div>').html('loves writing tests (╯°□°)╯︵ ┻━┻')
|
var $div = $('<div>').html('loves writing tests (╯°□°)╯︵ ┻━┻')
|
||||||
|
|
||||||
var popover = $('<a href="#">@fat</a>')
|
var popover = $('<a href="#">@fat</a>')
|
||||||
.appendTo('#qunit-fixture')
|
.appendTo('#qunit-fixture')
|
||||||
@ -156,7 +167,9 @@ $(function () {
|
|||||||
})
|
})
|
||||||
|
|
||||||
test('should destroy popover', function () {
|
test('should destroy popover', function () {
|
||||||
var popover = $('<div/>').bootstrapPopover({trigger: 'hover'}).on('click.foo', function () {})
|
var popover = $('<div/>').bootstrapPopover({
|
||||||
|
trigger: 'hover'
|
||||||
|
}).on('click.foo', function () {})
|
||||||
ok(popover.data('bs.popover'), 'popover has data')
|
ok(popover.data('bs.popover'), 'popover has data')
|
||||||
ok($._data(popover[0], 'events').mouseover && $._data(popover[0], 'events').mouseout, 'popover has hover event')
|
ok($._data(popover[0], 'events').mouseover && $._data(popover[0], 'events').mouseout, 'popover has hover event')
|
||||||
ok($._data(popover[0], 'events').click[0].namespace == 'foo', 'popover has extra click.foo event')
|
ok($._data(popover[0], 'events').click[0].namespace == 'foo', 'popover has extra click.foo event')
|
||||||
@ -164,7 +177,7 @@ $(function () {
|
|||||||
popover.bootstrapPopover('destroy')
|
popover.bootstrapPopover('destroy')
|
||||||
ok(!popover.hasClass('in'), 'popover is hidden')
|
ok(!popover.hasClass('in'), 'popover is hidden')
|
||||||
ok(!popover.data('popover'), 'popover does not have data')
|
ok(!popover.data('popover'), 'popover does not have data')
|
||||||
ok($._data(popover[0],'events').click[0].namespace == 'foo', 'popover still has click.foo')
|
ok($._data(popover[0], 'events').click[0].namespace == 'foo', 'popover still has click.foo')
|
||||||
ok(!$._data(popover[0], 'events').mouseover && !$._data(popover[0], 'events').mouseout, 'popover does not have any events')
|
ok(!$._data(popover[0], 'events').mouseover && !$._data(popover[0], 'events').mouseout, 'popover does not have any events')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
$(function () {
|
$(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
module('scrollspy plugin')
|
module('scrollspy plugin')
|
||||||
|
|
||||||
@ -7,11 +8,11 @@ $(function () {
|
|||||||
})
|
})
|
||||||
|
|
||||||
module('scrollspy', {
|
module('scrollspy', {
|
||||||
setup: function() {
|
setup: function () {
|
||||||
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
|
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
|
||||||
$.fn.bootstrapScrollspy = $.fn.scrollspy.noConflict()
|
$.fn.bootstrapScrollspy = $.fn.scrollspy.noConflict()
|
||||||
},
|
},
|
||||||
teardown: function() {
|
teardown: function () {
|
||||||
$.fn.scrollspy = $.fn.bootstrapScrollspy
|
$.fn.scrollspy = $.fn.bootstrapScrollspy
|
||||||
delete $.fn.bootstrapScrollspy
|
delete $.fn.bootstrapScrollspy
|
||||||
}
|
}
|
||||||
@ -26,8 +27,9 @@ $(function () {
|
|||||||
})
|
})
|
||||||
|
|
||||||
test('should switch active class on scroll', function () {
|
test('should switch active class on scroll', function () {
|
||||||
var sectionHTML = '<div id="masthead"></div>',
|
var sectionHTML = '<div id="masthead"></div>'
|
||||||
topbarHTML = '<div class="topbar">' +
|
$(sectionHTML).append('#qunit-fixture')
|
||||||
|
var topbarHTML = '<div class="topbar">' +
|
||||||
'<div class="topbar-inner">' +
|
'<div class="topbar-inner">' +
|
||||||
'<div class="container">' +
|
'<div class="container">' +
|
||||||
'<h3><a href="#">Bootstrap</a></h3>' +
|
'<h3><a href="#">Bootstrap</a></h3>' +
|
||||||
@ -35,14 +37,15 @@ $(function () {
|
|||||||
'</ul>' +
|
'</ul>' +
|
||||||
'</div>' +
|
'</div>' +
|
||||||
'</div>' +
|
'</div>' +
|
||||||
'</div>',
|
'</div>'
|
||||||
$topbar = $(topbarHTML).bootstrapScrollspy()
|
var $topbar = $(topbarHTML).bootstrapScrollspy()
|
||||||
|
|
||||||
$(sectionHTML).append('#qunit-fixture')
|
$(sectionHTML).append('#qunit-fixture')
|
||||||
ok($topbar.find('.active', true))
|
ok($topbar.find('.active', true))
|
||||||
})
|
})
|
||||||
|
|
||||||
test('should only switch active class on current target', function () {
|
asyncTest('should only switch active class on current target', function () {
|
||||||
|
expect(1);
|
||||||
var sectionHTML = '<div id="root" class="active">' +
|
var sectionHTML = '<div id="root" class="active">' +
|
||||||
'<div class="topbar">' +
|
'<div class="topbar">' +
|
||||||
'<div class="topbar-inner">' +
|
'<div class="topbar-inner">' +
|
||||||
@ -68,14 +71,47 @@ $(function () {
|
|||||||
'</p>' +
|
'</p>' +
|
||||||
'</div>' +
|
'</div>' +
|
||||||
'</div>' +
|
'</div>' +
|
||||||
'</div>',
|
'</div>'
|
||||||
$section = $(sectionHTML).appendTo('#qunit-fixture'),
|
var $section = $(sectionHTML).appendTo('#qunit-fixture')
|
||||||
$scrollSpy = $section
|
var $scrollSpy = $section
|
||||||
.show()
|
.show()
|
||||||
.find('#scrollspy-example')
|
.find('#scrollspy-example')
|
||||||
.bootstrapScrollspy({target: '#ss-target'})
|
.bootstrapScrollspy({ target: '#ss-target' })
|
||||||
|
|
||||||
|
$scrollSpy.on('scroll.bs.scrollspy', function () {
|
||||||
|
ok($section.hasClass('active'), 'Active class still on root node')
|
||||||
|
start()
|
||||||
|
})
|
||||||
$scrollSpy.scrollTop(350);
|
$scrollSpy.scrollTop(350);
|
||||||
ok($section.hasClass('active'), 'Active class still on root node')
|
})
|
||||||
|
|
||||||
|
asyncTest('middle navigation option correctly selected when large offset is used', function () {
|
||||||
|
expect(3);
|
||||||
|
var sectionHTML = '<div id="header" style="height: 500px;"></div>' +
|
||||||
|
'<nav id="navigation" class="navbar">' +
|
||||||
|
'<ul class="nav navbar-nav">' +
|
||||||
|
'<li class="active"><a id="one-link" href="#one">One</a></li>' +
|
||||||
|
'<li><a id="two-link" href="#two">Two</a></li>' +
|
||||||
|
'<li><a id="three-link" href="#three">Three</a></li>' +
|
||||||
|
'</ul>' +
|
||||||
|
'</nav>' +
|
||||||
|
'<div id="content" style="height: 200px; overflow-y: auto;">' +
|
||||||
|
'<div id="one" style="height: 500px;"></div>' +
|
||||||
|
'<div id="two" style="height: 300px;"></div>' +
|
||||||
|
'<div id="three" style="height: 10px;"></div>' +
|
||||||
|
'</div>'
|
||||||
|
var $section = $(sectionHTML).appendTo('#qunit-fixture')
|
||||||
|
var $scrollSpy = $section
|
||||||
|
.show()
|
||||||
|
.filter('#content')
|
||||||
|
$scrollSpy.bootstrapScrollspy({ target: '#navigation', offset: $scrollSpy.position().top })
|
||||||
|
|
||||||
|
$scrollSpy.on('scroll.bs.scrollspy', function () {
|
||||||
|
ok(!$section.find('#one-link').parent().hasClass('active'), 'Active class removed from first section')
|
||||||
|
ok($section.find('#two-link').parent().hasClass('active'), 'Active class on middle section')
|
||||||
|
ok(!$section.find('#three-link').parent().hasClass('active'), 'Active class not on last section')
|
||||||
|
start()
|
||||||
|
})
|
||||||
|
$scrollSpy.scrollTop(550);
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
$(function () {
|
$(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
module('tabs plugin')
|
module('tabs plugin')
|
||||||
|
|
||||||
@ -7,11 +8,11 @@ $(function () {
|
|||||||
})
|
})
|
||||||
|
|
||||||
module('tabs', {
|
module('tabs', {
|
||||||
setup: function() {
|
setup: function () {
|
||||||
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
|
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
|
||||||
$.fn.bootstrapTab = $.fn.tab.noConflict()
|
$.fn.bootstrapTab = $.fn.tab.noConflict()
|
||||||
},
|
},
|
||||||
teardown: function() {
|
teardown: function () {
|
||||||
$.fn.tab = $.fn.bootstrapTab
|
$.fn.tab = $.fn.bootstrapTab
|
||||||
delete $.fn.bootstrapTab
|
delete $.fn.bootstrapTab
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
$(function () {
|
$(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
module('tooltip plugin')
|
module('tooltip plugin')
|
||||||
|
|
||||||
@ -8,11 +9,11 @@ $(function () {
|
|||||||
})
|
})
|
||||||
|
|
||||||
module('tooltip', {
|
module('tooltip', {
|
||||||
setup: function() {
|
setup: function () {
|
||||||
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
|
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
|
||||||
$.fn.bootstrapTooltip = $.fn.tooltip.noConflict()
|
$.fn.bootstrapTooltip = $.fn.tooltip.noConflict()
|
||||||
},
|
},
|
||||||
teardown: function() {
|
teardown: function () {
|
||||||
$.fn.tooltip = $.fn.bootstrapTooltip
|
$.fn.tooltip = $.fn.bootstrapTooltip
|
||||||
delete $.fn.bootstrapTooltip
|
delete $.fn.bootstrapTooltip
|
||||||
}
|
}
|
||||||
@ -41,11 +42,41 @@ $(function () {
|
|||||||
equal(tooltip.attr('data-original-title'), 'Another tooltip', 'original title preserved in data attribute')
|
equal(tooltip.attr('data-original-title'), 'Another tooltip', 'original title preserved in data attribute')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('should add set set aria describedby to the element called on show', function () {
|
||||||
|
var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>').bootstrapTooltip()
|
||||||
|
.appendTo('#qunit-fixture')
|
||||||
|
.bootstrapTooltip('show')
|
||||||
|
ok(tooltip.attr('aria-describedby'), 'has the right attributes')
|
||||||
|
var id = $('.tooltip').attr('id')
|
||||||
|
|
||||||
|
ok($('#' + id).length == 1, 'has a unique id')
|
||||||
|
ok($('.tooltip').attr('aria-describedby') === tooltip.attr('id'), 'they match!')
|
||||||
|
ok(tooltip.attr('aria-describedby') !== undefined, 'has the right attributes')
|
||||||
|
})
|
||||||
|
|
||||||
|
test('should remove the aria-describedby attributes on hide', function () {
|
||||||
|
var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>').bootstrapTooltip()
|
||||||
|
.appendTo('#qunit-fixture')
|
||||||
|
.bootstrapTooltip('show')
|
||||||
|
ok(tooltip.attr('aria-describedby'), 'has the right attributes')
|
||||||
|
tooltip.bootstrapTooltip('hide')
|
||||||
|
ok(!tooltip.attr('aria-describedby'), 'removed the attributes on hide')
|
||||||
|
})
|
||||||
|
|
||||||
|
test('should assign a unique id tooltip element', function () {
|
||||||
|
$('<a href="#" rel="tooltip" title="Another tooltip"></a>')
|
||||||
|
.appendTo('#qunit-fixture')
|
||||||
|
.bootstrapTooltip('show')
|
||||||
|
var id = $('.tooltip').attr('id')
|
||||||
|
|
||||||
|
ok($('#' + id).length == 1 && id.indexOf('tooltip') === 0, 'generated prefixed and unique tooltip id')
|
||||||
|
})
|
||||||
|
|
||||||
test('should place tooltips relative to placement option', function () {
|
test('should place tooltips relative to placement option', function () {
|
||||||
$.support.transition = false
|
$.support.transition = false
|
||||||
var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>')
|
var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>')
|
||||||
.appendTo('#qunit-fixture')
|
.appendTo('#qunit-fixture')
|
||||||
.bootstrapTooltip({placement: 'bottom'})
|
.bootstrapTooltip({ placement: 'bottom' })
|
||||||
.bootstrapTooltip('show')
|
.bootstrapTooltip('show')
|
||||||
|
|
||||||
ok($('.tooltip').is('.fade.bottom.in'), 'has correct classes applied')
|
ok($('.tooltip').is('.fade.bottom.in'), 'has correct classes applied')
|
||||||
@ -56,7 +87,7 @@ $(function () {
|
|||||||
$.support.transition = false
|
$.support.transition = false
|
||||||
var tooltip = $('<a href="#" rel="tooltip" title="<b>@fat</b>"></a>')
|
var tooltip = $('<a href="#" rel="tooltip" title="<b>@fat</b>"></a>')
|
||||||
.appendTo('#qunit-fixture')
|
.appendTo('#qunit-fixture')
|
||||||
.bootstrapTooltip({html: true})
|
.bootstrapTooltip({ html: true })
|
||||||
.bootstrapTooltip('show')
|
.bootstrapTooltip('show')
|
||||||
|
|
||||||
ok($('.tooltip b').length, 'b tag was inserted')
|
ok($('.tooltip b').length, 'b tag was inserted')
|
||||||
@ -67,7 +98,7 @@ $(function () {
|
|||||||
test('should respect custom classes', function () {
|
test('should respect custom classes', function () {
|
||||||
var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>')
|
var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>')
|
||||||
.appendTo('#qunit-fixture')
|
.appendTo('#qunit-fixture')
|
||||||
.bootstrapTooltip({ template: '<div class="tooltip some-class"><div class="tooltip-arrow"/><div class="tooltip-inner"/></div>'})
|
.bootstrapTooltip({ template: '<div class="tooltip some-class"><div class="tooltip-arrow"/><div class="tooltip-inner"/></div>' })
|
||||||
.bootstrapTooltip('show')
|
.bootstrapTooltip('show')
|
||||||
|
|
||||||
ok($('.tooltip').hasClass('some-class'), 'custom class is present')
|
ok($('.tooltip').hasClass('some-class'), 'custom class is present')
|
||||||
@ -87,9 +118,11 @@ $(function () {
|
|||||||
|
|
||||||
test('should fire shown event', function () {
|
test('should fire shown event', function () {
|
||||||
stop()
|
stop()
|
||||||
$('<div title="tooltip title"></div>')
|
var tooltip = $('<div title="tooltip title"></div>').appendTo('#qunit-fixture')
|
||||||
|
tooltip
|
||||||
.on('shown.bs.tooltip', function () {
|
.on('shown.bs.tooltip', function () {
|
||||||
ok(true, 'shown was called')
|
ok(true, 'shown was called')
|
||||||
|
tooltip.remove()
|
||||||
start()
|
start()
|
||||||
})
|
})
|
||||||
.bootstrapTooltip('show')
|
.bootstrapTooltip('show')
|
||||||
@ -111,12 +144,14 @@ $(function () {
|
|||||||
|
|
||||||
test('should fire hide event', function () {
|
test('should fire hide event', function () {
|
||||||
stop()
|
stop()
|
||||||
$('<div title="tooltip title"></div>')
|
var tooltip = $('<div title="tooltip title"></div>').appendTo('#qunit-fixture')
|
||||||
|
tooltip
|
||||||
.on('shown.bs.tooltip', function () {
|
.on('shown.bs.tooltip', function () {
|
||||||
$(this).bootstrapTooltip('hide')
|
$(this).bootstrapTooltip('hide')
|
||||||
})
|
})
|
||||||
.on('hide.bs.tooltip', function () {
|
.on('hide.bs.tooltip', function () {
|
||||||
ok(true, 'hide was called')
|
ok(true, 'hide was called')
|
||||||
|
tooltip.remove()
|
||||||
start()
|
start()
|
||||||
})
|
})
|
||||||
.bootstrapTooltip('show')
|
.bootstrapTooltip('show')
|
||||||
@ -124,12 +159,14 @@ $(function () {
|
|||||||
|
|
||||||
test('should fire hidden event', function () {
|
test('should fire hidden event', function () {
|
||||||
stop()
|
stop()
|
||||||
$('<div title="tooltip title"></div>')
|
var tooltip = $('<div title="tooltip title"></div>').appendTo('#qunit-fixture')
|
||||||
|
tooltip
|
||||||
.on('shown.bs.tooltip', function () {
|
.on('shown.bs.tooltip', function () {
|
||||||
$(this).bootstrapTooltip('hide')
|
$(this).bootstrapTooltip('hide')
|
||||||
})
|
})
|
||||||
.on('hidden.bs.tooltip', function () {
|
.on('hidden.bs.tooltip', function () {
|
||||||
ok(true, 'hidden was called')
|
ok(true, 'hidden was called')
|
||||||
|
tooltip.remove()
|
||||||
start()
|
start()
|
||||||
})
|
})
|
||||||
.bootstrapTooltip('show')
|
.bootstrapTooltip('show')
|
||||||
@ -137,13 +174,15 @@ $(function () {
|
|||||||
|
|
||||||
test('should not fire hidden event when default prevented', function () {
|
test('should not fire hidden event when default prevented', function () {
|
||||||
stop()
|
stop()
|
||||||
$('<div title="tooltip title"></div>')
|
var tooltip = $('<div title="tooltip title"></div>').appendTo('#qunit-fixture')
|
||||||
|
tooltip
|
||||||
.on('shown.bs.tooltip', function () {
|
.on('shown.bs.tooltip', function () {
|
||||||
$(this).bootstrapTooltip('hide')
|
$(this).bootstrapTooltip('hide')
|
||||||
})
|
})
|
||||||
.on('hide.bs.tooltip', function (e) {
|
.on('hide.bs.tooltip', function (e) {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
ok(true, 'hide was called')
|
ok(true, 'hide was called')
|
||||||
|
tooltip.remove()
|
||||||
start()
|
start()
|
||||||
})
|
})
|
||||||
.on('hidden.bs.tooltip', function () {
|
.on('hidden.bs.tooltip', function () {
|
||||||
@ -174,7 +213,7 @@ $(function () {
|
|||||||
test('should not show tooltip if leave event occurs before delay expires, even if hide delay is 0', function () {
|
test('should not show tooltip if leave event occurs before delay expires, even if hide delay is 0', function () {
|
||||||
var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>')
|
var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>')
|
||||||
.appendTo('#qunit-fixture')
|
.appendTo('#qunit-fixture')
|
||||||
.bootstrapTooltip({ delay: { show: 200, hide: 0} })
|
.bootstrapTooltip({ delay: { show: 200, hide: 0 }})
|
||||||
|
|
||||||
stop()
|
stop()
|
||||||
|
|
||||||
@ -193,7 +232,7 @@ $(function () {
|
|||||||
test('should wait 200 ms before hiding the tooltip', 3, function () {
|
test('should wait 200 ms before hiding the tooltip', 3, function () {
|
||||||
var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>')
|
var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>')
|
||||||
.appendTo('#qunit-fixture')
|
.appendTo('#qunit-fixture')
|
||||||
.bootstrapTooltip({ delay: { show: 0, hide: 200} })
|
.bootstrapTooltip({ delay: { show: 0, hide: 200 }})
|
||||||
|
|
||||||
stop()
|
stop()
|
||||||
|
|
||||||
@ -215,7 +254,7 @@ $(function () {
|
|||||||
test('should not hide tooltip if leave event occurs, then tooltip is show immediately again', function () {
|
test('should not hide tooltip if leave event occurs, then tooltip is show immediately again', function () {
|
||||||
var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>')
|
var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>')
|
||||||
.appendTo('#qunit-fixture')
|
.appendTo('#qunit-fixture')
|
||||||
.bootstrapTooltip({ delay: { show: 0, hide: 200} })
|
.bootstrapTooltip({ delay: { show: 0, hide: 200 }})
|
||||||
|
|
||||||
stop()
|
stop()
|
||||||
|
|
||||||
@ -281,8 +320,9 @@ $(function () {
|
|||||||
|
|
||||||
test('should show tooltip with delegate selector on click', function () {
|
test('should show tooltip with delegate selector on click', function () {
|
||||||
var div = $('<div><a href="#" rel="tooltip" title="Another tooltip"></a></div>')
|
var div = $('<div><a href="#" rel="tooltip" title="Another tooltip"></a></div>')
|
||||||
div.appendTo('#qunit-fixture')
|
div.appendTo('#qunit-fixture').bootstrapTooltip({
|
||||||
.bootstrapTooltip({ selector: 'a[rel="tooltip"]', trigger: 'click' })
|
selector: 'a[rel="tooltip"]', trigger: 'click'
|
||||||
|
})
|
||||||
div.find('a').trigger('click')
|
div.find('a').trigger('click')
|
||||||
ok($('.tooltip').is('.fade.in'), 'tooltip is faded in')
|
ok($('.tooltip').is('.fade.in'), 'tooltip is faded in')
|
||||||
})
|
})
|
||||||
@ -290,15 +330,26 @@ $(function () {
|
|||||||
test('should show tooltip when toggle is called', function () {
|
test('should show tooltip when toggle is called', function () {
|
||||||
$('<a href="#" rel="tooltip" title="tooltip on toggle"></a>')
|
$('<a href="#" rel="tooltip" title="tooltip on toggle"></a>')
|
||||||
.appendTo('#qunit-fixture')
|
.appendTo('#qunit-fixture')
|
||||||
.bootstrapTooltip({trigger: 'manual'})
|
.bootstrapTooltip({ trigger: 'manual' })
|
||||||
.bootstrapTooltip('toggle')
|
.bootstrapTooltip('toggle')
|
||||||
ok($('.tooltip').is('.fade.in'), 'tooltip should be toggled in')
|
ok($('.tooltip').is('.fade.in'), 'tooltip should be toggled in')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('should hide shown tooltip when toggle is called on tooltip', function () {
|
||||||
|
var tooltip = $('<a href="#" rel="tooltip" title="tooltip on toggle">@ResentedHook</a>')
|
||||||
|
.appendTo('#qunit-fixture')
|
||||||
|
.bootstrapTooltip({ trigger: 'manual' })
|
||||||
|
.bootstrapTooltip('toggle')
|
||||||
|
$('.tooltip', '#qunit-fixture').bootstrapTooltip('toggle')
|
||||||
|
ok($('.tooltip').not('.fade.in'), 'tooltip should be toggled out')
|
||||||
|
tooltip.bootstrapTooltip('hide')
|
||||||
|
$('#qunit-fixture').empty()
|
||||||
|
})
|
||||||
|
|
||||||
test('should place tooltips inside the body', function () {
|
test('should place tooltips inside the body', function () {
|
||||||
var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>')
|
var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>')
|
||||||
.appendTo('#qunit-fixture')
|
.appendTo('#qunit-fixture')
|
||||||
.bootstrapTooltip({container: 'body'})
|
.bootstrapTooltip({ container: 'body' })
|
||||||
.bootstrapTooltip('show')
|
.bootstrapTooltip('show')
|
||||||
ok($('body > .tooltip').length, 'inside the body')
|
ok($('body > .tooltip').length, 'inside the body')
|
||||||
ok(!$('#qunit-fixture > .tooltip').length, 'not found in parent')
|
ok(!$('#qunit-fixture > .tooltip').length, 'not found in parent')
|
||||||
@ -307,11 +358,11 @@ $(function () {
|
|||||||
|
|
||||||
test('should place tooltip inside window', function () {
|
test('should place tooltip inside window', function () {
|
||||||
var container = $('<div />').appendTo('body')
|
var container = $('<div />').appendTo('body')
|
||||||
.css({position: 'absolute', width: 200, height: 200, bottom: 0, left: 0})
|
.css({ position: 'absolute', width: 200, height: 200, bottom: 0, left: 0 })
|
||||||
$('<a href="#" title="Very very very very very very very very long tooltip">Hover me</a>')
|
$('<a href="#" title="Very very very very very very very very long tooltip">Hover me</a>')
|
||||||
.css({position: 'absolute', top: 0, left: 0})
|
.css({ position: 'absolute', top: 0, left: 0 })
|
||||||
.appendTo(container)
|
.appendTo(container)
|
||||||
.bootstrapTooltip({placement: 'top', animate: false})
|
.bootstrapTooltip({ placement: 'top', animate: false })
|
||||||
.bootstrapTooltip('show')
|
.bootstrapTooltip('show')
|
||||||
|
|
||||||
stop()
|
stop()
|
||||||
@ -326,12 +377,12 @@ $(function () {
|
|||||||
|
|
||||||
test('should place tooltip on top of element', function () {
|
test('should place tooltip on top of element', function () {
|
||||||
var container = $('<div />').appendTo('body')
|
var container = $('<div />').appendTo('body')
|
||||||
.css({position: 'absolute', bottom: 0, left: 0, textAlign: 'right', width: 300, height: 300}),
|
.css({ position: 'absolute', bottom: 0, left: 0, textAlign: 'right', width: 300, height: 300 })
|
||||||
p = $('<p style="margin-top:200px" />').appendTo(container),
|
var p = $('<p style="margin-top:200px" />').appendTo(container)
|
||||||
tooltiped = $('<a href="#" title="very very very very very very very long tooltip">Hover me</a>')
|
var tooltiped = $('<a href="#" title="very very very very very very very long tooltip">Hover me</a>')
|
||||||
.css({marginTop: 200})
|
.css({ marginTop: 200 })
|
||||||
.appendTo(p)
|
.appendTo(p)
|
||||||
.bootstrapTooltip({placement: 'top', animate: false})
|
.bootstrapTooltip({ placement: 'top', animate: false })
|
||||||
.bootstrapTooltip('show')
|
.bootstrapTooltip('show')
|
||||||
|
|
||||||
stop()
|
stop()
|
||||||
@ -348,17 +399,17 @@ $(function () {
|
|||||||
test('should add position class before positioning so that position-specific styles are taken into account', function () {
|
test('should add position class before positioning so that position-specific styles are taken into account', function () {
|
||||||
$('head').append('<style id="test"> .tooltip.right { white-space: nowrap; } .tooltip.right .tooltip-inner { max-width: none; } </style>')
|
$('head').append('<style id="test"> .tooltip.right { white-space: nowrap; } .tooltip.right .tooltip-inner { max-width: none; } </style>')
|
||||||
|
|
||||||
var container = $('<div />').appendTo('body'),
|
var container = $('<div />').appendTo('body')
|
||||||
target = $('<a href="#" rel="tooltip" title="very very very very very very very very long tooltip in one line"></a>')
|
var target = $('<a href="#" rel="tooltip" title="very very very very very very very very long tooltip in one line"></a>')
|
||||||
.appendTo(container)
|
.appendTo(container)
|
||||||
.bootstrapTooltip({placement: 'right', viewport: null})
|
.bootstrapTooltip({ placement: 'right', viewport: null })
|
||||||
.bootstrapTooltip('show'),
|
.bootstrapTooltip('show')
|
||||||
tooltip = container.find('.tooltip')
|
var tooltip = container.find('.tooltip')
|
||||||
|
|
||||||
// this is some dumb hack shit because sub pixels in firefox
|
// this is some dumb hack shit because sub pixels in firefox
|
||||||
var top = Math.round(target.offset().top + (target[0].offsetHeight / 2) - (tooltip[0].offsetHeight / 2))
|
var top = Math.round(target.offset().top + (target[0].offsetHeight / 2) - (tooltip[0].offsetHeight / 2))
|
||||||
var top2 = Math.round(tooltip.offset().top)
|
var top2 = Math.round(tooltip.offset().top)
|
||||||
var topDiff = top - top2
|
var topDiff = top - top2
|
||||||
ok(topDiff <= 1 && topDiff >= -1)
|
ok(topDiff <= 1 && topDiff >= -1)
|
||||||
target.bootstrapTooltip('hide')
|
target.bootstrapTooltip('hide')
|
||||||
$('head #test').remove()
|
$('head #test').remove()
|
||||||
@ -401,18 +452,18 @@ $(function () {
|
|||||||
test('tooltips should be placed dynamically, with the dynamic placement option', function () {
|
test('tooltips should be placed dynamically, with the dynamic placement option', function () {
|
||||||
$.support.transition = false
|
$.support.transition = false
|
||||||
var ttContainer = $('<div id="dynamic-tt-test"/>').css({
|
var ttContainer = $('<div id="dynamic-tt-test"/>').css({
|
||||||
height : 400,
|
height: 400,
|
||||||
overflow : 'hidden',
|
overflow: 'hidden',
|
||||||
position : 'absolute',
|
position: 'absolute',
|
||||||
top : 0,
|
top: 0,
|
||||||
left : 0,
|
left: 0,
|
||||||
width : 600
|
width: 600
|
||||||
})
|
})
|
||||||
.appendTo('body')
|
.appendTo('body')
|
||||||
|
|
||||||
var topTooltip = $('<div style="display: inline-block; position: absolute; left: 0; top: 0;" rel="tooltip" title="Top tooltip">Top Dynamic Tooltip</div>')
|
var topTooltip = $('<div style="display: inline-block; position: absolute; left: 0; top: 0;" rel="tooltip" title="Top tooltip">Top Dynamic Tooltip</div>')
|
||||||
.appendTo('#dynamic-tt-test')
|
.appendTo('#dynamic-tt-test')
|
||||||
.bootstrapTooltip({placement: 'auto'})
|
.bootstrapTooltip({ placement: 'auto' })
|
||||||
.bootstrapTooltip('show')
|
.bootstrapTooltip('show')
|
||||||
|
|
||||||
ok($('.tooltip').is('.bottom'), 'top positioned tooltip is dynamically positioned bottom')
|
ok($('.tooltip').is('.bottom'), 'top positioned tooltip is dynamically positioned bottom')
|
||||||
@ -421,7 +472,7 @@ $(function () {
|
|||||||
|
|
||||||
var rightTooltip = $('<div style="display: inline-block; position: absolute; right: 0;" rel="tooltip" title="Right tooltip">Right Dynamic Tooltip</div>')
|
var rightTooltip = $('<div style="display: inline-block; position: absolute; right: 0;" rel="tooltip" title="Right tooltip">Right Dynamic Tooltip</div>')
|
||||||
.appendTo('#dynamic-tt-test')
|
.appendTo('#dynamic-tt-test')
|
||||||
.bootstrapTooltip({placement: 'right auto'})
|
.bootstrapTooltip({ placement: 'right auto' })
|
||||||
.bootstrapTooltip('show')
|
.bootstrapTooltip('show')
|
||||||
|
|
||||||
ok($('.tooltip').is('.left'), 'right positioned tooltip is dynamically positioned left')
|
ok($('.tooltip').is('.left'), 'right positioned tooltip is dynamically positioned left')
|
||||||
@ -429,7 +480,7 @@ $(function () {
|
|||||||
|
|
||||||
var leftTooltip = $('<div style="display: inline-block; position: absolute; left: 0;" rel="tooltip" title="Left tooltip">Left Dynamic Tooltip</div>')
|
var leftTooltip = $('<div style="display: inline-block; position: absolute; left: 0;" rel="tooltip" title="Left tooltip">Left Dynamic Tooltip</div>')
|
||||||
.appendTo('#dynamic-tt-test')
|
.appendTo('#dynamic-tt-test')
|
||||||
.bootstrapTooltip({placement: 'auto left'})
|
.bootstrapTooltip({ placement: 'auto left' })
|
||||||
.bootstrapTooltip('show')
|
.bootstrapTooltip('show')
|
||||||
|
|
||||||
ok($('.tooltip').is('.right'), 'left positioned tooltip is dynamically positioned right')
|
ok($('.tooltip').is('.right'), 'left positioned tooltip is dynamically positioned right')
|
||||||
@ -441,14 +492,14 @@ $(function () {
|
|||||||
test('should adjust the tip\'s top when up against the top of the viewport', function () {
|
test('should adjust the tip\'s top when up against the top of the viewport', function () {
|
||||||
$('head').append('<style id="test"> .tooltip .tooltip-inner { width: 200px; height: 200px; max-width: none; } </style>')
|
$('head').append('<style id="test"> .tooltip .tooltip-inner { width: 200px; height: 200px; max-width: none; } </style>')
|
||||||
|
|
||||||
var container = $('<div />').appendTo('body'),
|
var container = $('<div />').appendTo('body')
|
||||||
target = $('<a href="#" rel="tooltip" title="tip" style="position: fixed; top: 0px; left: 0px;"></a>')
|
var target = $('<a href="#" rel="tooltip" title="tip" style="position: fixed; top: 0px; left: 0px;"></a>')
|
||||||
.appendTo(container)
|
.appendTo(container)
|
||||||
.bootstrapTooltip({placement: 'right', viewport: {selector: 'body', padding: 12}})
|
.bootstrapTooltip({ placement: 'right', viewport: { selector: 'body', padding: 12 }})
|
||||||
.bootstrapTooltip('show'),
|
.bootstrapTooltip('show')
|
||||||
tooltip = container.find('.tooltip')
|
var tooltip = container.find('.tooltip')
|
||||||
|
|
||||||
ok( Math.round(tooltip.offset().top) === 12 )
|
ok(Math.round(tooltip.offset().top) === 12)
|
||||||
target.bootstrapTooltip('hide')
|
target.bootstrapTooltip('hide')
|
||||||
$('head #test').remove()
|
$('head #test').remove()
|
||||||
})
|
})
|
||||||
@ -456,14 +507,14 @@ $(function () {
|
|||||||
test('should adjust the tip\'s top when up against the bottom of the viewport', function () {
|
test('should adjust the tip\'s top when up against the bottom of the viewport', function () {
|
||||||
$('head').append('<style id="test"> .tooltip .tooltip-inner { width: 200px; height: 200px; max-width: none; } </style>')
|
$('head').append('<style id="test"> .tooltip .tooltip-inner { width: 200px; height: 200px; max-width: none; } </style>')
|
||||||
|
|
||||||
var container = $('<div />').appendTo('body'),
|
var container = $('<div />').appendTo('body')
|
||||||
target = $('<a href="#" rel="tooltip" title="tip" style="position: fixed; bottom: 0px; left: 0px;"></a>')
|
var target = $('<a href="#" rel="tooltip" title="tip" style="position: fixed; bottom: 0px; left: 0px;"></a>')
|
||||||
.appendTo(container)
|
.appendTo(container)
|
||||||
.bootstrapTooltip({placement: 'right', viewport: {selector: 'body', padding: 12}})
|
.bootstrapTooltip({ placement: 'right', viewport: { selector: 'body', padding: 12 }})
|
||||||
.bootstrapTooltip('show'),
|
.bootstrapTooltip('show')
|
||||||
tooltip = container.find('.tooltip')
|
var tooltip = container.find('.tooltip')
|
||||||
|
|
||||||
ok( Math.round(tooltip.offset().top) === Math.round($(window).height() - 12 - tooltip[0].offsetHeight) )
|
ok(Math.round(tooltip.offset().top) === Math.round($(window).height() - 12 - tooltip[0].offsetHeight))
|
||||||
target.bootstrapTooltip('hide')
|
target.bootstrapTooltip('hide')
|
||||||
$('head #test').remove()
|
$('head #test').remove()
|
||||||
})
|
})
|
||||||
@ -471,14 +522,14 @@ $(function () {
|
|||||||
test('should adjust the tip\'s left when up against the left of the viewport', function () {
|
test('should adjust the tip\'s left when up against the left of the viewport', function () {
|
||||||
$('head').append('<style id="test"> .tooltip .tooltip-inner { width: 200px; height: 200px; max-width: none; } </style>')
|
$('head').append('<style id="test"> .tooltip .tooltip-inner { width: 200px; height: 200px; max-width: none; } </style>')
|
||||||
|
|
||||||
var container = $('<div />').appendTo('body'),
|
var container = $('<div />').appendTo('body')
|
||||||
target = $('<a href="#" rel="tooltip" title="tip" style="position: fixed; top: 0px; left: 0px;"></a>')
|
var target = $('<a href="#" rel="tooltip" title="tip" style="position: fixed; top: 0px; left: 0px;"></a>')
|
||||||
.appendTo(container)
|
.appendTo(container)
|
||||||
.bootstrapTooltip({placement: 'bottom', viewport: {selector: 'body', padding: 12}})
|
.bootstrapTooltip({ placement: 'bottom', viewport: { selector: 'body', padding: 12 }})
|
||||||
.bootstrapTooltip('show'),
|
.bootstrapTooltip('show')
|
||||||
tooltip = container.find('.tooltip')
|
var tooltip = container.find('.tooltip')
|
||||||
|
|
||||||
ok( Math.round(tooltip.offset().left) === 12 )
|
ok(Math.round(tooltip.offset().left) === 12)
|
||||||
target.bootstrapTooltip('hide')
|
target.bootstrapTooltip('hide')
|
||||||
$('head #test').remove()
|
$('head #test').remove()
|
||||||
})
|
})
|
||||||
@ -486,14 +537,14 @@ $(function () {
|
|||||||
test('should adjust the tip\'s left when up against the right of the viewport', function () {
|
test('should adjust the tip\'s left when up against the right of the viewport', function () {
|
||||||
$('head').append('<style id="test"> .tooltip .tooltip-inner { width: 200px; height: 200px; max-width: none; } </style>')
|
$('head').append('<style id="test"> .tooltip .tooltip-inner { width: 200px; height: 200px; max-width: none; } </style>')
|
||||||
|
|
||||||
var container = $('<div />').appendTo('body'),
|
var container = $('<div />').appendTo('body')
|
||||||
target = $('<a href="#" rel="tooltip" title="tip" style="position: fixed; top: 0px; right: 0px;"></a>')
|
var target = $('<a href="#" rel="tooltip" title="tip" style="position: fixed; top: 0px; right: 0px;"></a>')
|
||||||
.appendTo(container)
|
.appendTo(container)
|
||||||
.bootstrapTooltip({placement: 'bottom', viewport: {selector: 'body', padding: 12}})
|
.bootstrapTooltip({ placement: 'bottom', viewport: { selector: 'body', padding: 12 }})
|
||||||
.bootstrapTooltip('show'),
|
.bootstrapTooltip('show')
|
||||||
tooltip = container.find('.tooltip')
|
var tooltip = container.find('.tooltip')
|
||||||
|
|
||||||
ok( Math.round(tooltip.offset().left) === Math.round($(window).width() - 12 - tooltip[0].offsetWidth) )
|
ok(Math.round(tooltip.offset().left) === Math.round($(window).width() - 12 - tooltip[0].offsetWidth))
|
||||||
target.bootstrapTooltip('hide')
|
target.bootstrapTooltip('hide')
|
||||||
$('head #test').remove()
|
$('head #test').remove()
|
||||||
})
|
})
|
||||||
@ -502,16 +553,43 @@ $(function () {
|
|||||||
$('head').append('<style id="test"> .tooltip, .tooltip .tooltip-inner { width: 200px; height: 200px; max-width: none; } </style>')
|
$('head').append('<style id="test"> .tooltip, .tooltip .tooltip-inner { width: 200px; height: 200px; max-width: none; } </style>')
|
||||||
$('head').append('<style id="viewport-style"> .container-viewport { position: absolute; top: 50px; left: 60px; width: 300px; height: 300px; } </style>')
|
$('head').append('<style id="viewport-style"> .container-viewport { position: absolute; top: 50px; left: 60px; width: 300px; height: 300px; } </style>')
|
||||||
|
|
||||||
var container = $('<div />', {class: 'container-viewport'}).appendTo('body'),
|
var container = $('<div />', { 'class': 'container-viewport' }).appendTo('body')
|
||||||
target = $('<a href="#" rel="tooltip" title="tip" style="position: fixed; top: 50px; left: 350px;"></a>')
|
var target = $('<a href="#" rel="tooltip" title="tip" style="position: fixed; top: 50px; left: 350px;"></a>')
|
||||||
.appendTo(container)
|
.appendTo(container)
|
||||||
.bootstrapTooltip({placement: 'bottom', viewport: '.container-viewport'})
|
.bootstrapTooltip({ placement: 'bottom', viewport: '.container-viewport' })
|
||||||
.bootstrapTooltip('show'),
|
.bootstrapTooltip('show')
|
||||||
tooltip = container.find('.tooltip')
|
var tooltip = container.find('.tooltip')
|
||||||
|
|
||||||
ok( Math.round(tooltip.offset().left) === Math.round(60 + container.width() - tooltip[0].offsetWidth) )
|
ok(Math.round(tooltip.offset().left) === Math.round(60 + container.width() - tooltip[0].offsetWidth))
|
||||||
target.bootstrapTooltip('hide')
|
target.bootstrapTooltip('hide')
|
||||||
$('head #test').remove()
|
$('head #test').remove()
|
||||||
$('head #viewport-style').remove()
|
$('head #viewport-style').remove()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('should not error when trying to show an auto-placed tooltip that has been removed from the dom', function () {
|
||||||
|
var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>').appendTo('#qunit-fixture')
|
||||||
|
|
||||||
|
tooltip
|
||||||
|
.one('show.bs.tooltip', function () {
|
||||||
|
tooltip.remove()
|
||||||
|
})
|
||||||
|
.bootstrapTooltip({ placement: 'auto' })
|
||||||
|
|
||||||
|
var passed = true
|
||||||
|
try {
|
||||||
|
tooltip.bootstrapTooltip('show')
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
passed = false
|
||||||
|
console.log(err)
|
||||||
|
}
|
||||||
|
ok(passed, '.tooltip(\'show\') should not throw an error in this case')
|
||||||
|
|
||||||
|
try {
|
||||||
|
tooltip.remove()
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
// tooltip may have already been removed
|
||||||
|
}
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
@ -145,12 +145,17 @@
|
|||||||
if (this.hasContent() && this.enabled) {
|
if (this.hasContent() && this.enabled) {
|
||||||
this.$element.trigger(e)
|
this.$element.trigger(e)
|
||||||
|
|
||||||
if (e.isDefaultPrevented()) return
|
var inDom = $.contains(document.documentElement, this.$element[0])
|
||||||
var that = this;
|
if (e.isDefaultPrevented() || !inDom) return
|
||||||
|
var that = this
|
||||||
|
|
||||||
var $tip = this.tip()
|
var $tip = this.tip()
|
||||||
|
|
||||||
|
var tipId = this.getUID(this.type)
|
||||||
|
|
||||||
this.setContent()
|
this.setContent()
|
||||||
|
$tip.attr('id', tipId)
|
||||||
|
this.$element.attr('aria-describedby', tipId)
|
||||||
|
|
||||||
if (this.options.animation) $tip.addClass('fade')
|
if (this.options.animation) $tip.addClass('fade')
|
||||||
|
|
||||||
@ -166,6 +171,7 @@
|
|||||||
.detach()
|
.detach()
|
||||||
.css({ top: 0, left: 0, display: 'block' })
|
.css({ top: 0, left: 0, display: 'block' })
|
||||||
.addClass(placement)
|
.addClass(placement)
|
||||||
|
.data('bs.' + this.type, this)
|
||||||
|
|
||||||
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
|
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
|
||||||
|
|
||||||
@ -194,7 +200,7 @@
|
|||||||
this.applyPlacement(calculatedOffset, placement)
|
this.applyPlacement(calculatedOffset, placement)
|
||||||
this.hoverState = null
|
this.hoverState = null
|
||||||
|
|
||||||
var complete = function() {
|
var complete = function () {
|
||||||
that.$element.trigger('shown.bs.' + that.type)
|
that.$element.trigger('shown.bs.' + that.type)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -273,6 +279,8 @@
|
|||||||
var $tip = this.tip()
|
var $tip = this.tip()
|
||||||
var e = $.Event('hide.bs.' + this.type)
|
var e = $.Event('hide.bs.' + this.type)
|
||||||
|
|
||||||
|
this.$element.removeAttr('aria-describedby')
|
||||||
|
|
||||||
function complete() {
|
function complete() {
|
||||||
if (that.hoverState != 'in') $tip.detach()
|
if (that.hoverState != 'in') $tip.detach()
|
||||||
that.$element.trigger('hidden.bs.' + that.type)
|
that.$element.trigger('hidden.bs.' + that.type)
|
||||||
@ -297,7 +305,7 @@
|
|||||||
|
|
||||||
Tooltip.prototype.fixTitle = function () {
|
Tooltip.prototype.fixTitle = function () {
|
||||||
var $e = this.$element
|
var $e = this.$element
|
||||||
if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
|
if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {
|
||||||
$e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
|
$e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -314,7 +322,7 @@
|
|||||||
scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop(),
|
scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop(),
|
||||||
width: isBody ? $(window).width() : $element.outerWidth(),
|
width: isBody ? $(window).width() : $element.outerWidth(),
|
||||||
height: isBody ? $(window).height() : $element.outerHeight()
|
height: isBody ? $(window).height() : $element.outerHeight()
|
||||||
}, isBody ? {top: 0, left: 0} : $element.offset())
|
}, isBody ? { top: 0, left: 0 } : $element.offset())
|
||||||
}
|
}
|
||||||
|
|
||||||
Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
|
Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
|
||||||
@ -364,12 +372,18 @@
|
|||||||
return title
|
return title
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Tooltip.prototype.getUID = function (prefix) {
|
||||||
|
do prefix += ~~(Math.random() * 1000000)
|
||||||
|
while (document.getElementById(prefix))
|
||||||
|
return prefix
|
||||||
|
}
|
||||||
|
|
||||||
Tooltip.prototype.tip = function () {
|
Tooltip.prototype.tip = function () {
|
||||||
return this.$tip = this.$tip || $(this.options.template)
|
return (this.$tip = this.$tip || $(this.options.template))
|
||||||
}
|
}
|
||||||
|
|
||||||
Tooltip.prototype.arrow = function () {
|
Tooltip.prototype.arrow = function () {
|
||||||
return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')
|
return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
|
||||||
}
|
}
|
||||||
|
|
||||||
Tooltip.prototype.validate = function () {
|
Tooltip.prototype.validate = function () {
|
||||||
|
@ -34,7 +34,8 @@
|
|||||||
|
|
||||||
// http://blog.alexmaccaw.com/css-transitions
|
// http://blog.alexmaccaw.com/css-transitions
|
||||||
$.fn.emulateTransitionEnd = function (duration) {
|
$.fn.emulateTransitionEnd = function (duration) {
|
||||||
var called = false, $el = this
|
var called = false
|
||||||
|
var $el = this
|
||||||
$(this).one($.support.transition.end, function () { called = true })
|
$(this).one($.support.transition.end, function () { called = true })
|
||||||
var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
|
var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
|
||||||
setTimeout(callback, duration)
|
setTimeout(callback, duration)
|
||||||
|
@ -247,19 +247,35 @@ input[type="month"] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Apply same disabled cursor tweak as for inputs
|
// Apply same disabled cursor tweak as for inputs
|
||||||
|
// Some special care is needed because <label>s don't inherit their parent's `cursor`.
|
||||||
//
|
//
|
||||||
// Note: Neither radios nor checkboxes can be readonly.
|
// Note: Neither radios nor checkboxes can be readonly.
|
||||||
input[type="radio"],
|
input[type="radio"],
|
||||||
input[type="checkbox"],
|
input[type="checkbox"] {
|
||||||
.radio,
|
|
||||||
.radio-inline,
|
|
||||||
.checkbox,
|
|
||||||
.checkbox-inline {
|
|
||||||
&[disabled],
|
&[disabled],
|
||||||
|
&.disabled,
|
||||||
fieldset[disabled] & {
|
fieldset[disabled] & {
|
||||||
cursor: not-allowed;
|
cursor: not-allowed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// These classes are used directly on <label>s
|
||||||
|
.radio-inline,
|
||||||
|
.checkbox-inline {
|
||||||
|
&.disabled,
|
||||||
|
fieldset[disabled] & {
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// These classes are used on elements with <label> descendants
|
||||||
|
.radio,
|
||||||
|
.checkbox {
|
||||||
|
&.disabled,
|
||||||
|
fieldset[disabled] & {
|
||||||
|
label {
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Form control sizing
|
// Form control sizing
|
||||||
|
@ -31,10 +31,10 @@
|
|||||||
|
|
||||||
// When fading in the modal, animate it to slide down
|
// When fading in the modal, animate it to slide down
|
||||||
&.fade .modal-dialog {
|
&.fade .modal-dialog {
|
||||||
.translate(0, -25%);
|
.translate3d(0, -25%, 0);
|
||||||
.transition-transform(~"0.3s ease-out");
|
.transition-transform(~"0.3s ease-out");
|
||||||
}
|
}
|
||||||
&.in .modal-dialog { .translate(0, 0)}
|
&.in .modal-dialog { .translate3d(0, 0, 0) }
|
||||||
}
|
}
|
||||||
|
|
||||||
// Shell div to position the modal with bottom padding
|
// Shell div to position the modal with bottom padding
|
||||||
|
@ -141,6 +141,7 @@
|
|||||||
right: 0;
|
right: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
z-index: @zindex-navbar-fixed;
|
z-index: @zindex-navbar-fixed;
|
||||||
|
.translate3d(0, 0, 0);
|
||||||
|
|
||||||
// Undo the rounded corners
|
// Undo the rounded corners
|
||||||
@media (min-width: @grid-float-breakpoint) {
|
@media (min-width: @grid-float-breakpoint) {
|
||||||
|
@ -53,4 +53,5 @@
|
|||||||
|
|
||||||
.affix {
|
.affix {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
|
.translate3d(0, 0, 0);
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"btoa": "~1.1.1",
|
"btoa": "~1.1.1",
|
||||||
"canonical-json": "~0.0.4",
|
"canonical-json": "~0.0.4",
|
||||||
"glob": "^3.2.9",
|
"glob": "^4.0.0",
|
||||||
"grunt": "~0.4.4",
|
"grunt": "~0.4.4",
|
||||||
"grunt-autoprefixer": "~0.7.2",
|
"grunt-autoprefixer": "~0.7.2",
|
||||||
"grunt-banner": "~0.2.2",
|
"grunt-banner": "~0.2.2",
|
||||||
@ -42,10 +42,10 @@
|
|||||||
"grunt-contrib-copy": "~0.5.0",
|
"grunt-contrib-copy": "~0.5.0",
|
||||||
"grunt-contrib-csslint": "~0.2.0",
|
"grunt-contrib-csslint": "~0.2.0",
|
||||||
"grunt-contrib-cssmin": "~0.9.0",
|
"grunt-contrib-cssmin": "~0.9.0",
|
||||||
"grunt-contrib-jade": "~0.11.0",
|
"grunt-contrib-jade": "~0.12.0",
|
||||||
"grunt-contrib-jshint": "~0.10.0",
|
"grunt-contrib-jshint": "~0.10.0",
|
||||||
"grunt-contrib-less": "~0.11.0",
|
"grunt-contrib-less": "~0.11.0",
|
||||||
"grunt-contrib-qunit": "~0.4.0",
|
"grunt-contrib-qunit": "~0.5.1",
|
||||||
"grunt-contrib-uglify": "~0.4.0",
|
"grunt-contrib-uglify": "~0.4.0",
|
||||||
"grunt-contrib-watch": "~0.6.1",
|
"grunt-contrib-watch": "~0.6.1",
|
||||||
"grunt-csscomb": "~2.0.1",
|
"grunt-csscomb": "~2.0.1",
|
||||||
@ -53,7 +53,7 @@
|
|||||||
"grunt-html-validation": "~0.1.15",
|
"grunt-html-validation": "~0.1.15",
|
||||||
"grunt-jekyll": "~0.4.1",
|
"grunt-jekyll": "~0.4.1",
|
||||||
"grunt-jscs-checker": "~0.4.3",
|
"grunt-jscs-checker": "~0.4.3",
|
||||||
"grunt-saucelabs": "~5.1.3",
|
"grunt-saucelabs": "~8.0.2",
|
||||||
"grunt-sed": "~0.1.1",
|
"grunt-sed": "~0.1.1",
|
||||||
"load-grunt-tasks": "~0.4.0",
|
"load-grunt-tasks": "~0.4.0",
|
||||||
"markdown": "~0.5.0",
|
"markdown": "~0.5.0",
|
||||||
|
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user