Commit 4045740c authored by Mark Otto's avatar Mark Otto

Merge branch 'master' of github.com:twbs/bootstrap

Conflicts:
	dist/css/bootstrap.css.map
	dist/css/bootstrap.min.css
	docs/dist/css/bootstrap.css.map
	docs/dist/css/bootstrap.min.css
parents e40df7cf 4abb0957
...@@ -33,7 +33,7 @@ module.exports = function (grunt) { ...@@ -33,7 +33,7 @@ module.exports = function (grunt) {
' * Licensed under <%= pkg.license.type %> (<%= pkg.license.url %>)\n' + ' * Licensed under <%= pkg.license.type %> (<%= pkg.license.url %>)\n' +
' */\n', ' */\n',
// NOTE: This jqueryCheck code is duplicated in customizer.js; if making changes here, be sure to update the other copy too. // NOTE: This jqueryCheck code is duplicated in customizer.js; if making changes here, be sure to update the other copy too.
jqueryCheck: 'if (typeof define == \'undefined\' && typeof exports == \'undefined\' && typeof jQuery == \'undefined\') { throw new Error(\'Bootstrap\\\'s JavaScript requires jQuery\') }\n\n', jqueryCheck: 'if (typeof jQuery === \'undefined\') { throw new Error(\'Bootstrap\\\'s JavaScript requires jQuery\') }\n\n',
// Task configuration. // Task configuration.
clean: { clean: {
...@@ -232,7 +232,8 @@ module.exports = function (grunt) { ...@@ -232,7 +232,8 @@ module.exports = function (grunt) {
cssmin: { cssmin: {
options: { options: {
compatibility: 'ie8', compatibility: 'ie8',
keepSpecialComments: '*' keepSpecialComments: '*',
noAdvanced: true
}, },
core: { core: {
files: { files: {
...@@ -378,6 +379,7 @@ module.exports = function (grunt) { ...@@ -378,6 +379,7 @@ module.exports = function (grunt) {
options: { options: {
build: process.env.TRAVIS_JOB_ID, build: process.env.TRAVIS_JOB_ID,
concurrency: 10, concurrency: 10,
maxRetries: 3,
urls: ['http://127.0.0.1:3000/js/tests/index.html'], urls: ['http://127.0.0.1:3000/js/tests/index.html'],
browsers: grunt.file.readYAML('grunt/sauce_browsers.yml') browsers: grunt.file.readYAML('grunt/sauce_browsers.yml')
} }
......
This diff is collapsed.
This diff was suppressed by a .gitattributes entry.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
...@@ -347,10 +347,10 @@ ...@@ -347,10 +347,10 @@
<h3 id="grid-nesting">Nesting columns</h3> <h3 id="grid-nesting">Nesting columns</h3>
<p>To nest your content with the default grid, add a new <code>.row</code> and set of <code>.col-md-*</code> columns within an existing <code>.col-md-*</code> column. Nested rows should include a set of columns that add up to 12 or less (it is not required that you use all 12 available columns).</p> <p>To nest your content with the default grid, add a new <code>.row</code> and set of <code>.col-sm-*</code> columns within an existing <code>.col-sm-*</code> column. Nested rows should include a set of columns that add up to 12 or less (it is not required that you use all 12 available columns).</p>
<div class="row show-grid"> <div class="row show-grid">
<div class="col-sm-9"> <div class="col-sm-9">
Level 1: .col-md-9 Level 1: .col-sm-9
<div class="row show-grid"> <div class="row show-grid">
<div class="col-xs-8 col-sm-6"> <div class="col-xs-8 col-sm-6">
Level 2: .col-xs-8 .col-sm-6 Level 2: .col-xs-8 .col-sm-6
......
<div class="bs-docs-section"> <div class="bs-docs-section">
<h1 id="examples" class="page-header">Examples</h1> <h1 id="examples" class="page-header">Examples</h1>
<p class="lead">Build on the basic template above with Bootstrap's many components. See also <a href="#customizing">Customizing Bootstrap</a> for tips on maintaining your own Bootstrap variants.</p> <p class="lead">Build on the basic template above with Bootstrap's many components. We encourage you to customize and adapt Bootstrap to suit your individual project's needs.</p>
<h3 id="examples-framework">Using the framework</h3> <h3 id="examples-framework">Using the framework</h3>
<div class="row bs-examples"> <div class="row bs-examples">
......
This diff is collapsed.
...@@ -306,7 +306,7 @@ window.onload = function () { // wait for load in a dumb way because B-0 ...@@ -306,7 +306,7 @@ window.onload = function () { // wait for load in a dumb way because B-0
function generateJS(preamble) { function generateJS(preamble) {
var $checked = $('#plugin-section input:checked') var $checked = $('#plugin-section input:checked')
var jqueryCheck = 'if (typeof define == \'undefined\' && typeof exports == \'undefined\' && typeof jQuery == \'undefined\') { throw new Error(\'Bootstrap\\\'s JavaScript requires jQuery\') }\n\n' var jqueryCheck = 'if (typeof jQuery === "undefined") { throw new Error("Bootstrap\'s JavaScript requires jQuery") }\n\n'
if (!$checked.length) return false if (!$checked.length) return false
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff was suppressed by a .gitattributes entry.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
...@@ -5,11 +5,10 @@ ...@@ -5,11 +5,10 @@
browserName: "safari", browserName: "safari",
platform: "OS X 10.9" platform: "OS X 10.9"
}, },
# { {
# browserName: "chrome", browserName: "chrome",
# platform: "OS X 10.9", platform: "OS X 10.9"
# version: "31" },
# },
{ {
browserName: "firefox", browserName: "firefox",
platform: "OS X 10.9" platform: "OS X 10.9"
...@@ -27,16 +26,16 @@ ...@@ -27,16 +26,16 @@
version: "10", version: "10",
platform: "Windows 8" platform: "Windows 8"
}, },
# { {
# browserName: "internet explorer", browserName: "internet explorer",
# version: "9", version: "9",
# platform: "Windows 7" platform: "Windows 7"
# }, },
# { {
# browserName: "internet explorer", browserName: "internet explorer",
# version: "8", version: "8",
# platform: "Windows 7" platform: "Windows 7"
# }, },
# { # Unofficial # { # Unofficial
# browserName: "internet explorer", # browserName: "internet explorer",
......
...@@ -11,9 +11,10 @@ ...@@ -11,9 +11,10 @@
"disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
"disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true }, "disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true },
"disallowSpacesInsideArrayBrackets": true, "disallowSpacesInsideArrayBrackets": true,
"disallowTrailingComma": true,
"disallowSpacesInsideParentheses": true, "disallowSpacesInsideParentheses": true,
"disallowTrailingComma": true,
"disallowTrailingWhitespace": true, "disallowTrailingWhitespace": true,
"requireCamelCaseOrUpperCaseIdentifiers": true,
"requireCapitalizedConstructors": true, "requireCapitalizedConstructors": true,
"requireCommaBeforeLineBreak": true, "requireCommaBeforeLineBreak": true,
"requireDotNotation": true, "requireDotNotation": true,
......
...@@ -11,6 +11,5 @@ ...@@ -11,6 +11,5 @@
"nonbsp" : true, "nonbsp" : true,
"strict" : true, "strict" : true,
"undef" : true, "undef" : true,
"unused" : true, "unused" : true
"predef" : [ "define", "require" ]
} }
...@@ -7,142 +7,136 @@ ...@@ -7,142 +7,136 @@
* ======================================================================== */ * ======================================================================== */
+function () { 'use strict'; +function ($) {
'use strict';
(function (o_o) { // AFFIX CLASS DEFINITION
typeof define == 'function' && define.amd ? define(['jquery'], o_o) : // ======================
typeof exports == 'object' ? o_o(require('jquery')) : o_o(jQuery)
})(function ($) {
// AFFIX CLASS DEFINITION var Affix = function (element, options) {
// ====================== this.options = $.extend({}, Affix.DEFAULTS, options)
var Affix = function (element, options) { this.$target = $(this.options.target)
this.options = $.extend({}, Affix.DEFAULTS, options) .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
.on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
this.$target = $(this.options.target) this.$element = $(element)
.on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) this.affixed =
.on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) this.unpin =
this.pinnedOffset = null
this.$element = $(element) this.checkPosition()
this.affixed = }
this.unpin =
this.pinnedOffset = null
this.checkPosition() Affix.VERSION = '3.1.1'
}
Affix.VERSION = '3.1.1'
Affix.RESET = 'affix affix-top affix-bottom' Affix.RESET = 'affix affix-top affix-bottom'
Affix.DEFAULTS = { Affix.DEFAULTS = {
offset: 0, offset: 0,
target: window target: window
} }
Affix.prototype.getPinnedOffset = function () { Affix.prototype.getPinnedOffset = function () {
if (this.pinnedOffset) return this.pinnedOffset if (this.pinnedOffset) return this.pinnedOffset
this.$element.removeClass(Affix.RESET).addClass('affix') this.$element.removeClass(Affix.RESET).addClass('affix')
var scrollTop = this.$target.scrollTop() var scrollTop = this.$target.scrollTop()
var position = this.$element.offset() var position = this.$element.offset()
return (this.pinnedOffset = position.top - scrollTop) return (this.pinnedOffset = position.top - scrollTop)
} }
Affix.prototype.checkPositionWithEventLoop = function () { Affix.prototype.checkPositionWithEventLoop = function () {
setTimeout($.proxy(this.checkPosition, this), 1) setTimeout($.proxy(this.checkPosition, this), 1)
} }
Affix.prototype.checkPosition = function () { Affix.prototype.checkPosition = function () {
if (!this.$element.is(':visible')) return if (!this.$element.is(':visible')) return
var scrollHeight = $(document).height() var scrollHeight = $(document).height()
var scrollTop = this.$target.scrollTop() var scrollTop = this.$target.scrollTop()
var position = this.$element.offset() var position = this.$element.offset()
var offset = this.options.offset var offset = this.options.offset
var offsetTop = offset.top var offsetTop = offset.top
var offsetBottom = offset.bottom var offsetBottom = offset.bottom
if (typeof offset != 'object') offsetBottom = offsetTop = offset if (typeof offset != 'object') offsetBottom = offsetTop = offset
if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false : var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false :
offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :
offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
if (this.affixed === affix) return if (this.affixed === affix) return
if (this.unpin != null) this.$element.css('top', '') if (this.unpin != null) this.$element.css('top', '')
var affixType = 'affix' + (affix ? '-' + affix : '') var affixType = 'affix' + (affix ? '-' + affix : '')
var e = $.Event(affixType + '.bs.affix') var e = $.Event(affixType + '.bs.affix')
this.$element.trigger(e) this.$element.trigger(e)
if (e.isDefaultPrevented()) return if (e.isDefaultPrevented()) return
this.affixed = affix this.affixed = affix
this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
this.$element this.$element
.removeClass(Affix.RESET) .removeClass(Affix.RESET)
.addClass(affixType) .addClass(affixType)
.trigger($.Event(affixType.replace('affix', 'affixed'))) .trigger($.Event(affixType.replace('affix', 'affixed')))
if (affix == 'bottom') { if (affix == 'bottom') {
this.$element.offset({ this.$element.offset({
top: scrollHeight - this.$element.height() - offsetBottom top: scrollHeight - this.$element.height() - offsetBottom
}) })
}
} }
}
// AFFIX PLUGIN DEFINITION // AFFIX 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.affix') var data = $this.data('bs.affix')
var options = typeof option == 'object' && option var options = typeof option == 'object' && option
if (!data) $this.data('bs.affix', (data = new Affix(this, options))) if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
if (typeof option == 'string') data[option]() if (typeof option == 'string') data[option]()
}) })
} }
var old = $.fn.affix var old = $.fn.affix
$.fn.affix = Plugin $.fn.affix = Plugin
$.fn.affix.Constructor = Affix $.fn.affix.Constructor = Affix
// AFFIX NO CONFLICT // AFFIX NO CONFLICT
// ================= // =================
$.fn.affix.noConflict = function () { $.fn.affix.noConflict = function () {
$.fn.affix = old $.fn.affix = old
return this return this
} }
// AFFIX DATA-API // AFFIX DATA-API
// ============== // ==============
$(window).on('load', function () { $(window).on('load', function () {
$('[data-spy="affix"]').each(function () { $('[data-spy="affix"]').each(function () {
var $spy = $(this) var $spy = $(this)
var data = $spy.data() var data = $spy.data()
data.offset = data.offset || {} data.offset = data.offset || {}
if (data.offsetBottom) data.offset.bottom = data.offsetBottom if (data.offsetBottom) data.offset.bottom = data.offsetBottom
if (data.offsetTop) data.offset.top = data.offsetTop if (data.offsetTop) data.offset.top = data.offsetTop
Plugin.call($spy, data) Plugin.call($spy, data)
})
}) })
}) })
}(); }(jQuery);
...@@ -7,92 +7,86 @@ ...@@ -7,92 +7,86 @@
* ======================================================================== */ * ======================================================================== */
+function () { 'use strict'; +function ($) {
'use strict';
(function (o_o) { // ALERT CLASS DEFINITION
typeof define == 'function' && define.amd ? define(['jquery'], o_o) : // ======================
typeof exports == 'object' ? o_o(require('jquery')) : o_o(jQuery)
})(function ($) {
// ALERT CLASS DEFINITION var dismiss = '[data-dismiss="alert"]'
// ====================== var Alert = function (el) {
$(el).on('click', dismiss, this.close)
}
var dismiss = '[data-dismiss="alert"]' Alert.VERSION = '3.1.1'
var Alert = function (el) {
$(el).on('click', dismiss, this.close)
}
Alert.VERSION = '3.1.1'
Alert.prototype.close = function (e) { Alert.prototype.close = function (e) {
var $this = $(this) var $this = $(this)
var selector = $this.attr('data-target') var selector = $this.attr('data-target')
if (!selector) { if (!selector) {
selector = $this.attr('href') selector = $this.attr('href')
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
} }
var $parent = $(selector)
if (e) e.preventDefault() var $parent = $(selector)
if (!$parent.length) { if (e) e.preventDefault()
$parent = $this.hasClass('alert') ? $this : $this.parent()
}
$parent.trigger(e = $.Event('close.bs.alert')) if (!$parent.length) {
$parent = $this.hasClass('alert') ? $this : $this.parent()
}
if (e.isDefaultPrevented()) return $parent.trigger(e = $.Event('close.bs.alert'))
$parent.removeClass('in') if (e.isDefaultPrevented()) return
function removeElement() { $parent.removeClass('in')
// detach from parent, fire event then clean up data
$parent.detach().trigger('closed.bs.alert').remove()
}
$.support.transition && $parent.hasClass('fade') ? function removeElement() {
$parent // detach from parent, fire event then clean up data
.one('bsTransitionEnd', removeElement) $parent.detach().trigger('closed.bs.alert').remove()
.emulateTransitionEnd(150) :
removeElement()
} }
$.support.transition && $parent.hasClass('fade') ?
$parent
.one('bsTransitionEnd', removeElement)
.emulateTransitionEnd(150) :
removeElement()
}
// ALERT PLUGIN DEFINITION
// =======================
function Plugin(option) { // ALERT PLUGIN DEFINITION
return this.each(function () { // =======================
var $this = $(this)
var data = $this.data('bs.alert')
if (!data) $this.data('bs.alert', (data = new Alert(this))) function Plugin(option) {
if (typeof option == 'string') data[option].call($this) return this.each(function () {
}) var $this = $(this)
} var data = $this.data('bs.alert')
var old = $.fn.alert if (!data) $this.data('bs.alert', (data = new Alert(this)))
if (typeof option == 'string') data[option].call($this)
})
}
$.fn.alert = Plugin var old = $.fn.alert
$.fn.alert.Constructor = Alert
$.fn.alert = Plugin
$.fn.alert.Constructor = Alert
// ALERT NO CONFLICT
// =================
$.fn.alert.noConflict = function () { // ALERT NO CONFLICT
$.fn.alert = old // =================
return this
}
$.fn.alert.noConflict = function () {
$.fn.alert = old
return this
}
// ALERT DATA-API
// ==============
$(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) // ALERT DATA-API
// ==============
}) $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
}(); }(jQuery);
...@@ -7,110 +7,104 @@ ...@@ -7,110 +7,104 @@
* ======================================================================== */ * ======================================================================== */
+function () { 'use strict'; +function ($) {
'use strict';
(function (o_o) { // BUTTON PUBLIC CLASS DEFINITION
typeof define == 'function' && define.amd ? define(['jquery'], o_o) : // ==============================
typeof exports == 'object' ? o_o(require('jquery')) : o_o(jQuery)
})(function ($) {
// BUTTON PUBLIC CLASS DEFINITION var Button = function (element, options) {
// ============================== this.$element = $(element)
this.options = $.extend({}, Button.DEFAULTS, options)
this.isLoading = false
}
var Button = function (element, options) { Button.VERSION = '3.1.1'
this.$element = $(element)
this.options = $.extend({}, Button.DEFAULTS, options)
this.isLoading = false
}
Button.VERSION = '3.1.1'
Button.DEFAULTS = {
loadingText: 'loading...'
}
Button.prototype.setState = function (state) { Button.DEFAULTS = {
var d = 'disabled' loadingText: 'loading...'
var $el = this.$element }
var val = $el.is('input') ? 'val' : 'html'
var data = $el.data()
state = state + 'Text' Button.prototype.setState = function (state) {
var d = 'disabled'
var $el = this.$element
var val = $el.is('input') ? 'val' : 'html'
var data = $el.data()
if (data.resetText == null) $el.data('resetText', $el[val]()) state = state + 'Text'
$el[val](data[state] == null ? this.options[state] : data[state]) if (data.resetText == null) $el.data('resetText', $el[val]())
// push to event loop to allow forms to submit $el[val](data[state] == null ? this.options[state] : data[state])
setTimeout($.proxy(function () {
if (state == 'loadingText') {
this.isLoading = true
$el.addClass(d).attr(d, d)
} else if (this.isLoading) {
this.isLoading = false
$el.removeClass(d).removeAttr(d)
}
}, this), 0)
}
Button.prototype.toggle = function () { // push to event loop to allow forms to submit
var changed = true setTimeout($.proxy(function () {
var $parent = this.$element.closest('[data-toggle="buttons"]') if (state == 'loadingText') {
this.isLoading = true
if ($parent.length) { $el.addClass(d).attr(d, d)
var $input = this.$element.find('input') } else if (this.isLoading) {
if ($input.prop('type') == 'radio') { this.isLoading = false
if ($input.prop('checked') && this.$element.hasClass('active')) changed = false $el.removeClass(d).removeAttr(d)
else $parent.find('.active').removeClass('active')
}
if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
} }
}, this), 0)
if (changed) this.$element.toggleClass('active') }
Button.prototype.toggle = function () {
var changed = true
var $parent = this.$element.closest('[data-toggle="buttons"]')
if ($parent.length) {
var $input = this.$element.find('input')
if ($input.prop('type') == 'radio') {
if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
else $parent.find('.active').removeClass('active')
}
if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
} }
if (changed) this.$element.toggleClass('active')
}
// BUTTON PLUGIN DEFINITION
// ========================
function Plugin(option) { // BUTTON PLUGIN DEFINITION
return this.each(function () { // ========================
var $this = $(this)
var data = $this.data('bs.button')
var options = typeof option == 'object' && option
if (!data) $this.data('bs.button', (data = new Button(this, options))) function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.button')
var options = typeof option == 'object' && option
if (option == 'toggle') data.toggle() if (!data) $this.data('bs.button', (data = new Button(this, options)))
else if (option) data.setState(option)
})
}
var old = $.fn.button if (option == 'toggle') data.toggle()
else if (option) data.setState(option)
})
}
$.fn.button = Plugin var old = $.fn.button
$.fn.button.Constructor = Button
$.fn.button = Plugin
$.fn.button.Constructor = Button
// BUTTON NO CONFLICT
// ==================
$.fn.button.noConflict = function () { // BUTTON NO CONFLICT
$.fn.button = old // ==================
return this
}
$.fn.button.noConflict = function () {
$.fn.button = old
return this
}
// BUTTON DATA-API
// ===============
$(document).on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { // BUTTON DATA-API
var $btn = $(e.target) // ===============
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
Plugin.call($btn, 'toggle')
e.preventDefault()
})
$(document).on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
var $btn = $(e.target)
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
Plugin.call($btn, 'toggle')
e.preventDefault()
}) })
}(); }(jQuery);
This diff is collapsed.
...@@ -7,170 +7,164 @@ ...@@ -7,170 +7,164 @@
* ======================================================================== */ * ======================================================================== */
+function () { 'use strict'; +function ($) {
'use strict';
(function (o_o) { // COLLAPSE PUBLIC CLASS DEFINITION
typeof define == 'function' && define.amd ? define(['jquery'], o_o) : // ================================
typeof exports == 'object' ? o_o(require('jquery')) : o_o(jQuery)
})(function ($) {
// COLLAPSE PUBLIC CLASS DEFINITION var Collapse = function (element, options) {
// ================================ this.$element = $(element)
this.options = $.extend({}, Collapse.DEFAULTS, options)
this.transitioning = null
var Collapse = function (element, options) { if (this.options.parent) this.$parent = $(this.options.parent)
this.$element = $(element) if (this.options.toggle) this.toggle()
this.options = $.extend({}, Collapse.DEFAULTS, options) }
this.transitioning = null
if (this.options.parent) this.$parent = $(this.options.parent) Collapse.VERSION = '3.1.1'
if (this.options.toggle) this.toggle()
}
Collapse.VERSION = '3.1.1' Collapse.DEFAULTS = {
toggle: true
}
Collapse.DEFAULTS = { Collapse.prototype.dimension = function () {
toggle: true var hasWidth = this.$element.hasClass('width')
} return hasWidth ? 'width' : 'height'
}
Collapse.prototype.dimension = function () { Collapse.prototype.show = function () {
var hasWidth = this.$element.hasClass('width') if (this.transitioning || this.$element.hasClass('in')) return
return hasWidth ? 'width' : 'height'
}
Collapse.prototype.show = function () { var startEvent = $.Event('show.bs.collapse')
if (this.transitioning || this.$element.hasClass('in')) return this.$element.trigger(startEvent)
if (startEvent.isDefaultPrevented()) return
var startEvent = $.Event('show.bs.collapse') var actives = this.$parent && this.$parent.find('> .panel > .in')
this.$element.trigger(startEvent)
if (startEvent.isDefaultPrevented()) return
var actives = this.$parent && this.$parent.find('> .panel > .in') if (actives && actives.length) {
var hasData = actives.data('bs.collapse')
if (hasData && hasData.transitioning) return
Plugin.call(actives, 'hide')
hasData || actives.data('bs.collapse', null)
}
var dimension = this.dimension()
if (actives && actives.length) { this.$element
var hasData = actives.data('bs.collapse') .removeClass('collapse')
if (hasData && hasData.transitioning) return .addClass('collapsing')[dimension](0)
Plugin.call(actives, 'hide')
hasData || actives.data('bs.collapse', null)
}
var dimension = this.dimension() this.transitioning = 1
var complete = function () {
this.$element
.removeClass('collapsing')
.addClass('collapse in')[dimension]('')
this.transitioning = 0
this.$element this.$element
.removeClass('collapse') .trigger('shown.bs.collapse')
.addClass('collapsing')[dimension](0) }
this.transitioning = 1 if (!$.support.transition) return complete.call(this)
var complete = function () { var scrollSize = $.camelCase(['scroll', dimension].join('-'))
this.$element
.removeClass('collapsing')
.addClass('collapse in')[dimension]('')
this.transitioning = 0
this.$element
.trigger('shown.bs.collapse')
}
if (!$.support.transition) return complete.call(this) this.$element
.one('bsTransitionEnd', $.proxy(complete, this))
.emulateTransitionEnd(350)[dimension](this.$element[0][scrollSize])
}
var scrollSize = $.camelCase(['scroll', dimension].join('-')) Collapse.prototype.hide = function () {
if (this.transitioning || !this.$element.hasClass('in')) return
this.$element var startEvent = $.Event('hide.bs.collapse')
.one('bsTransitionEnd', $.proxy(complete, this)) this.$element.trigger(startEvent)
.emulateTransitionEnd(350)[dimension](this.$element[0][scrollSize]) if (startEvent.isDefaultPrevented()) return
}
Collapse.prototype.hide = function () { var dimension = this.dimension()
if (this.transitioning || !this.$element.hasClass('in')) return
var startEvent = $.Event('hide.bs.collapse') this.$element[dimension](this.$element[dimension]())[0].offsetHeight
this.$element.trigger(startEvent)
if (startEvent.isDefaultPrevented()) return
var dimension = this.dimension() this.$element
.addClass('collapsing')
.removeClass('collapse')
.removeClass('in')
this.$element[dimension](this.$element[dimension]())[0].offsetHeight this.transitioning = 1
var complete = function () {
this.transitioning = 0
this.$element this.$element
.addClass('collapsing') .trigger('hidden.bs.collapse')
.removeClass('collapse') .removeClass('collapsing')
.removeClass('in') .addClass('collapse')
}
this.transitioning = 1 if (!$.support.transition) return complete.call(this)
var complete = function () { this.$element
this.transitioning = 0 [dimension](0)
this.$element .one('bsTransitionEnd', $.proxy(complete, this))
.trigger('hidden.bs.collapse') .emulateTransitionEnd(350)
.removeClass('collapsing') }
.addClass('collapse')
}
if (!$.support.transition) return complete.call(this) Collapse.prototype.toggle = function () {
this[this.$element.hasClass('in') ? 'hide' : 'show']()
}
this.$element
[dimension](0)
.one('bsTransitionEnd', $.proxy(complete, this))
.emulateTransitionEnd(350)
}
Collapse.prototype.toggle = function () {
this[this.$element.hasClass('in') ? 'hide' : 'show']()
}
// COLLAPSE PLUGIN DEFINITION
// ==========================
// COLLAPSE PLUGIN DEFINITION function Plugin(option) {
// ========================== return this.each(function () {
var $this = $(this)
var data = $this.data('bs.collapse')
var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
function Plugin(option) { if (!data && options.toggle && option == 'show') option = !option
return this.each(function () { if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
var $this = $(this) if (typeof option == 'string') data[option]()
var data = $this.data('bs.collapse') })
var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) }
if (!data && options.toggle && option == 'show') option = !option var old = $.fn.collapse
if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
if (typeof option == 'string') data[option]()
})
}
var old = $.fn.collapse $.fn.collapse = Plugin
$.fn.collapse.Constructor = Collapse
$.fn.collapse = Plugin
$.fn.collapse.Constructor = Collapse
// COLLAPSE NO CONFLICT
// ====================
// COLLAPSE NO CONFLICT $.fn.collapse.noConflict = function () {
// ==================== $.fn.collapse = old
return this
}
$.fn.collapse.noConflict = function () {
$.fn.collapse = old
return this
}
// COLLAPSE DATA-API
// =================
// COLLAPSE DATA-API $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
// ================= var href
var $this = $(this)
var target = $this.attr('data-target')
|| e.preventDefault()
|| (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
var $target = $(target)
var data = $target.data('bs.collapse')
var option = data ? 'toggle' : $this.data()
var parent = $this.attr('data-parent')
var $parent = parent && $(parent)
$(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { if (!data || !data.transitioning) {
var href if ($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed')
var $this = $(this) $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
var target = $this.attr('data-target') }
|| e.preventDefault()
|| (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
var $target = $(target)
var data = $target.data('bs.collapse')
var option = data ? 'toggle' : $this.data()
var parent = $this.attr('data-parent')
var $parent = parent && $(parent)
if (!data || !data.transitioning) {
if ($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed')
$this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
}
Plugin.call($target, option)
})
Plugin.call($target, option)
}) })
}(); }(jQuery);
...@@ -7,151 +7,145 @@ ...@@ -7,151 +7,145 @@
* ======================================================================== */ * ======================================================================== */
+function () { 'use strict'; +function ($) {
'use strict';
(function (o_o) { // DROPDOWN CLASS DEFINITION
typeof define == 'function' && define.amd ? define(['jquery'], o_o) : // =========================
typeof exports == 'object' ? o_o(require('jquery')) : o_o(jQuery)
})(function ($) {
// DROPDOWN CLASS DEFINITION var backdrop = '.dropdown-backdrop'
// ========================= var toggle = '[data-toggle="dropdown"]'
var Dropdown = function (element) {
$(element).on('click.bs.dropdown', this.toggle)
}
var backdrop = '.dropdown-backdrop' Dropdown.VERSION = '3.1.1'
var toggle = '[data-toggle="dropdown"]'
var Dropdown = function (element) {
$(element).on('click.bs.dropdown', this.toggle)
}
Dropdown.VERSION = '3.1.1'
Dropdown.prototype.toggle = function (e) { Dropdown.prototype.toggle = function (e) {
var $this = $(this) var $this = $(this)
if ($this.is('.disabled, :disabled')) return if ($this.is('.disabled, :disabled')) return
var $parent = getParent($this) var $parent = getParent($this)
var isActive = $parent.hasClass('open') var isActive = $parent.hasClass('open')
clearMenus() clearMenus()
if (!isActive) { if (!isActive) {
if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
// if mobile we use a backdrop because click events don't delegate // if mobile we use a backdrop because click events don't delegate
$('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus) $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
} }
var relatedTarget = { relatedTarget: this } var relatedTarget = { relatedTarget: this }
$parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget)) $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
if (e.isDefaultPrevented()) return if (e.isDefaultPrevented()) return
$this.trigger('focus') $this.trigger('focus')
$parent $parent
.toggleClass('open') .toggleClass('open')
.trigger('shown.bs.dropdown', relatedTarget) .trigger('shown.bs.dropdown', relatedTarget)
}
return false
} }
Dropdown.prototype.keydown = function (e) { return false
if (!/(38|40|27)/.test(e.keyCode)) return }
var $this = $(this)
e.preventDefault() Dropdown.prototype.keydown = function (e) {
e.stopPropagation() if (!/(38|40|27)/.test(e.keyCode)) return
if ($this.is('.disabled, :disabled')) return var $this = $(this)
var $parent = getParent($this) e.preventDefault()
var isActive = $parent.hasClass('open') e.stopPropagation()
if (!isActive || (isActive && e.keyCode == 27)) { if ($this.is('.disabled, :disabled')) return
if (e.which == 27) $parent.find(toggle).trigger('focus')
return $this.trigger('click')
}
var desc = ' li:not(.divider):visible a' var $parent = getParent($this)
var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc) var isActive = $parent.hasClass('open')
if (!$items.length) return if (!isActive || (isActive && e.keyCode == 27)) {
if (e.which == 27) $parent.find(toggle).trigger('focus')
return $this.trigger('click')
}
var index = $items.index($items.filter(':focus')) var desc = ' li:not(.divider):visible a'
var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
if (e.keyCode == 38 && index > 0) index-- // up if (!$items.length) return
if (e.keyCode == 40 && index < $items.length - 1) index++ // down
if (!~index) index = 0
$items.eq(index).trigger('focus') var index = $items.index($items.filter(':focus'))
}
function clearMenus(e) { if (e.keyCode == 38 && index > 0) index-- // up
if (e && e.which === 3) return if (e.keyCode == 40 && index < $items.length - 1) index++ // down
$(backdrop).remove() if (!~index) index = 0
$(toggle).each(function () {
var $parent = getParent($(this))
var relatedTarget = { relatedTarget: this }
if (!$parent.hasClass('open')) return
$parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
if (e.isDefaultPrevented()) return
$parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
})
}
function getParent($this) { $items.eq(index).trigger('focus')
var selector = $this.attr('data-target') }
if (!selector) { function clearMenus(e) {
selector = $this.attr('href') if (e && e.which === 3) return
selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 $(backdrop).remove()
} $(toggle).each(function () {
var $parent = getParent($(this))
var relatedTarget = { relatedTarget: this }
if (!$parent.hasClass('open')) return
$parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
if (e.isDefaultPrevented()) return
$parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
})
}
var $parent = selector && $(selector) function getParent($this) {
var selector = $this.attr('data-target')
return $parent && $parent.length ? $parent : $this.parent() if (!selector) {
selector = $this.attr('href')
selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
} }
var $parent = selector && $(selector)
// DROPDOWN PLUGIN DEFINITION return $parent && $parent.length ? $parent : $this.parent()
// ========================== }
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.dropdown')
if (!data) $this.data('bs.dropdown', (data = new Dropdown(this))) // DROPDOWN PLUGIN DEFINITION
if (typeof option == 'string') data[option].call($this) // ==========================
})
} function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.dropdown')
var old = $.fn.dropdown if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
if (typeof option == 'string') data[option].call($this)
})
}
$.fn.dropdown = Plugin var old = $.fn.dropdown
$.fn.dropdown.Constructor = Dropdown
$.fn.dropdown = Plugin
$.fn.dropdown.Constructor = Dropdown
// DROPDOWN NO CONFLICT
// ====================
$.fn.dropdown.noConflict = function () { // DROPDOWN NO CONFLICT
$.fn.dropdown = old // ====================
return this
}
$.fn.dropdown.noConflict = function () {
$.fn.dropdown = old
return this
}
// APPLY TO STANDARD DROPDOWN ELEMENTS
// ===================================
$(document) // APPLY TO STANDARD DROPDOWN ELEMENTS
.on('click.bs.dropdown.data-api', clearMenus) // ===================================
.on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
.on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
.on('keydown.bs.dropdown.data-api', toggle + ', [role="menu"], [role="listbox"]', Dropdown.prototype.keydown)
}) $(document)
.on('click.bs.dropdown.data-api', clearMenus)
.on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
.on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
.on('keydown.bs.dropdown.data-api', toggle + ', [role="menu"], [role="listbox"]', Dropdown.prototype.keydown)
}(); }(jQuery);
This diff is collapsed.
...@@ -7,113 +7,107 @@ ...@@ -7,113 +7,107 @@
* ======================================================================== */ * ======================================================================== */
+function () { 'use strict'; +function ($) {
'use strict';
(function (o_o) { // POPOVER PUBLIC CLASS DEFINITION
typeof define == 'function' && define.amd ? define(['jquery'], o_o) : // ===============================
typeof exports == 'object' ? o_o(require('jquery')) : o_o(jQuery)
})(function ($) {
// POPOVER PUBLIC CLASS DEFINITION var Popover = function (element, options) {
// =============================== this.init('popover', element, options)
}
var Popover = function (element, options) { if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
this.init('popover', element, options)
}
if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') Popover.VERSION = '3.1.1'
Popover.VERSION = '3.1.1'
Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
placement: 'right',
trigger: 'click',
content: '',
template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
})
Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
placement: 'right',
trigger: 'click',
content: '',
template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
})
// NOTE: POPOVER EXTENDS tooltip.js
// ================================
Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) // NOTE: POPOVER EXTENDS tooltip.js
// ================================
Popover.prototype.constructor = Popover Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
Popover.prototype.getDefaults = function () { Popover.prototype.constructor = Popover
return Popover.DEFAULTS
}
Popover.prototype.setContent = function () { Popover.prototype.getDefaults = function () {
var $tip = this.tip() return Popover.DEFAULTS
var title = this.getTitle() }
var content = this.getContent()
$tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) Popover.prototype.setContent = function () {
$tip.find('.popover-content').empty()[ // we use append for html objects to maintain js events var $tip = this.tip()
this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' var title = this.getTitle()
](content) var content = this.getContent()
$tip.removeClass('fade top bottom left right in') $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
$tip.find('.popover-content').empty()[ // we use append for html objects to maintain js events
this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
](content)
// IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do $tip.removeClass('fade top bottom left right in')
// this manually by checking the contents.
if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
}
Popover.prototype.hasContent = function () { // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
return this.getTitle() || this.getContent() // this manually by checking the contents.
} if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
}
Popover.prototype.getContent = function () { Popover.prototype.hasContent = function () {
var $e = this.$element return this.getTitle() || this.getContent()
var o = this.options }
return $e.attr('data-content') Popover.prototype.getContent = function () {
|| (typeof o.content == 'function' ? var $e = this.$element
o.content.call($e[0]) : var o = this.options
o.content)
}
Popover.prototype.arrow = function () { return $e.attr('data-content')
return (this.$arrow = this.$arrow || this.tip().find('.arrow')) || (typeof o.content == 'function' ?
} o.content.call($e[0]) :
o.content)
}
Popover.prototype.tip = function () { Popover.prototype.arrow = function () {
if (!this.$tip) this.$tip = $(this.options.template) return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
return this.$tip }
}
Popover.prototype.tip = function () {
if (!this.$tip) this.$tip = $(this.options.template)
return this.$tip
}
// POPOVER PLUGIN DEFINITION
// =========================
function Plugin(option) { // POPOVER PLUGIN DEFINITION
return this.each(function () { // =========================
var $this = $(this)
var data = $this.data('bs.popover')
var options = typeof option == 'object' && option
if (!data && option == 'destroy') return function Plugin(option) {
if (!data) $this.data('bs.popover', (data = new Popover(this, options))) return this.each(function () {
if (typeof option == 'string') data[option]() var $this = $(this)
}) var data = $this.data('bs.popover')
} var options = typeof option == 'object' && option
var old = $.fn.popover if (!data && option == 'destroy') return
if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
if (typeof option == 'string') data[option]()
})
}
$.fn.popover = Plugin var old = $.fn.popover
$.fn.popover.Constructor = Popover
$.fn.popover = Plugin
$.fn.popover.Constructor = Popover
// POPOVER NO CONFLICT
// ===================
$.fn.popover.noConflict = function () { // POPOVER NO CONFLICT
$.fn.popover = old // ===================
return this
}
}) $.fn.popover.noConflict = function () {
$.fn.popover = old
return this
}
}(); }(jQuery);
...@@ -7,170 +7,164 @@ ...@@ -7,170 +7,164 @@
* ======================================================================== */ * ======================================================================== */
+function () { 'use strict'; +function ($) {
'use strict';
(function (o_o) {
typeof define == 'function' && define.amd ? define(['jquery'], o_o) : // SCROLLSPY CLASS DEFINITION
typeof exports == 'object' ? o_o(require('jquery')) : o_o(jQuery) // ==========================
})(function ($) {
function ScrollSpy(element, options) {
var process = $.proxy(this.process, this)
this.$body = $('body')
this.$scrollElement = $(element).is('body') ? $(window) : $(element)
this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
this.selector = (this.options.target || '') + ' .nav li > a'
this.offsets = []
this.targets = []
this.activeTarget = null
this.scrollHeight = 0
this.$scrollElement.on('scroll.bs.scrollspy', process)
this.refresh()
this.process()
}
ScrollSpy.VERSION = '3.1.1'
ScrollSpy.DEFAULTS = {
offset: 10
}
ScrollSpy.prototype.getScrollHeight = function () {
return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
}
ScrollSpy.prototype.refresh = function () {
var offsetMethod = 'offset'
var offsetBase = 0
if (!$.isWindow(this.$scrollElement[0])) {
offsetMethod = 'position'
offsetBase = this.$scrollElement.scrollTop()
}
// SCROLLSPY CLASS DEFINITION this.offsets = []
// ========================== this.targets = []
this.scrollHeight = this.getScrollHeight()
function ScrollSpy(element, options) { var self = this
var process = $.proxy(this.process, this)
this.$body = $('body') this.$body
this.$scrollElement = $(element).is('body') ? $(window) : $(element) .find(this.selector)
this.options = $.extend({}, ScrollSpy.DEFAULTS, options) .map(function () {
this.selector = (this.options.target || '') + ' .nav li > a' var $el = $(this)
this.offsets = [] var href = $el.data('target') || $el.attr('href')
this.targets = [] var $href = /^#./.test(href) && $(href)
this.activeTarget = null
this.scrollHeight = 0
this.$scrollElement.on('scroll.bs.scrollspy', process) return ($href
&& $href.length
&& $href.is(':visible')
&& [[$href[offsetMethod]().top + offsetBase, href]]) || null
})
.sort(function (a, b) { return a[0] - b[0] })
.each(function () {
self.offsets.push(this[0])
self.targets.push(this[1])
})
}
ScrollSpy.prototype.process = function () {
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
var scrollHeight = this.getScrollHeight()
var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
var offsets = this.offsets
var targets = this.targets
var activeTarget = this.activeTarget
var i
if (this.scrollHeight != scrollHeight) {
this.refresh() this.refresh()
this.process()
} }
ScrollSpy.VERSION = '3.1.1' if (scrollTop >= maxScroll) {
return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
ScrollSpy.DEFAULTS = {
offset: 10
} }
ScrollSpy.prototype.getScrollHeight = function () { if (activeTarget && scrollTop <= offsets[0]) {
return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) return activeTarget != (i = targets[0]) && this.activate(i)
} }
ScrollSpy.prototype.refresh = function () { for (i = offsets.length; i--;) {
var offsetMethod = 'offset' activeTarget != targets[i]
var offsetBase = 0 && scrollTop >= offsets[i]
&& (!offsets[i + 1] || scrollTop <= offsets[i + 1])
if (!$.isWindow(this.$scrollElement[0])) { && this.activate(targets[i])
offsetMethod = 'position'
offsetBase = this.$scrollElement.scrollTop()
}
this.offsets = []
this.targets = []
this.scrollHeight = this.getScrollHeight()
var self = this
this.$body
.find(this.selector)
.map(function () {
var $el = $(this)
var href = $el.data('target') || $el.attr('href')
var $href = /^#./.test(href) && $(href)
return ($href
&& $href.length
&& $href.is(':visible')
&& [[$href[offsetMethod]().top + offsetBase, href]]) || null
})
.sort(function (a, b) { return a[0] - b[0] })
.each(function () {
self.offsets.push(this[0])
self.targets.push(this[1])
})
} }
}
ScrollSpy.prototype.process = function () { ScrollSpy.prototype.activate = function (target) {
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset this.activeTarget = target
var scrollHeight = this.getScrollHeight()
var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
var offsets = this.offsets
var targets = this.targets
var activeTarget = this.activeTarget
var i
if (this.scrollHeight != scrollHeight) {
this.refresh()
}
if (scrollTop >= maxScroll) {
return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
}
if (activeTarget && scrollTop <= offsets[0]) {
return activeTarget != (i = targets[0]) && this.activate(i)
}
for (i = offsets.length; i--;) {
activeTarget != targets[i]
&& scrollTop >= offsets[i]
&& (!offsets[i + 1] || scrollTop <= offsets[i + 1])
&& this.activate(targets[i])
}
}
ScrollSpy.prototype.activate = function (target) { $(this.selector)
this.activeTarget = target .parentsUntil(this.options.target, '.active')
.removeClass('active')
$(this.selector) var selector = this.selector +
.parentsUntil(this.options.target, '.active') '[data-target="' + target + '"],' +
.removeClass('active') this.selector + '[href="' + target + '"]'
var selector = this.selector + var active = $(selector)
'[data-target="' + target + '"],' + .parents('li')
this.selector + '[href="' + target + '"]' .addClass('active')
var active = $(selector) if (active.parent('.dropdown-menu').length) {
.parents('li') active = active
.closest('li.dropdown')
.addClass('active') .addClass('active')
if (active.parent('.dropdown-menu').length) {
active = active
.closest('li.dropdown')
.addClass('active')
}
active.trigger('activate.bs.scrollspy')
} }
active.trigger('activate.bs.scrollspy')
}
// SCROLLSPY PLUGIN DEFINITION
// ===========================
function Plugin(option) { // SCROLLSPY PLUGIN DEFINITION
return this.each(function () { // ===========================
var $this = $(this)
var data = $this.data('bs.scrollspy')
var options = typeof option == 'object' && option
if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) function Plugin(option) {
if (typeof option == 'string') data[option]() return this.each(function () {
}) var $this = $(this)
} var data = $this.data('bs.scrollspy')
var options = typeof option == 'object' && option
var old = $.fn.scrollspy if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
if (typeof option == 'string') data[option]()
})
}
$.fn.scrollspy = Plugin var old = $.fn.scrollspy
$.fn.scrollspy.Constructor = ScrollSpy
$.fn.scrollspy = Plugin
$.fn.scrollspy.Constructor = ScrollSpy
// SCROLLSPY NO CONFLICT
// =====================
$.fn.scrollspy.noConflict = function () { // SCROLLSPY NO CONFLICT
$.fn.scrollspy = old // =====================
return this
}
$.fn.scrollspy.noConflict = function () {
$.fn.scrollspy = old
return this
}
// SCROLLSPY DATA-API
// ==================
$(window).on('load.bs.scrollspy.data-api', function () { // SCROLLSPY DATA-API
$('[data-spy="scroll"]').each(function () { // ==================
var $spy = $(this)
Plugin.call($spy, $spy.data())
})
})
$(window).on('load.bs.scrollspy.data-api', function () {
$('[data-spy="scroll"]').each(function () {
var $spy = $(this)
Plugin.call($spy, $spy.data())
})
}) })
}(); }(jQuery);
...@@ -7,128 +7,122 @@ ...@@ -7,128 +7,122 @@
* ======================================================================== */ * ======================================================================== */
+function () { 'use strict'; +function ($) {
'use strict';
(function (o_o) { // TAB CLASS DEFINITION
typeof define == 'function' && define.amd ? define(['jquery'], o_o) : // ====================
typeof exports == 'object' ? o_o(require('jquery')) : o_o(jQuery)
})(function ($) {
// TAB CLASS DEFINITION var Tab = function (element) {
// ==================== this.element = $(element)
}
var Tab = function (element) { Tab.VERSION = '3.1.1'
this.element = $(element)
}
Tab.VERSION = '3.1.1'
Tab.prototype.show = function () {
var $this = this.element
var $ul = $this.closest('ul:not(.dropdown-menu)')
var selector = $this.data('target')
if (!selector) {
selector = $this.attr('href')
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
}
if ($this.parent('li').hasClass('active')) return
var previous = $ul.find('.active:last a')[0] Tab.prototype.show = function () {
var e = $.Event('show.bs.tab', { var $this = this.element
relatedTarget: previous var $ul = $this.closest('ul:not(.dropdown-menu)')
}) var selector = $this.data('target')
$this.trigger(e)
if (e.isDefaultPrevented()) return if (!selector) {
selector = $this.attr('href')
var $target = $(selector) selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
this.activate($this.closest('li'), $ul)
this.activate($target, $target.parent(), function () {
$this.trigger({
type: 'shown.bs.tab',
relatedTarget: previous
})
})
} }
Tab.prototype.activate = function (element, container, callback) { if ($this.parent('li').hasClass('active')) return
var $active = container.find('> .active')
var transition = callback
&& $.support.transition
&& $active.hasClass('fade')
function next() { var previous = $ul.find('.active:last a')[0]
$active var e = $.Event('show.bs.tab', {
.removeClass('active') relatedTarget: previous
.find('> .dropdown-menu > .active') })
.removeClass('active')
element.addClass('active') $this.trigger(e)
if (transition) { if (e.isDefaultPrevented()) return
element[0].offsetWidth // reflow for transition
element.addClass('in')
} else {
element.removeClass('fade')
}
if (element.parent('.dropdown-menu')) { var $target = $(selector)
element.closest('li.dropdown').addClass('active')
}
callback && callback() this.activate($this.closest('li'), $ul)
this.activate($target, $target.parent(), function () {
$this.trigger({
type: 'shown.bs.tab',
relatedTarget: previous
})
})
}
Tab.prototype.activate = function (element, container, callback) {
var $active = container.find('> .active')
var transition = callback
&& $.support.transition
&& $active.hasClass('fade')
function next() {
$active
.removeClass('active')
.find('> .dropdown-menu > .active')
.removeClass('active')
element.addClass('active')
if (transition) {
element[0].offsetWidth // reflow for transition
element.addClass('in')
} else {
element.removeClass('fade')
} }
transition ? if (element.parent('.dropdown-menu')) {
$active element.closest('li.dropdown').addClass('active')
.one('bsTransitionEnd', next) }
.emulateTransitionEnd(150) :
next()
$active.removeClass('in') callback && callback()
} }
transition ?
$active
.one('bsTransitionEnd', next)
.emulateTransitionEnd(150) :
next()
// TAB PLUGIN DEFINITION $active.removeClass('in')
// ===================== }
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.tab')
if (!data) $this.data('bs.tab', (data = new Tab(this))) // TAB PLUGIN DEFINITION
if (typeof option == 'string') data[option]() // =====================
})
}
var old = $.fn.tab function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.tab')
$.fn.tab = Plugin if (!data) $this.data('bs.tab', (data = new Tab(this)))
$.fn.tab.Constructor = Tab if (typeof option == 'string') data[option]()
})
}
var old = $.fn.tab
// TAB NO CONFLICT $.fn.tab = Plugin
// =============== $.fn.tab.Constructor = Tab
$.fn.tab.noConflict = function () {
$.fn.tab = old
return this
}
// TAB NO CONFLICT
// ===============
// TAB DATA-API $.fn.tab.noConflict = function () {
// ============ $.fn.tab = old
return this
}
$(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
e.preventDefault()
Plugin.call($(this), 'show')
})
// TAB DATA-API
// ============
$(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
e.preventDefault()
Plugin.call($(this), 'show')
}) })
}(); }(jQuery);
This diff is collapsed.
...@@ -7,59 +7,53 @@ ...@@ -7,59 +7,53 @@
* ======================================================================== */ * ======================================================================== */
+function () { 'use strict'; +function ($) {
'use strict';
(function (o_o) { // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
typeof define == 'function' && define.amd ? define(['jquery'], o_o) : // ============================================================
typeof exports == 'object' ? o_o(require('jquery')) : o_o(jQuery)
})(function ($) {
// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) function transitionEnd() {
// ============================================================ var el = document.createElement('bootstrap')
function transitionEnd() { var transEndEventNames = {
var el = document.createElement('bootstrap') WebkitTransition : 'webkitTransitionEnd',
MozTransition : 'transitionend',
var transEndEventNames = { OTransition : 'oTransitionEnd otransitionend',
WebkitTransition : 'webkitTransitionEnd', transition : 'transitionend'
MozTransition : 'transitionend',
OTransition : 'oTransitionEnd otransitionend',
transition : 'transitionend'
}
for (var name in transEndEventNames) {
if (el.style[name] !== undefined) {
return { end: transEndEventNames[name] }
}
}
return false // explicit for ie8 ( ._.)
} }
// http://blog.alexmaccaw.com/css-transitions for (var name in transEndEventNames) {
$.fn.emulateTransitionEnd = function (duration) { if (el.style[name] !== undefined) {
var called = false return { end: transEndEventNames[name] }
var $el = this }
$(this).one('bsTransitionEnd', function () { called = true })
var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
setTimeout(callback, duration)
return this
} }
$(function () { return false // explicit for ie8 ( ._.)
$.support.transition = transitionEnd() }
if (!$.support.transition) return // http://blog.alexmaccaw.com/css-transitions
$.fn.emulateTransitionEnd = function (duration) {
$.event.special.bsTransitionEnd = { var called = false
bindType: $.support.transition.end, var $el = this
delegateType: $.support.transition.end, $(this).one('bsTransitionEnd', function () { called = true })
handle: function (e) { var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) setTimeout(callback, duration)
} return this
}
$(function () {
$.support.transition = transitionEnd()
if (!$.support.transition) return
$.event.special.bsTransitionEnd = {
bindType: $.support.transition.end,
delegateType: $.support.transition.end,
handle: function (e) {
if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
} }
}) }
}) })
}(); }(jQuery);
...@@ -6,6 +6,13 @@ ...@@ -6,6 +6,13 @@
// Bar animations // Bar animations
// ------------------------- // -------------------------
// WebKit
@-webkit-keyframes progress-bar-stripes {
from { background-position: 40px 0; }
to { background-position: 0 0; }
}
// Spec and IE10+
@keyframes progress-bar-stripes { @keyframes progress-bar-stripes {
from { background-position: 40px 0; } from { background-position: 40px 0; }
to { background-position: 0 0; } to { background-position: 0 0; }
......
...@@ -74,10 +74,10 @@ p { ...@@ -74,10 +74,10 @@ p {
// Emphasis & misc // Emphasis & misc
// ------------------------- // -------------------------
// Ex: 14px base font * 85% = about 12px // Ex: (12px small font / 14px base font) * 100% = about 85%
small, small,
.small { .small {
font-size: 85%; font-size: floor((100% * @font-size-small / @font-size-base));
} }
// Undo browser default styling // Undo browser default styling
......
...@@ -822,6 +822,8 @@ ...@@ -822,6 +822,8 @@
// //
//## //##
//** Horizontal offset for forms and lists.
@component-offset-horizontal: 180px;
//** Text muted color //** Text muted color
@text-muted: @gray-light; @text-muted: @gray-light;
//** Abbreviations and acronyms border color //** Abbreviations and acronyms border color
...@@ -838,14 +840,7 @@ ...@@ -838,14 +840,7 @@
@page-header-border-color: @gray-lighter; @page-header-border-color: @gray-lighter;
//** Width of horizontal description list titles //** Width of horizontal description list titles
@dl-horizontal-offset: @component-offset-horizontal; @dl-horizontal-offset: @component-offset-horizontal;
//== Miscellaneous
//
//##
//** Horizontal line color. //** Horizontal line color.
@hr-border: @gray-lighter; @hr-border: @gray-lighter;
//** Horizontal offset for forms and lists.
@component-offset-horizontal: 180px;
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment